public static function validate($post = array())
 {
     if (empty($post)) {
         $post = $_POST;
     }
     self::$post = $post;
     self::$values = array();
     self::$attachments = array();
     self::$invalid = array();
     self::$columns = array(self::csvfield('RecordID'), self::csvfield('Date'), self::csvfield('IP'));
     self::$csvValues = array(self::csvfield(self::getRecordID()), self::csvfield(date("Y-m-d H:i:s")), self::csvfield($_SERVER['REMOTE_ADDR']));
     self::$serverValidationFields = empty(self::$post['serverValidationFields']) ? array() : explode(',', self::$post['serverValidationFields']);
     self::$style = 'font-family:Verdana, Arial, Helvetica, sans-serif; font-size : 13px; color:#474747;padding:6px;border:1px solid #cccccc;';
     self::$rows = array();
     $config = self::getConfig();
     $ok = self::validateReCaptcha($post, $config['recaptcha']['secretKey']);
     if (!$ok) {
         self::$invalid[] = 'recaptcha';
     }
     foreach ($config['fields'] as $f) {
         switch ($f['field_type']) {
             case 'section_break':
             case 'recaptcha':
             case 'submit':
                 // are not data fields, ignore them, do nothing
                 break;
                 // creditcard field contains extra fields, have to validate them one by one
             // creditcard field contains extra fields, have to validate them one by one
             case 'creditcard':
                 self::_validateCreditcardFields($f);
                 break;
             default:
                 self::_validateField($f);
         }
     }
     // foreach
     self::$values['dataTable'] = empty(self::$rows) ? '' : '<table cellspacing="0" cellpadding="0" border="1" bordercolor="#cccccc" style="border:1px solid #cccccc;"><tbody>' . join("\n", self::$rows) . '</table>';
     // save form data to file
     if (self::isValid()) {
         self::saveRecord();
     }
     // add preset tags
     self::presetTags();
     self::$isValidated = true;
     // validation checked
 }