<?php 
class VstCaja{
	
	protected $_elementos= array();
	
	
	const TIPO_NORMAL = 'div';
	const TIPO_ASIDE = 'aside';
	const TIPO_SECTION = 'section';
	const TIPO_HEADER = 'header';
	const TIPO_SPAN = 'span';
	
	protected $_id = '';
	protected $_tipo = self::TIPO_NORMAL;
	
	protected $_role = '';
	protected $_class = '';
	
	
	public function __construct( $id="", $tipo = self::TIPO_NORMAL, $role = '' , $class = ''){
		$this->_id = $id;
		$this->_tipo = $tipo;
		$this->_role = $role;
		$this->_class = $class;
		
	}
	
	public function setRole($value){
		$this->_role = $value;
	}
	
	public function getElementos(){
		return $this->_elementos;
	}
	
	public function render(){
		$salida = '';
		
		
		if($this->_tipo != self::TIPO_NORMAL || $this->_id || $this->_role){
			$salida .= '<'.$this->_tipo.'  id="'.$this->_id.'" role="'.$this->_role.'" class="'.$this->_class.'">';
		}else{
			
		}
		
		ob_flush();
		foreach ($this->_elementos as $elemento){
			
			if(strlen($elemento['clase'])>0)
				$salida .= '<div class="'.$elemento['clase'].'">';
			
			if(strlen($elemento['titulo'])>0)
				$salida .= '<h3>'.$elemento['titulo'].'</h3>' ;
			if(is_object($elemento['elemento'])){
				$salida .= $elemento['elemento']->render();
			}else{
				$salida .= $elemento['elemento'];
			}
			
			if(strlen($elemento['clase'])>0)
				$salida .= '</div>';
			
			
		}
		if($this->_tipo != self::TIPO_NORMAL || $this->_id){
			$salida .= '</'.$this->_tipo.'>';
		}
		
		
		
		return $salida;
	}
	public function __toString(){
		return $this->render();
	}
	
	public function addElement(&$elemento, $titulo = '' , $clase = ''){
		$this->_elementos[] = array( 'elemento' => $elemento, 'titulo' => $titulo, 'clase'=>$clase);
	}
	
}