<?php
/**
 * @file
 * Views Elastic Grid module.
 */

/**
 * Implements hook_views_api().
 */
function views_elastic_grid_views_api() {
  return array(
    'api' => 3,
  );
}

/**
 * Implements hook_theme().
 */
function views_elastic_grid_theme($existing, $type, $theme, $path) {
  return array(
    'views_elastic_grid_list' => array(
      'template' => 'views-elastic-grid-list',
      'variables' => array('view' => NULL),
    ),
  );
}

/**
 * Display the view as an HTML list element
 */
function template_preprocess_views_elastic_grid_list(&$vars) {
  $handler  = $vars['view']->style_plugin;

  $class = explode(' ', $handler->options['class']);
  $class = array_map('views_clean_css_identifier', $class);

  $wrapper_class = explode(' ', $handler->options['wrapper_class']);
  $wrapper_class = array_map('views_clean_css_identifier', $wrapper_class);

  $vars['class'] = implode(' ', $class);
  $vars['wrapper_class'] = implode(' ', $wrapper_class);
  $vars['wrapper_prefix'] = '';
  $vars['wrapper_suffix'] = '';
  if ($vars['wrapper_class']) {
    $vars['wrapper_prefix'] = '<div class="' . $vars['wrapper_class'] . '">';
    $vars['wrapper_suffix'] = '</div>';
  }

  if ($vars['class']) {
    $vars['list_type_prefix'] = '<' . $handler->options['type'] . ' class="' . $vars['class'] . '">';
  }
  $vars['list_class'] = 'elastic-grid';
  drupal_add_css(drupal_get_path('module', 'views_elastic_grid') . '/css/views_elastic_grid.default.css');
  $thumbnail_fields = array_keys(array_filter($handler->options['views_elastic_grid']['thumbnail_fields']));
  $expanded_fields = array_keys(array_filter($handler->options['views_elastic_grid']['expanded_fields']));
  $id_field = $handler->options['views_elastic_grid']['id_field'];
  $view = $vars['view'];
  $rows = $vars['rows'];
  $style = $view->style_plugin;
  $options = $style->options;

  $vars['rows'] = array();
  $vars['options']['default_field_elements'] = FALSE;

  $original_fields = $vars['view']->field;
  $default_row_class = isset($options['default_row_class']) ? $options['default_row_class'] : FALSE;
  $row_class_special = isset($options['row_class_special']) ? $options['row_class_special'] : FALSE;

  // Set up striping values.
  $count = 0;
  $max = count($rows);
  foreach ($rows as $i => $row) {
    $count++;
    if ($default_row_class) {
      $vars['classes'][$i][] = 'views-row';
      $vars['classes'][$i][] = 'views-row-' . $count;
    }
    if ($row_class_special) {
      $vars['classes'][$i][] = 'views-row-' . ($count % 2 ? 'odd' : 'even');
      if ($count == 1) {
        $vars['classes'][$i][] = 'views-row-first';
      }
      if ($count == $max) {
        $vars['classes'][$i][] = 'views-row-last';
      }
    }

    if ($row_class = $view->style_plugin->get_row_class($i)) {
      $vars['classes'][$i][] = $row_class;
    }

    // Flatten the classes to a string for each row for the template file.
    $vars['rows'][$i]['classes'] = isset($vars['classes'][$i]) ? implode(' ', $vars['classes'][$i]) : '';
    $vars['rows'][$i]['thumbnail'] = '';
    $vars['rows'][$i]['expanded'] = '<span class="veg-close"></span>';
    $vars['rows'][$i]['id'] = !empty($id_field) ? preg_replace('/[^a-z0-9_]+/', '-', $row->{$id_field}) : ($i + 1);
    $vars['view']->row_index = $i;
    $thumbnail_vars = $vars['view']->field;
    $expanded_vars = $vars['view']->field;

    foreach ($original_fields as $field_name => $field_data) {

      if (!in_array($field_name, $thumbnail_fields)) {
        unset($thumbnail_vars[$field_name]);
      }
      if (!in_array($field_name, $expanded_fields)) {
        unset($expanded_vars[$field_name]);
      }
    }
    $vars['view']->field = $thumbnail_vars;
    $vars['rows'][$i]['thumbnail'] .= theme('views_view_fields', $vars);
    $vars['view']->field = $expanded_vars;
    $vars['rows'][$i]['expanded'] .= theme('views_view_fields', $vars);
    $vars['view']->field = $original_fields;
  }
  $dom_id_class = 'view-dom-id-' . $vars['view']->dom_id;
  drupal_add_js(array('views_elastic_grid' => array($vars['view']->dom_id => '.' . $dom_id_class . ' ul.elastic-grid')), 'setting');
  drupal_add_js(drupal_get_path('module', 'views_elastic_grid') . '/js/veg-modernizer.js');
  drupal_add_js(drupal_get_path('module', 'views_elastic_grid') . '/js/debouncedresize.js');
  drupal_add_js(drupal_get_path('module', 'views_elastic_grid') . '/js/views-elastic-grid.js');
}
