Validar Formularios Con Ajax

estoy haciendo una validación de recuperación de contraseñas pero tengo dos problemas: el primero que cuando envío un dato vacío se limpia el formulario perdiendo el que ya había ingresado, el segundo es que no se comparan las contraseñas: este es mi formulario:


<?php

$form=$this->beginWidget('CActiveForm', array(

	'id'=>'usuario-form',

	'enableAjaxValidation'		=>true,

	'enableClientValidation'	=> false,

));

?>

este es el método de validación


public function actionNewpass($id)

        {

            $model = new Usuario('recover');

            

            $user = base64_decode($id);

            

//             print_r($_POST);exit;

            

            if(isset($_POST['Usuario']['password']))

            {   

            	if($model->validate()){

            		$password = $model->hashPassword($_POST['Usuario']['password'], $session = $model->generateSalt());

            		$sql = "UPDATE `usuario` SET `password` = '" . $password . "', `session` = '" . $session . "' WHERE `id` = $user;";

            		$connection= Yii::app()->db;

            		$command=$connection->createCommand($sql);

            		$command->execute();

            		

            		Yii::app()->user->setFlash('success', "Contraseña actualizada exitosamente!");

            		$this->redirect(array('/site/login'));

            	}

                //---------------------------------------------------------------------------------------------

            }

            

            if(isset(Yii::app()->user->id)){

                $this->redirect(array('/site/index'));

            }else{

                $this->render('newpass',  array('id'=>$user, 'model' => $model) );

            }

            

        }

y estas son las reglas


array('password, repeat_password', 'required', 'on'=>'register, recover', 'message'=>'campo requerido: {attribute}'),

array('password', 'compare', 'compareAttribute'=>'repeat_password', 'on'=>'register, recover', 'message'=>'las contraseñas no coinciden'),



de antemano, gracias por la ayuda que me puedan brindar, aún hay muchas cosas que no entiendo de yii

pienso que es por esto: " if(isset($_POST[‘Usuario’][‘password’])) " estas haciendo una mezcla muy rara, usando el mecanismo de CFormModel y haciendolo a la vieja escuela…o usas uno, o usas el otro…

veo que sabes lo que son los escenarios ya que has indicado uno: "recover", pero, pasale al model todos los atributos del post mediante:




if(isset($_POST["Usuario"])){

   $model->attributes = $_POST["Usuario"];

}




será el escenario en tu definicion de reglas el que traiga uno o otro campo necesario desde el post hacia los atributos del modelo.