<?php
 
class Agro_Element {
	private $_type;
	private $_name;
	private $_value;
	private $_class;
	private $_label;
	private $_options;
	private $_size = 15;
	private $_maxlength;
	private $_disabled = false;
	
	public function __construct($options=false) {
		if ($options['type']) {
			$this->setType($options['type']);
		}
		
		if ($options['value']) {
			$this->setValue($options['value']);
		}
		
		if ($options['name']) {
			$this->setName($options['name']);
		}
	}
	
	public function getArrayOptions($str) {
		$ret = false;
		
		if (strpos($str, '|')) {
			$options = explode('|', $str);
			
			$ret = array();
			if (is_array($options) && count($options)) {
				foreach ($options as $option) {
					$a = explode(':', $option);
					$ret[$a[0]] = $a[1];
				}
			}
		}
		
		return $ret;
	}
		
	public function setDisabled() {
		$this->_disabled = "disabled='disabled'";
	}

	public function setValue($value) { $this->_value = $value; }
	public function getValue() { return $this->_value; }
	
	public function setType($type) { $this->_type = $type; }
	public function getType() { return $this->_type; }
	
	public function setName($name) { $this->_name = $name; }
	public function getName() { return $this->_name; }
	
	public function setClass($class) { $this->_class = $class; }
	public function getClass() { return $this->_class; }
	
	public function setLabel($label) { $this->_label = $label; }
	public function getLabel() { return $this->_label; }
	
	public function setSize($textsize) { $this->_size = $textsize; }
	public function getSize() { return $this->_size; }
	
	public function setAttrib($attib, $value) { $this->_attrib[$attib] = $value; }
	public function getAttrib($attib) { return $this->_attrib[$attib]; }
	
	public function setLookup($schema, $table, $key, $text, $where='') {
		$this->_options = Agro_Db_Table_Abstract::getDefaultAdapter()->fetchPairs("select $key, $text from $schema.$table $where order by $text");
	}
	
	public function setMaxlength($textmaxlength) { $this->_maxlength = $textmaxlength; }
	public function getMaxlength() { return $this->_maxlength; }
	
	public function getOptions() { return $this->_options; }
	public function setOptions($options) {
		if (is_array($options)) {
			$this->_options = $options;
		} else {
			$this->_options = $this->getArrayOptions($options);
		}
	}
	
	public function get() { return $this->_build(); }
	
	private function _build() {

		switch ($this->_type) {
			case 'hidden':
				return $this->_inputHidden();
				
			case 'radio':
				return $this->_inputRadiobox();
				
			case 'ckeckbox':
				return $this->_inputRadiobox();
				
			case 'label':
				return $this->_labelText();
			
			case 'lookup':
			case 'select':
			case 'combo':
				return $this->_inputSelect();
				
			case 'textarea':
				return $this->_inputTextArea();
				
			case 'data':
				$this->setClass('data element_required');
				return $this->_inputText();
				
			case 'hora':
				$this->setClass('hora element_required');
				return $this->_inputText();
					
			case 'text':
				return $this->_inputText();
				
			case 'decimal':
				if ($this->getValue()) { $this->setValue(Agro_Util::formatDbCurrency($this->getValue(), 2, '.', false)); }
				$this->setSize(10);
				return $this->_inputText();
				
			case 'decimal3casas':
				$this->setClass('decimal3casas element_required');
				if ($this->getValue()) { $this->setValue(Agro_Util::formatDbCurrency($this->getValue(), 3, '.', false)); }
				$this->setSize(10);
				return $this->_inputText();
				
			case 'integer':
				$this->setSize(10);
				$this->setClass('integer element_required');
				return $this->_inputText();
				
			case 'idade':
				$this->setSize(10);
				$this->setClass('integer idade element_required');
				return $this->_inputText();
				
			case 'currency':
				$this->setValue(Agro_Util::formatDbCurrency($this->getValue()));
				$this->setClass('currency element_required');
				$this->setSize(10);
				return $this->_inputText();
			
			case 'label_currency':
				$this->setValue(Agro_Util::formatDbCurrency($this->getValue()));
				return $this->_labelText();
				
			case 'numXnum':
				$this->setClass('decimal element_required');
				$this->setMaxlength(4);
				$this->setSize(5);
				return $this->_inputNum_X_Num();
				
			case 'numXnum10':
				$this->setSize(10);
				$this->setMaxlength(10);
				return $this->_inputNum_X_Num();
				
			case 'coordenadas':
				$this->setClass($this->_class);
				$this->setSize(21);
				return $this->_inputText();
			
			case 'select_autocomplete':
				return $this->_selectAutocomplete();
			default:
				return $this->_inputText();
		}
	}
	
