converted to unix-style eol
[www-register-wizard.git] / helpers / form_helper.php
index 109d8c1..c002c6f 100644 (file)
-<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');\r
-/**\r
- * CodeIgniter\r
- *\r
- * An open source application development framework for PHP 4.3.2 or newer\r
- *\r
- * @package            CodeIgniter\r
- * @author             ExpressionEngine Dev Team\r
- * @copyright  Copyright (c) 2008, EllisLab, Inc.\r
- * @license            http://codeigniter.com/user_guide/license.html\r
- * @link               http://codeigniter.com\r
- * @since              Version 1.0\r
- * @filesource\r
- */\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * CodeIgniter Form Helpers\r
- *\r
- * @package            CodeIgniter\r
- * @subpackage Helpers\r
- * @category   Helpers\r
- * @author             ExpressionEngine Dev Team\r
- * @link               http://codeigniter.com/user_guide/helpers/form_helper.html\r
- */\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Form Declaration\r
- *\r
- * Creates the opening portion of the form.\r
- *\r
- * @access     public\r
- * @param      string  the URI segments of the form destination\r
- * @param      array   a key/value pair of attributes\r
- * @param      array   a key/value pair hidden data\r
- * @return     string\r
- */    \r
-if ( ! function_exists('form_open'))\r
-{\r
-       function form_open($action = '', $attributes = '', $hidden = array())\r
-       {\r
-               $CI =& get_instance();\r
-\r
-               if ($attributes == '')\r
-               {\r
-                       $attributes = 'method="post"';\r
-               }\r
-\r
-               $action = ( strpos($action, '://') === FALSE) ? $CI->config->site_url($action) : $action;\r
-\r
-               $form = '<form action="'.$action.'"';\r
-       \r
-               $form .= _attributes_to_string($attributes, TRUE);\r
-       \r
-               $form .= '>';\r
-\r
-               if (is_array($hidden) AND count($hidden) > 0)\r
-               {\r
-                       $form .= form_hidden($hidden);\r
-               }\r
-\r
-               return $form;\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Form Declaration - Multipart type\r
- *\r
- * Creates the opening portion of the form, but with "multipart/form-data".\r
- *\r
- * @access     public\r
- * @param      string  the URI segments of the form destination\r
- * @param      array   a key/value pair of attributes\r
- * @param      array   a key/value pair hidden data\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_open_multipart'))\r
-{\r
-       function form_open_multipart($action, $attributes = array(), $hidden = array())\r
-       {\r
-               $attributes['enctype'] = 'multipart/form-data';\r
-               return form_open($action, $attributes, $hidden);\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Hidden Input Field\r
- *\r
- * Generates hidden fields.  You can pass a simple key/value string or an associative\r
- * array with multiple values.\r
- *\r
- * @access     public\r
- * @param      mixed\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_hidden'))\r
-{\r
-       function form_hidden($name, $value = '')\r
-       {\r
-               if ( ! is_array($name))\r
-               {\r
-                       return '<input type="hidden" name="'.$name.'" value="'.form_prep($value).'" />';\r
-               }\r
-\r
-               $form = '';\r
-\r
-               foreach ($name as $name => $value)\r
-               {\r
-                       $form .= "\n";\r
-                       $form .= '<input type="hidden" name="'.$name.'" value="'.form_prep($value).'" />';\r
-               }\r
-\r
-               return $form;\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Text Input Field\r
- *\r
- * @access     public\r
- * @param      mixed\r
- * @param      string\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_input'))\r
-{\r
-       function form_input($data = '', $value = '', $extra = '')\r
-       {\r
-               $defaults = array('type' => 'text', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);\r
-\r
-               return "<input "._parse_form_attributes($data, $defaults).$extra." />";\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Password Field\r
- *\r
- * Identical to the input function but adds the "password" type\r
- *\r
- * @access     public\r
- * @param      mixed\r
- * @param      string\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_password'))\r
-{\r
-       function form_password($data = '', $value = '', $extra = '')\r
-       {\r
-               if ( ! is_array($data))\r
-               {\r
-                       $data = array('name' => $data);\r
-               }\r
-\r
-               $data['type'] = 'password';\r
-               return form_input($data, $value, $extra);\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Upload Field\r
- *\r
- * Identical to the input function but adds the "file" type\r
- *\r
- * @access     public\r
- * @param      mixed\r
- * @param      string\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_upload'))\r
-{\r
-       function form_upload($data = '', $value = '', $extra = '')\r
-       {\r
-               if ( ! is_array($data))\r
-               {\r
-                       $data = array('name' => $data);\r
-               }\r
-\r
-               $data['type'] = 'file';\r
-               return form_input($data, $value, $extra);\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Textarea field\r
- *\r
- * @access     public\r
- * @param      mixed\r
- * @param      string\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_textarea'))\r
-{\r
-       function form_textarea($data = '', $value = '', $extra = '')\r
-       {\r
-               $defaults = array('name' => (( ! is_array($data)) ? $data : ''), 'cols' => '90', 'rows' => '12');\r
-\r
-               if ( ! is_array($data) OR ! isset($data['value']))\r
-               {\r
-                       $val = $value;\r
-               }\r
-               else\r
-               {\r
-                       $val = $data['value']; \r
-                       unset($data['value']); // textareas don't use the value attribute\r
-               }\r
-\r
-               return "<textarea "._parse_form_attributes($data, $defaults).$extra.">".$val."</textarea>";\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Drop-down Menu\r
- *\r
- * @access     public\r
- * @param      string\r
- * @param      array\r
- * @param      string\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_dropdown'))\r
-{\r
-       function form_dropdown($name = '', $options = array(), $selected = array(), $extra = '')\r
-       {\r
-               if ( ! is_array($selected))\r
-               {\r
-                       $selected = array($selected);\r
-               }\r
-\r
-               // If no selected state was submitted we will attempt to set it automatically\r
-               if (count($selected) === 0)\r
-               {\r
-                       // If the form name appears in the $_POST array we have a winner!\r
-                       if (isset($_POST[$name]))\r
-                       {\r
-                               $selected = array($_POST[$name]);\r
-                       }\r
-               }\r
-\r
-               if ($extra != '') $extra = ' '.$extra;\r
-\r
-               $multiple = (count($selected) > 1 && strpos($extra, 'multiple') === FALSE) ? ' multiple="multiple"' : '';\r
-\r
-               $form = '<select name="'.$name.'"'.$extra.$multiple.">\n";\r
-       \r
-               foreach ($options as $key => $val)\r
-               {\r
-                       $key = (string) $key;\r
-                       $val = (string) $val;\r
-\r
-                       $sel = (in_array($key, $selected))?' selected="selected"':'';\r
-\r
-                       $form .= '<option value="'.$key.'"'.$sel.'>'.$val."</option>\n";\r
-               }\r
-\r
-               $form .= '</select>';\r
-\r
-               return $form;\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Checkbox Field\r
- *\r
- * @access     public\r
- * @param      mixed\r
- * @param      string\r
- * @param      bool\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_checkbox'))\r
-{\r
-       function form_checkbox($data = '', $value = '', $checked = FALSE, $extra = '')\r
-       {\r
-               $defaults = array('type' => 'checkbox', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);\r
-\r
-               if (is_array($data) AND array_key_exists('checked', $data))\r
-               {\r
-                       $checked = $data['checked'];\r
-\r
-                       if ($checked == FALSE)\r
-                       {\r
-                               unset($data['checked']);\r
-                       }\r
-                       else\r
-                       {\r
-                               $data['checked'] = 'checked';\r
-                       }\r
-               }\r
-\r
-               if ($checked == TRUE)\r
-               {\r
-                       $defaults['checked'] = 'checked';\r
-               }\r
-               else\r
-               {\r
-                       unset($defaults['checked']);\r
-               }\r
-\r
-               return "<input "._parse_form_attributes($data, $defaults).$extra." />";\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Radio Button\r
- *\r
- * @access     public\r
- * @param      mixed\r
- * @param      string\r
- * @param      bool\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_radio'))\r
-{\r
-       function form_radio($data = '', $value = '', $checked = FALSE, $extra = '')\r
-       {\r
-               if ( ! is_array($data))\r
-               {       \r
-                       $data = array('name' => $data);\r
-               }\r
-\r
-               $data['type'] = 'radio';\r
-               return form_checkbox($data, $value, $checked, $extra);\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Submit Button\r
- *\r
- * @access     public\r
- * @param      mixed\r
- * @param      string\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_submit'))\r
-{      \r
-       function form_submit($data = '', $value = '', $extra = '')\r
-       {\r
-               $defaults = array('type' => 'submit', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);\r
-\r
-               return "<input "._parse_form_attributes($data, $defaults).$extra." />";\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Reset Button\r
- *\r
- * @access     public\r
- * @param      mixed\r
- * @param      string\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_reset'))\r
-{\r
-       function form_reset($data = '', $value = '', $extra = '')\r
-       {\r
-               $defaults = array('type' => 'reset', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);\r
-\r
-               return "<input "._parse_form_attributes($data, $defaults).$extra." />";\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Form Button\r
- *\r
- * @access     public\r
- * @param      mixed\r
- * @param      string\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_button'))\r
-{\r
-       function form_button($data = '', $content = '', $extra = '')\r
-       {\r
-               $defaults = array('name' => (( ! is_array($data)) ? $data : ''), 'type' => 'submit');\r
-\r
-               if ( is_array($data) AND isset($data['content']))\r
-               {\r
-                       $content = $data['content'];\r
-                       unset($data['content']); // content is not an attribute\r
-               }\r
-\r
-               return "<button "._parse_form_attributes($data, $defaults).$extra.">".$content."</button>";\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Form Label Tag\r
- *\r
- * @access     public\r
- * @param      string  The text to appear onscreen\r
- * @param      string  The id the label applies to\r
- * @param      string  Additional attributes\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_label'))\r
-{\r
-       function form_label($label_text = '', $id = '', $attributes = array())\r
-       {\r
-\r
-               $label = '<label';\r
-\r
-               if ($id != '')\r
-               {\r
-                        $label .= " for=\"$id\"";\r
-               }\r
-\r
-               if (is_array($attributes) AND count($attributes) > 0)\r
-               {\r
-                       foreach ($attributes as $key => $val)\r
-                       {\r
-                               $label .= ' '.$key.'="'.$val.'"';\r
-                       }\r
-               }\r
-\r
-               $label .= ">$label_text</label>";\r
-\r
-               return $label;\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-/**\r
- * Fieldset Tag\r
- *\r
- * Used to produce <fieldset><legend>text</legend>.  To close fieldset\r
- * use form_fieldset_close()\r
- *\r
- * @access     public\r
- * @param      string  The legend text\r
- * @param      string  Additional attributes\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_fieldset'))\r
-{\r
-       function form_fieldset($legend_text = '', $attributes = array())\r
-       {\r
-               $fieldset = "<fieldset";\r
-\r
-               $fieldset .= _attributes_to_string($attributes, FALSE);\r
-\r
-               $fieldset .= ">\n";\r
-\r
-               if ($legend_text != '')\r
-               {\r
-                       $fieldset .= "<legend>$legend_text</legend>\n";\r
-               }\r
-\r
-               return $fieldset;\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Fieldset Close Tag\r
- *\r
- * @access     public\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_fieldset_close'))\r
-{\r
-       function form_fieldset_close($extra = '')\r
-       {\r
-               return "</fieldset>".$extra;\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Form Close Tag\r
- *\r
- * @access     public\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_close'))\r
-{\r
-       function form_close($extra = '')\r
-       {\r
-               return "</form>".$extra;\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Form Prep\r
- *\r
- * Formats text so that it can be safely placed in a form field in the event it has HTML tags.\r
- *\r
- * @access     public\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_prep'))\r
-{\r
-       function form_prep($str = '')\r
-       {\r
-               // if the field name is an array we do this recursively\r
-               if (is_array($str))\r
-               {\r
-                       foreach ($str as $key => $val)\r
-                       {\r
-                               $str[$key] = form_prep($val);\r
-                       }\r
-\r
-                       return $str;\r
-               }\r
-\r
-               if ($str === '')\r
-               {\r
-                       return '';\r
-               }\r
-\r
-               $temp = '__TEMP_AMPERSANDS__';\r
-\r
-               // Replace entities to temporary markers so that \r
-               // htmlspecialchars won't mess them up\r
-               $str = preg_replace("/&#(\d+);/", "$temp\\1;", $str);\r
-               $str = preg_replace("/&(\w+);/",  "$temp\\1;", $str);\r
-\r
-               $str = htmlspecialchars($str);\r
-\r
-               // In case htmlspecialchars misses these.\r
-               $str = str_replace(array("'", '"'), array("&#39;", "&quot;"), $str);\r
-\r
-               // Decode the temp markers back to entities\r
-               $str = preg_replace("/$temp(\d+);/","&#\\1;",$str);\r
-               $str = preg_replace("/$temp(\w+);/","&\\1;",$str);\r
-\r
-               return $str;\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Form Value\r
- *\r
- * Grabs a value from the POST array for the specified field so you can\r
- * re-populate an input field or textarea.  If Form Validation\r
- * is active it retrieves the info from the validation class\r
- *\r
- * @access     public\r
- * @param      string\r
- * @return     mixed\r
- */\r
-if ( ! function_exists('set_value'))\r
-{\r
-       function set_value($field = '', $default = '')\r
-       {\r
-               if (FALSE === ($OBJ =& _get_validation_object()))\r
-               {\r
-                       if ( ! isset($_POST[$field]))\r
-                       {\r
-                               return $default;\r
-                       }\r
-\r
-                       return form_prep($_POST[$field]);\r
-               }\r
-\r
-               return form_prep($OBJ->set_value($field, $default));\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Set Select\r
- *\r
- * Let's you set the selected value of a <select> menu via data in the POST array.\r
- * If Form Validation is active it retrieves the info from the validation class\r
- *\r
- * @access     public\r
- * @param      string\r
- * @param      string\r
- * @param      bool\r
- * @return     string\r
- */\r
-if ( ! function_exists('set_select'))\r
-{\r
-       function set_select($field = '', $value = '', $default = FALSE)\r
-       {\r
-               $OBJ =& _get_validation_object();\r
-\r
-               if ($OBJ === FALSE)\r
-               {\r
-                       if ( ! isset($_POST[$field]))\r
-                       {\r
-                               if (count($_POST) === 0)\r
-                               {\r
-                                       return ' selected="selected"';\r
-                               }\r
-                               return '';\r
-                       }\r
-\r
-                       $field = $_POST[$field];\r
-\r
-                       if (is_array($field))\r
-                       {\r
-                               if ( ! in_array($value, $field))\r
-                               {\r
-                                       return '';\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               if (($field == '' OR $value == '') OR ($field != $value))\r
-                               {\r
-                                       return '';\r
-                               }\r
-                       }\r
-\r
-                       return ' selected="selected"';\r
-               }\r
-\r
-               return $OBJ->set_select($field, $value, $default);\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Set Checkbox\r
- *\r
- * Let's you set the selected value of a checkbox via the value in the POST array.\r
- * If Form Validation is active it retrieves the info from the validation class\r
- *\r
- * @access     public\r
- * @param      string\r
- * @param      string\r
- * @param      bool\r
- * @return     string\r
- */\r
-if ( ! function_exists('set_checkbox'))\r
-{\r
-       function set_checkbox($field = '', $value = '', $default = FALSE)\r
-       {\r
-               $OBJ =& _get_validation_object();\r
-\r
-               if ($OBJ === FALSE)\r
-               { \r
-                       if ( ! isset($_POST[$field]))\r
-                       {\r
-                               if (count($_POST) === 0)\r
-                               {\r
-                                       return ' checked="checked"';\r
-                               }\r
-                               return '';\r
-                       }\r
-\r
-                       $field = $_POST[$field];\r
-                       \r
-                       if (is_array($field))\r
-                       {\r
-                               if ( ! in_array($value, $field))\r
-                               {\r
-                                       return '';\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               if (($field == '' OR $value == '') OR ($field != $value))\r
-                               {\r
-                                       return '';\r
-                               }\r
-                       }\r
-\r
-                       return ' checked="checked"';\r
-               }\r
-\r
-               return $OBJ->set_checkbox($field, $value, $default);\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Set Radio\r
- *\r
- * Let's you set the selected value of a radio field via info in the POST array.\r
- * If Form Validation is active it retrieves the info from the validation class\r
- *\r
- * @access     public\r
- * @param      string\r
- * @param      string\r
- * @param      bool\r
- * @return     string\r
- */\r
-if ( ! function_exists('set_radio'))\r
-{\r
-       function set_radio($field = '', $value = '', $default = FALSE)\r
-       {\r
-               $OBJ =& _get_validation_object();\r
-\r
-               if ($OBJ === FALSE)\r
-               {\r
-                       if ( ! isset($_POST[$field]))\r
-                       {\r
-                               if (count($_POST) === 0)\r
-                               {\r
-                                       return ' checked="checked"';\r
-                               }\r
-                               return '';\r
-                       }\r
-\r
-                       $field = $_POST[$field];\r
-                       \r
-                       if (is_array($field))\r
-                       {\r
-                               if ( ! in_array($value, $field))\r
-                               {\r
-                                       return '';\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               if (($field == '' OR $value == '') OR ($field != $value))\r
-                               {\r
-                                       return '';\r
-                               }\r
-                       }\r
-\r
-                       return ' checked="checked"';\r
-               }\r
-\r
-               return $OBJ->set_radio($field, $value, $default);\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Form Error\r
- *\r
- * Returns the error for a specific form field.  This is a helper for the\r
- * form validation class.\r
- *\r
- * @access     public\r
- * @param      string\r
- * @param      string\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('form_error'))\r
-{\r
-       function form_error($field = '', $prefix = '', $suffix = '')\r
-       {\r
-               if (FALSE === ($OBJ =& _get_validation_object()))\r
-               {\r
-                       return '';\r
-               }\r
-\r
-               return $OBJ->error($field, $prefix, $suffix);\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Validation Error String\r
- *\r
- * Returns all the errors associated with a form submission.  This is a helper\r
- * function for the form validation class.\r
- *\r
- * @access     public\r
- * @param      string\r
- * @param      string\r
- * @return     string\r
- */\r
-if ( ! function_exists('validation_errors'))\r
-{\r
-       function validation_errors($prefix = '', $suffix = '')\r
-       {\r
-               if (FALSE === ($OBJ =& _get_validation_object()))\r
-               {\r
-                       return '';\r
-               }\r
-\r
-               return $OBJ->error_string($prefix, $suffix);\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Parse the form attributes\r
- *\r
- * Helper function used by some of the form helpers\r
- *\r
- * @access     private\r
- * @param      array\r
- * @param      array\r
- * @return     string\r
- */\r
-if ( ! function_exists('_parse_form_attributes'))\r
-{\r
-       function _parse_form_attributes($attributes, $default)\r
-       {\r
-               if (is_array($attributes))\r
-               {\r
-                       foreach ($default as $key => $val)\r
-                       {\r
-                               if (isset($attributes[$key]))\r
-                               {\r
-                                       $default[$key] = $attributes[$key];\r
-                                       unset($attributes[$key]);\r
-                               }\r
-                       }\r
-\r
-                       if (count($attributes) > 0)\r
-                       {\r
-                               $default = array_merge($default, $attributes);\r
-                       }\r
-               }\r
-\r
-               $att = '';\r
-\r
-               foreach ($default as $key => $val)\r
-               {\r
-                       if ($key == 'value')\r
-                       {\r
-                               $val = form_prep($val);\r
-                       }\r
-\r
-                       $att .= $key . '="' . $val . '" ';\r
-               }\r
-\r
-               return $att;\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Attributes To String\r
- *\r
- * Helper function used by some of the form helpers\r
- *\r
- * @access     private\r
- * @param      mixed\r
- * @param      bool\r
- * @return     string\r
- */\r
-if ( ! function_exists('_attributes_to_string'))\r
-{\r
-       function _attributes_to_string($attributes, $formtag = FALSE)\r
-       {\r
-               if (is_string($attributes) AND strlen($attributes) > 0)\r
-               {\r
-                       if ($formtag == TRUE AND strpos($attributes, 'method=') === FALSE)\r
-                       {\r
-                               $attributes .= ' method="post"';\r
-                       }\r
-\r
-               return ' '.$attributes;\r
-               }\r
-       \r
-               if (is_object($attributes) AND count($attributes) > 0)\r
-               {\r
-                       $attributes = (array)$attributes;\r
-               }\r
-\r
-               if (is_array($attributes) AND count($attributes) > 0)\r
-               {\r
-               $atts = '';\r
-\r
-               if ( ! isset($attributes['method']) AND $formtag === TRUE)\r
-               {\r
-                       $atts .= ' method="post"';\r
-               }\r
-\r
-               foreach ($attributes as $key => $val)\r
-               {\r
-                       $atts .= ' '.$key.'="'.$val.'"';\r
-               }\r
-\r
-               return $atts;\r
-               }\r
-       }\r
-}\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/**\r
- * Validation Object\r
- *\r
- * Determines what the form validation class was instantiated as, fetches\r
- * the object and returns it.\r
- *\r
- * @access     private\r
- * @return     mixed\r
- */\r
-if ( ! function_exists('_get_validation_object'))\r
-{\r
-       function &_get_validation_object()\r
-       {\r
-               $CI =& get_instance();\r
-\r
-               // We set this as a variable since we're returning by reference\r
-               $return = FALSE;\r
-\r
-               if ( ! isset($CI->load->_ci_classes) OR  ! isset($CI->load->_ci_classes['form_validation']))\r
-               {\r
-                       return $return;\r
-               }\r
-\r
-               $object = $CI->load->_ci_classes['form_validation'];\r
-\r
-               if ( ! isset($CI->$object) OR ! is_object($CI->$object))\r
-               {\r
-                       return $return;\r
-               }\r
-\r
-               return $CI->$object;\r
-       }\r
-}\r
-\r
-\r
-/* End of file form_helper.php */\r
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+/**
+ * CodeIgniter
+ *
+ * An open source application development framework for PHP 4.3.2 or newer
+ *
+ * @package            CodeIgniter
+ * @author             ExpressionEngine Dev Team
+ * @copyright  Copyright (c) 2008, EllisLab, Inc.
+ * @license            http://codeigniter.com/user_guide/license.html
+ * @link               http://codeigniter.com
+ * @since              Version 1.0
+ * @filesource
+ */
+
+// ------------------------------------------------------------------------
+
+/**
+ * CodeIgniter Form Helpers
+ *
+ * @package            CodeIgniter
+ * @subpackage Helpers
+ * @category   Helpers
+ * @author             ExpressionEngine Dev Team
+ * @link               http://codeigniter.com/user_guide/helpers/form_helper.html
+ */
+
+// ------------------------------------------------------------------------
+
+/**
+ * Form Declaration
+ *
+ * Creates the opening portion of the form.
+ *
+ * @access     public
+ * @param      string  the URI segments of the form destination
+ * @param      array   a key/value pair of attributes
+ * @param      array   a key/value pair hidden data
+ * @return     string
+ */    
+if ( ! function_exists('form_open'))
+{
+       function form_open($action = '', $attributes = '', $hidden = array())
+       {
+               $CI =& get_instance();
+
+               if ($attributes == '')
+               {
+                       $attributes = 'method="post"';
+               }
+
+               $action = ( strpos($action, '://') === FALSE) ? $CI->config->site_url($action) : $action;
+
+               $form = '<form action="'.$action.'"';
+       
+               $form .= _attributes_to_string($attributes, TRUE);
+       
+               $form .= '>';
+
+               if (is_array($hidden) AND count($hidden) > 0)
+               {
+                       $form .= form_hidden($hidden);
+               }
+
+               return $form;
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Form Declaration - Multipart type
+ *
+ * Creates the opening portion of the form, but with "multipart/form-data".
+ *
+ * @access     public
+ * @param      string  the URI segments of the form destination
+ * @param      array   a key/value pair of attributes
+ * @param      array   a key/value pair hidden data
+ * @return     string
+ */
+if ( ! function_exists('form_open_multipart'))
+{
+       function form_open_multipart($action, $attributes = array(), $hidden = array())
+       {
+               $attributes['enctype'] = 'multipart/form-data';
+               return form_open($action, $attributes, $hidden);
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Hidden Input Field
+ *
+ * Generates hidden fields.  You can pass a simple key/value string or an associative
+ * array with multiple values.
+ *
+ * @access     public
+ * @param      mixed
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_hidden'))
+{
+       function form_hidden($name, $value = '')
+       {
+               if ( ! is_array($name))
+               {
+                       return '<input type="hidden" name="'.$name.'" value="'.form_prep($value).'" />';
+               }
+
+               $form = '';
+
+               foreach ($name as $name => $value)
+               {
+                       $form .= "\n";
+                       $form .= '<input type="hidden" name="'.$name.'" value="'.form_prep($value).'" />';
+               }
+
+               return $form;
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Text Input Field
+ *
+ * @access     public
+ * @param      mixed
+ * @param      string
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_input'))
+{
+       function form_input($data = '', $value = '', $extra = '')
+       {
+               $defaults = array('type' => 'text', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
+
+               return "<input "._parse_form_attributes($data, $defaults).$extra." />";
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Password Field
+ *
+ * Identical to the input function but adds the "password" type
+ *
+ * @access     public
+ * @param      mixed
+ * @param      string
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_password'))
+{
+       function form_password($data = '', $value = '', $extra = '')
+       {
+               if ( ! is_array($data))
+               {
+                       $data = array('name' => $data);
+               }
+
+               $data['type'] = 'password';
+               return form_input($data, $value, $extra);
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Upload Field
+ *
+ * Identical to the input function but adds the "file" type
+ *
+ * @access     public
+ * @param      mixed
+ * @param      string
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_upload'))
+{
+       function form_upload($data = '', $value = '', $extra = '')
+       {
+               if ( ! is_array($data))
+               {
+                       $data = array('name' => $data);
+               }
+
+               $data['type'] = 'file';
+               return form_input($data, $value, $extra);
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Textarea field
+ *
+ * @access     public
+ * @param      mixed
+ * @param      string
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_textarea'))
+{
+       function form_textarea($data = '', $value = '', $extra = '')
+       {
+               $defaults = array('name' => (( ! is_array($data)) ? $data : ''), 'cols' => '90', 'rows' => '12');
+
+               if ( ! is_array($data) OR ! isset($data['value']))
+               {
+                       $val = $value;
+               }
+               else
+               {
+                       $val = $data['value']; 
+                       unset($data['value']); // textareas don't use the value attribute
+               }
+
+               return "<textarea "._parse_form_attributes($data, $defaults).$extra.">".$val."</textarea>";
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Drop-down Menu
+ *
+ * @access     public
+ * @param      string
+ * @param      array
+ * @param      string
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_dropdown'))
+{
+       function form_dropdown($name = '', $options = array(), $selected = array(), $extra = '')
+       {
+               if ( ! is_array($selected))
+               {
+                       $selected = array($selected);
+               }
+
+               // If no selected state was submitted we will attempt to set it automatically
+               if (count($selected) === 0)
+               {
+                       // If the form name appears in the $_POST array we have a winner!
+                       if (isset($_POST[$name]))
+                       {
+                               $selected = array($_POST[$name]);
+                       }
+               }
+
+               if ($extra != '') $extra = ' '.$extra;
+
+               $multiple = (count($selected) > 1 && strpos($extra, 'multiple') === FALSE) ? ' multiple="multiple"' : '';
+
+               $form = '<select name="'.$name.'"'.$extra.$multiple.">\n";
+       
+               foreach ($options as $key => $val)
+               {
+                       $key = (string) $key;
+                       $val = (string) $val;
+
+                       $sel = (in_array($key, $selected))?' selected="selected"':'';
+
+                       $form .= '<option value="'.$key.'"'.$sel.'>'.$val."</option>\n";
+               }
+
+               $form .= '</select>';
+
+               return $form;
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Checkbox Field
+ *
+ * @access     public
+ * @param      mixed
+ * @param      string
+ * @param      bool
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_checkbox'))
+{
+       function form_checkbox($data = '', $value = '', $checked = FALSE, $extra = '')
+       {
+               $defaults = array('type' => 'checkbox', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
+
+               if (is_array($data) AND array_key_exists('checked', $data))
+               {
+                       $checked = $data['checked'];
+
+                       if ($checked == FALSE)
+                       {
+                               unset($data['checked']);
+                       }
+                       else
+                       {
+                               $data['checked'] = 'checked';
+                       }
+               }
+
+               if ($checked == TRUE)
+               {
+                       $defaults['checked'] = 'checked';
+               }
+               else
+               {
+                       unset($defaults['checked']);
+               }
+
+               return "<input "._parse_form_attributes($data, $defaults).$extra." />";
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Radio Button
+ *
+ * @access     public
+ * @param      mixed
+ * @param      string
+ * @param      bool
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_radio'))
+{
+       function form_radio($data = '', $value = '', $checked = FALSE, $extra = '')
+       {
+               if ( ! is_array($data))
+               {       
+                       $data = array('name' => $data);
+               }
+
+               $data['type'] = 'radio';
+               return form_checkbox($data, $value, $checked, $extra);
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Submit Button
+ *
+ * @access     public
+ * @param      mixed
+ * @param      string
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_submit'))
+{      
+       function form_submit($data = '', $value = '', $extra = '')
+       {
+               $defaults = array('type' => 'submit', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
+
+               return "<input "._parse_form_attributes($data, $defaults).$extra." />";
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Reset Button
+ *
+ * @access     public
+ * @param      mixed
+ * @param      string
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_reset'))
+{
+       function form_reset($data = '', $value = '', $extra = '')
+       {
+               $defaults = array('type' => 'reset', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
+
+               return "<input "._parse_form_attributes($data, $defaults).$extra." />";
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Form Button
+ *
+ * @access     public
+ * @param      mixed
+ * @param      string
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_button'))
+{
+       function form_button($data = '', $content = '', $extra = '')
+       {
+               $defaults = array('name' => (( ! is_array($data)) ? $data : ''), 'type' => 'submit');
+
+               if ( is_array($data) AND isset($data['content']))
+               {
+                       $content = $data['content'];
+                       unset($data['content']); // content is not an attribute
+               }
+
+               return "<button "._parse_form_attributes($data, $defaults).$extra.">".$content."</button>";
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Form Label Tag
+ *
+ * @access     public
+ * @param      string  The text to appear onscreen
+ * @param      string  The id the label applies to
+ * @param      string  Additional attributes
+ * @return     string
+ */
+if ( ! function_exists('form_label'))
+{
+       function form_label($label_text = '', $id = '', $attributes = array())
+       {
+
+               $label = '<label';
+
+               if ($id != '')
+               {
+                        $label .= " for=\"$id\"";
+               }
+
+               if (is_array($attributes) AND count($attributes) > 0)
+               {
+                       foreach ($attributes as $key => $val)
+                       {
+                               $label .= ' '.$key.'="'.$val.'"';
+                       }
+               }
+
+               $label .= ">$label_text</label>";
+
+               return $label;
+       }
+}
+
+// ------------------------------------------------------------------------
+/**
+ * Fieldset Tag
+ *
+ * Used to produce <fieldset><legend>text</legend>.  To close fieldset
+ * use form_fieldset_close()
+ *
+ * @access     public
+ * @param      string  The legend text
+ * @param      string  Additional attributes
+ * @return     string
+ */
+if ( ! function_exists('form_fieldset'))
+{
+       function form_fieldset($legend_text = '', $attributes = array())
+       {
+               $fieldset = "<fieldset";
+
+               $fieldset .= _attributes_to_string($attributes, FALSE);
+
+               $fieldset .= ">\n";
+
+               if ($legend_text != '')
+               {
+                       $fieldset .= "<legend>$legend_text</legend>\n";
+               }
+
+               return $fieldset;
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Fieldset Close Tag
+ *
+ * @access     public
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_fieldset_close'))
+{
+       function form_fieldset_close($extra = '')
+       {
+               return "</fieldset>".$extra;
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Form Close Tag
+ *
+ * @access     public
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_close'))
+{
+       function form_close($extra = '')
+       {
+               return "</form>".$extra;
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Form Prep
+ *
+ * Formats text so that it can be safely placed in a form field in the event it has HTML tags.
+ *
+ * @access     public
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_prep'))
+{
+       function form_prep($str = '')
+       {
+               // if the field name is an array we do this recursively
+               if (is_array($str))
+               {
+                       foreach ($str as $key => $val)
+                       {
+                               $str[$key] = form_prep($val);
+                       }
+
+                       return $str;
+               }
+
+               if ($str === '')
+               {
+                       return '';
+               }
+
+               $temp = '__TEMP_AMPERSANDS__';
+
+               // Replace entities to temporary markers so that 
+               // htmlspecialchars won't mess them up
+               $str = preg_replace("/&#(\d+);/", "$temp\\1;", $str);
+               $str = preg_replace("/&(\w+);/",  "$temp\\1;", $str);
+
+               $str = htmlspecialchars($str);
+
+               // In case htmlspecialchars misses these.
+               $str = str_replace(array("'", '"'), array("&#39;", "&quot;"), $str);
+
+               // Decode the temp markers back to entities
+               $str = preg_replace("/$temp(\d+);/","&#\\1;",$str);
+               $str = preg_replace("/$temp(\w+);/","&\\1;",$str);
+
+               return $str;
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Form Value
+ *
+ * Grabs a value from the POST array for the specified field so you can
+ * re-populate an input field or textarea.  If Form Validation
+ * is active it retrieves the info from the validation class
+ *
+ * @access     public
+ * @param      string
+ * @return     mixed
+ */
+if ( ! function_exists('set_value'))
+{
+       function set_value($field = '', $default = '')
+       {
+               if (FALSE === ($OBJ =& _get_validation_object()))
+               {
+                       if ( ! isset($_POST[$field]))
+                       {
+                               return $default;
+                       }
+
+                       return form_prep($_POST[$field]);
+               }
+
+               return form_prep($OBJ->set_value($field, $default));
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Set Select
+ *
+ * Let's you set the selected value of a <select> menu via data in the POST array.
+ * If Form Validation is active it retrieves the info from the validation class
+ *
+ * @access     public
+ * @param      string
+ * @param      string
+ * @param      bool
+ * @return     string
+ */
+if ( ! function_exists('set_select'))
+{
+       function set_select($field = '', $value = '', $default = FALSE)
+       {
+               $OBJ =& _get_validation_object();
+
+               if ($OBJ === FALSE)
+               {
+                       if ( ! isset($_POST[$field]))
+                       {
+                               if (count($_POST) === 0)
+                               {
+                                       return ' selected="selected"';
+                               }
+                               return '';
+                       }
+
+                       $field = $_POST[$field];
+
+                       if (is_array($field))
+                       {
+                               if ( ! in_array($value, $field))
+                               {
+                                       return '';
+                               }
+                       }
+                       else
+                       {
+                               if (($field == '' OR $value == '') OR ($field != $value))
+                               {
+                                       return '';
+                               }
+                       }
+
+                       return ' selected="selected"';
+               }
+
+               return $OBJ->set_select($field, $value, $default);
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Set Checkbox
+ *
+ * Let's you set the selected value of a checkbox via the value in the POST array.
+ * If Form Validation is active it retrieves the info from the validation class
+ *
+ * @access     public
+ * @param      string
+ * @param      string
+ * @param      bool
+ * @return     string
+ */
+if ( ! function_exists('set_checkbox'))
+{
+       function set_checkbox($field = '', $value = '', $default = FALSE)
+       {
+               $OBJ =& _get_validation_object();
+
+               if ($OBJ === FALSE)
+               { 
+                       if ( ! isset($_POST[$field]))
+                       {
+                               if (count($_POST) === 0)
+                               {
+                                       return ' checked="checked"';
+                               }
+                               return '';
+                       }
+
+                       $field = $_POST[$field];
+                       
+                       if (is_array($field))
+                       {
+                               if ( ! in_array($value, $field))
+                               {
+                                       return '';
+                               }
+                       }
+                       else
+                       {
+                               if (($field == '' OR $value == '') OR ($field != $value))
+                               {
+                                       return '';
+                               }
+                       }
+
+                       return ' checked="checked"';
+               }
+
+               return $OBJ->set_checkbox($field, $value, $default);
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Set Radio
+ *
+ * Let's you set the selected value of a radio field via info in the POST array.
+ * If Form Validation is active it retrieves the info from the validation class
+ *
+ * @access     public
+ * @param      string
+ * @param      string
+ * @param      bool
+ * @return     string
+ */
+if ( ! function_exists('set_radio'))
+{
+       function set_radio($field = '', $value = '', $default = FALSE)
+       {
+               $OBJ =& _get_validation_object();
+
+               if ($OBJ === FALSE)
+               {
+                       if ( ! isset($_POST[$field]))
+                       {
+                               if (count($_POST) === 0)
+                               {
+                                       return ' checked="checked"';
+                               }
+                               return '';
+                       }
+
+                       $field = $_POST[$field];
+                       
+                       if (is_array($field))
+                       {
+                               if ( ! in_array($value, $field))
+                               {
+                                       return '';
+                               }
+                       }
+                       else
+                       {
+                               if (($field == '' OR $value == '') OR ($field != $value))
+                               {
+                                       return '';
+                               }
+                       }
+
+                       return ' checked="checked"';
+               }
+
+               return $OBJ->set_radio($field, $value, $default);
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Form Error
+ *
+ * Returns the error for a specific form field.  This is a helper for the
+ * form validation class.
+ *
+ * @access     public
+ * @param      string
+ * @param      string
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('form_error'))
+{
+       function form_error($field = '', $prefix = '', $suffix = '')
+       {
+               if (FALSE === ($OBJ =& _get_validation_object()))
+               {
+                       return '';
+               }
+
+               return $OBJ->error($field, $prefix, $suffix);
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Validation Error String
+ *
+ * Returns all the errors associated with a form submission.  This is a helper
+ * function for the form validation class.
+ *
+ * @access     public
+ * @param      string
+ * @param      string
+ * @return     string
+ */
+if ( ! function_exists('validation_errors'))
+{
+       function validation_errors($prefix = '', $suffix = '')
+       {
+               if (FALSE === ($OBJ =& _get_validation_object()))
+               {
+                       return '';
+               }
+
+               return $OBJ->error_string($prefix, $suffix);
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Parse the form attributes
+ *
+ * Helper function used by some of the form helpers
+ *
+ * @access     private
+ * @param      array
+ * @param      array
+ * @return     string
+ */
+if ( ! function_exists('_parse_form_attributes'))
+{
+       function _parse_form_attributes($attributes, $default)
+       {
+               if (is_array($attributes))
+               {
+                       foreach ($default as $key => $val)
+                       {
+                               if (isset($attributes[$key]))
+                               {
+                                       $default[$key] = $attributes[$key];
+                                       unset($attributes[$key]);
+                               }
+                       }
+
+                       if (count($attributes) > 0)
+                       {
+                               $default = array_merge($default, $attributes);
+                       }
+               }
+
+               $att = '';
+
+               foreach ($default as $key => $val)
+               {
+                       if ($key == 'value')
+                       {
+                               $val = form_prep($val);
+                       }
+
+                       $att .= $key . '="' . $val . '" ';
+               }
+
+               return $att;
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Attributes To String
+ *
+ * Helper function used by some of the form helpers
+ *
+ * @access     private
+ * @param      mixed
+ * @param      bool
+ * @return     string
+ */
+if ( ! function_exists('_attributes_to_string'))
+{
+       function _attributes_to_string($attributes, $formtag = FALSE)
+       {
+               if (is_string($attributes) AND strlen($attributes) > 0)
+               {
+                       if ($formtag == TRUE AND strpos($attributes, 'method=') === FALSE)
+                       {
+                               $attributes .= ' method="post"';
+                       }
+
+               return ' '.$attributes;
+               }
+       
+               if (is_object($attributes) AND count($attributes) > 0)
+               {
+                       $attributes = (array)$attributes;
+               }
+
+               if (is_array($attributes) AND count($attributes) > 0)
+               {
+               $atts = '';
+
+               if ( ! isset($attributes['method']) AND $formtag === TRUE)
+               {
+                       $atts .= ' method="post"';
+               }
+
+               foreach ($attributes as $key => $val)
+               {
+                       $atts .= ' '.$key.'="'.$val.'"';
+               }
+
+               return $atts;
+               }
+       }
+}
+
+// ------------------------------------------------------------------------
+
+/**
+ * Validation Object
+ *
+ * Determines what the form validation class was instantiated as, fetches
+ * the object and returns it.
+ *
+ * @access     private
+ * @return     mixed
+ */
+if ( ! function_exists('_get_validation_object'))
+{
+       function &_get_validation_object()
+       {
+               $CI =& get_instance();
+
+               // We set this as a variable since we're returning by reference
+               $return = FALSE;
+
+               if ( ! isset($CI->load->_ci_classes) OR  ! isset($CI->load->_ci_classes['form_validation']))
+               {
+                       return $return;
+               }
+
+               $object = $CI->load->_ci_classes['form_validation'];
+
+               if ( ! isset($CI->$object) OR ! is_object($CI->$object))
+               {
+                       return $return;
+               }
+
+               return $CI->$object;
+       }
+}
+
+
+/* End of file form_helper.php */
 /* Location: ./system/helpers/form_helper.php */
\ No newline at end of file