/**
     * return actual function name of registered func
     *
     * @param string $type the type of func
     * @param string $name the registered name
     * @param string $form the form name
     */
    function _execute_transform($name, $value, $params, &$formvars, $form) {

        if(SmartyValidate::is_registered_transform($name, $form)) {
            $_func_name = SmartyValidate::_get_registered_func_name('transform', $name, $form);
        } else {
            $_func_name = 'smarty_validate_transform_' . $name;
            if(!function_exists($_func_name)) {
                $_smarty_obj =& SmartyValidate::_object_instance('Smarty', $_dummy);
                if($_plugin_file = $_smarty_obj->_get_plugin_filepath('validate_transform', $name)) {
                    include_once($_plugin_file);
                } else {
                    trigger_error("SmartyValidate: [is_valid] transform function '$name' was not found.");
                    return false;
                }
            }
        }
        if(strpos($_func_name,'->') !== false) {
            // object method
            preg_match('!(\w+)->(\w+)!', $_func_name, $_match);
            $_object_name = $_match[1];
            $_method_name = $_match[2];
            $_object =& SmartyValidate::_object_instance($_object_name, $_dummy);
            if(!method_exists($_object, $_method_name)) {
                trigger_error("SmartyValidate: [is_valid] method '$_method_name' is not valid for object '$_object_name'.");
                return false;
            }
            return $_object->$_method_name($value, $params, $formvars);
        } else {
            return $_func_name($value, $params, $formvars);
        }
    }
 /**
  * validate the form
  *
  * @param string $formvars the array of submitted for variables
  * @param string $form the name of the form being validated
  */
 function is_valid(&$formvars, $form = 'default')
 {
     if (!SmartyValidate::is_init($form)) {
         trigger_error("SmartyValidate: [is_valid] form '{$form}' is not initialized.");
         return false;
     }
     // keep track of failed fields for current pass
     static $_failed_fields = array();
     $_ret = true;
     $_sess =& $_SESSION['SmartyValidate'][$form]['validators'];
     foreach ($_sess as $_key => $_val) {
         $_field = $_sess[$_key]['field'];
         $_empty = $_sess[$_key]['empty'];
         if (in_array($_field, $_failed_fields)) {
             // already failed, skip this test
             continue;
         }
         if ($_sess[$_key]['trim']) {
             $formvars[$_field] = trim($formvars[$_field]);
         }
         if (isset($_sess[$_key]['transform'])) {
             $_trans_funcs = preg_split('![\\s,]+!', $_sess[$_key]['transform'], -1, PREG_SPLIT_NO_EMPTY);
             foreach ($_trans_funcs as $_trans_func) {
                 if (SmartyValidate::is_registered_transform($_trans_func, $form)) {
                     $formvars[$_field] = $_trans_func($formvars[$_field]);
                 } else {
                     trigger_error("SmartyValidate: [transform] function '{$_trans_func}' is not registered.");
                 }
             }
         }
         if (!isset($formvars[$_field])) {
             // field must exist, or else fails automatically
             $_sess[$_key]['valid'] = false;
             $_ret = false;
         } else {
             switch ($_val['criteria']) {
                 case 'notEmpty':
                     $_sess[$_key]['valid'] = SmartyValidate::_not_empty($formvars[$_field]);
                     break;
                 case 'isInt':
                     $_sess[$_key]['valid'] = SmartyValidate::_is_int($formvars[$_field], $_empty);
                     break;
                 case 'isFloat':
                     $_sess[$_key]['valid'] = SmartyValidate::_is_float($formvars[$_field], $_empty);
                     break;
                 case 'isNumber':
                     $_sess[$_key]['valid'] = SmartyValidate::_is_number($formvars[$_field], $_empty);
                     break;
                 case 'isPrice':
                     $_sess[$_key]['valid'] = SmartyValidate::_is_price($formvars[$_field], $_empty);
                     break;
                 case 'isEmail':
                     $_sess[$_key]['valid'] = SmartyValidate::_is_email($formvars[$_field], $_empty);
                     break;
                 case 'isCCNum':
                     $_sess[$_key]['valid'] = SmartyValidate::_is_cc_num($formvars[$_field], $_empty);
                     break;
                 case 'isCCExpDate':
                     $_sess[$_key]['valid'] = SmartyValidate::_is_cc_exp_date($formvars[$_field], $_empty);
                     break;
                 case 'isDate':
                     $_sess[$_key]['valid'] = SmartyValidate::_is_date($formvars[$_field], $_empty);
                     break;
                 case 'isEqual':
                     $_sess[$_key]['valid'] = SmartyValidate::_is_equal($formvars[$_field], $formvars[$_sess[$_key]['field2']], $_empty);
                     break;
                 case 'isRange':
                     $_sess[$_key]['valid'] = SmartyValidate::_is_range($formvars[$_field], $_sess[$_key]['low'], $_sess[$_key]['high'], $_empty);
                     break;
                 case 'isLength':
                     $_sess[$_key]['valid'] = SmartyValidate::_is_length($formvars[$_field], $_sess[$_key]['min'], $_sess[$_key]['max'], $_empty);
                     break;
                 case 'isRegExp':
                     $_sess[$_key]['valid'] = SmartyValidate::_is_regexp($formvars[$_field], $_sess[$_key]['expression'], $_empty);
                     break;
                 case 'isCustom':
                     $_sess[$_key]['valid'] = SmartyValidate::_is_custom($form, $formvars[$_field], $_sess[$_key]['function'], $_empty, $_sess[$_key], $formvars);
                     break;
             }
         }
         if (!$_sess[$_key]['valid']) {
             $_failed_fields[] = $_field;
             $_ret = false;
         }
     }
     return $_ret;
 }