<?php

/**
 * Goweb Sitemanager 5 Framework
 *
 * Ficheiro de metodos comuns 
 *
 * @version    5.0.0
 * @category   Goweb
 * @package    Goweb_Js
 * @subpackage Tree
 * @author     I&D <dev@goweb.pt>, Pedro Pinto <ppinto@goweb.pt>
 * @copyright  2009 (c) Goweb (http://www.goweb.pt)
 */

/**
 * Classe para gerar o javascript do dtree
 *
 * @version    5.0.0
 * @category   Goweb
 * @package    Goweb_Js
 * @subpackage Tree
 * @author     I&D <dev@goweb.pt>, Pedro Pinto <ppinto@goweb.pt>
 * @copyright  2009 (c) Goweb (http://www.goweb.pt)
 */
class Goweb_Js_Tree_Node {

    /**
     * Array com os paremetros
     * 
     * @var  array  
     */
    protected $_params = array();

    /**
     * Constructor
     *
     * Paremetros:
     * <code>
     * id           => (integer) O ID do node
     * pid          => (integer) O ID do pai do node
     * name         => (string) Nome do node
     * url          => (string) O URL do node
     * urlId        => (string) Nome do ID para o URL do node
     * title        => (string) O titulo a ser mostrado
     * target       => (string) O target do URL do node
     * icon         => (string) Icon do node
     * iconOpen     => (string) Icon aberto do node
     * open         => (boolean) Se o node este aberto
     * url_1        => (string) URL extra 1
     * url_1_icon   => (string) Icon do URL extra 1
     * url_2        => (string) URL extra 2
     * url_2_icon   => (string) Icon do URL extra 2
     * url_3        => (string) URL extra 3
     * url_3_icon   => (string) Icon do URL extra 3
     * url_4        => (string) URL extra 4
     * url_4_icon   => (string) Icon do URL extra 4
     * url_5        => (string) URL extra 5
     * url_5_icon   => (string) Icon do URL extra 5
     * disabled     => (bool)   Disabilitar o ne
     * form_element => (string) Elemento do formul&aacute;rio
     * form_checked => (bool  ) Se o element este seleccionado
     * </code>
     *
     * @param  string  $name  Nome
     */
    public function __construct($id,
                                $pid,
                                $name,
                                $url = null,
                                $urlId = null,
                                $target = null,
                                $title = null,
                                $icon = null,
                                $iconOpen = null,
                                $open = null,
                                $url_1 = null,
                                $url_1_icon = null,
                                $url_2 = null,
                                $url_2_icon = null,
                                $url_3 = null,
                                $url_3_icon = null,
                                $url_4 = null,
                                $url_4_icon = null,
                                $url_5 = null,
                                $url_5_icon = null,
                                $disabled = null,
                                $form_element = null,
                                $form_checked = null) {
        $this->_params['id'] = $id;
        $this->_params['pid'] = $pid;
        $this->_params['name'] = $name;
        $this->_params['url'] = $url;
        $this->_params['urlId'] = $urlId;
        $this->_params['target'] = $target;
        $this->_params['title'] = $title;
        $this->_params['icon'] = $icon;
        $this->_params['iconOpen'] = $iconOpen;
        $this->_params['open'] = $open;
        $this->_params['url_1'] = $url_1;
        $this->_params['url_1_icon'] = $url_1_icon;
        $this->_params['url_2'] = $url_2;
        $this->_params['url_2_icon'] = $url_2_icon;
        $this->_params['url_3'] = $url_3;
        $this->_params['url_3_icon'] = $url_3_icon;
        $this->_params['url_4'] = $url_4;
        $this->_params['url_4_icon'] = $url_4_icon;
        $this->_params['url_5'] = $url_5;
        $this->_params['url_5_icon'] = $url_5_icon;
        $this->_params['disabled'] = $disabled;
        $this->_params['form_element'] = $form_element;
        $this->_params['form_checked'] = $form_checked;
        
        if (!$this->_params['url']) {
            $this->_params['url'] = 'javascript:void(0);';
        }
    }

    /**
     * Retorna os paremetros do node.
     *
     * @return  array
     */
    public function getParams() {
        $params = (array) $this->_params;
        $params['url'] = is_int(strpos($params['url'], 'onclick')) || is_int(strpos($params['url'], 'javascript')) ? $params['url'] : Goweb::link($params['url']);
        $params['url_1'] = is_int(strpos($params['url_1'], 'onclick')) || is_int(strpos($params['url_1'], 'javascript')) ? $params['url_1'] : Goweb::link($params['url_1']);
        $params['url_2'] = is_int(strpos($params['url_2'], 'onclick')) || is_int(strpos($params['url_2'], 'javascript')) ? $params['url_2'] : Goweb::link($params['url_2']);
        $params['url_3'] = is_int(strpos($params['url_3'], 'onclick')) || is_int(strpos($params['url_3'], 'javascript')) ? $params['url_3'] : Goweb::link($params['url_3']);
        $params['url_4'] = is_int(strpos($params['url_4'], 'onclick')) || is_int(strpos($params['url_4'], 'javascript')) ? $params['url_4'] : Goweb::link($params['url_4']);
        $params['url_5'] = is_int(strpos($params['url_5'], 'onclick')) || is_int(strpos($params['url_5'], 'javascript')) ? $params['url_5'] : Goweb::link($params['url_5']);
        return $params;
    }

    /**
     * Atribui um valor ao paremetro
     * 
     * @param   string  O nome do paremetro
     * @param   mixed   O valor do paremetro
     * @throws  Goweb_Exception  No caso do paremetro n&atilde;o existir
     */
    public function __set($key, $value) {
        if (!array_key_exists($key, $this->_params)) {
            throw new Goweb_Exception("O paremetro '$key' n&atilde;o existe na classe '" . get_class($this) . "'");
        }
        $this->_params[$key] = $value;
    }

    /**
     * Retorna o valor de um paremetro
     * 
     * @param   string  O nome do paremetro
     * @throws  Goweb_Exception  No caso do paremetro n&atilde;o existir
     * @return  mixed   O valor do paremetro
     */
    public function __get($key) {
        if (!array_key_exists($key, $this->_params)) {
            throw new Goweb_Exception("O paremetro '$key' n&atilde;o existe na classe '" . get_class($this) . "'");
        }
        return $this->_params[$key];
    }
}
