<?php defined('SYSPATH') or die('No direct access allowed.');

/**
 * This class is for rendering HTML script tags
 *
 * @package    lnApp
 * @category   lnApp/Helpers
 * @author     Deon George
 * @copyright  (c) 2009-2013 Deon George
 * @license    http://dev.leenooks.net/license.html
 */
abstract class lnApp_Script extends HTMLRender {
	protected static $_data = array();
	protected static $_spacer = "\n";
	protected static $_required_keys = array('type','data');
	protected static $_unique_vals = array('file'=>'type');
	protected static $_rendered = FALSE;

	/**
	 * Return an instance of this class
	 *
	 * @return Script
	 */
	public static function factory() {
		return new Script;
	}

	/**
	 * Render the script tag
	 *
	 * @see HTMLRender::render()
	 */
	protected function render() {
		$foutput = $soutput = '';
		$mediapath = Route::get(static::$_media_path);

		foreach (static::$_data as $value) {
			switch ($value['type']) {
				case 'file':
					$foutput .= HTML::script($mediapath->uri(array('file'=>$value['data'])));
					break;
				case 'src':
					$foutput .= HTML::script($value['data']);
					break;
				case 'stdin':
					$soutput .= sprintf("<script type=\"text/javascript\">//<![CDATA[\n%s\n//]]></script>",$value['data']);
					break;
				default:
					throw new Kohana_Exception('Unknown style type :type',array(':type'=>$value['type']));
			}
		}

		static::$_rendered = TRUE;
		return $foutput.static::$_spacer.$soutput;
	}

	public static function add($item,$prepend=FALSE,$x='') {
		if (static::$_rendered)
			throw new Kohana_Exception('Already rendered?');

		return parent::add($item,$prepend);
	}
}
?>
