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

/**
 * This class extends renders OSB menu tree.
 *
 * @package    lnApp
 * @subpackage Tree
 * @category   Controllers
 * @author     Deon George
 * @copyright  (c) 2010 Open Source Billing
 * @license    http://dev.osbill.net/license.html
 */
class Controller_lnApp_Tree extends Controller_Default {
	// Our tree data
	protected $treedata;
	/**
	 * @var string page media route as per [Route]
	 */
	protected static $mediaroute = 'default/media';

	public function after() {
		parent::after();

		$this->request->headers['Content-Type'] = 'application/json';
		$this->request->response = sprintf('[%s]',json_encode($this->treedata));
	}

	public static function js() {
		$mediapath = Route::get(static::$mediaroute);

		return '
<div id="tree" class=""></div>
<script type="text/javascript">
$(function () {
	$("#tree").jstree({
		themes : {
			"theme" : "default",
			"url" : "'.URL::site($mediapath->uri(array('file'=>'css/jquery.jstree.css'))).'",
		},
		ui : {
			"select_limit" : 1,
			"select_node" : false,
		},
		cookies : {
			"save_selected" : false,
		},
		json_data : {
			"correct_state" : "true",
			"progressive_render" : "true",
			"ajax" : {
				"url" : "'.URL::site('/tree/json').'",
				"data" : function (n) {
					return { id : n.attr ? n.attr("id") : "N_"+0 };
				}
			}
		},
		plugins : [ "themes", "json_data", "ui", "cookies" ],
	});

	// On selection
	$("#tree").bind("select_node.jstree", function (e, data) {
		if (a = data.rslt.obj.attr(\'id\').indexOf(\'_\')) {
			id = data.rslt.obj.attr(\'id\').substr(a+1);

			if (href = $("#N_"+id).attr("href"))
				$("#ajBODY").load(href, function(r,s,x) {
					if (s == "error") {
						var msg = "Sorry but there was an error: ";
						$("#ajBODY").html(msg + x.status + " " + x.statusText + r);
					}
				});
			else
				alert("Unknown: "+id+" HREF:"+href);
		}
	});
});
</script>';
	}

	/**
	 * Draw the Tree Menu
	 *
	 * The incoming ID is either a Branch B_x or a Node N_x
	 * Where X is actually the module.
	 *
	 * @param id
	 */
	public function action_json($id=null) {
		if (! Auth::instance()->logged_in()) {
			$this->treedata = array('attr'=>array('id'=>'a_login'),
				'data'=>array('title'=>_('Please Login').'...','attr'=>array('id'=>'N_login','href'=>URL::site('/login'))));

			return;
		}

		$this->treedata = array();
		$data = array();

		// @todo Our menu options
		array_push($data,array(
			'id'=>'node',
			'name'=>'Node Info',
			'state'=>'none',
			'attr_id'=>'1',
			'attr_href'=>URL::Site('/node'),
		));

		foreach ($data as $branch) {
			array_push($this->treedata,array(
				'attr'=>array('id'=>sprintf('B_%s',$branch['id'])),
				'state'=>$branch['state'],
				'data'=>array('title'=>$branch['name']),
				'attr'=>array('id'=>sprintf('N_%s',$branch['id']),'href'=>empty($branch['attr_href']) ? URL::site(sprintf('/%s/menu',$branch['name'])) : $branch['attr_href']),
				)
			);
		}
	}
}
?>
