<?php

class AppEvento{

	protected static $eventos = array(); 
	
	const APP_EVENTO_BIND = 'bind';
	const APP_EVENTO_LOAD = 'load';
	const APP_EVENTO_BLUR = 'blur';
	const APP_EVENTO_CHANGE = 'change';
	const APP_EVENTO_CLICK = 'click';
	const APP_EVENTO_DBLCLICK = 'dblclick';
	const APP_EVENTO_DELEGATE = 'delegate';
	const APP_EVENTO_DIER = 'die';
	const APP_EVENTO_ERROR = 'error';
	const APP_EVENTO_SUBMIT= 'submit';
	const APP_EVENTO_KEYPRESS= 'keypress';
	const APP_EVENTO_KEYUP= 'keyup';
	const APP_EVENTO_FOCUS= 'focus';
	const APP_EVENTO_FOCUSOUT= 'focusout';
	
	const EV_BIND = 'bind';
	const EV_LOAD = 'load';
	const EV_BLUR = 'blur';
	const EV_CHANGE = 'change';
	const EV_CLICK = 'click';
	const EV_DBLCLICK = 'dblclick';
	const EV_DELEGATE = 'delegate';
	const EV_DIER = 'die';
	const EV_ERROR = 'error';
	const EV_SUBMIT= 'submit';
	const EV_KEYPRESS= 'keypress';
	const EV_KEYUP= 'keyup';
	const EV_FOCUS= 'focus';
	const EV_FOCUSOUT= 'focusout';
	
	
	protected $disparador= self::APP_EVENTO_BLUR;
	protected $_cortarDisparador = true;
	protected $padre = null;
	
	
	protected $_selector = '';
	
	
	
	public function setSelector($selector){
		$this->_selector = $selector;
	}
	public function getSelector(){
		return $this->_selector;
	}
	
	public function __construct($evento){
		$this->disparador = $evento;
		AppEvento::addEvento($this);
	}
	
	public function __destruct(){
		//echo 'destroy '.$this->disparador;
	}
	
	
	public function setCortarDisparador($estado){
		$this->_cortarDisparador = $estado;
	}
	
	public function getSelect(){
		$selector = '';
		
		if($this->padre instanceof AppListado){

			if(strlen($this->_selector)>0){
				$selector.= $this->_selector;
			}
				
			$selector = "'".$selector."', linea";
			
			
		}else{
			if(method_exists($this->padre, 'identificadorScript')){
				$selector = $this->padre->identificadorScript();
			}
				
			if(strlen($this->_selector)>0){
				if(strlen($selector)>0)
					$selector .=' ';
				$selector.= $this->_selector;
			}
			
			$selector = "'".$selector."'";
		}
			
		
		return $selector;
		
		return $selector;
		
	}
	
	
	public function getDisparador(){
		return $this->disparador;
	}
	
	protected function renderCortarDisparador(){
		if($this->_cortarDisparador){
			return 'return false;';
		}
		return '';
	}
	
	static function addEvento(&$evento){
		
		self::$eventos[spl_object_hash($evento)]= $evento;
	}
	static function destroyEvento($evento){
		unset(self::$eventos[spl_object_hash($evento)]);
	}
	
	
	static function getRenderDeListado(&$listado){
		$eventos = '';
		foreach (self::$eventos as $evento){
			if($evento->getPadre() == $listado){
				
				$eventos .= "\t".$evento->renderEvento()."\r";
			}
				
				
		}
		return $eventos;
	}
	
	static function render(){
		
		$abreScript = '<script type="text/javascript">
$(document).ready(function(){
';
		$cierraScript = '});
				</script>';
		$eventos = '';
		foreach (self::$eventos as $evento){
			if(!$evento->getPadre() instanceof AppListado)
				$eventos .= "\t".$evento->renderEvento()."\r";
			
		}
		
		
		
		
		$script = 	$abreScript
					.$eventos
					.$cierraScript;
		
		return $script;
		
	}
	
	public function &getPadre(){
		return $this->padre;
	}
	public function setPadre(&$padre){
		$this->padre = $padre;
	}
	function renderEvento(){
		return '';
	}
	
	
}