protected ActionMessages[] validate(
      HttpServletRequest httpServletRequest, LazyValidatorForm frm) {
    IranianInfo infMaster =
        (IranianInfo) httpServletRequest.getSession().getAttribute("personData");
    String fatherContradictionErrors = "";
    String motherContradictionErrors = "";
    ActionMessages[] msgs = new ActionMessages[2];
    ActionMessages msgsErrors = new ActionMessages();
    ActionMessages msgsWarnings = new ActionMessages();
    PersonInfo fatherInfo = null;
    boolean fatherFoundInDb = false;
    PersonInfo motherInfo = null;
    boolean motherFoundInDb = false;

    try {

      String fatherNin = ((String) frm.get(FATHER_NIN)).trim();
      if (Utils.isEmpty(fatherNin)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "شماره ملي پدر");
        setFocusControl(frm, FATHER_NIN);
      } else if (!Utils.isValidNin(fatherNin)) {
        addError(msgsErrors, FIELD_INVALID, "شماره ملي پدر");
        setFocusControl(frm, FATHER_NIN);
      } else {
        fatherInfo = (new Person()).getPersonBrief(Long.parseLong(fatherNin));

        if ((fatherInfo == null)
            || (fatherInfo != null
                && !(fatherInfo.getSexCode().equalsIgnoreCase(Constants.Sex.MALE)))) {

          addError(msgsErrors, NOT_EXISTS, "شماره ملي پدر");
          setFocusControl(frm, FATHER_NIN);
        }
        // else {
        /*StoppedServiceRules.StopServiceCheckResult result = StoppedServiceRules.doStopService(DCUServices.Iranian_Birth_Registration, DCUActors.Father, Long.parseLong(fatherNin));
        if (result.doStop
        */
        /* (new Person()).existStopServices(Long.parseLong(fatherNin))*/
        /*) {
          addError(msgsErrors, STOPED_SERVICES, "شماره ملي پدر");
          setFocusControl(frm, FATHER_NIN);
        }*/
        else {
          infMaster.setFatherNin(Long.parseLong(fatherNin));
          fatherFoundInDb = true;

          if (fatherInfo.isDead()
              && !Utils.isEmpty((String) frm.get(ANNOUNCER_RELATION_CODE))
              && (Short.parseShort((String) frm.get(ANNOUNCER_RELATION_CODE))
                      == Constants.RelationCode.FATHER
                  || Short.parseShort((String) frm.get(ANNOUNCER_RELATION_CODE))
                      == Constants.RelationCode.PARENTS
                  || Short.parseShort((String) frm.get(ANNOUNCER_RELATION_CODE))
                      == Constants.RelationCode.MOTHER_ATTORNEY_AND_FATHER)) {
            addError(msgsErrors, SHOULD_BE_ALIVE, "پدر به عنوان اعلام كننده");
            setFocusControl(frm, FATHER_NIN);
          }
          // 13920312
          if (Utils.nvl(fatherInfo.getIsExcepted())
                  .equalsIgnoreCase(Constants.ExceptionStatus.IS_EXCEPTED)
              && Utils_3F.isErrorStagnant(
                  Person.getExceptionCode(
                      fatherInfo.getPersonNin(), Constants.StagnantCode.STAGNANT_PARENT))
          /*&&
          (getFormMode(frm).equalsIgnoreCase(Constants.ActionType.ADD) ||
                  (getFormMode(frm).equalsIgnoreCase(Constants.ActionType.MODIFY) &&
                          !Utils.isEmpty((String) frm.get(FATHER_NIN)) &&
                          fatherInfo.getPersonNin() != infMaster.getFatherNin()))*/
          ) {
            addError(msgsErrors, "errStagnant_3F", "شماره ملي پدر");
            setFocusControl(frm, FATHER_NIN);
          }
          // 13920312
          if (fatherInfo != null
              && !Utils.isEmpty(fatherNin)
              && Utils.isValidNin(fatherNin)
              && fatherInfo.isDead()
              && Person.getLiveStatus(Long.parseLong(fatherNin))
              && !Utils.isEmpty((String) frm.get(DATE_OF_BIRTH_SUN))) {
            String fatherDeathDate = Utils.nvl(Person.getDeathDateByNin(Long.parseLong(fatherNin)));
            if (!Utils.isEmpty(fatherDeathDate)
                && Utils_3F.tenMonthBefore(
                            DateUtils.unformatRevFormattedFdate(
                                (String) frm.get(DATE_OF_BIRTH_SUN)))
                        .compareTo(fatherDeathDate)
                    > 0) {
              addError(msgsErrors, "errTenMonthFatherDeathDate_3F");
              setFocusControl(frm, FATHER_NIN);
            }
          }
          if (fatherInfo != null
              && !Utils.isEmpty(fatherNin)
              && Utils.isValidNin(fatherNin)
              && fatherInfo.isDead()
              && !Person.getLiveStatus(Long.parseLong(fatherNin))) {
            addError(msgsWarnings, "errFatherIsDead_3F");
            setFocusControl(frm, FATHER_NIN);
            fatherContradictionErrors =
                fatherContradictionErrors
                    + Constants.ContradictionErrors.ERR_FATHER_IS_DEAD
                    + Constants.DATA_SEPARATOR;
          }
        }
      }

      String fatherShenasNo = ((String) frm.get(FATHER_SHENAS_NO)).trim();
      if (Utils.isEmpty(fatherShenasNo)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "شماره شناسنامه پدر");
        setFocusControl(frm, FATHER_SHENAS_NO);
      } else if (!Utils.isValidNumber(fatherShenasNo, 6)) {
        addError(msgsErrors, FIELD_INVALID, "شماره شناسنامه پدر");
        setFocusControl(frm, FATHER_SHENAS_NO);
      } else {
        infMaster.setFatherShenasNo(Integer.parseInt(fatherShenasNo));
        if (!Utils.isEmpty(fatherShenasNo)
            && fatherFoundInDb
            && !fatherShenasNo.equalsIgnoreCase(fatherInfo.getShenasnameNo())) {
          addError(msgsWarnings, HAS_CONTRADICTION, "شماره شناسنامه پدر");
          setFocusControl(frm, FATHER_SHENAS_NO);
          fatherContradictionErrors =
              fatherContradictionErrors
                  + Constants.ContradictionErrors.ERR_FATHER_SHENAS_NO
                  + Constants.DATA_SEPARATOR;
        }
      }

      String fatherName = (String) frm.get(FATHER_NAME);
      fatherName = Utils.charVal(fatherName);
      frm.set(FATHER_NAME, fatherName);
      String sexCodeM = (String) frm.get(SEX_CODE_M);
      String sexCodeF = (String) frm.get(SEX_CODE_F);
      String sex = null;
      String checkSiadat = null;
      if (!Utils.isEmpty(sexCodeM)) {
        sex = Constants.Sex.MALE;
      } else if (!Utils.isEmpty(sexCodeF)) {
        sex = Constants.Sex.FEMALE;
      }
      if (!(!Utils.isEmpty(sexCodeM) && !Utils.isEmpty(sexCodeF)) && !Utils.isEmpty(sex)) {

        checkSiadat =
            Utils_3F.siadat(fatherName, Utils.charVal((String) frm.get(PERSON_NAME)), sex);
        if (Utils.isEmpty(checkSiadat) && fatherInfo != null) {
          checkSiadat =
              Utils_3F.siadat(
                  fatherName,
                  fatherInfo.getFatherName(),
                  Utils.charVal((String) frm.get(PERSON_NAME)),
                  sex);
        }
      }
      if (Utils.isEmpty(fatherName)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "نام پدر");
        setFocusControl(frm, FATHER_NAME);
      } else if (fatherName.length() > 50) {
        addError(msgsErrors, FIELD_INVALID, "نام پدر");
        setFocusControl(frm, FATHER_NAME);
      }

      if (!Utils.isEmpty(checkSiadat)) {
        addError(msgsErrors, checkSiadat, "");
        setFocusControl(frm, FATHER_NAME);
      } else {
        infMaster.setFatherName(fatherName);
        if (!Utils.isEmpty(fatherName)
            && fatherFoundInDb
            && !fatherName.equalsIgnoreCase(Utils.charVal(fatherInfo.getPersonName()))) {
          addError(msgsWarnings, HAS_CONTRADICTION, "نام پدر");
          setFocusControl(frm, FATHER_NAME);
          fatherContradictionErrors =
              fatherContradictionErrors
                  + Constants.ContradictionErrors.ERR_FATHER_NAME
                  + Constants.DATA_SEPARATOR;
        }
      }

      String fatherFname = (String) frm.get(FATHER_FNAME);
      fatherFname = Utils.charVal(fatherFname);
      frm.set(FATHER_FNAME, fatherFname);
      if (Utils.isEmpty(fatherFname)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "نام خانوادگي پدر");
        setFocusControl(frm, FATHER_FNAME);
      } else if (fatherFname.length() > 50) {
        addError(msgsErrors, FIELD_INVALID, "نام خانوادگي پدر");
        setFocusControl(frm, FATHER_FNAME);
      } else {
        infMaster.setFatherFname(fatherFname);

        if (!Utils.isEmpty(fatherFname)
            && fatherFoundInDb
            && !fatherFname.equalsIgnoreCase(Utils.charVal(fatherInfo.getPersonFname()))) {
          addError(msgsWarnings, HAS_CONTRADICTION, "نام خانوادگي پدر");

          setFocusControl(frm, FATHER_FNAME);

          fatherContradictionErrors =
              fatherContradictionErrors
                  + Constants.ContradictionErrors.ERR_FATHER_FNAME
                  + Constants.DATA_SEPARATOR;
        }
        String personFname = (String) frm.get(PERSON_FNAME);
        if (!fatherFname.equals(personFname) && !Utils.isEmpty(personFname)) {
          addError(msgsWarnings, HAS_CONTRADICTION, "نام خانوادگي پدر و فرزند ");
          fatherContradictionErrors =
              fatherContradictionErrors
                  + Constants.ContradictionErrors.ERR_MATCH_FATHER_FAME_PERSON_FNAME
                  + Constants.DATA_SEPARATOR;
        }
      }

      String fatherShenasSeri = (String) frm.get(FATHER_SHENAS_SERI);
      fatherShenasSeri = Utils.charVal2(fatherShenasSeri);
      frm.set(FATHER_SHENAS_SERI, fatherShenasSeri);
      if (Utils.isEmpty(fatherShenasSeri)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "سري شناسنامه پدر");
        setFocusControl(frm, FATHER_SHENAS_SERI);
      } else if (fatherShenasSeri.length() > 3) {
        addError(msgsErrors, FIELD_INVALID, "سري شناسنامه پدر");
        setFocusControl(frm, FATHER_SHENAS_SERI);
      } else {
        infMaster.setFatherShenasSeri(fatherShenasSeri);
        if (!Utils.isEmpty(fatherShenasSeri)
            && fatherFoundInDb
            && !fatherShenasSeri.equalsIgnoreCase(Utils.charVal2(fatherInfo.getShenasnameSeri()))) {
          addError(msgsWarnings, HAS_CONTRADICTION, "سري شناسنامه پدر");
          setFocusControl(frm, FATHER_SHENAS_SERI);
          fatherContradictionErrors =
              fatherContradictionErrors
                  + Constants.ContradictionErrors.ERR_FATHER_SHENAS_SERI
                  + Constants.DATA_SEPARATOR;
        }
      }

      String fatherShenasSrno = ((String) frm.get(FATHER_SHENAS_SRNO)).trim();
      if (Utils.isEmpty(fatherShenasSrno)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "شماره مسلسل شناسنامه پدر");
        setFocusControl(frm, FATHER_SHENAS_SRNO);
      } else if (!Utils.isValidNumber(fatherShenasSrno, 6)) {
        addError(msgsErrors, FIELD_INVALID, "شماره مسلسل شناسنامه پدر");
        setFocusControl(frm, FATHER_SHENAS_SRNO);
      } else {
        infMaster.setFatherShenasSrno(Integer.parseInt(fatherShenasSrno));
        if (!Utils.isEmpty(fatherShenasSrno)
            && fatherFoundInDb
            && !fatherShenasSrno.equalsIgnoreCase(fatherInfo.getShenasnameSrno())) {
          addError(msgsWarnings, HAS_CONTRADICTION, "شماره مسلسل شناسنامه پدر");
          setFocusControl(frm, FATHER_SHENAS_SRNO);
          fatherContradictionErrors =
              fatherContradictionErrors
                  + Constants.ContradictionErrors.ERR_FATHER_SHENAS_SRNO
                  + Constants.DATA_SEPARATOR;
        }
      }

      String fatherDateOfBirth = ((String) frm.get(FATHER_DATE_OF_BIRTH)).trim();
      boolean fatherDateOfBirthIsFull = true;
      String fatherDateOfBirthNaghes = "";
      if (!Utils.isEmpty(fatherDateOfBirth)) {
        String date[] = fatherDateOfBirth.split(Constants.DATE_SEPARATOR);

        if (date.length != 3 && fatherDateOfBirth.length() < 8) {
          fatherDateOfBirthIsFull = false;
          for (int i = date.length; i > 0; --i) {
            fatherDateOfBirthNaghes = fatherDateOfBirthNaghes + date[i - 1];
          }
        }
      }
      if (Utils.isEmpty(fatherDateOfBirth)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "تاريخ تولد پدر");
        setFocusControl(frm, FATHER_DATE_OF_BIRTH);
      } else if (fatherDateOfBirthIsFull
          && !DateUtils.isValidRevFormattedFDate(fatherDateOfBirth)) {
        addError(msgsErrors, FIELD_INVALID, "تاريخ تولد پدر");
        setFocusControl(frm, FATHER_DATE_OF_BIRTH);
      } else if (fatherDateOfBirthIsFull
          && DateUtils.unformatRevFormattedFdate(fatherDateOfBirth).compareTo(DateUtils.fDate())
              > 0) {
        addError(msgsErrors, SHOULD_BE_LESS_EQUAL, "تاريخ تولد پدر", "تاريخ روز");
        setFocusControl(frm, FATHER_DATE_OF_BIRTH);
      } else if (!fatherDateOfBirthIsFull
          && !Utils.isValidNotZeroNumber(fatherDateOfBirthNaghes, 8)) {
        addError(msgsErrors, FIELD_INVALID, "تاريخ تولد پدر");
        setFocusControl(frm, FATHER_DATE_OF_BIRTH);
      } else {
        if (fatherDateOfBirthIsFull) {
          infMaster.setFatherDateOfBirth(DateUtils.unformatRevFormattedFdate(fatherDateOfBirth));
        } else {
          infMaster.setFatherDateOfBirth(fatherDateOfBirthNaghes);
        }
        if (!Utils.isEmpty(fatherFname)
            && fatherFoundInDb
            && !(infMaster.getFatherDateOfBirth())
                .equalsIgnoreCase(fatherInfo.getDateOfBirthSun())) {
          addError(msgsWarnings, HAS_CONTRADICTION, "تاريخ تولد پدر");
          setFocusControl(frm, FATHER_DATE_OF_BIRTH);
          fatherContradictionErrors =
              fatherContradictionErrors
                  + Constants.ContradictionErrors.ERR_FATHER_DATE_OF_BIRTH
                  + Constants.DATA_SEPARATOR;
        }
      }

      /*  if (!Utils.isEmpty(fatherDateOfBirth)) {
         if (!DateUtils.isValidRevFormattedFDate(fatherDateOfBirth)) {
           addError(msgsErrors, FIELD_INVALID, "تاريخ تولد پدر");
           setFocusControl(frm, FATHER_DATE_OF_BIRTH);
         }
         else if (DateUtils.unformatRevFormattedFdate(
             fatherDateOfBirth).compareTo(DateUtils.fDate()) >= 0) {
      addError(msgsErrors, SHOULD_BE_LESS, "تاريخ تولد پدر", "تاريخ روز");
           setFocusControl(frm, FATHER_DATE_OF_BIRTH);
         }
         else {
           infMaster.setFatherDateOfBirth(DateUtils.unformatRevFormattedFdate(
               fatherDateOfBirth));
           //              if (!Utils.isEmpty(fatherDateOfBirth) && fatherFoundInDb &&
           //       !fatherDateOfBirth.equalsIgnoreCase(fatherInfo.getDateOfBirthSun())) {
           //       addError(msgsWarnings, HAS_CONTRADICTION, "تاريخ تولد پدر");
           //                setFocusControl(frm, FATHER_DATE_OF_BIRTH);
           //                 fatherContradiction = true;
           //             }
         }
       }
       else {
         infMaster.setFatherDateOfBirth("");

       }*/

      /*    String fatherShenasIssuePlace = (String) frm.get(
          FATHER_SHENAS_ISSUE_PLACE);
       if (Utils.isEmpty(fatherShenasIssuePlace)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "اداره محل صدور پدر");
        setFocusControl(frm, FATHER_SHENAS_ISSUE_PLACE);
      }
      else if (fatherShenasIssuePlace.length() > 50) {
        addError(msgsErrors, FIELD_INVALID, "اداره محل صدور پدر");
        setFocusControl(frm, FATHER_SHENAS_ISSUE_PLACE);
      }
      else {
        infMaster.setFatherShenasIssuePlace(fatherShenasIssuePlace);
       }*/
      String fatherOfficeCode = ((String) frm.get(FATHER_OFFICE_CODE)).trim();
      if (Utils.isEmpty(fatherOfficeCode)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "اداره محل صدور پدر");
        setFocusControl(frm, FATHER_OFFICE_CODE);
      } else if (fatherOfficeCode.length() > 3) {
        addError(msgsErrors, FIELD_INVALID, "اداره محل صدور پدر");
        setFocusControl(frm, FATHER_OFFICE_CODE);
      } else {
        infMaster.setFatherOfficeCode(Short.parseShort(fatherOfficeCode));
      }

      /*  String fatherHozeh = (String) frm.get(FATHER_HOZEH);
      fatherHozeh = Utils.charVal2(fatherHozeh);
      frm.set(FATHER_HOZEH, fatherHozeh);
      if (fatherHozeh.length() > 50) {
        addError(msgsErrors, FIELD_INVALID, "حوزه پدر");
        setFocusControl(frm, FATHER_HOZEH);
      }
      else {
        infMaster.setFatherHozeh(fatherHozeh);
      }*/

      String fatherHozehCodeKind = ((String) frm.get(FATHER_HOZEH_CODE_KIND)).trim();
      if (!Utils.isEmpty(fatherHozehCodeKind) && !fatherHozehCodeKind.startsWith("irth")) {
        String key[] = fatherHozehCodeKind.split(Constants.DATA_SEPARATOR_SPLIT);
        String fatherHozehCode = key[0];

        if (Utils.isEmpty(fatherHozehCode)) {
          addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "كد حوزه پدر");
          setFocusControl(frm, FATHER_HOZEH_CODE_KIND);
        } else if (fatherHozehCode.length() > 3) {
          addError(msgsErrors, FIELD_INVALID, "كد حوزه پدر");
          setFocusControl(frm, FATHER_HOZEH_CODE_KIND);
        } else {
          infMaster.setFatherHozehCode(Short.parseShort(fatherHozehCode));
        }

        String fatherHozehKind = key[1];
        if (Utils.isEmpty(fatherHozehKind)) {
          addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "نوع حوزه پدر");
          setFocusControl(frm, FATHER_HOZEH_CODE_KIND);
        } else if (fatherHozehKind.length() > 1) {
          addError(msgsErrors, FIELD_INVALID, "نوع حوزه پدر");
          setFocusControl(frm, FATHER_HOZEH_CODE_KIND);
        } else {
          infMaster.setFatherHozehKind(fatherHozehKind);
        }
      } else {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "حوزه پدر");
        setFocusControl(frm, FATHER_HOZEH_CODE_KIND);
      }

      String fatherZipCode = ((String) frm.get(FATHER_ZIP_CODE)).trim();
      if (!Utils.isEmpty(fatherZipCode)) {
        if (!Utils.isValidZipCode(fatherZipCode)) {
          addError(msgsErrors, FIELD_INVALID, "كد پستي پدر");
          setFocusControl(frm, FATHER_ZIP_CODE);
        } else {
          infMaster.setFatherZipCode(Long.parseLong(fatherZipCode));
        }
      } else {
        infMaster.setFatherZipCode(0);
      }

      /* String fatherAddressGeoSerial = ( (String) frm.get(
          FATHER_ADDRESS_GEO_SERIAL)).
          trim();
      if (!Utils.isEmpty(fatherAddressGeoSerial)) {
        if (searchFatherAddressGeoSerial(frm) == false) {
          addError(msgsErrors, FIELD_INVALID, "سريال محل اقامت");
          setFocusControl(frm, FATHER_ADDRESS_GEO_SERIAL);
        }
        else {
          infMaster.setFatherAddressGeoSerial(Integer.parseInt(
              fatherAddressGeoSerial));
        }
      }
      else {*/
      infMaster.setFatherAddressGeoSerial(0);
      //  }

      String fatherAddress = (String) frm.get(FATHER_ADDRESS);
      fatherAddress = Utils.charVal2(fatherAddress);
      if (Utils.isEmpty(fatherAddress)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "آدرس محل اقامت پدر");
        setFocusControl(frm, FATHER_ADDRESS);
      } else if (fatherAddress.length() > 255) {
        addError(msgsErrors, SHOULD_BE_LESS, "طول آدرس محل اقامت پدر", "255 كاراكتر");
        setFocusControl(frm, FATHER_ADDRESS);
      } else {
        infMaster.setFatherAddress(fatherAddress);
      }

      if (fatherFoundInDb
          && !Utils.isEmpty(fatherInfo.getFamilyNameChangeFlag())
          && fatherInfo.getFamilyNameChangeFlag().equalsIgnoreCase(Constants.ChangeFlag.NOT_READ)) {
        addError(msgsWarnings, HAS_MIM, "ركورد پدر");
        setFocusControl(frm, FATHER_NIN);
        fatherContradictionErrors =
            fatherContradictionErrors
                + Constants.ContradictionErrors.ERR_FATHER_HAS_MIM
                + Constants.DATA_SEPARATOR;
      }

      String motherNin = ((String) frm.get(MOTHER_NIN)).trim();
      if (Utils.isEmpty(motherNin)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "شماره ملي مادر");
        setFocusControl(frm, MOTHER_NIN);
      } else if (!Utils.isValidNin(motherNin)) {
        addError(msgsErrors, FIELD_INVALID, "شماره ملي مادر");
        setFocusControl(frm, MOTHER_NIN);
      } else {
        motherInfo = (new Person()).getPersonBrief(Long.parseLong(motherNin));

        if (motherInfo == null
            || (motherInfo != null
                && !motherInfo.getSexCode().equalsIgnoreCase(Constants.Sex.FEMALE))) {
          addError(msgsErrors, NOT_EXISTS, "شماره ملي مادر");
          setFocusControl(frm, MOTHER_NIN);
        } else {
          if ((new Person()).existStopServices(Long.parseLong(motherNin))) {
            addError(msgsErrors, STOPED_SERVICES, "شماره ملي مادر");
            setFocusControl(frm, MOTHER_NIN);
          } else {
            infMaster.setMotherNin(Long.parseLong(motherNin));
            motherFoundInDb = true;

            if (motherInfo.isDead()
                && !Utils.isEmpty((String) frm.get(ANNOUNCER_RELATION_CODE))
                && (Short.parseShort((String) frm.get(ANNOUNCER_RELATION_CODE))
                        == Constants.RelationCode.MOTHER
                    || Short.parseShort((String) frm.get(ANNOUNCER_RELATION_CODE))
                        == Constants.RelationCode.PARENTS
                    || Short.parseShort((String) frm.get(ANNOUNCER_RELATION_CODE))
                        == Constants.RelationCode.ANCESTOR_AND_MOTHER
                    || Short.parseShort((String) frm.get(ANNOUNCER_RELATION_CODE))
                        == Constants.RelationCode.FATHER_ATTORNEY_AND_MOTHER)) {
              addError(msgsErrors, SHOULD_BE_ALIVE, "مادر به عنوان اعلام كننده");
              setFocusControl(frm, MOTHER_NIN);
            }
          }
          // 13920312
          if (Utils.nvl(motherInfo.getIsExcepted())
                  .equalsIgnoreCase(Constants.ExceptionStatus.IS_EXCEPTED)
              && Utils_3F.isErrorStagnant(
                  Person.getExceptionCode(
                      motherInfo.getPersonNin(), Constants.StagnantCode.STAGNANT_PARENT))) {
            addError(msgsErrors, "errStagnant_3F", "شماره ملي مادر");
            setFocusControl(frm, FATHER_NIN);
          }
          // 13920312
        }
      }

      String motherShenasNo = ((String) frm.get(MOTHER_SHENAS_NO)).trim();
      if (Utils.isEmpty(motherShenasNo)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "شماره شناسنامه مادر");
        setFocusControl(frm, MOTHER_SHENAS_NO);
      } else if (!Utils.isValidNumber(motherShenasNo, 6)) {
        addError(msgsErrors, FIELD_INVALID, "شماره شناسنامه مادر");
        setFocusControl(frm, MOTHER_SHENAS_NO);
      } else {
        infMaster.setMotherShenasNo(Integer.parseInt(motherShenasNo));

        if (!Utils.isEmpty(motherShenasNo)
            && motherFoundInDb
            && !(motherShenasNo.equalsIgnoreCase(motherInfo.getShenasnameNo()))) {
          addError(msgsWarnings, HAS_CONTRADICTION, "شماره شناسنامه مادر");
          setFocusControl(frm, MOTHER_SHENAS_NO);
          motherContradictionErrors =
              motherContradictionErrors
                  + Constants.ContradictionErrors.ERR_MOTHER_SHENAS_NO
                  + Constants.DATA_SEPARATOR;
        }
      }

      String motherName = (String) frm.get(MOTHER_NAME);
      motherName = Utils.charVal(motherName);
      frm.set(MOTHER_NAME, motherName);
      if (Utils.isEmpty(motherName)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "نام مادر");
        setFocusControl(frm, MOTHER_NAME);
      } else if (motherName.length() > 50) {
        addError(msgsErrors, FIELD_INVALID, "نام مادر");
        setFocusControl(frm, MOTHER_NAME);
      } else {
        infMaster.setMotherName(motherName);
        if (!Utils.isEmpty(motherName)
            && motherFoundInDb
            && !motherName.equalsIgnoreCase(Utils.charVal(motherInfo.getPersonName()))) {
          addError(msgsWarnings, HAS_CONTRADICTION, "نام مادر");
          setFocusControl(frm, MOTHER_NAME);
          motherContradictionErrors =
              motherContradictionErrors
                  + Constants.ContradictionErrors.ERR_MOTHER_NAME
                  + Constants.DATA_SEPARATOR;
        }
      }

      String motherFname = (String) frm.get(MOTHER_FNAME);
      motherFname = Utils.charVal(motherFname);
      frm.set(MOTHER_FNAME, motherFname);
      if (Utils.isEmpty(motherFname)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "نام خانوادگي مادر");
        setFocusControl(frm, MOTHER_FNAME);
      } else if (motherFname.length() > 50) {
        addError(msgsErrors, FIELD_INVALID, "نام خانوادگي مادر");
        setFocusControl(frm, MOTHER_FNAME);
      } else {
        infMaster.setMotherFname(motherFname);
        if (!Utils.isEmpty(motherFname)
            && motherFoundInDb
            && !motherFname.equalsIgnoreCase(Utils.charVal(motherInfo.getPersonFname()))) {
          addError(msgsWarnings, HAS_CONTRADICTION, "نام خانوادگي مادر");
          setFocusControl(frm, MOTHER_FNAME);
          motherContradictionErrors =
              motherContradictionErrors
                  + Constants.ContradictionErrors.ERR_MOTHER_FNAME
                  + Constants.DATA_SEPARATOR;
        }
      }

      String motherShenasSeri = (String) frm.get(MOTHER_SHENAS_SERI);
      motherShenasSeri = Utils.charVal2(motherShenasSeri);
      frm.set(MOTHER_SHENAS_SERI, motherShenasSeri);
      if (Utils.isEmpty(motherShenasSeri)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "سري شناسنامه مادر");
        setFocusControl(frm, MOTHER_SHENAS_SERI);
      } else if (motherShenasSeri.length() > 3) {
        addError(msgsErrors, FIELD_INVALID, "سري شناسنامه مادر");
        setFocusControl(frm, MOTHER_SHENAS_SERI);
      } else {
        infMaster.setMotherShenasSeri(motherShenasSeri);
        if (!Utils.isEmpty(motherShenasSeri)
            && motherFoundInDb
            && !motherShenasSeri.equalsIgnoreCase(Utils.charVal2(motherInfo.getShenasnameSeri()))) {
          addError(msgsWarnings, HAS_CONTRADICTION, "سري شناسنامه مادر");
          setFocusControl(frm, MOTHER_SHENAS_SERI);
          motherContradictionErrors =
              motherContradictionErrors
                  + Constants.ContradictionErrors.ERR_MOTHER_SHENAS_SERI
                  + Constants.DATA_SEPARATOR;
        }
      }

      String motherShenasSrno = ((String) frm.get(MOTHER_SHENAS_SRNO)).trim();
      if (Utils.isEmpty(motherShenasSrno)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "شماره مسلسل شناسنامه مادر");
        setFocusControl(frm, MOTHER_SHENAS_SRNO);
      } else if (!Utils.isValidNumber(motherShenasSrno, 6)) {
        addError(msgsErrors, FIELD_INVALID, "شماره مسلسل شناسنامه مادر");
        setFocusControl(frm, MOTHER_SHENAS_SRNO);
      } else {
        infMaster.setMotherShenasSrno(Integer.parseInt(motherShenasSrno));
        if (!Utils.isEmpty(motherShenasSrno)
            && motherFoundInDb
            && !motherShenasSrno.equalsIgnoreCase(motherInfo.getShenasnameSrno())) {
          addError(msgsWarnings, HAS_CONTRADICTION, "شماره مسلسل شناسنامه مادر");
          setFocusControl(frm, MOTHER_SHENAS_SRNO);
          motherContradictionErrors =
              motherContradictionErrors
                  + Constants.ContradictionErrors.ERR_MOTHER_SHENAS_SRNO
                  + Constants.DATA_SEPARATOR;
        }
      }

      String motherDateOfBirth = ((String) frm.get(MOTHER_DATE_OF_BIRTH)).trim();
      boolean motherDateOfBirthIsFull = true;
      String motherDateOfBirthNaghes = "";
      if (!Utils.isEmpty(motherDateOfBirth)) {
        String date[] = motherDateOfBirth.split(Constants.DATE_SEPARATOR);

        if (date.length != 3 && motherDateOfBirth.length() < 8) {
          motherDateOfBirthIsFull = false;
          for (int i = date.length; i > 0; --i) {
            motherDateOfBirthNaghes = motherDateOfBirthNaghes + date[i - 1];
          }
        }
      }
      if (Utils.isEmpty(motherDateOfBirth)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "تاريخ تولد مادر");
        setFocusControl(frm, MOTHER_DATE_OF_BIRTH);
      } else if (motherDateOfBirthIsFull
          && !DateUtils.isValidRevFormattedFDate(motherDateOfBirth)) {
        addError(msgsErrors, FIELD_INVALID, "تاريخ تولد مادر");
        setFocusControl(frm, MOTHER_DATE_OF_BIRTH);
      } else if (motherDateOfBirthIsFull
          && DateUtils.unformatRevFormattedFdate(motherDateOfBirth).compareTo(DateUtils.fDate())
              > 0) {
        addError(msgsErrors, SHOULD_BE_LESS_EQUAL, "تاريخ تولد مادر", "تاريخ روز");
        setFocusControl(frm, MOTHER_DATE_OF_BIRTH);
      } else if (!motherDateOfBirthIsFull
          && !Utils.isValidNotZeroNumber(motherDateOfBirthNaghes, 8)) {
        addError(msgsErrors, FIELD_INVALID, "تاريخ تولد مادر");
        setFocusControl(frm, MOTHER_DATE_OF_BIRTH);

      } else {
        if (motherDateOfBirthIsFull) {
          infMaster.setMotherDateOfBirth(DateUtils.unformatRevFormattedFdate(motherDateOfBirth));
        } else {
          infMaster.setMotherDateOfBirth(motherDateOfBirthNaghes);
        }
        if (!Utils.isEmpty(motherFname)
            && motherFoundInDb
            && !(infMaster.getMotherDateOfBirth())
                .equalsIgnoreCase(motherInfo.getDateOfBirthSun())) {
          addError(msgsWarnings, HAS_CONTRADICTION, "تاريخ تولد مادر");
          setFocusControl(frm, MOTHER_DATE_OF_BIRTH);
          motherContradictionErrors =
              motherContradictionErrors
                  + Constants.ContradictionErrors.ERR_MOTHER_DATE_OF_BIRTH
                  + Constants.DATA_SEPARATOR;
        }
      }

      /* String motherDateOfBirth = ( (String) frm.get(MOTHER_DATE_OF_BIRTH)).
          trim();
      if (!Utils.isEmpty(motherDateOfBirth)) {
        if (!DateUtils.isValidRevFormattedFDate(motherDateOfBirth)) {
          addError(msgsErrors, FIELD_INVALID, "تاريخ تولد مادر");
          setFocusControl(frm, MOTHER_DATE_OF_BIRTH);
        }
        else if (DateUtils.unformatRevFormattedFdate(
            motherDateOfBirth).compareTo(DateUtils.fDate()) >= 0) {
      addError(msgsErrors, SHOULD_BE_LESS, "تاريخ تولد مادر", "تاريخ روز");
          setFocusControl(frm, MOTHER_DATE_OF_BIRTH);
        }
        else {
          infMaster.setMotherDateOfBirth(DateUtils.unformatRevFormattedFdate(
              motherDateOfBirth));
          //           if (!Utils.isEmpty(motherDateOfBirth) && motherFoundInDb &&
          //        !motherDateOfBirth.equalsIgnoreCase(motherInfo.getDateOfBirthSun())) {
          //            addError(msgsWarnings, HAS_CONTRADICTION, "تاريخ تولد مادر");
          //           setFocusControl(frm, MOTHER_DATE_OF_BIRTH);
          //           motherContradiction = true;
          //         }
        }
      }
      else {
        infMaster.setMotherDateOfBirth("");
      }*/

      /*    String motherShenasIssuePlace = (String) frm.get(
             MOTHER_SHENAS_ISSUE_PLACE);

             if (Utils.isEmpty(motherShenasIssuePlace)) {
      addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "اداره محل صدور مادر");
           setFocusControl(frm, MOTHER_SHENAS_ISSUE_PLACE);
         }
         else if (motherShenasIssuePlace.length() > 50) {
           addError(msgsErrors, FIELD_INVALID, "اداره محل صدور مادر");
           setFocusControl(frm, MOTHER_SHENAS_ISSUE_PLACE);
         }
         else {
           infMaster.setMotherShenasIssuePlace(motherShenasIssuePlace);
         }*/

      String motherOfficeCode = ((String) frm.get(MOTHER_OFFICE_CODE)).trim();
      if (Utils.isEmpty(motherOfficeCode)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "اداره محل صدور مادر");
        setFocusControl(frm, MOTHER_OFFICE_CODE);
      } else if (motherOfficeCode.length() > 3) {
        addError(msgsErrors, FIELD_INVALID, "اداره محل صدور مادر");
        setFocusControl(frm, MOTHER_OFFICE_CODE);
      } else {
        infMaster.setMotherOfficeCode(Short.parseShort(motherOfficeCode));
      }

      /*String motherHozeh = (String) frm.get(MOTHER_HOZEH);
           motherHozeh = Utils.charVal2(motherHozeh);
           frm.set(MOTHER_HOZEH, motherHozeh);
           if (motherHozeh.length() > 50) {
      addError(msgsErrors, FIELD_INVALID, "حوزه مادر");
      setFocusControl(frm, MOTHER_HOZEH);
           }
           else {
      infMaster.setMotherHozeh(motherHozeh);
           }*/

      String motherHozehCodeKind = ((String) frm.get(MOTHER_HOZEH_CODE_KIND)).trim();
      if (!Utils.isEmpty(motherHozehCodeKind) && !motherHozehCodeKind.startsWith("irth")) {
        String key[] = motherHozehCodeKind.split(Constants.DATA_SEPARATOR_SPLIT);
        String motherHozehCode = key[0];

        if (Utils.isEmpty(motherHozehCode)) {
          addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "كد حوزه مادر");
          setFocusControl(frm, MOTHER_HOZEH_CODE_KIND);
        } else if (motherHozehCode.length() > 3) {
          addError(msgsErrors, FIELD_INVALID, "كد حوزه مادر");
          setFocusControl(frm, MOTHER_HOZEH_CODE_KIND);
        } else {
          infMaster.setMotherHozehCode(Short.parseShort(motherHozehCode));
        }

        String motherHozehKind = key[1];
        if (Utils.isEmpty(motherHozehKind)) {
          addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "نوع حوزه مادر");
          setFocusControl(frm, MOTHER_HOZEH_CODE_KIND);
        } else if (motherHozehKind.length() > 1) {
          addError(msgsErrors, FIELD_INVALID, "نوع حوزه مادر");
          setFocusControl(frm, MOTHER_HOZEH_CODE_KIND);
        } else {
          infMaster.setMotherHozehKind(motherHozehKind);
        }
      } else {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "حوزه مادر");
        setFocusControl(frm, MOTHER_HOZEH_CODE_KIND);
      }

      String motherZipCode = ((String) frm.get(MOTHER_ZIP_CODE)).trim();
      if (!Utils.isEmpty(motherZipCode)) {
        if (!Utils.isValidZipCode(motherZipCode)) {
          addError(msgsErrors, FIELD_INVALID, "كد پستي مادر");
          setFocusControl(frm, MOTHER_ZIP_CODE);
        } else {
          infMaster.setMotherZipCode(Long.parseLong(motherZipCode));
        }
      } else {
        infMaster.setMotherZipCode(0);
      }

      String motherAddressGeoSerial = ((String) frm.get(MOTHER_ADDRESS_GEO_SERIAL)).trim();

      if (Utils.isEmpty(motherAddressGeoSerial)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "کد محل سکونت مادر");
        setFocusControl(frm, MOTHER_ADDRESS_GEO_SERIAL);
      } else if (!Utils.isEmpty(motherAddressGeoSerial)) {
        if (searchMotherAddressGeoSerial(frm) == false) {
          addError(msgsErrors, FIELD_INVALID, "کد محل سکونت مادر");
          setFocusControl(frm, MOTHER_ADDRESS_GEO_SERIAL);
        } else {
          infMaster.setMotherAddressGeoSerial(Integer.parseInt(motherAddressGeoSerial));
        }
      } else {
        infMaster.setMotherAddressGeoSerial(0);
      }

      String motherAddress = (String) frm.get(MOTHER_ADDRESS);
      motherAddress = Utils.charVal2(motherAddress);
      if (Utils.isEmpty(motherAddress)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "آدرس محل اقامت مادر");
        setFocusControl(frm, FATHER_ADDRESS);
      } else if (motherAddress.length() > 255) {
        addError(msgsErrors, SHOULD_BE_LESS, "طول آدرس محل اقامت مادر", "255 كاراكتر");
        setFocusControl(frm, MOTHER_ADDRESS);
      } else {
        infMaster.setMotherAddress(motherAddress);
      }

      if (motherFoundInDb
          && !Utils.isEmpty(motherInfo.getFamilyNameChangeFlag())
          && motherInfo.getFamilyNameChangeFlag().equalsIgnoreCase(Constants.ChangeFlag.NOT_READ)) {
        addError(msgsWarnings, HAS_MIM, "ركورد مادر");
        setFocusControl(frm, MOTHER_NIN);
        motherContradictionErrors =
            motherContradictionErrors
                + Constants.ContradictionErrors.ERR_MOTHER_HAS_MIM
                + Constants.DATA_SEPARATOR;
      }

      String parentDateOfMarriage = ((String) frm.get(PARENT_DATE_OF_MARRIAGE)).trim();
      if (((String) frm.get(MARR_REG)).equalsIgnoreCase(Constants.MarriageRegisteration.REGISTERED)
          && Utils.isEmpty(parentDateOfMarriage)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "تاريخ ازدواج والدين");
        setFocusControl(frm, PARENT_DATE_OF_MARRIAGE);
      } else if (!Utils.isEmpty(parentDateOfMarriage)) {
        if (!DateUtils.isValidRevFormattedFDate(parentDateOfMarriage)) {
          addError(msgsErrors, FIELD_INVALID, "تاريخ ازدواج والدين");
          setFocusControl(frm, PARENT_DATE_OF_MARRIAGE);
        } else if (DateUtils.unformatRevFormattedFdate(parentDateOfMarriage)
                .compareTo(DateUtils.fDate())
            >= 0) {
          addError(msgsErrors, SHOULD_BE_LESS, "تاريخ ازدواج والدين", "تاريخ روز");
          setFocusControl(frm, PARENT_DATE_OF_MARRIAGE);
        } else if (!Utils.isEmpty(fatherDateOfBirth) || !Utils.isEmpty(motherDateOfBirth)) {
          boolean noError = true;
          if (!Utils.isEmpty(fatherDateOfBirth)
              && fatherDateOfBirthIsFull
              && DateUtils.isValidRevFormattedFDate(fatherDateOfBirth)
              && DateUtils.unformatRevFormattedFdate(fatherDateOfBirth)
                      .compareTo(DateUtils.unformatRevFormattedFdate(parentDateOfMarriage))
                  >= 0) {
            addError(msgsErrors, SHOULD_BE_LESS, "تاريخ تولد پدر", "تاريخ ازدواج والدين");
            setFocusControl(frm, PARENT_DATE_OF_MARRIAGE);
            noError = false;
          }

          if (!Utils.isEmpty(motherDateOfBirth)
              && motherDateOfBirthIsFull
              && DateUtils.isValidRevFormattedFDate(motherDateOfBirth)
              && DateUtils.unformatRevFormattedFdate(motherDateOfBirth)
                      .compareTo(DateUtils.unformatRevFormattedFdate(parentDateOfMarriage))
                  >= 0) {
            addError(msgsErrors, SHOULD_BE_LESS, "تاريخ تولد مادر", "تاريخ ازدواج والدين");
            setFocusControl(frm, PARENT_DATE_OF_MARRIAGE);
            noError = false;
          }
          if (noError) {
            infMaster.setParentDateOfMarriage(
                DateUtils.unformatRevFormattedFdate(parentDateOfMarriage));
          }
        } else {
          infMaster.setParentDateOfMarriage(
              DateUtils.unformatRevFormattedFdate(parentDateOfMarriage));
        }
      } else {
        infMaster.setParentDateOfMarriage(parentDateOfMarriage);
      }

      String parentMarrRegstNo = (String) frm.get(PARENT_MARR_REGST_NO);
      parentMarrRegstNo = Utils.charVal2(parentMarrRegstNo);
      if (((String) frm.get(MARR_REG)).equalsIgnoreCase(Constants.MarriageRegisteration.REGISTERED)
          && Utils.isEmpty(parentMarrRegstNo)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "شماره ثبت ازدواج والدين");
        setFocusControl(frm, PARENT_MARR_REGST_NO);
      } else if (parentMarrRegstNo.length() > 10) {
        addError(msgsErrors, FIELD_INVALID, "شماره ثبت ازدواج والدين");
        setFocusControl(frm, PARENT_MARR_REGST_NO);
      } else {
        infMaster.setParentMarrRegstNo(parentMarrRegstNo);
      }

      String parentRegstOfficeNo = (String) frm.get(PARENT_REGST_OFFICE_NO);
      parentRegstOfficeNo = Utils.charVal2(parentRegstOfficeNo);
      if (((String) frm.get(MARR_REG)).equalsIgnoreCase(Constants.MarriageRegisteration.REGISTERED)
          && Utils.isEmpty(parentRegstOfficeNo)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "شماره دفترخانه والدين");
        setFocusControl(frm, PARENT_REGST_OFFICE_NO);
      } else if (parentRegstOfficeNo.length() > 10) {
        addError(msgsErrors, FIELD_INVALID, "شماره دفترخانه والدين");
        setFocusControl(frm, PARENT_REGST_OFFICE_NO);
      } else {
        infMaster.setParentRegstOfficeNo(parentRegstOfficeNo);
      }

      String parentRegstOfficeGeo = (String) frm.get(PARENT_REGST_OFFICE_GEO);
      parentRegstOfficeGeo = Utils.charVal(parentRegstOfficeGeo);
      frm.set(PARENT_REGST_OFFICE_GEO, parentRegstOfficeGeo);
      if (((String) frm.get(MARR_REG)).equalsIgnoreCase(Constants.MarriageRegisteration.REGISTERED)
          && Utils.isEmpty(parentRegstOfficeGeo)) {
        addError(msgsErrors, FIELD_CAN_NOT_BE_EMPTY, "محل دفترخانه والدين");
        setFocusControl(frm, PARENT_REGST_OFFICE_GEO);
      } else if (parentRegstOfficeGeo.length() > 50) {
        addError(msgsErrors, FIELD_INVALID, "محل دفترخانه والدين");
        setFocusControl(frm, PARENT_REGST_OFFICE_GEO);
      } else {
        infMaster.setParentRegstOfficeGeo(parentRegstOfficeGeo);
      }

      msgs[0] = msgsErrors;
      msgs[1] = msgsWarnings;
      httpServletRequest.getSession().setAttribute("personData", infMaster);
      httpServletRequest
          .getSession()
          .setAttribute("fatherContradictionData", fatherContradictionErrors);
      httpServletRequest
          .getSession()
          .setAttribute("motherContradictionData", motherContradictionErrors);

    } catch (Exception ex) {
      addError(msgs[0], ex.getMessage());
    }

    return msgs;
  }