<?php
/** 
 *------------------------------------------------------------------------------
 * @package       T3 Framework for Joomla!
 *------------------------------------------------------------------------------
 * @copyright     Copyright (C) 2004-2013 JoomlArt.com. All Rights Reserved.
 * @license       GNU General Public License version 2 or later; see LICENSE.txt
 * @authors       JoomlArt, JoomlaBamboo, (contribute to this project at github 
 *                & Google group to become co-author)
 * @Google group: https://groups.google.com/forum/#!forum/t3fw
 * @Link:         http://t3-framework.org 
 *------------------------------------------------------------------------------
 */

defined('JPATH_PLATFORM') or die;

/**
 * Form Field class for the Joomla Platform.
 * Provides a modal media selector including upload mechanism
 *
 * @package     Joomla.Libraries
 * @subpackage  Form
 * @since       1.6
 */


if(version_compare(JVERSION, '3.0', 'ge')){
	class JFormFieldT3Media extends JFormFieldMedia {
		/**
		 * The form field type.
		 *
		 * @var    string
		 * @since  1.6
		 */
		protected $type = 'T3Media';
	}
} else {

	class JFormFieldT3Media extends JFormField
	{
		/**
		 * The form field type.
		 *
		 * @var    string
		 * @since  1.6
		 */
		protected $type = 'T3Media';

		/**
		 * The initialised state of the document object.
		 *
		 * @var    boolean
		 * @since  1.6
		 */
		protected static $initialised = false;

		/**
		 * Method to get the field input markup for a media selector.
		 * Use attributes to identify specific created_by and asset_id fields
		 *
		 * @return  string  The field input markup.
		 *
		 * @since   1.6
		 */
		protected function getInput()
		{
			$assetField = $this->element['asset_field'] ? (string) $this->element['asset_field'] : 'asset_id';
			$authorField = $this->element['created_by_field'] ? (string) $this->element['created_by_field'] : 'created_by';
			$asset = $this->form->getValue($assetField) ? $this->form->getValue($assetField) : (string) $this->element['asset_id'];
			if ($asset == '')
			{
				$asset = JFactory::getApplication()->input->get('option');
			}

			$link = (string) $this->element['link'];
			if (!self::$initialised)
			{
				// Load the modal behavior script.
				JHtml::_('behavior.modal');

				// Build the script.
				$script = array();
				$script[] = '	function jInsertFieldValue(value, id) {';
				$script[] = '		var old_value = document.getElementById(id).value;';
				$script[] = '		if (old_value != value) {';
				$script[] = '			var elem = document.getElementById(id);';
				$script[] = '			elem.value = value;';
				$script[] = '			elem.fireEvent("change");';
				$script[] = '			if (typeof(elem.onchange) === "function") {';
				$script[] = '				elem.onchange();';
				$script[] = '			}';
				$script[] = '			jMediaRefreshPreview(id);';
				$script[] = '		}';
				$script[] = '	}';

				$script[] = '	function jMediaRefreshPreview(id) {';
				$script[] = '		var value = document.getElementById(id).value;';
				$script[] = '		var img = document.getElementById(id + "_preview");';
				$script[] = '		if (img) {';
				$script[] = '			if (value) {';
				$script[] = '				img.src = "' . JURI::root() . '" + value;';
				$script[] = '				document.getElementById(id + "_preview_empty").setStyle("display", "none");';
				$script[] = '				document.getElementById(id + "_preview_img").setStyle("display", "");';
				$script[] = '			} else { ';
				$script[] = '				img.src = ""';
				$script[] = '				document.getElementById(id + "_preview_empty").setStyle("display", "");';
				$script[] = '				document.getElementById(id + "_preview_img").setStyle("display", "none");';
				$script[] = '			} ';
				$script[] = '		} ';
				$script[] = '	}';

				$script[] = '	function jMediaRefreshPreviewTip(tip)';
				$script[] = '	{';
				$script[] = '		var img = tip.getElement("img.media-preview");';
				$script[] = '		tip.getElement("div.tip").setStyle("max-width", "none");';
				$script[] = '		var id = img.getProperty("id");';
				$script[] = '		id = id.substring(0, id.length - "_preview".length);';
				$script[] = '		jMediaRefreshPreview(id);';
				$script[] = '		tip.setStyle("display", "block");';
				$script[] = '	}';

				// Add the script to the document head.
				JFactory::getDocument()->addScriptDeclaration(implode("\n", $script));

				self::$initialised = true;
			}

			$html = array();
			$attr = '';

			// Initialize some field attributes.
			$attr .= $this->element['class'] ? ' class="' . (string) $this->element['class'] . '"' : '';
			$attr .= $this->element['size'] ? ' size="' . (int) $this->element['size'] . '"' : '';

			// Initialize JavaScript field attributes.
			$attr .= $this->element['onchange'] ? ' onchange="' . (string) $this->element['onchange'] . '"' : '';

			// The text field.
			$html[] = '<div class="input-prepend input-append">';

			// The Preview.
			$preview = (string) $this->element['preview'];
			$showPreview = true;
			$showAsTooltip = false;
			switch ($preview)
			{
				case 'no': // Deprecated parameter value
				case 'false':
				case 'none':
					$showPreview = false;
					break;

				case 'yes': // Deprecated parameter value
				case 'true':
				case 'show':
					break;

				case 'tooltip':
				default:
					$showAsTooltip = true;
					$options = array(
						'onShow' => 'jMediaRefreshPreviewTip',
					);
					JHtml::_('behavior.tooltip', '.hasTipPreview', $options);
					break;
			}

			if ($showPreview)
			{
				if ($this->value && file_exists(JPATH_ROOT . '/' . $this->value))
				{
					$src = JURI::root() . $this->value;
				}
				else
				{
					$src = '';
				}

				$width = isset($this->element['preview_width']) ? (int) $this->element['preview_width'] : 300;
				$height = isset($this->element['preview_height']) ? (int) $this->element['preview_height'] : 200;
				$style = '';
				$style .= ($width > 0) ? 'max-width:' . $width . 'px;' : '';
				$style .= ($height > 0) ? 'max-height:' . $height . 'px;' : '';

				$imgattr = array(
					'id' => $this->id . '_preview',
					'class' => 'media-preview',
					'style' => $style,
				);
				$img = JHtml::image($src, JText::_('JLIB_FORM_MEDIA_PREVIEW_ALT'), $imgattr);
				$previewImg = '<div id="' . $this->id . '_preview_img"' . ($src ? '' : ' style="display:none"') . '>' . $img . '</div>';
				$previewImgEmpty = '<div id="' . $this->id . '_preview_empty"' . ($src ? ' style="display:none"' : '') . '>'
					. JText::_('JLIB_FORM_MEDIA_PREVIEW_EMPTY') . '</div>';

				$html[] = '<div class="media-preview add-on">';
				if ($showAsTooltip)
				{
					$tooltip = $previewImgEmpty . $previewImg;
					$options = array(
						'title' => JText::_('JLIB_FORM_MEDIA_PREVIEW_SELECTED_IMAGE'),
						'text' => '<i class="icon-eye-open"></i>',
						'class' => 'hasTipPreview'
					);
					$html[] = JHtml::tooltip($tooltip, $options);
				}
				else
				{
					$html[] = ' ' . $previewImgEmpty;
					$html[] = ' ' . $previewImg;
				}
				$html[] = '</div>';
			}

			$html[] = '	<input type="text" class="input-small" name="' . $this->name . '" id="' . $this->id . '"' . ' value="'
				. htmlspecialchars($this->value, ENT_COMPAT, 'UTF-8') . '"' . ' readonly="readonly"' . $attr . ' />';

			$directory = (string) $this->element['directory'];
			if ($this->value && file_exists(JPATH_ROOT . '/' . $this->value))
			{
				$folder = explode('/', $this->value);
				$folder = array_diff_assoc($folder, explode('/', JComponentHelper::getParams('com_media')->get('image_path', 'images')));
				array_pop($folder);
				$folder = implode('/', $folder);
			}
			elseif (file_exists(JPATH_ROOT . '/' . JComponentHelper::getParams('com_media')->get('image_path', 'images') . '/' . $directory))
			{
				$folder = $directory;
			}
			else
			{
				$folder = '';
			}

			// The button.
			if ($this->element['disabled'] != true)
			{
				
				$html[] = '<a class="modal btn" title="' . JText::_('JLIB_FORM_BUTTON_SELECT') . '"' . ' href="'
					. ($this->element['readonly'] ? ''
					: ($link ? $link
						: 'index.php?option=com_media&amp;view=images&amp;tmpl=component&amp;asset=' . $asset . '&amp;author='
						. $this->form->getValue($authorField)) . '&amp;fieldid=' . $this->id . '&amp;folder=' . $folder) . '"'
					. ' rel="{handler: \'iframe\', size: {x: 800, y: 500}}">';
				$html[] = JText::_('JLIB_FORM_BUTTON_SELECT') . '</a><a class="btn hasTooltip" title="' . JText::_('JLIB_FORM_BUTTON_CLEAR') . '"' . ' href="#" onclick="';
				$html[] = 'jInsertFieldValue(\'\', \'' . $this->id . '\');';
				$html[] = 'return false;';
				$html[] = '">';
				$html[] = '<i class="icon-remove"></i></a>';
			}

			$html[] = '</div>';

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

}