<?php
/**
 * @file
 * Theme Controllers.
 */

/**
 * Implements theme_field();
 * 
 * Themes an address according to the default renderer.
 */
function theme_addressfield_formatter($vars) {
  $address = $vars['address'];
  if (isset($address['addressfield'])) {
    $address = $address['addressfield'];
  }
  $handlers = $vars['handlers'];
  if (empty($handlers)) {
    $handlers = array('address');
  }
  
  $out = addressfield_generate($address, $handlers, array('mode' => 'render'));
  return '<div class="addressfield">' . render($out) . '</div>';
}

/**
 * Implements theme_field();
 * 
 * Themes an address field into "city state, country"
 */
function theme_addressfield_formatter__citystate($vars) {
  $loc = $vars['address'];
  
  // Determine which location components to render
  $out = array();
  if (!empty($loc['locality'])) {
    $out[] = $loc['locality'];
  }
  if (!empty($loc['administrative_area'])) {
    $out[] = $loc['administrative_area'];
  }
  if ($loc['country'] != addressfield_tokens_default_country() && $country_name = _addressfield_tokens_country($loc['country'])) {
    $out[] = $country_name;
  }
  
  // If there's no location, render an alternate
  if (empty($out)) {
    return '';
  }
  
  // Render the location components
  $output = '<span class="addressfield-citystate">' . implode(', ', $out) . '</span>';
  
  return $output;
}

/**
 * Implements theme_field();
 * 
 * Themes an address field into "name, street1, street2, city state zip country"
 */
function theme_addressfield_formatter__linear($vars) {
  $loc = $vars['address'];
  
  // If single line name is empty, construct it from first and last name.
  if (empty($loc['name_line'])) {
    $parts = array();
    if (!empty($loc['first_name'])) {
      $parts[] = $loc['first_name'];
    }
    if (!empty($loc['last_name'])) {
      $parts[] = $loc['last_name'];
    }
    $loc['name_line'] = join(' ', $parts);
  }

  // Determine which location components to render
  $out = array();
  if (!empty($loc['name_line']) && $vars['name_line']) {
    $out[] = $loc['name_line'];
  }
  if (!empty($loc['organisation_name']) && $vars['organisation_name']) {
    $out[] = $loc['organisation_name'];
  }
  if (!empty($loc['thoroughfare'])) {
    $out[] = $loc['thoroughfare'];
  }
  if (!empty($loc['premise']) && $vars['premise']) {
    $out[] = $loc['premise'];
  }
  if (!empty($loc['locality'])) {
    $out[] = $loc['locality'];
  }
  if (!empty($loc['administrative_area'])) {
    $out[] = $loc['administrative_area'];
  }
  if (!empty($loc['postal_code'])) {
    $out[] = $loc['postal_code'];
  }
  if ($loc['country'] != addressfield_tokens_default_country() && $country_name = _addressfield_tokens_country($loc['country'])) {
    $out[] = $country_name;
  }
  
  // Render the location components
  $output = implode(', ', $out);
  
  return $output;
}

function theme_addressfield_formatter__components($vars) {
  $loc = $vars['address'];
  $components = $vars['components'];
  $separator = $vars['separator'];
  
  $out = array();
  foreach ($components as $key) {
    if (!empty($loc[$key])) {
      $out[$key] = $loc[$key];
    }
    elseif ($key == 'country_full' && !empty($loc['country'])) {
      $out[$key] = _addressfield_tokens_country($loc['country']);
    }
    elseif ($key == 'administrative_area_full' && !empty($loc['country']) && !empty($loc['administrative_area'])) {
      $out[$key] = addressfield_tokens_state($loc['country'], $loc['administrative_area']);
    }
  }
  
  return implode($separator, $out);
}
