<?php
/**
 * @version   $Id: filter.php 10831 2013-05-29 19:32:17Z btowles $
 * @author    RocketTheme http://www.rockettheme.com
 * @copyright Copyright (C) 2007 - 2015 RocketTheme, LLC
 * @license   http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 only
 */
defined('ROKCOMMON') or die;

class RokCommon_Form_Field_Filter extends RokCommon_Form_AbstractField
{
	protected $type = 'Filters';
	protected static $base_js_loaded = false;

	protected $filter;

	public function __construct($form = null)
	{
		parent::__construct($form);
	}


	public function getInput()
	{
		$container         = RokCommon_Service::getContainer();
		$empty_button_text = rc__('Create New Filter');

		$filter_file = $container[(string)$this->element['filterlocationparam']] . '/' . (string)$this->element['filterfile'];
		if (!file_exists($filter_file)) {
			throw new RokSprocket_Exception(rc__('Unable to find filter file %s', $filter_file));
		}
		$xmlfile      = simplexml_load_file($filter_file);
		$this->filter = new RokCommon_Filter($xmlfile);

		if (isset($this->element['emptybuttontext'])) {
			$empty_button_text = rc__((string)$this->element['emptybuttontext']);
		}

		if (!self::$base_js_loaded) {
			RokCommon_Header::addInlineScript('
		                var RokSprocketFilters = {
		                    filters: {},
		                    template: \'<li><span data-filter-container="true"></span> <span class="controls"> <i class="icon tool minus" data-filter-action="removeRow"></i> <i class="icon tool plus" data-filter-action="addRow"></i></span></li>\'
		                };
		            ');
			self::$base_js_loaded = true;
		}


		$html = array();
		/*
	After everything fine, i'll handle via js and domready the call to filters ajax model
	Something along these lines:

		model: 'Filters',
		action: 'getData',
		params: JSON.encoded(
			[{
				id1: {pathrefs: .., file: ..}
			}],
			[{
				id2: {pathrefs: .., file: ..}
			}],
			[{
				id3: {pathrefs: .., file: ..}
			}],
			...
		)
*/


		/*        // OLD Script
  RokCommon_Header::addInlineScript('
	window.addEvent(\'load\', function(){
		RokSprocket.filters.addDataSet(\'' . $this->id . '\', {
			pathsref: \''. (string)$this->element['filterlocationparam'] .'\',
			file: \'' . (string)$this->element['filterfile'] .'\',
			template: \'<li><span data-filter-container="true"></span> <span class="controls"> <i class="icon tool minus" data-filter-action="removeRow"></i> <i class="icon tool plus" data-filter-action="addRow"></i></span></li>\'
		});
	});
');*/

		RokCommon_Header::addInlineScript("
	 			            RokSprocketFilters.filters['" . $this->id . "'] = {
	 			                pathsref: '" . (string)$this->element['filterlocationparam'] . "',
	 			                file: '" . (string)$this->element['filterfile'] . "'
	 			            }");


		$classes   = explode(' ', $this->element['class']);
		$classes[] = 'roksprocket-filters';
		if (!is_array($this->value)) $classes[] = 'empty';
		$classes = implode(' ', $classes);

		$html[] = '<ul class="' . $classes . '" data-filter="' . $this->id . '" data-filter-name="' . $this->name . '">';
		$html[] = '     <li class="create-new"><div class="btn btn-primary" data-filter-action="addRow">' . $empty_button_text . '</div></li>';

		if (is_array($this->value)) {
			foreach ($this->value as $rownum => $row) {
				$firstRow = ($rownum == 1) ? ' class="first"' : '';
				RokCommon_Utils_ArrayHelper::fromObject($row);
				$html[] = '     <li data-row="true"' . $firstRow . '><span data-filter-container="true">' . $this->filter->renderLine($row, $this->name . '[' . $rownum . ']') . '</span><span class="controls"><i data-filter-action="removeRow" class="icon tool minus"></i><i data-filter-action="addRow" class="icon tool plus"></i></span></li>';
			}
		}
		$html[] = '	</ul>';
		if ($this->element['notice'] && strlen($this->element['notice'])) $html[] = '<div data-cookie="' . $this->id . '" class="roksprocket-filters-description alert alert-info"><a class="close" data-dismiss="alert">&times;</a>' . JText::_($this->element['notice']) . '</div>';

		return implode("\n", $html);
	}

	public function getLabel()
	{
		$label = $this->type;

		if (isset($this->element['label']) && !empty($this->element['label'])) {
			$label       = rc__((string)$this->element['label']);
			$description = rc__((string)$this->element['description']);
			return '<label class="sprocket-tip" title="' . $description . '">' . $label . '</label>';
		} else {
			return;
		}

	}

	public function getTitle()
	{
		return $this->getLabel();
	}

	protected function getJSON()
	{
		return $this->filter->getJSON();
	}
}

