Missing closing tag in button helper [0000176]
[fa-stable.git] / includes / ui / ui_input.inc
1 <?php
2 /**********************************************************************
3     Copyright (C) FrontAccounting, LLC.
4         Released under the terms of the GNU General Public License, GPL, 
5         as published by the Free Software Foundation, either version 3 
6         of the License, or (at your option) any later version.
7     This program is distributed in the hope that it will be useful,
8     but WITHOUT ANY WARRANTY; without even the implied warranty of
9     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
10     See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
11 ***********************************************************************/
12
13 function get_post($name, $dflt='')
14 {
15         return ((!isset($_POST[$name]) || $_POST[$name] === '') ? $dflt : $_POST[$name]);
16 }
17 //
18 // Sets local POST value and adds Value to ajax posting if needed
19 //
20 /*function set_post($name, $value, $ajax_trigger=true) {
21     global $Ajax;
22
23     $_POST[$name] = $value;
24     if ($ajax_trigger) $Ajax->activate($name);
25 }
26 */
27 //------------------------------------------------------------------------------
28 //    Seek for _POST variable with $prefix.
29 //    If var is found returns variable name with prefix stripped,
30 //    and null or -1 otherwise.
31 //
32 function find_submit($prefix, $numeric=true)
33 {
34
35     foreach($_POST as $postkey=>$postval )
36     {
37                 if (strpos($postkey, $prefix) === 0)
38                 {
39                         $id = substr($postkey, strlen($prefix));
40                         return $numeric ? (int)$id : $id;
41                 }
42     }
43     return $numeric ? -1 : null;
44 }
45 //------------------------------------------------------------------------------
46 //
47 // Helper function for simple db table editor pages
48 //
49 function simple_page_mode($numeric_id = true)
50 {
51         global $Ajax, $Mode, $selected_id;
52
53         $default = $numeric_id ? -1 : '';
54         $selected_id = get_post('selected_id', $default);
55         foreach (array('ADD_ITEM', 'UPDATE_ITEM', 'RESET') as $m) {
56                 if (isset($_POST[$m])) {
57                         $Ajax->activate('_page_body');
58                         if ($m == 'RESET') 
59                                 $selected_id = $default;
60                         $Mode = $m; return;
61                 }
62         }
63         foreach (array('Edit', 'Delete') as $m) {
64                 foreach ($_POST as $p => $pvar) {
65                         if (strpos($p, $m) === 0) {
66 //                              $selected_id = strtr(substr($p, strlen($m)), array('%2E'=>'.'));
67                                 unset($_POST['_focus']); // focus on first form entry
68
69 //                              $selected_id = strtr(html_entity_decode(substr($p, strlen($m)), ENT_QUOTES), 
70                                 $selected_id = strtr(substr($p, strlen($m)), 
71                                         array('=2E'=>'.','=20'=>' ','=3D'=>'=','=5B'=>'['));
72 //                              $selected_id = quoted_printable_decode(substr($p, strlen($m)));
73                                 $Ajax->activate('_page_body');
74                                 $Mode = $m;
75                                 return;
76                         }
77                 }
78         }
79         $Mode = '';
80 }
81
82 //------------------------------------------------------------------------------
83 //
84 //      Read numeric value from user formatted input
85 //
86 function input_num($postname=null, $dflt=null)
87 {
88         if (!isset($_POST[$postname]) || $_POST[$postname] == "")
89                 return $dflt;
90
91     return user_numeric($_POST[$postname]);
92 }
93
94 //---------------------------------------------------------------------------------
95
96 function hidden($name, $value=null, $echo=true)
97 {
98         global $Ajax;
99         
100         if ($value === null) 
101                 $value = get_post($name);
102         
103         $ret = "<input type=\"hidden\" name=\"$name\" value=\"$value\">";
104         $Ajax->addUpdate($name, $name, $value);
105         if ($echo)
106                 echo $ret."\n";
107         else
108                 return $ret;
109 }
110 /*
111         Various types of submit button selected by $type:
112         null    - button visible only in fallback mode
113         false   - normal submit button
114         true    - ajax driven submit
115         'process' - ajax button with long timeout 
116 */
117 function submit($name, $value, $echo=true, $title=false, $type=false, $icon=false)
118 {
119         global $path_to_root;
120
121         default_focus($name);
122         $submit_str = "<button class=\""
123             .($type ? 'ajaxsubmit' : 'inputsubmit')
124                 ."\" type=\"submit\""
125                 .($type === null ? (fallback_mode() ? ' aspect="fallback"' : " style='display:none;'" ): 
126                         ($type === 'process' ? 'aspect="process"' : '') )
127             ." name=\"$name\"  id=\"$name\" value=\"$value\""
128             .($title ? " title='$title'" : '')
129             ."><span>$value</span>"
130                 .($icon ? "<img src='$path_to_root/themes/".user_theme()."/images/$icon'>" : '')
131                 ."</button>\n";
132         if ($echo)
133                 echo $submit_str;
134         else
135                 return $submit_str;
136 }
137
138 function submit_center($name, $value, $echo=true, $title=false, $async=false, $icon=false)
139 {
140         echo "<center>";
141         submit($name, $value, $echo, $title, $async, $icon);
142         echo "</center>";
143 }
144
145 function submit_center_first($name, $value, $title=false, $async=false, $icon=false)
146 {
147         echo "<center>";
148         submit($name, $value, true, $title, $async, $icon);
149         echo "&nbsp;";
150 }
151
152 function submit_center_last($name, $value, $title=false, $async=false, $icon=false)
153 {
154         echo "&nbsp;";
155         submit($name, $value, true, $title, $async, $icon);
156         echo "</center>";
157 }
158
159 function submit_add_or_update($add=true, $title=false, $async=false)
160 {
161         if ($add)
162                 submit('ADD_ITEM', _("Add new"), true, $title, $async);
163         else {
164                 submit('UPDATE_ITEM', _("Update"), true, $title, $async);
165                 submit('RESET', _("Cancel"), true, $title, $async);
166         }
167 }
168
169 function submit_add_or_update_center($add=true, $title=false, $async=false)
170 {
171         echo "<center>";
172         submit_add_or_update($add, $title, $async);
173         echo "</center>";
174 }
175
176 /*
177 function submit_add_or_update_row($add=true)
178 {
179         echo "<tr><td colspan=99 align=center>";
180         submit_add_or_update($add);
181         echo "</td></tr>\n";
182 }
183 */
184 function submit_add_or_update_row($add=true, $right=true, $extra="", $title=false, $async=false)
185 {
186         echo "<tr>";
187         if ($right)
188                 echo "<td>&nbsp;</td>\n";
189         echo "<td $extra>";
190         submit_add_or_update($add, $title, $async);
191         echo "</td></tr>\n";
192 }
193
194 function submit_cells($name, $value, $extra="", $title=false, $async=false)
195 {
196         echo "<td $extra>";
197         submit($name, $value, true, $title, $async);
198         echo "</td>\n";
199 }
200
201 function submit_row($name, $value, $right=true, $extra="", $title=false, $async=false)
202 {
203         echo "<tr>";
204         if ($right)
205                 echo "<td>&nbsp;</td>\n";
206         submit_cells($name, $value, $extra, $title, $async);
207         echo "</tr>\n";
208 }
209
210 function submit_return($name, $value, $title=false, $async=false)
211 {
212         if (count($_SESSION['Context'])) {
213                 submit($name, $value, true, $title, $async);
214         }
215 }
216
217 function submit_js_confirm($name, $msg) {
218         add_js_source(
219                 "_validate.$name=function(){ return confirm('$msg');};");
220 };
221 //-----------------------------------------------------------------------------------
222
223 function set_icon($icon, $title=false)
224 {
225         global $path_to_root;
226         return "<img src='$path_to_root/themes/".user_theme()."/images/$icon' width='14' height='14' border='0'".($title ? " title='$title'" : "")." />\n";     
227 }
228
229 function button($name, $value, $title=false, $icon=false)
230 {
231         // php silently changes dots,spaces,'[' and characters 128-159
232         // to underscore in POST names, to maintain compatibility with register_globals
233         if (user_graphic_links() && $icon)
234         {
235                 if ($value == _("Delete")) // Helper during implementation
236                         $icon = ICON_DELETE;
237                 return "<button type='submit' class='editbutton' name='".
238                         htmlentities(strtr($name, array('.'=>'=2E',' '=>'=20','='=>'=3D','['=>'=5B'))).
239                         "' value='1'" . ($title ? " title='$title'":" title='$value'")." />".set_icon($icon)."</button>\n";
240         }
241         else
242                 return "<input type='submit' class='editbutton' name='"
243                         .htmlentities(strtr($name, array('.'=>'=2E',' '=>'=20','='=>'=3D','['=>'=5B')))
244                         ."' value='$value'"
245                         .($title ? " title='$title'":'')." />\n";
246 }
247
248 function button_cell($name, $value, $title=false, $icon=false)
249 {
250         echo "<td>";
251         echo button($name, $value, $title, $icon);
252         echo "</td>";
253 }
254
255 function delete_button_cell($name, $value, $title=false)
256 {
257         button_cell($name, $value, $title, ICON_DELETE);
258 }
259
260 function edit_button_cell($name, $value, $title=false)
261 {
262         button_cell($name, $value, $title, ICON_EDIT);
263 }
264 //-----------------------------------------------------------------------------------
265
266 function check_value($name)
267 {
268         if (!isset($_POST[$name]))
269                 return 0;
270         return 1;
271 }
272
273 function checkbox($label, $name, $value=null, $submit_on_change=false, $title=false)
274 {
275         global $Ajax;
276
277         $str = '';      
278         default_focus($name);
279         if ($label)
280                 $str .= $label . "  ";
281         if ($submit_on_change !== false) {
282                 if ($submit_on_change === true)
283                         $submit_on_change = 
284                                 "JsHttpRequest.request(\"_{$name}_update\", this.form);";
285         }
286         if ($value === null)
287                 $value = get_post($name,0);
288
289         $str .= "<input"
290             .($value == 1 ? ' checked':'')
291             ." type='checkbox' name='$name' value='1'"
292             .($submit_on_change ? " onclick='$submit_on_change'" : '')
293             .($title ? " title='$title'" : '')
294             ." >\n";
295
296         $Ajax->addUpdate($name, $name, $value);
297         return $str;
298 }
299
300 function check($label, $name, $value=null, $submit_on_change=false, $title=false)
301 {
302         echo checkbox($label, $name, $value, $submit_on_change, $title);
303 }
304
305 function check_cells($label, $name, $value, $submit_on_change=false, $title=false)
306 {
307         if ($label != null)
308                 echo "<td>$label</td>\n";
309         echo "<td>";
310         echo check(null, $name, $value, $submit_on_change, $title);
311         echo "</td>";
312 }
313
314 function check_row($label, $name, $value, $submit_on_change=false, $title=false)
315 {
316         echo "<tr>";
317         echo check_cells($label, $name, $value, $submit_on_change, $title);
318         echo "</tr>\n";
319 }
320
321 //-----------------------------------------------------------------------------------
322
323 function labelheader_cell($label, $params="")
324 {
325         echo "<td class='tableheader' $params>$label</td>\n";
326 }
327
328 function label_cell($label, $params="", $id=null)
329 {
330     global $Ajax;
331
332         if(isset($id))
333         {
334             $params .= " id='$id'";
335             $Ajax->addUpdate($id, $id, $label);
336         }
337         echo "<td $params>$label</td>\n";
338
339         return $label;
340 }
341
342 function email_cell($label, $params="", $id=null)
343 {
344         label_cell("<a href='mailto:$label'>$label</a>", $params, $id);
345 }
346
347 function amount_decimal_cell($label, $params="", $id=null)
348 {
349         $dec = 0;
350         label_cell(price_decimal_format($label, $dec), "nowrap align=right ".$params, $id);
351 }
352
353 function amount_cell($label, $bold=false, $params="", $id=null)
354 {
355         if ($bold)
356                 label_cell("<b>".price_format($label)."</b>", "nowrap align=right ".$params, $id);
357         else
358                 label_cell(price_format($label), "nowrap align=right ".$params, $id);
359 }
360
361 function percent_cell($label, $bold=false, $id=null)
362 {
363         if ($bold)
364                 label_cell("<b>".percent_format($label)."</b>", "nowrap align=right", $id);
365         else
366                 label_cell(percent_format($label), "nowrap align=right", $id);
367 }
368 // 2008-06-15. Changed
369 function qty_cell($label, $bold=false, $dec=null, $id=null)
370 {
371         if (!isset($dec))
372                 $dec = get_qty_dec();
373         if ($bold)
374                 label_cell("<b>".number_format2($label, $dec)."</b>", "nowrap align=right", $id);
375         else
376                 label_cell(number_format2($label, $dec), "nowrap align=right", $id);
377 }
378
379 function label_cells($label, $value, $params="", $params2="", $id='')
380 {
381         if ($label != null)
382                 echo "<td $params>$label</td>\n";
383         label_cell($value, $params2, $id);
384 }
385
386 function label_row($label, $value, $params="", $params2="", $leftfill=0, $id='')
387 {
388         echo "<tr>";
389         label_cells($label, $value, $params, $params2, $id);
390         if ($leftfill!=0)
391                 echo "<td colspan=$leftfill></td>";
392         echo "</tr>\n";
393 }
394
395 //-----------------------------------------------------------------------------------
396
397 function text_cells($label, $name, $value=null, $size="", $max="", $title=false, $params="", $post_label="", $disabled="")
398 {
399         global $Ajax;
400
401         default_focus($name);
402         if ($label != null)
403                 label_cell($label, $params);
404         echo "<td>";
405
406         if ($value === null)
407                 $value = get_post($name);
408         echo "<input $disabled type=\"text\" name=\"$name\" size=\"$size\" maxlength=\"$max\" value=\"$value\""
409             .($title ? " title='$title'" : '')
410             .">";
411
412         if ($post_label != "")
413                 echo " " . $post_label;
414
415         echo "</td>\n";
416         $Ajax->addUpdate($name, $name, $value);
417 }
418
419 function text_cells_ex($label, $name, $size, $max=null, $init=null, $title=null, $params=null, $post_label=null, $submit_on_change=false)
420 {
421         global $Ajax;
422
423         default_focus($name);
424         if (!isset($_POST[$name]) || $_POST[$name] == "")
425         {
426                 if ($init)
427                         $_POST[$name] = $init;
428                 else
429                         $_POST[$name] = "";
430         }
431         if ($label != null)
432                 label_cell($label, $params);
433
434         if (!isset($max))
435                 $max = $size;
436
437         echo "<td>";
438         $class = $submit_on_change ? 'class="searchbox"' : '';
439         echo "<input $class type=\"text\" name=\"$name\" size=\"$size\" maxlength=\"$max\" value=\"" . $_POST[$name]. "\""
440          .($title ? " title='$title'": '')." >";
441
442         if ($post_label)
443                 echo " " . $post_label;
444
445         echo "</td>\n";
446         $Ajax->addUpdate($name, $name, $_POST[$name]);
447 }
448
449 function text_row($label, $name, $value, $size, $max, $title=null, $params="", $post_label="")
450 {
451         echo "<tr>";
452
453         text_cells($label, $name, $value, $size, $max, $title, $params, $post_label);
454
455         echo "</tr>\n";
456 }
457
458 //-----------------------------------------------------------------------------------
459
460 function text_row_ex($label, $name, $size, $max=null, $title=null, $value=null, $params=null, $post_label=null)
461 {
462         echo "<tr>";
463
464         text_cells_ex($label, $name, $size, $max, $value, $title, $params, $post_label);
465
466         echo "</tr>\n";
467 }
468
469 //-----------------------------------------------------------------------------------
470 function email_row($label, $name, $value, $size, $max, $title=null, $params="", $post_label="")
471 {
472         if (get_post($name)) 
473                 $label = "<a href='Mailto:".$_POST[$name]."'>$label</a>";
474         text_row($label, $name, $value, $size, $max, $title, $params, $post_label);
475 }
476
477 function email_row_ex($label, $name, $size, $max=null, $title=null, $value=null, $params=null, $post_label=null)
478 {
479         if (get_post($name)) 
480                 $label = "<a href='Mailto:".$_POST[$name]."'>$label</a>";
481         text_row_ex($label, $name, $size, $max, $title, $value, $params, $post_label);
482 }
483
484 function link_row($label, $name, $value, $size, $max, $title=null, $params="", $post_label="")
485 {
486         $val = get_post($name);
487         if ($val) {
488                 if (strpos($val,'http://')===false)
489                         $val = 'http://'.$val;
490                 $label = "<a href='$val' target='_blank'>$label</a>";
491         }
492         text_row($label, $name, $value, $size, $max, $title, $params, $post_label);
493 }
494
495 function link_row_ex($label, $name, $size, $max=null, $title=null, $value=null, $params=null, $post_label=null)
496 {
497         $val = get_post($name);
498         if ($val) {
499                 if (strpos($val,'http://')===false)
500                         $val = 'http://'.$val;
501                 $label = "<a href='$val' target='_blank'>$label</a>";
502         }
503         text_row_ex($label, $name, $size, $max, $title, $value, $params, $post_label);
504 }
505
506 //-----------------------------------------------------------------------------------
507
508 function date_cells($label, $name, $title = null, $init=null, $inc_days=0, 
509         $inc_months=0, $inc_years=0, $params=null, $submit_on_change=false)
510 {
511         global $use_date_picker, $path_to_root;
512         if (!isset($_POST[$name]) || $_POST[$name] == "")
513         {
514                 if (!$init)
515                 {
516                         if ($inc_years == 1001)
517                                 $_POST[$name] = null;
518                         else
519                         {
520                                 $dd = Today();
521                                 if ($inc_days != 0)
522                                         $dd = add_days($dd, $inc_days);
523                                 if ($inc_months != 0)
524                                         $dd = add_months($dd, $inc_months);
525                                 if ($inc_years != 0)
526                                         $dd = add_years($dd, $inc_years);
527                                 $_POST[$name] = $dd;
528                         }
529                 }
530                 else
531                         $_POST[$name] = $init;
532         }
533         if ($use_date_picker)
534                 $post_label = "<a tabindex='-1' href=\"javascript:date_picker(document.getElementsByName('$name')[0]);\">"
535                 . "     <img src='$path_to_root/themes/default/images/cal.gif' width='16' height='16' border='0' alt='"._('Click Here to Pick up the date')."'></a>\n";
536         else
537                 $post_label = "";
538         text_cells_ex($label, $name, 9, 12, $_POST[$name], $title, $params, $post_label, $submit_on_change);
539 }
540
541 function date_row($label, $name, $title=null, $init=null, $inc_days=0, $inc_months=0, 
542         $inc_years=0, $params=null, $submit_on_change=false)
543 {
544         echo "<tr>";
545         date_cells($label, $name, $title, $init, $inc_days, $inc_months, 
546                 $inc_years, $params, $submit_on_change);
547         echo "</tr>\n";
548 }
549
550 //-----------------------------------------------------------------------------------
551
552 function ref_cells($label, $name, $title=null, $init=null, $params=null, $submit_on_change=false)
553 {
554         text_cells_ex($label, $name, 16, 18, $init, $title, $params, null, $submit_on_change);
555 }
556
557 //-----------------------------------------------------------------------------------
558
559 function ref_row($label, $name, $title=null, $init=null, $submit_on_change=false)
560 {
561         echo "<tr>";
562         ref_cells($label, $name, $title, $init, null, $submit_on_change);
563         echo "</tr>\n";
564 }
565
566 //-----------------------------------------------------------------------------------
567
568 function percent_row($label, $name, $init=null)
569 {
570
571         if (!isset($_POST[$name]) || $_POST[$name]=="")
572         {
573                 $_POST[$name] = $init == null ? '' : $init;
574         }
575
576         small_amount_row($label, $name, $_POST[$name], null, "%", user_percent_dec());
577 }
578
579 function amount_cells_ex($label, $name, $size, $max=null, $init=null, $params=null, $post_label=null, $dec=null)
580 {
581         global $Ajax;
582
583         if (!isset($dec))
584                 $dec = user_price_dec();
585         if (!isset($_POST[$name]) || $_POST[$name] == "")
586         {
587                 if ($init !== null)
588                         $_POST[$name] = $init;
589                 else
590                         $_POST[$name] = '';
591         }
592         if ($label != null)
593                 label_cell($label, $params);
594
595         if (!isset($max))
596                 $max = $size;
597
598         if ($label != null)
599                 echo "<td>";
600         else
601                 echo "<td align='right'>";
602
603         echo "<input class='amount' type=\"text\" name=\"$name\" size=\"$size\" maxlength=\"$max\" dec=\"$dec\" value=\"" . $_POST[$name]. "\">";
604
605         if ($post_label) {
606                 echo "<span id='_{$name}_label'> $post_label</span>";
607                 $Ajax->addUpdate($name, '_'.$name.'_label', $post_label);
608         }
609         echo "</td>\n";
610         $Ajax->addUpdate($name, $name, $_POST[$name]);
611         $Ajax->addAssign($name, $name, 'dec', $dec);
612 }
613
614
615 //-----------------------------------------------------------------------------------
616
617 function amount_cells($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
618 {
619         amount_cells_ex($label, $name, 15, 15, $init, $params, $post_label, $dec);
620 }
621
622 function amount_row($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
623 {
624         echo "<tr>";
625         amount_cells($label, $name, $init, $params, $post_label, $dec);
626         echo "</tr>\n";
627 }
628
629 function small_amount_row($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
630 {
631         echo "<tr>";
632         small_amount_cells($label, $name, $init, $params, $post_label, $dec);
633         echo "</tr>\n";
634 }
635
636 //-----------------------------------------------------------------------------------
637
638 function qty_cells($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
639 {
640         if (!isset($dec))
641                 $dec = user_qty_dec();
642
643         amount_cells_ex($label, $name, 15, 15, $init, $params, $post_label, $dec);
644 }
645
646 function qty_row($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
647 {
648         if (!isset($dec))
649                 $dec = user_qty_dec();
650
651         echo "<tr>";
652         amount_cells($label, $name, $init, $params, $post_label, $dec);
653         echo "</tr>\n";
654 }
655
656 function small_qty_row($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
657 {
658         if (!isset($dec))
659                 $dec = user_qty_dec();
660
661         echo "<tr>";
662         small_amount_cells($label, $name, $init, $params, $post_label, $dec);
663         echo "</tr>\n";
664 }
665
666 //-----------------------------------------------------------------------------------
667
668 function small_amount_cells($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
669 {
670         amount_cells_ex($label, $name, 7, 12, $init, $params, $post_label, $dec);
671 }
672
673 //-----------------------------------------------------------------------------------
674
675 function small_qty_cells($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
676 {
677         if (!isset($dec))
678                 $dec = user_qty_dec();
679         amount_cells_ex($label, $name, 7, 12, $init, $params, $post_label, $dec);
680 }
681
682 //-----------------------------------------------------------------------------------
683
684 function textarea_cells($label, $name, $value, $cols, $rows, $title = null, $params="")
685 {
686         global $Ajax;
687
688         default_focus($name);
689         if ($label != null)
690                 echo "<td $params>$label</td>\n";
691         if ($value == null)
692                 $value = (!isset($_POST[$name]) ? "" : $_POST[$name]);
693         echo "<td><textarea name='$name' cols='$cols' rows='$rows'"
694         .($title ? " title='$title'" : '')
695         .">$value</textarea></td>\n";
696         $Ajax->addUpdate($name, $name, $value);
697 }
698
699 function textarea_row($label, $name, $value, $cols, $rows, $title=null, $params="")
700 {
701         echo "<tr>";
702         textarea_cells($label, $name, $value, $cols, $rows, $title, $params);
703         echo "</tr>\n";
704 }
705
706 //-----------------------------------------------------------------------------------
707 /*
708 function text_row_with_submit($label, $name, $value, $size, $max, $input_name, $input_value)
709 {
710         global $Ajax;
711
712         default_focus($name);
713         echo "<tr><td>$label</td>\n";
714         echo "<td>";
715
716         if ($value == null)
717                 $value = (!isset($_POST[$name]) ? "" : $_POST[$name]);
718         echo "<input type=\"text\" name=\"$name\" size=\"$size\" maxlength=\"$max\" value=\"$value\">   ";
719
720         submit($input_name, $input_value);
721
722         echo "</td></tr>\n";
723         $Ajax->addUpdate($name, $name, $value);
724 }
725 */
726 //-----------------------------------------------------------------------------------
727
728
729 ?>