function loadAction($form, $actiondata)
    {
        $params = new JParameter($actiondata->params);
        $output = '';
        $mainframe =& JFactory::getApplication();
        $document =& JFactory::getDocument();
        JHTML::_('behavior.mootools');
        $uri =& JFactory::getURI();
        $CF_PATH = $mainframe->isSite() ? JURI::Base() : $uri->root();
        $document->addScript($CF_PATH . 'administrator/components/com_chronoforms/form_actions/auto_javascript_validation/assets/auto_javascript_validation.js');
        $rules = array('required', 'alpha', 'alphanum', 'digit', 'nodigit', 'number', 'email', 'phone', 'phone_inter', 'url', 'image');
        ob_start();
        ?>
			window.addEvent('domready', function() {
				<?php 
        $object_list = array();
        foreach ($rules as $rule) {
            $fields_list = array();
            if (trim($params->get($rule, ''))) {
                $fields_list = explode(',', trim($params->get($rule, '')));
            }
            foreach ($fields_list as $k => $field) {
                $fields_list[$k] = "'" . $field . "'";
            }
            $n_fields_list = implode(',', $fields_list);
            $object_list[] = "'" . $rule . "': [" . $n_fields_list . "]";
        }
        ?>
				new AutoJavascriptValidation('<?php 
        echo $form->form_name;
        ?>
', <?php 
        echo "{" . implode(",", $object_list) . "}";
        ?>
);
			});
		<?php 
        $script = ob_get_clean();
        if ((bool) $form->form_params->get('dynamic_files', 0) === false) {
            $document->addScriptDeclaration("//<![CDATA[" . "\n" . $script . "\n" . "//]]>");
        } else {
            //load the action class
            $form->loadActionHelper('load_js');
            $CfactionLoadJsHelper = new CfactionLoadJsHelper();
            $JSactiondata = new stdClass();
            $JSactiondata->content1 = $script;
            $JSParams = new JParameter('');
            $JSParams->set('dynamic_file', $form->form_params->get('dynamic_files', 0));
            $JSactiondata->params = $JSParams->toString();
            $CfactionLoadJsHelper->load($form, $JSactiondata);
        }
        //load validation files
        $form->loadActionHelper('show_html');
        $CfactionShowHtmlHelper = new CfactionShowHtmlHelper();
        $CfactionShowHtmlHelper->_loadValidationScripts($form);
    }
 function run($form, $actiondata)
 {
     $params = new JParameter($actiondata->params);
     $table_name = $params->get('table_name', '');
     if (!empty($table_name) && (int) $params->get('load_data', 1) == 1) {
         $mainframe =& JFactory::getApplication();
         $database =& JFactory::getDBO();
         $table_field = $params->get('dbfield', '');
         if (trim($actiondata->content1)) {
             $where = " WHERE " . $this->_processWhere(trim($actiondata->content1), $form);
         } else {
             if (!empty($table_field)) {
                 $where = " WHERE `" . $params->get('dbfield', '') . "` = '" . $form->data[$params->get('request_param', '')] . "'";
             } else {
                 $where = "";
             }
         }
         //load the model_id
         $model_id_sub = preg_replace('/(?:^|_)(.?)/e', "strtoupper('\$1')", $table_name);
         $model_id = $params->get('model_id', '');
         if (empty($model_id)) {
             $model_id = $model_id_sub;
         }
         //check fields
         $fields = array();
         if (trim($params->get('fields', ''))) {
             $fields_list = explode(",", trim($params->get('fields', '')));
             foreach ($fields_list as $field) {
                 $fields[] = "`" . $field . "`";
             }
         } else {
             $fields = array("`" . $model_id . "`.*");
         }
         //check the association
         $assoc = '';
         $assoc_models = array();
         $primaries = array();
         if ($params->get('enable_association', 0) == 1 && $params->get('load_data', 1) == 1) {
             if (trim($params->get('associated_models', ''))) {
                 //add primary key for the main table
                 $fields_list = $database->getTableFields(array(trim($params->get('table_name', ''))), false);
                 $table_fields = $fields_list[trim($params->get('table_name', ''))];
                 foreach ($table_fields as $table_field => $field_data) {
                     if ($field_data->Key == 'PRI') {
                         $primaries[$model_id] = $table_field;
                     }
                 }
                 //find associated models list
                 $assoc_models = explode(',', $params->get('associated_models'));
                 foreach ($assoc_models as $k => $assoc_model) {
                     $assoc_models[$k] = trim($assoc_model);
                 }
                 //find other multi record loaders
                 $models_list = array();
                 foreach ($form->form_actions as $form_action) {
                     if ($form_action->type == 'db_multi_record_loader') {
                         $action_params = new JParameter($form_action->params);
                         if (trim($action_params->get('model_id', '')) && trim($action_params->get('table_name', ''))) {
                             $models_list[trim($action_params->get('model_id', ''))] = trim($action_params->get('table_name', ''));
                             if (in_array(trim($action_params->get('model_id', '')), $assoc_models)) {
                                 //find some table info (primary key)
                                 $fields_list = $database->getTableFields(array(trim($action_params->get('table_name', ''))), false);
                                 $table_fields = $fields_list[trim($action_params->get('table_name', ''))];
                                 foreach ($table_fields as $table_field => $field_data) {
                                     if ($field_data->Key == 'PRI') {
                                         $primaries[trim($action_params->get('model_id', ''))] = $table_field;
                                     }
                                 }
                                 //get table fields list
                                 if (trim($action_params->get('fields', ''))) {
                                     $table_fields = explode(",", trim($action_params->get('fields', '')));
                                     foreach ($table_fields as $table_field) {
                                         $table_field = trim($table_field);
                                         $field_alias = "`" . trim($action_params->get('model_id', '')) . "." . $table_field . "`";
                                         $field_name = "`" . trim($action_params->get('model_id', '')) . "`.`" . $table_field . "`";
                                         $fields[] = $field_name . " AS " . $field_alias;
                                     }
                                 } else {
                                     foreach ($table_fields as $table_field => $field_data) {
                                         $fields[] = "`" . trim($action_params->get('model_id', '')) . "`.`" . $table_field . "` AS `" . trim($action_params->get('model_id', '')) . "." . $table_field . "`";
                                     }
                                 }
                                 //append any WHERE data
                                 if (trim($form_action->content1)) {
                                     if (!empty($where)) {
                                         $where .= " AND " . $this->_processWhere($form_action->content1);
                                     } else {
                                         $where = " WHERE " . $this->_processWhere($form_action->content1);
                                     }
                                 }
                             }
                         }
                     }
                 }
                 //build the JOIN statement
                 foreach ($assoc_models as $assoc_model) {
                     if (isset($models_list[$assoc_model])) {
                         $assoc .= " INNER JOIN `" . $models_list[$assoc_model] . "` AS `" . $assoc_model . "`";
                     }
                 }
             }
         }
         //add the page navigation data
         if ((bool) $params->get('enable_pagination', 0) === true) {
             $option = 'com_chronoforms.db_multi_record_loader.' . $actiondata->id;
             $session =& JFactory::getSession();
             if (isset($form->data['limit'])) {
                 $session->set($option . '.limit', (int) $form->data['limit'], md5('chrono'));
             }
             $limit = $mainframe->getUserStateFromRequest($option . '.limit', 'limit', $session->get($option . '.limit', (int) $params->get('pagination_limit', 50), md5('chrono')), 'int');
             $limitstart = $mainframe->getUserStateFromRequest($option . '.limitstart', 'limitstart', 0, 'int');
             $sql = "SELECT count(*) FROM `" . $params->get('table_name', '') . "` AS `" . $model_id . "`" . $assoc . $where;
             $database->setQuery($sql);
             $total = $database->loadResult();
             jimport('joomla.html.pagination');
             $pageNav = new JPagination($total, $limitstart, $limit);
             //get current page url
             //load show_html action helper class
             $form->loadActionHelper('show_html');
             $url = CfactionShowHtmlHelper::selfURL();
             if ($form->admin === false) {
                 $form->paginatior_footer = '<form action="' . $url . '" method="post" name="chronoform_pagination_' . $actiondata->id . '" id="chronoform_pagination_' . $actiondata->id . '">';
             } else {
                 $form->paginatior_footer = '<form action="' . $url . '" method="post" name="adminForm" id="adminForm">';
             }
             $form->paginatior_footer .= $pageNav->getListFooter();
             $form->paginatior_footer .= '</form>';
             //check order data
             $order = '';
             if (isset($form->data['order'])) {
                 $order = ' ORDER BY `' . trim($form->data['order']) . '`' . (isset($form->data['direction']) ? ' ' . $form->data['direction'] : ' ASC');
             }
             $sql = "SELECT " . implode(", ", $fields) . " FROM `" . $params->get('table_name', '') . "` AS `" . $model_id . "`" . $assoc . $where . $order . " LIMIT {$pageNav->limitstart},{$pageNav->limit}";
         } else {
             $sql = "SELECT " . implode(", ", $fields) . " FROM `" . $params->get('table_name', '') . "` AS `" . $model_id . "`" . $assoc . $where;
         }
         //echo $form->paginatior_footer;
         //run the sql and get the data
         $database->setQuery($sql);
         $data = $database->loadAssocList();
         //process the data if association was enabled
         if (!empty($assoc_models) && !empty($data)) {
             foreach ($data as $datak => $datav) {
                 if (is_array($datav)) {
                     foreach ($datav as $k => $v) {
                         if (strpos($k, '.')) {
                             $details = explode('.', $k);
                             $data[$datak][$details[0]][$details[1]] = $v;
                             unset($data[$datak][$k]);
                         }
                     }
                 }
             }
             if ((int) $params->get('group_model_data', 1) == 1) {
                 $data = $this->group_model_data($data, $model_id, $primaries);
             }
         }
         //print_r2($data);
         //data must be loaded under some model id
         $form->data[$model_id] = $data;
         //check the result
         //$request_val = $form->data[$params->get('request_param', '')];
         if (empty($data)) {
             $this->events['notfound'] = 1;
         } else {
             $this->events['found'] = 1;
         }
         //print_r2($form->data);
     }
 }
 function load($form = null, $actiondata = null)
 {
     $params = new JParameter($actiondata->params);
     $output = '';
     if ((bool) $params->get('enable_data_displayer', 0) === true && $params->get('load_type', 'all') == 'all') {
         //find the model data
         $table_name = $params->get('table_name', '');
         $model_id_sub = preg_replace('/(?:^|_)(.?)/e', "strtoupper('\$1')", $table_name);
         $model_id = $params->get('model_id', '');
         if (empty($model_id)) {
             $model_id = $model_id_sub;
         }
         //pre output creation
         $fields_names = array();
         $fields_headings = array();
         $order_fields = array();
         //get order fields
         $order_str = trim($params->get('data_order_fields', ''));
         if (!empty($order_str)) {
             $order_fields = explode(",", trim($params->get('data_order_fields', '')));
         }
         //get display fields
         $fields_data = trim($params->get('data_display_fields', ''));
         if (!empty($fields_data)) {
             $fields_data = explode(",", $fields_data);
             foreach ($fields_data as $field_data) {
                 $field_data = explode(":", trim($field_data));
                 $fields_names[] = $field_name = $field_data[0];
                 if (!isset($field_data[1])) {
                     $field_data[1] = strtoupper($field_data[0]);
                 }
                 $fields_headings[] = $field_heading = $field_data[1];
             }
         }
         //create the table code
         $output .= '<table id="db_multi_record_loader_' . $actiondata->id . '">';
         $output .= '<thead>';
         $output .= '<tr>';
         $form->loadActionHelper('show_html');
         $showHTMLHelper = new CfactionShowHtmlHelper();
         foreach ($fields_headings as $k => $field_heading) {
             if (in_array($fields_names[$k], $order_fields)) {
                 $direction = 'asc';
                 if (isset($form->data['order']) && $form->data['order'] == $fields_names[$k] && isset($form->data['direction'])) {
                     if ($form->data['direction'] == 'asc') {
                         $direction = 'desc';
                     } else {
                         $direction = 'asc';
                     }
                 }
                 $class = '';
                 if (isset($form->data['order']) && $form->data['order'] == $fields_names[$k]) {
                     $class = ' direction_' . (isset($form->data['direction']) ? $form->data['direction'] : 'asc');
                 }
                 $field_heading = '<a class="order_link' . $class . '" href="' . $showHTMLHelper->generateURL($showHTMLHelper->selfURL(), array('order' => $fields_names[$k], 'direction' => $direction)) . '">' . $field_heading . '</a>';
             } else {
                 $field_heading = $field_heading;
             }
             $output .= '<th class="col' . ($k + 1) . ' cell">' . $field_heading . '</th>';
         }
         $output .= '</tr>';
         $output .= '</thead>';
         $output .= '<tbody>';
         $i = 0;
         if (!empty($form->data[$model_id])) {
             foreach ($form->data[$model_id] as $r => $record) {
                 $output .= '<tr class="row_' . $i . '">';
                 foreach ($fields_names as $k => $field_name) {
                     if (strpos($field_name, '.') !== false) {
                         $record[$field_name] = $form->get_array_value($record, explode('.', $field_name));
                     }
                     $output .= '<td class="col' . ($k + 1) . ' cell">' . $record[$field_name] . '</td>';
                 }
                 $output .= '</tr>';
                 $i = 1 - $i;
             }
         }
         $output .= '</tbody>';
         $output .= '</table>';
     }
     if ((bool) $params->get('enable_pagination', 0) === true && isset($form->paginatior_footer)) {
         //check the position of the pagination
         if ((int) $params->get('enable_pagination', 0) == 1) {
             $output = $form->paginatior_footer . $output;
         } else {
             if ((int) $params->get('enable_pagination', 0) == 2) {
                 $output = $output . $form->paginatior_footer;
             }
         }
     }
     //add CSS
     $this->_addCSS($form, $actiondata);
     //end
     echo $output;
 }