private function parsePostValidator(sfForm $form, sfValidatorBase $validator)
 {
   
   
   $options = $validator->getOptions();
   $messages = $validator->getMessages();
   
   $rules = array();
   $formName = $form->getName();
   $validatorName = get_class($validator);
   switch($validatorName)
   {
     case 'sfValidatorAnd':
       $return = array();
       foreach ($validator->getValidators() as $v) {
         $return = array_merge($return, (array)$this->parsePostValidator($form, $v));
       }
       return $return;
             
     case 'sfValidatorDoctrineUnique':
     case 'sfValidatorPropelUnique':
       $return = array();
       foreach ($options['column'] as $column) {
         extract(sfJqueryFormValidationRules::getUrlParams());
         $rules['remote'] = sfContext::getInstance()->getController()->genUrl(
           "{$module}/remote?form=" . get_class($form) . "&validator={$validatorName}");
         $rules['messages'] = array(
           'remote' => $messages['invalid'],
         );
         $return[] = "$('#{$formName}_{$column}').rules('add', " . json_encode($rules) . ");";
       }
       return $return;
       
     case 'sfValidatorSchemaCompare':
       if($options['operator'] == '==' || $options['operator'] == '===') {
         $rules['equalTo'] = "#{$formName}_{$options['left_field']}";
         $rules['messages'] = array(
           'equalTo' => $messages['invalid'],
         );
         return "$('#{$formName}_{$options['right_field']}').rules('add', " . json_encode($rules) . ");";
       }
       break;
   }
 }