public function render() {
	
		$ret = '<input ' . $this->getNameProperty();
	
		switch ($this->type) {

            default:
            case 'text':
            case 'email':
            case 'tel':
            case 'url':
            case 'color':
            case 'password':
                $ret .= ' type="' . htmlspecialchars($this->type) . '" value="' . htmlspecialchars($this->value) . '"';
                break;
                
            case 'number':
            	$curr = setlocale(LC_NUMERIC, 0);
            	setlocale(LC_NUMERIC, 'en_US');
            	$ret .= ' type="number" value="' . htmlspecialchars($this->value) . '"';
            	setlocale(LC_NUMERIC, $curr);
            	break;

            case 'bool':
                $ret .= ' type="checkbox" value="1"';
                if ($this->value) $ret .= ' checked="checked"';
                break;
                
            case 'date':
                $ret .= ' type="date" value="' . htmlspecialchars($this->value) . '"';
				break;

			case 'datetime':
				$type = Input::usingCustomDatetimepicker() ? 'datetime' : 'datetime-local';
				$ret .= ' type="' . $type . '" value="' . htmlspecialchars($this->value) . '"';
				break;
				
			case 'file':
				$ret .= ' type="file"';
				break;
	
			case 'address':
				$ret .= ' type="text" value="'. htmlspecialchars($this->value) .'" size="50" autocomplete="on" placeholder=""';
				$this->addClass('googlePlacesAutocomplete');
				break;
	
			case 'hidden':
				$ret .= ' type="hidden" value="' . htmlspecialchars($this->value) . '"';
				break;
	
		}
		
		// set min and max value attribute for date and number only
		if (in_array($this->type, ['number','date'])) {
			
			if ($this->min) {
				$ret .= ' min="' . htmlspecialchars($this->min) . '"';
			}
			
			if ($this->max) {
				$ret .= ' max="' . htmlspecialchars($this->max) . '"';
			}
			
		}
		
		// set minlength attribute
		if ($this->minLength) {
			$ret .= ' minlength="' . htmlspecialchars($this->minLength) . '"';
		}
		
		// set maxlength attribute
		if ($this->maxLength) {
			$ret .= ' maxlength="' . htmlspecialchars($this->maxLength) . '"';
		}
	
		// set accept attribute
		if ($this->accept) {
			$ret .= ' accept="' . $this->accept . '"';
		}
		
		// set step attribute
		if ($this->step) {
			$ret .= ' step="' . htmlspecialchars($this->step) . '"';
		}
		
		$ret .= $this->processProperties() . ' />';
	
		return $ret;
	
	}