	private function _selectAutocomplete()
	{
		$html = "<label>{$this->_label}</label>";
		
		$htmlOptions = $valorSelecionado = '';
		foreach ($this->_options as $option) {
			if ($option['selected']) {
				$valorSelecionado = $option['value'];
			}

			$htmlOptions .= "<option value='{$option['value']}' {$option['attrib']}'>{$option['value']}</option>";
		}
		
		$html .= $this->_attrib['spanInfo'] . "&nbsp;<input list='list-{$this->_name}'type='text' autocomplete='off' value='{$valorSelecionado}' class='{$this->_class}' id='{$this->_name}' maxlength='{$this->_maxlength}' name='{$this->_name}' style='width:350px;' placeholder='Digite para buscar ou para criar'/>";
		
		$html .= "
		<datalist id='list-{$this->_name}' name='list-{$this->_name}' class='datalist-unidades' style='display:none;'>
			{$htmlOptions}
		</datalist>";
		
		return $html;
	}

	private function _inputNum_X_Num() {
		if ($this->_label) { $html .= "<label>{$this->_label}</label>"; }
		$attribs = '';
		if (is_array($this->_attrib)) {
			foreach ($this->_attrib as $attrib => $value) {
				$attribs .= "$attrib='$value' ";
			}
		}
		
		$html .= "<input $attribs type='text' value='{$this->_value['n']}' class='{$this->_class}' name='{$this->_name}[n]' id='{$this->_name}_n' size='{$this->_size}' maxlength='{$this->_maxlength}' {$this->_disabled}/>";
		$html .= " X ";
		$html .= "<input $attribs type='text' value='{$this->_value['m']}' class='{$this->_class}' name='{$this->_name}[m]' id='{$this->_name}_m' size='{$this->_size}' maxlength='{$this->_maxlength}' {$this->_disabled}/>";
		return $html;
	} 
	
	private function _inputText() {
		if ($this->_label) { $html .= "<label>{$this->_label}</label>"; }
		if ($this->_class == '') { $this->_class = 'upper'; }
	
		$attribs = '';
		if (is_array($this->_attrib) && !strpos($this->_class, 'data')) {
			foreach ($this->_attrib as $attrib => $value) {
				$attribs .= "$attrib='$value' ";
			}
		}
		
		$html .= "<input type='text' value='{$this->_value}' $attribs class='{$this->_class}' name='{$this->_name}' id='{$this->_name}' size='{$this->_size}' maxlength='{$this->_maxlength}' {$this->_disabled} />";
		
		return $html;
	}
	
	private function _inputTextArea() {
		$attribs = '';
		if (is_array($this->_attrib)) {
			foreach ($this->_attrib as $attrib => $value) {
				$attribs .= "$attrib='$value' ";
			}
		}
		
		if ($this->_label) { $html .= "<label>{$this->_label}</label>"; }
		if ($this->_class == '') { $this->_class = 'upper'; }
		
		$html .= "<textarea $attribs class='{$this->_class}' name='{$this->_name}' id='{$this->_name}' rows='12' cols='80' maxlength='{$this->_maxlength}' {$this->_disabled} >{$this->_value}</textarea>";
		return $html;
	}
	
	
	
	private function _inputSelect() {
		$attribs = '';
		if (is_array($this->_attrib)) {
			foreach ($this->_attrib as $attrib => $value) {
				$attribs .= "$attrib='$value' ";
			}
		}
		
		if ($this->_label) { $html .= "<label>{$this->_label}</label>"; }
		
		$html .= "<select $attribs name='{$this->_name}' id='{$this->_name}' class='{$this->_class}' {$this->_disabled}>";
		
		if ($this->_options) {
			$html .= "<option value=''></option>";
			foreach ($this->_options as $key => $text) {
				$selected = ($key == $this->_value ? 'selected' : '');
				$html .= "<option value='$key' $selected>$text</option>";
			}
		}
		
		$html .= "</select>";
		
		return $html;
	}
	
	private function _inputHidden() {
		return "<input type='hidden' value='{$this->_value}' class='{$this->_class}' name='{$this->_name}' id='{$this->_name}' />";
	}
	
	private function _inputRadiobox() {
		if ($this->_label) { $html .= "<label>{$this->_label}</label>"; }
		
		if ($this->_options) {
			foreach ($this->_options as $key => $text) {
				
				$selected = ($key == $this->_value ? 'checked' : '');
				$html .= "<span ><input style='vertical-align:bottom;' type='radio'  name='{$this->_name}' id='{$this->_name}' {$this->_disabled} $selected value='$key'>$text </span>";
				
			}
		}
		
		$html .= "</select>";
		
		return $html;
	}
	
	private function _labelText() {
		return "<label for='{$this->_name}'><b>{$this->_value}</b></label>";
	}
}