+ if('' . $str === '') {
+ return '';
+ }
+ return "\t" . implode("\n\t", explode("\n", $str));
+}
+
+function enc_uppercase($str) {
+ return strtoupper($str);
+}
+function enc_upper($str) { # depricated
+ return enc_uppercase($str);
+}
+
+function enc_lowercase($str) {
+ return strtolower($str);
+}
+
+# pass date in the form 2008-05-23
+# ercodes date as 05/23/2008
+function enc_mmddyyyy($yyyy_mm_dd) {
+ if($yyyy_mm_dd == '') {
+ return '';
+ }
+ if(strlen($yyyy_mm_dd) != 10) {
+ return date('m/d/Y');
+ }
+ return substr($yyyy_mm_dd, 5, 2) . '/' . substr($yyyy_mm_dd, 8, 2) . '/' . substr($yyyy_mm_dd, 0, 4);
+}
+
+# depricated. call enc_mmddyyyy() instead
+function enc_mdy($str) {
+ return enc_mmddyyyy($str);
+}
+
+# pass unix timestamp or "2012-12-20 22:23:34"
+function enc_mmddyyyyhhmm($str) {
+ if(is_numeric($str)) {
+ return date('m/d/Y g:ia', (int)$str);
+ } else {
+ return enc_mmddyyyy(substr($str, 0, 10)) . substr($str, 10, 6);
+ }
+}
+
+# takes decimal number of hours
+# returns hh:mm
+function enc_hhmm($str) {
+ if(strlen($str) == 0) {
+ return '';
+ }
+ $hours = floor($str);
+ $minutes = round(($str - $hours) * 60);
+ $str = sprintf("%d:%02d", $hours, $minutes);
+ return $str;
+}
+
+# takes decimal number of hours
+# returns hh:mm followed by "am" or "pm" with no space
+function enc_12hr($str) {
+ if(strlen($str) == 0) {
+ return '';
+ }
+ $hours = floor($str);
+ $minutes = round(($str - $hours) * 60);
+ $suffix = 'am';
+ if($hours >= 12.0) {
+ $suffix = 'pm';
+ if($hours > 12.0) {
+ $hours -= 12.0;
+ }
+ }
+ $str = sprintf("%d:%02d", $hours, $minutes);
+ $str .= $suffix;
+ return $str;
+}
+
+
+
+# These are depricated! All but PULLDOWN_HASH still work, but you should update your code.
+define('PULLDOWN_AUTO', 0); define('PULLDOWN_ARRAY', 1); define('PULLDOWN_HASH', 2); define('PULLDOWN_2D', 3);
+
+
+# call this function before you run() the template so enc_options() knows what
+# to do
+#
+# Parameters:
+#
+# name: the name of the html control
+#
+# options: an array of options to display in the pulldown/selectbox. Each
+# element can be either a string, or an array with two elements (first the
+# value to post, and second the value to display in the pulldown)
+#
+# multiple: UNTESTED set to true for multiple-select boxes.
+
+function pulldown($name, $in_options, $multiple = false) {
+ if($multiple === PULLDOWN_HASH) {
+ die('Webmaster error: PULLDOWN_HASH is depricated. Pass array(a,b) not a=>b');
+ }
+ if($multiple !== true) {
+ # Probably due to API change (removing 3rd argument) but don't bother
+ # emitting a warning, because the above warning handles the only
+ # important case.
+ $multiple = false;
+ }
+ $options = array();
+ foreach($in_options as $option) {
+ if(is_array($option)) {
+ $options[] = $option;
+ } else {
+ $options[] = array($option, $option);
+ }
+ }
+ $GLOBALS[$name . '_options'] = array(
+ 'options' => $options,
+ 'multiple' => $multiple);
+}
+
+# output a bunch of <option> tags
+function enc_options($values, $name) {
+ if(!isset($GLOBALS[$name . '_options'])) {
+ die("pulldown('$name') must be called before this template can be run. See wfpl/encode.php");
+ }
+ if($GLOBALS[$name . '_options']['multiple']) { # FIXME test this
+ $values = explode(', ', $values);
+ }
+ return encode_options($values, $GLOBALS[$name . '_options']['options']);
+}
+
+# for radios and pulldowns:
+# pass posted value
+# returns what the user sees in the pulldown or on the radio button caption
+function enc_pulled($str, $name) {
+ if(!isset($GLOBALS[$name . '_options'])) {
+ die("pulldown('$name') must be called before this template can be run. See wfpl/encode.php");
+ }
+ foreach($GLOBALS[$name . '_options']['options'] as &$kv) {
+ if($kv[0] == $str) {
+ return $kv[1];
+ }
+ }
+ return $str;
+}
+
+function enc_radio_n($str, $name, $n) {
+ if(!isset($GLOBALS[$name . '_options'])) {
+ die("pulldown('$name') must be called before this template can be run. See wfpl/encode.php");
+ }
+
+ if(!isset($GLOBALS[$name . '_options']['options'][$n])) {
+ die("Template error: pulldown('$name') does not have element # $n");
+ }
+
+ $value = enc_attr($GLOBALS[$name . '_options']['options'][$n][0]);
+
+ if($str === $value) {
+ $value .= '" checked="checked';
+ }
+
+ return $value;
+}
+function enc_radio_0($str, $name) { return enc_radio_n($str, $name, 0); }
+function enc_radio_1($str, $name) { return enc_radio_n($str, $name, 1); }
+function enc_radio_2($str, $name) { return enc_radio_n($str, $name, 2); }
+function enc_radio_3($str, $name) { return enc_radio_n($str, $name, 3); }
+function enc_radio_4($str, $name) { return enc_radio_n($str, $name, 4); }
+function enc_radio_5($str, $name) { return enc_radio_n($str, $name, 5); }
+function enc_radio_6($str, $name) { return enc_radio_n($str, $name, 6); }
+function enc_radio_7($str, $name) { return enc_radio_n($str, $name, 7); }
+function enc_radio_8($str, $name) { return enc_radio_n($str, $name, 8); }
+function enc_radio_9($str, $name) { return enc_radio_n($str, $name, 9); }
+function enc_radio_10($str, $name) { return enc_radio_n($str, $name, 10); }
+function enc_radio_11($str, $name) { return enc_radio_n($str, $name, 11); }
+function enc_radio_12($str, $name) { return enc_radio_n($str, $name, 12); }
+function enc_radio_13($str, $name) { return enc_radio_n($str, $name, 13); }
+function enc_radio_14($str, $name) { return enc_radio_n($str, $name, 14); }
+function enc_radio_15($str, $name) { return enc_radio_n($str, $name, 15); }
+function enc_radio_16($str, $name) { return enc_radio_n($str, $name, 16); }
+function enc_radio_17($str, $name) { return enc_radio_n($str, $name, 17); }
+function enc_radio_18($str, $name) { return enc_radio_n($str, $name, 18); }
+function enc_radio_19($str, $name) { return enc_radio_n($str, $name, 19); }
+function enc_radio_20($str, $name) { return enc_radio_n($str, $name, 20); }
+
+
+function enc_radio_caption_n($str, $name, $n) {
+ if(!isset($GLOBALS[$name . '_options'])) {
+ die("pulldown('$name') must be called before this template can be run. See wfpl/encode.php");
+ }
+
+ if(!isset($GLOBALS[$name . '_options']['options'][$n])) {
+ die("Template error: pulldown('$name') does not have element #$n");
+ }
+
+ return $GLOBALS[$name . '_options']['options'][$n][1];
+}
+function enc_radio_caption_0($str, $name) { return enc_radio_caption_n($str, $name, 0); }
+function enc_radio_caption_1($str, $name) { return enc_radio_caption_n($str, $name, 1); }
+function enc_radio_caption_2($str, $name) { return enc_radio_caption_n($str, $name, 2); }
+function enc_radio_caption_3($str, $name) { return enc_radio_caption_n($str, $name, 3); }
+function enc_radio_caption_4($str, $name) { return enc_radio_caption_n($str, $name, 4); }
+function enc_radio_caption_5($str, $name) { return enc_radio_caption_n($str, $name, 5); }
+function enc_radio_caption_6($str, $name) { return enc_radio_caption_n($str, $name, 6); }
+function enc_radio_caption_7($str, $name) { return enc_radio_caption_n($str, $name, 7); }
+function enc_radio_caption_8($str, $name) { return enc_radio_caption_n($str, $name, 8); }
+function enc_radio_caption_9($str, $name) { return enc_radio_caption_n($str, $name, 9); }
+function enc_radio_caption_10($str, $name) { return enc_radio_caption_n($str, $name, 10); }
+function enc_radio_caption_11($str, $name) { return enc_radio_caption_n($str, $name, 11); }
+function enc_radio_caption_12($str, $name) { return enc_radio_caption_n($str, $name, 12); }
+function enc_radio_caption_13($str, $name) { return enc_radio_caption_n($str, $name, 13); }
+function enc_radio_caption_14($str, $name) { return enc_radio_caption_n($str, $name, 14); }
+function enc_radio_caption_15($str, $name) { return enc_radio_caption_n($str, $name, 15); }
+function enc_radio_caption_16($str, $name) { return enc_radio_caption_n($str, $name, 16); }
+function enc_radio_caption_17($str, $name) { return enc_radio_caption_n($str, $name, 17); }
+function enc_radio_caption_18($str, $name) { return enc_radio_caption_n($str, $name, 18); }
+function enc_radio_caption_19($str, $name) { return enc_radio_caption_n($str, $name, 19); }
+function enc_radio_caption_20($str, $name) { return enc_radio_caption_n($str, $name, 20); }
+
+
+# use this function along with a special template to generate the html for pulldowns and multiple select boxes.
+#
+# Parameters:
+#
+# selected: can be a string or (for multiple-selects) an array
+#
+# options: see documentation for pulldown() above
+function encode_options($selected, $options) {
+ if(!is_array($selected)) {
+ $selected = array($selected);
+ }
+