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

/**
 * This class is for rendering a breadcrumb menu.
 *
 * @package    lnApp
 * @subpackage Page
 * @category   Helpers
 * @author     Deon George
 * @copyright  (c) 2010 Deon George
 * @license    http://dev.leenooks.net/license.html
 */
abstract class lnApp_Breadcrumb extends HTMLRender {
	protected static $_data = array();
	protected static $_spacer = ' &raquo; ';
	protected static $_required_keys = array('body');

	/**
	 * Set the breadcrumb path
	 *
	 * @param array Block attributes
	 */
	public static function set($path) {
		if (is_string($path))
			static::$_data['path'] = explode('/',$path);
		elseif (is_array($path))
			static::$_data['path'] = $path;
		else
			throw new Kohana_Exception('Path is not a string, nor an array');
	}

	/**
	 * Enable a friendly name to be used for a path
	 */
	public static function name($path,$name,$override=TRUE) {
		if (isset(static::$_data['name'][$path]) AND ! $override)
			return;

		static::$_data['name'][$path] = $name;
	}

	/**
	 * Enable specifying the URL for a path
	 */
	public static function URL($path,$url,$override=TRUE) {
		if (isset(static::$_data['url'][$path]) AND ! $override)
			return;

		static::$_data['url'][$path] = $url;
	}

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

	/**
	 * Render this Breadcrumb
	 */
	protected function render() {
		$output = '<ul id="breadcrumb">';
		$output .= '<li>'.HTML::anchor('/',_('Home')).'</li>';

		$data = empty(static::$_data['path']) ? explode('/',preg_replace('/^\//','',Request::detect_uri())) : static::$_data['path'];

		$c = count($data);
		$i=0;
		foreach ($data as $k => $v) {
			$i++;

			$p = join('/',array_slice($data,0,$k+1));
			$output .= $i==$c ? '<li id="active">' : '<li>';
			$output .= HTML::anchor(
				(empty(static::$_data['url'][$p]) ? $p : static::$_data['url'][$p]),
				(empty(static::$_data['name'][$p]) ? ucfirst($v) : static::$_data['name'][$p])
			);
			$output .= '</li>';
		}

		$output .= '</ul>';
		return $output;
	}
}
?>