/**
	 * @param  string            $name          The name of the form element
	 * @param  string            $value         The value of the element
	 * @param  SimpleXMLElement  $node          The xml element for the parameter
	 * @param  string            $control_name  The control name
	 * @return string                           The html for the element
	 */
	function _form_ordering( $name, $value, &$node, $control_name ) {
		global $_CB_database;

		$onclick								=	$node->attributes( 'onclick' );

		if ( $onclick ) {
			$onclickValues					=	explode( ',', $onclick );

			$additionalConditionOrderUp		=	true;
			$additionalConditionOrderDown	=	true;
			$orderinggroups					=	$node->getElementByPath( 'orderinggroups');
			if ( $orderinggroups ) {
				$orderings					=	array();
				foreach ( $orderinggroups->children() as $group ) {
					/** @var $group SimpleXMLElement */
					if ( $group->getName() == 'ordering' ) {
						$orderings[]		=	$group->attributes( 'name' );		// ignore $group->attributes( 'type' ) here
					}
				}
				if ( count( $orderings ) > 0 ) {
					foreach ( $orderings as $typeField ) {
						if ( $this->_modelOfDataRows[$this->_modelOfDataRowsNumber]->get( $typeField ) !== null ) {
							if ( isset( $this->_modelOfDataRows[$this->_modelOfDataRowsNumber - 1] )
								&& $this->_modelOfDataRows[$this->_modelOfDataRowsNumber]->get( $typeField ) != $this->_modelOfDataRows[$this->_modelOfDataRowsNumber - 1]->get( $typeField ) ) {
								$additionalConditionOrderUp		=	false;
							}
							if ( isset( $this->_modelOfDataRows[$this->_modelOfDataRowsNumber + 1] )
								&& $this->_modelOfDataRows[$this->_modelOfDataRowsNumber]->get( $typeField ) != $this->_modelOfDataRows[$this->_modelOfDataRowsNumber + 1]->get( $typeField ) ) {
								$additionalConditionOrderDown	=	false;
							}
						}
					}
				}
			}
			$noordering		=	( $node->attributes( 'noordering' ) == 'true' );
			$content	=  '';
			if ( in_array( 'arrows', $onclickValues ) && ( ! $noordering ) ) {
				$content	.= $this->_controllerView->pageNav->orderUpIcon( null, ( $value > -10000 && $value < 10000 && $additionalConditionOrderUp ), 'orderup/' . $name );
				$content	.= '&nbsp;&nbsp;&nbsp;';
				$content	.= $this->_controllerView->pageNav->orderDownIcon( null, null, ( $value > -10000 && $value < 10000 && $additionalConditionOrderDown ), 'orderdown/' . $name );
			}
			if ( ( in_array( 'arrows', $onclickValues ) && ( ! $noordering ) ) && in_array( 'number', $onclickValues ) ) {
				$content	.= '&nbsp;&nbsp;&nbsp;';
			}
			if ( in_array( 'number', $onclickValues ) || $noordering ) {
				$content	.= '<input type="text" name="' . $this->_controllerView->fieldName( $name . '[]' ) . '" size="5" value="' . $value . '" class="form-control text-center"' . ( $noordering ? ' readonly="readonly"' : null ) . ' />';
			}
		} elseif ( $this->_view ) {
			$content		=	htmlspecialchars( $value );
		} else {
			if ( ( $value > -10000 ) && ( $value < 10000 ) ) {
				$dataStorage					=	$this->_modelOfData[0]->getStorage();

				if ( $dataStorage instanceof TableInterface ) {
					$dataTable					=	$dataStorage->getTableName();
				} else {
					/** @var \StdClass $dataStorage */
					$dataTable					=	$dataStorage->_tbl;
				}

				$xmlsql							=	new XmlQuery( $_CB_database, $dataTable, $this->_pluginParams );

				$xmlsql->setExternalDataTypeValues( 'modelofdata', $this->_modelOfData[0] );

				$text							=	$node->attributes( 'value' );

				if ( ! $text ) {
					$text						=	$name;
				}

				$data							=	$node->getElementByPath( 'data' );

				if ( ! $data ) {
					$defaultData				=	'<?xml version="1.0" encoding="UTF-8"?>'
												.	'<data table="' . htmlspecialchars( $dataTable ) . '">'
												.		'<rows>'
												.			'<field name="' . htmlspecialchars( $name ) . '" as="value" />'
												.			'<field name="' . htmlspecialchars( $text ) . '" as="text" />'
												.		'</rows>'
												.		'<orderby>'
												.			'<field name="' . htmlspecialchars( $name ) . '" ordering="ASC" />'
												.		'</orderby>'
												.	'</data>';

					$data						=	new SimpleXMLElement( $defaultData );

					$xmlsql->prepare_query( $data );

					$xmlsql->addWhere( $name, '>', '-10000', 'sql:int' );
					$xmlsql->addWhere( $name, '<', '10000', 'sql:int' );

					$orderinggroups				=	$node->getElementByPath( 'orderinggroups');

					if ( $orderinggroups ) {
						foreach ( $orderinggroups->children() as $group ) {
							/** @var SimpleXMLElement $group */
							$orderingFieldName	=	$group->attributes( 'name' );

							if ( ( $group->getName() == 'ordering' ) && $orderingFieldName && ( $this->_modelOfData[0]->get( $orderingFieldName ) !== null ) ) {
								$xmlsql->addWhere( $orderingFieldName, '=', $this->_modelOfData[0]->get( $orderingFieldName ), $group->attributes( 'type' ) );
							}
						}
					}
				} else {
					$xmlsql->prepare_query( $data );
				}

				$options						=	$this->_getOrderingList( $xmlsql->_buildSQLquery() );

				if ( $value === '' ) {
					$value						=	$options[count( $options ) - 1]->value;
				}

				$value							=	(int) $value;

				$content						=	$this->selectList( $options, $node, $control_name, $name, $value );
			} else {
				$content						=	'<input type="hidden" name="ordering" value="'. $value .'" />' . CBTxt::T( 'This entry cannot be reordered' );
			}
		}

		return $content;
	}