summaryrefslogtreecommitdiffstats
path: root/usr/local/www
diff options
context:
space:
mode:
Diffstat (limited to 'usr/local/www')
-rwxr-xr-xusr/local/www/apple-touch-icon.pngbin4068 -> 0 bytes
-rwxr-xr-xusr/local/www/bandwidth_by_ip.php150
-rw-r--r--usr/local/www/carp_status.php252
-rw-r--r--usr/local/www/classes/maintable.inc206
-rw-r--r--usr/local/www/code-syntax-highlighter/SyntaxHighlighter.css166
-rw-r--r--usr/local/www/code-syntax-highlighter/gpl.txt340
-rw-r--r--usr/local/www/code-syntax-highlighter/shBrushCSharp.js30
-rw-r--r--usr/local/www/code-syntax-highlighter/shBrushCpp.js72
-rw-r--r--usr/local/www/code-syntax-highlighter/shBrushCss.js50
-rw-r--r--usr/local/www/code-syntax-highlighter/shBrushDelphi.js31
-rw-r--r--usr/local/www/code-syntax-highlighter/shBrushJScript.js22
-rw-r--r--usr/local/www/code-syntax-highlighter/shBrushJava.js26
-rw-r--r--usr/local/www/code-syntax-highlighter/shBrushPhp.js23
-rw-r--r--usr/local/www/code-syntax-highlighter/shBrushPython.js71
-rw-r--r--usr/local/www/code-syntax-highlighter/shBrushRuby.js26
-rw-r--r--usr/local/www/code-syntax-highlighter/shBrushSql.js40
-rw-r--r--usr/local/www/code-syntax-highlighter/shBrushVb.js29
-rw-r--r--usr/local/www/code-syntax-highlighter/shBrushXml.js61
-rw-r--r--usr/local/www/code-syntax-highlighter/shCore.js589
-rw-r--r--usr/local/www/code-syntax-highlighter/shCore.uncompressed.js636
-rw-r--r--usr/local/www/crash_reporter.php156
-rw-r--r--usr/local/www/csrf/csrf-magic.js186
-rw-r--r--usr/local/www/csrf/csrf-magic.php403
-rw-r--r--usr/local/www/css/table.css46
-rw-r--r--usr/local/www/diag_arp.php365
-rw-r--r--usr/local/www/diag_authentication.php138
-rw-r--r--usr/local/www/diag_backup.php818
-rw-r--r--usr/local/www/diag_confbak.php301
-rwxr-xr-xusr/local/www/diag_defaults.php90
-rw-r--r--usr/local/www/diag_dns.php320
-rwxr-xr-xusr/local/www/diag_dump_states.php280
-rw-r--r--usr/local/www/diag_dump_states_sources.php211
-rw-r--r--usr/local/www/diag_gmirror.php406
-rw-r--r--usr/local/www/diag_ipsec.php555
-rw-r--r--usr/local/www/diag_ipsec_leases.php131
-rw-r--r--usr/local/www/diag_ipsec_sad.php141
-rw-r--r--usr/local/www/diag_ipsec_spd.php138
-rw-r--r--usr/local/www/diag_ipsec_xml.php84
-rw-r--r--usr/local/www/diag_limiter_info.php121
-rwxr-xr-xusr/local/www/diag_logs.php145
-rw-r--r--usr/local/www/diag_logs_auth.php112
-rw-r--r--usr/local/www/diag_logs_dhcp.php115
-rw-r--r--usr/local/www/diag_logs_filter.php503
-rwxr-xr-xusr/local/www/diag_logs_filter_dynamic.php223
-rw-r--r--usr/local/www/diag_logs_filter_summary.php249
-rwxr-xr-xusr/local/www/diag_logs_gateways.php147
-rw-r--r--usr/local/www/diag_logs_ipsec.php123
-rw-r--r--usr/local/www/diag_logs_ntpd.php110
-rw-r--r--usr/local/www/diag_logs_openvpn.php111
-rw-r--r--usr/local/www/diag_logs_ppp.php109
-rw-r--r--usr/local/www/diag_logs_relayd.php111
-rwxr-xr-xusr/local/www/diag_logs_resolver.php152
-rw-r--r--usr/local/www/diag_logs_routing.php123
-rw-r--r--usr/local/www/diag_logs_settings.php517
-rwxr-xr-xusr/local/www/diag_logs_vpn.php211
-rw-r--r--usr/local/www/diag_logs_wireless.php125
-rw-r--r--usr/local/www/diag_nanobsd.php289
-rw-r--r--usr/local/www/diag_ndp.php184
-rw-r--r--usr/local/www/diag_packet_capture.php485
-rw-r--r--usr/local/www/diag_patterns.php97
-rw-r--r--usr/local/www/diag_pf_info.php117
-rw-r--r--usr/local/www/diag_ping.php202
-rwxr-xr-xusr/local/www/diag_pkglogs.php147
-rw-r--r--usr/local/www/diag_resetstate.php143
-rw-r--r--usr/local/www/diag_routes.php247
-rw-r--r--usr/local/www/diag_smart.php453
-rw-r--r--usr/local/www/diag_sockets.php181
-rw-r--r--usr/local/www/diag_states_summary.php206
-rw-r--r--usr/local/www/diag_system_activity.php115
-rw-r--r--usr/local/www/diag_system_pftop.php216
-rw-r--r--usr/local/www/diag_tables.php191
-rw-r--r--usr/local/www/diag_testport.php290
-rw-r--r--usr/local/www/diag_traceroute.php218
-rw-r--r--usr/local/www/easyrule.php89
-rw-r--r--usr/local/www/edit.php254
-rw-r--r--usr/local/www/exec.php355
-rwxr-xr-xusr/local/www/favicon.icobin1406 -> 0 bytes
-rwxr-xr-xusr/local/www/fbegin.inc459
-rwxr-xr-xusr/local/www/fend.inc27
-rw-r--r--usr/local/www/filebrowser/browser.js48
-rw-r--r--usr/local/www/filebrowser/browser.php165
-rwxr-xr-xusr/local/www/filebrowser/images/file_code.gifbin610 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/file_database.gifbin621 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/file_doc.gifbin1061 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/file_flash.gifbin627 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/file_generic.gifbin1068 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/file_image.gifbin608 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/file_js.gifbin1077 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/file_pdf.gifbin603 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/file_php.gifbin603 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/file_ppt.gifbin1071 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/file_system.gifbin601 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/file_xls.gifbin1060 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/file_zip.gifbin612 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/folder_generic.gifbin996 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/icon_cancel.gifbin1024 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/icon_contract.gifbin599 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/icon_expand.gifbin613 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/icon_home.gifbin1027 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/icon_left.gifbin306 -> 0 bytes
-rwxr-xr-xusr/local/www/filebrowser/images/icon_magnifier.gifbin568 -> 0 bytes
-rw-r--r--usr/local/www/firewall_aliases.php311
-rwxr-xr-xusr/local/www/firewall_aliases_edit.php890
-rwxr-xr-xusr/local/www/firewall_aliases_import.php246
-rw-r--r--usr/local/www/firewall_nat.php399
-rw-r--r--usr/local/www/firewall_nat_1to1.php371
-rw-r--r--usr/local/www/firewall_nat_1to1_edit.php592
-rw-r--r--usr/local/www/firewall_nat_edit.php1016
-rw-r--r--usr/local/www/firewall_nat_npt.php195
-rw-r--r--usr/local/www/firewall_nat_npt_edit.php311
-rw-r--r--usr/local/www/firewall_nat_out.php695
-rw-r--r--usr/local/www/firewall_nat_out_edit.php905
-rw-r--r--usr/local/www/firewall_rules.php944
-rw-r--r--usr/local/www/firewall_rules_edit.php1946
-rw-r--r--usr/local/www/firewall_schedule.php255
-rw-r--r--usr/local/www/firewall_schedule_edit.php1151
-rw-r--r--usr/local/www/firewall_shaper.php486
-rw-r--r--usr/local/www/firewall_shaper_layer7.php584
-rw-r--r--usr/local/www/firewall_shaper_queues.php244
-rw-r--r--usr/local/www/firewall_shaper_vinterface.php475
-rw-r--r--usr/local/www/firewall_shaper_wizards.php146
-rw-r--r--usr/local/www/firewall_virtual_ip.php373
-rw-r--r--usr/local/www/firewall_virtual_ip_edit.php572
-rw-r--r--usr/local/www/getserviceproviders.php150
-rw-r--r--usr/local/www/getstats.php50
-rwxr-xr-xusr/local/www/graph.php408
-rw-r--r--usr/local/www/graph_cpu.php211
-rwxr-xr-xusr/local/www/green_dot.jpgbin65 -> 0 bytes
-rwxr-xr-xusr/local/www/gui.css363
-rw-r--r--usr/local/www/guiconfig.inc1252
-rwxr-xr-xusr/local/www/halt.php77
-rwxr-xr-xusr/local/www/head.inc120
-rw-r--r--usr/local/www/headjs.php186
-rw-r--r--usr/local/www/help.php377
-rw-r--r--usr/local/www/ifstats.php66
-rw-r--r--usr/local/www/includes/functions.inc.php407
-rw-r--r--usr/local/www/index.php799
-rw-r--r--usr/local/www/interfaces.php3882
-rw-r--r--usr/local/www/interfaces_assign.php597
-rw-r--r--usr/local/www/interfaces_bridge.php179
-rw-r--r--usr/local/www/interfaces_bridge_edit.php708
-rw-r--r--usr/local/www/interfaces_gif.php162
-rw-r--r--usr/local/www/interfaces_gif_edit.php272
-rw-r--r--usr/local/www/interfaces_gre.php158
-rw-r--r--usr/local/www/interfaces_gre_edit.php262
-rw-r--r--usr/local/www/interfaces_groups.php171
-rw-r--r--usr/local/www/interfaces_groups_edit.php378
-rw-r--r--usr/local/www/interfaces_lagg.php169
-rw-r--r--usr/local/www/interfaces_lagg_edit.php278
-rw-r--r--usr/local/www/interfaces_ppps.php159
-rw-r--r--usr/local/www/interfaces_ppps_edit.php903
-rw-r--r--usr/local/www/interfaces_qinq.php181
-rw-r--r--usr/local/www/interfaces_qinq_edit.php444
-rw-r--r--usr/local/www/interfaces_vlan.php165
-rw-r--r--usr/local/www/interfaces_vlan_edit.php236
-rw-r--r--usr/local/www/interfaces_wireless.php160
-rw-r--r--usr/local/www/interfaces_wireless_edit.php230
-rw-r--r--usr/local/www/javascript/autosuggest.js337
-rw-r--r--usr/local/www/javascript/base64.js142
-rw-r--r--usr/local/www/javascript/carp_status/carp_status.js5
-rw-r--r--usr/local/www/javascript/chosen/chosen-sprite.pngbin1866 -> 0 bytes
-rw-r--r--usr/local/www/javascript/chosen/chosen.css317
-rw-r--r--usr/local/www/javascript/chosen/chosen.jquery.js755
-rw-r--r--usr/local/www/javascript/chosen/chosen.jquery.min.js9
-rw-r--r--usr/local/www/javascript/chosen/chosen.proto.js765
-rw-r--r--usr/local/www/javascript/chosen/chosen.proto.min.js9
-rw-r--r--usr/local/www/javascript/chosen/coffee/chosen.jquery.coffee633
-rw-r--r--usr/local/www/javascript/chosen/coffee/chosen.proto.coffee629
-rw-r--r--usr/local/www/javascript/datepicker/css/datepicker.css178
-rw-r--r--usr/local/www/javascript/datepicker/js/blank.html6
-rw-r--r--usr/local/www/javascript/datepicker/js/datepicker.js1111
-rwxr-xr-xusr/local/www/javascript/datepicker/media/bg_header.jpgbin1792 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/datepicker/media/bullet1.gifbin55 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/datepicker/media/bullet2.gifbin262 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/datepicker/media/cal.gifbin127 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/datepicker/media/gradient-e5e5e5-ffffff.gifbin526 -> 0 bytes
-rw-r--r--usr/local/www/javascript/domTT/LICENSE202
-rw-r--r--usr/local/www/javascript/domTT/behaviour.js254
-rw-r--r--usr/local/www/javascript/domTT/domLib.js706
-rw-r--r--usr/local/www/javascript/domTT/domTT.js1132
-rw-r--r--usr/local/www/javascript/domTT/fadomatic.js180
-rw-r--r--usr/local/www/javascript/filter_log.js168
-rw-r--r--usr/local/www/javascript/firebug-lite.js1000
-rw-r--r--usr/local/www/javascript/firewall_nat_edit/autosuggest.js337
-rw-r--r--usr/local/www/javascript/firewall_nat_edit/disablekeys.js6
-rw-r--r--usr/local/www/javascript/firewall_nat_edit/firewall_nat_edit.js203
-rw-r--r--usr/local/www/javascript/firewall_nat_edit/suggestions.js33
-rw-r--r--usr/local/www/javascript/firewall_rules_edit/autosuggest.js337
-rw-r--r--usr/local/www/javascript/firewall_rules_edit/disablekeys.js6
-rw-r--r--usr/local/www/javascript/firewall_rules_edit/firewall_rules_edit.js237
-rw-r--r--usr/local/www/javascript/firewall_rules_edit/suggestions.js33
-rw-r--r--usr/local/www/javascript/firewall_shaper_edit/autosuggest.js337
-rw-r--r--usr/local/www/javascript/firewall_shaper_edit/disablekeys.js6
-rw-r--r--usr/local/www/javascript/firewall_shaper_edit/firewall_shaper_edit.js37
-rw-r--r--usr/local/www/javascript/firewall_shaper_edit/suggestions.js33
-rw-r--r--usr/local/www/javascript/global.js43
-rw-r--r--usr/local/www/javascript/index/ajax.js196
-rw-r--r--usr/local/www/javascript/interfaces_ppps_edit/ppps_edit.js253
-rw-r--r--usr/local/www/javascript/jquery-1.11.1.min.js4
-rw-r--r--usr/local/www/javascript/jquery-migrate-1.2.1.min.js2
-rw-r--r--usr/local/www/javascript/jquery-ui-timepicker-addon/css/jquery-ui-timepicker-addon.css7
-rw-r--r--usr/local/www/javascript/jquery-ui-timepicker-addon/js/jquery-ui-timepicker-addon.js1326
-rwxr-xr-xusr/local/www/javascript/jquery.ipv4v6ify.js140
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_18_b81900_40x40.pngbin260 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_20_666666_40x40.pngbin251 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.pngbin180 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.pngbin180 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_flat_10_000000_40x100.pngbin178 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.pngbin213 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.pngbin180 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_glass_100_f6f6f6_1x400.pngbin104 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.pngbin105 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_glass_100_fdf5ce_1x400.pngbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.pngbin109 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.pngbin110 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_glass_65_ffffff_1x400.pngbin105 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_gloss-wave_35_f6a828_500x100.pngbin3762 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_highlight-soft_100_eeeeee_1x100.pngbin90 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_highlight-soft_75_ffe45c_1x100.pngbin129 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.pngbin114 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.pngbin96 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-icons_222222_256x240.pngbin4369 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-icons_228ef1_256x240.pngbin4369 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-icons_3383bb_256x240.pngbin4369 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-icons_454545_256x240.pngbin4369 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-icons_70b2e1_256x240.pngbin4369 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-icons_999999_256x240.pngbin4369 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-icons_ef8c08_256x240.pngbin4369 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-icons_fbc856_256x240.pngbin5355 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-icons_ffd27a_256x240.pngbin4369 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/jquery/images/ui-icons_ffffff_256x240.pngbin4369 -> 0 bytes
-rw-r--r--usr/local/www/javascript/jquery/jquery-ui-1.11.1.min.js13
-rw-r--r--usr/local/www/javascript/load_balancer_pool_edit/pool.js191
-rw-r--r--usr/local/www/javascript/load_balancer_relay_protocol_edit/load_balancer_relay_protocol_edit.js56
-rw-r--r--usr/local/www/javascript/niftyjsCode.js174
-rw-r--r--usr/local/www/javascript/numericupdown/css/numericupdown.css40
-rwxr-xr-xusr/local/www/javascript/numericupdown/images/down.gifbin60 -> 0 bytes
-rwxr-xr-xusr/local/www/javascript/numericupdown/images/up.gifbin60 -> 0 bytes
-rw-r--r--usr/local/www/javascript/numericupdown/js/numericupdown.js287
-rw-r--r--usr/local/www/javascript/pi.js682
-rw-r--r--usr/local/www/javascript/row_helper.js97
-rw-r--r--usr/local/www/javascript/row_helper_dynamic.js98
-rw-r--r--usr/local/www/javascript/row_toggle.js66
-rw-r--r--usr/local/www/javascript/scriptaculous/builder.js136
-rw-r--r--usr/local/www/javascript/scriptaculous/controls.js965
-rw-r--r--usr/local/www/javascript/scriptaculous/dragdrop.js974
-rw-r--r--usr/local/www/javascript/scriptaculous/effects.js1123
-rw-r--r--usr/local/www/javascript/scriptaculous/prototype.js6079
-rw-r--r--usr/local/www/javascript/scriptaculous/scriptaculous.js68
-rw-r--r--usr/local/www/javascript/scriptaculous/slider.js275
-rw-r--r--usr/local/www/javascript/scriptaculous/sound.js59
-rw-r--r--usr/local/www/javascript/scriptaculous/unittest.js568
-rw-r--r--usr/local/www/javascript/sorttable.js584
-rw-r--r--usr/local/www/javascript/suggestions.js33
-rw-r--r--usr/local/www/javascript/ticker.js73
-rw-r--r--usr/local/www/javascript/wizard/autosuggest.js337
-rw-r--r--usr/local/www/javascript/wizard/disablekeys.js6
-rw-r--r--usr/local/www/javascript/wizard/suggestions.js33
-rw-r--r--usr/local/www/license.php133
-rw-r--r--usr/local/www/load_balancer_monitor.php138
-rw-r--r--usr/local/www/load_balancer_monitor_edit.php390
-rw-r--r--usr/local/www/load_balancer_pool.php159
-rw-r--r--usr/local/www/load_balancer_pool_edit.php368
-rw-r--r--usr/local/www/load_balancer_setting.php173
-rw-r--r--usr/local/www/load_balancer_virtual_server.php152
-rw-r--r--usr/local/www/load_balancer_virtual_server_edit.php315
-rwxr-xr-xusr/local/www/logobig.jpgbin7540 -> 0 bytes
-rwxr-xr-xusr/local/www/niftycssCode.css21
-rwxr-xr-xusr/local/www/niftycssprintCode.css1
-rwxr-xr-xusr/local/www/pkg.php582
-rw-r--r--usr/local/www/pkg_edit.php1267
-rw-r--r--usr/local/www/pkg_mgr.php221
-rw-r--r--usr/local/www/pkg_mgr_install.php323
-rw-r--r--usr/local/www/pkg_mgr_installed.php259
-rw-r--r--usr/local/www/pkg_mgr_settings.php163
-rw-r--r--usr/local/www/protochart/ProtoChart.js2653
-rw-r--r--usr/local/www/protochart/excanvas-compressed.js19
-rw-r--r--usr/local/www/protochart/excanvas.js785
-rwxr-xr-xusr/local/www/reboot.php72
-rw-r--r--usr/local/www/restart_httpd.php68
-rw-r--r--usr/local/www/services_captiveportal.php1253
-rw-r--r--usr/local/www/services_captiveportal_filemanager.php267
-rw-r--r--usr/local/www/services_captiveportal_hostname.php232
-rw-r--r--usr/local/www/services_captiveportal_hostname_edit.php244
-rw-r--r--usr/local/www/services_captiveportal_ip.php208
-rw-r--r--usr/local/www/services_captiveportal_ip_edit.php253
-rw-r--r--usr/local/www/services_captiveportal_mac.php244
-rw-r--r--usr/local/www/services_captiveportal_mac_edit.php270
-rw-r--r--usr/local/www/services_captiveportal_vouchers.php715
-rw-r--r--usr/local/www/services_captiveportal_vouchers_edit.php230
-rw-r--r--usr/local/www/services_captiveportal_zones.php154
-rw-r--r--usr/local/www/services_captiveportal_zones_edit.php124
-rw-r--r--usr/local/www/services_dhcp.php1442
-rw-r--r--usr/local/www/services_dhcp_edit.php625
-rw-r--r--usr/local/www/services_dhcp_relay.php216
-rw-r--r--usr/local/www/services_dhcpv6.php995
-rw-r--r--usr/local/www/services_dhcpv6_edit.php285
-rw-r--r--usr/local/www/services_dhcpv6_relay.php216
-rw-r--r--usr/local/www/services_dnsmasq.php582
-rw-r--r--usr/local/www/services_dnsmasq_domainoverride_edit.php197
-rw-r--r--usr/local/www/services_dnsmasq_edit.php345
-rw-r--r--usr/local/www/services_dyndns.php229
-rw-r--r--usr/local/www/services_dyndns_edit.php485
-rw-r--r--usr/local/www/services_igmpproxy.php189
-rw-r--r--usr/local/www/services_igmpproxy_edit.php312
-rw-r--r--usr/local/www/services_ntpd.php462
-rw-r--r--usr/local/www/services_ntpd_gps.php619
-rw-r--r--usr/local/www/services_ntpd_pps.php251
-rw-r--r--usr/local/www/services_rfc2136.php206
-rw-r--r--usr/local/www/services_rfc2136_edit.php276
-rw-r--r--usr/local/www/services_router_advertisements.php480
-rw-r--r--usr/local/www/services_snmp.php443
-rw-r--r--usr/local/www/services_unbound.php626
-rw-r--r--usr/local/www/services_unbound_acls.php421
-rw-r--r--usr/local/www/services_unbound_advanced.php469
-rw-r--r--usr/local/www/services_unbound_domainoverride_edit.php183
-rw-r--r--usr/local/www/services_unbound_host_edit.php337
-rw-r--r--usr/local/www/services_wol.php233
-rw-r--r--usr/local/www/services_wol_edit.php180
-rw-r--r--usr/local/www/shortcuts.inc289
-rw-r--r--usr/local/www/shortcuts/pkg_upnp.inc11
-rw-r--r--usr/local/www/stats.php46
-rwxr-xr-xusr/local/www/status.php281
-rw-r--r--usr/local/www/status_captiveportal.php260
-rw-r--r--usr/local/www/status_captiveportal_expire.php126
-rw-r--r--usr/local/www/status_captiveportal_test.php128
-rw-r--r--usr/local/www/status_captiveportal_voucher_rolls.php147
-rw-r--r--usr/local/www/status_captiveportal_vouchers.php150
-rw-r--r--usr/local/www/status_dhcp_leases.php457
-rw-r--r--usr/local/www/status_dhcpv6_leases.php581
-rw-r--r--usr/local/www/status_filter_reload.php179
-rwxr-xr-xusr/local/www/status_gateway_groups.php173
-rw-r--r--usr/local/www/status_gateways.php169
-rw-r--r--usr/local/www/status_graph.php352
-rw-r--r--usr/local/www/status_graph_cpu.php55
-rw-r--r--usr/local/www/status_interfaces.php607
-rw-r--r--usr/local/www/status_lb_pool.php231
-rw-r--r--usr/local/www/status_lb_vs.php158
-rw-r--r--usr/local/www/status_ntpd.php320
-rw-r--r--usr/local/www/status_openvpn.php443
-rw-r--r--usr/local/www/status_queues.php310
-rw-r--r--usr/local/www/status_rrd_graph.php834
-rw-r--r--usr/local/www/status_rrd_graph_img.php1278
-rw-r--r--usr/local/www/status_rrd_graph_settings.php316
-rwxr-xr-xusr/local/www/status_services.php135
-rw-r--r--usr/local/www/status_upnp.php130
-rw-r--r--usr/local/www/status_wireless.php201
-rw-r--r--usr/local/www/system.php565
-rw-r--r--usr/local/www/system_advanced_admin.php657
-rw-r--r--usr/local/www/system_advanced_firewall.php807
-rw-r--r--usr/local/www/system_advanced_misc.php738
-rw-r--r--usr/local/www/system_advanced_network.php320
-rw-r--r--usr/local/www/system_advanced_notifications.php413
-rw-r--r--usr/local/www/system_advanced_sysctl.php305
-rw-r--r--usr/local/www/system_authservers.php912
-rw-r--r--usr/local/www/system_camanager.php770
-rw-r--r--usr/local/www/system_certmanager.php1349
-rw-r--r--usr/local/www/system_crlmanager.php722
-rw-r--r--usr/local/www/system_firmware.php343
-rwxr-xr-xusr/local/www/system_firmware_auto.php296
-rw-r--r--usr/local/www/system_firmware_check.php206
-rw-r--r--usr/local/www/system_firmware_restorefullbackup.php220
-rw-r--r--usr/local/www/system_firmware_settings.php318
-rw-r--r--usr/local/www/system_gateway_groups.php235
-rw-r--r--usr/local/www/system_gateway_groups_edit.php378
-rw-r--r--usr/local/www/system_gateways.php436
-rw-r--r--usr/local/www/system_gateways_edit.php950
-rw-r--r--usr/local/www/system_groupmanager.php607
-rw-r--r--usr/local/www/system_groupmanager_addprivs.php255
-rwxr-xr-xusr/local/www/system_hasync.php365
-rw-r--r--usr/local/www/system_routes.php407
-rw-r--r--usr/local/www/system_routes_edit.php445
-rw-r--r--usr/local/www/system_usermanager.php1040
-rw-r--r--usr/local/www/system_usermanager_addprivs.php220
-rw-r--r--usr/local/www/system_usermanager_passwordmg.php155
-rw-r--r--usr/local/www/system_usermanager_settings.php185
-rw-r--r--usr/local/www/system_usermanager_settings_ldapacpicker.php131
-rwxr-xr-xusr/local/www/system_usermanager_settings_test.php134
-rw-r--r--usr/local/www/themes/_corporate/all.css1209
-rw-r--r--usr/local/www/themes/_corporate/bottom-loader.js10
-rw-r--r--usr/local/www/themes/_corporate/graphlink.css43
-rwxr-xr-xusr/local/www/themes/_corporate/images/alert_bgr.gifbin3415 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/footer.gifbin5630 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/header.gifbin16536 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/help.pngbin324 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/horizontal.gifbin460 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/favicon.icobin1406 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_3g.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_3g_inactive.gifbin200 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_advanced.gifbin306 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_advanced_s.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_alert.gifbin1015 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_alias_host.gifbin348 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_alias_net.gifbin331 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_alias_port.gifbin346 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_alias_url.gifbin314 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_alias_url_reload.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_block.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_block_add.gifbin192 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_block_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_cablenic.gifbin91 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_cal.gifbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_cal_mo.gifbin1060 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_carp.gifbin352 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_carp_d.gifbin357 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_chain.pngbin161 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_check.gifbin1291 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_clock_green.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_clock_grey.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_clock_red.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_close.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_configure.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_down.gifbin1114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_down_d.gifbin689 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_down_mo.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_e.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_e_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_error.gifbin1312 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_exclam.gifbin1274 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_flag_de.pngbin114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_flag_en.pngbin618 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_flag_es.pngbin281 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_flag_pt_BR.pngbin502 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_frmfld_cert.pngbin1528 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_frmfld_file.pngbin687 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_frmfld_group.pngbin748 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_frmfld_host.pngbin513 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_frmfld_imp.pngbin644 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_frmfld_mail.pngbin371 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_frmfld_pwd.pngbin620 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_frmfld_search.pngbin593 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_frmfld_time.pngbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_frmfld_unknown.pngbin487 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_frmfld_url.pngbin704 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_frmfld_user.pngbin654 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_fw-update.gifbin43785 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_help.gifbin1669 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_ifalias.gifbin315 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_ifalias_d.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_import_alias.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_in_d.gifbin190 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_info_pkg.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_interface_down.gifbin88 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_interface_up.gifbin87 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_left.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_left_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_left_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_log.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_log_d.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_log_s.gifbin305 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_log_s_d.gifbin305 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_logs.gifbin2092 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_match.gifbin847 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_match_d.gifbin843 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_minus.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_open.gifbin62 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_other.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_other_d.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_parp.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_parp_d.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_pass.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_pass_add.gifbin183 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_pass_d.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_plus.gifbin1100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_plus_bl.gifbin1096 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_plus_bl_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_plus_d.gifbin682 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_plus_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_plus_p.gifbin1087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_reinstall.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_reinstall_d.gifbin701 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_reinstall_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_d.gifbin694 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_mo.gifbin1135 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_reinstall_xml.gifbin1105 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_d.gifbin686 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_mo.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_reject.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_reject_d.gifbin193 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_right.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_service_restart.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_service_restart_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_service_running.gifbin1390 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_service_start.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_service_start_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_service_status.gifbin2150 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_service_stop.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_service_stop_d.gifbin1100 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_service_stopped.gifbin1695 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_services_restart_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_services_start_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_services_stop_mo.gifbin1126 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_system-group-grey.pngbin1566 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_system-group.pngbin3128 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_system-user-grey.pngbin1107 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_system-user.pngbin2084 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_system_lock_screen.pngbin1841 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_system_logout.pngbin2087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_trapped.gifbin1101 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_trapped_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_ts_rule.gifbin194 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_ts_rule_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_up.gifbin1116 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_up_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_up_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_wlan.gifbin66 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_wlan_d.gifbin100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_wol_all.gifbin1126 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_wzd_nsaved.pngbin512 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/icon_wzd_saved.pngbin399 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_x.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_x_d.gifbin680 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_x_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/icons/icon_x_p.gifbin1090 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/in.gifbin177 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/in_d.gifbin190 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/out.gifbin179 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/images/icons/out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/log.pngbin270 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/logo.gifbin10012 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/menu_down.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/menu_footer.gifbin234 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/menu_right.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/metal_bgr.gifbin734 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/metal_bgr_red.gifbin734 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/bar_blue.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/bar_gray.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/bar_left.gifbin63 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/bar_right.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/bullet_toggle_minus.pngbin154 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/bullet_toggle_plus.pngbin156 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/button.gifbin805 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/key_128.gifbin2766 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/key_152.gifbin2772 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/key_256.gifbin2808 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/key_64.gifbin2723 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/left_background.gifbin38943 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/loader.gifbin5971 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/loader_tab.gifbin5852 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/logon.pngbin27029 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/plogo_0.gifbin2195 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/plogo_1.gifbin3851 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/plogo_10.gifbin10624 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/plogo_2.gifbin4611 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/plogo_3.gifbin5572 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/plogo_4.gifbin7103 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/plogo_5.gifbin8717 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/plogo_6.gifbin9422 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/plogo_7.gifbin9443 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/plogo_8.gifbin10240 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/plogo_9.gifbin10823 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/progress_bar.gifbin44791 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/tri_c.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/tri_c_black.gifbin69 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/tri_o.gifbin58 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/tri_o_black.gifbin67 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/misc/widget_loader.gifbin1064 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/new_tab_menu.pngbin444 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/status.pngbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/transparent.gifbin146 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/images/transparent_pixel.gifbin43 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/_corporate/javascript/ie7/blank.gifbin48 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/javascript/ie7/ie7-box-model.js2
-rw-r--r--usr/local/www/themes/_corporate/javascript/ie7/ie7-core.js2
-rw-r--r--usr/local/www/themes/_corporate/javascript/ie7/ie7-css-strict.js2
-rw-r--r--usr/local/www/themes/_corporate/javascript/ie7/ie7-css2.js2
-rw-r--r--usr/local/www/themes/_corporate/javascript/ie7/ie7-css3.js2
-rw-r--r--usr/local/www/themes/_corporate/javascript/ie7/ie7-fixed.js2
-rw-r--r--usr/local/www/themes/_corporate/javascript/ie7/ie7-html4.js2
-rw-r--r--usr/local/www/themes/_corporate/javascript/ie7/ie7-ie5.js2
-rw-r--r--usr/local/www/themes/_corporate/javascript/ie7/ie7-lite-p.js3
-rw-r--r--usr/local/www/themes/_corporate/javascript/ie7/ie7-lite.js2
-rw-r--r--usr/local/www/themes/_corporate/javascript/ie7/ie7-png.js2
-rw-r--r--usr/local/www/themes/_corporate/javascript/ie7/ie7-server.css43
-rw-r--r--usr/local/www/themes/_corporate/javascript/ie7/ie7-standard-p.js3
-rw-r--r--usr/local/www/themes/_corporate/javascript/ie7/ie7-standard.js2
-rwxr-xr-xusr/local/www/themes/_corporate/javascript/ie7/test-trans.pngbin106 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/javascript/niftyjsCode.js174
-rw-r--r--usr/local/www/themes/_corporate/loader.js29
-rw-r--r--usr/local/www/themes/_corporate/new_tab_menu.css101
-rwxr-xr-xusr/local/www/themes/_corporate/new_tab_menu.pngbin444 -> 0 bytes
-rw-r--r--usr/local/www/themes/_corporate/rrdcolors.inc.php89
-rw-r--r--usr/local/www/themes/_corporate/styles/jquery-ui-1.11.1.css1226
-rw-r--r--usr/local/www/themes/code-red/all.css1301
-rwxr-xr-xusr/local/www/themes/code-red/bottom-loader.js10
-rwxr-xr-xusr/local/www/themes/code-red/favicon.icobin1406 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/graphlink.css43
-rwxr-xr-xusr/local/www/themes/code-red/images/alert_bgr.pngbin1407 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/background.gifbin112090 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/background.pngbin8502 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/button_left.gifbin534 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/button_mid.gifbin149 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/button_right.gifbin333 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/footer.pngbin25072 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/header.pngbin43633 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/help.pngbin324 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/horizontal.gifbin461 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/favicon.icobin1406 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_3g.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_3g_inactive.gifbin200 -> 0 bytes
-rw-r--r--usr/local/www/themes/code-red/images/icons/icon_advanced.gifbin306 -> 0 bytes
-rw-r--r--usr/local/www/themes/code-red/images/icons/icon_advanced_s.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_alert.gifbin1015 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_alias_host.gifbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_alias_net.gifbin331 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_alias_port.gifbin346 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_alias_url.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_alias_url_reload.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_block.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_block_add.gifbin192 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_block_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_cablenic.gifbin109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_cal.gifbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_cal_mo.gifbin1060 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_carp.gifbin352 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_carp_d.gifbin357 -> 0 bytes
-rw-r--r--usr/local/www/themes/code-red/images/icons/icon_chain.pngbin161 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_check.gifbin1291 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_clock_green.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_clock_grey.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_clock_red.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_close.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_configure.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_down.gifbin1114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_down_d.gifbin689 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_down_mo.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_e.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_e_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_error.gifbin1312 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_exclam.gifbin1274 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_flag_de.pngbin114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_flag_en.pngbin618 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_flag_es.pngbin281 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_flag_pt_BR.pngbin502 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_frmfld_cert.pngbin1528 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_frmfld_file.pngbin687 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_frmfld_group.pngbin748 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_frmfld_host.pngbin513 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_frmfld_imp.pngbin644 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_frmfld_mail.pngbin371 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_frmfld_pwd.pngbin620 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_frmfld_search.pngbin593 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_frmfld_time.pngbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_frmfld_unknown.pngbin487 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_frmfld_url.pngbin704 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_frmfld_user.pngbin654 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_fw-update.gifbin43785 -> 0 bytes
-rw-r--r--usr/local/www/themes/code-red/images/icons/icon_help.gifbin1669 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_ifalias.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_ifalias_d.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_import_alias.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_in_d.gifbin190 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_info_pkg.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_interface_down.gifbin88 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_interface_up.gifbin87 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_left.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_left_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_left_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_log.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_log_d.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_log_s.gifbin305 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_log_s_d.gifbin305 -> 0 bytes
-rw-r--r--usr/local/www/themes/code-red/images/icons/icon_logs.gifbin2092 -> 0 bytes
-rw-r--r--usr/local/www/themes/code-red/images/icons/icon_match.gifbin847 -> 0 bytes
-rw-r--r--usr/local/www/themes/code-red/images/icons/icon_match_d.gifbin843 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_minus.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_open.gifbin62 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_other.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_other_d.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_parp.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_parp_d.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_pass.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_pass_add.gifbin183 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_pass_d.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_plus.gifbin1100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_plus_bl.gifbin1096 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_plus_bl_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_plus_d.gifbin682 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_plus_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_plus_p.gifbin1087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_reinstall.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_reinstall_d.gifbin701 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_reinstall_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_reinstall_pkg.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_d.gifbin694 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_mo.gifbin1135 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_reinstall_xml.gifbin1105 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_reinstall_xml_d.gifbin686 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_reinstall_xml_mo.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_reject.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_reject_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_right.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_service_restart.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_service_restart_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/code-red/images/icons/icon_service_running.gifbin1390 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_service_start.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_service_start_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/code-red/images/icons/icon_service_status.gifbin2150 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_service_stop.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_service_stop_d.gifbin1100 -> 0 bytes
-rw-r--r--usr/local/www/themes/code-red/images/icons/icon_service_stopped.gifbin1695 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_services_restart_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_services_start_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_services_stop_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_system-group-grey.pngbin1566 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_system-group.pngbin3128 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_system-user-grey.pngbin1107 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_system-user.pngbin2084 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_system_lock_screen.pngbin1841 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_system_logout.pngbin2087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_trapped.gifbin1101 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_trapped_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_ts_rule.gifbin194 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_ts_rule_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_up.gifbin1116 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_up_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_up_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_wlan.gifbin66 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_wlan_d.gifbin100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_wol_all.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_wzd_nsaved.pngbin512 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_wzd_saved.pngbin399 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_x.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_x_d.gifbin680 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_x_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/icon_x_p.gifbin1090 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/in_d.gifbin190 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/icons/out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/log.pngbin270 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/logo.gifbin7555 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/logobig.jpgbin7697 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/logon-background.gifbin114596 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/menu_down.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/menu_footer.gifbin234 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/menu_right.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/menubgr.pngbin132 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/menubgr_footer.pngbin372 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/menubgr_highlight.pngbin129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/metal_bgr.gifbin734 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/metal_bgr_red.gifbin734 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/background.gifbin115138 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/bar_blue.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/bar_gray.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/bar_left.gifbin289 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/bar_right.gifbin288 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/bullet_toggle_minus.pngbin154 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/bullet_toggle_plus.pngbin156 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/button.gifbin805 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/graph.pngbin2256 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/key_128.gifbin2766 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/key_152.gifbin2772 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/key_256.gifbin2808 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/key_64.gifbin2723 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/left_background.gifbin38943 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/loader.gifbin5971 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/loader_all.gifbin1398 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/loader_filter.gifbin1436 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/loader_tab.gifbin5852 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/logon.pngbin65956 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/plogo_0.gifbin2195 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/plogo_1.gifbin3851 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/plogo_10.gifbin10624 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/plogo_2.gifbin4611 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/plogo_3.gifbin5572 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/plogo_4.gifbin7103 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/plogo_5.gifbin8717 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/plogo_6.gifbin9422 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/plogo_7.gifbin9443 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/plogo_8.gifbin10240 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/plogo_9.gifbin10823 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/progress_bar.gifbin44791 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/rrd_error.pngbin38898 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/status_alerter.gifbin2203 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/status_carpmaster.gifbin1558 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/status_left.gifbin600 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/status_page_loading.gifbin1621 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/status_reload_all.gifbin1611 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/status_reload_filter.gifbin1612 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/status_right.gifbin599 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/tri_c.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/tri_c_black.gifbin69 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/tri_o.gifbin58 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/tri_o_black.gifbin67 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/misc/widget_loader.gifbin2545 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/new_tab_menu.pngbin444 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/status.pngbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/transparent.gifbin146 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/images/transparent_pixel.gifbin43 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/javascript/ie7/blank.gifbin48 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/javascript/ie7/ie7-box-model.js2
-rwxr-xr-xusr/local/www/themes/code-red/javascript/ie7/ie7-core.js2
-rwxr-xr-xusr/local/www/themes/code-red/javascript/ie7/ie7-css-strict.js2
-rwxr-xr-xusr/local/www/themes/code-red/javascript/ie7/ie7-css2.js2
-rwxr-xr-xusr/local/www/themes/code-red/javascript/ie7/ie7-css3.js2
-rwxr-xr-xusr/local/www/themes/code-red/javascript/ie7/ie7-fixed.js2
-rwxr-xr-xusr/local/www/themes/code-red/javascript/ie7/ie7-html4.js2
-rwxr-xr-xusr/local/www/themes/code-red/javascript/ie7/ie7-ie5.js2
-rw-r--r--usr/local/www/themes/code-red/javascript/ie7/ie7-lite-p.js3
-rwxr-xr-xusr/local/www/themes/code-red/javascript/ie7/ie7-lite.js2
-rwxr-xr-xusr/local/www/themes/code-red/javascript/ie7/ie7-png.js2
-rwxr-xr-xusr/local/www/themes/code-red/javascript/ie7/ie7-server.css43
-rw-r--r--usr/local/www/themes/code-red/javascript/ie7/ie7-standard-p.js3
-rwxr-xr-xusr/local/www/themes/code-red/javascript/ie7/ie7-standard.js2
-rwxr-xr-xusr/local/www/themes/code-red/javascript/ie7/test-trans.pngbin106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/javascript/img/grey-40.pngbin223 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/javascript/img/submenu-off.gifbin65 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/javascript/img/submenu-on.gifbin65 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/javascript/img/white-90.pngbin223 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/code-red/javascript/img/x.gifbin43 -> 0 bytes
-rw-r--r--usr/local/www/themes/code-red/javascript/niftyjsCode.js174
-rwxr-xr-xusr/local/www/themes/code-red/javascript/transmenu-body.php53
-rwxr-xr-xusr/local/www/themes/code-red/javascript/transmenu-head.php87
-rwxr-xr-xusr/local/www/themes/code-red/javascript/transmenu.org785
-rwxr-xr-xusr/local/www/themes/code-red/javascript/transmenuC.js86
-rwxr-xr-xusr/local/www/themes/code-red/jsevents/body.def7
-rw-r--r--usr/local/www/themes/code-red/loader.js29
-rwxr-xr-xusr/local/www/themes/code-red/login.css1136
-rwxr-xr-xusr/local/www/themes/code-red/menu.inc177
-rw-r--r--usr/local/www/themes/code-red/new_tab_menu.css101
-rwxr-xr-xusr/local/www/themes/code-red/no_big_logo1
-rwxr-xr-xusr/local/www/themes/code-red/rrdcolors.inc.php89
-rw-r--r--usr/local/www/themes/code-red/styles/jquery-ui-1.11.1.css1226
-rwxr-xr-xusr/local/www/themes/code-red/styles/menustyles.css44
-rwxr-xr-xusr/local/www/themes/code-red/styles/transmenu.css75
-rwxr-xr-xusr/local/www/themes/code-red/wizard.css1068
-rw-r--r--usr/local/www/themes/metallic/all.css1269
-rwxr-xr-xusr/local/www/themes/metallic/apple-touch-icon.pngbin4068 -> 0 bytes
-rw-r--r--usr/local/www/themes/metallic/bottom-loader.js10
-rwxr-xr-xusr/local/www/themes/metallic/images/alert_bgr.gifbin3415 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/footer.gifbin20440 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/header.gifbin33347 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/help.pngbin324 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/horizontal.gifbin461 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/favicon.icobin1406 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_3g.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_3g_inactive.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_advanced.gifbin306 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_advanced_s.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_alert.gifbin1015 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_alias_host.gifbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_alias_net.gifbin331 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_alias_port.gifbin346 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_alias_url.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_alias_url_reload.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_block.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_block_add.gifbin192 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_block_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_cablenic.gifbin91 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_cal.gifbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_cal_mo.gifbin1060 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_carp.gifbin352 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_carp_d.gifbin357 -> 0 bytes
-rw-r--r--usr/local/www/themes/metallic/images/icons/icon_chain.pngbin161 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_check.gifbin1291 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_clock_green.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_clock_grey.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_clock_red.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_close.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_configure.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_down.gifbin1114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_down_d.gifbin689 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_down_mo.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_e.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_e_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_error.gifbin1312 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_exclam.gifbin1274 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_flag_de.pngbin114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_flag_en.pngbin618 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_flag_es.pngbin281 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_flag_pt_BR.pngbin502 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_frmfld_cert.pngbin1528 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_frmfld_file.pngbin687 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_frmfld_group.pngbin748 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_frmfld_host.pngbin513 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_frmfld_imp.pngbin644 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_frmfld_mail.pngbin371 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_frmfld_pwd.pngbin620 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_frmfld_search.pngbin593 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_frmfld_time.pngbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_frmfld_unknown.pngbin487 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_frmfld_url.pngbin704 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_frmfld_user.pngbin654 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_fw-update.gifbin43785 -> 0 bytes
-rw-r--r--usr/local/www/themes/metallic/images/icons/icon_help.gifbin1669 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_ifalias.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_ifalias_d.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_import_alias.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_in_d.gifbin190 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_info_pkg.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_interface_down.gifbin88 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_interface_up.gifbin87 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_left.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_left_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_left_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_log.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_log_d.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_log_s.gifbin305 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_log_s_d.gifbin305 -> 0 bytes
-rw-r--r--usr/local/www/themes/metallic/images/icons/icon_logs.gifbin2092 -> 0 bytes
-rw-r--r--usr/local/www/themes/metallic/images/icons/icon_match.gifbin847 -> 0 bytes
-rw-r--r--usr/local/www/themes/metallic/images/icons/icon_match_d.gifbin843 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_minus.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_open.gifbin62 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_other.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_other_d.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_parp.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_parp_d.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_pass.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_pass_add.gifbin183 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_pass_d.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_plus.gifbin1100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_plus_bl.gifbin1096 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_plus_bl_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_plus_d.gifbin682 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_plus_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_plus_p.gifbin1087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_reinstall.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_reinstall_d.gifbin701 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_reinstall_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_reinstall_pkg.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_d.gifbin694 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_mo.gifbin1135 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_reinstall_xml.gifbin1105 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_reinstall_xml_d.gifbin686 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_reinstall_xml_mo.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_reject.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_reject_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_right.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_service_restart.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_service_restart_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/metallic/images/icons/icon_service_running.gifbin1390 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_service_start.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_service_start_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/metallic/images/icons/icon_service_status.gifbin2150 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_service_stop.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_service_stop_d.gifbin1100 -> 0 bytes
-rw-r--r--usr/local/www/themes/metallic/images/icons/icon_service_stopped.gifbin1695 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_services_restart_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_services_start_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_services_stop_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_system-group-grey.pngbin1566 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_system-group.pngbin3128 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_system-user-grey.pngbin1107 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_system-user.pngbin2084 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_system_lock_screen.pngbin1841 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_system_logout.pngbin2087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_trapped.gifbin1101 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_trapped_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_ts_rule.gifbin194 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_ts_rule_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_up.gifbin1116 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_up_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_up_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_wlan.gifbin66 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_wlan_d.gifbin100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_wol_all.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_wzd_nsaved.pngbin512 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_wzd_saved.pngbin399 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_x.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_x_d.gifbin680 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_x_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/icon_x_p.gifbin1090 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/in_d.gifbin190 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/icons/out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/log.pngbin270 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/logo.gifbin10012 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/logobig.jpgbin7540 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/menu_down.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/menu_footer.gifbin234 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/menu_right.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/metal_bgr.gifbin734 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/metal_bgr_red.gifbin734 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/bar_blue.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/bar_gray.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/bar_left.gifbin289 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/bar_right.gifbin288 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/bullet_toggle_minus.pngbin154 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/bullet_toggle_plus.pngbin156 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/button.gifbin805 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/graph.pngbin2256 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/key_128.gifbin2766 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/key_152.gifbin2772 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/key_256.gifbin2808 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/key_64.gifbin2723 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/left_background.gifbin38943 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/loader.gifbin5971 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/loader_all.gifbin1398 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/loader_filter.gifbin1436 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/loader_tab.gifbin5852 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/logon.pngbin27029 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/progress_bar.gifbin44791 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/rrd_error.pngbin38898 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/status_alerter.gifbin2203 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/status_carpmaster.gifbin1558 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/status_left.gifbin600 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/status_page_loading.gifbin1621 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/status_reload_all.gifbin1611 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/status_reload_filter.gifbin1612 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/status_right.gifbin599 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/tri_c.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/tri_c_black.gifbin84 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/tri_o.gifbin58 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/tri_o_black.gifbin82 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/misc/widget_loader.gifbin1064 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/new_tab_menu.pngbin444 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/status.pngbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/transparent.gifbin146 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/images/transparent_pixel.gifbin43 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/metallic/javascript/ie7/blank.gifbin48 -> 0 bytes
-rw-r--r--usr/local/www/themes/metallic/javascript/ie7/ie7-box-model.js2
-rw-r--r--usr/local/www/themes/metallic/javascript/ie7/ie7-core.js2
-rw-r--r--usr/local/www/themes/metallic/javascript/ie7/ie7-css-strict.js2
-rw-r--r--usr/local/www/themes/metallic/javascript/ie7/ie7-css2.js2
-rw-r--r--usr/local/www/themes/metallic/javascript/ie7/ie7-css3.js2
-rw-r--r--usr/local/www/themes/metallic/javascript/ie7/ie7-fixed.js2
-rw-r--r--usr/local/www/themes/metallic/javascript/ie7/ie7-html4.js2
-rw-r--r--usr/local/www/themes/metallic/javascript/ie7/ie7-ie5.js2
-rw-r--r--usr/local/www/themes/metallic/javascript/ie7/ie7-lite-p.js3
-rw-r--r--usr/local/www/themes/metallic/javascript/ie7/ie7-lite.js2
-rw-r--r--usr/local/www/themes/metallic/javascript/ie7/ie7-png.js2
-rw-r--r--usr/local/www/themes/metallic/javascript/ie7/ie7-server.css43
-rw-r--r--usr/local/www/themes/metallic/javascript/ie7/ie7-standard-p.js3
-rw-r--r--usr/local/www/themes/metallic/javascript/ie7/ie7-standard.js2
-rwxr-xr-xusr/local/www/themes/metallic/javascript/ie7/test-trans.pngbin106 -> 0 bytes
-rw-r--r--usr/local/www/themes/metallic/javascript/niftyjsCode.js174
-rw-r--r--usr/local/www/themes/metallic/loader.js29
-rw-r--r--usr/local/www/themes/metallic/login.css1127
-rw-r--r--usr/local/www/themes/metallic/new_tab_menu.css101
-rw-r--r--usr/local/www/themes/metallic/no_big_logo1
-rw-r--r--usr/local/www/themes/metallic/rrdcolors.inc.php89
-rw-r--r--usr/local/www/themes/metallic/styles/jquery-ui-1.11.1.css1226
-rw-r--r--usr/local/www/themes/nervecenter/all.css1301
-rwxr-xr-xusr/local/www/themes/nervecenter/apple-touch-icon.pngbin4068 -> 0 bytes
-rw-r--r--usr/local/www/themes/nervecenter/bottom-loader.js10
-rw-r--r--usr/local/www/themes/nervecenter/favicon.icobin1406 -> 0 bytes
-rw-r--r--usr/local/www/themes/nervecenter/graphlink.css43
-rwxr-xr-xusr/local/www/themes/nervecenter/images/alert_bgr.pngbin10240 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/background.gifbin44574 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/background.pngbin8502 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/footer.pngbin41755 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/header.pngbin49602 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/help.pngbin324 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/horizontal.gifbin461 -> 0 bytes
-rw-r--r--usr/local/www/themes/nervecenter/images/icons/favicon.icobin1406 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_3g.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_3g_inactive.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_advanced.gifbin306 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_advanced_s.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_alert.gifbin1015 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_alias_host.gifbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_alias_net.gifbin331 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_alias_port.gifbin346 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_alias_url.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_alias_url_reload.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_block.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_block_add.gifbin192 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_block_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_cablenic.gifbin91 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_cal.gifbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_cal_mo.gifbin1060 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_carp.gifbin352 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_carp_d.gifbin357 -> 0 bytes
-rw-r--r--usr/local/www/themes/nervecenter/images/icons/icon_chain.pngbin161 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_check.gifbin1291 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_clock_green.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_clock_grey.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_clock_red.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_close.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_configure.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_down.gifbin1114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_down_d.gifbin689 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_down_mo.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_e.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_e_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_error.gifbin1312 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_exclam.gifbin1274 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_flag_de.pngbin114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_flag_en.pngbin618 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_flag_es.pngbin281 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_flag_pt_BR.pngbin502 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_frmfld_cert.pngbin1528 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_frmfld_file.pngbin687 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_frmfld_group.pngbin748 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_frmfld_host.pngbin513 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_frmfld_imp.pngbin644 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_frmfld_mail.pngbin371 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_frmfld_pwd.pngbin620 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_frmfld_search.pngbin593 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_frmfld_time.pngbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_frmfld_unknown.pngbin487 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_frmfld_url.pngbin704 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_frmfld_user.pngbin654 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_fw-update.gifbin43785 -> 0 bytes
-rw-r--r--usr/local/www/themes/nervecenter/images/icons/icon_help.gifbin1669 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_ifalias.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_ifalias_d.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_import_alias.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_in_d.gifbin190 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_info_pkg.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_interface_down.gifbin88 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_interface_up.gifbin87 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_left.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_left_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_left_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_log.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_log_d.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_log_s.gifbin305 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_log_s_d.gifbin305 -> 0 bytes
-rw-r--r--usr/local/www/themes/nervecenter/images/icons/icon_logs.gifbin2092 -> 0 bytes
-rw-r--r--usr/local/www/themes/nervecenter/images/icons/icon_match.gifbin847 -> 0 bytes
-rw-r--r--usr/local/www/themes/nervecenter/images/icons/icon_match_d.gifbin843 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_minus.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_open.gifbin62 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_other.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_other_d.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_parp.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_parp_d.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_pass.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_pass_add.gifbin183 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_pass_d.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_plus.gifbin1100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_plus_bl.gifbin1096 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_plus_bl_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_plus_d.gifbin682 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_plus_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_plus_p.gifbin1087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_reinstall.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_reinstall_d.gifbin701 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_reinstall_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_d.gifbin694 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_mo.gifbin1135 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml.gifbin1105 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_d.gifbin686 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_mo.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_reject.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_reject_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_right.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_service_restart.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_service_restart_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/nervecenter/images/icons/icon_service_running.gifbin1390 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_service_start.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_service_start_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/nervecenter/images/icons/icon_service_status.gifbin2150 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_service_stop.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_service_stop_d.gifbin1100 -> 0 bytes
-rw-r--r--usr/local/www/themes/nervecenter/images/icons/icon_service_stopped.gifbin1695 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_services_restart_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_services_start_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_services_stop_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_system-group-grey.pngbin1566 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_system-group.pngbin3128 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_system-user-grey.pngbin1107 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_system-user.pngbin2084 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_system_lock_screen.pngbin1841 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_system_logout.pngbin2087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_trapped.gifbin1101 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_trapped_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_ts_rule.gifbin194 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_ts_rule_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_up.gifbin1116 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_up_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_up_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_wlan.gifbin66 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_wlan_d.gifbin100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_wol_all.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_wzd_nsaved.pngbin512 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_wzd_saved.pngbin399 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_x.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_x_d.gifbin680 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_x_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/icon_x_p.gifbin1090 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/in_d.gifbin190 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/icons/out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/log.pngbin270 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/logo.gifbin7599 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/logobig.jpgbin7540 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/menu_down.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/menu_footer.gifbin234 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/menu_right.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/metal_bgr.gifbin734 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/metal_bgr_red.gifbin734 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/bar_blue.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/bar_gray.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/bar_left.gifbin289 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/bar_right.gifbin288 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/bullet_toggle_minus.pngbin154 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/bullet_toggle_plus.pngbin156 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/button.gifbin805 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/graph.pngbin2256 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/key_128.gifbin2766 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/key_152.gifbin2772 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/key_256.gifbin2808 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/key_64.gifbin2723 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/left_background.gifbin38943 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/loader.gifbin5971 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/loader_all.gifbin1398 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/loader_filter.gifbin1436 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/loader_tab.gifbin5852 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/logon.pngbin47467 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/progress_bar.gifbin44791 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/rrd_error.pngbin38898 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/status_alerter.gifbin2203 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/status_carpmaster.gifbin1558 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/status_left.gifbin600 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/status_page_loading.gifbin1621 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/status_reload_all.gifbin1611 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/status_reload_filter.gifbin1612 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/status_right.gifbin599 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/tri_c.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/tri_c_black.gifbin69 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/tri_o.gifbin58 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/tri_o_black.gifbin67 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/misc/widget_loader.gifbin2545 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/new_tab_menu.pngbin444 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/status.pngbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/transparent.gifbin146 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/images/transparent_pixel.gifbin43 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/javascript/ie7/blank.gifbin48 -> 0 bytes
-rw-r--r--usr/local/www/themes/nervecenter/javascript/ie7/ie7-box-model.js2
-rw-r--r--usr/local/www/themes/nervecenter/javascript/ie7/ie7-core.js2
-rw-r--r--usr/local/www/themes/nervecenter/javascript/ie7/ie7-css-strict.js2
-rw-r--r--usr/local/www/themes/nervecenter/javascript/ie7/ie7-css2.js2
-rw-r--r--usr/local/www/themes/nervecenter/javascript/ie7/ie7-css3.js2
-rw-r--r--usr/local/www/themes/nervecenter/javascript/ie7/ie7-fixed.js2
-rw-r--r--usr/local/www/themes/nervecenter/javascript/ie7/ie7-html4.js2
-rw-r--r--usr/local/www/themes/nervecenter/javascript/ie7/ie7-ie5.js2
-rw-r--r--usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite-p.js3
-rw-r--r--usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite.js2
-rw-r--r--usr/local/www/themes/nervecenter/javascript/ie7/ie7-png.js2
-rw-r--r--usr/local/www/themes/nervecenter/javascript/ie7/ie7-server.css43
-rw-r--r--usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard-p.js3
-rw-r--r--usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard.js2
-rwxr-xr-xusr/local/www/themes/nervecenter/javascript/ie7/test-trans.pngbin106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/javascript/img/grey-40.pngbin223 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/javascript/img/submenu-off.gifbin65 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/javascript/img/submenu-on.gifbin65 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/javascript/img/white-90.pngbin223 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/nervecenter/javascript/img/x.gifbin43 -> 0 bytes
-rw-r--r--usr/local/www/themes/nervecenter/javascript/niftyjsCode.js174
-rw-r--r--usr/local/www/themes/nervecenter/javascript/transmenu-body.php51
-rw-r--r--usr/local/www/themes/nervecenter/javascript/transmenu-head.php85
-rw-r--r--usr/local/www/themes/nervecenter/javascript/transmenu.org785
-rw-r--r--usr/local/www/themes/nervecenter/javascript/transmenuC.js86
-rw-r--r--usr/local/www/themes/nervecenter/jsevents/body.def7
-rw-r--r--usr/local/www/themes/nervecenter/loader.js29
-rw-r--r--usr/local/www/themes/nervecenter/login.css1127
-rw-r--r--usr/local/www/themes/nervecenter/menu.inc177
-rw-r--r--usr/local/www/themes/nervecenter/new_tab_menu.css101
-rw-r--r--usr/local/www/themes/nervecenter/no_big_logo1
-rw-r--r--usr/local/www/themes/nervecenter/rrdcolors.inc.php89
-rw-r--r--usr/local/www/themes/nervecenter/styles/jquery-ui-1.11.1.css1226
-rw-r--r--usr/local/www/themes/nervecenter/styles/menustyles.css44
-rw-r--r--usr/local/www/themes/nervecenter/styles/transmenu.css75
-rw-r--r--usr/local/www/themes/nervecenter/wizard.css1060
-rw-r--r--usr/local/www/themes/pfsense-dropdown/all.css1028
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/apple-touch-icon.pngbin4068 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/bottom-loader.js11
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/alert_bgr.gifbin1651 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/header-alert.gifbin4910 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/header.gifbin7932 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/help.pngbin324 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/favicon.icobin1406 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_3g.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_3g_inactive.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced.gifbin306 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced_s.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_alert.gifbin1044 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_host.gifbin348 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_net.gifbin331 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_port.gifbin346 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url.gifbin314 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url_reload.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_block.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gifbin192 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_block_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_cablenic.gifbin91 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_cal.gifbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_cal_mo.gifbin1060 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_carp.gifbin352 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_carp_d.gifbin357 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_chain.pngbin161 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_check.gifbin1291 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_green.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_grey.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_red.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_close.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_configure.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_down.gifbin1114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_down_d.gifbin689 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_down_mo.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_e.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_e_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_error.gifbin1312 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_exclam.gifbin1274 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_de.pngbin114 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_en.pngbin618 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_es.pngbin281 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_pt_BR.pngbin502 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_cert.pngbin1528 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_file.pngbin687 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_group.pngbin748 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_host.pngbin513 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_imp.pngbin644 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_mail.pngbin371 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_pwd.pngbin620 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_search.pngbin593 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_time.pngbin646 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_unknown.pngbin487 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_url.pngbin704 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_user.pngbin654 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_fw-update.gifbin43785 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_help.gifbin1669 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias.gifbin315 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias_d.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_import_alias.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_in_d.gifbin190 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_info_pkg.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_down.gifbin88 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_up.gifbin87 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_left.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_left_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_left_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_log.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_log_d.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s.gifbin305 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s_d.gifbin305 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_logs.gifbin2092 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_match.gifbin847 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_match_d.gifbin843 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_minus.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_open.gifbin62 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_other.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_other_d.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_parp.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_parp_d.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_pass.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gifbin183 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_d.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_plus.gifbin1100 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl.gifbin1096 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_d.gifbin682 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_mo.gifbin1120 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_p.gifbin1087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_d.gifbin701 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_d.gifbin694 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_mo.gifbin1135 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml.gifbin1105 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_d.gifbin686 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_mo.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_reject.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_reject_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_right.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_running.gifbin1390 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_status.gifbin2150 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop_d.gifbin1100 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stopped.gifbin1695 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_services_restart_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_services_start_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_services_stop_mo.gifbin1126 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group-grey.pngbin1566 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group.pngbin3128 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user-grey.pngbin1107 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user.pngbin2084 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_lock_screen.pngbin1841 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_logout.pngbin2087 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped.gifbin1101 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule.gifbin194 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_up.gifbin1116 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_up_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_up_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan.gifbin66 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan_d.gifbin100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_wol_all.gifbin1114 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_nsaved.pngbin512 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_saved.pngbin399 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_x.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_x_d.gifbin680 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_x_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/icons/icon_x_p.gifbin1090 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/in.gifbin177 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/in_d.gifbin190 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/out.gifbin179 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/images/icons/out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/log.pngbin270 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/logo.gifbin4878 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/logobig.jpgbin7540 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/menu.gifbin460 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/bar_blue.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/bar_gray.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/bar_left.gifbin289 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/bar_right.gifbin288 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/button.gifbin805 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/key_128.gifbin2766 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/key_152.gifbin2772 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/key_256.gifbin2808 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/key_64.gifbin2723 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/left_background.gifbin38943 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/loader.gifbin5971 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/loader_tab.gifbin5852 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/logon.pngbin27029 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/progress_bar.gifbin44791 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/rrd_error.pngbin38898 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/tri_c.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/tri_c_black.gifbin69 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/tri_o.gifbin58 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/tri_o_black.gifbin67 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/misc/widget_loader.gifbin1064 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/new_tab_menu.pngbin444 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/status.pngbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/transparent.gifbin146 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/images/transparent_pixel.gifbin43 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/javascript/ie7/blank.gifbin48 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-box-model.js2
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-core.js2
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css-strict.js2
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css2.js2
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css3.js2
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-fixed.js2
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-html4.js2
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-ie5.js2
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite-p.js3
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite.js2
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-png.js2
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-server.css43
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard-p.js3
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard.js2
-rwxr-xr-xusr/local/www/themes/pfsense-dropdown/javascript/ie7/test-trans.pngbin106 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense-dropdown/javascript/niftyjsCode.js174
-rw-r--r--usr/local/www/themes/pfsense-dropdown/loader.js29
-rw-r--r--usr/local/www/themes/pfsense-dropdown/login.css1127
-rw-r--r--usr/local/www/themes/pfsense-dropdown/new_tab_menu.css101
-rw-r--r--usr/local/www/themes/pfsense-dropdown/rrdcolors.inc.php89
-rw-r--r--usr/local/www/themes/pfsense-dropdown/styles/jquery-ui-1.11.1.css1226
-rw-r--r--usr/local/www/themes/pfsense/all.css1036
-rwxr-xr-xusr/local/www/themes/pfsense/apple-touch-icon.pngbin4068 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/bottom-loader.js12
-rwxr-xr-xusr/local/www/themes/pfsense/images/alert_bgr.gifbin1651 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/header-alert.gifbin4910 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/header.gifbin18510 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/help.pngbin324 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/favicon.icobin1406 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_3g.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_3g_inactive.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_advanced.gifbin306 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_advanced_s.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_alert.gifbin1044 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_alias_host.gifbin348 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_alias_net.gifbin331 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_alias_port.gifbin346 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_alias_url.gifbin314 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_alias_url_reload.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_block.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_block_add.gifbin192 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_block_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_cablenic.gifbin91 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_cal.gifbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_cal_mo.gifbin1060 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_carp.gifbin352 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_carp_d.gifbin357 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_chain.pngbin161 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_check.gifbin1291 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_clock_green.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_clock_grey.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_clock_red.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_close.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_configure.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_down.gifbin1114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_down_d.gifbin689 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_down_mo.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_e.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_e_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_error.gifbin1312 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_exclam.gifbin1274 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_flag_de.pngbin114 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_flag_en.pngbin618 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_flag_es.pngbin281 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_flag_pt_BR.pngbin502 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_frmfld_cert.pngbin1528 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_frmfld_file.pngbin687 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_frmfld_group.pngbin748 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_frmfld_host.pngbin513 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_frmfld_imp.pngbin644 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_frmfld_mail.pngbin371 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_frmfld_pwd.pngbin620 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_frmfld_search.pngbin593 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_frmfld_time.pngbin646 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_frmfld_unknown.pngbin487 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_frmfld_url.pngbin704 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_frmfld_user.pngbin654 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_fw-update.gifbin43785 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_help.gifbin1669 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_ifalias.gifbin315 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_ifalias_d.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_import_alias.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_in_d.gifbin190 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_info_pkg.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_interface_down.gifbin88 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_interface_up.gifbin87 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_left.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_left_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_left_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_log.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_log_d.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_log_s.gifbin305 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_log_s_d.gifbin305 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_logs.gifbin2092 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_match.gifbin847 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_match_d.gifbin843 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_minus.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_open.gifbin62 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_other.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_other_d.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_parp.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_parp_d.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_pass.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_pass_add.gifbin183 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_pass_d.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_plus.gifbin1100 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_plus_bl.gifbin1096 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_plus_bl_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_plus_d.gifbin682 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_plus_mo.gifbin1120 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_plus_p.gifbin1087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_reinstall.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_reinstall_d.gifbin701 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_reinstall_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_d.gifbin694 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_mo.gifbin1135 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_reinstall_xml.gifbin1105 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_d.gifbin686 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_mo.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_reject.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_reject_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_right.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_service_restart.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_service_restart_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_service_running.gifbin1390 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_service_start.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_service_start_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_service_status.gifbin2150 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_service_stop.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_service_stop_d.gifbin1100 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_service_stopped.gifbin1695 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_services_restart_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_services_start_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_services_stop_mo.gifbin1126 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_system-group-grey.pngbin1566 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_system-group.pngbin3128 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_system-user-grey.pngbin1107 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_system-user.pngbin2084 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_system_lock_screen.pngbin1841 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_system_logout.pngbin2087 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_trapped.gifbin1101 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_trapped_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_ts_rule.gifbin194 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_ts_rule_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_up.gifbin1116 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_up_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_up_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_wlan.gifbin66 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_wlan_d.gifbin100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_wol_all.gifbin1126 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_wzd_nsaved.pngbin512 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/icon_wzd_saved.pngbin399 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_x.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_x_d.gifbin680 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_x_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/icons/icon_x_p.gifbin1090 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/in.gifbin177 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/in_d.gifbin190 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/out.gifbin179 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/images/icons/out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/log.pngbin270 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/logo.gifbin4878 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/logobig.jpgbin7540 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/bar_blue.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/bar_gray.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/bar_left.gifbin289 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/bar_right.gifbin288 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/button.gifbin805 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/key_128.gifbin2766 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/key_152.gifbin2772 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/key_256.gifbin2808 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/key_64.gifbin2723 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/left_background.gifbin38943 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/loader.gifbin5971 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/loader_tab.gifbin5852 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/logon.pngbin27029 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/progress_bar.gifbin44791 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/rrd_error.pngbin38898 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/tri_c.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/tri_c_black.gifbin69 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/tri_o.gifbin58 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/tri_o_black.gifbin67 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/misc/widget_loader.gifbin1064 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/new_tab_menu.pngbin444 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/status.pngbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/transparent.gifbin146 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense/images/transparent_pixel.gifbin43 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense/javascript/niftyjsCode.js174
-rw-r--r--usr/local/www/themes/pfsense/loader.js30
-rw-r--r--usr/local/www/themes/pfsense/login.css1127
-rw-r--r--usr/local/www/themes/pfsense/new_tab_menu.css101
-rw-r--r--usr/local/www/themes/pfsense/rrdcolors.inc.php89
-rw-r--r--usr/local/www/themes/pfsense/styles/jquery-ui-1.11.1.css1226
-rw-r--r--usr/local/www/themes/pfsense_ng/all.css1414
-rwxr-xr-xusr/local/www/themes/pfsense_ng/apple-touch-icon.pngbin4068 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng/bottom-loader.js10
-rw-r--r--usr/local/www/themes/pfsense_ng/favicon.icobin1406 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng/graphlink.css43
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/alert_bgr.pngbin2483 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/alerter.pngbin3748 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/background.jpgbin49431 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/footer.pngbin2956 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/header.pngbin4994 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/help.pngbin324 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/horizontal.pngbin191 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/hostname.pngbin1899 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng/images/icons/favicon.icobin1406 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_3g.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_3g_inactive.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_advanced.gifbin306 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_advanced_s.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_alert.gifbin1015 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_alias_host.gifbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_alias_net.gifbin331 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_alias_port.gifbin346 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_alias_url.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_alias_url_reload.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_block.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gifbin192 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_block_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_cablenic.gifbin91 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_cal.gifbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_cal_mo.gifbin1060 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_carp.gifbin352 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_carp_d.gifbin357 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_chain.pngbin161 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_check.gifbin1291 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_clock_green.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_clock_grey.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_clock_red.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_close.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_configure.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_down.gifbin1114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_down_d.gifbin689 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_down_mo.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_e.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_e_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_error.gifbin1312 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_exclam.gifbin1274 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_flag_de.pngbin114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_flag_en.pngbin618 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_flag_es.pngbin281 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_flag_pt_BR.pngbin502 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_cert.pngbin1528 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_file.pngbin687 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_group.pngbin748 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_host.pngbin513 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_imp.pngbin644 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_mail.pngbin371 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_pwd.pngbin620 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_search.pngbin593 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_time.pngbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_unknown.pngbin487 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_url.pngbin704 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_user.pngbin654 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_fw-update.gifbin43785 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng/images/icons/icon_help.gifbin1669 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_ifalias.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_ifalias_d.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_import_alias.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_in_d.gifbin190 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_info_pkg.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_interface_down.gifbin88 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_interface_up.gifbin87 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_left.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_left_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_left_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_log.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_log_d.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_log_s.gifbin305 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_log_s_d.gifbin305 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng/images/icons/icon_logs.gifbin2092 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng/images/icons/icon_match.gifbin847 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng/images/icons/icon_match_d.gifbin843 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_minus.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_open.gifbin62 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_other.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_other_d.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_parp.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_parp_d.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_pass.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gifbin183 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_pass_d.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_plus.gifbin1100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl.gifbin1096 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_plus_d.gifbin682 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_plus_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_plus_p.gifbin1087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_reinstall.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_d.gifbin701 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_d.gifbin694 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_mo.gifbin1135 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml.gifbin1105 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_d.gifbin686 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_mo.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_reject.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_reject_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_right.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_service_restart.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_service_restart_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng/images/icons/icon_service_running.gifbin1390 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_service_start.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_service_start_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng/images/icons/icon_service_status.gifbin2150 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_service_stop.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_service_stop_d.gifbin1100 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng/images/icons/icon_service_stopped.gifbin1695 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_services_restart_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_services_start_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_services_stop_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_system-group-grey.pngbin1566 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_system-group.pngbin3128 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_system-user-grey.pngbin1107 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_system-user.pngbin2084 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_system_lock_screen.pngbin1841 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_system_logout.pngbin2087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_trapped.gifbin1101 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_trapped_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule.gifbin194 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_up.gifbin1116 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_up_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_up_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_wlan.gifbin66 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_wlan_d.gifbin100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_wol_all.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_wzd_nsaved.pngbin512 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_wzd_saved.pngbin399 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_x.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_x_d.gifbin680 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_x_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/icon_x_p.gifbin1090 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/in_d.gifbin190 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/icons/out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/log.pngbin270 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/logo.gifbin2471 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/logobig.jpgbin7540 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/mainmenu-down.gifbin55 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/mainmenu-right.gifbin56 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/mainmenuitem.gifbin54 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/menu-dot.gifbin54 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/menu_footer.gifbin234 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/menu_right.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/menubgr.pngbin132 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/menubgr_footer.pngbin496 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/menubgr_highlight.pngbin252 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/bar_blue.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/bar_gray.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/bar_left.gifbin289 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/bar_right.gifbin288 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_minus.pngbin154 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_plus.pngbin156 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/button.gifbin805 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/graph.pngbin2256 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/key_128.gifbin2766 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/key_152.gifbin2772 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/key_256.gifbin2808 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/key_64.gifbin2723 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/left_background.gifbin38943 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/loader.gifbin5971 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/loader_all.gifbin1398 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/loader_filter.gifbin1436 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/loader_tab.gifbin5852 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/logon.pngbin50494 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/progress_bar.gifbin44791 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/rrd_error.pngbin38898 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/status_alerter.gifbin2203 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/status_carpmaster.gifbin1558 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/status_left.gifbin600 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/status_page_loading.gifbin1621 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/status_reload_all.gifbin1611 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/status_reload_filter.gifbin1612 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/status_right.gifbin599 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/tri_c.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/tri_c_black.gifbin69 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/tri_o.gifbin58 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/tri_o_black.gifbin67 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/misc/widget_loader.gifbin2545 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/new_tab_menu.pngbin444 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/status.pngbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/transparent.gifbin146 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/images/transparent_pixel.gifbin43 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/javascript/ie7/blank.gifbin48 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-box-model.js2
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-core.js2
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css-strict.js2
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css2.js2
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css3.js2
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-fixed.js2
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-html4.js2
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-ie5.js2
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite-p.js3
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite.js2
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-png.js2
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-server.css43
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js3
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard.js2
-rwxr-xr-xusr/local/www/themes/pfsense_ng/javascript/ie7/test-trans.pngbin106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/javascript/img/grey-40.pngbin223 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/javascript/img/submenu-off.gifbin65 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/javascript/img/submenu-on.gifbin65 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/javascript/img/white-90.pngbin223 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng/javascript/img/x.gifbin43 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/niftyjsCode.js174
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/transmenu-body.php51
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/transmenu-head.php85
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/transmenu.org785
-rw-r--r--usr/local/www/themes/pfsense_ng/javascript/transmenuC.js86
-rw-r--r--usr/local/www/themes/pfsense_ng/jsevents/body.def7
-rw-r--r--usr/local/www/themes/pfsense_ng/loader.js36
-rw-r--r--usr/local/www/themes/pfsense_ng/login.css1127
-rw-r--r--usr/local/www/themes/pfsense_ng/menu.inc177
-rw-r--r--usr/local/www/themes/pfsense_ng/new_tab_menu.css101
-rw-r--r--usr/local/www/themes/pfsense_ng/no_big_logo1
-rw-r--r--usr/local/www/themes/pfsense_ng/rrdcolors.inc.php89
-rw-r--r--usr/local/www/themes/pfsense_ng/styles/jquery-ui-1.11.1.css1226
-rw-r--r--usr/local/www/themes/pfsense_ng/styles/menustyles.css44
-rw-r--r--usr/local/www/themes/pfsense_ng/styles/transmenu.css75
-rw-r--r--usr/local/www/themes/pfsense_ng/wizard.css1117
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/all.css1375
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/apple-touch-icon.pngbin4068 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/bottom-loader.js10
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/favicon.icobin1406 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/graphlink.css43
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/alert_bgr.pngbin2483 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/alerter.pngbin3748 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/background.jpgbin49431 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/footer.pngbin2956 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/header.pngbin4994 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/help.pngbin324 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/horizontal.pngbin191 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/hostname.pngbin1899 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/images/icons/favicon.icobin1406 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g_inactive.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced.gifbin306 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced_s.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_alert.gifbin1015 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_host.gifbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_net.gifbin331 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_port.gifbin346 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url_reload.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_block.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_add.gifbin192 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_cablenic.gifbin91 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal.gifbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal_mo.gifbin1060 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp.gifbin352 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp_d.gifbin357 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_chain.pngbin161 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_check.gifbin1291 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_green.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_grey.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_red.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_close.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_configure.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_down.gifbin1114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_d.gifbin689 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_mo.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_e.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_e_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_error.gifbin1312 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_exclam.gifbin1274 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_de.pngbin114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_en.pngbin618 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_es.pngbin281 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_pt_BR.pngbin502 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_cert.pngbin1528 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_file.pngbin687 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_group.pngbin748 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_host.pngbin513 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_imp.pngbin644 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_mail.pngbin371 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_pwd.pngbin620 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_search.pngbin593 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_time.pngbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_unknown.pngbin487 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_url.pngbin704 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_user.pngbin654 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_fw-update.gifbin43785 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/images/icons/icon_help.gifbin1669 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias_d.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_import_alias.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_in_d.gifbin190 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_info_pkg.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_down.gifbin88 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_up.gifbin87 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_left.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_log.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_d.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s.gifbin305 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s_d.gifbin305 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/images/icons/icon_logs.gifbin2092 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match.gifbin847 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match_d.gifbin843 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_minus.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_open.gifbin62 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_other.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_other_d.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp_d.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_add.gifbin183 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_d.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus.gifbin1100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl.gifbin1096 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_d.gifbin682 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_p.gifbin1087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_d.gifbin701 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_d.gifbin694 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_mo.gifbin1135 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml.gifbin1105 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_d.gifbin686 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_mo.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_right.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_running.gifbin1390 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_status.gifbin2150 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop_d.gifbin1100 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stopped.gifbin1695 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_restart_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_start_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_stop_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group-grey.pngbin1566 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group.pngbin3128 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user-grey.pngbin1107 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user.pngbin2084 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_lock_screen.pngbin1841 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_logout.pngbin2087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped.gifbin1101 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule.gifbin194 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_up.gifbin1116 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan.gifbin66 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan_d.gifbin100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_wol_all.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_nsaved.pngbin512 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_saved.pngbin399 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_x.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_d.gifbin680 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_p.gifbin1090 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/in_d.gifbin190 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/icons/out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/log.pngbin270 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/logo.gifbin2471 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/logobig.jpgbin7540 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/mainmenu-down.gifbin55 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/mainmenu-right.gifbin56 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/mainmenuitem.gifbin54 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/menu-dot.gifbin54 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/menu_footer.gifbin234 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/menu_right.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/menubgr.pngbin132 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/menubgr_footer.pngbin496 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/menubgr_highlight.pngbin252 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/bar_blue.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/bar_gray.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/bar_left.gifbin289 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/bar_right.gifbin288 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_minus.pngbin154 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_plus.pngbin156 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/button.gifbin805 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/graph.pngbin2256 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/key_128.gifbin2766 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/key_152.gifbin2772 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/key_256.gifbin2808 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/key_64.gifbin2723 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/left_background.gifbin38943 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/loader.gifbin5971 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/loader_all.gifbin1398 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/loader_filter.gifbin1436 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/loader_tab.gifbin5852 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/logon.pngbin50494 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/progress_bar.gifbin44791 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/rrd_error.pngbin38898 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/status_alerter.gifbin2203 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/status_carpmaster.gifbin1558 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/status_left.gifbin600 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/status_page_loading.gifbin1621 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_all.gifbin1611 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_filter.gifbin1612 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/status_right.gifbin599 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/tri_c.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/tri_c_black.gifbin69 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/tri_o.gifbin58 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/tri_o_black.gifbin67 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/misc/widget_loader.gifbin2545 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/new_tab_menu.pngbin444 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/status.pngbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/transparent.gifbin146 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/images/transparent_pixel.gifbin43 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/javascript/ie7/blank.gifbin48 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-box-model.js2
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-core.js2
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css-strict.js2
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css2.js2
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css3.js2
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-fixed.js2
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-html4.js2
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-ie5.js2
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite-p.js3
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite.js2
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-png.js2
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-server.css43
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard-p.js3
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard.js2
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/javascript/ie7/test-trans.pngbin106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/javascript/img/grey-40.pngbin223 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-off.gifbin65 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-on.gifbin65 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/javascript/img/white-90.pngbin223 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/pfsense_ng_fs/javascript/img/x.gifbin43 -> 0 bytes
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/niftyjsCode.js174
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-body.php51
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-head.php85
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/transmenu.org785
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/javascript/transmenuC.js86
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/jsevents/body.def7
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/loader.js294
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/login.css1127
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/menu.inc177
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/new_tab_menu.css101
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/no_big_logo1
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/rrdcolors.inc.php89
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/styles/jquery-ui-1.11.1.css1226
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/styles/menustyles.css44
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/styles/transmenu.css75
-rw-r--r--usr/local/www/themes/pfsense_ng_fs/wizard.css1117
-rw-r--r--usr/local/www/themes/the_wall/all.css1308
-rwxr-xr-xusr/local/www/themes/the_wall/apple-touch-icon.pngbin4068 -> 0 bytes
-rw-r--r--usr/local/www/themes/the_wall/bottom-loader.js10
-rw-r--r--usr/local/www/themes/the_wall/favicon.icobin1406 -> 0 bytes
-rw-r--r--usr/local/www/themes/the_wall/graphlink.css43
-rwxr-xr-xusr/local/www/themes/the_wall/images/alert_bgr.pngbin12705 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/background.jpgbin50449 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/footer.pngbin7774 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/header.pngbin44524 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/help.pngbin324 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/horizontal.gifbin461 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/horizontal.pngbin190 -> 0 bytes
-rw-r--r--usr/local/www/themes/the_wall/images/icons/favicon.icobin1406 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_3g.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_3g_inactive.gifbin200 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_advanced.gifbin306 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_advanced_s.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_alert.gifbin1015 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_alias_host.gifbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_alias_net.gifbin331 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_alias_port.gifbin346 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_alias_url.gifbin314 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_alias_url_reload.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_block.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_block_add.gifbin192 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_block_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_cablenic.gifbin91 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_cal.gifbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_cal_mo.gifbin1060 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_carp.gifbin352 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_carp_d.gifbin357 -> 0 bytes
-rw-r--r--usr/local/www/themes/the_wall/images/icons/icon_chain.pngbin161 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_check.gifbin1291 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_clock_green.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_clock_grey.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_clock_red.gifbin308 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_close.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_configure.gifbin64 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_down.gifbin1114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_down_d.gifbin689 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_down_mo.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_e.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_e_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_error.gifbin1312 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_exclam.gifbin1274 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_flag_de.pngbin114 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_flag_en.pngbin618 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_flag_es.pngbin281 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_flag_pt_BR.pngbin502 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_frmfld_cert.pngbin1528 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_frmfld_file.pngbin687 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_frmfld_group.pngbin748 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_frmfld_host.pngbin513 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_frmfld_imp.pngbin644 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_frmfld_mail.pngbin371 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_frmfld_pwd.pngbin620 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_frmfld_search.pngbin593 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_frmfld_time.pngbin646 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_frmfld_unknown.pngbin487 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_frmfld_url.pngbin704 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_frmfld_user.pngbin654 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_fw-update.gifbin43785 -> 0 bytes
-rw-r--r--usr/local/www/themes/the_wall/images/icons/icon_help.gifbin1669 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_ifalias.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_ifalias_d.gifbin315 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_import_alias.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_in_d.gifbin190 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_info_pkg.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_interface_down.gifbin88 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_interface_up.gifbin87 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_left.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_left_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_left_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_log.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_log_d.gifbin297 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_log_s.gifbin305 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_log_s_d.gifbin305 -> 0 bytes
-rw-r--r--usr/local/www/themes/the_wall/images/icons/icon_logs.gifbin2092 -> 0 bytes
-rw-r--r--usr/local/www/themes/the_wall/images/icons/icon_match.gifbin847 -> 0 bytes
-rw-r--r--usr/local/www/themes/the_wall/images/icons/icon_match_d.gifbin843 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_minus.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_open.gifbin62 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_other.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_other_d.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_parp.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_parp_d.gifbin303 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_pass.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_pass_add.gifbin183 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_pass_d.gifbin182 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_plus.gifbin1100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_plus_bl.gifbin1096 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_plus_bl_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_plus_d.gifbin682 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_plus_mo.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_plus_p.gifbin1087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_reinstall.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_reinstall_d.gifbin701 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_reinstall_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg.gifbin1109 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_d.gifbin694 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_mo.gifbin1135 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_reinstall_xml.gifbin1105 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_d.gifbin686 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_mo.gifbin1131 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_reject.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_reject_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_right.gifbin1117 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_service_restart.gifbin1120 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_service_restart_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/the_wall/images/icons/icon_service_running.gifbin1390 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_service_start.gifbin1119 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_service_start_d.gifbin1115 -> 0 bytes
-rw-r--r--usr/local/www/themes/the_wall/images/icons/icon_service_status.gifbin2150 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_service_stop.gifbin1106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_service_stop_d.gifbin1100 -> 0 bytes
-rw-r--r--usr/local/www/themes/the_wall/images/icons/icon_service_stopped.gifbin1695 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_services_restart_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_services_start_mo.gifbin1130 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_services_stop_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_system-group-grey.pngbin1566 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_system-group.pngbin3128 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_system-user-grey.pngbin1107 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_system-user.pngbin2084 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_system_lock_screen.pngbin1841 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_system_logout.pngbin2087 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_trapped.gifbin1101 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_trapped_p.gifbin1079 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_ts_rule.gifbin194 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_ts_rule_d.gifbin193 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_up.gifbin1116 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_up_d.gifbin691 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_up_mo.gifbin1129 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_wlan.gifbin66 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_wlan_d.gifbin100 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_wol_all.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_wzd_nsaved.pngbin512 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_wzd_saved.pngbin399 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_x.gifbin1111 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_x_d.gifbin680 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_x_mo.gifbin1126 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/icon_x_p.gifbin1090 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/in.gifbin177 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/in_d.gifbin190 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/out.gifbin179 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/icons/out_d.gifbin189 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/log.pngbin270 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/logo.gifbin7599 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/logobig.jpgbin7540 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/menu_down.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/menu_right.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/bar_blue.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/bar_gray.gifbin94 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/bar_left.gifbin289 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/bar_right.gifbin288 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/bullet_toggle_minus.pngbin154 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/bullet_toggle_plus.pngbin156 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/button.gifbin805 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/graph.pngbin2256 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/key_128.gifbin2766 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/key_152.gifbin2772 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/key_256.gifbin2808 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/key_64.gifbin2723 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/loader.gifbin2248 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/loader_all.gifbin1398 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/loader_filter.gifbin1436 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/loader_tab.gifbin2248 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/logon.pngbin22000 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/progress_bar.gifbin44791 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/rrd_error.pngbin38898 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/status_alerter.gifbin2203 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/status_carpmaster.gifbin1558 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/status_left.gifbin600 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/status_page_loading.gifbin1621 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/status_reload_all.gifbin1611 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/status_reload_filter.gifbin1612 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/status_right.gifbin599 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/tri_c.gifbin61 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/tri_c_black.gifbin69 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/tri_o.gifbin58 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/tri_o_black.gifbin67 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/widget_loader.gifbin2545 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/misc/widget_loader_old.gifbin1064 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/new_tab_menu.pngbin444 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/status.pngbin348 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/transparent.gifbin146 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/images/transparent_pixel.gifbin43 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/javascript/ie7/blank.gifbin48 -> 0 bytes
-rw-r--r--usr/local/www/themes/the_wall/javascript/ie7/ie7-box-model.js2
-rw-r--r--usr/local/www/themes/the_wall/javascript/ie7/ie7-core.js2
-rw-r--r--usr/local/www/themes/the_wall/javascript/ie7/ie7-css-strict.js2
-rw-r--r--usr/local/www/themes/the_wall/javascript/ie7/ie7-css2.js2
-rw-r--r--usr/local/www/themes/the_wall/javascript/ie7/ie7-css3.js2
-rw-r--r--usr/local/www/themes/the_wall/javascript/ie7/ie7-fixed.js2
-rw-r--r--usr/local/www/themes/the_wall/javascript/ie7/ie7-html4.js2
-rw-r--r--usr/local/www/themes/the_wall/javascript/ie7/ie7-ie5.js2
-rw-r--r--usr/local/www/themes/the_wall/javascript/ie7/ie7-lite-p.js3
-rw-r--r--usr/local/www/themes/the_wall/javascript/ie7/ie7-lite.js2
-rw-r--r--usr/local/www/themes/the_wall/javascript/ie7/ie7-png.js2
-rw-r--r--usr/local/www/themes/the_wall/javascript/ie7/ie7-server.css43
-rw-r--r--usr/local/www/themes/the_wall/javascript/ie7/ie7-standard-p.js3
-rw-r--r--usr/local/www/themes/the_wall/javascript/ie7/ie7-standard.js2
-rwxr-xr-xusr/local/www/themes/the_wall/javascript/ie7/test-trans.pngbin106 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/javascript/img/grey-40.pngbin223 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/javascript/img/submenu-off.gifbin65 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/javascript/img/submenu-on.gifbin65 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/javascript/img/white-90.pngbin223 -> 0 bytes
-rwxr-xr-xusr/local/www/themes/the_wall/javascript/img/x.gifbin43 -> 0 bytes
-rw-r--r--usr/local/www/themes/the_wall/javascript/niftyjsCode.js174
-rw-r--r--usr/local/www/themes/the_wall/javascript/transmenu-body.php51
-rw-r--r--usr/local/www/themes/the_wall/javascript/transmenu-head.php85
-rw-r--r--usr/local/www/themes/the_wall/javascript/transmenu.org785
-rw-r--r--usr/local/www/themes/the_wall/javascript/transmenuC.js86
-rw-r--r--usr/local/www/themes/the_wall/jsevents/body.def7
-rw-r--r--usr/local/www/themes/the_wall/loader.js30
-rw-r--r--usr/local/www/themes/the_wall/login.css1159
-rw-r--r--usr/local/www/themes/the_wall/menu.inc177
-rw-r--r--usr/local/www/themes/the_wall/new_tab_menu.css101
-rw-r--r--usr/local/www/themes/the_wall/no_big_logo1
-rw-r--r--usr/local/www/themes/the_wall/rrdcolors.inc.php89
-rw-r--r--usr/local/www/themes/the_wall/styles/jquery-ui-1.11.1.css1226
-rw-r--r--usr/local/www/themes/the_wall/styles/menustyles.css44
-rw-r--r--usr/local/www/themes/the_wall/styles/transmenu.css75
-rw-r--r--usr/local/www/themes/the_wall/wizard.css1060
-rwxr-xr-xusr/local/www/tree-images/empty.gifbin837 -> 0 bytes
-rwxr-xr-xusr/local/www/tree-images/join.gifbin857 -> 0 bytes
-rwxr-xr-xusr/local/www/tree-images/joinbottom.gifbin850 -> 0 bytes
-rwxr-xr-xusr/local/www/tree-images/line.gifbin853 -> 0 bytes
-rwxr-xr-xusr/local/www/tree-images/minus_.gifbin913 -> 0 bytes
-rwxr-xr-xusr/local/www/tree-images/minus_up.gifbin911 -> 0 bytes
-rwxr-xr-xusr/local/www/tree-images/page.gifbin980 -> 0 bytes
-rwxr-xr-xusr/local/www/tree-images/plus_.gifbin910 -> 0 bytes
-rwxr-xr-xusr/local/www/tree-images/plus_up.gifbin913 -> 0 bytes
-rwxr-xr-xusr/local/www/tree-images/plus_updown.gifbin915 -> 0 bytes
-rwxr-xr-xusr/local/www/tree-images/zone.gifbin318 -> 0 bytes
-rwxr-xr-xusr/local/www/tree/i-bottom.gifbin125 -> 0 bytes
-rwxr-xr-xusr/local/www/tree/i-repeater.gifbin91 -> 0 bytes
-rw-r--r--usr/local/www/tree/index.html228
-rwxr-xr-xusr/local/www/tree/l.gifbin131 -> 0 bytes
-rwxr-xr-xusr/local/www/tree/minus.gifbin146 -> 0 bytes
-rwxr-xr-xusr/local/www/tree/page-file.pngbin211 -> 0 bytes
-rwxr-xr-xusr/local/www/tree/page-file_play.gifbin1021 -> 0 bytes
-rwxr-xr-xusr/local/www/tree/page-file_x.gifbin630 -> 0 bytes
-rwxr-xr-xusr/local/www/tree/page-foldericon.pngbin210 -> 0 bytes
-rwxr-xr-xusr/local/www/tree/page-openfoldericon.pngbin219 -> 0 bytes
-rwxr-xr-xusr/local/www/tree/plus.gifbin149 -> 0 bytes
-rwxr-xr-xusr/local/www/tree/t.gifbin141 -> 0 bytes
-rw-r--r--usr/local/www/tree/tree.css136
-rw-r--r--usr/local/www/tree/tree.js195
-rw-r--r--usr/local/www/treeview.css48
-rw-r--r--usr/local/www/uploadconfig.php65
-rw-r--r--usr/local/www/vpn_ipsec.php704
-rw-r--r--usr/local/www/vpn_ipsec_keys.php230
-rw-r--r--usr/local/www/vpn_ipsec_keys_edit.php199
-rw-r--r--usr/local/www/vpn_ipsec_mobile.php740
-rw-r--r--usr/local/www/vpn_ipsec_phase1.php1092
-rw-r--r--usr/local/www/vpn_ipsec_phase2.php983
-rw-r--r--usr/local/www/vpn_ipsec_settings.php445
-rw-r--r--usr/local/www/vpn_l2tp.php493
-rw-r--r--usr/local/www/vpn_l2tp_users.php146
-rw-r--r--usr/local/www/vpn_l2tp_users_edit.php212
-rw-r--r--usr/local/www/vpn_openvpn_client.php1271
-rw-r--r--usr/local/www/vpn_openvpn_csc.php868
-rw-r--r--usr/local/www/vpn_openvpn_server.php2042
-rw-r--r--usr/local/www/vpn_pppoe.php167
-rw-r--r--usr/local/www/vpn_pppoe_edit.php671
-rw-r--r--usr/local/www/vpn_pptp.php504
-rw-r--r--usr/local/www/vpn_pptp_users.php142
-rw-r--r--usr/local/www/vpn_pptp_users_edit.php184
-rw-r--r--usr/local/www/widgets/include/captiveportal.inc4
-rw-r--r--usr/local/www/widgets/include/carp_status.inc7
-rw-r--r--usr/local/www/widgets/include/dyn_dns_status.inc7
-rw-r--r--usr/local/www/widgets/include/gateways.inc5
-rw-r--r--usr/local/www/widgets/include/gmirror_status.inc4
-rw-r--r--usr/local/www/widgets/include/installed_packages.inc7
-rw-r--r--usr/local/www/widgets/include/interface_statistics.inc5
-rw-r--r--usr/local/www/widgets/include/interfaces.inc6
-rw-r--r--usr/local/www/widgets/include/ipsec.inc4
-rw-r--r--usr/local/www/widgets/include/load_balancer.inc4
-rw-r--r--usr/local/www/widgets/include/log.inc6
-rw-r--r--usr/local/www/widgets/include/ntp_status.inc5
-rw-r--r--usr/local/www/widgets/include/openvpn.inc4
-rw-r--r--usr/local/www/widgets/include/services_status.inc7
-rw-r--r--usr/local/www/widgets/include/smart_status.inc5
-rw-r--r--usr/local/www/widgets/include/thermal_sensors.inc27
-rw-r--r--usr/local/www/widgets/include/traffic_graph.inc4
-rw-r--r--usr/local/www/widgets/include/wake_on_lan.inc7
-rw-r--r--usr/local/www/widgets/javascript/cpu_graphs.js245
-rw-r--r--usr/local/www/widgets/javascript/ipsec.js9
-rw-r--r--usr/local/www/widgets/javascript/thermal_sensors.js296
-rw-r--r--usr/local/www/widgets/javascript/traffic_graph.js41
-rw-r--r--usr/local/www/widgets/widgets/captive_portal_status.widget.php146
-rw-r--r--usr/local/www/widgets/widgets/carp_status.widget.php85
-rw-r--r--usr/local/www/widgets/widgets/deactivated/cpu_graphs.widget.php76
-rw-r--r--usr/local/www/widgets/widgets/dyn_dns_status.widget.php174
-rw-r--r--usr/local/www/widgets/widgets/gateways.widget.php227
-rw-r--r--usr/local/www/widgets/widgets/gmirror_status.widget.php52
-rw-r--r--usr/local/www/widgets/widgets/installed_packages.widget.php126
-rw-r--r--usr/local/www/widgets/widgets/interface_statistics.widget.php216
-rw-r--r--usr/local/www/widgets/widgets/interfaces.widget.php126
-rw-r--r--usr/local/www/widgets/widgets/ipsec.widget.php265
-rw-r--r--usr/local/www/widgets/widgets/load_balancer_status.widget.php155
-rw-r--r--usr/local/www/widgets/widgets/log.widget.php281
-rw-r--r--usr/local/www/widgets/widgets/ntp_status.widget.php515
-rw-r--r--usr/local/www/widgets/widgets/openvpn.widget.php290
-rw-r--r--usr/local/www/widgets/widgets/picture.widget.php96
-rw-r--r--usr/local/www/widgets/widgets/rss.widget.php198
-rw-r--r--usr/local/www/widgets/widgets/services_status.widget.php105
-rw-r--r--usr/local/www/widgets/widgets/smart_status.widget.php76
-rw-r--r--usr/local/www/widgets/widgets/system_information.widget.php322
-rw-r--r--usr/local/www/widgets/widgets/thermal_sensors.widget.php279
-rw-r--r--usr/local/www/widgets/widgets/traffic_graphs.widget.php193
-rw-r--r--usr/local/www/widgets/widgets/wake_on_lan.widget.php80
-rw-r--r--usr/local/www/wizard.php1061
-rw-r--r--usr/local/www/wizards/openvpn_wizard.inc676
-rw-r--r--usr/local/www/wizards/openvpn_wizard.xml987
-rw-r--r--usr/local/www/wizards/setup_wizard.xml703
-rw-r--r--usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc1664
-rwxr-xr-xusr/local/www/wizards/traffic_shaper_wizard_dedicated.xml1649
-rw-r--r--usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc1741
-rwxr-xr-xusr/local/www/wizards/traffic_shaper_wizard_multi_all.xml1657
-rwxr-xr-xusr/local/www/xmlrpc.php592
2435 files changed, 0 insertions, 190814 deletions
diff --git a/usr/local/www/apple-touch-icon.png b/usr/local/www/apple-touch-icon.png
deleted file mode 100755
index 7a4b975..0000000
--- a/usr/local/www/apple-touch-icon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/bandwidth_by_ip.php b/usr/local/www/bandwidth_by_ip.php
deleted file mode 100755
index 39f9a01..0000000
--- a/usr/local/www/bandwidth_by_ip.php
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-/*
- bandwidth_by_ip.php
- */
-
-/*
- pfSense_BUILDER_BINARIES: /usr/local/bin/rate
- pfSense_MODULE: trafficgraph
-*/
-
-require_once('guiconfig.inc');
-require_once('interfaces.inc');
-require_once('pfsense-utils.inc');
-require_once('util.inc');
-
-$listedIPs = "";
-
-//get interface IP and break up into an array
-$interface = $_GET['if'];
-$real_interface = get_real_interface($interface);
-if (!does_interface_exist($real_interface)) {
- echo gettext("Wrong Interface");
- return;
-}
-
-$intip = find_interface_ip($real_interface);
-//get interface subnet
-$netmask = find_interface_subnet($real_interface);
-$intsubnet = gen_subnet($intip, $netmask) . "/$netmask";
-
-// see if they want local, remote or all IPs returned
-$filter = $_GET['filter'];
-
-if ($filter == "") {
- $filter = "local";
-}
-
-if ($filter == "local") {
- $ratesubnet = "-c " . $intsubnet;
-} else {
- // Tell the rate utility to consider the whole internet (0.0.0.0/0)
- // and to consider local "l" traffic - i.e. traffic within the whole internet
- // then we can filter the resulting output as we wish below.
- $ratesubnet = "-lc 0.0.0.0/0";
-}
-
-//get the sort method
-$sort = $_GET['sort'];
-if ($sort == "out") {
- $sort_method = "-T";
-} else {
- $sort_method = "-R";
-}
-
-// get the desired format for displaying the host name or IP
-$hostipformat = $_GET['hostipformat'];
-$iplookup = array();
-// If hostname, description or FQDN is requested then load the locally-known IP address - host/description mappings into an array keyed by IP address.
-if ($hostipformat != "") {
- if (is_array($config['dhcpd'])) {
- // Build an array of static-mapped DHCP entries keyed by IP address.
- foreach ($config['dhcpd'] as $ifdata) {
- if (is_array($ifdata['staticmap'])) {
- foreach ($ifdata['staticmap'] as $hostent) {
- if (($hostent['ipaddr'] != "") && ($hostent['hostname'] != "")) {
- if ($hostipformat == "descr" && $hostent['descr'] != "") {
- $iplookup[$hostent['ipaddr']] = $hostent['descr'];
- } else {
- $iplookup[$hostent['ipaddr']] = $hostent['hostname'];
- if ($hostipformat == "fqdn") {
- $iplookup[$hostent['ipaddr']] .= "." . $config['system']['domain'];
- }
- }
- }
- }
- }
- }
- }
- // Add any DNS host override data keyed by IP address.
- foreach (array('dnsmasq', 'unbound') as $dns_type) {
- if (isset($config[$dns_type]['enable'])) {
- if (is_array($config[$dns_type]['hosts'])) {
- foreach ($config[$dns_type]['hosts'] as $hostent) {
- if (($hostent['ip'] != "") && ($hostent['host'] != "")) {
- if ($hostipformat == "descr" && $hostent['descr'] != "") {
- $iplookup[$hostent['ip']] = $hostent['descr'];
- } else {
- $iplookup[$hostent['ip']] = $hostent['host'];
- if ($hostipformat == "fqdn") {
- $iplookup[$hostent['ip']] .= "." . $hostent['domain'];
- }
- }
- }
- }
- }
- }
- }
-}
-
-$_grb = exec("/usr/local/bin/rate -i {$real_interface} -nlq 1 -Aba 20 {$sort_method} {$ratesubnet} | tr \"|\" \" \" | awk '{ printf \"%s:%s:%s:%s:%s\\n\", $1, $2, $4, $6, $8 }'", $listedIPs);
-
-$someinfo = false;
-for ($x=2; $x<12; $x++) {
-
- $bandwidthinfo = $listedIPs[$x];
-
- // echo $bandwidthinfo;
- $emptyinfocounter = 1;
- if ($bandwidthinfo != "") {
- $infoarray = explode (":", $bandwidthinfo);
- if (($filter == "all") ||
- (($filter == "local") && (ip_in_subnet($infoarray[0], $intsubnet))) ||
- (($filter == "remote") && (!ip_in_subnet($infoarray[0], $intsubnet)))) {
- if ($hostipformat == "") {
- // pass back just the raw IP address
- $addrdata = $infoarray[0];
- } else {
- // $hostipformat is one of "hostname", "descr" or "fqdn" - we want a text representation if we can get it.
- if ($iplookup[$infoarray[0]] != "") {
- // We have a local entry, so use it.
- $addrdata = $iplookup[$infoarray[0]];
- } else {
- // Try to reverse lookup the IP address.
- $addrdata = gethostbyaddr($infoarray[0]);
- if ($addrdata != $infoarray[0]) {
- // Reverse lookup returned something other than the IP address (FQDN, we hope!)
- if ($hostipformat != "fqdn") {
- // The user does not want the whole FQDN, so only pass back the first part of the name.
- $name_array = explode(".", $addrdata);
- $addrdata = $name_array[0];
- }
- }
- }
- }
- //print host information;
- echo $addrdata . ";" . $infoarray[1] . ";" . $infoarray[2] . "|";
-
- //mark that we collected information
- $someinfo = true;
- }
- }
-}
-unset($bandwidthinfo, $_grb);
-unset($listedIPs);
-
-//no bandwidth usage found
-if ($someinfo == false) {
- echo gettext("no info");
-}
-?>
diff --git a/usr/local/www/carp_status.php b/usr/local/www/carp_status.php
deleted file mode 100644
index 5f863e2..0000000
--- a/usr/local/www/carp_status.php
+++ /dev/null
@@ -1,252 +0,0 @@
-<?php
-/*
- carp_status.php
- Copyright (C) 2004 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-status-carp
-##|*NAME=Status: CARP page
-##|*DESCR=Allow access to the 'Status: CARP' page.
-##|*MATCH=carp_status.php*
-##|-PRIV
-
-/*
- pfSense_MODULE: carp
-*/
-
-require_once("guiconfig.inc");
-require_once("globals.inc");
-
-function gentitle_pkg($pgname) {
- global $config;
- return $config['system']['hostname'] . "." . $config['system']['domain'] . " - " . $pgname;
-}
-
-unset($interface_arr_cache);
-unset($carp_interface_count_cache);
-unset($interface_ip_arr_cache);
-
-$status = get_carp_status();
-$status = intval($status);
-if ($_POST['carp_maintenancemode'] <> "") {
- interfaces_carp_set_maintenancemode(!isset($config["virtualip_carp_maintenancemode"]));
-}
-if ($_POST['disablecarp'] <> "") {
- if ($status > 0) {
- set_single_sysctl('net.inet.carp.allow', '0');
- if (is_array($config['virtualip']['vip'])) {
- $viparr = &$config['virtualip']['vip'];
- $found_dhcpdv6 = false;
- foreach ($viparr as $vip) {
- $carp_iface = "{$vip['interface']}_vip{$vip['vhid']}";
- switch ($vip['mode']) {
- case "carp":
- interface_vip_bring_down($vip);
- interface_ipalias_cleanup($carp_iface);
-
- /*
- * Reconfigure radvd when necessary
- * XXX: Is it the best way to do it?
- */
- if (isset($config['dhcpdv6']) && is_array($config['dhcpdv6'])) {
- foreach ($config['dhcpdv6'] as $dhcpv6if => $dhcpv6ifconf) {
- if ($dhcpv6ifconf['rainterface'] != $carp_iface) {
- continue;
- }
-
- services_radvd_configure();
- break;
- }
- }
-
- sleep(1);
- break;
- }
- }
- }
- $savemsg = sprintf(gettext("%s IPs have been disabled. Please note that disabling does not survive a reboot and some configuration changes will re-enable."), $carp_counter);
- $status = 0;
- } else {
- $savemsg = gettext("CARP has been enabled.");
- if (is_array($config['virtualip']['vip'])) {
- $viparr = &$config['virtualip']['vip'];
- foreach ($viparr as $vip) {
- switch ($vip['mode']) {
- case "carp":
- interface_carp_configure($vip);
- sleep(1);
- break;
- case 'ipalias':
- if (strpos($vip['interface'], '_vip')) {
- interface_ipalias_configure($vip);
- }
- break;
- }
- }
- }
- interfaces_sync_setup();
- set_single_sysctl('net.inet.carp.allow', '1');
- $status = 1;
- }
-}
-
-$carp_detected_problems = get_single_sysctl("net.inet.carp.demotion");
-
-if (!empty($_POST['resetdemotion'])) {
- set_single_sysctl("net.inet.carp.demotion", "-{$carp_detected_problems}");
- sleep(1);
- $carp_detected_problems = get_single_sysctl("net.inet.carp.demotion");
-}
-
-$pgtitle = array(gettext("Status"), gettext("CARP"));
-$shortcut_section = "carp";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="carp_status.php" method="post">
-<?php if ($savemsg) print_info_box($savemsg); ?>
-
-<?PHP if ($carp_detected_problems > 0) {
- print_info_box(
- gettext("CARP has detected a problem and this unit has been demoted to BACKUP status.") . "<br/>" .
- gettext("Check the link status on all interfaces with configured CARP VIPs.") . "<br/>" .
- gettext("Search the") .
- " <a href=\"/diag_logs.php?filtertext=carp%3A+demoted+by\">" .
- gettext("system log") .
- "</a> " .
- gettext("for CARP demotion-related events.") . "<br/>" .
- "<input type=\"submit\" name=\"resetdemotion\" id=\"resetdemotion\" value=\"" .
- gettext("Reset CARP Demotion Status") .
- "\" />"
- );
-
-} ?>
-
-<div id="mainlevel">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="carp status">
- <tr>
- <td>
-<?php
- $carpcount = 0;
- if (is_array($config['virtualip']['vip'])) {
- foreach ($config['virtualip']['vip'] as $carp) {
- if ($carp['mode'] == "carp") {
- $carpcount++;
- break;
- }
- }
- }
- if ($carpcount > 0) {
- if ($status > 0) {
- $carp_enabled = true;
- echo "<input type=\"submit\" name=\"disablecarp\" id=\"disablecarp\" value=\"" . gettext("Temporarily Disable CARP") . "\" />";
- } else {
- $carp_enabled = false;
- echo "<input type=\"submit\" name=\"disablecarp\" id=\"disablecarp\" value=\"" . gettext("Enable CARP") . "\" />";
- }
- if (isset($config["virtualip_carp_maintenancemode"])) {
- echo "<input type=\"submit\" name=\"carp_maintenancemode\" id=\"carp_maintenancemode\" value=\"" . gettext("Leave Persistent CARP Maintenance Mode") . "\" />";
- } else {
- echo "<input type=\"submit\" name=\"carp_maintenancemode\" id=\"carp_maintenancemode\" value=\"" . gettext("Enter Persistent CARP Maintenance Mode") . "\" />";
- }
- }
-?>
-
- <br/><br/>
- <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0" summary="results">
- <tr>
- <td class="listhdrr" align="center"><?=gettext("CARP Interface"); ?></td>
- <td class="listhdrr" align="center"><?=gettext("Virtual IP"); ?></td>
- <td class="listhdrr" align="center"><?=gettext("Status"); ?></td>
- </tr>
-<?php
- if ($carpcount == 0) {
- echo "</table></td></tr></table></div></form><center><br />" . gettext("Could not locate any defined CARP interfaces.");
- echo "</center>";
-
- include("fend.inc");
- echo "</body></html>";
- return;
- }
- if (is_array($config['virtualip']['vip'])) {
- foreach ($config['virtualip']['vip'] as $carp) {
- if ($carp['mode'] != "carp") {
- continue;
- }
- $ipaddress = $carp['subnet'];
- $vhid = $carp['vhid'];
- $status = get_carp_interface_status("_vip{$carp['uniqid']}");
- echo "<tr>";
- $align = "style=\"vertical-align:middle\"";
- if ($carp_enabled == false) {
- $icon = "<img {$align} src=\"/themes/".$g['theme']."/images/icons/icon_block.gif\" alt=\"disabled\" />";
- $status = "DISABLED";
- } else {
- if ($status == "MASTER") {
- $icon = "<img {$align} src=\"/themes/".$g['theme']."/images/icons/icon_pass.gif\" alt=\"master\" />";
- } else if ($status == "BACKUP") {
- $icon = "<img {$align} src=\"/themes/".$g['theme']."/images/icons/icon_pass_d.gif\" alt=\"backup\" />";
- } else if ($status == "INIT") {
- $icon = "<img {$align} src=\"/themes/".$g['theme']."/images/icons/icon_log.gif\" alt=\"init\" />";
- } else {
- $icon = "";
- }
- }
- echo "<td class=\"listlr\" align=\"center\">" . convert_friendly_interface_to_friendly_descr($carp['interface']) . "@{$vhid} &nbsp;</td>";
- echo "<td class=\"listlr\" align=\"center\">" . $ipaddress . "&nbsp;</td>";
- echo "<td class=\"listlr\" align=\"center\">{$icon}&nbsp;&nbsp;" . $status . "&nbsp;</td>";
- echo "</tr>";
- }
- }
-?>
- </table>
- </td>
- </tr>
- </table>
-</div>
-</form>
-
-<p class="vexpl">
-<span class="red"><strong><?=gettext("Note"); ?>:</strong></span>
-<br />
-<?=gettext("You can configure high availability sync settings"); ?> <a href="system_hasync.php"><?=gettext("here"); ?></a>.
-</p>
-
-<?php
- echo "<br />" . gettext("pfSync nodes") . ":<br />";
- echo "<pre>";
- system("/sbin/pfctl -vvss | /usr/bin/grep creator | /usr/bin/cut -d\" \" -f7 | /usr/bin/sort -u");
- echo "</pre>";
-?>
-
-<?php include("fend.inc"); ?>
-
-</body>
-</html>
diff --git a/usr/local/www/classes/maintable.inc b/usr/local/www/classes/maintable.inc
deleted file mode 100644
index 1478de8..0000000
--- a/usr/local/www/classes/maintable.inc
+++ /dev/null
@@ -1,206 +0,0 @@
-<?php
-/* $Id$ */
-/*
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2008 Bill Marquette <bill.marquette@gmail.com>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: guiutils
-*/
-
-
-class MainTable {
- private $headers = array();
-// private $columns = array();
- private $columns = 0;
- private $rows = 0;
- private $content = array();
- private $edit_uri = '';
- private $my_uri = '';
- private $buttons = array('move' => false, 'edit' => false, 'del' => false, 'dup' => false);
-
- function add_column($header, $cname, $width) {
-// $this->column[] = array('header' => $header, 'cname' => $cname, 'width' => $width)
- $this->headers[] = $header;
- $this->cname[] = $cname;
- $this->width[] = $width;
- $this->columns++;
- }
-
- function add_content_array($rows) {
- foreach ($rows as $row) {
- $this->content[] = $row;
- $this->rows++;
- }
- }
- function add_button($name) {
- if (isset($this->buttons[$name])) {
- $this->buttons[$name] = true;
- }
- }
- function edit_uri($uri) {
- $this->edit_uri = $uri;
- }
-
- function my_uri($uri) {
- $this->my_uri = $uri;
- }
-
- function display() {
- echo "<!-- begin content table -->\n";
- echo "<table class=\"tabcont\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"display\">\n";
- echo " <!-- begin content table header -->\n";
- echo $this->display_header();
- echo " <!-- end content table header -->\n";
- echo " <!-- begin content table rows -->\n";
- echo $this->display_rows();
- echo " <!-- end content table rows -->\n";
- echo " <!-- begin content table footer -->\n";
- echo $this->display_footer();
- echo " <!-- end content table footer -->\n";
- echo "</table>\n";
- echo "<!-- end content table -->\n";
- }
-
- private function display_header() {
- global $g;
- echo "<tr>\n";
- for ($col = 0; $col < $this->columns - 1; $col++) {
- echo " <td width=\"{$this->width[$col]}%\" class=\"listhdrr\">{$this->headers[$col]}</td>\n";
- }
- echo " <td width=\"{$this->width[$this->columns - 1]}%\" class=\"listhdr\">{$this->headers[$this->columns - 1]}</td>\n";
- echo " <td width=\"10%\" class=\"list\">\n";
- echo " <table border=\"0\" cellspacing=\"0\" cellpadding=\"1\" summary=\"display header\">\n";
- echo " <tr>\n";
- echo " <td width=\"17\"></td>\n";
- echo " <td valign=\"middle\"><a href=\"{$this->edit_uri}\"><img src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" width=\"17\" height=\"17\" border=\"0\" alt=\"plus\" /></a></td>\n";
- echo " </tr>\n";
- echo " </table>\n";
- echo " </td>\n";
- echo "</tr>\n";
-
- }
- private function display_rows() {
- global $g;
- $cur_row = 0;
- $encode_cols = array("name", "descr");
- foreach ($this->content as $row) {
- echo "<tr>\n";
- for ($col = 0; $col < $this->columns - 1; $col++) {
- if ($col == 0) {
- $cl = 'listlr';
- } else {
- $cl = 'listr';
- }
- echo " <td class=\"{$cl}\" onclick=\"fr_toggle({$cur_row})\" id=\"frd{$cur_row}\" ondblclick=\"document.location='{$this->edit_uri}?id={$cur_row}'\">\n";
- if (is_array($row[$this->cname[$col]])) {
- foreach ($row[$this->cname[$col]] as $data) {
- if (in_array($this->cname[$col], $encode_cols)) {
- $data = htmlspecialchars($data);
- }
- echo " {$data}<br />\n";
- }
- } else {
- if (in_array($this->cname[$col], $encode_cols)) {
- $row[$this->cname[$col]] = htmlspecialchars($row[$this->cname[$col]]);
- }
- echo " " . $row[$this->cname[$col]] . "\n";
- }
- echo " </td>\n";
- }
- echo " <td class=\"listbg\" onclick=\"fr_toggle({$cur_row})\" id=\"frd{$cur_row}\" ondblclick=\"document.location='{$this->edit_uri}?id={$cur_row}'\">\n";
- echo " <font color=\"#FFFFFF\">" . htmlspecialchars($row[$this->cname[$this->columns - 1]]) . "</font>\n";
- echo " </td>\n";
- echo " <td class=\"list nowrap\">\n";
- $this->display_buttons($cur_row);
- echo " </td>\n";
- echo "</tr>\n";
-
- $cur_row++;
- }
- }
- private function display_footer() {
- global $g;
- echo "<tr>\n";
- echo " <td class=\"list\" colspan=\"{$this->columns}\"></td>\n";
- echo " <td class=\"list\">\n";
- echo " <table border=\"0\" cellspacing=\"0\" cellpadding=\"1\" summary=\"display footer\">\n";
- echo " <tr>\n";
- echo " <td width=\"17\"></td>\n";
- echo " <td valign=\"middle\"><a href=\"{$this->edit_uri}\"><img src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" width=\"17\" height=\"17\" border=\"0\" alt=\"plus\" /></a></td>\n";
- echo " </tr>\n";
- echo " </table>\n";
- echo " </td>\n";
- echo "</tr>\n";
- }
- private function display_buttons($row) {
- echo " <table border=\"0\" cellspacing=\"0\" cellpadding=\"1\" summary=\"display buttons\">\n";
- echo " <tr>\n";
- if ($this->buttons['move']) {
- echo $this->display_button('move', $row);
- }
- if ($this->buttons['edit']) {
- echo $this->display_button('edit', $row);
- }
- echo " </tr>\n";
- echo " <tr>\n";
- if ($this->buttons['del']) {
- echo $this->display_button('del', $row);
- }
- if ($this->buttons['dup']) {
- echo $this->display_button('dup', $row);
- }
- echo " </tr>\n";
- echo " </table>\n";
- }
- private function display_button($button, $row) {
- global $g;
- echo "<td valign=\"middle\">";
- switch ($button) {
- case "move": {
- echo "<input name=\"move_{$row}\" type=\"image\" src=\"./themes/{$g['theme']}/images/icons/icon_left.gif\" width=\"17\" height=\"17\" title=\"Move selected entries before this entry\" onmouseover=\"fr_insline({$row}, true)\" onmouseout=\"fr_insline({$row}, false)\" />";
- break;
- }
- case "edit": {
- echo "<a href=\"{$this->edit_uri}?id={$row}\"><img src=\"/themes/{$g['theme']}/images/icons/icon_e.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"Edit entry\" alt=\"edit\" /></a>";
- break;
- }
- case "del": {
- echo "<a href=\"{$this->my_uri}?act=del&amp;id={$row}\" onclick=\"return confirm('Do you really want to delete this entry?')\"><img src=\"/themes/{$g['theme']}/images/icons/icon_x.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"Delete entry\" alt=\"delete\" /></a>";
- break;
- }
- case "dup": {
- echo "<a href=\"{$this->edit_uri}?act=dup&amp;id={$row}\"><img src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"Duplicate entry\" alt=\"duplicate\" /></a>";
- break;
- }
- }
- echo "</td>";
- }
-
-}
-
-?> \ No newline at end of file
diff --git a/usr/local/www/code-syntax-highlighter/SyntaxHighlighter.css b/usr/local/www/code-syntax-highlighter/SyntaxHighlighter.css
deleted file mode 100644
index 413a034..0000000
--- a/usr/local/www/code-syntax-highlighter/SyntaxHighlighter.css
+++ /dev/null
@@ -1,166 +0,0 @@
-
-/* Main style for the table */
-
-.dp-highlighter {
- width: 100%;
- overflow: auto;
- line-height: 100% !important;
- margin: 18px 0px 18px 0px;
-}
-
-.dp-highlighter table {
- width: 100%;
- margin: 2px 0px 2px 0px;
- border-collapse: collapse;
- border-bottom: 2px solid #eee;
- background-color: #fff;
-}
-
-.dp-highlighter td
-{
- font-family: Courier New;
- font-size: 11px;
-}
-
-/* Styles for the tools */
-
-.dp-highlighter .tools-corner {
- background-color: #eee;
- font-size: 9px;
-}
-
-.dp-highlighter .tools {
- background-color: #eee;
- padding: 3px 8px 3px 0px;
- border-bottom: 1px solid gray;
- font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif;
- color: silver;
-}
-
-.dp-highlighter .tools a {
- font-size: 9px;
- color: gray;
- text-decoration: none;
-}
-
-.dp-highlighter .tools a:hover {
- color: red;
- text-decoration: underline;
-}
-
-/* Gutter with line number */
-
-.dp-highlighter .gutter {
- padding-right: 5px;
- padding-left: 10px;
- width: 5px;
- background-color: #eee;
- border-right: 1px solid gray;
- color: gray;
- text-align: right;
- vertical-align: top;
-}
-
-/* Single line style */
-
-.dp-highlighter .line {
- padding-left: 10px;
- border-bottom: 1px solid #F7F7F7;
- white-space:nowrap;
-}
-
-/* About dialog styles */
-
-.dp-about {
- background-color: #fff;
- margin: 0px;
-}
-
-.dp-about table {
- width: 100%;
- height: 100%;
- font-size: 11px;
- font-family: Tahoma, Verdana, Arial, sans-serif !important;
-}
-
-.dp-about td {
- padding: 10px;
- vertical-align: top;
-}
-
-.dp-about .copy {
- border-bottom: 1px solid #ACA899;
- height: 95%;
-}
-
-.dp-about .title {
- color: red;
- font-weight: bold;
-}
-
-.dp-about .para {
- margin-bottom: 4px;
-}
-
-.dp-about .footer {
- background-color: #ECEADB;
- border-top: 1px solid #fff;
- text-align: right;
-}
-
-.dp-about .close {
- font-size: 11px;
- font-family: Tahoma, Verdana, Arial, sans-serif !important;
- background-color: #ECEADB;
- width: 60px;
- height: 22px;
-}
-
-/* Language specific styles */
-
-.dp-c {}
-.dp-c .comment { color: green; }
-.dp-c .string { color: blue; }
-.dp-c .preprocessor { color: gray; }
-.dp-c .keyword { color: blue; }
-.dp-c .vars { color: #d00; }
-
-.dp-vb {}
-.dp-vb .comment { color: green; }
-.dp-vb .string { color: blue; }
-.dp-vb .preprocessor { color: gray; }
-.dp-vb .keyword { color: blue; }
-
-.dp-sql {}
-.dp-sql .comment { color: green; }
-.dp-sql .string { color: red; }
-.dp-sql .keyword { color: blue; }
-.dp-sql .func { color: #ff1493; }
-.dp-sql .op { color: #808080; }
-
-.dp-xml {}
-.dp-xml .cdata { color: #ff1493; }
-.dp-xml .comments { color: green; }
-.dp-xml .tag { color: blue; }
-.dp-xml .tag-name { color: black; font-weight: bold; }
-.dp-xml .attribute { color: red; }
-.dp-xml .attribute-value { color: blue; }
-
-.dp-delphi {}
-.dp-delphi .comment { color: #008200; font-style: italic; }
-.dp-delphi .string { color: blue; }
-.dp-delphi .number { color: blue; }
-.dp-delphi .directive { color: #008284; }
-.dp-delphi .keyword { font-weight: bold; color: navy; }
-.dp-delphi .vars { color: #000; }
-
-.dp-py {}
-.dp-py .comment { color: green; }
-.dp-py .string { color: red; }
-.dp-py .docstring { color: brown; }
-.dp-py .keyword { color: blue; font-weight: bold;}
-.dp-py .builtins { color: #ff1493; }
-.dp-py .magicmethods { color: #808080; }
-.dp-py .exceptions { color: brown; }
-.dp-py .types { color: brown; font-style: italic; }
-.dp-py .commonlibs { color: #8A2BE2; font-style: italic; }
diff --git a/usr/local/www/code-syntax-highlighter/gpl.txt b/usr/local/www/code-syntax-highlighter/gpl.txt
deleted file mode 100644
index 5b6e7c6..0000000
--- a/usr/local/www/code-syntax-highlighter/gpl.txt
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/usr/local/www/code-syntax-highlighter/shBrushCSharp.js b/usr/local/www/code-syntax-highlighter/shBrushCSharp.js
deleted file mode 100644
index 5743b93..0000000
--- a/usr/local/www/code-syntax-highlighter/shBrushCSharp.js
+++ /dev/null
@@ -1,30 +0,0 @@
-dp.sh.Brushes.CSharp = function()
-{
- var keywords = 'abstract as base bool break byte case catch char checked class const ' +
- 'continue decimal default delegate do double else enum event explicit ' +
- 'extern false finally fixed float for foreach get goto if implicit in int ' +
- 'interface internal is lock long namespace new null object operator out ' +
- 'override params private protected public readonly ref return sbyte sealed set ' +
- 'short sizeof stackalloc static string struct switch this throw true try ' +
- 'typeof uint ulong unchecked unsafe ushort using virtual void while';
-
- this.regexList = [
- // There's a slight problem with matching single line comments and figuring out
- // a difference between // and ///. Using lookahead and lookbehind solves the
- // problem, unfortunately JavaScript doesn't support lookbehind. So I'm at a
- // loss how to translate that regular expression to JavaScript compatible one.
-// { regex: new RegExp('(?<!/)//(?!/).*$|(?<!/)////(?!/).*$|/\\*[^\\*]*(.)*?\\*/', 'gm'), css: 'comment' }, // one line comments starting with anything BUT '///' and multiline comments
-// { regex: new RegExp('(?<!/)///(?!/).*$', 'gm'), css: 'comments' }, // XML comments starting with ///
-
- { regex: new RegExp('//.*$', 'gm'), css: 'comment' }, // one line comments
- { regex: new RegExp('/\\*[\\s\\S]*?\\*/', 'g'), css: 'comment' }, // multiline comments
- { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // strings
- { regex: new RegExp('^\\s*#.*', 'gm'), css: 'preprocessor' }, // preprocessor tags like #region and #endregion
- { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // c# keyword
- ];
-
- this.CssClass = 'dp-c';
-}
-
-dp.sh.Brushes.CSharp.prototype = new dp.sh.Highlighter();
-dp.sh.Brushes.CSharp.Aliases = ['c#', 'c-sharp', 'csharp'];
diff --git a/usr/local/www/code-syntax-highlighter/shBrushCpp.js b/usr/local/www/code-syntax-highlighter/shBrushCpp.js
deleted file mode 100644
index 09570d5..0000000
--- a/usr/local/www/code-syntax-highlighter/shBrushCpp.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * Code Syntax Highlighter for C++(Windows Platform).
- * Version 0.0.1
- * Copyright (C) 2006 Shin, YoungJin.
- * http://www.jiniya.net/lecture/techbox/test.html
- *
- * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General
- * Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
- * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to
- * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-dp.sh.Brushes.Cpp = function()
-{
- var datatypes =
- 'ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR ' +
- 'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH ' +
- 'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP ' +
- 'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY ' +
- 'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT ' +
- 'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE ' +
- 'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF ' +
- 'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR ' +
- 'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR ' +
- 'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT ' +
- 'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 ' +
- 'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR ' +
- 'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 ' +
- 'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT ' +
- 'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG ' +
- 'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM ' +
- 'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t ' +
- 'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS ' +
- 'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t ' +
- '__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t ' +
- 'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler ' +
- 'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function ' +
- 'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf ' +
- 'va_list wchar_t wctrans_t wctype_t wint_t signed';
-
- var keywords =
- 'break case catch class const __finally __exception __try ' +
- 'const_cast continue private public protected __declspec ' +
- 'default delete deprecated dllexport dllimport do dynamic_cast ' +
- 'else enum explicit extern if for friend goto inline ' +
- 'mutable naked namespace new noinline noreturn nothrow ' +
- 'register reinterpret_cast return selectany ' +
- 'sizeof static static_cast struct switch template this ' +
- 'thread throw true false try typedef typeid typename union ' +
- 'using uuid virtual void volatile whcar_t while';
-
- this.regexList = [
- { regex: dp.sh.RegexLib.SingleLineCComments, css: 'comment' }, // one line comments
- { regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments
- { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // strings
- { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // strings
- { regex: new RegExp('^ *#.*', 'gm'), css: 'preprocessor' },
- { regex: new RegExp(this.GetKeywords(datatypes), 'gm'), css: 'datatypes' },
- { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' }
- ];
-
- this.CssClass = 'dp-cpp';
-}
-
-dp.sh.Brushes.Cpp.prototype = new dp.sh.Highlighter();
-dp.sh.Brushes.Cpp.Aliases = ['cpp', 'c', 'c++'];
diff --git a/usr/local/www/code-syntax-highlighter/shBrushCss.js b/usr/local/www/code-syntax-highlighter/shBrushCss.js
deleted file mode 100644
index 6d3f0de..0000000
--- a/usr/local/www/code-syntax-highlighter/shBrushCss.js
+++ /dev/null
@@ -1,50 +0,0 @@
-dp.sh.Brushes.CSS = function()
-{
- var keywords = 'ascent azimuth background-attachment background-color background-image background-position ' +
- 'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +
- 'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +
- 'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +
- 'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +
- 'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +
- 'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +
- 'height letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +
- 'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +
- 'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +
- 'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +
- 'quotes richness right size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +
- 'table-layout text-align text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +
- 'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';
-
- var values = 'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+
- 'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+
- 'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+
- 'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+
- 'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+
- 'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+
- 'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+
- 'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+
- 'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+
- 'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+
- 'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+
- 'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+
- 'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+
- 'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';
-
- var fonts = '[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif';
-
- this.regexList = [
- { regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments
- { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // double quoted strings
- { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // single quoted strings
- { regex: new RegExp('\\#[a-zA-Z0-9]{3,6}', 'g'), css: 'colors' }, // html colors
- { regex: new RegExp('(\\d+)(px|pt|\:)', 'g'), css: 'string' }, // size specifications
- { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' }, // keywords
- { regex: new RegExp(this.GetKeywords(values), 'g'), css: 'string' }, // values
- { regex: new RegExp(this.GetKeywords(fonts), 'g'), css: 'string' } // fonts
- ];
-
- this.CssClass = 'dp-css';
-}
-
-dp.sh.Brushes.CSS.prototype = new dp.sh.Highlighter();
-dp.sh.Brushes.CSS.Aliases = ['css'];
diff --git a/usr/local/www/code-syntax-highlighter/shBrushDelphi.js b/usr/local/www/code-syntax-highlighter/shBrushDelphi.js
deleted file mode 100644
index efb0601..0000000
--- a/usr/local/www/code-syntax-highlighter/shBrushDelphi.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Delphi brush is contributed by Eddie Shipman */
-dp.sh.Brushes.Delphi = function()
-{
- var keywords = 'abs addr and ansichar ansistring array as asm begin boolean byte cardinal ' +
- 'case char class comp const constructor currency destructor div do double ' +
- 'downto else end except exports extended false file finalization finally ' +
- 'for function goto if implementation in inherited int64 initialization ' +
- 'integer interface is label library longint longword mod nil not object ' +
- 'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended ' +
- 'pint64 pointer private procedure program property pshortstring pstring ' +
- 'pvariant pwidechar pwidestring protected public published raise real real48 ' +
- 'record repeat set shl shortint shortstring shr single smallint string then ' +
- 'threadvar to true try type unit until uses val var varirnt while widechar ' +
- 'widestring with word write writeln xor';
-
- this.regexList = [
- { regex: new RegExp('\\(\\*[\\s\\S]*?\\*\\)', 'gm'), css: 'comment' }, // multiline comments (* *)
- { regex: new RegExp('{(?!\\$)[\\s\\S]*?}', 'gm'), css: 'comment' }, // multiline comments { }
- { regex: new RegExp('//.*$', 'gm'), css: 'comment' }, // one line
- { regex: new RegExp('\'(?:\\.|[^\\\'\'])*\'', 'g'), css: 'string' }, // strings
- { regex: new RegExp('\\{\\$[a-zA-Z]+ .+\\}', 'g'), css: 'directive' }, // Compiler Directives and Region tags
- { regex: new RegExp('\\b[\\d\\.]+\\b', 'g'), css: 'number' }, // numbers 12345
- { regex: new RegExp('\\$[a-zA-Z0-9]+\\b', 'g'), css: 'number' }, // numbers $F5D3
- { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keyword
- ];
-
- this.CssClass = 'dp-delphi';
-}
-
-dp.sh.Brushes.Delphi.prototype = new dp.sh.Highlighter();
-dp.sh.Brushes.Delphi.Aliases = ['delphi', 'pascal'];
diff --git a/usr/local/www/code-syntax-highlighter/shBrushJScript.js b/usr/local/www/code-syntax-highlighter/shBrushJScript.js
deleted file mode 100644
index c68a2a5..0000000
--- a/usr/local/www/code-syntax-highlighter/shBrushJScript.js
+++ /dev/null
@@ -1,22 +0,0 @@
-dp.sh.Brushes.JScript = function()
-{
- var keywords = 'abstract boolean break byte case catch char class const continue debugger ' +
- 'default delete do double else enum export extends false final finally float ' +
- 'for function goto if implements import in instanceof int interface long native ' +
- 'new null package private protected public return short static super switch ' +
- 'synchronized this throw throws transient true try typeof var void volatile while with';
-
- this.regexList = [
- { regex: new RegExp('//.*$', 'gm'), css: 'comment' }, // one line comments
- { regex: new RegExp('/\\*[\\s\\S]*?\\*/', 'g'), css: 'comment' }, // multiline comments
- { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // double quoted strings
- { regex: new RegExp('\'(?:\\.|[^\\\'\'])*\'', 'g'), css: 'string' }, // single quoted strings
- { regex: new RegExp('^\\s*#.*', 'gm'), css: 'preprocessor' }, // preprocessor tags like #region and #endregion
- { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keywords
- ];
-
- this.CssClass = 'dp-c';
-}
-
-dp.sh.Brushes.JScript.prototype = new dp.sh.Highlighter();
-dp.sh.Brushes.JScript.Aliases = ['js', 'jscript', 'javascript'];
diff --git a/usr/local/www/code-syntax-highlighter/shBrushJava.js b/usr/local/www/code-syntax-highlighter/shBrushJava.js
deleted file mode 100644
index f18aaad..0000000
--- a/usr/local/www/code-syntax-highlighter/shBrushJava.js
+++ /dev/null
@@ -1,26 +0,0 @@
-dp.sh.Brushes.Java = function()
-{
- var keywords = 'abstract assert boolean break byte case catch char class const ' +
- 'continue default do double else enum extends ' +
- 'false final finally float for goto if implements import ' +
- 'instanceof int interface long native new null ' +
- 'package private protected public return ' +
- 'short static strictfp super switch synchronized this throw throws true ' +
- 'transient try void volatile while';
-
- this.regexList = [
- { regex: dp.sh.RegexLib.SingleLineCComments, css: 'comment' }, // one line comments
- { regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments
- { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // strings
- { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // strings
- { regex: new RegExp('\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b', 'gi'), css: 'number' }, // numbers
- { regex: new RegExp('(?!\\@interface\\b)\\@[\\$\\w]+\\b', 'g'), css: 'annotation' }, // annotation @anno
- { regex: new RegExp('\\@interface\\b', 'g'), css: 'keyword' }, // @interface keyword
- { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // java keyword
- ];
-
- this.CssClass = 'dp-j';
-}
-
-dp.sh.Brushes.Java.prototype = new dp.sh.Highlighter();
-dp.sh.Brushes.Java.Aliases = ['java'];
diff --git a/usr/local/www/code-syntax-highlighter/shBrushPhp.js b/usr/local/www/code-syntax-highlighter/shBrushPhp.js
deleted file mode 100644
index bcc3e3f..0000000
--- a/usr/local/www/code-syntax-highlighter/shBrushPhp.js
+++ /dev/null
@@ -1,23 +0,0 @@
-dp.sh.Brushes.Php = function()
-{
- var keywords = 'and or xor __FILE__ __LINE__ array as break case ' +
- 'cfunction class const continue declare default die do echo else ' +
- 'elseif empty enddeclare endfor endforeach endif endswitch endwhile eval exit ' +
- 'extends for foreach function global if include include_once isset list ' +
- 'new old_function print require require_once return static switch unset use ' +
- 'var while __FUNCTION__ __CLASS__';
-
- this.regexList = [
- { regex: new RegExp('//.*$', 'gm'), css: 'comment' }, // one line comments
- { regex: new RegExp('/\\*[\\s\\S]*?\\*/', 'g'), css: 'comment' }, // multiline comments
- { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // double quoted strings
- { regex: new RegExp('\'(?:\\.|[^\\\'\'])*\'', 'g'), css: 'string' }, // single quoted strings
- { regex: new RegExp('\\$\\w+', 'g'), css: 'vars' }, // variables
- { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keyword
- ];
-
- this.CssClass = 'dp-c';
-}
-
-dp.sh.Brushes.Php.prototype = new dp.sh.Highlighter();
-dp.sh.Brushes.Php.Aliases = ['php'];
diff --git a/usr/local/www/code-syntax-highlighter/shBrushPython.js b/usr/local/www/code-syntax-highlighter/shBrushPython.js
deleted file mode 100644
index 96d2196..0000000
--- a/usr/local/www/code-syntax-highlighter/shBrushPython.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Python 2.3 syntax contributed by Gheorghe Milas */
-dp.sh.Brushes.Python = function()
-{
- var keywords = 'and assert break class continue def del elif else except exec ' +
- 'finally for from global if import in is lambda not or object pass print ' +
- 'raise return try yield while';
-
- var builtins = 'self __builtin__ __dict__ __future__ __methods__ __members__ __author__ __email__ __version__' +
- '__class__ __bases__ __import__ __main__ __name__ __doc__ __self__ __debug__ __slots__ ' +
- 'abs append apply basestring bool buffer callable chr classmethod clear close cmp coerce compile complex ' +
- 'conjugate copy count delattr dict dir divmod enumerate Ellipsis eval execfile extend False file fileno filter float flush ' +
- 'get getattr globals has_key hasarttr hash hex id index input insert int intern isatty isinstance isubclass ' +
- 'items iter keys len list locals long map max min mode oct open ord pop pow property range ' +
- 'raw_input read readline readlines reduce reload remove repr reverse round seek setattr slice sum ' +
- 'staticmethod str super tell True truncate tuple type unichr unicode update values write writelines xrange zip';
-
- var magicmethods = '__abs__ __add__ __and__ __call__ __cmp__ __coerce__ __complex__ __concat__ __contains__ __del__ __delattr__ __delitem__ ' +
- '__delslice__ __div__ __divmod__ __float__ __getattr__ __getitem__ __getslice__ __hash__ __hex__ __eq__ __le__ __lt__ __gt__ __ge__ ' +
- '__iadd__ __isub__ __imod__ __idiv__ __ipow__ __iand__ __ior__ __ixor__ __ilshift__ __irshift__ ' +
- '__invert__ __init__ __int__ __inv__ __iter__ __len__ __long__ __lshift__ __mod__ __mul__ __new__ __neg__ __nonzero__ __oct__ __or__ ' +
- '__pos__ __pow__ __radd__ __rand__ __rcmp__ __rdiv__ __rdivmod__ __repeat__ __repr__ __rlshift__ __rmod__ __rmul__ ' +
- '__ror__ __rpow__ __rrshift__ __rshift__ __rsub__ __rxor__ __setattr__ __setitem__ __setslice__ __str__ __sub__ __xor__';
-
- var exceptions = 'Exception StandardError ArithmeticError LookupError EnvironmentError AssertionError AttributeError EOFError ' +
- 'FutureWarning IndentationError OverflowWarning PendingDeprecationWarning ReferenceError RuntimeWarning ' +
- 'SyntaxWarning TabError UnicodeDecodeError UnicodeEncodeError UnicodeTranslateError UserWarning Warning ' +
- 'IOError ImportError IndexError KeyError KeyboardInterrupt MemoryError NameError NotImplementedError OSError ' +
- 'RuntimeError StopIteration SyntaxError SystemError SystemExit TypeError UnboundLocalError UnicodeError ValueError ' +
- 'FloatingPointError OverflowError WindowsError ZeroDivisionError';
-
- var types = 'NoneType TypeType IntType LongType FloatType ComplexType StringType UnicodeType BufferType TupleType ListType ' +
- 'DictType FunctionType LambdaType CodeType ClassType UnboundMethodType InstanceType MethodType BuiltinFunctionType BuiltinMethodType ' +
- 'ModuleType FileType XRangeType TracebackType FrameType SliceType EllipsisType';
-
- var commonlibs = 'anydbm array asynchat asyncore AST base64 binascii binhex bisect bsddb buildtools bz2 ' +
- 'BaseHTTPServer Bastion calendar cgi cmath cmd codecs codeop commands compiler copy copy_reg ' +
- 'cPickle crypt cStringIO csv curses Carbon CGIHTTPServer ConfigParser Cookie datetime dbhash ' +
- 'dbm difflib dircache distutils doctest DocXMLRPCServer email encodings errno exceptions fcntl ' +
- 'filecmp fileinput ftplib gc gdbm getopt getpass glob gopherlib gzip heapq htmlentitydefs ' +
- 'htmllib httplib HTMLParser imageop imaplib imgfile imghdr imp inspect itertools jpeg keyword ' +
- 'linecache locale logging mailbox mailcap marshal math md5 mhlib mimetools mimetypes mimify mmap ' +
- 'mpz multifile mutex MimeWriter netrc new nis nntplib nsremote operator optparse os parser pickle pipes ' +
- 'popen2 poplib posix posixfile pprint preferences profile pstats pwd pydoc pythonprefs quietconsole ' +
- 'quopri Queue random re readline resource rexec rfc822 rgbimg sched select sets sgmllib sha shelve shutil ' +
- 'signal site smtplib socket stat statcache string struct symbol sys syslog SimpleHTTPServer ' +
- 'SimpleXMLRPCServer SocketServer StringIO tabnanny tarfile telnetlib tempfile termios textwrap ' +
- 'thread threading time timeit token tokenize traceback tty types Tkinter unicodedata unittest ' +
- 'urllib urllib2 urlparse user UserDict UserList UserString warnings weakref webbrowser whichdb ' +
- 'xml xmllib xmlrpclib xreadlines zipfile zlib';
-
- this.regexList = [
- { regex: new RegExp('#.*$', 'gm'), css: 'comment' }, // comments
- { regex: new RegExp('^\\s*"""(.|\n)*?"""\\s*$', 'gm'), css: 'docstring' }, // documentation string "
- { regex: new RegExp('^\\s*\'\'\'(.|\n)*?\'\'\'\\s*$', 'gm'), css: 'docstring' }, // documentation string '
- { regex: new RegExp('"""(.|\n)*?"""', 'g'), css: 'string' }, // multi-line strings "
- { regex: new RegExp('\'\'\'(.|\n)*?\'\'\'', 'g'), css: 'string' }, // multi-line strings '
- { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // strings "
- { regex: new RegExp('\'(?:\\.|[^\\\'\'])*\'', 'g'), css: 'string' }, // strings '
- { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' }, // keywords
- { regex: new RegExp(this.GetKeywords(builtins), 'gm'), css: 'builtins' }, // builtin objects, functions, methods, magic attributes
- { regex: new RegExp(this.GetKeywords(magicmethods), 'gm'), css: 'magicmethods' }, // special methods
- { regex: new RegExp(this.GetKeywords(exceptions), 'gm'), css: 'exceptions' }, // standard exception classes
- { regex: new RegExp(this.GetKeywords(types), 'gm'), css: 'types' }, // types from types.py
- { regex: new RegExp(this.GetKeywords(commonlibs), 'gm'), css: 'commonlibs' } // common standard library modules
- ];
-
- this.CssClass = 'dp-py';
-}
-
-dp.sh.Brushes.Python.prototype = new dp.sh.Highlighter();
-dp.sh.Brushes.Python.Aliases = ['py', 'python'];
diff --git a/usr/local/www/code-syntax-highlighter/shBrushRuby.js b/usr/local/www/code-syntax-highlighter/shBrushRuby.js
deleted file mode 100644
index fdc5e34..0000000
--- a/usr/local/www/code-syntax-highlighter/shBrushRuby.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Ruby 1.8.4 syntax contributed by Erik Peterson */
-dp.sh.Brushes.Ruby = function()
-{
- var keywords = 'alias and BEGIN begin break case class def define_method defined do each else elsif ' +
- 'END end ensure false for if in module new next nil not or raise redo rescue retry return ' +
- 'self super then throw true undef unless until when while yield';
-
- var builtins = 'Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload ' +
- 'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol ' +
- 'ThreadGroup Thread Time TrueClass'
-
- this.regexList = [
- { regex: dp.sh.RegexLib.SingleLinePerlComments, css: 'comment' }, // one line comments
- { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // double quoted strings
- { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // single quoted strings
- { regex: new RegExp(':[a-z][A-Za-z0-9_]*', 'g'), css: 'symbol' }, // symbols
- { regex: new RegExp('[\\$|@|@@]\\w+', 'g'), css: 'variable' }, // $global, @instance, and @@class variables
- { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' }, // keywords
- { regex: new RegExp(this.GetKeywords(builtins), 'gm'), css: 'builtin' } // builtins
- ];
-
- this.CssClass = 'dp-rb';
-}
-
-dp.sh.Brushes.Ruby.prototype = new dp.sh.Highlighter();
-dp.sh.Brushes.Ruby.Aliases = ['ruby', 'rails'];
diff --git a/usr/local/www/code-syntax-highlighter/shBrushSql.js b/usr/local/www/code-syntax-highlighter/shBrushSql.js
deleted file mode 100644
index b52543e..0000000
--- a/usr/local/www/code-syntax-highlighter/shBrushSql.js
+++ /dev/null
@@ -1,40 +0,0 @@
-dp.sh.Brushes.Sql = function()
-{
- var funcs = 'abs avg case cast coalesce convert count current_timestamp ' +
- 'current_user day isnull left lower month nullif replace right ' +
- 'session_user space substring sum system_user upper user year';
-
- var keywords = 'absolute action add after alter as asc at authorization begin bigint ' +
- 'binary bit by cascade char character check checkpoint close collate ' +
- 'column commit committed connect connection constraint contains continue ' +
- 'create cube current current_date current_time cursor database date ' +
- 'deallocate dec decimal declare default delete desc distinct double drop ' +
- 'dynamic else end end-exec escape except exec execute false fetch first ' +
- 'float for force foreign forward free from full function global goto grant ' +
- 'group grouping having hour ignore index inner insensitive insert instead ' +
- 'int integer intersect into is isolation key last level load local max min ' +
- 'minute modify move name national nchar next no numeric of off on only ' +
- 'open option order out output partial password precision prepare primary ' +
- 'prior privileges procedure public read real references relative repeatable ' +
- 'restrict return returns revoke rollback rollup rows rule schema scroll ' +
- 'second section select sequence serializable set size smallint static ' +
- 'statistics table temp temporary then time timestamp to top transaction ' +
- 'translation trigger true truncate uncommitted union unique update values ' +
- 'varchar varying view when where with work';
-
- var operators = 'all and any between cross in join like not null or outer some';
-
- this.regexList = [
- { regex: new RegExp('--(.*)$', 'gm'), css: 'comment' }, // one line and multiline comments
- { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // strings
- { regex: new RegExp('\'(?:\\.|[^\\\'\'])*\'', 'g'), css: 'string' }, // strings
- { regex: new RegExp(this.GetKeywords(funcs), 'gmi'), css: 'func' }, // functions
- { regex: new RegExp(this.GetKeywords(operators), 'gmi'), css: 'op' }, // operators and such
- { regex: new RegExp(this.GetKeywords(keywords), 'gmi'), css: 'keyword' } // keyword
- ];
-
- this.CssClass = 'dp-sql';
-}
-
-dp.sh.Brushes.Sql.prototype = new dp.sh.Highlighter();
-dp.sh.Brushes.Sql.Aliases = ['sql'];
diff --git a/usr/local/www/code-syntax-highlighter/shBrushVb.js b/usr/local/www/code-syntax-highlighter/shBrushVb.js
deleted file mode 100644
index 197adcc..0000000
--- a/usr/local/www/code-syntax-highlighter/shBrushVb.js
+++ /dev/null
@@ -1,29 +0,0 @@
-dp.sh.Brushes.Vb = function()
-{
- var keywords = 'AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto ' +
- 'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate ' +
- 'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType ' +
- 'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each ' +
- 'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend ' +
- 'Function Get GetType GoSub GoTo Handles If Implements Imports In ' +
- 'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module ' +
- 'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing ' +
- 'NotInheritable NotOverridable Object On Option Optional Or OrElse ' +
- 'Overloads Overridable Overrides ParamArray Preserve Private Property ' +
- 'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume ' +
- 'Return Select Set Shadows Shared Short Single Static Step Stop String ' +
- 'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until ' +
- 'Variant When While With WithEvents WriteOnly Xor';
-
- this.regexList = [
- { regex: new RegExp('\'.*$', 'gm'), css: 'comment' }, // one line comments
- { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // strings
- { regex: new RegExp('^\\s*#.*', 'gm'), css: 'preprocessor' }, // preprocessor tags like #region and #endregion
- { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // c# keyword
- ];
-
- this.CssClass = 'dp-vb';
-}
-
-dp.sh.Brushes.Vb.prototype = new dp.sh.Highlighter();
-dp.sh.Brushes.Vb.Aliases = ['vb', 'vb.net'];
diff --git a/usr/local/www/code-syntax-highlighter/shBrushXml.js b/usr/local/www/code-syntax-highlighter/shBrushXml.js
deleted file mode 100644
index 0286082..0000000
--- a/usr/local/www/code-syntax-highlighter/shBrushXml.js
+++ /dev/null
@@ -1,61 +0,0 @@
-dp.sh.Brushes.Xml = function()
-{
- this.CssClass = 'dp-xml';
-}
-
-dp.sh.Brushes.Xml.prototype = new dp.sh.Highlighter();
-dp.sh.Brushes.Xml.Aliases = ['xml', 'xhtml', 'xslt', 'html', 'xhtml'];
-
-dp.sh.Brushes.Xml.prototype.ProcessRegexList = function()
-{
- function push(array, value)
- {
- array[array.length] = value;
- }
-
- /* If only there was a way to get index of a group within a match, the whole XML
- could be matched with the expression looking something like that:
-
- (<!\[CDATA\[\s*.*\s*\]\]>)
- | (<!--\s*.*\s*?-->)
- | (<)*(\w+)*\s*(\w+)\s*=\s*(".*?"|'.*?'|\w+)(/*>)*
- | (</?)(.*?)(/?>)
- */
- var index = 0;
- var match = null;
- var regex = null;
-
- // Match CDATA in the following format <![ ... [ ... ]]>
- // <\!\[[\w\s]*?\[(.|\s)*?\]\]>
- this.GetMatches(new RegExp('<\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\]>', 'gm'), 'cdata');
-
- // Match comments
- // <!--\s*.*\s*?-->
- this.GetMatches(new RegExp('<!--\\s*.*\\s*?-->', 'gm'), 'comments');
-
- // Match attributes and their values
- // (\w+)\s*=\s*(".*?"|\'.*?\'|\w+)*
- regex = new RegExp('([\\w-\.]+)\\s*=\\s*(".*?"|\'.*?\'|\\w+)*', 'gm');
- while((match = regex.exec(this.code)) != null)
- {
- push(this.matches, new dp.sh.Match(match[1], match.index, 'attribute'));
-
- // if xml is invalid and attribute has no property value, ignore it
- if(match[2] != undefined)
- {
- push(this.matches, new dp.sh.Match(match[2], match.index + match[0].indexOf(match[2]), 'attribute-value'));
- }
- }
-
- // Match opening and closing tag brackets
- // </*\?*(?!\!)|/*\?*>
- this.GetMatches(new RegExp('</*\\?*(?!\\!)|/*\\?*>', 'gm'), 'tag');
-
- // Match tag names
- // </*\?*\s*(\w+)
- regex = new RegExp('</*\\?*\\s*([\\w-\.]+)', 'gm');
- while((match = regex.exec(this.code)) != null)
- {
- push(this.matches, new dp.sh.Match(match[1], match.index + match[0].indexOf(match[1]), 'tag-name'));
- }
-}
diff --git a/usr/local/www/code-syntax-highlighter/shCore.js b/usr/local/www/code-syntax-highlighter/shCore.js
deleted file mode 100644
index e830438..0000000
--- a/usr/local/www/code-syntax-highlighter/shCore.js
+++ /dev/null
@@ -1,589 +0,0 @@
-/**
- * Code Syntax Highlighter. Version 1.1.0
- * Copyright (C) 2004 Dream Projections Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- **
- * Usage example:
- *
- * <script src="shCore.js" type="text/javascript"></script>
- * <script src="shBrushXml.js" type="text/javascript"></script>
- *
- * <textarea name="code" language="html">
- * <img src="myimage.gif" border="0">
- * </textarea>
- *
- * <script>dp.SyntaxHighlighter.HighlightAll('code', 'value');</script>
- *
- **
- * History:
- * 1.1.0 - March 23rd, 2005
- * - split brushes into separate files
- * - now works in Safari
- * - added missing strings to PHP matches
- *
- * 1.0.4 - February 2nd, 2005
- * - added Delphi & Python
- * - multi-line comments fixed
- * - language name can be set through w3c valid 'class' attribute
- * - HighlightAll(name, [showGutter], [showTools])
- *
- * 1.0.3 - December 31th, 2004 (added PHP & SQL)
- * 1.0.2 - December 28th, 2004 (refactoring with namespaces)
- * 1.0.1 - December 14th, 2004
- * 1.0.0 - November 13th, 2004
- */
-
-// create namespaces
-var dp = {
- sh : // dp.sh
- {
- Utils : {}, // dp.sh.Utils
- Brushes : {} // dp.sh.Brushes
- }
-};
-
-dp.sh.Config = {
- Version : '1.1.0',
- About : '<html><head><title>About...</title></head><body class="dp-about"><table cellspacing="0"><tr><td class="copy"><div class="para title">dp.SyntaxHighlighter</div><div class="para">Version: {V}</div><div class="para"><a href="http://www.dreamprojections.com/sh/?ref=about" target="_blank">http://www.dreamprojections.com/SyntaxHighlighter</a></div>&copy;2004-2005 Dream Projections Inc. All right reserved.</td></tr><tr><td class="footer"><input type="button" class="close" value="OK" onClick="window.close()"/></td></tr></table></body></html>'
-};
-
-dp.SyntaxHighlighter = dp.sh;
-
-
-
-// opens a new windows and puts the original unformatted source code inside.
-dp.sh.Utils.ViewSource = function(sender)
-{
- var code = sender.parentNode.originalCode;
- var wnd = window.open('', '_blank', 'width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=1');
-
- code = code.replace(/</g, '&lt;');
-
- wnd.document.write('<pre>' + code + '</pre>');
- wnd.document.close();
-}
-
-// copies the original source code in to the clipboard (IE only)
-dp.sh.Utils.ToClipboard = function(sender)
-{
- var code = sender.parentNode.originalCode;
-
- // This works only for IE. There's a way to make it work with Mozilla as well,
- // but it requires security settings changed on the client, which isn't by
- // default, so 99% of users won't have it working anyways.
- if(window.clipboardData)
- {
- window.clipboardData.setData('text', code);
-
- alert('The code is in your clipboard now.');
- }
-}
-
-// creates an invisible iframe, puts the original source code inside and prints it
-dp.sh.Utils.PrintSource = function(sender)
-{
- var td = sender.parentNode;
- var code = td.processedCode;
- var iframe = document.createElement('iframe');
- var doc = null;
- var wnd =
-
- // this hides the iframe
- iframe.style.cssText = 'position:absolute; width:0px; height:0px; left:-5px; top:-5px;';
-
- td.appendChild(iframe);
-
- doc = iframe.contentWindow.document;
- code = code.replace(/</g, '&lt;');
-
- doc.open();
- doc.write('<pre>' + code + '</pre>');
- doc.close();
-
- iframe.contentWindow.focus();
- iframe.contentWindow.print();
-
- td.removeChild(iframe);
-}
-
-dp.sh.Utils.About = function()
-{
- var wnd = window.open('', '_blank', 'dialog, width=320, height=150');
- var doc = wnd.document;
-
- var styles = document.getElementsByTagName('style');
- var links = document.getElementsByTagName('link');
-
- doc.write(dp.sh.Config.About.replace('{V}', dp.sh.Config.Version));
-
- // copy over ALL the styles from the parent page
- for(var i = 0; i < styles.length; i++)
- doc.write('<style>' + styles[i].innerHTML + '</style>');
-
- for(var i = 0; i < links.length; i++)
- if(links[i].rel.toLowerCase() == 'stylesheet')
- doc.write('<link type="text/css" rel="stylesheet" href="' + links[i].href + '"></link>');
-
- doc.close();
- wnd.focus();
-}
-
-
-
-
-
-// creates a new match object
-dp.sh.Match = function(value, index, css)
-{
- this.value = value;
- this.index = index;
- this.length = value.length;
- this.css = css;
-}
-
-
-
-
-
-dp.sh.Highlighter = function()
-{
- this.addGutter = true;
- this.addControls = true;
- this.tabsToSpaces = true;
-}
-
-// static callback for the match sorting
-dp.sh.Highlighter.SortCallback = function(m1, m2)
-{
- // sort matches by index first
- if(m1.index < m2.index)
- return -1;
- else if(m1.index > m2.index)
- return 1;
- else
- {
- // if index is the same, sort by length
- if(m1.length < m2.length)
- return -1;
- else if(m1.length > m2.length)
- return 1;
- }
- return 0;
-}
-
-// gets a list of all matches for a given regular expression
-dp.sh.Highlighter.prototype.GetMatches = function(regex, css)
-{
- var index = 0;
- var match = null;
-
- while((match = regex.exec(this.code)) != null)
- {
- this.matches[this.matches.length] = new dp.sh.Match(match[0], match.index, css);
- }
-}
-
-dp.sh.Highlighter.prototype.AddBit = function(str, css)
-{
- var span = document.createElement('span');
-
- str = str.replace(/&/g, '&amp;');
- str = str.replace(/ /g, '&nbsp;');
- str = str.replace(/</g, '&lt;');
- str = str.replace(/\n/gm, '&nbsp;<br />');
-
- // when adding a piece of code, check to see if it has line breaks in it
- // and if it does, wrap individual line breaks with span tags
- if(css != null)
- {
- var regex = new RegExp('<br />', 'gi');
-
- if(regex.test(str))
- {
- var lines = str.split('&nbsp;<br />');
-
- str = '';
-
- for(var i = 0; i < lines.length; i++)
- {
- span = document.createElement('span');
- span.className = css;
- span.innerHTML = lines[i];
-
- this.div.appendChild(span);
-
- // don't add a <br /> for the last line
- if(i + 1 < lines.length)
- {
- this.div.appendChild(document.createElement('br'));
- }
- }
- }
- else
- {
- span.className = css;
- span.innerHTML = str;
- this.div.appendChild(span);
- }
- }
- else
- {
- span.innerHTML = str;
- this.div.appendChild(span);
- }
-}
-
-// checks if one match is inside another
-dp.sh.Highlighter.prototype.IsInside = function(match)
-{
- if(match == null || match.length == 0)
- {
- return;
- }
-
- for(var i = 0; i < this.matches.length; i++)
- {
- var c = this.matches[i];
-
- if(c == null)
- {
- continue;
- }
-
- if((match.index > c.index) && (match.index <= c.index + c.length))
- {
- return true;
- }
- }
-
- return false;
-}
-
-dp.sh.Highlighter.prototype.ProcessRegexList = function()
-{
- for(var i = 0; i < this.regexList.length; i++)
- {
- this.GetMatches(this.regexList[i].regex, this.regexList[i].css);
- }
-}
-
-dp.sh.Highlighter.prototype.ProcessSmartTabs = function(code)
-{
- var lines = code.split('\n');
- var result = '';
- var tabSize = 4;
- var tab = '\t';
-
- // This function inserts specified amount of spaces in the string
- // where a tab is while removing that given tab.
- function InsertSpaces(line, pos, count)
- {
- var left = line.substr(0, pos);
- var right = line.substr(pos + 1, line.length); // pos + 1 will get rid of the tab
- var spaces = '';
-
- for(var i = 0; i < count; i++)
- {
- spaces += ' ';
- }
-
- return left + spaces + right;
- }
-
- // This function process one line for 'smart tabs'
- function ProcessLine(line, tabSize)
- {
- if(line.indexOf(tab) == -1)
- {
- return line;
- }
-
- var pos = 0;
-
- while((pos = line.indexOf(tab)) != -1)
- {
- // This is pretty much all there is to the 'smart tabs' logic.
- // Based on the position within the line and size of a tab,
- // calculate the amount of spaces we need to insert.
- var spaces = tabSize - pos % tabSize;
-
- line = InsertSpaces(line, pos, spaces);
- }
-
- return line;
- }
-
- // Go through all the lines and do the 'smart tabs' magic.
- for(var i = 0; i < lines.length; i++)
- {
- var line = lines[i];
- result += ProcessLine(line, tabSize) + '\n';
- }
-
- return result;
-}
-
-dp.sh.Highlighter.prototype.SwitchToTable = function()
-{
- // Safari fix: for some reason lowercase <br /> isn't getting picked up, even though 'i' is set
- var lines = this.div.innerHTML.split(/<br \/>/gi);
- var row = null;
- var cell = null;
- var html = '';
- var pipe = ' | ';
-
- // creates an anchor to a utility
- function UtilHref(util, text)
- {
- return '<a href="#" onclick="dp.sh.Utils.' + util + '(this); return false;">' + text + '</a>';
- }
-
- row = this.table.insertRow(-1);
-
- if(this.addGutter == true)
- {
- cell = row.insertCell(-1);
- cell.className = 'tools-corner';
- }
-
- if(this.addControls == true)
- {
- cell = row.insertCell(-1);
-
- cell.originalCode = this.originalCode;
- cell.processedCode = this.code;
-
- cell.className = 'tools';
- cell.innerHTML = UtilHref('ViewSource', 'view plain') + pipe + UtilHref('PrintSource', 'print');
-
- if(window.clipboardData)
- {
- cell.innerHTML += pipe + UtilHref('ToClipboard', 'copy to clipboard');
- }
-
- cell.innerHTML += pipe + UtilHref('About', '?');
- }
-
- for(var i = 0; i < lines.length - 1; i++)
- {
- row = this.table.insertRow(-1);
-
- if(this.addGutter == true)
- {
- cell = row.insertCell(-1);
- cell.className = 'gutter';
- cell.innerHTML = i + 1;
- }
-
- cell = row.insertCell(-1);
- cell.className = 'line';
- cell.innerHTML = lines[i];
- }
-
- this.div.innerHTML = '';
-}
-
-dp.sh.Highlighter.prototype.Highlight = function(code)
-{
- // This function strips all new lines and spaces
- // from the beging and end of the string .
- function Trim(str)
- {
- var begining = new RegExp('^[\\s\\n]', 'g');
- var end = new RegExp('[\\s\\n]$', 'g');
-
- while(begining.test(str))
- {
- str = str.substr(1);
- }
-
- while(end.test(str))
- {
- str = str.substr(0, str.length - 1);
- }
-
- return str;
- }
-
- // This function returns a portions of the string
- // from pos1 to pos2 inclusive.
- function Copy(string, pos1, pos2)
- {
- return string.substr(pos1, pos2 - pos1);
- }
-
- var pos = 0;
-
- this.originalCode = code;
- this.code = Trim(code);
- this.div = document.createElement('div');
- this.table = document.createElement('table');
- this.matches = new Array();
-
- if(this.CssClass != null)
- {
- this.table.className = this.CssClass;
- }
-
- // replace tabs with spaces
- if(this.tabsToSpaces == true)
- {
- this.code = this.ProcessSmartTabs(this.code);
- }
-
- this.table.border = 0;
- this.table.cellSpacing = 0;
- this.table.cellPadding = 0;
-
- this.ProcessRegexList();
-
- // if no matches found, do nothing
- if(this.matches.length == 0)
- {
- return;
- }
-
- // sort the matches
- this.matches = this.matches.sort(dp.sh.Highlighter.SortCallback);
-
- // The following loop checks to see if any of the matches are inside
- // of other matches. This process would get rid of highligting strings
- // inside comments, keywords inside strings and so on.
- for(var i = 0; i < this.matches.length; i++)
- {
- if(this.IsInside(this.matches[i]))
- {
- this.matches[i] = null;
- }
- }
-
- // Finally, go through the final list of matches and pull the all
- // together adding everything in between that isn't a match.
- for(var i = 0; i < this.matches.length; i++)
- {
- var match = this.matches[i];
-
- if(match == null || match.length == 0)
- {
- continue;
- }
-
- this.AddBit(Copy(this.code, pos, match.index), null);
- this.AddBit(match.value, match.css);
-
- pos = match.index + match.length;
- }
-
- this.AddBit(this.code.substr(pos), null);
-
- this.SwitchToTable();
-}
-
-dp.sh.Highlighter.prototype.GetKeywords = function(str)
-{
- return '\\b' + str.replace(/ /g, '\\b|\\b') + '\\b';
-}
-
-// highlightes all elements identified by name and gets source code from specified property
-dp.sh.HighlightAll = function(name, showGutter /* optional */, showControls /* optional */)
-{
- var elements = document.getElementsByName(name);
- var highlighter = null;
- var registered = new Object();
- var propertyName = 'value';
-
- function FindValue()
- {
- var a = arguments;
-
- for(var i = 0; i < a.length; i++)
- if(a[i] != null && ((typeof(a[i]) == 'string' && a[i] != '') || (typeof(a[i]) == 'object' && a[i].value != '')))
- return a[i];
-
- return null;
- }
-
- if(elements == null)
- {
- return;
- }
-
- // if showGutter isn't set, default to TRUE
- if(showGutter == null)
- {
- showGutter = true;
- }
-
- // if showControls isn't set, default to TRUE
- if(showControls == null)
- {
- showControls = true;
- }
-
- // register all brushes
- for(var brush in dp.sh.Brushes)
- {
- var aliases = dp.sh.Brushes[brush].Aliases;
-
- if(aliases == null)
- {
- continue;
- }
-
- for(var i = 0; i < aliases.length; i++)
- {
- registered[aliases[i]] = brush;
- }
- }
-
- for(var i = 0; i < elements.length; i++)
- {
- var element = elements[i];
- var language = FindValue(element.attributes['class'], element.className, element.attributes['language'], element.language);
-
- if(language == null)
- continue;
-
- if(language.value)
- language = language.value;
-
- language = (language + '').toLowerCase();
-
- if(registered[language] == null)
- {
- continue;
- }
-
- // instantiate a brush
- highlighter = new dp.sh.Brushes[registered[language]]();
-
- // hide the original element
- element.style.display = 'none';
-
- highlighter.addGutter = showGutter;
- highlighter.addControls = showControls;
- highlighter.Highlight(element[propertyName]);
-
- // place the result table inside a div
- var div = document.createElement('div');
-
- div.className = 'dp-highlighter';
- div.appendChild(highlighter.table);
-
- element.parentNode.insertBefore(div, element);
- }
-}
diff --git a/usr/local/www/code-syntax-highlighter/shCore.uncompressed.js b/usr/local/www/code-syntax-highlighter/shCore.uncompressed.js
deleted file mode 100644
index 8d92721..0000000
--- a/usr/local/www/code-syntax-highlighter/shCore.uncompressed.js
+++ /dev/null
@@ -1,636 +0,0 @@
-/**
- * Code Syntax Highlighter.
- * Version 1.3.0
- * Copyright (C) 2004 Alex Gorbatchev.
- * http://www.dreamprojections.com/syntaxhighlighter/
- *
- * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General
- * Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
- * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to
- * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-//
-// create namespaces
-//
-var dp = {
- sh :
- {
- Toolbar : {},
- Utils : {},
- RegexLib: {},
- Brushes : {},
- Strings : {},
- Version : '1.4.1'
- }
-};
-
-dp.sh.Strings = {
- AboutDialog : '<html><head><title>About...</title></head><body class="dp-about"><table cellspacing="0"><tr><td class="copy"><p class="title">dp.SyntaxHighlighter</div><div class="para">Version: {V}</p><p><a href="http://www.dreamprojections.com/syntaxhighlighter/?ref=about" target="_blank">http://www.dreamprojections.com/SyntaxHighlighter</a></p>&copy;2004-2005 Alex Gorbatchev. All right reserved.</td></tr><tr><td class="footer"><input type="button" class="close" value="OK" onClick="window.close()"/></td></tr></table></body></html>'
-};
-
-dp.SyntaxHighlighter = dp.sh;
-
-//
-// Toolbar functions
-//
-
-dp.sh.Toolbar.Commands = {
- ExpandSource: {
- label: '+ expand source',
- check: function(highlighter) { return highlighter.collapse; },
- func: function(sender, highlighter)
- {
- sender.parentNode.removeChild(sender);
- highlighter.div.className = highlighter.div.className.replace('collapsed', '');
- }
- },
-
- // opens a new windows and puts the original unformatted source code inside.
- ViewSource: {
- label: 'view plain',
- func: function(sender, highlighter)
- {
- var code = highlighter.originalCode.replace(/</g, '&lt;');
- var wnd = window.open('', '_blank', 'width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=1');
- wnd.document.write('<textarea style="width:99%;height:99%">' + code + '</textarea>');
- wnd.document.close();
- }
- },
-
- // copies the original source code in to the clipboard (IE only)
- CopyToClipboard: {
- label: 'copy to clipboard',
- check: function() { return window.clipboardData != null; },
- func: function(sender, highlighter)
- {
- window.clipboardData.setData('text', highlighter.originalCode);
- alert('The code is in your clipboard now');
- }
- },
-
- // creates an invisible iframe, puts the original source code inside and prints it
- PrintSource: {
- label: 'print',
- func: function(sender, highlighter)
- {
- var iframe = document.createElement('IFRAME');
- var doc = null;
-
- // this hides the iframe
- iframe.style.cssText = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;';
-
- document.body.appendChild(iframe);
- doc = iframe.contentWindow.document;
-
- dp.sh.Utils.CopyStyles(doc, window.document);
- doc.write('<div class="' + highlighter.div.className.replace('collapsed', '') + ' printing">' + highlighter.div.innerHTML + '</div>');
- doc.close();
-
- iframe.contentWindow.focus();
- iframe.contentWindow.print();
-
- alert('Printing...');
-
- document.body.removeChild(iframe);
- }
- },
-
- About: {
- label: '?',
- func: function(highlighter)
- {
- var wnd = window.open('', '_blank', 'dialog,width=300,height=150,scrollbars=0');
- var doc = wnd.document;
-
- dp.sh.Utils.CopyStyles(doc, window.document);
-
- doc.write(dp.sh.Strings.AboutDialog.replace('{V}', dp.sh.Version));
- doc.close();
- wnd.focus();
- }
- }
-};
-
-// creates a <div /> with all toolbar links
-dp.sh.Toolbar.Create = function(highlighter)
-{
- var div = document.createElement('div');
-
- div.className = 'tools';
-
- for(var name in dp.sh.Toolbar.Commands)
- {
- var cmd = dp.sh.Toolbar.Commands[name];
-
- if(cmd.check != null && !cmd.check(highlighter))
- continue;
-
- div.innerHTML += '<a href="#" onclick="dp.sh.Toolbar.Command(\'' + name + '\',this);return false;">' + cmd.label + '</a>';
- }
-
- return div;
-}
-
-// executes toolbar command by name
-dp.sh.Toolbar.Command = function(name, sender)
-{
- var n = sender;
-
- while(n != null && n.className.indexOf('dp-highlighter') == -1)
- n = n.parentNode;
-
- if(n != null)
- dp.sh.Toolbar.Commands[name].func(sender, n.highlighter);
-}
-
-// copies all <link rel="stylesheet" /> from 'target' window to 'dest'
-dp.sh.Utils.CopyStyles = function(destDoc, sourceDoc)
-{
- var links = sourceDoc.getElementsByTagName('link');
-
- for(var i = 0; i < links.length; i++)
- if(links[i].rel.toLowerCase() == 'stylesheet')
- destDoc.write('<link type="text/css" rel="stylesheet" href="' + links[i].href + '"></link>');
-}
-
-//
-// Common reusable regular expressions
-//
-dp.sh.RegexLib = {
- MultiLineCComments : new RegExp('/\\*[\\s\\S]*?\\*/', 'gm'),
- SingleLineCComments : new RegExp('//.*$', 'gm'),
- SingleLinePerlComments : new RegExp('#.*$', 'gm'),
- DoubleQuotedString : new RegExp('"(?:\\.|(\\\\\\")|[^\\""])*"','g'),
- SingleQuotedString : new RegExp("'(?:\\.|(\\\\\\')|[^\\''])*'", 'g')
-};
-
-//
-// Match object
-//
-dp.sh.Match = function(value, index, css)
-{
- this.value = value;
- this.index = index;
- this.length = value.length;
- this.css = css;
-}
-
-//
-// Highlighter object
-//
-dp.sh.Highlighter = function()
-{
- this.noGutter = false;
- this.addControls = true;
- this.collapse = false;
- this.tabsToSpaces = true;
- this.wrapColumn = 80;
- this.showColumns = true;
-}
-
-// static callback for the match sorting
-dp.sh.Highlighter.SortCallback = function(m1, m2)
-{
- // sort matches by index first
- if(m1.index < m2.index)
- return -1;
- else if(m1.index > m2.index)
- return 1;
- else
- {
- // if index is the same, sort by length
- if(m1.length < m2.length)
- return -1;
- else if(m1.length > m2.length)
- return 1;
- }
- return 0;
-}
-
-dp.sh.Highlighter.prototype.createElement = function(name)
-{
- var result = document.createElement(name);
- result.highlighter = this;
- return result;
-}
-
-// gets a list of all matches for a given regular expression
-dp.sh.Highlighter.prototype.GetMatches = function(regex, css)
-{
- var index = 0;
- var match = null;
-
- while((match = regex.exec(this.code)) != null)
- this.matches[this.matches.length] = new dp.sh.Match(match[0], match.index, css);
-}
-
-dp.sh.Highlighter.prototype.AddBit = function(str, css)
-{
- if(str == null || str.length == 0)
- return;
-
- var span = this.createElement('span');
-
- str = str.replace(/&/g, '&amp;');
- str = str.replace(/ /g, '&nbsp;');
- str = str.replace(/</g, '&lt;');
- str = str.replace(/\n/gm, '&nbsp;<br />');
-
- // when adding a piece of code, check to see if it has line breaks in it
- // and if it does, wrap individual line breaks with span tags
- if(css != null)
- {
- var regex = new RegExp('<br />', 'gi');
-
- if(regex.test(str))
- {
- var lines = str.split('&nbsp;<br />');
-
- str = '';
-
- for(var i = 0; i < lines.length; i++)
- {
- span = this.createElement('span');
- span.className = css;
- span.innerHTML = lines[i];
-
- this.div.appendChild(span);
-
- // don't add a <br /> for the last line
- if(i + 1 < lines.length)
- this.div.appendChild(this.createElement('br'));
- }
- }
- else
- {
- span.className = css;
- span.innerHTML = str;
- this.div.appendChild(span);
- }
- }
- else
- {
- span.innerHTML = str;
- this.div.appendChild(span);
- }
-}
-
-// checks if one match is inside any other match
-dp.sh.Highlighter.prototype.IsInside = function(match)
-{
- if(match == null || match.length == 0)
- return false;
-
- for(var i = 0; i < this.matches.length; i++)
- {
- var c = this.matches[i];
-
- if(c == null)
- continue;
-
- if((match.index > c.index) && (match.index < c.index + c.length))
- return true;
- }
-
- return false;
-}
-
-dp.sh.Highlighter.prototype.ProcessRegexList = function()
-{
- for(var i = 0; i < this.regexList.length; i++)
- this.GetMatches(this.regexList[i].regex, this.regexList[i].css);
-}
-
-dp.sh.Highlighter.prototype.ProcessSmartTabs = function(code)
-{
- var lines = code.split('\n');
- var result = '';
- var tabSize = 4;
- var tab = '\t';
-
- // This function inserts specified amount of spaces in the string
- // where a tab is while removing that given tab.
- function InsertSpaces(line, pos, count)
- {
- var left = line.substr(0, pos);
- var right = line.substr(pos + 1, line.length); // pos + 1 will get rid of the tab
- var spaces = '';
-
- for(var i = 0; i < count; i++)
- spaces += ' ';
-
- return left + spaces + right;
- }
-
- // This function process one line for 'smart tabs'
- function ProcessLine(line, tabSize)
- {
- if(line.indexOf(tab) == -1)
- return line;
-
- var pos = 0;
-
- while((pos = line.indexOf(tab)) != -1)
- {
- // This is pretty much all there is to the 'smart tabs' logic.
- // Based on the position within the line and size of a tab,
- // calculate the amount of spaces we need to insert.
- var spaces = tabSize - pos % tabSize;
-
- line = InsertSpaces(line, pos, spaces);
- }
-
- return line;
- }
-
- // Go through all the lines and do the 'smart tabs' magic.
- for(var i = 0; i < lines.length; i++)
- result += ProcessLine(lines[i], tabSize) + '\n';
-
- return result;
-}
-
-dp.sh.Highlighter.prototype.SwitchToList = function()
-{
- // thanks to Lachlan Donald from SitePoint.com for this <br /> tag fix.
- var html = this.div.innerHTML.replace(/<(br)\/?>/gi, '\n');
- var lines = html.split('\n');
-
- if(this.addControls == true)
- this.bar.appendChild(dp.sh.Toolbar.Create(this));
-
- // add columns ruler
- if(this.showColumns)
- {
- var div = this.createElement('div');
- var columns = this.createElement('div');
- var showEvery = 10;
- var i = 1;
-
- while(i <= 150)
- {
- if(i % showEvery == 0)
- {
- div.innerHTML += i;
- i += (i + '').length;
- }
- else
- {
- div.innerHTML += '&middot;';
- i++;
- }
- }
-
- columns.className = 'columns';
- columns.appendChild(div);
- this.bar.appendChild(columns);
- }
-
- for(var i = 0, lineIndex = this.firstLine; i < lines.length - 1; i++, lineIndex++)
- {
- var li = this.createElement('li');
- var span = this.createElement('span');
-
- // uses .line1 and .line2 css styles for alternating lines
- li.className = (i % 2 == 0) ? 'alt' : '';
- span.innerHTML = lines[i] + '&nbsp;';
-
- li.appendChild(span);
- this.ol.appendChild(li);
- }
-
- this.div.innerHTML = '';
-}
-
-dp.sh.Highlighter.prototype.Highlight = function(code)
-{
- function Trim(str)
- {
- return str.replace(/^\s*(.*?)[\s\n]*$/g, '$1');
- }
-
- function Chop(str)
- {
- return str.replace(/\n*$/, '').replace(/^\n*/, '');
- }
-
- function Unindent(str)
- {
- var lines = str.split('\n');
- var indents = new Array();
- var regex = new RegExp('^\\s*', 'g');
- var min = 1000;
-
- // go through every line and check for common number of indents
- for(var i = 0; i < lines.length && min > 0; i++)
- {
- if(Trim(lines[i]).length == 0)
- continue;
-
- var matches = regex.exec(lines[i]);
-
- if(matches != null && matches.length > 0)
- min = Math.min(matches[0].length, min);
- }
-
- // trim minimum common number of white space from the begining of every line
- if(min > 0)
- for(var i = 0; i < lines.length; i++)
- lines[i] = lines[i].substr(min);
-
- return lines.join('\n');
- }
-
- // This function returns a portions of the string from pos1 to pos2 inclusive
- function Copy(string, pos1, pos2)
- {
- return string.substr(pos1, pos2 - pos1);
- }
-
- var pos = 0;
-
- this.originalCode = code;
- this.code = Chop(Unindent(code));
- this.div = this.createElement('div');
- this.bar = this.createElement('div');
- this.ol = this.createElement('ol');
- this.matches = new Array();
-
- this.div.className = 'dp-highlighter';
- this.div.highlighter = this;
-
- this.bar.className = 'bar';
-
- // set the first line
- this.ol.start = this.firstLine;
-
- if(this.CssClass != null)
- this.ol.className = this.CssClass;
-
- if(this.collapse)
- this.div.className += ' collapsed';
-
- if(this.noGutter)
- this.div.className += ' nogutter';
-
- // replace tabs with spaces
- if(this.tabsToSpaces == true)
- this.code = this.ProcessSmartTabs(this.code);
-
- this.ProcessRegexList();
-
- // if no matches found, add entire code as plain text
- if(this.matches.length == 0)
- {
- this.AddBit(this.code, null);
- this.SwitchToList();
- this.div.appendChild(this.ol);
- return;
- }
-
- // sort the matches
- this.matches = this.matches.sort(dp.sh.Highlighter.SortCallback);
-
- // The following loop checks to see if any of the matches are inside
- // of other matches. This process would get rid of highligted strings
- // inside comments, keywords inside strings and so on.
- for(var i = 0; i < this.matches.length; i++)
- if(this.IsInside(this.matches[i]))
- this.matches[i] = null;
-
- // Finally, go through the final list of matches and pull the all
- // together adding everything in between that isn't a match.
- for(var i = 0; i < this.matches.length; i++)
- {
- var match = this.matches[i];
-
- if(match == null || match.length == 0)
- continue;
-
- this.AddBit(Copy(this.code, pos, match.index), null);
- this.AddBit(match.value, match.css);
-
- pos = match.index + match.length;
- }
-
- this.AddBit(this.code.substr(pos), null);
-
- this.SwitchToList();
- this.div.appendChild(this.bar);
- this.div.appendChild(this.ol);
-}
-
-dp.sh.Highlighter.prototype.GetKeywords = function(str)
-{
- return '\\b' + str.replace(/ /g, '\\b|\\b') + '\\b';
-}
-
-// highlightes all elements identified by name and gets source code from specified property
-dp.sh.HighlightAll = function(name, showGutter /* optional */, showControls /* optional */, collapseAll /* optional */, firstLine /* optional */, showColumns /* optional */)
-{
- function FindValue()
- {
- var a = arguments;
-
- for(var i = 0; i < a.length; i++)
- {
- if(a[i] == null)
- continue;
-
- if(typeof(a[i]) == 'string' && a[i] != '')
- return a[i] + '';
-
- if(typeof(a[i]) == 'object' && a[i].value != '')
- return a[i].value + '';
- }
-
- return null;
- }
-
- function IsOptionSet(value, list)
- {
- for(var i = 0; i < list.length; i++)
- if(list[i] == value)
- return true;
-
- return false;
- }
-
- function GetOptionValue(name, list, defaultValue)
- {
- var regex = new RegExp('^' + name + '\\[(\\w+)\\]$', 'gi');
- var matches = null;
-
- for(var i = 0; i < list.length; i++)
- if((matches = regex.exec(list[i])) != null)
- return matches[1];
-
- return defaultValue;
- }
-
- var elements = document.getElementsByName(name);
- var highlighter = null;
- var registered = new Object();
- var propertyName = 'value';
-
- // if no code blocks found, leave
- if(elements == null)
- return;
-
- // register all brushes
- for(var brush in dp.sh.Brushes)
- {
- var aliases = dp.sh.Brushes[brush].Aliases;
-
- if(aliases == null)
- continue;
-
- for(var i = 0; i < aliases.length; i++)
- registered[aliases[i]] = brush;
- }
-
- for(var i = 0; i < elements.length; i++)
- {
- var element = elements[i];
- var options = FindValue(
- element.attributes['class'], element.className,
- element.attributes['language'], element.language
- );
- var language = '';
-
- if(options == null)
- continue;
-
- options = options.split(':');
-
- language = options[0].toLowerCase();
-
- if(registered[language] == null)
- continue;
-
- // instantiate a brush
- highlighter = new dp.sh.Brushes[registered[language]]();
-
- // hide the original element
- element.style.display = 'none';
-
- highlighter.noGutter = (showGutter == null) ? IsOptionSet('nogutter', options) : !showGutter;
- highlighter.addControls = (showControls == null) ? !IsOptionSet('nocontrols', options) : showControls;
- highlighter.collapse = (collapseAll == null) ? IsOptionSet('collapse', options) : collapseAll;
- highlighter.showColumns = (showColumns == null) ? IsOptionSet('showcolumns', options) : showColumns;
-
- // first line idea comes from Andrew Collington, thanks!
- highlighter.firstLine = (firstLine == null) ? parseInt(GetOptionValue('firstline', options, 1)) : firstLine;
-
- highlighter.Highlight(element[propertyName]);
-
- element.parentNode.insertBefore(highlighter.div, element);
- }
-}
diff --git a/usr/local/www/crash_reporter.php b/usr/local/www/crash_reporter.php
deleted file mode 100644
index 3b00e47..0000000
--- a/usr/local/www/crash_reporter.php
+++ /dev/null
@@ -1,156 +0,0 @@
-<?php
-/* $Id$ */
-/*
- crash_reporter.php
- part of pfSense
- Copyright (C) 2011 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: header
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-crash-reporter
-##|*NAME=Crash reporter
-##|*DESCR=Uploads crash reports to pfSense and or deletes crash reports.
-##|*MATCH=crash_reporter.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-require("captiveportal.inc");
-
-define("FILE_SIZE", 450000);
-
-function upload_crash_report($files) {
- global $g;
- $post = array();
- $counter = 0;
- foreach ($files as $file) {
- $post["file{$counter}"] = "@{$file}";
- $counter++;
- }
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_HEADER, 0);
- curl_setopt($ch, CURLOPT_VERBOSE, 0);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_USERAGENT, $g['product_name'] . '/' . $g['product_version']);
- curl_setopt($ch, CURLOPT_URL, $g['crashreporterurl']);
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
- $response = curl_exec($ch);
- return $response;
-}
-
-function output_crash_reporter_html($crash_reports) {
- echo "<p><strong>" . gettext("Unfortunately we have detected a programming bug.") . "</strong></p>";
- echo "<p>" . gettext("Would you like to submit the programming debug logs to the pfSense developers for inspection?") . "</p>";
- echo "<p><i>" . gettext("Please double check the contents to ensure you are comfortable sending this information before clicking Yes.") . "</i></p>";
- echo "<p>" . gettext("Contents of crash reports") . ":<br />";
- echo "<textarea readonly=\"readonly\" rows=\"40\" cols=\"65\" name=\"crashreports\">{$crash_reports}</textarea></p>";
- echo "<p><input name=\"Submit\" type=\"submit\" class=\"formbtn\" value=\"" . gettext("Yes") . "\" />" . gettext(" - Submit this to the developers for inspection") . "</p>";
- echo "<p><input name=\"Submit\" type=\"submit\" class=\"formbtn\" value=\"" . gettext("No") . "\" />" . gettext(" - Just delete the crash report and take me back to the Dashboard") . "</p>";
- echo "</form>";
-}
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Crash reporter"));
-include('head.inc');
-
-$crash_report_header = "Crash report begins. Anonymous machine information:\n\n";
-$crash_report_header .= php_uname("m") . "\n";
-$crash_report_header .= php_uname("r") . "\n";
-$crash_report_header .= php_uname("v") . "\n";
-$crash_report_header .= "\nCrash report details:\n";
-
-exec("/usr/bin/grep -vi warning /tmp/PHP_errors.log", $php_errors);
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-
-<?php include("fbegin.inc"); ?>
-
- <form action="crash_reporter.php" method="post">
-
-<?php
- if (gettext($_POST['Submit']) == "Yes") {
- echo gettext("Processing...");
- if (!is_dir("/var/crash")) {
- mkdir("/var/crash", 0750, true);
- }
- @file_put_contents("/var/crash/crashreport_header.txt", $crash_report_header);
- if (file_exists("/tmp/PHP_errors.log")) {
- copy("/tmp/PHP_errors.log", "/var/crash/PHP_errors.log");
- }
- exec("find /var/crash -type l -exec rm {} +");
- exec("/usr/bin/gzip /var/crash/*");
- $files_to_upload = glob("/var/crash/*");
- echo "<br/>";
- echo gettext("Uploading...");
- ob_flush();
- flush();
- if (is_array($files_to_upload)) {
- $resp = upload_crash_report($files_to_upload);
- array_map('unlink', glob("/var/crash/*"));
- // Erase the contents of the PHP error log
- fclose(fopen("/tmp/PHP_errors.log", 'w'));
- echo "<br/>";
- print_r($resp);
- echo "<p><a href=\"/\">" . gettext("Continue") . "</a>" . gettext(" and delete crash report files from local disk.") . "</p>";
- } else {
- echo "Could not find any crash files.";
- }
- } else if (gettext($_POST['Submit']) == "No") {
- array_map('unlink', glob("/var/crash/*"));
- // Erase the contents of the PHP error log
- fclose(fopen("/tmp/PHP_errors.log", 'w'));
- header("Location: /");
- exit;
- } else {
- $crash_files = glob("/var/crash/*");
- $crash_reports = $crash_report_header;
- if (count($php_errors) > 0) {
- $crash_reports .= "\nPHP Errors:\n";
- $crash_reports .= implode("\n", $php_errors) . "\n\n";
- }
- if (is_array($crash_files)) {
- foreach ($crash_files as $cf) {
- if (filesize($cf) < FILE_SIZE) {
- $crash_reports .= "\nFilename: {$cf}\n";
- $crash_reports .= file_get_contents($cf);
- }
- }
- } else {
- echo "Could not locate any crash data.";
- }
- output_crash_reporter_html($crash_reports);
- }
-?>
-
-<?php include("fend.inc"); ?>
-
-</body>
-</html>
diff --git a/usr/local/www/csrf/csrf-magic.js b/usr/local/www/csrf/csrf-magic.js
deleted file mode 100644
index d358b0f..0000000
--- a/usr/local/www/csrf/csrf-magic.js
+++ /dev/null
@@ -1,186 +0,0 @@
-/**
- * @file
- *
- * Rewrites XMLHttpRequest to automatically send CSRF token with it. In theory
- * plays nice with other JavaScript libraries, needs testing though.
- */
-
-// Here are the basic overloaded method definitions
-// The wrapper must be set BEFORE onreadystatechange is written to, since
-// a bug in ActiveXObject prevents us from properly testing for it.
-CsrfMagic = function(real) {
- // try to make it ourselves, if you didn't pass it
- if (!real) try { real = new XMLHttpRequest; } catch (e) {;}
- if (!real) try { real = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) {;}
- if (!real) try { real = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) {;}
- if (!real) try { real = new ActiveXObject('Msxml2.XMLHTTP.4.0'); } catch (e) {;}
- this.csrf = real;
- // properties
- var csrfMagic = this;
- real.onreadystatechange = function() {
- csrfMagic._updateProps();
- return csrfMagic.onreadystatechange ? csrfMagic.onreadystatechange() : null;
- };
- csrfMagic._updateProps();
-}
-
-CsrfMagic.prototype = {
-
- open: function(method, url, async, username, password) {
- if (method == 'POST') this.csrf_isPost = true;
- // deal with Opera bug, thanks jQuery
- if (username) return this.csrf_open(method, url, async, username, password);
- else return this.csrf_open(method, url, async);
- },
- csrf_open: function(method, url, async, username, password) {
- if (username) return this.csrf.open(method, url, async, username, password);
- else return this.csrf.open(method, url, async);
- },
-
- send: function(data) {
- if (!this.csrf_isPost) return this.csrf_send(data);
- prepend = csrfMagicName + '=' + csrfMagicToken + '&';
- if (this.csrf_purportedLength === undefined) {
- this.csrf_setRequestHeader("Content-length", this.csrf_purportedLength + prepend.length);
- delete this.csrf_purportedLength;
- }
- delete this.csrf_isPost;
- return this.csrf_send(prepend + data);
- },
- csrf_send: function(data) {
- return this.csrf.send(data);
- },
-
- setRequestHeader: function(header, value) {
- // We have to auto-set this at the end, since we don't know how long the
- // nonce is when added to the data.
- if (this.csrf_isPost && header == "Content-length") {
- this.csrf_purportedLength = value;
- return;
- }
- return this.csrf_setRequestHeader(header, value);
- },
- csrf_setRequestHeader: function(header, value) {
- return this.csrf.setRequestHeader(header, value);
- },
-
- abort: function() {
- return this.csrf.abort();
- },
- getAllResponseHeaders: function() {
- return this.csrf.getAllResponseHeaders();
- },
- getResponseHeader: function(header) {
- return this.csrf.getResponseHeader(header);
- } // ,
-}
-
-// proprietary
-CsrfMagic.prototype._updateProps = function() {
- this.readyState = this.csrf.readyState;
- if (this.readyState == 4) {
- this.responseText = this.csrf.responseText;
- this.responseXML = this.csrf.responseXML;
- this.status = this.csrf.status;
- this.statusText = this.csrf.statusText;
- }
-}
-CsrfMagic.process = function(base) {
- var prepend = csrfMagicName + '=' + csrfMagicToken;
- if (base) return prepend + '&' + base;
- return prepend;
-}
-// callback function for when everything on the page has loaded
-CsrfMagic.end = function() {
- // This rewrites forms AGAIN, so in case buffering didn't work this
- // certainly will.
- forms = document.getElementsByTagName('form');
- for (var i = 0; i < forms.length; i++) {
- form = forms[i];
- if (form.method.toUpperCase() !== 'POST') continue;
- if (form.elements[csrfMagicName]) continue;
- var input = document.createElement('input');
- input.setAttribute('name', csrfMagicName);
- input.setAttribute('value', csrfMagicToken);
- input.setAttribute('type', 'hidden');
- form.appendChild(input);
- }
-}
-
-// Sets things up for Mozilla/Opera/nice browsers
-// We very specifically match against Internet Explorer, since they haven't
-// implemented prototypes correctly yet.
-if (window.XMLHttpRequest && window.XMLHttpRequest.prototype && '\v' != 'v') {
- var x = XMLHttpRequest.prototype;
- var c = CsrfMagic.prototype;
-
- // Save the original functions
- x.csrf_open = x.open;
- x.csrf_send = x.send;
- x.csrf_setRequestHeader = x.setRequestHeader;
-
- // Notice that CsrfMagic is itself an instantiatable object, but only
- // open, send and setRequestHeader are necessary as decorators.
- x.open = c.open;
- x.send = c.send;
- x.setRequestHeader = c.setRequestHeader;
-} else {
- // The only way we can do this is by modifying a library you have been
- // using. We support YUI, script.aculo.us, prototype, MooTools,
- // jQuery, Ext and Dojo.
- if (window.jQuery) {
- // jQuery didn't implement a new XMLHttpRequest function, so we have
- // to do this the hard way.
- jQuery.csrf_ajax = jQuery.ajax;
- jQuery.ajax = function( s ) {
- if (s.type && s.type.toUpperCase() == 'POST') {
- s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
- if ( s.data && s.processData && typeof s.data != "string" ) {
- s.data = jQuery.param(s.data);
- }
- s.data = CsrfMagic.process(s.data);
- }
- return jQuery.csrf_ajax( s );
- }
- }
- if (window.Prototype) {
- // This works for script.aculo.us too
- Ajax.csrf_getTransport = Ajax.getTransport;
- Ajax.getTransport = function() {
- return new CsrfMagic(Ajax.csrf_getTransport());
- }
- }
- if (window.MooTools) {
- Browser.csrf_Request = Browser.Request;
- Browser.Request = function () {
- return new CsrfMagic(Browser.csrf_Request());
- }
- }
- if (window.YAHOO) {
- // old YUI API
- YAHOO.util.Connect.csrf_createXhrObject = YAHOO.util.Connect.createXhrObject;
- YAHOO.util.Connect.createXhrObject = function (transaction) {
- obj = YAHOO.util.Connect.csrf_createXhrObject(transaction);
- obj.conn = new CsrfMagic(obj.conn);
- return obj;
- }
- }
- if (window.Ext) {
- // Ext can use other js libraries as loaders, so it has to come last
- // Ext's implementation is pretty identical to Yahoo's, but we duplicate
- // it for comprehensiveness's sake.
- Ext.lib.Ajax.csrf_createXhrObject = Ext.lib.Ajax.createXhrObject;
- Ext.lib.Ajax.createXhrObject = function (transaction) {
- obj = Ext.lib.Ajax.csrf_createXhrObject(transaction);
- obj.conn = new CsrfMagic(obj.conn);
- return obj;
- }
- }
- if (window.dojo) {
- // NOTE: this doesn't work with latest dojo
- dojo.csrf__xhrObj = dojo._xhrObj;
- dojo._xhrObj = function () {
- return new CsrfMagic(dojo.csrf__xhrObj());
- }
- }
-}
diff --git a/usr/local/www/csrf/csrf-magic.php b/usr/local/www/csrf/csrf-magic.php
deleted file mode 100644
index 58f4eba..0000000
--- a/usr/local/www/csrf/csrf-magic.php
+++ /dev/null
@@ -1,403 +0,0 @@
-<?php
-
-/**
- * @file
- *
- * csrf-magic is a PHP library that makes adding CSRF-protection to your
- * web applications a snap. No need to modify every form or create a database
- * of valid nonces; just include this file at the top of every
- * web-accessible page (or even better, your common include file included
- * in every page), and forget about it! (There are, of course, configuration
- * options for advanced users).
- *
- * This library is PHP4 and PHP5 compatible.
- */
-
-// CONFIGURATION:
-
-/**
- * By default, when you include this file csrf-magic will automatically check
- * and exit if the CSRF token is invalid. This will defer executing
- * csrf_check() until you're ready. You can also pass false as a parameter to
- * that function, in which case the function will not exit but instead return
- * a boolean false if the CSRF check failed. This allows for tighter integration
- * with your system.
- */
-$GLOBALS['csrf']['defer'] = false;
-
-/**
- * This is the amount of seconds you wish to allow before any token becomes
- * invalid; the default is two hours, which should be more than enough for
- * most websites.
- */
-$GLOBALS['csrf']['expires'] = 7200;
-
-/**
- * Callback function to execute when there's the CSRF check fails and
- * $fatal == true (see csrf_check). This will usually output an error message
- * about the failure.
- */
-$GLOBALS['csrf']['callback'] = 'csrf_callback';
-
-/**
- * Whether or not to include our JavaScript library which also rewrites
- * AJAX requests on this domain. Set this to the web path. This setting only works
- * with supported JavaScript libraries in Internet Explorer; see README.txt for
- * a list of supported libraries.
- */
-$GLOBALS['csrf']['rewrite-js'] = false;
-
-/**
- * A secret key used when hashing items. Please generate a random string and
- * place it here. If you change this value, all previously generated tokens
- * will become invalid.
- */
-$GLOBALS['csrf']['secret'] = '';
-// nota bene: library code should use csrf_get_secret() and not access
-// this global directly
-
-/**
- * Set this to false to disable csrf-magic's output handler, and therefore,
- * its rewriting capabilities. If you're serving non HTML content, you should
- * definitely set this false.
- */
-$GLOBALS['csrf']['rewrite'] = true;
-
-/**
- * Whether or not to use IP addresses when binding a user to a token. This is
- * less reliable and less secure than sessions, but is useful when you need
- * to give facilities to anonymous users and do not wish to maintain a database
- * of valid keys.
- */
-$GLOBALS['csrf']['allow-ip'] = true;
-
-/**
- * If this information is available, use the cookie by this name to determine
- * whether or not to allow the request. This is a shortcut implementation
- * very similar to 'key', but we randomly set the cookie ourselves.
- */
-$GLOBALS['csrf']['cookie'] = '__csrf_cookie';
-
-/**
- * If this information is available, set this to a unique identifier (it
- * can be an integer or a unique username) for the current "user" of this
- * application. The token will then be globally valid for all of that user's
- * operations, but no one else. This requires that 'secret' be set.
- */
-$GLOBALS['csrf']['user'] = false;
-
-/**
- * This is an arbitrary secret value associated with the user's session. This
- * will most probably be the contents of a cookie, as an attacker cannot easily
- * determine this information. Warning: If the attacker knows this value, they
- * can easily spoof a token. This is a generic implementation; sessions should
- * work in most cases.
- *
- * Why would you want to use this? Lets suppose you have a squid cache for your
- * website, and the presence of a session cookie bypasses it. Let's also say
- * you allow anonymous users to interact with the website; submitting forms
- * and AJAX. Previously, you didn't have any CSRF protection for anonymous users
- * and so they never got sessions; you don't want to start using sessions either,
- * otherwise you'll bypass the Squid cache. Setup a different cookie for CSRF
- * tokens, and have Squid ignore that cookie for get requests, for anonymous
- * users. (If you haven't guessed, this scheme was(?) used for MediaWiki).
- */
-$GLOBALS['csrf']['key'] = false;
-
-/**
- * The name of the magic CSRF token that will be placed in all forms, i.e.
- * the contents of <input type="hidden" name="$name" value="CSRF-TOKEN" />
- */
-$GLOBALS['csrf']['input-name'] = '__csrf_magic';
-
-/**
- * Set this to false if your site must work inside of frame/iframe elements,
- * but do so at your own risk: this configuration protects you against CSS
- * overlay attacks that defeat tokens.
- */
-$GLOBALS['csrf']['frame-breaker'] = true;
-
-/**
- * Whether or not CSRF Magic should be allowed to start a new session in order
- * to determine the key.
- */
-$GLOBALS['csrf']['auto-session'] = true;
-
-/**
- * Whether or not csrf-magic should produce XHTML style tags.
- */
-$GLOBALS['csrf']['xhtml'] = true;
-
-// FUNCTIONS:
-
-// Don't edit this!
-$GLOBALS['csrf']['version'] = '1.0.4';
-
-/**
- * Rewrites <form> on the fly to add CSRF tokens to them. This can also
- * inject our JavaScript library.
- */
-function csrf_ob_handler($buffer, $flags) {
- // Even though the user told us to rewrite, we should do a quick heuristic
- // to check if the page is *actually* HTML. We don't begin rewriting until
- // we hit the first <html tag.
- static $is_html = false;
- if (!$is_html) {
- // not HTML until proven otherwise
- if (stripos($buffer, '<html') !== false) {
- $is_html = true;
- } else {
- return $buffer;
- }
- }
- $tokens = csrf_get_tokens();
- $name = $GLOBALS['csrf']['input-name'];
- $endslash = $GLOBALS['csrf']['xhtml'] ? ' /' : '';
- $input = "<input type='hidden' name='$name' value=\"$tokens\"$endslash>";
- $buffer = preg_replace('#(<form[^>]*method\s*=\s*["\']post["\'][^>]*>)#i', '$1' . $input, $buffer);
- if ($GLOBALS['csrf']['frame-breaker']) {
- $buffer = str_ireplace('</head>', '<script type="text/javascript">if (top != self) {top.location.href = self.location.href;}</script></head>', $buffer);
- }
- if ($js = $GLOBALS['csrf']['rewrite-js']) {
- $buffer = str_ireplace(
- '</head>',
- '<script type="text/javascript">'.
- 'var csrfMagicToken = "'.$tokens.'";'.
- 'var csrfMagicName = "'.$name.'";</script>'.
- '<script src="'.$js.'" type="text/javascript"></script></head>',
- $buffer
- );
- $script = '<script type="text/javascript">CsrfMagic.end();</script>';
- $buffer = str_ireplace('</body>', $script . '</body>', $buffer, $count);
- if (!$count) {
- $buffer .= $script;
- }
- }
- return $buffer;
-}
-
-/**
- * Checks if this is a post request, and if it is, checks if the nonce is valid.
- * @param bool $fatal Whether or not to fatally error out if there is a problem.
- * @return True if check passes or is not necessary, false if failure.
- */
-function csrf_check($fatal = true) {
- if ($_SERVER['REQUEST_METHOD'] !== 'POST') return true;
- csrf_start();
- $name = $GLOBALS['csrf']['input-name'];
- $ok = false;
- $tokens = '';
- do {
- if (!isset($_POST[$name])) break;
- // we don't regenerate a token and check it because some token creation
- // schemes are volatile.
- $tokens = $_POST[$name];
- if (!csrf_check_tokens($tokens)) break;
- $ok = true;
- } while (false);
- if ($fatal && !$ok) {
- $callback = $GLOBALS['csrf']['callback'];
- if (trim($tokens, 'A..Za..z0..9:;,') !== '') $tokens = 'hidden';
- $callback($tokens);
- exit;
- }
- return $ok;
-}
-
-/**
- * Retrieves a valid token(s) for a particular context. Tokens are separated
- * by semicolons.
- */
-function csrf_get_tokens() {
- $has_cookies = !empty($_COOKIE);
-
- // $ip implements a composite key, which is sent if the user hasn't sent
- // any cookies. It may or may not be used, depending on whether or not
- // the cookies "stick"
- $secret = csrf_get_secret();
- if (!$has_cookies && $secret) {
- // :TODO: Harden this against proxy-spoofing attacks
- $ip = ';ip:' . csrf_hash($_SERVER['IP_ADDRESS']);
- } else {
- $ip = '';
- }
- csrf_start();
-
- // These are "strong" algorithms that don't require per se a secret
- if (session_id()) return 'sid:' . csrf_hash(session_id()) . $ip;
- if ($GLOBALS['csrf']['cookie']) {
- $val = csrf_generate_secret();
- setcookie($GLOBALS['csrf']['cookie'], $val);
- return 'cookie:' . csrf_hash($val) . $ip;
- }
- if ($GLOBALS['csrf']['key']) return 'key:' . csrf_hash($GLOBALS['csrf']['key']) . $ip;
- // These further algorithms require a server-side secret
- if (!$secret) return 'invalid';
- if ($GLOBALS['csrf']['user'] !== false) {
- return 'user:' . csrf_hash($GLOBALS['csrf']['user']);
- }
- if ($GLOBALS['csrf']['allow-ip']) {
- return ltrim($ip, ';');
- }
- return 'invalid';
-}
-
-function csrf_flattenpost($data) {
- $ret = array();
- foreach($data as $n => $v) {
- $ret = array_merge($ret, csrf_flattenpost2(1, $n, $v));
- }
- return $ret;
-}
-function csrf_flattenpost2($level, $key, $data) {
- if(!is_array($data)) return array($key => $data);
- $ret = array();
- foreach($data as $n => $v) {
- $nk = $level >= 1 ? $key."[$n]" : "[$n]";
- $ret = array_merge($ret, csrf_flattenpost2($level+1, $nk, $v));
- }
- return $ret;
-}
-
-/**
- * @param $tokens is safe for HTML consumption
- */
-function csrf_callback($tokens) {
- // (yes, $tokens is safe to echo without escaping)
- header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
- $data = '';
- foreach (csrf_flattenpost($_POST) as $key => $value) {
- if ($key == $GLOBALS['csrf']['input-name']) continue;
- $data .= '<input type="hidden" name="'.htmlspecialchars($key).'" value="'.htmlspecialchars($value).'" />';
- }
- echo "<html><head><title>CSRF check failed</title></head>
- <body>
- <p>CSRF check failed. Your form session may have expired, or you may not have
- cookies enabled.</p>
- <form method='post' action=''>$data<input type='submit' value='Try again' /></form>
- <p>Debug: $tokens</p></body></html>
-";
-}
-
-/**
- * Checks if a composite token is valid. Outward facing code should use this
- * instead of csrf_check_token()
- */
-function csrf_check_tokens($tokens) {
- if (is_string($tokens)) $tokens = explode(';', $tokens);
- foreach ($tokens as $token) {
- if (csrf_check_token($token)) return true;
- }
- return false;
-}
-
-/**
- * Checks if a token is valid.
- */
-function csrf_check_token($token) {
- if (strpos($token, ':') === false) return false;
- list($type, $value) = explode(':', $token, 2);
- if (strpos($value, ',') === false) return false;
- list($x, $time) = explode(',', $token, 2);
- if ($GLOBALS['csrf']['expires']) {
- if (time() > $time + $GLOBALS['csrf']['expires']) return false;
- }
- switch ($type) {
- case 'sid':
- return $value === csrf_hash(session_id(), $time);
- case 'cookie':
- $n = $GLOBALS['csrf']['cookie'];
- if (!$n) return false;
- if (!isset($_COOKIE[$n])) return false;
- return $value === csrf_hash($_COOKIE[$n], $time);
- case 'key':
- if (!$GLOBALS['csrf']['key']) return false;
- return $value === csrf_hash($GLOBALS['csrf']['key'], $time);
- // We could disable these 'weaker' checks if 'key' was set, but
- // that doesn't make me feel good then about the cookie-based
- // implementation.
- case 'user':
- if (!csrf_get_secret()) return false;
- if ($GLOBALS['csrf']['user'] === false) return false;
- return $value === csrf_hash($GLOBALS['csrf']['user'], $time);
- case 'ip':
- if (!csrf_get_secret()) return false;
- // do not allow IP-based checks if the username is set, or if
- // the browser sent cookies
- if ($GLOBALS['csrf']['user'] !== false) return false;
- if (!empty($_COOKIE)) return false;
- if (!$GLOBALS['csrf']['allow-ip']) return false;
- return $value === csrf_hash($_SERVER['IP_ADDRESS'], $time);
- }
- return false;
-}
-
-/**
- * Sets a configuration value.
- */
-function csrf_conf($key, $val) {
- if (!isset($GLOBALS['csrf'][$key])) {
- trigger_error('No such configuration ' . $key, E_USER_WARNING);
- return;
- }
- $GLOBALS['csrf'][$key] = $val;
-}
-
-/**
- * Starts a session if we're allowed to.
- */
-function csrf_start() {
- if ($GLOBALS['csrf']['auto-session'] && !session_id()) {
- session_start();
- }
-}
-
-/**
- * Retrieves the secret, and generates one if necessary.
- */
-function csrf_get_secret() {
- if ($GLOBALS['csrf']['secret']) return $GLOBALS['csrf']['secret'];
- $dir = dirname(__FILE__);
- $file = $dir . '/csrf-secret.php';
- $secret = '';
- if (file_exists($file)) {
- include $file;
- return $secret;
- }
- if (is_writable($dir)) {
- $secret = csrf_generate_secret();
- $fh = fopen($file, 'w');
- fwrite($fh, '<?php $secret = "'.$secret.'";' . PHP_EOL);
- fclose($fh);
- return $secret;
- }
- return '';
-}
-
-/**
- * Generates a random string as the hash of time, microtime, and mt_rand.
- */
-function csrf_generate_secret($len = 32) {
- $r = '';
- for ($i = 0; $i < 32; $i++) {
- $r .= chr(mt_rand(0, 255));
- }
- $r .= time() . microtime();
- return sha1($r);
-}
-
-/**
- * Generates a hash/expiry double. If time isn't set it will be calculated
- * from the current time.
- */
-function csrf_hash($value, $time = null) {
- if (!$time) $time = time();
- return sha1(csrf_get_secret() . $value . $time) . ',' . $time;
-}
-
-// Load user configuration
-if (function_exists('csrf_startup')) csrf_startup();
-// Initialize our handler
-if ($GLOBALS['csrf']['rewrite']) ob_start('csrf_ob_handler');
-// Perform check
-if (!$GLOBALS['csrf']['defer']) csrf_check();
diff --git a/usr/local/www/css/table.css b/usr/local/www/css/table.css
deleted file mode 100644
index 3393db3..0000000
--- a/usr/local/www/css/table.css
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Element CSS Definitions for (MultiRow-)tables
-if theme changes are needed include a table.css in the /themes/yourtheme/ */
-.listMR {
- background-color: #DDD;
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listMRlr {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listMRr {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listMRodd {
- background-color: #FFFFFF;
-}
-.listMReven {
- background-color: #F0F0F0;
-}
-.listMRDescriptionL {
- border-right: none;
- border-bottom: 2px solid #999999;
-}
-.listMRDescriptionR {
- border-left: none;
- border-bottom: 2px solid #999999;
-}
-.ellipsis {
- overflow: hidden;
- text-overflow: ellipsis;
-}
diff --git a/usr/local/www/diag_arp.php b/usr/local/www/diag_arp.php
deleted file mode 100644
index e5615f4..0000000
--- a/usr/local/www/diag_arp.php
+++ /dev/null
@@ -1,365 +0,0 @@
-<?php
-/*
- diag_arp.php
- part of the pfSense project (https://www.pfsense.org)
- Copyright (C) 2004-2009 Scott Ullrich <sullrich@gmail.com>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2005 Paul Taylor (paultaylor@winndixie.com) and Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /bin/cat /usr/sbin/arp
- pfSense_MODULE: arp
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-arptable
-##|*NAME=Diagnostics: ARP Table page
-##|*DESCR=Allow access to the 'Diagnostics: ARP Table' page.
-##|*MATCH=diag_arp.php*
-##|-PRIV
-
-@ini_set('zlib.output_compression', 0);
-@ini_set('implicit_flush', 1);
-
-require("guiconfig.inc");
-
-function leasecmp($a, $b) {
- return strcmp($a[$_GET['order']], $b[$_GET['order']]);
-}
-
-function adjust_gmt($dt) {
- $ts = strtotime($dt . " GMT");
- return strftime("%Y/%m/%d %H:%M:%S", $ts);
-}
-
-function remove_duplicate($array, $field) {
- foreach ($array as $sub) {
- $cmp[] = $sub[$field];
- }
- $unique = array_unique($cmp);
- foreach ($unique as $k => $rien) {
- $new[] = $array[$k];
- }
- return $new;
-}
-
-// Define path to AWK
-$awk = "/usr/bin/awk";
-
-// Read in leases file
-$leasesfile = "{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases";
-
-/* this pattern sticks comments into a single array item */
-$cleanpattern = "'{ gsub(\"#.*\", \"\");} { gsub(\";\", \"\"); print;}'";
-
-/* We then split the leases file by } */
-$splitpattern = "'BEGIN { RS=\"}\";} {for (i=1; i<=NF; i++) printf \"%s \", \$i; printf \"}\\n\";}'";
-
-/* stuff the leases file in a proper format into an array by line */
-exec("cat {$leasesfile} | {$awk} {$cleanpattern} | {$awk} {$splitpattern}", $leases_content);
-$leases_count = count($leases_content);
-
-$pools = array();
-$leases = array();
-$i = 0;
-$l = 0;
-$p = 0;
-// Put everything together again
-while ($i < $leases_count) {
- /* split the line by space */
- $data = explode(" ", $leases_content[$i]);
- /* walk the fields */
- $f = 0;
- $fcount = count($data);
- /* with less then 20 fields there is nothing useful */
- if ($fcount < 20) {
- $i++;
- continue;
- }
- while ($f < $fcount) {
- switch ($data[$f]) {
- case "failover":
- $pools[$p]['name'] = $data[$f+2];
- $pools[$p]['mystate'] = $data[$f+7];
- $pools[$p]['peerstate'] = $data[$f+14];
- $pools[$p]['mydate'] = $data[$f+10];
- $pools[$p]['mydate'] .= " " . $data[$f+11];
- $pools[$p]['peerdate'] = $data[$f+17];
- $pools[$p]['peerdate'] .= " " . $data[$f+18];
- $p++;
- $i++;
- continue 3;
- case "lease":
- $leases[$l]['ip'] = $data[$f+1];
- $leases[$l]['type'] = "dynamic";
- $f = $f+2;
- break;
- case "starts":
- $leases[$l]['start'] = $data[$f+2];
- $leases[$l]['start'] .= " " . $data[$f+3];
- $f = $f+3;
- break;
- case "ends":
- $leases[$l]['end'] = $data[$f+2];
- $leases[$l]['end'] .= " " . $data[$f+3];
- $f = $f+3;
- break;
- case "tstp":
- $f = $f+3;
- break;
- case "tsfp":
- $f = $f+3;
- break;
- case "atsfp":
- $f = $f+3;
- break;
- case "cltt":
- $f = $f+3;
- break;
- case "binding":
- switch ($data[$f+2]) {
- case "active":
- $leases[$l]['act'] = "active";
- break;
- case "free":
- $leases[$l]['act'] = "expired";
- $leases[$l]['online'] = "offline";
- break;
- case "backup":
- $leases[$l]['act'] = "reserved";
- $leases[$l]['online'] = "offline";
- break;
- }
- $f = $f+1;
- break;
- case "next":
- /* skip the next binding statement */
- $f = $f+3;
- break;
- case "rewind":
- /* skip the rewind binding statement */
- $f = $f+3;
- break;
- case "hardware":
- $leases[$l]['mac'] = $data[$f+2];
- /* check if it's online and the lease is active */
- if ($leases[$l]['act'] == "active") {
- $online = exec("/usr/sbin/arp -an |/usr/bin/awk '/{$leases[$l]['ip']}/ {print}'|wc -l");
- if ($online == 1) {
- $leases[$l]['online'] = 'online';
- } else {
- $leases[$l]['online'] = 'offline';
- }
- }
- $f = $f+2;
- break;
- case "client-hostname":
- if ($data[$f+1] <> "") {
- $leases[$l]['hostname'] = preg_replace('/"/', '', $data[$f+1]);
- } else {
- $hostname = gethostbyaddr($leases[$l]['ip']);
- if ($hostname <> "") {
- $leases[$l]['hostname'] = $hostname;
- }
- }
- $f = $f+1;
- break;
- case "uid":
- $f = $f+1;
- break;
- }
- $f++;
- }
- $l++;
- $i++;
-}
-
-/* remove duplicate items by mac address */
-if (count($leases) > 0) {
- $leases = remove_duplicate($leases, "ip");
-}
-
-if (count($pools) > 0) {
- $pools = remove_duplicate($pools, "name");
- asort($pools);
-}
-
-// Put this in an easy to use form
-$dhcpmac = array();
-$dhcpip = array();
-
-foreach ($leases as $value) {
- $dhcpmac[$value['mac']] = $value['hostname'];
- $dhcpip[$value['ip']] = $value['hostname'];
-}
-
-exec("/usr/sbin/arp -an", $rawdata);
-
-$i = 0;
-
-/* if list */
-$ifdescrs = get_configured_interface_with_descr();
-
-foreach ($ifdescrs as $key => $interface) {
- $thisif = convert_friendly_interface_to_real_interface_name($key);
- if (!empty($thisif)) {
- $hwif[$thisif] = $interface;
- }
-}
-
-$data = array();
-foreach ($rawdata as $line) {
- $elements = explode(' ', $line);
-
- if ($elements[3] != "(incomplete)") {
- $arpent = array();
- $arpent['ip'] = trim(str_replace(array('(', ')'), '', $elements[1]));
- $arpent['mac'] = trim($elements[3]);
- $arpent['interface'] = trim($elements[5]);
- $data[] = $arpent;
- }
-}
-
-function _getHostName($mac, $ip) {
- global $dhcpmac, $dhcpip;
-
- if ($dhcpmac[$mac]) {
- return $dhcpmac[$mac];
- } else if ($dhcpip[$ip]) {
- return $dhcpip[$ip];
- } else {
- exec("host -W 1 " . escapeshellarg($ip), $output);
- if (preg_match('/.*pointer ([A-Za-z_0-9.-]+)\..*/', $output[0], $matches)) {
- if ($matches[1] <> $ip) {
- return $matches[1];
- }
- }
- }
- return "";
-}
-
-$pgtitle = array(gettext("Diagnostics"), gettext("ARP Table"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-
-<?php include("fbegin.inc"); ?>
-
-<div id="loading">
- <img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" /><?= gettext("Loading, please wait..."); ?>
- <p>&nbsp;</p>
-</div>
-
-<?php
-
-// Flush buffers out to client so that they see Loading, please wait....
-for ($i = 0; $i < ob_get_level(); $i++) {
- ob_end_flush();
-}
-ob_implicit_flush(1);
-
-// Resolve hostnames and replace Z_ with "". The intention
-// is to sort the list by hostnames, alpha and then the non
-// resolvable addresses will appear last in the list.
-$dnsavailable=1;
-$dns = trim(_getHostName("", "8.8.8.8"));
-if ($dns == "") {
- $dns = trim(_getHostName("", "8.8.4.4"));
- if ($dns == "") {
- $dnsavailable = 0;
- }
-}
-
-foreach ($data as &$entry) {
- if ($dnsavailable) {
- $dns = trim(_getHostName($entry['mac'], $entry['ip']));
- } else {
- $dns="";
- }
- if (trim($dns)) {
- $entry['dnsresolve'] = "$dns";
- } else {
- $entry['dnsresolve'] = "Z_ ";
- }
-}
-
-// Sort the data alpha first
-$data = msort($data, "dnsresolve");
-
-// Load MAC-Manufacturer table
-$mac_man = load_mac_manufacturer_table();
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag arp">
- <tr>
- <td>
- <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="tabcont">
- <tr>
- <td class="listhdrr"><?= gettext("IP address"); ?></td>
- <td class="listhdrr"><?= gettext("MAC address"); ?></td>
- <td class="listhdrr"><?= gettext("Hostname"); ?></td>
- <td class="listhdr"><?= gettext("Interface"); ?></td>
- <td class="list"></td>
- </tr>
- <?php foreach ($data as $entry): ?>
- <tr>
- <td class="listlr"><?=$entry['ip'];?></td>
- <td class="listr">
- <?php
- $mac=trim($entry['mac']);
- $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
- print $mac;
- if (isset($mac_man[$mac_hi])) { print "<br /><font size=\"-2\"><i>{$mac_man[$mac_hi]}</i></font>"; }
- ?>
- </td>
- <td class="listr">
- <?php
- echo trim(str_replace("Z_ ", "", $entry['dnsresolve']));
- ?>
- </td>
- <td class="listr"><?=$hwif[$entry['interface']];?></td>
- </tr>
- <?php endforeach; ?>
- </table>
- </td>
- </tr>
- <tr>
- <td><br /><?= gettext("NOTE: Local IPv6 peers use") ?> <a href="diag_ndp.php"><?= gettext("NDP") ?></a> <?= gettext("instead of ARP") ?>.</td>
- </tr>
-</table>
-
-<?php include("fend.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
- jQuery('#loading').html('');
-//]]>
-</script>
-</body>
-</html>
diff --git a/usr/local/www/diag_authentication.php b/usr/local/www/diag_authentication.php
deleted file mode 100644
index d0b81d5..0000000
--- a/usr/local/www/diag_authentication.php
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php
-/*
- diag_authentication.php
- part of the pfSense project (https://www.pfsense.org)
- Copyright (C) 2010 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: auth
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-authentication
-##|*NAME=Diagnostics: Authentication page
-##|*DESCR=Allow access to the 'Diagnostics: Authentication' page.
-##|*MATCH=diag_authentication.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("PEAR.inc");
-require_once("radius.inc");
-
-if ($_POST) {
- $pconfig = $_POST;
- unset($input_errors);
-
- $authcfg = auth_get_authserver($_POST['authmode']);
- if (!$authcfg) {
- $input_errors[] = $_POST['authmode'] . " " . gettext("is not a valid authentication server");
- }
-
- if (empty($_POST['username']) || empty($_POST['passwordfld'])) {
- $input_errors[] = gettext("A username and password must be specified.");
- }
-
- if (!$input_errors) {
- $attributes = array();
- if (authenticate_user($_POST['username'], $_POST['passwordfld'], $authcfg, $attributes)) {
- $savemsg = gettext("User") . ": " . $_POST['username'] . " " . gettext("authenticated successfully.");
- $groups = getUserGroups($_POST['username'], $authcfg, $attributes);
- $savemsg .= "<br />" . gettext("This user is a member of these groups") . ": <br />";
- foreach ($groups as $group) {
- $savemsg .= "{$group} ";
- }
- } else {
- $input_errors[] = gettext("Authentication failed.");
- }
- }
-}
-$pgtitle = array(gettext("Diagnostics"), gettext("Authentication"));
-$shortcut_section = "authentication";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors);?>
-<?php if ($savemsg) print_info_box($savemsg);?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag authentication">
- <tr>
- <td class="tabnavtbl"></td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <form id="iform" name="iform" action="diag_authentication.php" method="post">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="6" summary="test">
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Authentication Server"); ?></td>
- <td width="78%" class="vtable">
- <select name="authmode" id="authmode" class="formselect" >
- <?php
- $auth_servers = auth_get_authserver_list();
- foreach ($auth_servers as $auth_server):
- $selected = "";
- if ($auth_server['name'] == $pconfig['authmode']) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$auth_server['name'];?>" <?=$selected;?>><?=$auth_server['name'];?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Username"); ?></td>
- <td width="78%" class="vtable">
- <input class="formfld unknown" size="20" id="username" name="username" value="<?=htmlspecialchars($pconfig['username']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Password"); ?></td>
- <td width="78%" class="vtable">
- <input class="formfld pwd" type="password" size="20" id="passwordfld" name="passwordfld" value="<?=htmlspecialchars($pconfig['passwordfld']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="save" name="save" type="submit" class="formbtn" value="<?=gettext("Test");?>" />
- </td>
- </tr>
- </table>
- </form>
- </div>
- </td>
- </tr>
-</table>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_backup.php b/usr/local/www/diag_backup.php
deleted file mode 100644
index 6e454a4..0000000
--- a/usr/local/www/diag_backup.php
+++ /dev/null
@@ -1,818 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_backup.php
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /sbin/shutdown
- pfSense_MODULE: backup
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-backup/restore
-##|*NAME=Diagnostics: Backup/restore page
-##|*DESCR=Allow access to the 'Diagnostics: Backup/restore' page.
-##|*MATCH=diag_backup.php*
-##|-PRIV
-
-/* Allow additional execution time 0 = no limit. */
-ini_set('max_execution_time', '0');
-ini_set('max_input_time', '0');
-
-/* omit no-cache headers because it confuses IE with file downloads */
-$omit_nocacheheaders = true;
-$nocsrf = true;
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-$rrddbpath = "/var/db/rrd";
-$rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool";
-
-function rrd_data_xml() {
- global $rrddbpath;
- global $rrdtool;
-
- $result = "\t<rrddata>\n";
- $rrd_files = glob("{$rrddbpath}/*.rrd");
- $xml_files = array();
- foreach ($rrd_files as $rrd_file) {
- $basename = basename($rrd_file);
- $xml_file = preg_replace('/\.rrd$/', ".xml", $rrd_file);
- exec("$rrdtool dump '{$rrd_file}' '{$xml_file}'");
- $xml_data = file_get_contents($xml_file);
- unlink($xml_file);
- if ($xml_data !== false) {
- $result .= "\t\t<rrddatafile>\n";
- $result .= "\t\t\t<filename>{$basename}</filename>\n";
- $result .= "\t\t\t<xmldata>" . base64_encode(gzdeflate($xml_data)) . "</xmldata>\n";
- $result .= "\t\t</rrddatafile>\n";
- }
- }
- $result .= "\t</rrddata>\n";
- return $result;
-}
-
-function restore_rrddata() {
- global $config, $g, $rrdtool, $input_errors;
- foreach ($config['rrddata']['rrddatafile'] as $rrd) {
- if ($rrd['xmldata']) {
- $rrd_file = "{$g['vardb_path']}/rrd/{$rrd['filename']}";
- $xml_file = preg_replace('/\.rrd$/', ".xml", $rrd_file);
- if (file_put_contents($xml_file, gzinflate(base64_decode($rrd['xmldata']))) === false) {
- log_error("Cannot write $xml_file");
- continue;
- }
- $output = array();
- $status = null;
- exec("$rrdtool restore -f '{$xml_file}' '{$rrd_file}'", $output, $status);
- if ($status) {
- log_error("rrdtool restore -f '{$xml_file}' '{$rrd_file}' failed returning {$status}.");
- continue;
- }
- unlink($xml_file);
- } else if ($rrd['data']) {
- $rrd_file = "{$g['vardb_path']}/rrd/{$rrd['filename']}";
- $rrd_fd = fopen($rrd_file, "w");
- if (!$rrd_fd) {
- log_error("Cannot write $rrd_file");
- continue;
- }
- $data = base64_decode($rrd['data']);
- /* Try to decompress the data. */
- $dcomp = @gzinflate($data);
- if ($dcomp) {
- /* If the decompression worked, write the decompressed data */
- if (fwrite($rrd_fd, $dcomp) === false) {
- log_error("fwrite $rrd_file failed");
- continue;
- }
- } else {
- /* If the decompression failed, it wasn't compressed, so write raw data */
- if (fwrite($rrd_fd, $data) === false) {
- log_error("fwrite $rrd_file failed");
- continue;
- }
- }
- if (fclose($rrd_fd) === false) {
- log_error("fclose $rrd_file failed");
- continue;
- }
- }
- }
-}
-
-function add_base_packages_menu_items() {
- global $g, $config;
- $base_packages = explode(",", $g['base_packages']);
- $modified_config = false;
- foreach ($base_packages as $bp) {
- $basepkg_path = "/usr/local/pkg/{$bp}";
- $tmpinfo = pathinfo($basepkg_path, PATHINFO_EXTENSION);
- if ($tmpinfo['extension'] == "xml" && file_exists($basepkg_path)) {
- $pkg_config = parse_xml_config_pkg($basepkg_path, "packagegui");
- if ($pkg_config['menu'] != "") {
- if (is_array($pkg_config['menu'])) {
- foreach ($pkg_config['menu'] as $menu) {
- if (is_array($config['installedpackages']['menu'])) {
- foreach ($config['installedpackages']['menu'] as $amenu) {
- if ($amenu['name'] == $menu['name']) {
- continue;
- }
- }
- }
- $config['installedpackages']['menu'][] = $menu;
- $modified_config = true;
- }
- }
- $static_output .= "done.\n";
- update_output_window($static_output);
- }
- }
- }
- if ($modified_config) {
- write_config(gettext("Restored base_package menus after configuration restore."));
- $config = parse_config(true);
- }
-}
-
-function remove_bad_chars($string) {
- return preg_replace('/[^a-z_0-9]/i', '', $string);
-}
-
-function check_and_returnif_section_exists($section) {
- global $config;
- if (is_array($config[$section])) {
- return true;
- }
- return false;
-}
-
-function spit_out_select_items($name, $showall) {
- global $config;
-
- $areas = array("aliases" => gettext("Aliases"),
- "captiveportal" => gettext("Captive Portal"),
- "voucher" => gettext("Captive Portal Vouchers"),
- "dnsmasq" => gettext("DNS Forwarder"),
- "unbound" => gettext("DNS Resolver"),
- "dhcpd" => gettext("DHCP Server"),
- "dhcpdv6" => gettext("DHCPv6 Server"),
- "filter" => gettext("Firewall Rules"),
- "interfaces" => gettext("Interfaces"),
- "ipsec" => gettext("IPSEC"),
- "nat" => gettext("NAT"),
- "openvpn" => gettext("OpenVPN"),
- "installedpackages" => gettext("Package Manager"),
- "pptpd" => gettext("PPTP Server"),
- "rrddata" => gettext("RRD Data"),
- "cron" => gettext("Scheduled Tasks"),
- "syslog" => gettext("Syslog"),
- "system" => gettext("System"),
- "staticroutes" => gettext("Static routes"),
- "sysctl" => gettext("System tunables"),
- "snmpd" => gettext("SNMP Server"),
- "shaper" => gettext("Traffic Shaper"),
- "vlans" => gettext("VLANS"),
- "wol" => gettext("Wake on LAN")
- );
-
- $select = "<select name=\"{$name}\" id=\"{$name}\">";
- $select .= "<option value=\"\">" . gettext("ALL") . "</option>";
-
- if ($showall == true) {
- foreach ($areas as $area => $areaname) {
- $select .= "<option value=\"{$area}\">{$areaname}</option>\n";
- }
- } else {
- foreach ($areas as $area => $areaname) {
- if ($area === "rrddata" || check_and_returnif_section_exists($area) == true) {
- $select .= "<option value=\"{$area}\">{$areaname}</option>\n";
- }
- }
- }
-
- $select .= "</select>\n";
-
- if ($name === "backuparea") {
- $select .= <<<END_SCRIPT_BLOCK
- <script type="text/javascript">
- //<![CDATA[
- jQuery(function (\$) {
- $("#{$name}").change(function () {
- backuparea_change(this);
- }).trigger("change");
- });
- //]]>
- </script>
-END_SCRIPT_BLOCK;
- }
-
- echo $select;
-
-}
-
-if ($_POST['apply']) {
- ob_flush();
- flush();
- conf_mount_rw();
- clear_subsystem_dirty("restore");
- conf_mount_ro();
- exit;
-}
-
-if ($_POST) {
- unset($input_errors);
- if (stristr($_POST['Submit'], gettext("Restore configuration"))) {
- $mode = "restore";
- } else if (stristr($_POST['Submit'], gettext("Reinstall"))) {
- $mode = "reinstallpackages";
- } else if (stristr($_POST['Submit'], gettext("Clear Package Lock"))) {
- $mode = "clearpackagelock";
- } else if (stristr($_POST['Submit'], gettext("Download"))) {
- $mode = "download";
- } else if (stristr($_POST['Submit'], gettext("Restore version"))) {
- $mode = "restore_ver";
- }
- if ($_POST["nopackages"] <> "") {
- $options = "nopackages";
- }
- if ($_POST["ver"] <> "") {
- $ver2restore = $_POST["ver"];
- }
- if ($mode) {
- if ($mode == "download") {
- if ($_POST['encrypt']) {
- if (!$_POST['encrypt_password'] || !$_POST['encrypt_passconf']) {
- $input_errors[] = gettext("You must supply and confirm the password for encryption.");
- }
- if ($_POST['encrypt_password'] != $_POST['encrypt_passconf']) {
- $input_errors[] = gettext("The supplied 'Password' and 'Confirm' field values must match.");
- }
- }
-
- if (!$input_errors) {
-
- //$lockbckp = lock('config');
-
- $host = "{$config['system']['hostname']}.{$config['system']['domain']}";
- $name = "config-{$host}-".date("YmdHis").".xml";
- $data = "";
-
- if ($options == "nopackages") {
- if (!$_POST['backuparea']) {
- /* backup entire configuration */
- $data = file_get_contents("{$g['conf_path']}/config.xml");
- } else {
- /* backup specific area of configuration */
- $data = backup_config_section($_POST['backuparea']);
- $name = "{$_POST['backuparea']}-{$name}";
- }
- $sfn = "{$g['tmp_path']}/config.xml.nopkg";
- file_put_contents($sfn, $data);
- exec("sed '/<installedpackages>/,/<\/installedpackages>/d' {$sfn} > {$sfn}-new");
- $data = file_get_contents($sfn . "-new");
- } else {
- if (!$_POST['backuparea']) {
- /* backup entire configuration */
- $data = file_get_contents("{$g['conf_path']}/config.xml");
- } else if ($_POST['backuparea'] === "rrddata") {
- $data = rrd_data_xml();
- $name = "{$_POST['backuparea']}-{$name}";
- } else {
- /* backup specific area of configuration */
- $data = backup_config_section($_POST['backuparea']);
- $name = "{$_POST['backuparea']}-{$name}";
- }
- }
-
- //unlock($lockbckp);
-
- /*
- * Backup RRD Data
- */
- if ($_POST['backuparea'] !== "rrddata" && !$_POST['donotbackuprrd']) {
- $rrd_data_xml = rrd_data_xml();
- $closing_tag = "</" . $g['xml_rootobj'] . ">";
- $data = str_replace($closing_tag, $rrd_data_xml . $closing_tag, $data);
- }
-
- if ($_POST['encrypt']) {
- $data = encrypt_data($data, $_POST['encrypt_password']);
- tagfile_reformat($data, $data, "config.xml");
- }
-
- $size = strlen($data);
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename={$name}");
- header("Content-Length: $size");
- if (isset($_SERVER['HTTPS'])) {
- header('Pragma: ');
- header('Cache-Control: ');
- } else {
- header("Pragma: private");
- header("Cache-Control: private, must-revalidate");
- }
- echo $data;
-
- exit;
- }
- }
-
- if ($mode == "restore") {
- if ($_POST['decrypt']) {
- if (!$_POST['decrypt_password'] || !$_POST['decrypt_passconf']) {
- $input_errors[] = gettext("You must supply and confirm the password for decryption.");
- }
- if ($_POST['decrypt_password'] != $_POST['decrypt_passconf']) {
- $input_errors[] = gettext("The supplied 'Password' and 'Confirm' field values must match.");
- }
- }
-
- if (!$input_errors) {
- if (is_uploaded_file($_FILES['conffile']['tmp_name'])) {
-
- /* read the file contents */
- $data = file_get_contents($_FILES['conffile']['tmp_name']);
- if (!$data) {
- log_error(sprintf(gettext("Warning, could not read file %s"), $_FILES['conffile']['tmp_name']));
- return 1;
- }
-
- if ($_POST['decrypt']) {
- if (!tagfile_deformat($data, $data, "config.xml")) {
- $input_errors[] = gettext("The uploaded file does not appear to contain an encrypted pfsense configuration.");
- return 1;
- }
- $data = decrypt_data($data, $_POST['decrypt_password']);
- }
-
- if (stristr($data, "<m0n0wall>")) {
- log_error(gettext("Upgrading m0n0wall configuration to pfsense."));
- /* m0n0wall was found in config. convert it. */
- $data = str_replace("m0n0wall", "pfsense", $data);
- $m0n0wall_upgrade = true;
- }
- if ($_POST['restorearea']) {
- /* restore a specific area of the configuration */
- if (!stristr($data, "<" . $_POST['restorearea'] . ">")) {
- $input_errors[] = gettext("You have selected to restore an area but we could not locate the correct xml tag.");
- } else {
- if (!restore_config_section($_POST['restorearea'], $data)) {
- $input_errors[] = gettext("You have selected to restore an area but we could not locate the correct xml tag.");
- } else {
- if ($config['rrddata']) {
- restore_rrddata();
- unset($config['rrddata']);
- unlink_if_exists("{$g['tmp_path']}/config.cache");
- write_config();
- add_base_packages_menu_items();
- convert_config();
- conf_mount_ro();
- }
- filter_configure();
- $savemsg = gettext("The configuration area has been restored. You may need to reboot the firewall.");
- }
- }
- } else {
- if (!stristr($data, "<" . $g['xml_rootobj'] . ">")) {
- $input_errors[] = sprintf(gettext("You have selected to restore the full configuration but we could not locate a %s tag."), $g['xml_rootobj']);
- } else {
- /* restore the entire configuration */
- file_put_contents($_FILES['conffile']['tmp_name'], $data);
- if (config_install($_FILES['conffile']['tmp_name']) == 0) {
- /* this will be picked up by /index.php */
- conf_mount_rw();
- mark_subsystem_dirty("restore");
- touch("/conf/needs_package_sync");
- /* remove cache, we will force a config reboot */
- if (file_exists("{$g['tmp_path']}/config.cache")) {
- unlink("{$g['tmp_path']}/config.cache");
- }
- $config = parse_config(true);
- if (file_exists("/boot/loader.conf")) {
- $loaderconf = file_get_contents("/boot/loader.conf");
- if (strpos($loaderconf, "console=\"comconsole")) {
- $config['system']['enableserial'] = true;
- write_config("Restore serial console enabling in configuration.");
- }
- unset($loaderconf);
- }
- /* extract out rrd items, unset from $config when done */
- if ($config['rrddata']) {
- restore_rrddata();
- unset($config['rrddata']);
- unlink_if_exists("{$g['tmp_path']}/config.cache");
- write_config();
- add_base_packages_menu_items();
- convert_config();
- conf_mount_ro();
- }
- if ($m0n0wall_upgrade == true) {
- if ($config['system']['gateway'] <> "") {
- $config['interfaces']['wan']['gateway'] = $config['system']['gateway'];
- }
- unset($config['shaper']);
- /* optional if list */
- $ifdescrs = get_configured_interface_list(true, true);
- /* remove special characters from interface descriptions */
- if (is_array($ifdescrs)) {
- foreach ($ifdescrs as $iface) {
- $config['interfaces'][$iface]['descr'] = remove_bad_chars($config['interfaces'][$iface]['descr']);
- }
- }
- /* check for interface names with an alias */
- if (is_array($ifdescrs)) {
- foreach ($ifdescrs as $iface) {
- if (is_alias($config['interfaces'][$iface]['descr'])) {
- // Firewall rules
- $origname = $config['interfaces'][$iface]['descr'];
- $newname = $config['interfaces'][$iface]['descr'] . "Alias";
- update_alias_names_upon_change(array('filter', 'rule'), array('source', 'address'), $newname, $origname);
- update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'address'), $newname, $origname);
- // NAT Rules
- update_alias_names_upon_change(array('nat', 'rule'), array('source', 'address'), $newname, $origname);
- update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'address'), $newname, $origname);
- update_alias_names_upon_change(array('nat', 'rule'), array('target'), $newname, $origname);
- // Alias in an alias
- update_alias_names_upon_change(array('aliases', 'alias'), array('address'), $newname, $origname);
- }
- }
- }
- unlink_if_exists("{$g['tmp_path']}/config.cache");
- // Reset configuration version to something low
- // in order to force the config upgrade code to
- // run through with all steps that are required.
- $config['system']['version'] = "1.0";
- // Deal with descriptions longer than 63 characters
- for ($i = 0; isset($config["filter"]["rule"][$i]); $i++) {
- if (count($config['filter']['rule'][$i]['descr']) > 63) {
- $config['filter']['rule'][$i]['descr'] = substr($config['filter']['rule'][$i]['descr'], 0, 63);
- }
- }
- // Move interface from ipsec to enc0
- for ($i = 0; isset($config["filter"]["rule"][$i]); $i++) {
- if ($config['filter']['rule'][$i]['interface'] == "ipsec") {
- $config['filter']['rule'][$i]['interface'] = "enc0";
- }
- }
- // Convert icmp types
- // http://www.openbsd.org/cgi-bin/man.cgi?query=icmp&sektion=4&arch=i386&apropos=0&manpath=OpenBSD+Current
- for ($i = 0; isset($config["filter"]["rule"][$i]); $i++) {
- if ($config["filter"]["rule"][$i]['icmptype']) {
- switch ($config["filter"]["rule"][$i]['icmptype']) {
- case "echo":
- $config["filter"]["rule"][$i]['icmptype'] = "echoreq";
- break;
- case "unreach":
- $config["filter"]["rule"][$i]['icmptype'] = "unreach";
- break;
- case "echorep":
- $config["filter"]["rule"][$i]['icmptype'] = "echorep";
- break;
- case "squench":
- $config["filter"]["rule"][$i]['icmptype'] = "squench";
- break;
- case "redir":
- $config["filter"]["rule"][$i]['icmptype'] = "redir";
- break;
- case "timex":
- $config["filter"]["rule"][$i]['icmptype'] = "timex";
- break;
- case "paramprob":
- $config["filter"]["rule"][$i]['icmptype'] = "paramprob";
- break;
- case "timest":
- $config["filter"]["rule"][$i]['icmptype'] = "timereq";
- break;
- case "timestrep":
- $config["filter"]["rule"][$i]['icmptype'] = "timerep";
- break;
- case "inforeq":
- $config["filter"]["rule"][$i]['icmptype'] = "inforeq";
- break;
- case "inforep":
- $config["filter"]["rule"][$i]['icmptype'] = "inforep";
- break;
- case "maskreq":
- $config["filter"]["rule"][$i]['icmptype'] = "maskreq";
- break;
- case "maskrep":
- $config["filter"]["rule"][$i]['icmptype'] = "maskrep";
- break;
- }
- }
- }
- $config['diag']['ipv6nat'] = true;
- write_config();
- add_base_packages_menu_items();
- convert_config();
- conf_mount_ro();
- $savemsg = gettext("The m0n0wall configuration has been restored and upgraded to pfSense.");
- mark_subsystem_dirty("restore");
- }
- if (is_array($config['captiveportal'])) {
- foreach ($config['captiveportal'] as $cp) {
- if (isset($cp['enable'])) {
- /* for some reason ipfw doesn't init correctly except on bootup sequence */
- mark_subsystem_dirty("restore");
- break;
- }
- }
- }
- setup_serial_port();
- if (is_interface_mismatch() == true) {
- touch("/var/run/interface_mismatch_reboot_needed");
- clear_subsystem_dirty("restore");
- convert_config();
- header("Location: interfaces_assign.php");
- exit;
- }
- if (is_interface_vlan_mismatch() == true) {
- touch("/var/run/interface_mismatch_reboot_needed");
- clear_subsystem_dirty("restore");
- convert_config();
- header("Location: interfaces_assign.php");
- exit;
- }
- } else {
- $input_errors[] = gettext("The configuration could not be restored.");
- }
- }
- }
- } else {
- $input_errors[] = gettext("The configuration could not be restored (file upload error).");
- }
- }
- }
-
- if ($mode == "reinstallpackages") {
- header("Location: pkg_mgr_install.php?mode=reinstallall");
- exit;
- } else if ($mode == "clearpackagelock") {
- clear_subsystem_dirty('packagelock');
- $savemsg = "Package Lock Cleared";
- } else if ($mode == "restore_ver") {
- $input_errors[] = gettext("XXX - this feature may hose your config (do NOT backrev configs!) - billm");
- if ($ver2restore <> "") {
- $conf_file = "{$g['cf_conf_path']}/bak/config-" . strtotime($ver2restore) . ".xml";
- if (config_install($conf_file) == 0) {
- mark_subsystem_dirty("restore");
- } else {
- $input_errors[] = gettext("The configuration could not be restored.");
- }
- } else {
- $input_errors[] = gettext("No version selected.");
- }
- }
- }
-}
-
-$id = rand() . '.' . time();
-
-$mth = ini_get('upload_progress_meter.store_method');
-$dir = ini_get('upload_progress_meter.file.filename_template');
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Backup/restore"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-
-function encrypt_change() {
-
- if (!document.iform.encrypt.checked) {
- document.getElementById("encrypt_opts").style.display="none";
- } else {
- document.getElementById("encrypt_opts").style.display="";
- }
-}
-
-function decrypt_change() {
-
- if (!document.iform.decrypt.checked) {
- document.getElementById("decrypt_opts").style.display="none";
- } else {
- document.getElementById("decrypt_opts").style.display="";
- }
-}
-
-function backuparea_change(obj) {
- if (obj.value == "rrddata") {
- document.getElementById("nopackages").disabled = true;
- document.getElementById("dotnotbackuprrd").disabled = true;
- } else {
- document.getElementById("nopackages").disabled = false;
- document.getElementById("dotnotbackuprrd").disabled = false;
- }
-}
-//]]>
-</script>
-
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('restore')): ?><br/>
-<form action="reboot.php" method="post">
-<input name="Submit" type="hidden" value="Yes" />
-<?php print_info_box(gettext("The firewall configuration has been changed.") . "<br />" . gettext("The firewall is now rebooting."));?><br />
-</form>
-<?php endif; ?>
-<form action="diag_backup.php" method="post" name="iform" enctype="multipart/form-data">
-<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="diag backup">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Config History"), false, "diag_confbak.php");
- $tab_array[1] = array(gettext("Backup/Restore"), true, "diag_backup.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic"><?=gettext("Backup configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="baseline" class="vncell">&nbsp;</td>
- <td width="78%" class="vtable">
- <p><?=gettext("Click this button to download the system configuration in XML format."); ?><br /><br /> <?=gettext("Backup area:"); ?> <?php spit_out_select_items("backuparea", false); ?></p>
- <table>
- <tr>
- <td>
- <input name="nopackages" type="checkbox" class="formcheckbox" id="nopackages" />
- </td>
- <td>
- <span class="vexpl"><?=gettext("Do not backup package information."); ?></span>
- </td>
- </tr>
- </table>
- <table>
- <tr>
- <td>
- <input name="encrypt" type="checkbox" class="formcheckbox" id="nopackages" onclick="encrypt_change()" />
- </td>
- <td>
- <span class="vexpl"><?=gettext("Encrypt this configuration file."); ?></span>
- </td>
- </tr>
- <tr>
- <td>
- <input name="donotbackuprrd" type="checkbox" class="formcheckbox" id="dotnotbackuprrd" checked="checked" />
- </td>
- <td>
- <span class="vexpl"><?=gettext("Do not backup RRD data (NOTE: RRD Data can consume 4+ megabytes of config.xml space!)"); ?></span>
- </td>
- </tr>
- </table>
- <table id="encrypt_opts">
- <tr>
- <td>
- <span class="vexpl"><?=gettext("Password:"); ?> </span>
- </td>
- <td>
- <input name="encrypt_password" type="password" class="formfld pwd" size="20" value="" />
- </td>
- </tr>
- <tr>
- <td>
- <span class="vexpl"><?=gettext("confirm:"); ?> </span>
- </td>
- <td>
- <input name="encrypt_passconf" type="password" class="formfld pwd" size="20" value="" />
- </td>
- </tr>
- </table>
- <p><input name="Submit" type="submit" class="formbtn" id="download" value="<?=gettext("Download configuration"); ?>" /></p>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" class="listtopic"><?=gettext("Restore configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="baseline" class="vncell">&nbsp;</td>
- <td width="78%" class="vtable">
- <?=gettext("Open a"); ?> <?=$g['[product_name']?> <?=gettext("configuration XML file and click the button below to restore the configuration."); ?>
- <br /><br />
- <?=gettext("Restore area:"); ?> <?php spit_out_select_items("restorearea", true); ?>
- <p><input name="conffile" type="file" class="formbtn" id="conffile" size="40" /></p>
- <table>
- <tr>
- <td>
- <input name="decrypt" type="checkbox" class="formcheckbox" id="nopackages" onclick="decrypt_change()" />
- </td>
- <td>
- <span class="vexpl"><?=gettext("Configuration file is encrypted."); ?></span>
- </td>
- </tr>
- </table>
- <table id="decrypt_opts">
- <tr>
- <td>
- <span class="vexpl"><?=gettext("Password :"); ?></span>
- </td>
- <td>
- <input name="decrypt_password" type="password" class="formfld pwd" size="20" value="" />
- </td>
- </tr>
- <tr>
- <td>
- <span class="vexpl"><?=gettext("confirm :"); ?></span>
- </td>
- <td>
- <input name="decrypt_passconf" type="password" class="formfld pwd" size="20" value="" />
- </td>
- </tr>
- </table>
- <p><input name="Submit" type="submit" class="formbtn" id="restore" value="<?=gettext("Restore configuration"); ?>" /></p>
- <p><strong><span class="red"><?=gettext("Note:"); ?></span></strong><br /><?=gettext("The firewall will reboot after restoring the configuration."); ?><br /></p>
- </td>
- </tr>
- <?php if (($config['installedpackages']['package'] != "") || (is_subsystem_dirty("packagelock"))) { ?>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" class="listtopic"><?=gettext("Package Functions"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="baseline" class="vncell">&nbsp;</td>
- <td width="78%" class="vtable">
- <?php if ($config['installedpackages']['package'] != "") { ?>
- <p><?=gettext("Click this button to reinstall all system packages. This may take a while."); ?> <br /><br />
- <input name="Submit" type="submit" class="formbtn" id="reinstallpackages" value="<?=gettext("Reinstall packages"); ?>" />
- <br />
- <br />
- <?php } ?>
- <?php if (is_subsystem_dirty("packagelock")) { ?>
- <p><?=gettext("Click this button to clear the package lock if a package fails to reinstall properly after an upgrade."); ?> <br /><br />
- <input name="Submit" type="submit" class="formbtn" id="clearpackagelock" value="<?=gettext("Clear Package Lock"); ?>" />
- <?php } ?>
- </p>
- </td>
- </tr>
- <?php } ?>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-
-<script type="text/javascript">
-//<![CDATA[
-encrypt_change();
-decrypt_change();
-//]]>
-</script>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
-<?php
-
-if (is_subsystem_dirty('restore')) {
- system_reboot();
-}
-
-?>
diff --git a/usr/local/www/diag_confbak.php b/usr/local/www/diag_confbak.php
deleted file mode 100644
index cc1da99..0000000
--- a/usr/local/www/diag_confbak.php
+++ /dev/null
@@ -1,301 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_confbak.php
- Copyright (C) 2005 Colin Smith
- Copyright (C) 2010 Jim Pingle
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: config
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-configurationhistory
-##|*NAME=Diagnostics: Configuration History page
-##|*DESCR=Allow access to the 'Diagnostics: Configuration History' page.
-##|*MATCH=diag_confbak.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (isset($_POST['backupcount'])) {
- if (is_numeric($_POST['backupcount']) && ($_POST['backupcount'] >= 0)) {
- $config['system']['backupcount'] = $_POST['backupcount'];
- $changedescr = $config['system']['backupcount'];
- } else {
- unset($config['system']['backupcount']);
- $changedescr = "(platform default)";
- }
- write_config("Changed backup revision count to {$changedescr}");
-} elseif ($_POST) {
- if (!isset($_POST['confirm']) || ($_POST['confirm'] != gettext("Confirm")) || (!isset($_POST['newver']) && !isset($_POST['rmver']))) {
- header("Location: diag_confbak.php");
- return;
- }
-
- conf_mount_rw();
- $confvers = unserialize(file_get_contents($g['cf_conf_path'] . '/backup/backup.cache'));
- if ($_POST['newver'] != "") {
- if (config_restore($g['conf_path'] . '/backup/config-' . $_POST['newver'] . '.xml') == 0) {
- $savemsg = sprintf(gettext('Successfully reverted to timestamp %1$s with description "%2$s".'), date(gettext("n/j/y H:i:s"), $_POST['newver']), htmlspecialchars($confvers[$_POST['newver']]['description']));
- } else {
- $savemsg = gettext("Unable to revert to the selected configuration.");
- }
- }
- if ($_POST['rmver'] != "") {
- unlink_if_exists($g['conf_path'] . '/backup/config-' . $_POST['rmver'] . '.xml');
- $savemsg = sprintf(gettext('Deleted backup with timestamp %1$s and description "%2$s".'), date(gettext("n/j/y H:i:s"), $_POST['rmver']), htmlspecialchars($confvers[$_POST['rmver']]['description']));
- }
- conf_mount_ro();
-}
-
-if ($_GET['getcfg'] != "") {
- $file = $g['conf_path'] . '/backup/config-' . $_GET['getcfg'] . '.xml';
-
- $exp_name = urlencode("config-{$config['system']['hostname']}.{$config['system']['domain']}-{$_GET['getcfg']}.xml");
- $exp_data = file_get_contents($file);
- $exp_size = strlen($exp_data);
-
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename={$exp_name}");
- header("Content-Length: $exp_size");
- echo $exp_data;
- exit;
-}
-
-if (($_GET['diff'] == 'Diff') && isset($_GET['oldtime']) && isset($_GET['newtime']) &&
- (is_numeric($_GET['oldtime'])) &&
- (is_numeric($_GET['newtime']) || ($_GET['newtime'] == 'current'))) {
- $diff = "";
- $oldfile = $g['conf_path'] . '/backup/config-' . $_GET['oldtime'] . '.xml';
- $oldtime = $_GET['oldtime'];
- if ($_GET['newtime'] == 'current') {
- $newfile = $g['conf_path'] . '/config.xml';
- $newtime = $config['revision']['time'];
- } else {
- $newfile = $g['conf_path'] . '/backup/config-' . $_GET['newtime'] . '.xml';
- $newtime = $_GET['newtime'];
- }
- if (file_exists($oldfile) && file_exists($newfile)) {
- exec("/usr/bin/diff -u " . escapeshellarg($oldfile) . " " . escapeshellarg($newfile), $diff);
- }
-}
-
-cleanup_backupcache(false);
-$confvers = get_backups();
-unset($confvers['versions']);
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Configuration History"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
- <?php
- include("fbegin.inc");
- if ($savemsg) {
- print_info_box($savemsg);
- }
- ?>
- <?php if ($diff) { ?>
- <table align="center" width="100%" border="0" cellspacing="0" style="padding-top: 4px; padding-bottom: 4px; vertical-align:middle;" summary="diag confbak">
- <tr>
- <td><?=gettext("Configuration diff from");?> <?php echo date(gettext("n/j/y H:i:s"), $oldtime); ?> <?=gettext("to");?> <?php echo date(gettext("n/j/y H:i:s"), $newtime); ?></td>
- </tr>
- <?php foreach ($diff as $line) {
- switch (substr($line, 0, 1)) {
- case "+":
- $color = "#caffd3";
- break;
- case "-":
- $color = "#ffe8e8";
- break;
- case "@":
- $color = "#a0a0a0";
- break;
- default:
- $color = "#ffffff";
- }
- ?>
- <tr>
- <td valign="middle" bgcolor="<?php echo $color; ?>" style="white-space: pre-wrap;"><?php echo htmlentities($line);?></td>
- </tr>
- <?php } ?>
- </table>
- <br />
- <?php } ?>
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="stats">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Config History"), true, "diag_confbak.php");
- $tab_array[1] = array(gettext("Backup/Restore"), false, "diag_backup.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <form action="diag_confbak.php" method="post">
- <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
-
-<?php if ($_GET["newver"] || $_GET["rmver"]): ?>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?php echo gettext("Confirm Action"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell">&nbsp;</td>
- <td width="78%" class="vtable">
-
- <strong><?php echo gettext("Please confirm the selected action"); ?></strong>:
- <br />
- <br /><strong><?php echo gettext("Action"); ?>:</strong>
- <?php if (!empty($_GET["newver"])) {
- echo gettext("Restore from Configuration Backup");
- $target_config = $_GET["newver"]; ?>
- <input type="hidden" name="newver" value="<?php echo htmlspecialchars($_GET["newver"]); ?>" />
- <?php } elseif (!empty($_GET["rmver"])) {
- echo gettext("Remove Configuration Backup");
- $target_config = $_GET["rmver"]; ?>
- <input type="hidden" name="rmver" value="<?php echo htmlspecialchars($_GET["rmver"]); ?>" />
- <?php } ?>
- <br /><strong><?php echo gettext("Target Configuration"); ?>:</strong>
- <?php echo sprintf(gettext('Timestamp %1$s'), date(gettext("n/j/y H:i:s"), $target_config)); ?>
- <br /><input type="submit" name="confirm" value="<?php echo gettext("Confirm"); ?>" />
- </td>
- </tr>
-<?php else: ?>
-
- <tr>
- <td width="10%">&nbsp;</td>
- <td width="15%" valign="top"><?=gettext("Backup Count");?></td>
- <td width="10%">
- <input name="backupcount" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($config['system']['backupcount']);?>"/>
- </td>
- <td width="60%">
- <?= gettext("Enter the number of older configurations to keep in the local backup cache. By default this is 30 for a full install or 5 on NanoBSD."); ?>
- </td>
- <td width= "5%"><input name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" /></td>
- </tr>
- <tr>
- <td class="vncell">&nbsp;</td>
- <td colspan="4" class="vncell">
- <?= gettext("NOTE: Be aware of how much space is consumed by backups before adjusting this value. Current space used by backups: "); ?> <?= exec("/usr/bin/du -sh /conf/backup | /usr/bin/awk '{print $1;}'") ?>
- </td>
- </tr>
- </table>
- </form>
- <form action="diag_confbak.php" method="get">
- <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="difference">
- <?php if (is_array($confvers)): ?>
- <tr>
- <td colspan="7" class="list">
- <?= gettext("To view the differences between an older configuration and a newer configuration, select the older configuration using the left column of radio options and select the newer configuration in the right column, then press the Diff button."); ?>
- <br /><br />
- </td>
- </tr>
- <tr>
- <td width="5%" colspan="2" valign="middle" align="center" class="list nowrap"><input type="submit" name="diff" value="<?=gettext("Diff"); ?>" /></td>
- <td width="20%" class="listhdrr"><?=gettext("Date");?></td>
- <td width="5%" class="listhdrr"><?=gettext("Version");?></td>
- <td width="5%" class="listhdrr"><?=gettext("Size");?></td>
- <td width="60%" class="listhdrr"><?=gettext("Configuration Change");?></td>
- <td width="5%" class="list">&nbsp;</td>
- </tr>
- <tr valign="top">
- <td valign="middle" class="list nowrap"></td>
- <td class="list">
- <input type="radio" name="newtime" value="current" />
- </td>
- <td class="listlr"> <?= date(gettext("n/j/y H:i:s"), $config['revision']['time']) ?></td>
- <td class="listr"> <?= $config['version'] ?></td>
- <td class="listr"> <?= format_bytes(filesize("/conf/config.xml")) ?></td>
- <td class="listr"> <?= htmlspecialchars($config['revision']['description']) ?></td>
- <td valign="middle" class="list nowrap"><b><?=gettext("Current");?></b></td>
- </tr>
- <?php
- $c = 0;
- foreach ($confvers as $version):
- if ($version['time'] != 0) {
- $date = date(gettext("n/j/y H:i:s"), $version['time']);
- } else {
- $date = gettext("Unknown");
- }
- ?>
- <tr valign="top">
- <td class="list">
- <input type="radio" name="oldtime" value="<?php echo $version['time'];?>" />
- </td>
- <td class="list">
- <?php if ($c < (count($confvers) - 1)) { ?>
- <input type="radio" name="newtime" value="<?php echo $version['time'];?>" />
- <?php } else { ?>
- &nbsp;
- <?php }
- $c++; ?>
- </td>
- <td class="listlr"> <?= $date ?></td>
- <td class="listr"> <?= $version['version'] ?></td>
- <td class="listr"> <?= format_bytes($version['filesize']) ?></td>
- <td class="listr"> <?= htmlspecialchars($version['description']) ?></td>
- <td valign="middle" class="list nowrap">
- <a href="diag_confbak.php?newver=<?=$version['time'];?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="<?=gettext("Revert to this configuration");?>" title="<?=gettext("Revert to this configuration");?>" />
- </a>
- <a href="diag_confbak.php?rmver=<?=$version['time'];?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="<?=gettext("Remove this backup");?>" title="<?=gettext("Remove this backup");?>" />
- </a>
- <a href="diag_confbak.php?getcfg=<?=$version['time'];?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_down.gif" width="17" height="17" border="0" alt="<?=gettext("Download this backup");?>" title="<?=gettext("Download this backup");?>" />
- </a>
- </td>
- </tr>
- <?php endforeach; ?>
- <tr>
- <td colspan="2"><input type="submit" name="diff" value="<?=gettext("Diff"); ?>" /></td>
- <td colspan="5"></td>
- </tr>
- <?php else: ?>
- <tr>
- <td>
- <?php print_info_box(gettext("No backups found.")); ?>
- </td>
- </tr>
- <?php endif; ?>
-<?php endif; ?>
- </table>
- </form>
- </div>
- </td>
- </tr>
- </table>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_defaults.php b/usr/local/www/diag_defaults.php
deleted file mode 100755
index 7c17511..0000000
--- a/usr/local/www/diag_defaults.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_defaults.php
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: config
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-factorydefaults
-##|*NAME=Diagnostics: Factory defaults page
-##|*DESCR=Allow access to the 'Diagnostics: Factory defaults' page.
-##|*MATCH=diag_defaults.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if ($_POST['Submit'] == " " . gettext("No") . " ") {
- header("Location: index.php");
- exit;
-}
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Factory defaults"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-
-<?php if ($_POST['Submit'] == " " . gettext("Yes") . " "):
- print_info_box(gettext("The system has been reset to factory defaults and is now rebooting. This may take a few minutes, depending on your hardware.")); ?>
-<pre>
-<?php
- reset_factory_defaults();
- system_reboot();
-?>
-</pre>
-<?php else: ?>
-<form action="diag_defaults.php" method="post">
- <p><strong> <?=gettext("If you click") . " &quot;" . gettext("Yes") . "&quot;, " . gettext("the firewall will:")?></strong></p>
- <ul>
- <li><?=gettext("Reset to factory defaults");?></li>
- <li><?=gettext("LAN IP address will be reset to 192.168.1.1");?></li>
- <li><?=gettext("System will be configured as a DHCP server on the default LAN interface");?></li>
- <li><?=gettext("Reboot after changes are installed");?></li>
- <li><?=gettext("WAN interface will be set to obtain an address automatically from a DHCP server");?></li>
- <li><?=gettext("webConfigurator admin username will be reset to 'admin'");?></li>
- <li><?=gettext("webConfigurator admin password will be reset to");?> '<?=$g['factory_shipped_password']?>'</li>
- </ul>
- <p><strong><?=gettext("Are you sure you want to proceed?");?></strong></p>
- <p>
- <input name="Submit" type="submit" class="formbtn" value=" <?=gettext("Yes");?> " />
- <input name="Submit" type="submit" class="formbtn" value=" <?=gettext("No");?> " />
- </p>
-</form>
-<?php endif; ?>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_dns.php b/usr/local/www/diag_dns.php
deleted file mode 100644
index 4c57223..0000000
--- a/usr/local/www/diag_dns.php
+++ /dev/null
@@ -1,320 +0,0 @@
-<?php
-/*
- diag_dns.php
-
- Copyright (C) 2009 Jim Pingle (jpingle@gmail.com)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: dns
-*/
-
-$pgtitle = array(gettext("Diagnostics"), gettext("DNS Lookup"));
-require("guiconfig.inc");
-
-$host = trim($_REQUEST['host'], " \t\n\r\0\x0B[];\"'");
-$host_esc = escapeshellarg($host);
-
-/* If this section of config.xml has not been populated yet we need to set it up
-*/
-if (!is_array($config['aliases']['alias'])) {
- $config['aliases']['alias'] = array();
-}
-$a_aliases = &$config['aliases']['alias'];
-
-$aliasname = str_replace(array(".", "-"), "_", $host);
-$alias_exists = false;
-$counter = 0;
-foreach ($a_aliases as $a) {
- if ($a['name'] == $aliasname) {
- $alias_exists = true;
- $id = $counter;
- }
- $counter++;
-}
-
-if (isset($_POST['create_alias']) && (is_hostname($host) || is_ipaddr($host))) {
- if ($_POST['override']) {
- $override = true;
- }
- $resolved = gethostbyname($host);
- $type = "hostname";
- if ($resolved) {
- $resolved = array();
- exec("/usr/bin/drill {$host_esc} A | /usr/bin/grep {$host_esc} | /usr/bin/grep -v ';' | /usr/bin/awk '{ print $5 }'", $resolved);
- $isfirst = true;
- foreach ($resolved as $re) {
- if ($re <> "") {
- if (!$isfirst) {
- $addresses .= " ";
- }
- $addresses .= rtrim($re) . "/32";
- $isfirst = false;
- }
- }
- $newalias = array();
- if ($override) {
- $alias_exists = false;
- }
- if ($alias_exists == false) {
- $newalias['name'] = $aliasname;
- $newalias['type'] = "network";
- $newalias['address'] = $addresses;
- $newalias['descr'] = "Created from Diagnostics-> DNS Lookup";
- if ($override) {
- $a_aliases[$id] = $newalias;
- } else {
- $a_aliases[] = $newalias;
- }
- write_config();
- $createdalias = true;
- }
- }
-}
-
-if ($_POST) {
- unset($input_errors);
-
- $reqdfields = explode(" ", "host");
- $reqdfieldsn = explode(",", "Host");
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (!is_hostname($host) && !is_ipaddr($host)) {
- $input_errors[] = gettext("Host must be a valid hostname or IP address.");
- } else {
- // Test resolution speed of each DNS server.
- $dns_speeds = array();
- $dns_servers = array();
- exec("/usr/bin/grep nameserver /etc/resolv.conf | /usr/bin/cut -f2 -d' '", $dns_servers);
- foreach ($dns_servers as $dns_server) {
- $query_time = exec("/usr/bin/drill {$host_esc} " . escapeshellarg("@" . trim($dns_server)) . " | /usr/bin/grep Query | /usr/bin/cut -d':' -f2");
- if ($query_time == "") {
- $query_time = gettext("No response");
- }
- $new_qt = array();
- $new_qt['dns_server'] = $dns_server;
- $new_qt['query_time'] = $query_time;
- $dns_speeds[] = $new_qt;
- unset($new_qt);
- }
- }
-
- $type = "unknown";
- $resolved = "";
- $ipaddr = "";
- $hostname = "";
- if (!$input_errors) {
- if (is_ipaddr($host)) {
- $type = "ip";
- $resolved = gethostbyaddr($host);
- $ipaddr = $host;
- if ($host != $resolved) {
- $hostname = $resolved;
- }
- } elseif (is_hostname($host)) {
- $type = "hostname";
- $resolved = gethostbyname($host);
- if ($resolved) {
- $resolved = array();
- exec("/usr/bin/drill {$host_esc} A | /usr/bin/grep {$host_esc} | /usr/bin/grep -v ';' | /usr/bin/awk '{ print $5 }'", $resolved);
- }
- $hostname = $host;
- if ($host != $resolved) {
- $ipaddr = $resolved[0];
- }
- }
-
- if ($host == $resolved) {
- $resolved = gettext("No record found");
- }
- }
-}
-
-if (($_POST['host']) && ($_POST['dialog_output'])) {
- display_host_results ($host, $resolved, $dns_speeds);
- exit;
-}
-
-function display_host_results ($address, $hostname, $dns_speeds) {
- $map_lengths = function($element) { return strlen($element[0]); };
-
- echo gettext("IP Address") . ": {$address} \n";
- echo gettext("Host Name") . ": {$hostname} \n";
- echo "\n";
- $text_table = array();
- $text_table[] = array(gettext("Server"), gettext("Query Time"));
- if (is_array($dns_speeds)) {
- foreach ($dns_speeds as $qt) {
- $text_table[] = array(trim($qt['dns_server']), trim($qt['query_time']));
- }
- }
- $col0_padlength = max(array_map($map_lengths, $text_table)) + 4;
- foreach ($text_table as $text_row) {
- echo str_pad($text_row[0], $col0_padlength) . $text_row[1] . "\n";
- }
-}
-
-include("head.inc"); ?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag dns">
- <tr>
- <td>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
- <form action="diag_dns.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
- <tr>
- <td colspan="2" valign="top" class="listtopic"> <?=gettext("Resolve DNS hostname or IP");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname or IP");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?>
- <table summary="results">
- <tr>
- <td valign="top">
- <input name="host" type="text" class="formfld unknown" id="host" size="20" value="<?=htmlspecialchars($host);?>" />
- </td>
-<?php
- if ($resolved && $type) {
-?>
- <td valign="middle">&nbsp;=&nbsp;</td>
- <td>
- <font size="+1">
-<?php
- $found = 0;
- if (is_array($resolved)) {
- foreach ($resolved as $hostitem) {
- if ($hostitem <> "") {
- echo $hostitem . "<br />";
- $found++;
- }
- }
- } else {
- echo $resolved;
- }
- if ($found > 0) {
-?>
- <br/>
- </font>
- <font size='-2'>
-<?php
- if ($alias_exists) {
-?>
- An alias already exists for the hostname <?= htmlspecialchars($host) ?>. <br />
- <input type="hidden" name="override" value="true"/>
- <input type="submit" name="create_alias" value="Overwrite Alias"/>
-<?php
- } else {
- if (!$createdalias) {
-?>
- <input type="submit" name="create_alias" value="Create Alias from These Entries"/>
-<?php
- } else {
-?>
- Alias created with name <?= htmlspecialchars($newalias['name']) ?>
-<?php
- }
- }
- }
- }
-?>
- </font>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- if ($_POST):
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Resolution time per server");?></td>
- <td width="78%" class="vtable">
- <table width="170" border="0" cellpadding="6" cellspacing="0" summary="resolution time">
- <tr>
- <td class="listhdrr">
- <?=gettext("Server");?>
- </td>
- <td class="listhdrr">
- <?=gettext("Query time");?>
- </td>
- </tr>
-<?php
- if (is_array($dns_speeds)) {
- foreach ($dns_speeds as $qt):
-?>
- <tr>
- <td class="listlr">
- <?=$qt['dns_server']?>
- </td>
- <td class="listr">
- <?=$qt['query_time']?>
- </td>
- </tr>
-<?php
- endforeach;
- }
-?>
- </table>
- </td>
- </tr>
-<?php
- endif;
-
- if (!$input_errors && $ipaddr) {
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("More Information:");?></td>
- <td width="78%" class="vtable">
- <a href ="/diag_ping.php?host=<?=htmlspecialchars($host)?>&amp;interface=wan&amp;count=3"><?=gettext("Ping");?></a> <br />
- <a href ="/diag_traceroute.php?host=<?=htmlspecialchars($host)?>&amp;ttl=18"><?=gettext("Traceroute");?></a>
- <p>
- <?=gettext("NOTE: The following links are to external services, so their reliability cannot be guaranteed.");?><br /><br />
- <a target="_blank" href="http://private.dnsstuff.com/tools/whois.ch?ip=<?php echo $ipaddr; ?>"><?=gettext("IP WHOIS @ DNS Stuff");?></a><br />
- <a target="_blank" href="http://private.dnsstuff.com/tools/ipall.ch?ip=<?php echo $ipaddr; ?>"><?=gettext("IP Info @ DNS Stuff");?></a>
- </p>
- </td>
- </tr>
-<?php
- }
-?>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <br />&nbsp;
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("DNS Lookup");?>" />
- </td>
- </tr>
- </table>
- </form>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_dump_states.php b/usr/local/www/diag_dump_states.php
deleted file mode 100755
index ebb3b06..0000000
--- a/usr/local/www/diag_dump_states.php
+++ /dev/null
@@ -1,280 +0,0 @@
-<?php
-/*
- diag_dump_states.php
- Copyright (C) 2005 Colin Smith
- Copyright (C) 2005-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /sbin/pfctl
- pfSense_MODULE: filter
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-showstates
-##|*NAME=Diagnostics: Show States page
-##|*DESCR=Allow access to the 'Diagnostics: Show States' page.
-##|*MATCH=diag_dump_states.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("interfaces.inc");
-
-/* handle AJAX operations */
-if (isset($_POST['action']) && $_POST['action'] == "remove") {
- if (isset($_POST['srcip']) && isset($_POST['dstip']) && is_ipaddr($_POST['srcip']) && is_ipaddr($_POST['dstip'])) {
- $retval = pfSense_kill_states($_POST['srcip'], $_POST['dstip']);
- echo htmlentities("|{$_POST['srcip']}|{$_POST['dstip']}|0|");
- } else {
- echo gettext("invalid input");
- }
- return;
-}
-
-if (isset($_POST['filter']) && isset($_POST['killfilter'])) {
- if (is_ipaddr($_POST['filter'])) {
- $tokill = $_POST['filter'] . "/32";
- } elseif (is_subnet($_POST['filter'])) {
- $tokill = $_POST['filter'];
- } else {
- // Invalid filter
- $tokill = "";
- }
- if (!empty($tokill)) {
- $retval = pfSense_kill_states($tokill);
- $retval = pfSense_kill_states("0.0.0.0/0", $tokill);
- }
-}
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Show States"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?=$jsevents["body"]["onload"];?>">
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
- function removeState(srcip, dstip) {
- var busy = function(index, icon) {
- jQuery(icon).bind("onclick", "");
- jQuery(icon).attr('src', jQuery(icon).attr('src').replace("\.gif", "_d.gif"));
- jQuery(icon).css("cursor", "wait");
- }
-
- jQuery('img[name="i:' + srcip + ":" + dstip + '"]').each(busy);
-
- jQuery.ajax(
- "<?=$_SERVER['SCRIPT_NAME'];?>",
- {
- type: "post",
- data: {
- action: "remove",
- srcip: srcip,
- dstip: dstip
- },
- complete: removeComplete
- }
- );
- }
-
- function removeComplete(req) {
- var values = req.responseText.split("|");
- if (values[3] != "0") {
- alert('<?=gettext("An error occurred.");?>');
- return;
- }
-
- jQuery('tr[id="r:' + values[1] + ":" + values[2] + '"]').each(
- function(index, row) { jQuery(row).fadeOut(1000); }
- );
- }
-//]]>
-</script>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tabcon">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("States"), true, "diag_dump_states.php");
- if (isset($config['system']['lb_use_sticky'])) {
- $tab_array[] = array(gettext("Source Tracking"), false, "diag_dump_states_sources.php");
- }
- $tab_array[] = array(gettext("Reset States"), false, "diag_resetstate.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
-
-<!-- Start of tab content -->
-
-<?php
- $current_statecount=`pfctl -si | grep "current entries" | awk '{ print $3 }'`;
-?>
-
-<table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="states">
- <tr>
- <td>
- <form action="<?=$_SERVER['SCRIPT_NAME'];?>" method="post" name="iform">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="filter">
- <tr>
- <td>
- <?=gettext("Current total state count");?>: <?= $current_statecount ?>
- </td>
- <td style="font-weight:bold;" align="right">
- <?=gettext("Filter expression:");?>
- <input type="text" name="filter" class="formfld search" value="<?=htmlspecialchars($_POST['filter']);?>" size="30" />
- <input type="submit" class="formbtn" value="<?=gettext("Filter");?>" />
- <?php if (isset($_POST['filter']) && (is_ipaddr($_POST['filter']) || is_subnet($_POST['filter']))): ?>
- <input type="submit" class="formbtn" name="killfilter" value="<?=gettext("Kill");?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </form>
- </td>
- </tr>
- <tr>
- <td>
- <table class="tabcont sortable" width="100%" border="0" cellspacing="0" cellpadding="0" summary="results">
- <thead>
- <tr>
- <th class="listhdrr" width="5%"><?=gettext("Int");?></th>
- <th class="listhdrr" width="5%"><?=gettext("Proto");?></th>
- <th class="listhdrr" width="65"><?=gettext("Source -> Router -> Destination");?></th>
- <th class="listhdr" width="24%"><?=gettext("State");?></th>
- <th class="list sort_ignore" width="1%"></th>
- </tr>
- </thead>
- <tbody>
-<?php
-$row = 0;
-/* get our states */
-$grepline = (isset($_POST['filter'])) ? "| /usr/bin/egrep " . escapeshellarg(htmlspecialchars($_POST['filter'])) : "";
-$fd = popen("/sbin/pfctl -s state {$grepline}", "r");
-while ($line = chop(fgets($fd))) {
- if ($row >= 10000) {
- break;
- }
-
- $line_split = preg_split("/\s+/", $line);
-
- $iface = array_shift($line_split);
- $proto = array_shift($line_split);
- $state = array_pop($line_split);
- $info = implode(" ", $line_split);
-
- // We may want to make this optional, with a large state table, this could get to be expensive.
- $iface = convert_real_interface_to_friendly_descr($iface);
-
- /* break up info and extract $srcip and $dstip */
- $ends = preg_split("/\<?-\>?/", $info);
- if (strstr($info, "[")) {
- // IPv6
- $parts = explode("[", $ends[0]);
- if (strstr($info, "->")) {
- $srcip = trim($parts[0]);
- } else {
- $dstip = trim($parts[0]);
- }
- $parts = explode("[", $ends[count($ends) - 1]);
- if (strstr($info, "->")) {
- $dstip = trim($parts[0]);
- } else {
- $srcip = trim($parts[0]);
- }
- } else {
- // IPv4
- $parts = explode(":", $ends[0]);
- if (strstr($info, "->")) {
- $srcip = trim($parts[0]);
- } else {
- $dstip = trim($parts[0]);
- }
- $parts = explode(":", $ends[count($ends) - 1]);
- if (strstr($info, "->")) {
- $dstip = trim($parts[0]);
- } else {
- $srcip = trim($parts[0]);
- }
- }
-?>
- <tr valign="top" id="r:<?= $srcip ?>:<?= $dstip ?>">
- <td class="listlr"><?= $iface ?></td>
- <td class="listr"><?= $proto ?></td>
- <td class="listr"><?= $info ?></td>
- <td class="listr"><?= $state ?></td>
- <td class="list">
- <img src="/themes/<?= $g['theme'] ?>/images/icons/icon_x.gif" height="17" width="17" border="0"
- onclick="removeState('<?= $srcip ?>', '<?= $dstip ?>');" style="cursor:pointer;"
- name="i:<?= $srcip ?>:<?= $dstip ?>"
- title="<?= gettext('Remove all state entries from') ?> <?= $srcip ?> <?= gettext('to') ?> <?= $dstip ?>" alt="" />
- </td>
- </tr>
-<?php
- $row++;
- ob_flush();
-}
-
-if ($row == 0):
-?>
- <tr>
- <td class="list" colspan="4" align="center" valign="top">
- <?= gettext("No states were found.") ?>
- </td>
- </tr>
-<?php
-endif;
-pclose($fd);
-?>
- </tbody>
- </table>
- </td>
- </tr>
- <tr>
- <td class="list" colspan="4" align="center" valign="top">
- <?php if (isset($_POST['filter']) && !empty($_POST['filter'])): ?>
- <?=gettext("States matching current filter")?>: <?= $row ?>
- <?php endif; ?>
- </td>
- </tr>
-</table>
-
-<!-- End of tab content -->
-
- </div>
- </td>
- </tr>
-</table>
-
-<?php require("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_dump_states_sources.php b/usr/local/www/diag_dump_states_sources.php
deleted file mode 100644
index 4cb14c2..0000000
--- a/usr/local/www/diag_dump_states_sources.php
+++ /dev/null
@@ -1,211 +0,0 @@
-<?php
-/*
- diag_dump_states_sources.php
- Copyright (C) 2005 Colin Smith
- Copyright (C) 2005-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /sbin/pfctl
- pfSense_MODULE: filter
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-showstates
-##|*NAME=Diagnostics: Show States page
-##|*DESCR=Allow access to the 'Diagnostics: Show States' page.
-##|*MATCH=diag_dump_states.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-
-/* handle AJAX operations */
-if ($_GET['action']) {
- if ($_GET['action'] == "remove") {
- if (is_ipaddr($_GET['srcip']) and is_ipaddr($_GET['dstip'])) {
- $retval = mwexec("/sbin/pfctl -K " . escapeshellarg($_GET['srcip']) . " -K " . escapeshellarg($_GET['dstip']));
- echo htmlentities("|{$_GET['srcip']}|{$_GET['dstip']}|{$retval}|");
- } else {
- echo gettext("invalid input");
- }
- exit;
- }
-}
-
-/* get our states */
-if ($_GET['filter']) {
- exec("/sbin/pfctl -s Sources | grep " . escapeshellarg(htmlspecialchars($_GET['filter'])), $sources);
-} else {
- exec("/sbin/pfctl -s Sources", $sources);
-}
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Show Source Tracking"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?=$jsevents["body"]["onload"];?>">
-<?php include("fbegin.inc"); ?>
-<form action="diag_dump_states_sources.php" method="get" name="iform">
-
-<script type="text/javascript">
-//<![CDATA[
- function removeSource(srcip, dstip) {
- var busy = function(index, icon) {
- jQuery(icon).bind("onclick", "");
- jQuery(icon).attr('src', jQuery(icon).attr('src').replace("\.gif", "_d.gif"));
- jQuery(icon).css("cursor", "wait");
- }
-
- jQuery('img[name="i:' + srcip + ":" + dstip + '"]').each(busy);
-
- jQuery.ajax(
- "<?=$_SERVER['SCRIPT_NAME'];?>" +
- "?action=remove&srcip=" + srcip + "&dstip=" + dstip,
- { type: "get", complete: removeComplete }
- );
- }
-
- function removeComplete(req) {
- var values = req.responseText.split("|");
- if (values[3] != "0") {
- alert('<?=gettext("An error occurred.");?>');
- return;
- }
-
- jQuery('tr[name="r:' + values[1] + ":" + values[2] + '"]').each(
- function(index, row) { jQuery(row).fadeOut(1000); }
- );
- }
-//]]>
-</script>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("States"), false, "diag_dump_states.php");
- $tab_array[] = array(gettext("Source Tracking"), true, "diag_dump_states_sources.php");
- $tab_array[] = array(gettext("Reset States"), false, "diag_resetstate.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
-
-<!-- Start of tab content -->
-
-<table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td>
- <form action="<?=$_SERVER['SCRIPT_NAME'];?>" method="get">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td>&nbsp;</td>
- <td style="font-weight:bold;" align="right">
- <?=gettext("Filter expression:");?>
- <input type="text" name="filter" class="formfld search" value="<?=htmlspecialchars($_GET['filter']);?>" size="30" />
- <input type="submit" class="formbtn" value="<?=gettext("Filter");?>" />
- </td>
- </tr>
- </table>
- </form>
- </td>
- </tr>
- <tr>
- <td>
- <table class="tabcont sortable" width="100%" border="0" cellspacing="0" cellpadding="0">
- <thead>
- <tr>
- <th class="listhdrr" width="40%"><?=gettext("Source -> Destination");?></th>
- <th class="listhdrr" width="15%"><?=gettext("# States");?></th>
- <th class="listhdrr" width="15%"><?=gettext("# Connections");?></th>
- <th class="listhdr" width="15%"><?=gettext("Rate");?></th>
- <th class="list sort_ignore" width="1%"></th>
- </tr>
- </thead>
- <tbody>
-<?php
-$row = 0;
-if (count($sources) > 0) {
- foreach ($sources as $line) {
- if ($row >= 1000) {
- break;
- }
-
- // 192.168.20.2 -> 216.252.56.1 ( states 10, connections 0, rate 0.0/0s )
-
- $source_split = "";
- preg_match("/(.*)\s\(\sstates\s(.*),\sconnections\s(.*),\srate\s(.*)\s\)/", $line, $source_split);
- list($all, $info, $numstates, $numconnections, $rate) = $source_split;
-
- $source_split = "";
- preg_match("/(.*)\s\<?-\>?\s(.*)/", $info, $source_split);
- list($all, $srcip, $dstip) = $source_split;
-
- ?>
- <tr valign='top' name='r:<?php echo "{$srcip}:{$dstip}" ?>'>
- <td class='listlr'><?php echo $info;?></td>
- <td class='listr'><?php echo $numstates;?></td>
- <td class='listr'><?php echo $numconnections;?></td>
- <td class='listr'><?php echo $rate;?></td>
- <td class='list'>
- <img src='/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif' height='17' width='17' border='0'
- onclick="removeSource(<?php echo "'{$srcip}', '{$dstip}'"; ?>);" style='cursor:pointer;'
- name='i:<?php echo "{$srcip}:{$dstip}"; ?>'
- title='<?php echo gettext("Remove all source tracking entries from") . " {$srcip} " . gettext("to") . " {$dstip}";?>' alt='' />
- </td>
- </tr>
-<?php
- $row++;
- }
-} else {
- echo "<tr>
- <td class='list' colspan='5' align='center' valign='top'>
- " . gettext("No source tracking entries were found.") . "
- </td>
- </tr>";
-}
-?>
- </tbody>
- </table>
- </td>
- </tr>
-</table>
-
-<!-- End of tab content -->
-
- </div>
- </td>
- </tr>
-</table>
-
-<?php require("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_gmirror.php b/usr/local/www/diag_gmirror.php
deleted file mode 100644
index f0f5bff..0000000
--- a/usr/local/www/diag_gmirror.php
+++ /dev/null
@@ -1,406 +0,0 @@
-<?php
-/*
- diag_gmirror.php
- Copyright (C) 2014 Jim Pingle
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INClUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /sbin/gmirror /sbin/geom /usr/bin/grep /usr/bin/egrep /usr/bin/cut /usr/bin/head
- pfSense_BUILDER_BINARIES: /sbin/mount /usr/bin/awk /usr/bin/sed
- pfSense_MODULE: gmirror
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-gmirror
-##|*NAME=Diagnostics: GEOM Mirrors
-##|*DESCR=Allow access to the 'Diagnostics: GEOM Mirrors' page.
-##|*MATCH=diag_gmirror.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("config.inc");
-require_once("gmirror.inc");
-
-$pgtitle = array(gettext("Diagnostics"), gettext("GEOM Mirrors"));
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?=$jsevents["body"]["onload"];?>">
-
-<?php include("fbegin.inc"); ?>
-
-<?php
-$action_list = array(
- "forget" => gettext("Forget all formerly connected consumers"),
- "clear" => gettext("Remove metadata from disk"),
- "insert" => gettext("Insert consumer into mirror"),
- "remove" => gettext("Remove consumer from mirror"),
- "activate" => gettext("Reactivate consumer on mirror"),
- "deactivate" => gettext("Deactivate consumer from mirror"),
- "rebuild" => gettext("Force rebuild of mirror consumer"),
-);
-
-/* User tried to pass a bogus action */
-if (!empty($_REQUEST['action']) && !array_key_exists($_REQUEST['action'], $action_list)) {
- header("Location: diag_gmirror.php");
- return;
-}
-
-if ($_POST) {
- if (!isset($_POST['confirm']) || ($_POST['confirm'] != gettext("Confirm"))) {
- header("Location: diag_gmirror.php");
- return;
- }
- $input_errors = "";
-
- if (($_POST['action'] != "clear") && !is_valid_mirror($_POST['mirror'])) {
- $input_errors[] = gettext("You must supply a valid mirror name.");
- }
-
- if (!empty($_POST['consumer']) && !is_valid_consumer($_POST['consumer'])) {
- $input_errors[] = gettext("You must supply a valid consumer name");
- }
-
- /* Additional action-specific validation that hasn't already been tested */
- switch ($_POST['action']) {
- case "insert":
- if (!is_consumer_unused($_POST['consumer'])) {
- $input_errors[] = gettext("Consumer is already in use and cannot be inserted. Remove consumer from existing mirror first.");
- }
- if (gmirror_consumer_has_metadata($_POST['consumer'])) {
- $input_errors[] = gettext("Consumer has metadata from an existing mirror. Clear metadata before inserting consumer.");
- }
- $mstat = gmirror_get_status_single($_POST['mirror']);
- if (strtoupper($mstat) != "COMPLETE") {
- $input_errors[] = gettext("Mirror is not in a COMPLETE state, cannot insert consumer. Forget disconnected disks or wait for rebuild to finish.");
- }
- break;
- case "clear":
- if (!is_consumer_unused($_POST['consumer'])) {
- $input_errors[] = gettext("Consumer is in use and cannot be cleared. Deactivate disk first.");
- }
- if (!gmirror_consumer_has_metadata($_POST['consumer'])) {
- $input_errors[] = gettext("Consumer has no metadata to clear.");
- }
- break;
- case "activate":
- if (is_consumer_in_mirror($_POST['consumer'], $_POST['mirror'])) {
- $input_errors[] = gettext("Consumer is already present on specified mirror.");
- }
- if (!gmirror_consumer_has_metadata($_POST['consumer'])) {
- $input_errors[] = gettext("Consumer has no metadata and cannot be reactivated.");
- }
-
- break;
- case "remove":
- case "deactivate":
- case "rebuild":
- if (!is_consumer_in_mirror($_POST['consumer'], $_POST['mirror'])) {
- $input_errors[] = gettext("Consumer must be present on the specified mirror.");
- }
- break;
- }
-
- $result = 0;
- if (empty($input_errors)) {
- switch ($_POST['action']) {
- case "forget":
- $result = gmirror_forget_disconnected($_POST['mirror']);
- break;
- case "clear":
- $result = gmirror_clear_consumer($_POST['consumer']);
- break;
- case "insert":
- $result = gmirror_insert_consumer($_POST['mirror'], $_POST['consumer']);
- break;
- case "remove":
- $result = gmirror_remove_consumer($_POST['mirror'], $_POST['consumer']);
- break;
- case "activate":
- $result = gmirror_activate_consumer($_POST['mirror'], $_POST['consumer']);
- break;
- case "deactivate":
- $result = gmirror_deactivate_consumer($_POST['mirror'], $_POST['consumer']);
- break;
- case "rebuild":
- $result = gmirror_force_rebuild($_POST['mirror'], $_POST['consumer']);
- break;
- }
- $redir = "Location: diag_gmirror.php";
- if ($result != 0) {
- $redir .= "?error=" . urlencode($result);
- }
- /* If we reload the page too fast, the gmirror information may be missing or not up-to-date. */
- sleep(3);
- header($redir);
- return;
- }
-}
-
-$mirror_status = gmirror_get_status();
-$mirror_list = gmirror_get_mirrors();
-$unused_disks = gmirror_get_disks();
-$unused_consumers = array();
-foreach ($unused_disks as $disk) {
- if (is_consumer_unused($disk)) {
- $unused_consumers = array_merge($unused_consumers, gmirror_get_all_unused_consumer_sizes_on_disk($disk));
- }
-}
-
-if ($input_errors) {
- print_input_errors($input_errors);
-}
-if ($_GET["error"] && ($_GET["error"] != 0)) {
- print_info_box(gettext("There was an error performing the chosen mirror operation. Check the System Log for details."));
-}
-
-?>
-<form action="diag_gmirror.php" method="POST" id="gmirror_form" name="gmirror_form">
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <span class="vexpl">
- <span class="red">
- <strong><?=gettext("NOTE:")?>&nbsp;</strong>
- </span>
- <?=gettext("The options on this page are intended for use by advanced users only. This page is for managing existing mirrors, not creating new mirrors.")?>
- <br />&nbsp;
- </span>
- <p/>
- <table width="100%" border="0" cellpadding="6" cellspacing="0">
-
-<?php
- if ($_GET["action"]):
-?>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?php echo gettext("Confirm Action"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell">&nbsp;</td>
- <td width="78%" class="vtable">
- <strong><?php echo gettext("Please confirm the selected action"); ?></strong>:
- <br />
- <br /><strong><?php echo gettext("Action"); ?>:</strong> <?php echo $action_list[$_GET["action"]]; ?>
- <input type="hidden" name="action" value="<?php echo htmlspecialchars($_GET["action"]); ?>" />
- <?php if (!empty($_GET["mirror"])): ?>
- <br /><strong><?php echo gettext("Mirror"); ?>:</strong> <?php echo htmlspecialchars($_GET["mirror"]); ?>
- <input type="hidden" name="mirror" value="<?php echo htmlspecialchars($_GET["mirror"]); ?>" />
- <?php endif; ?>
- <?php if (!empty($_GET["consumer"])): ?>
- <br /><strong><?php echo gettext("Consumer"); ?>:</strong> <?php echo htmlspecialchars($_GET["consumer"]); ?>
- <input type="hidden" name="consumer" value="<?php echo htmlspecialchars($_GET["consumer"]); ?>" />
- <?php endif; ?>
- <br />
- <br /><input type="submit" name="confirm" value="<?php echo gettext("Confirm"); ?>" />
- </td>
- </tr>
-<?php
- else:
-?>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?php echo gettext("GEOM Mirror information"); ?></td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncell"><?php echo gettext("Mirror Status"); ?></td>
- <td width="78%" class="vtable">
- <table width="100%" border="0" cellspacing="0" cellpadding="0" summary="gmirror status">
- <tbody id="gmirror_status_table">
-<?php
- if (count($mirror_status) > 0):
-?>
- <tr>
- <td width="30%" class="vncellt"><?php echo gettext("Name"); ?></td>
- <td width="30%" class="vncellt"><?php echo gettext("Status"); ?></td>
- <td width="40%" class="vncellt"><?php echo gettext("Component"); ?></td>
- </tr>
-<?php
- foreach ($mirror_status as $mirror => $name):
- $components = count($name["components"]);
-?>
- <tr>
- <td width="30%" rowspan="<?php echo $components; ?>" class="listr">
- <?php echo htmlspecialchars($name['name']); ?>
- <br />Size: <?php echo gmirror_get_mirror_size($name['name']); ?>
- </td>
- <td width="30%" rowspan="<?php echo $components; ?>" class="listr">
- <?php echo htmlspecialchars($name['status']); ?>
-<?php
- if (strtoupper($name['status']) == "DEGRADED"):
-?>
- <br /><a href="diag_gmirror.php?action=forget&amp;mirror=<?php echo htmlspecialchars($name['name']); ?>">[<?php echo gettext("Forget Disconnected Disks"); ?>]</a>
-<?php
- endif;
-?>
- </td>
- <td width="40%" class="listr">
- <?php echo $name['components'][0]; ?>
- <?php list($cname, $cstatus) = explode(" ", $name['components'][0], 2); ?>
- <br />
-<?php
- if ((strtoupper($name['status']) == "COMPLETE") && (count($name["components"]) > 1)):
-?>
- <a href="diag_gmirror.php?action=rebuild&amp;consumer=<?php echo htmlspecialchars($cname); ?>&amp;mirror=<?php echo htmlspecialchars($name['name']); ?>">[<?php echo gettext("Rebuild"); ?>]</a>
- <a href="diag_gmirror.php?action=deactivate&amp;consumer=<?php echo htmlspecialchars($cname); ?>&amp;mirror=<?php echo htmlspecialchars($name['name']); ?>">[<?php echo gettext("Deactivate"); ?>]</a>
- <a href="diag_gmirror.php?action=remove&amp;consumer=<?php echo htmlspecialchars($cname); ?>&amp;mirror=<?php echo htmlspecialchars($name['name']); ?>">[<?php echo gettext("Remove"); ?>]</a>
-<?php
- endif;
-?>
- </td>
- </tr>
-<?php
- if (count($name["components"]) > 1):
- $morecomponents = array_slice($name["components"], 1);
- foreach ($morecomponents as $component):
-?>
- <tr>
- <td width="40%" class="listr">
- <?php echo $component; ?>
- <?php list($cname, $cstatus) = explode(" ", $component, 2); ?>
- <br />
-<?php
- if ((strtoupper($name['status']) == "COMPLETE") && (count($name["components"]) > 1)):
-?>
- <a href="diag_gmirror.php?action=rebuild&amp;consumer=<?php echo htmlspecialchars($cname); ?>&amp;mirror=<?php echo htmlspecialchars($name['name']); ?>">[<?php echo gettext("Rebuild"); ?>]</a>
- <a href="diag_gmirror.php?action=deactivate&amp;consumer=<?php echo htmlspecialchars($cname); ?>&amp;mirror=<?php echo htmlspecialchars($name['name']); ?>">[<?php echo gettext("Deactivate"); ?>]</a>
- <a href="diag_gmirror.php?action=remove&amp;consumer=<?php echo htmlspecialchars($cname); ?>&amp;mirror=<?php echo htmlspecialchars($name['name']); ?>">[<?php echo gettext("Remove"); ?>]</a>
-<?php
- endif;
-?>
- </td>
- </tr>
-<?php
- endforeach;
- endif;
- endforeach;
- else:
-?>
- <tr>
- <td colspan="3" class="listr"><?php echo gettext("No Mirrors Found"); ?></td>
- </tr>
-<?php
- endif;
-?>
- </tbody>
- </table>
- <br /><?php echo gettext("Some disk operations may only be performed when there are multiple consumers present in a mirror."); ?>
- </td>
- </tr>
-
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?php echo gettext("Consumer information"); ?></td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncell"><?php echo gettext("Available Consumers"); ?></td>
- <td width="78%" class="vtable">
-
- <table width="100%" border="0" cellspacing="0" cellpadding="0" summary="consumer list">
- <tbody id="consumer_list">
-<?php
- if (count($unused_consumers) > 0):
-?>
- <tr>
- <td width="30%" class="vncellt"><?php echo gettext("Name"); ?></td>
- <td width="30%" class="vncellt"><?php echo gettext("Size"); ?></td>
- <td width="40%" class="vncellt"><?php echo gettext("Add to Mirror"); ?></td>
- </tr>
-<?php
- foreach ($unused_consumers as $consumer):
-?>
- <tr>
- <td width="30%" class="listr">
- <?php echo htmlspecialchars($consumer['name']); ?>
- </td>
- <td width="30%" class="listr"><?php echo htmlspecialchars($consumer['size']); ?> <?php echo htmlspecialchars($consumer['humansize']); ?></td>
- <td width="40%" class="listr">
-<?php
- $oldmirror = gmirror_get_consumer_metadata_mirror($consumer['name']);
- if ($oldmirror):
-?>
- <a href="diag_gmirror.php?action=activate&amp;consumer=<?php echo htmlspecialchars($consumer['name']); ?>&amp;mirror=<?php echo htmlspecialchars($oldmirror); ?>">[<?php echo gettext("Reactivate on:") . ' ' . htmlspecialchars($oldmirror); ?>]</a>
- <br /><a href="diag_gmirror.php?action=clear&amp;consumer=<?php echo htmlspecialchars($consumer['name']); ?>">[<?php echo gettext("Remove metadata from disk"); ?>]</a>
-<?php
- else:
- foreach ($mirror_list as $mirror):
- $mirror_size = gmirror_get_mirror_size($mirror);
- $consumer_size = gmirror_get_unused_consumer_size($consumer['name']);
- if ($consumer_size > $mirror_size):
-?>
- <a href="diag_gmirror.php?action=insert&amp;consumer=<?php echo htmlspecialchars($consumer['name']); ?>&amp;mirror=<?php echo htmlspecialchars($mirror); ?>"><?php echo htmlspecialchars($mirror); ?></a>
-<?php
- endif;
- endforeach;
- endif;
-?>
- </td>
- </tr>
-<?php
- endforeach;
- else:
-?>
- <tr>
- <td colspan="3" class="listr">
- <?php echo gettext("No unused consumers found"); ?>
- </td>
- </tr>
-<?php
- endif;
-?>
- </tbody>
- </table>
- <br /><?php echo gettext("Consumers may only be added to a mirror if they are larger than the size of the mirror."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class=""><?php echo gettext("To repair a failed mirror, first perform a 'Forget' command on the mirror, followed by an 'insert' action on the new consumer."); ?></td>
- </tr>
-<?php
- endif;
-?>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php require("fend.inc"); ?>
-</body>
-</html>
-
-<?php
-
-// Clear the loading indicator
-echo "<script type=\"text/javascript\">";
-echo "jQuery('#loading').html('');";
-echo "</script>";
-
-?>
diff --git a/usr/local/www/diag_ipsec.php b/usr/local/www/diag_ipsec.php
deleted file mode 100644
index 96c6835..0000000
--- a/usr/local/www/diag_ipsec.php
+++ /dev/null
@@ -1,555 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_ipsec.php
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2008 Shrew Soft Inc <mgrooms@shrew.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Parts of this code was originally based on vpn_ipsec_sad.php
- Copyright (C) 2003-2004 Manuel Kasper
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: ipsec
-*/
-
-##|+PRIV
-##|*IDENT=page-status-ipsec
-##|*NAME=Status: IPsec page
-##|*DESCR=Allow access to the 'Status: IPsec' page.
-##|*MATCH=diag_ipsec.php*
-##|-PRIV
-
-
-global $g;
-
-$pgtitle = array(gettext("Status"), gettext("IPsec"));
-$shortcut_section = "ipsec";
-
-require("guiconfig.inc");
-include("head.inc");
-require("ipsec.inc");
-
-if ($_GET['act'] == 'connect') {
- if (ctype_digit($_GET['ikeid'])) {
- $ph1ent = ipsec_get_phase1($_GET['ikeid']);
- if (!empty($ph1ent)) {
- if (empty($ph1ent['iketype']) || $ph1ent['iketype'] == 'ikev1') {
- $ph2entries = ipsec_get_number_of_phase2($_GET['ikeid']);
- for ($i = 0; $i < $ph2entries; $i++) {
- $connid = escapeshellarg("con{$_GET['ikeid']}00{$i}");
- mwexec("/usr/local/sbin/ipsec down {$connid}");
- mwexec("/usr/local/sbin/ipsec up {$connid}");
- }
- } else {
- mwexec("/usr/local/sbin/ipsec down con" . escapeshellarg($_GET['ikeid']));
- mwexec("/usr/local/sbin/ipsec up con" . escapeshellarg($_GET['ikeid']));
- }
- }
- }
-} else if ($_GET['act'] == 'ikedisconnect') {
- if (ctype_digit($_GET['ikeid'])) {
- if (!empty($_GET['ikesaid']) && ctype_digit($_GET['ikesaid'])) {
- mwexec("/usr/local/sbin/ipsec down con" . escapeshellarg($_GET['ikeid']) . "[" . escapeshellarg($_GET['ikesaid']) . "]");
- } else {
- mwexec("/usr/local/sbin/ipsec down con" . escapeshellarg($_GET['ikeid']));
- }
- }
-} else if ($_GET['act'] == 'childdisconnect') {
- if (ctype_digit($_GET['ikeid'])) {
- if (!empty($_GET['ikesaid']) && ctype_digit($_GET['ikesaid'])) {
- mwexec("/usr/local/sbin/ipsec down con" . escapeshellarg($_GET['ikeid']) . "{" . escapeshellarg($_GET['ikesaid']) . "}");
- }
- }
-}
-
-if (!is_array($config['ipsec']['phase1'])) {
- $config['ipsec']['phase1'] = array();
-}
-
-$a_phase1 = &$config['ipsec']['phase1'];
-
-$status = ipsec_smp_dump_status();
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?php echo $jsevents["body"]["onload"]; ?>">
-<?php include("fbegin.inc"); ?>
-<div id="inputerrors"></div>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="status ipsec">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Overview"), true, "diag_ipsec.php");
- $tab_array[1] = array(gettext("Leases"), false, "diag_ipsec_leases.php");
- $tab_array[2] = array(gettext("SAD"), false, "diag_ipsec_sad.php");
- $tab_array[3] = array(gettext("SPD"), false, "diag_ipsec_spd.php");
- $tab_array[4] = array(gettext("Logs"), false, "diag_logs_ipsec.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" class="tabcont sortable" summary="status">
- <thead>
- <tr>
- <th class="listhdrr nowrap"><?php echo gettext("Description");?></th>
- <th class="listhdrr nowrap"><?php echo gettext("Local ID");?></th>
- <th class="listhdrr nowrap"><?php echo gettext("Local IP");?></th>
- <th class="listhdrr nowrap"><?php echo gettext("Remote ID");?></th>
- <th class="listhdrr nowrap"><?php echo gettext("Remote IP");?></th>
- <th class="listhdrr nowrap"><?php echo gettext("Role");?></th>
- <th class="listhdrr nowrap"><?php echo gettext("Reauth");?></th>
- <th class="listhdrr nowrap"><?php echo gettext("Algo");?></th>
- <th class="listhdrr nowrap"><?php echo gettext("Status");?></th>
- <th class="list nowrap"></th>
- </tr>
- </thead>
- <tbody>
-<?php
- $ipsecconnected = array();
- if (is_array($status['query']) && is_array($status['query']['ikesalist']) && is_array($status['query']['ikesalist']['ikesa'])):
- foreach ($status['query']['ikesalist']['ikesa'] as $ikeid => $ikesa):
- $con_id = substr($ikesa['peerconfig'], 3);
- if ($ikesa['version'] == 1) {
- $ph1idx = substr($con_id, 0, strrpos(substr($con_id, 0, -1), '00'));
- $ipsecconnected[$ph1idx] = $ph1idx;
- } else {
- $ipsecconnected[$con_id] = $ph1idx = $con_id;
- }
-
- if (ipsec_phase1_status($status['query']['ikesalist']['ikesa'], $ikesa['id'])) {
- $icon = "pass";
- } elseif (!isset($config['ipsec']['enable'])) {
- $icon = "block";
- } else {
- $icon = "reject";
- }
-?>
- <tr>
- <td class="listlr">
-<?php
- echo htmlspecialchars(ipsec_get_descr($ph1idx));
-?>
- </td>
- <td class="listr">
-<?php
- if (!is_array($ikesa['local'])) {
- echo gettext("Unknown");
- } else {
- if (!empty($ikesa['local']['identification'])) {
- if ($ikesa['local']['identification'] == '%any') {
- echo gettext('Any identifier');
- } else {
- echo htmlspecialchars($ikesa['local']['identification']);
- }
- } else {
- echo gettext("Unknown");
- }
- }
-?>
- </td>
- <td class="listr">
-<?php
- if (!is_array($ikesa['local'])) {
- echo gettext("Unknown");
- } else {
- if (!empty($ikesa['local']['address'])) {
- echo htmlspecialchars($ikesa['local']['address']) . '<br/>' .
- gettext('Port: ') . htmlspecialchars($ikesa['local']['port']);
- } else {
- echo gettext("Unknown");
- }
- if ($ikesa['local']['port'] == '4500') {
- echo " NAT-T";
- }
- }
-?>
- </td>
- <td class="listr">
-<?php
- if (!is_array($ikesa['remote'])) {
- echo gettext("Unknown");
- } else {
- $identity = "";
- if (!empty($ikesa['remote']['identification'])) {
- if ($ikesa['remote']['identification'] == '%any') {
- $identity = 'Any identifier';
- } else {
- $identity = htmlspecialchars($ikesa['remote']['identification']);
- }
- }
-
- if (is_array($ikesa['remote']['auth']) && !empty($ikesa['remote']['auth'][0]['identity'])) {
- echo htmlspecialchars($ikesa['remote']['auth'][0]['identity']);
- echo "<br/>{$identity}";
- } else {
- if (empty($identity)) {
- echo gettext("Unknown");
- } else {
- echo $identity;
- }
- }
- }
-?>
- </td>
- <td class="listr">
-<?php
- if (!is_array($ikesa['remote'])) {
- echo gettext("Unknown");
- } else {
- if (!empty($ikesa['remote']['address'])) {
- echo htmlspecialchars($ikesa['remote']['address']) . '<br/>' .
- gettext('Port: ') . htmlspecialchars($ikesa['remote']['port']);
- } else {
- echo gettext("Unknown");
- }
- if ($ikesa['remote']['port'] == '4500') {
- echo " NAT-T";
- }
- }
-?>
- </td>
- <td class="listr">
- IKEv<?php echo htmlspecialchars($ikesa['version']);?>
- <br/>
-<?php
- echo htmlspecialchars($ikesa['role']);
-?>
- </td>
- <td class="listr">
-<?php
- echo htmlspecialchars($ikesa['reauth']);
-?>
- </td>
- <td class="listr">
-<?php
- echo htmlspecialchars($ikesa['encalg']);
- echo "<br/>";
- echo htmlspecialchars($ikesa['intalg']);
- echo "<br/>";
- echo htmlspecialchars($ikesa['prfalg']);
- echo "<br/>";
- echo htmlspecialchars($ikesa['dhgroup']);
-?>
- </td>
- <td class="listr">
- <center>
- <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_<?php echo $icon; ?>.gif" title="<?php echo $ikesa['status']; ?>" alt=""/>
- <br/><?php echo htmlspecialchars($ikesa['status']);?>
- <br/><?php echo htmlspecialchars($ikesa['established']);?>
- </center>
- </td>
- <td >
-<?php
- if ($icon != "pass"):
-?>
- <center>
- <a href="diag_ipsec.php?act=connect&amp;ikeid=<?php echo $con_id; ?>">
- <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_service_start.gif" alt=<?php echo gettext("Connect VPN");?> title=<?php echo gettext("Connect VPN");?> border="0"/>
- </a>
- </center>
-<?php
- else:
-?>
- <center>
- <a href="diag_ipsec.php?act=ikedisconnect&amp;ikeid=<?php echo $con_id; ?>">
- <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_service_stop.gif" alt=<?php echo gettext("Disconnect VPN");?> title=<?php echo gettext("Disconnect VPN");?> border="0"/>
- </a>
- <a href="diag_ipsec.php?act=ikedisconnect&amp;ikeid=<?php echo $con_id; ?>&amp;ikesaid=<?php echo $ikesa['id']; ?>">
- <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" alt=<?php echo gettext("Disconnect VPN Connection");?> title=<?php echo gettext("Disconnect VPN Connection");?> border="0"/>
- </a>
- </center>
-<?php
- endif;
-?>
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="">
- </table>
- </td>
- </tr>
-<?php
- if (is_array($ikesa['childsalist'])):
-?>
- <tr>
- <td class="listrborder" colspan="9">
- <div id="btnchildsa-<?=$ikeid;?>">
- <input type="button" onclick="show_childsa('childsa-<?=$ikeid;?>', 'btnchildsa-<?=$ikeid;?>');" value="+" /> - Show child SA entries
- </div>
- <table class="tabcont" width="100%" height="100%" border="0" cellspacing="0" cellpadding="0" id="childsa-<?=$ikeid;?>" style="display:none" summary="">
- <thead>
- <tr>
- <th class="listhdrr nowrap"><?php echo gettext("Local subnets");?></th>
- <th class="listhdrr nowrap"><?php echo gettext("Local SPI(s)");?></th>
- <th class="listhdrr nowrap"><?php echo gettext("Remote subnets");?></th>
- <th class="listhdrr nowrap"><?php echo gettext("Times");?></th>
- <th class="listhdrr nowrap"><?php echo gettext("Algo");?></th>
- <th class="listhdrr nowrap"><?php echo gettext("Stats");?></th>
- </tr>
- </thead>
- <tbody>
-<?php
- if (is_array($ikesa['childsalist']['childsa'])):
- foreach ($ikesa['childsalist']['childsa'] as $childsa):
-?>
- <tr valign="top">
- <td class="listlr nowrap">
-<?php
- if (is_array($childsa['local']) &&
- is_array($childsa['local']['networks']) &&
- is_array($childsa['local']['networks']['network'])) {
- foreach ($childsa['local']['networks']['network'] as $lnets) {
- echo htmlspecialchars(ipsec_fixup_network($lnets)) . "<br />";
- }
- } else {
- echo gettext("Unknown");
- }
-?>
- </td>
- <td class="listr nowrap">
-<?php
- if (is_array($childsa['local'])) {
- echo gettext("Local: ") . htmlspecialchars($childsa['local']['spi']);
- }
- if (is_array($childsa['remote'])) {
- echo "<br/>" . gettext("Remote: ") . htmlspecialchars($childsa['remote']['spi']);
- }
-?>
- </td>
- <td class="listr nowrap">
-<?php
- if (is_array($childsa['remote']) &&
- is_array($childsa['remote']['networks']) &&
- is_array($childsa['remote']['networks']['network'])) {
- foreach ($childsa['remote']['networks']['network'] as $rnets) {
- echo htmlspecialchars(ipsec_fixup_network($rnets)) . "<br />";
- }
- } else {
- echo gettext("Unknown");
- }
-?>
- </td>
- <td class="listr nowrap">
-<?php
- echo gettext("Rekey: ") . htmlspecialchars($childsa['rekey']);
- echo "<br/>" . gettext("Life: ") . htmlspecialchars($childsa['lifetime']);
- echo "<br/>" . gettext("Install: ") .htmlspecialchars($childsa['installtime']);
-
-?>
- </td>
- <td class="listr nowrap">
-<?php
- echo htmlspecialchars($childsa['encalg']);
- echo "<br/>";
- echo htmlspecialchars($childsa['intalg']);
- echo "<br/>";
- if (!empty($childsa['prfalg'])) {
- echo htmlspecialchars($childsa['prfalg']);
- echo "<br/>";
- }
- if (!empty($childsa['dhgroup'])) {
- echo htmlspecialchars($childsa['dhgroup']);
- echo "<br/>";
- }
- if (!empty($childsa['esn'])) {
- echo htmlspecialchars($childsa['esn']);
- echo "<br/>";
- }
- echo gettext("IPComp: ") . htmlspecialchars($childsa['ipcomp']);
-?>
- </td>
- <td class="listr nowrap">
-<?php
- echo gettext("Bytes-In: ") . htmlspecialchars($childsa['bytesin']);
- echo "<br/>";
- echo gettext("Packets-In: ") . htmlspecialchars($childsa['packetsin']);
- echo "<br/>";
- echo gettext("Bytes-Out: ") . htmlspecialchars($childsa['bytesout']);
- echo "<br/>";
- echo gettext("Packets-Out: ") . htmlspecialchars($childsa['packetsout']);
-?>
- </td>
- <td>
- <center>
- <a href="diag_ipsec.php?act=childdisconnect&amp;ikeid=<?php echo $con_id; ?>&amp;ikesaid=<?php echo $childsa['reqid']; ?>">
- <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" alt=<?php echo gettext("Disconnect Child SA");?> title=<?php echo gettext("Disconnect Child SA");?> border="0"/>
- </a>
- </center>
- </td>
- <td class="list nowrap">
- &nbsp;
- </td>
- </tr>
-<?php
- endforeach;
- endif;
-?>
- <tr style="display:none;"><td></td></tr>
- </tbody>
- </table>
- </td>
- </tr>
-<?php
- endif;
-
- unset($con_id);
- endforeach;
- endif;
-
- $rgmap = array();
- foreach ($a_phase1 as $ph1ent):
- if (isset($ph1ent['disabled'])) {
- continue;
- }
- $rgmap[$ph1ent['remote-gateway']] = $ph1ent['remote-gateway'];
- if ($ipsecconnected[$ph1ent['ikeid']]) {
- continue;
- }
-?>
- <tr>
- <td class="listlr">
-<?php
- echo htmlspecialchars($ph1ent['descr']);
-?>
- </td>
- <td class="listr">
-<?php
- list ($myid_type, $myid_data) = ipsec_find_id($ph1ent, "local");
- if (empty($myid_data)) {
- echo gettext("Unknown");
- } else {
- echo htmlspecialchars($myid_data);
- }
-?>
- </td>
- <td class="listr">
-<?php
- $ph1src = ipsec_get_phase1_src($ph1ent);
- if (empty($ph1src)) {
- echo gettext("Unknown");
- } else {
- echo htmlspecialchars($ph1src);
- }
-?>
- </td>
- <td class="listr">
-<?php
- list ($peerid_type, $peerid_data) = ipsec_find_id($ph1ent, "peer", $rgmap);
- if (empty($peerid_data)) {
- echo gettext("Unknown");
- } else {
- echo htmlspecialchars($peerid_data);
- }
-?>
- </td>
- <td class="listr">
-<?php
- $ph1src = ipsec_get_phase1_dst($ph1ent);
- if (empty($ph1src)) {
- echo gettext("Unknown");
- } else {
- echo htmlspecialchars($ph1src);
- }
-?>
- </td>
- <td class="listr" >
- </td>
- <td class="listr" >
- </td>
- <td class="listr" >
- </td>
-<?php
- if (isset($ph1ent['mobile'])):
-?>
- <td class="listr">
- <center>
- <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_pass.gif" title=<?php echo gettext("Awaiting connections");?> alt=""/>
- <br/><?php echo gettext("Awaiting connections");?>
- </center>
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="">
- </table>
- </td>
-<?php
- else:
-?>
- <td class="listr">
- <center>
- <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_reject.gif" title=<?php echo gettext("Disconnected");?> alt=""/>
- <br/><?php echo gettext("Disconnected");?>
- </center>
- </td>
- <td >
- <center>
- <a href="diag_ipsec.php?act=connect&amp;ikeid=<?php echo $ph1ent['ikeid']; ?>">
- <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_service_start.gif" alt=<?php echo gettext("Connect VPN");?> title=<?php echo gettext("Connect VPN");?> border="0"/>
- </a>
- </center>
- </td>
-<?php
- endif;
-?>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="">
- </table>
- </td>
- </tr>
-<?php
- endforeach;
- unset($ipsecconnected, $phase1, $rgmap);
-?>
- <tr style="display:none;"><td></td></tr>
- </tbody>
- </table>
- </div>
- </td>
- </tr>
-</table>
-
-<p class="vexpl">
- <span class="red">
- <strong><?php echo gettext("Note:");?><br /></strong>
- </span>
- <?php echo gettext("You can configure IPsec");?>
- <a href="vpn_ipsec.php">here</a>.
-</p>
-<?php unset($status); include("fend.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-function show_childsa(id, buttonid) {
- document.getElementById(buttonid).innerHTML='';
- aodiv = document.getElementById(id);
- aodiv.style.display = "block";
-}
-//]]>
-</script>
-</body>
-</html>
diff --git a/usr/local/www/diag_ipsec_leases.php b/usr/local/www/diag_ipsec_leases.php
deleted file mode 100644
index 501c83a..0000000
--- a/usr/local/www/diag_ipsec_leases.php
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_ipsec_leases.php
- Copyright (C) 2014 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /usr/local/sbin/ipsec
- pfSense_MODULE: ipsec
-*/
-
-##|+PRIV
-##|*IDENT=page-status-ipsec-leases
-##|*NAME=Status: IPsec: Leases page
-##|*DESCR=Allow access to the 'Status: IPsec: Leases' page.
-##|*MATCH=diag_ipsec_leases.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("ipsec.inc");
-
-$pgtitle = array(gettext("Status"), gettext("IPsec"), gettext("Leases"));
-$shortcut_section = "ipsec";
-include("head.inc");
-
-$mobile = ipsec_dump_mobile();
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
- <?php include("fbegin.inc"); ?>
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="status ipsec sad">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Overview"), false, "diag_ipsec.php");
- $tab_array[1] = array(gettext("Leases"), true, "diag_ipsec_leases.php");
- $tab_array[2] = array(gettext("SAD"), false, "diag_ipsec_sad.php");
- $tab_array[3] = array(gettext("SPD"), false, "diag_ipsec_spd.php");
- $tab_array[4] = array(gettext("Logs"), false, "diag_logs_ipsec.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <?php if (isset($mobile['pool']) && is_array($mobile['pool'])): ?>
- <?php foreach ($mobile['pool'] as $pool): ?>
- <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="4" valign="top" class="listtopic">
- <?php
- echo gettext("Pool: ") . $pool['name'];
- echo ' ' . gettext("usage: ") . $pool['usage'];
- echo ' ' . gettext("online: ") . $pool['online'];
- ?>
- </td>
- </tr>
- <?php if (is_array($pool['lease']) && count($pool['lease']) > 0): ?>
- <tr>
- <td class="listhdrr nowrap"><?=gettext("ID");?></td>
- <td class="listhdrr nowrap"><?=gettext("Host");?></td>
- <td class="listhdrr nowrap"><?=gettext("Status");?></td>
- <td class="list nowrap"></td>
- </tr>
- <?php foreach ($pool['lease'] as $lease): ?>
- <tr>
- <td class="listlr"><?=htmlspecialchars($lease['id']);?></td>
- <td class="listr"><?=htmlspecialchars($lease['host']);?></td>
- <td class="listr"><?=htmlspecialchars($lease['status']);?></td>
- <td class="list nowrap">
- </td>
- </tr>
- <?php endforeach;
- else: ?>
- <tr>
- <td>
- <p><strong><?=gettext("No leases from this pool yet.");?></strong></p>
- </td>
- </tr>
- <?php endif; ?>
- </table>
- <?php endforeach; ?>
- <?php else: ?>
- <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td>
- <p><strong><?=gettext("No IPsec pools.");?></strong></p>
- </td>
- </tr>
- </table>
- <?php endif; ?>
- </div>
- </td>
- </tr>
- </table>
-
-<p class="vexpl">
-<span class="red"><strong><?=gettext("Note:");?><br /></strong></span>
-<?=gettext("You can configure your IPsec");?> <a href="vpn_ipsec.php"><?=gettext("here.");?></a>
-</p>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_ipsec_sad.php b/usr/local/www/diag_ipsec_sad.php
deleted file mode 100644
index f958d29..0000000
--- a/usr/local/www/diag_ipsec_sad.php
+++ /dev/null
@@ -1,141 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_ipsec_sad.php
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /sbin/setkey
- pfSense_MODULE: ipsec
-*/
-
-##|+PRIV
-##|*IDENT=page-status-ipsec-sad
-##|*NAME=Status: IPsec: SAD page
-##|*DESCR=Allow access to the 'Status: IPsec: SAD' page.
-##|*MATCH=diag_ipsec_sad.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("ipsec.inc");
-
-$pgtitle = array(gettext("Status"), gettext("IPsec"), gettext("SAD"));
-$shortcut_section = "ipsec";
-include("head.inc");
-
-$sad = ipsec_dump_sad();
-
-/* delete any SA? */
-if ($_GET['act'] == "del") {
- $fd = @popen("/sbin/setkey -c > /dev/null 2>&1", "w");
- if ($fd) {
- fwrite($fd, "delete {$_GET['src']} {$_GET['dst']} {$_GET['proto']} {$_GET['spi']} ;\n");
- pclose($fd);
- sleep(1);
- }
-}
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
- <?php include("fbegin.inc"); ?>
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="status ipsec sad">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Overview"), false, "diag_ipsec.php");
- $tab_array[1] = array(gettext("Leases"), false, "diag_ipsec_leases.php");
- $tab_array[2] = array(gettext("SAD"), true, "diag_ipsec_sad.php");
- $tab_array[3] = array(gettext("SPD"), false, "diag_ipsec_spd.php");
- $tab_array[4] = array(gettext("Logs"), false, "diag_logs_ipsec.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <?php if (count($sad)): ?>
- <tr>
- <td class="listhdrr nowrap"><?=gettext("Source");?></td>
- <td class="listhdrr nowrap"><?=gettext("Destination");?></td>
- <td class="listhdrr nowrap"><?=gettext("Protocol");?></td>
- <td class="listhdrr nowrap"><?=gettext("SPI");?></td>
- <td class="listhdrr nowrap"><?=gettext("Enc. alg.");?></td>
- <td class="listhdr nowrap"><?=gettext("Auth. alg.");?></td>
- <td class="listhdr nowrap"><?=gettext("Data");?></td>
- <td class="list nowrap"></td>
- </tr>
- <?php foreach ($sad as $sa): ?>
- <tr>
- <td class="listlr"><?=htmlspecialchars($sa['src']);?></td>
- <td class="listr"><?=htmlspecialchars($sa['dst']);?></td>
- <td class="listr"><?=htmlspecialchars(strtoupper($sa['proto']));?></td>
- <td class="listr"><?=htmlspecialchars($sa['spi']);?></td>
- <td class="listr"><?=htmlspecialchars($sa['ealgo']);?></td>
- <td class="listr"><?=htmlspecialchars($sa['aalgo']);?></td>
- <td class="listr"><?=htmlspecialchars($sa['data']);?></td>
- <td class="list nowrap">
- <?php
- $args = "src=" . rawurlencode($sa['src']);
- $args .= "&amp;dst=" . rawurlencode($sa['dst']);
- $args .= "&amp;proto=" . rawurlencode($sa['proto']);
- $args .= "&amp;spi=" . rawurlencode("0x" . $sa['spi']);
- ?>
- <a href="diag_ipsec_sad.php?act=del&amp;<?=$args;?>" onclick="return confirm('<?=gettext("Do you really want to delete this security association?"); ?>')">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" />
- </a>
- </td>
- </tr>
- <?php endforeach; ?>
- <?php else: ?>
- <tr>
- <td>
- <p><strong><?=gettext("No IPsec security associations.");?></strong></p>
- </td>
- </tr>
- <?php endif; ?>
- </table>
- </div>
- </td>
- </tr>
- </table>
-
-<p class="vexpl">
-<span class="red"><strong><?=gettext("Note:");?><br /></strong></span>
-<?=gettext("You can configure your IPsec");?> <a href="vpn_ipsec.php"><?=gettext("here.");?></a>
-</p>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_ipsec_spd.php b/usr/local/www/diag_ipsec_spd.php
deleted file mode 100644
index 5efeda3..0000000
--- a/usr/local/www/diag_ipsec_spd.php
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_ipsec_spd.php
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /sbin/setkey
- pfSense_MODULE: ipsec
-*/
-
-##|+PRIV
-##|*IDENT=page-status-ipsec-spd
-##|*NAME=Status: IPsec: SPD page
-##|*DESCR=Allow access to the 'Status: IPsec: SPD' page.
-##|*MATCH=diag_ipsec_spd.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("ipsec.inc");
-
-$pgtitle = array(gettext("Status"), gettext("IPsec"), gettext("SPD"));
-$shortcut_section = "ipsec";
-include("head.inc");
-
-$spd = ipsec_dump_spd();
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
- <?php include("fbegin.inc"); ?>
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="status ipsec spd">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Overview"), false, "diag_ipsec.php");
- $tab_array[1] = array(gettext("Leases"), false, "diag_ipsec_leases.php");
- $tab_array[2] = array(gettext("SAD"), false, "diag_ipsec_sad.php");
- $tab_array[3] = array(gettext("SPD"), true, "diag_ipsec_spd.php");
- $tab_array[4] = array(gettext("Logs"), false, "diag_logs_ipsec.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea" style="background:#eeeeee">
- <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <?php if (count($spd)): ?>
- <tr>
- <td class="listhdrr nowrap"><?= gettext("Source"); ?></td>
- <td class="listhdrr nowrap"><?= gettext("Destination"); ?></td>
- <td class="listhdrr nowrap"><?= gettext("Direction"); ?></td>
- <td class="listhdrr nowrap"><?= gettext("Protocol"); ?></td>
- <td class="listhdrr nowrap"><?= gettext("Tunnel endpoints"); ?></td>
- <td class="list nowrap"></td>
- </tr>
- <?php foreach ($spd as $sp): ?>
- <tr>
- <td class="listlr" valign="top"><?=htmlspecialchars($sp['srcid']);?></td>
- <td class="listr" valign="top"><?=htmlspecialchars($sp['dstid']);?></td>
- <td class="listr" valign="top">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_<?=$sp['dir'];?>.gif" width="11" height="11" style="margin-top: 2px" alt="direction" />
- </td>
- <td class="listr" valign="top"><?=htmlspecialchars(strtoupper($sp['proto']));?></td>
- <td class="listr" valign="top"><?=htmlspecialchars($sp['src']);?> -> <?=htmlspecialchars($sp['dst']);?></td>
- <td class="list nowrap">
- <?php
- $args = "srcid=".rawurlencode($sp['srcid']);
- $args .= "&amp;dstid=".rawurlencode($sp['dstid']);
- $args .= "&amp;dir=".rawurlencode($sp['dir']);
- ?>
- </td>
- </tr>
- <?php endforeach; ?>
- </table>
- <br />
- <table class="tabcont" border="0" cellspacing="0" cellpadding="6" summary="policies">
- <tr>
- <td width="16"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_in.gif" width="11" height="11" alt="in" /></td>
- <td><?= gettext("incoming (as seen by firewall)"); ?></td>
- </tr>
- <tr>
- <td colspan="5" height="4"></td>
- </tr>
- <tr>
- <td><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_out.gif" width="11" height="11" alt="out" /></td>
- <td><?= gettext("outgoing (as seen by firewall)"); ?></td>
- </tr>
- <?php else: ?>
- <tr>
- <td>
- <p><strong><?= gettext("No IPsec security policies."); ?></strong></p>
- </td>
- </tr>
- <?php endif; ?>
- </table>
- </div>
- </td>
- </tr>
- </table>
-
-<p class="vexpl">
-<span class="red"><strong><?= gettext("Note:"); ?><br /></strong></span>
-<?= gettext("You can configure your IPsec"); ?> <a href="vpn_ipsec.php"><?= gettext("here."); ?></a>
-</p>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_ipsec_xml.php b/usr/local/www/diag_ipsec_xml.php
deleted file mode 100644
index 82dcbea..0000000
--- a/usr/local/www/diag_ipsec_xml.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_ipsec_xml.php
- Copyright (C) 2007 pfSense Project
- Copyright (C) 2010 Seth Mos
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Parts of this code was originally based on vpn_ipsec_sad.php
- Copyright (C) 2003-2004 Manuel Kasper
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-ipsecxml
-##|*NAME=Diag IPsec XML page
-##|*DESCR=Allow access to the 'Diag IPsec XML' page.
-##|*MATCH=diag_ipsec_xml.php
-##|-PRIV
-
-global $g;
-
-require("guiconfig.inc");
-require("ipsec.inc");
-
-if (!is_array($config['ipsec']['phase2'])) {
- $config['ipsec']['phase2'] = array();
-}
-
-$ipsec_status = array();
-
-$a_phase2 = &$config['ipsec']['phase2'];
-
-$status = ipsec_smp_dump_status();
-
-if (is_array($status['query']) && $status['query']['ikesalist'] && $status['query']['ikesalist']['ikesa']) {
- foreach ($a_phase2 as $ph2ent) {
- ipsec_lookup_phase1($ph2ent, $ph1ent);
- $tunnel = array();
- if (!isset($ph2ent['disabled']) && !isset($ph1ent['disabled'])) {
- if (ipsec_phase1_status($status['query']['ikesalist']['ikesa'], $ph1ent['ikeid'])) {
- $tunnel['state'] = "up";
- } elseif (!isset($config['ipsec']['enable'])) {
- $tunnel['state'] = "disabled";
- } else {
- $tunnel['state'] = "down";
- }
-
- $tunnel['src'] = ipsec_get_phase1_src($ph1ent);
- $tunnel['endpoint'] = $ph1ent['remote-gateway'];
- $tunnel['local'] = ipsec_idinfo_to_text($ph2ent['localid']);
- $tunnel['remote'] = ipsec_idinfo_to_text($ph2ent['remoteid']);
- $tunnel['name'] = "{$ph2ent['descr']}";
- $ipsec_status['tunnel'][] = $tunnel;
- }
- }
-}
-
-$listtags = array("tunnel");
-$xml = dump_xml_config($ipsec_status, "ipsec");
-
-echo $xml;
-?>
diff --git a/usr/local/www/diag_limiter_info.php b/usr/local/www/diag_limiter_info.php
deleted file mode 100644
index d4e5b06..0000000
--- a/usr/local/www/diag_limiter_info.php
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_limiter_info.php
- Copyright (C) 2010 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/top
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-limiter-info
-##|*NAME=Diagnostics: Limiter Info
-##|*DESCR=Allows access to the 'Diagnostics: Limiter Info' page
-##|*MATCH=diag_limiter_info.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$pgtitle = gettext("Diagnostics: Limiter Info");
-$shortcut_section = "trafficshaper-limiters";
-
-if ($_REQUEST['getactivity']) {
- $text = `/sbin/ipfw pipe show`;
- if ($text == "") {
- $text = "We could not find any limiters on this system.";
- }
- echo "Limiters:\n";
- echo $text;
- $text = `/sbin/ipfw queue show`;
- if ($text != "") {
- echo "\n\nQueues:\n";
- echo $text;
- }
- exit;
-}
-
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
- function getlimiteractivity() {
- var url = "/diag_limiter_info.php";
- var pars = 'getactivity=yes';
- jQuery.ajax(
- url,
- {
- type: 'post',
- data: pars,
- complete: activitycallback
- });
- }
- function activitycallback(transport) {
- jQuery('#limiteractivitydiv').html('<font face="Courier" size="2"><pre style="text-align:left;">' + transport.responseText + '<\/pre><\/font>');
- setTimeout('getlimiteractivity()', 2000);
- }
- setTimeout('getlimiteractivity()', 5000);
-//]]>
-</script>
-<div id="maincontent">
-<?php
- if ($savemsg) {
- echo "<div id=\"savemsg\">";
- print_info_box($savemsg);
- echo "</div>";
- }
- if ($input_errors) {
- print_input_errors($input_errors);
- }
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag limiter info">
- <tr>
- <td>
- <table id="backuptable" class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
- <tr>
- <td align="center">
- <table summary="results">
- <tr><td>
- <div id="limiteractivitydiv">
- <?=gettext("Gathering Limiter information, please wait...");?>
- </div>
- </td></tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</div>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs.php b/usr/local/www/diag_logs.php
deleted file mode 100755
index 2cbfcbb..0000000
--- a/usr/local/www/diag_logs.php
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs.php
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-logs-system
-##|*NAME=Diagnostics: Logs: System page
-##|*DESCR=Allow access to the 'Diagnostics: Logs: System' page.
-##|*MATCH=diag_logs.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$system_logfile = "{$g['varlog_path']}/system.log";
-
-$nentries = $config['syslog']['nentries'];
-if (!$nentries) {
- $nentries = 50;
-}
-
-if ($_POST['clear']) {
- clear_log_file($system_logfile);
-}
-
-if ($_GET['filtertext']) {
- $filtertext = htmlspecialchars($_GET['filtertext']);
-}
-
-if ($_POST['filtertext']) {
- $filtertext = htmlspecialchars($_POST['filtertext']);
-}
-
-if ($filtertext) {
- $filtertextmeta="?filtertext=$filtertext";
-}
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("General"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs system">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), true, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("General"), true, "/diag_logs.php");
- $tab_array[] = array(gettext("Gateways"), false, "/diag_logs_gateways.php");
- $tab_array[] = array(gettext("Routing"), false, "/diag_logs_routing.php");
- $tab_array[] = array(gettext("Resolver"), false, "/diag_logs_resolver.php");
- $tab_array[] = array(gettext("Wireless"), false, "/diag_logs_wireless.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic"><?php printf(gettext("Last %s system log entries"), $nentries); ?></td>
- </tr>
- <?php
- if ($filtertext) {
- dump_clog($system_logfile, $nentries, true, array("$filtertext"), array("ppp"));
- } else {
- dump_clog($system_logfile, $nentries, true, array(), array("ppp"));
- }
- ?>
- <tr>
- <td align="left" valign="top">
- <form id="filterform" name="filterform" action="diag_logs.php" method="post" style="margin-top: 14px;">
- <input id="submit" name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log");?>" />
- </form>
- </td>
- <td align="right" valign="top" >
- <form id="clearform" name="clearform" action="diag_logs.php" method="post" style="margin-top: 14px;">
- <input id="filtertext" name="filtertext" value="<?=$filtertext;?>" />
- <input id="filtersubmit" name="filtersubmit" type="submit" class="formbtn" value="<?=gettext("Filter");?>" />
- </form>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_auth.php b/usr/local/www/diag_logs_auth.php
deleted file mode 100644
index 42bc0ba..0000000
--- a/usr/local/www/diag_logs_auth.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs_auth.php
- part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- part of pfSense
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-status-systemlogs-portalauth
-##|*NAME=Status: System logs: Portal Auth page
-##|*DESCR=Allow access to the 'Status: System logs: Portal Auth' page.
-##|*MATCH=diag_logs_auth.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$portal_logfile = "{$g['varlog_path']}/portalauth.log";
-
-$nentries = $config['syslog']['nentries'];
-if (!$nentries) {
- $nentries = 50;
-}
-
-if ($_POST['clear']) {
- clear_log_file($portal_logfile);
-}
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Portal Auth"));
-$shortcut_section = "captiveportal";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs captive portal">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), false, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), true, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic">
- <?php printf(gettext("Last %s Portal Auth log entries"), $nentries);?>
- </td>
- </tr>
- <?php dump_clog($portal_logfile, $nentries, true); ?>
- <tr>
- <td>
- <br />
- <form action="diag_logs_auth.php" method="post">
- <input name="clear" type="submit" class="formbtn" value="<?= gettext("Clear log"); ?>"/>
- </form>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_dhcp.php b/usr/local/www/diag_logs_dhcp.php
deleted file mode 100644
index f87845d..0000000
--- a/usr/local/www/diag_logs_dhcp.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs_dhcp.php
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: dhcpserver
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-logs-dhcp
-##|*NAME=Diagnostics: Logs: DHCP page
-##|*DESCR=Allow access to the 'Diagnostics: Logs: DHCP' page.
-##|*MATCH=diag_logs_dhcp.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$dhcpd_logfile = "{$g['varlog_path']}/dhcpd.log";
-
-$nentries = $config['syslog']['nentries'];
-if (!$nentries) {
- $nentries = 50;
-}
-
-if ($_POST['clear']) {
- clear_log_file($dhcpd_logfile);
- killbyname("dhcpd");
- services_dhcpd_configure();
-}
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("DHCP"));
-$shortcut_section = "dhcp";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs dhcp">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), false, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), true, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic">
- <?php printf(gettext("Last %s DHCP service log entries"), $nentries);?>
- </td>
- </tr>
- <?php dump_clog($dhcpd_logfile, $nentries); ?>
- <tr>
- <td>
- <br />
- <form action="diag_logs_dhcp.php" method="post">
- <input name="clear" type="submit" class="formbtn" value="<?= gettext("Clear log");?>" />
- </form>
- </td>
- <td>NOTE: Clearing the log file will restart the DHCP daemon.</td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_filter.php b/usr/local/www/diag_logs_filter.php
deleted file mode 100644
index b583035..0000000
--- a/usr/local/www/diag_logs_filter.php
+++ /dev/null
@@ -1,503 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs_filter.php
- part of pfSense
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- originally based on m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2009 Manuel Kasper <mk@neon1.net>,
- Jim Pingle jim@pingle.org
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: filter
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-logs-firewall
-##|*NAME=Diagnostics: Logs: Firewall page
-##|*DESCR=Allow access to the 'Diagnostics: Logs: Firewall' page.
-##|*MATCH=diag_logs_filter.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("filter_log.inc");
-
-# --- AJAX RESOLVE ---
-if (isset($_POST['resolve'])) {
- $ip = strtolower($_POST['resolve']);
- $res = (is_ipaddr($ip) ? gethostbyaddr($ip) : '');
-
- if ($res && $res != $ip) {
- $response = array('resolve_ip' => $ip, 'resolve_text' => $res);
- } else {
- $response = array('resolve_ip' => $ip, 'resolve_text' => gettext("Cannot resolve"));
- }
-
- echo json_encode(str_replace("\\", "\\\\", $response)); // single escape chars can break JSON decode
- exit;
-}
-
-function getGETPOSTsettingvalue($settingname, $default) {
- $settingvalue = $default;
- if ($_GET[$settingname]) {
- $settingvalue = $_GET[$settingname];
- }
- if ($_POST[$settingname]) {
- $settingvalue = $_POST[$settingname];
- }
- return $settingvalue;
-}
-
-$rulenum = getGETPOSTsettingvalue('getrulenum', null);
-if ($rulenum) {
- list($rulenum, $tracker, $type) = explode(',', $rulenum);
- $rule = find_rule_by_number($rulenum, $tracker, $type);
- echo gettext("The rule that triggered this action is") . ":\n\n{$rule}";
- exit;
-}
-
-$filtersubmit = getGETPOSTsettingvalue('filtersubmit', null);
-if ($filtersubmit) {
- $interfacefilter = getGETPOSTsettingvalue('interface', null);
- $filtertext = getGETPOSTsettingvalue('filtertext', "");
- $filterlogentries_qty = getGETPOSTsettingvalue('filterlogentries_qty', null);
-}
-
-$filterlogentries_submit = getGETPOSTsettingvalue('filterlogentries_submit', null);
-if ($filterlogentries_submit) {
- $filterfieldsarray = array();
-
- $actpass = getGETPOSTsettingvalue('actpass', null);
- $actblock = getGETPOSTsettingvalue('actblock', null);
-
- $filterfieldsarray['act'] = str_replace(" ", " ", trim($actpass . " " . $actblock));
- $filterfieldsarray['act'] = $filterfieldsarray['act'] != "" ? $filterfieldsarray['act'] : 'All';
- $filterfieldsarray['time'] = getGETPOSTsettingvalue('filterlogentries_time', null);
- $filterfieldsarray['interface'] = getGETPOSTsettingvalue('filterlogentries_interfaces', null);
- $filterfieldsarray['srcip'] = getGETPOSTsettingvalue('filterlogentries_sourceipaddress', null);
- $filterfieldsarray['srcport'] = getGETPOSTsettingvalue('filterlogentries_sourceport', null);
- $filterfieldsarray['dstip'] = getGETPOSTsettingvalue('filterlogentries_destinationipaddress', null);
- $filterfieldsarray['dstport'] = getGETPOSTsettingvalue('filterlogentries_destinationport', null);
- $filterfieldsarray['proto'] = getGETPOSTsettingvalue('filterlogentries_protocol', null);
- $filterfieldsarray['tcpflags'] = getGETPOSTsettingvalue('filterlogentries_protocolflags', null);
- $filterlogentries_qty = getGETPOSTsettingvalue('filterlogentries_qty', null);
-}
-
-$filter_logfile = "{$g['varlog_path']}/filter.log";
-
-$nentries = $config['syslog']['nentries'];
-
-# Override Display Quantity
-if ($filterlogentries_qty) {
- $nentries = $filterlogentries_qty;
-}
-
-if (!$nentries || !is_numeric($nentries)) {
- $nentries = 50;
-}
-
-if ($_POST['clear']) {
- clear_log_file($filter_logfile);
-}
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Firewall"));
-$shortcut_section = "firewall";
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script src="/javascript/filter_log.js" type="text/javascript"></script>
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs filter">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), false, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), true, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Normal View"), true, "/diag_logs_filter.php");
- $tab_array[] = array(gettext("Dynamic View"), false, "/diag_logs_filter_dynamic.php");
- $tab_array[] = array(gettext("Summary View"), false, "/diag_logs_filter_summary.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" style="sortableMultirow:<?=$config['syslog']['filterdescriptions'] === "2"?2:1?>" summary="main area">
- <tr>
- <td colspan="<?=(!isset($config['syslog']['rawfilter']))?7:2?>" align="left" valign="middle">
- <div id="filterlogentries_show" class="widgetconfigdiv" style="<?=(!isset($config['syslog']['rawfilter']))?"":"display:none"?>">
- <form id="filterlogentries" name="filterlogentries" action="diag_logs_filter.php" method="post">
- <?php
- $Include_Act = explode(",", str_replace(" ", ",", $filterfieldsarray['act']));
- if ($filterfieldsarray['interface'] == "All") $interface = "";
- ?>
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="action">
- <tr>
- <td rowspan="2">
- <div align="center"><?=gettext("Action");?></div>
- <div align="left">
- <input id="actpass" name="actpass" type="checkbox" value="Pass" <?php if (in_arrayi('Pass', $Include_Act)) echo "checked=\"checked\""; ?> /> Pass<br />
- <input id="actblock" name="actblock" type="checkbox" value="Block" <?php if (in_arrayi('Block', $Include_Act)) echo "checked=\"checked\""; ?> /> Block<br />
- </div>
- </td>
- <td>
- <div align="center"><?=gettext("Time");?></div>
- <div align="center"><input id="filterlogentries_time" name="filterlogentries_time" class="formfld search" type="text" size="12" value="<?= htmlspecialchars($filterfieldsarray['time']) ?>" /></div>
- </td>
- <td>
- <div align="center"><?=gettext("Source IP Address");?></div>
- <div align="center"><input id="filterlogentries_sourceipaddress" name="filterlogentries_sourceipaddress" class="formfld search" type="text" size="35" value="<?= htmlspecialchars($filterfieldsarray['srcip']) ?>" /></div>
- </td>
- <td>
- <div align="center"><?=gettext("Source Port");?></div>
- <div align="center"><input id="filterlogentries_sourceport" name="filterlogentries_sourceport" class="formfld search" type="text" size="10" value="<?= htmlspecialchars($filterfieldsarray['srcport']) ?>" /></div>
- </td>
- <td>
- <div align="center"><?=gettext("Protocol");?></div>
- <div align="center"><input id="filterlogentries_protocol" name="filterlogentries_protocol" class="formfld search" type="text" size="5" value="<?= htmlspecialchars($filterfieldsarray['proto']) ?>" /></div>
- </td>
- <td>
- <div align="center" style="vertical-align:top;"><?=gettext("Quantity");?></div>
- <div align="center" style="vertical-align:top;"><input id="filterlogentries_qty" name="filterlogentries_qty" class="" type="text" size="6" value="<?= htmlspecialchars($filterlogentries_qty) ?>" /></div>
- </td>
- </tr>
- <tr>
- <td valign="top">
- <div align="center"><?=gettext("Interface");?></div>
- <div align="center"><input id="filterlogentries_interfaces" name="filterlogentries_interfaces" class="formfld search" type="text" size="12" value="<?= htmlspecialchars($filterfieldsarray['interface']) ?>" /></div>
- </td>
- <td valign="top">
- <div align="center"><?=gettext("Destination IP Address");?></div>
- <div align="center"><input id="filterlogentries_destinationipaddress" name="filterlogentries_destinationipaddress" class="formfld search" type="text" size="35" value="<?= htmlspecialchars($filterfieldsarray['dstip']) ?>" /></div>
- </td>
- <td valign="top">
- <div align="center"><?=gettext("Destination Port");?></div>
- <div align="center"><input id="filterlogentries_destinationport" name="filterlogentries_destinationport" class="formfld search" type="text" size="10" value="<?= htmlspecialchars($filterfieldsarray['dstport']) ?>" /></div>
- </td>
- <td valign="top">
- <div align="center"><?=gettext("Protocol Flags");?></div>
- <div align="center"><input id="filterlogentries_protocolflags" name="filterlogentries_protocolflags" class="formfld search" type="text" size="5" value="<?= htmlspecialchars($filterfieldsarray['tcpflags']) ?>" /></div>
- </td>
- <td valign="bottom">
- <div align="center"><input id="filterlogentries_submit" name="filterlogentries_submit" type="submit" class="formbtn" value="<?=gettext("Filter");?>" /></div>
- </td>
- </tr>
- <tr>
- <td></td>
- <td colspan="5">
- <?printf(gettext('Matches %1$s regular expression%2$s.'), '<a target="_blank" href="http://www.php.net/manual/en/book.pcre.php">', '</a>');?>&nbsp;&nbsp;
- <?=gettext("Precede with exclamation (!) as first character to exclude match.");?>&nbsp;&nbsp;
- </td>
- </tr>
- </table>
- </form>
- </div>
- <div id="filterform_show" class="widgetconfigdiv" style="<?=(!isset($config['syslog']['rawfilter']))?"display:none":""?>">
- <form id="filterform" name="filterform" action="diag_logs_filter.php" method="post">
- <table width="0%" border="0" cellpadding="0" cellspacing="0" summary="firewall log">
- <tr>
- <td>
- <div align="center" style="vertical-align:top;"><?=gettext("Interface");?></div>
- <div align="center" style="vertical-align:top;">
- <select name="interface" onchange="dst_change(this.value,iface_old,document.iform.dsttype.value);iface_old = document.iform.interface.value;typesel_change();">
- <option value="" <?=$interfacefilter?"":"selected=\"selected\""?>>*Any interface</option>
-<?php
- $iflist = get_configured_interface_with_descr(false, true);
- //$iflist = get_interface_list();
- // Allow extending of the firewall edit interfaces
- pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/pre_interfaces_edit");
- foreach ($iflist as $if => $ifdesc) {
- $interfaces[$if] = $ifdesc;
- }
-
- if ($config['l2tp']['mode'] == "server") {
- $interfaces['l2tp'] = "L2TP VPN";
- }
-
- if ($config['pptpd']['mode'] == "server") {
- $interfaces['pptp'] = "PPTP VPN";
- }
-
- if (is_pppoe_server_enabled() && have_ruleint_access("pppoe")) {
- $interfaces['pppoe'] = "PPPoE Server";
- }
-
- /* add ipsec interfaces */
- if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
- $interfaces["enc0"] = "IPsec";
- }
-
- /* add openvpn/tun interfaces */
- if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) {
- $interfaces["openvpn"] = "OpenVPN";
- }
-
- foreach ($interfaces as $iface => $ifacename):
-?>
- <option value="<?=$iface;?>" <?=($iface == $interfacefilter)?"selected=\"selected\"":"";?>><?=htmlspecialchars($ifacename);?></option>
-<?php
- endforeach;
-?>
- </select>
- </div>
- </td>
- <td>
- <div align="center" style="vertical-align:top;"><?=gettext("Filter expression");?></div>
- <div align="center" style="vertical-align:top;"><input id="filtertext" name="filtertext" class="formfld search" style="vertical-align:top;" type="text" size="35" value="<?= htmlspecialchars($filtertext) ?>" /></div>
- </td>
- <td>
- <div align="center" style="vertical-align:top;"><?=gettext("Quantity");?></div>
- <div align="center" style="vertical-align:top;"><input id="filterlogentries_qty" name="filterlogentries_qty" class="" style="vertical-align:top;" type="text" size="6" value="<?= htmlspecialchars($filterlogentries_qty) ?>" /></div>
- </td>
- <td>
- <div align="center" style="vertical-align:top;">&nbsp;</div>
- <div align="center" style="vertical-align:top;"><input id="filtersubmit" name="filtersubmit" type="submit" class="formbtn" style="vertical-align:top;" value="<?=gettext("Filter");?>" /></div>
- </td>
- </tr>
- <tr>
- <td></td>
- <td colspan="2">
- <?printf(gettext('Matches %1$s regular expression%2$s.'), '<a target="_blank" href="http://www.php.net/manual/en/book.pcre.php">', '</a>');?>&nbsp;&nbsp;
- </td>
- </tr>
- </table>
- </form>
- </div>
- <div style="float: right; vertical-align:middle">
- <br />
- <?php if (!isset($config['syslog']['rawfilter']) && (isset($config['syslog']['filterdescriptions']) && $config['syslog']['filterdescriptions'] === "2")):?>
- <a href="#" onclick="toggleListDescriptions()">Show/hide rule descriptions</a>
- <?php endif;?>
- </div>
- </td>
- </tr>
-<?php
- if (!isset($config['syslog']['rawfilter'])):
- $iflist = get_configured_interface_with_descr(false, true);
- if ($iflist[$interfacefilter]) {
- $interfacefilter = $iflist[$interfacefilter];
- }
- if ($filterlogentries_submit) {
- $filterlog = conv_log_filter($filter_logfile, $nentries, $nentries + 100, $filterfieldsarray);
- } else {
- $filterlog = conv_log_filter($filter_logfile, $nentries, $nentries + 100, $filtertext, $interfacefilter);
- }
-?>
- <tr>
- <td colspan="<?=$config['syslog']['filterdescriptions'] === "1"?7:6?>" class="listtopic">
-<?php
- if ((!$filtertext) && (!$filterfieldsarray)) {
- printf(gettext("Last %s firewall log entries."), count($filterlog));
- } else {
- echo count($filterlog). ' ' . gettext("matched log entries.") . ' ';
- }
- printf(gettext("Max(%s)"), $nentries);
-?>
- </td>
- </tr>
- <tr class="sortableHeaderRowIdentifier">
- <td width="10%" class="listhdrr"><?=gettext("Act");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Time");?></td>
- <td width="15%" class="listhdrr"><?=gettext("If");?></td>
- <?php if ($config['syslog']['filterdescriptions'] === "1"):?>
- <td width="10%" class="listhdrr"><?=gettext("Rule");?></td>
- <?php endif;?>
- <td width="25%" class="listhdrr"><?=gettext("Source");?></td>
- <td width="25%" class="listhdrr"><?=gettext("Destination");?></td>
- <td width="15%" class="listhdrr"><?=gettext("Proto");?></td>
- </tr>
-<?php
- if ($config['syslog']['filterdescriptions']) {
- buffer_rules_load();
- }
- $rowIndex = 0;
- foreach ($filterlog as $filterent):
- $evenRowClass = $rowIndex % 2 ? " listMReven" : " listMRodd";
- $rowIndex++;
-?>
- <tr class="<?=$evenRowClass?>">
- <td class="listMRlr nowrap" align="center" sorttable_customkey="<?=$filterent['act']?>">
- <center>
- <a onclick="javascript:getURL('diag_logs_filter.php?getrulenum=<?php echo "{$filterent['rulenum']},{$filterent['tracker']},{$filterent['act']}"; ?>', outputrule);">
- <img border="0" src="<?php echo find_action_image($filterent['act']);?>" width="11" height="11" align="middle" alt="<?php echo $filterent['act'] .'/'. $filterent['tracker'];?>" title="<?php echo $filterent['act'] .'/'. $filterent['tracker'];?>" />
- <?php if ($filterent['count']) echo $filterent['count'];?>
- </a>
- </center>
- </td>
- <td class="listMRr nowrap"><?php echo htmlspecialchars($filterent['time']);?></td>
- <td class="listMRr nowrap">
- <?php if ($filterent['direction'] == "out"): ?>
- <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/out.gif" alt="Direction=OUT" title="Direction=OUT"/>
- <?php endif; ?>
- <?php echo htmlspecialchars($filterent['interface']);?>
- </td>
-<?php
- if ($config['syslog']['filterdescriptions'] === "1") {
- echo("<td class=\"listMRr nowrap\">" . find_rule_by_number_buffer($filterent['rulenum'], $filterent['tracker'], $filterent['act']) . "</td>");
- }
-
- $int = strtolower($filterent['interface']);
- $proto = strtolower($filterent['proto']);
- if ($filterent['version'] == '6') {
- $ipproto = "inet6";
- $filterent['srcip'] = "[{$filterent['srcip']}]";
- $filterent['dstip'] = "[{$filterent['dstip']}]";
- } else {
- $ipproto = "inet";
- }
-
- $srcstr = $filterent['srcip'] . get_port_with_service($filterent['srcport'], $proto);
- $src_htmlclass = str_replace(array('.', ':'), '-', $filterent['srcip']);
- $dststr = $filterent['dstip'] . get_port_with_service($filterent['dstport'], $proto);
- $dst_htmlclass = str_replace(array('.', ':'), '-', $filterent['dstip']);
-?>
- <td class="listMRr nowrap">
- <img onclick="javascript:resolve_with_ajax('<?php echo "{$filterent['srcip']}"; ?>');" title="<?=gettext("Click to resolve");?>" class="ICON-<?= $src_htmlclass; ?>" border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_log.gif" alt="Icon Reverse Resolve with DNS"/>
- <a href="easyrule.php?<?php echo "action=block&amp;int={$int}&amp;src={$filterent['srcip']}&amp;ipproto={$ipproto}"; ?>" title="<?=gettext("Easy Rule: Add to Block List");?>" onclick="return confirm('<?=gettext("Do you really want to add this BLOCK rule?")?>')">
- <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_block_add.gif" alt="Icon Easy Rule: Add to Block List" />
- </a>
- <?php echo $srcstr . '<span class="RESOLVE-' . $src_htmlclass . '"></span>';?>
- </td>
- <td class="listMRr nowrap">
- <img onclick="javascript:resolve_with_ajax('<?php echo "{$filterent['dstip']}"; ?>');" title="<?=gettext("Click to resolve");?>" class="ICON-<?= $dst_htmlclass; ?>" border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_log.gif" alt="Icon Reverse Resolve with DNS"/>
- <a href="easyrule.php?<?php echo "action=pass&amp;int={$int}&amp;proto={$proto}&amp;src={$filterent['srcip']}&amp;dst={$filterent['dstip']}&amp;dstport={$filterent['dstport']}&amp;ipproto={$ipproto}"; ?>" title="<?=gettext("Easy Rule: Pass this traffic");?>" onclick="return confirm('<?=gettext("Do you really want to add this PASS rule?")?>')">
- <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_pass_add.gif" alt="Icon Easy Rule: Pass this traffic" />
- </a>
- <?php echo $dststr . '<span class="RESOLVE-' . $dst_htmlclass . '"></span>';?>
- </td>
-<?php
- if ($filterent['proto'] == "TCP") {
- $filterent['proto'] .= ":{$filterent['tcpflags']}";
- }
-?>
- <td class="listMRr nowrap"><?php echo htmlspecialchars($filterent['proto']);?></td>
- </tr>
-<?php
- if (isset($config['syslog']['filterdescriptions']) && $config['syslog']['filterdescriptions'] === "2"):
-?>
- <tr class="<?=$evenRowClass?>">
- <td colspan="2" class="listMRDescriptionL listMRlr" />
- <td colspan="4" class="listMRDescriptionR listMRr nowrap"><?=find_rule_by_number_buffer($filterent['rulenum'], $filterent['tracker'], $filterent['act']);?></td>
- </tr>
-<?php
- endif;
- endforeach;
- buffer_rules_clear();
- else:
-?>
- <tr>
- <td colspan="2" class="listtopic">
- <?php printf(gettext("Last %s firewall log entries"), $nentries);?>
- </td>
- </tr>
-<?php
- if ($filtertext) {
- dump_clog($filter_logfile, $nentries, true, array("$filtertext"));
- } else {
- dump_clog($filter_logfile, $nentries);
- }
- endif;
-?>
- <tr>
- <td align="left" valign="top" colspan="3">
- <form id="clearform" name="clearform" action="diag_logs_filter.php" method="post" style="margin-top: 14px;">
- <input id="submit" name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log");?>" />
- </form>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-
-<p><span class="vexpl"><a href="https://doc.pfsense.org/index.php/What_are_TCP_Flags%3F">TCP Flags</a>: F - FIN, S - SYN, A or . - ACK, R - RST, P - PSH, U - URG, E - ECE, W - CWR</span></p>
-
-<?php include("fend.inc"); ?>
-
-<!-- AJAXY STUFF -->
-<script type="text/javascript">
-//<![CDATA[
-function resolve_with_ajax(ip_to_resolve) {
- var url = "/diag_logs_filter.php";
-
- jQuery.ajax(
- url,
- {
- type: 'post',
- dataType: 'json',
- data: {
- resolve: ip_to_resolve,
- },
- complete: resolve_ip_callback
- });
-
-}
-
-function resolve_ip_callback(transport) {
- var response = jQuery.parseJSON(transport.responseText);
- var resolve_class = htmlspecialchars(response.resolve_ip.replace(/[.:]/g, '-'));
- var resolve_text = '<small><br />' + htmlspecialchars(response.resolve_text) + '<\/small>';
-
- jQuery('span.RESOLVE-' + resolve_class).html(resolve_text);
- jQuery('img.ICON-' + resolve_class).removeAttr('title');
- jQuery('img.ICON-' + resolve_class).removeAttr('alt');
- jQuery('img.ICON-' + resolve_class).attr('src', '/themes/<?= $g['theme']; ?>/images/icons/icon_log_d.gif');
- jQuery('img.ICON-' + resolve_class).prop('onclick', null);
- // jQuery cautions that "removeAttr('onclick')" fails in some versions of IE
-}
-
-// From http://stackoverflow.com/questions/5499078/fastest-method-to-escape-html-tags-as-html-entities
-function htmlspecialchars(str) {
- return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&apos;');
-}
-//]]>
-</script>
-
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_filter_dynamic.php b/usr/local/www/diag_logs_filter_dynamic.php
deleted file mode 100755
index 16ced9f..0000000
--- a/usr/local/www/diag_logs_filter_dynamic.php
+++ /dev/null
@@ -1,223 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs_filter_dynamic.php
- part of pfSesne
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- originally based on m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: filter
-*/
-
-##|+PRIV
-##|*IDENT=page-hidden-nolongerincluded
-##|*NAME=Hidden: No longer included page
-##|*DESCR=Allow access to the 'Hidden: No longer included' page.
-##|*MATCH=diag_logs_filter_dynamic.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("filter_log.inc");
-
-$filter_logfile = "{$g['varlog_path']}/filter.log";
-
-/* Hardcode this. AJAX doesn't do so well with large numbers */
-$nentries = 50;
-
-/* AJAX related routines */
-handle_ajax($nentries, $nentries + 20);
-
-if ($_POST['clear']) {
- clear_log_file($filter_logfile);
-}
-
-$filterlog = conv_log_filter($filter_logfile, $nentries, $nentries + 100);
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Firewall (Dynamic View)"));
-$shortcut_section = "firewall";
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
- lastsawtime = '<?php echo time(); ?>;';
- var lines = Array();
- var timer;
- var updateDelay = 25500;
- var isBusy = false;
- var isPaused = false;
- var nentries = <?php echo $nentries; ?>;
-<?php
- if (isset($config['syslog']['reverse'])) {
- echo "var isReverse = true;\n";
- } else {
- echo "var isReverse = false;\n";
- }
-?>
- /* Called by the AJAX updater */
- function format_log_line(row) {
- if (row[8] == '6') {
- srcIP = '[' + row[3] + ']';
- dstIP = '[' + row[5] + ']';
- } else {
- srcIP = row[3];
- dstIP = row[5];
- }
-
- if (row[4] == '') {
- srcPort = '';
- } else {
- srcPort = ':' + row[4];
- }
- if (row[6] == '') {
- dstPort = '';
- } else {
- dstPort = ':' + row[6];
- }
-
- var line = '<td class="listMRlr" align="center">' + row[0] + '</td>' +
- '<td class="listMRr nowrap">' + row[1] + '</td>' +
- '<td class="listMRr nowrap">' + row[2] + '</td>' +
- '<td class="listMRr nowrap">' + srcIP + srcPort + '</td>' +
- '<td class="listMRr nowrap">' + dstIP + dstPort + '</td>' +
- '<td class="listMRr nowrap">' + row[7] + '</td>';
- return line;
- }
-//]]>
-</script>
-<script src="/javascript/filter_log.js" type="text/javascript"></script>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs filter dynamic">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), false, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), true, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Normal View"), false, "/diag_logs_filter.php");
- $tab_array[] = array(gettext("Dynamic View"), true, "/diag_logs_filter_dynamic.php");
- $tab_array[] = array(gettext("Summary View"), false, "/diag_logs_filter_summary.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <thead>
- <tr>
- <td colspan="6" class="listtopic">
- <?php printf(gettext("Last %s records"), $nentries);?>; <?=gettext("Pause:");?><input style="vertical-align:middle;" type="checkbox" onclick="javascript:toggle_pause();" />
- </td>
- </tr>
- <tr>
- <td width="10%" class="listhdrr"><?=gettext("Act");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Time");?></td>
- <td width="15%" class="listhdrr"><?=gettext("If");?></td>
- <td width="25%" class="listhdrr"><?=gettext("Source");?></td>
- <td width="25%" class="listhdrr"><?=gettext("Destination");?></td>
- <td width="15%" class="listhdrr"><?=gettext("Proto");?></td>
- </tr>
- </thead>
- <tbody id="filter-log-entries">
-<?php
- $rowIndex = 0;
- foreach ($filterlog as $filterent):
- $evenRowClass = $rowIndex % 2 ? " listMReven" : " listMRodd";
- $rowIndex++;
- if ($filterent['version'] == '6') {
- $srcIP = "[" . htmlspecialchars($filterent['srcip']) . "]";
- $dstIP = "[" . htmlspecialchars($filterent['dstip']) . "]";
- } else {
- $srcIP = htmlspecialchars($filterent['srcip']);
- $dstIP = htmlspecialchars($filterent['dstip']);
- }
-
- if ($filterent['srcport']) {
- $srcPort = ":" . htmlspecialchars($filterent['srcport']);
- } else {
- $srcPort = "";
- }
-
- if ($filterent['dstport']) {
- $dstPort = ":" . htmlspecialchars($filterent['dstport']);
- } else {
- $dstPort = "";
- }
-?>
- <tr class="<?=$evenRowClass?>">
- <td class="listMRlr nowrap" align="center">
- <a href="#" onclick="javascript:getURL('diag_logs_filter.php?getrulenum=<?php echo "{$filterent['rulenum']},{$filterent['tracker']},{$filterent['act']}"; ?>', outputrule);">
- <img border="0" src="<?php echo find_action_image($filterent['act']);?>" width="11" height="11" alt="<?php echo $filterent['act'] .'/'. $filterent['tracker'];?>" title="<?php echo $filterent['act'] .'/'. $filterent['tracker'];?>" />
- </a>
- </td>
- <td class="listMRr nowrap"><?php echo htmlspecialchars($filterent['time']);?></td>
- <td class="listMRr nowrap"><?php echo htmlspecialchars($filterent['interface']);?></td>
- <td class="listMRr nowrap"><?php echo $srcIP . $srcPort;?></td>
- <td class="listMRr nowrap"><?php echo $dstIP . $dstPort;?></td>
- <?php
- if ($filterent['proto'] == "TCP") {
- $filterent['proto'] .= ":{$filterent['tcpflags']}";
- }
- ?>
- <td class="listMRr nowrap"><?php echo htmlspecialchars($filterent['proto']);?></td>
- </tr>
-<?php
- endforeach;
-?>
- </tbody>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<p><span class="vexpl"><a href="https://doc.pfsense.org/index.php/What_are_TCP_Flags%3F"><?=gettext("TCP Flags"); ?></a>: F - FIN, S - SYN, A or . - ACK, R - RST, P - PSH, U - URG, E - ECE, C - CWR</span></p>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_filter_summary.php b/usr/local/www/diag_logs_filter_summary.php
deleted file mode 100644
index 331df0d..0000000
--- a/usr/local/www/diag_logs_filter_summary.php
+++ /dev/null
@@ -1,249 +0,0 @@
-<?php
-/*
- diag_logs_filter_summary.php
- Copyright (C) 2009 Jim Pingle (jpingle@gmail.com)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES:
- pfSense_MODULE: filter
-*/
-
-$pgtitle = gettext("Status").": ".gettext("System logs").": ".gettext("Firewall Log Summary");
-$shortcut_section = "firewall";
-require_once("guiconfig.inc");
-include_once("filter_log.inc");
-
-$filter_logfile = "{$g['varlog_path']}/filter.log";
-$lines = 5000;
-$entriesperblock = 5;
-
-$filterlog = conv_log_filter($filter_logfile, $lines, $lines);
-$gotlines = count($filterlog);
-$fields = array(
- 'act' => gettext("Actions"),
- 'interface' => gettext("Interfaces"),
- 'proto' => gettext("Protocols"),
- 'srcip' => gettext("Source IPs"),
- 'dstip' => gettext("Destination IPs"),
- 'srcport' => gettext("Source Ports"),
- 'dstport' => gettext("Destination Ports"));
-
-$summary = array();
-foreach (array_keys($fields) as $f) {
- $summary[$f] = array();
-}
-
-$totals = array();
-
-function cmp($a, $b) {
- if ($a == $b) {
- return 0;
- }
- return ($a < $b) ? 1 : -1;
-}
-
-function stat_block($summary, $stat, $num) {
- global $g, $gotlines, $fields;
- uasort($summary[$stat] , 'cmp');
- print "<table width=\"200\" cellpadding=\"3\" cellspacing=\"0\" border=\"1\" summary=\"source destination ip\">";
- print "<tr><th colspan=\"2\">{$fields[$stat]} ".gettext("data")."</th></tr>";
- $k = array_keys($summary[$stat]);
- $total = 0;
- $numentries = 0;
- for ($i = 0; $i < $num; $i++) {
- if ($k[$i]) {
- $total += $summary[$stat][$k[$i]];
- $numentries++;
- $outstr = $k[$i];
- if (is_ipaddr($outstr)) {
- $outstr = "<a href=\"diag_dns.php?host={$outstr}\" title=\"".gettext("Reverse Resolve with DNS")."\"><img border=\"0\" src=\"/themes/{$g['theme']}/images/icons/icon_log.gif\" alt=\"log\" /></a> {$outstr}";
- } elseif (substr_count($outstr, '/') == 1) {
- list($proto, $port) = explode('/', $outstr);
- $service = getservbyport($port, strtolower($proto));
- if ($service) {
- $outstr .= ": {$service}";
- }
- }
- print "<tr><td>{$outstr}</td><td width=\"50\" align=\"right\">{$summary[$stat][$k[$i]]}</td></tr>";
- }
- }
- $leftover = $gotlines - $total;
- if ($leftover > 0) {
- print "<tr><td>Other</td><td width=\"50\" align=\"right\">{$leftover}</td></tr>";
- }
- print "</table>";
-}
-
-function pie_block($summary, $stat, $num) {
- global $gotlines, $fields;
- uasort($summary[$stat] , 'cmp');
- $k = array_keys($summary[$stat]);
- $total = 0;
- $numentries = 0;
- print "\n<script type=\"text/javascript\">\n";
- print "//<![CDATA[\n";
- for ($i = 0; $i < $num; $i++) {
- if ($k[$i]) {
- $total += $summary[$stat][$k[$i]];
- $numentries++;
- print "var d{$stat}{$i} = [];\n";
- print "d{$stat}{$i}.push([1, {$summary[$stat][$k[$i]]}]);\n";
- }
- }
- $leftover = $gotlines - $total;
- if ($leftover > 0) {
- print "var d{$stat}{$num} = [];\n";
- print "d{$stat}{$num}.push([1, {$leftover}]);\n";
- }
-
- print "Event.observe(window, 'load', function() {\n";
- print " new Proto.Chart($('piechart{$stat}'),\n";
- print " [\n";
- for ($i = 0; $i < $num; $i++) {
- if ($k[$i]) {
- print " { data: d{$stat}{$i}, label: \"{$k[$i]}\"}";
- if (!(($i == ($numentries - 1)) && ($leftover <= 0))) {
- print ",\n";
- } else {
- print "\n";
- }
- }
- }
- if ($leftover > 0) {
- print " { data: d{$stat}{$i}, label: \"Other\"}\n";
- }
- print " ],\n";
- print " {\n";
- print " pies: {show: true, autoScale: true},\n";
- print " legend: {show: true, labelFormatter: lblfmt}\n";
- print " });\n";
- print "});\n";
- print "//]]>\n";
- print "</script>\n";
- print "<table cellpadding=\"3\" cellspacing=\"0\" border=\"0\" summary=\"pie chart\">";
- print "<tr><th><font size=\"+1\">{$fields[$stat]}</font></th></tr>";
- print "<tr><td><div id=\"piechart{$stat}\" style=\"width:450px;height:300px\"></div></td></tr>";
- print "</table>\n";
-}
-
-foreach ($filterlog as $fe) {
- $specialfields = array('srcport', 'dstport');
- foreach (array_keys($fields) as $field) {
- if (!in_array($field, $specialfields)) {
- $summary[$field][$fe[$field]]++;
- }
- }
- /* Handle some special cases */
- if ($fe['srcport']) {
- $summary['srcport'][$fe['proto'].'/'.$fe['srcport']]++;
- } else {
- $summary['srcport'][$fe['srcport']]++;
- }
- if ($fe['dstport']) {
- $summary['dstport'][$fe['proto'].'/'.$fe['dstport']]++;
- } else {
- $summary['dstport'][$fe['dstport']]++;
- }
-}
-
-include("head.inc"); ?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script src="/javascript/filter_log.js" type="text/javascript"></script>
-<script type="text/javascript" src="/protochart/prototype.js"></script>
-<script type="text/javascript" src="/protochart/ProtoChart.js"></script>
-<!--[if IE]>
-<script type="text/javascript" src="/protochart/excanvas.js">
-</script>
-<![endif]-->
-<script type="text/javascript">
-//<![CDATA[
- function lblfmt(lbl) {
- return '<font size=\"-2\">' + lbl + '<\/font>'
- }
-//]]>
-</script>
-
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs filter summary">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), false, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), true, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Normal View"), false, "/diag_logs_filter.php");
- $tab_array[] = array(gettext("Dynamic View"), false, "/diag_logs_filter_dynamic.php");
- $tab_array[] = array(gettext("Summary View"), true, "/diag_logs_filter_summary.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" align="center" summary="main area">
- <tr>
- <td align="center">
-
-<?php printf (gettext('This is a firewall log summary, of the last %1$s lines of the firewall log (Max %2$s).'), $gotlines, $lines)?><br />
-<?=gettext("NOTE: IE8 users must enable compatibility view.")?>
-
-<?php
-foreach (array_keys($fields) as $field) {
- pie_block($summary, $field , $entriesperblock);
- echo "<br /><br />";
- stat_block($summary, $field , $entriesperblock);
- echo "<br /><br />";
-}
-?>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_gateways.php b/usr/local/www/diag_logs_gateways.php
deleted file mode 100755
index bb88615..0000000
--- a/usr/local/www/diag_logs_gateways.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs_gateways.php
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2012 Seth Mos
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-logs-gateways
-##|*NAME=Diagnostics: Logs: System: Gateways page
-##|*DESCR=Allow access to the 'Diagnostics: Logs: System: Gateways' page.
-##|*MATCH=diag_logs_gateways.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$system_logfile = "{$g['varlog_path']}/gateways.log";
-
-$nentries = $config['syslog']['nentries'];
-if (!$nentries) {
- $nentries = 50;
-}
-
-if ($_POST['clear']) {
- clear_log_file($system_logfile);
-}
-
-if ($_GET['filtertext']) {
- $filtertext = htmlspecialchars($_GET['filtertext']);
-}
-
-if ($_POST['filtertext']) {
- $filtertext = htmlspecialchars($_POST['filtertext']);
-}
-
-if ($filtertext) {
- $filtertextmeta="?filtertext=$filtertext";
-}
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Gateways"));
-$shortcut_section = "gateways";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs system gateways">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), true, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("General"), false, "/diag_logs.php");
- $tab_array[] = array(gettext("Gateways"), true, "/diag_logs_gateways.php");
- $tab_array[] = array(gettext("Routing"), false, "/diag_logs_routing.php");
- $tab_array[] = array(gettext("Resolver"), false, "/diag_logs_resolver.php");
- $tab_array[] = array(gettext("Wireless"), false, "/diag_logs_wireless.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic"><?php printf(gettext("Last %s system log entries"), $nentries); ?></td>
- </tr>
- <?php
- if ($filtertext) {
- dump_clog($system_logfile, $nentries, true, array("$filtertext"));
- } else {
- dump_clog($system_logfile, $nentries, true, array());
- }
- ?>
- <tr>
- <td align="left" valign="top">
- <form id="filterform" name="filterform" action="diag_logs_gateways.php" method="post" style="margin-top: 14px;">
- <input id="submit" name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log");?>" />
- </form>
- </td>
- <td align="right" valign="top" >
- <form id="clearform" name="clearform" action="diag_logs_gateways.php" method="post" style="margin-top: 14px;">
- <input id="filtertext" name="filtertext" value="<?=$filtertext;?>" />
- <input id="filtersubmit" name="filtersubmit" type="submit" class="formbtn" value="<?=gettext("Filter");?>" />
- </form>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_ipsec.php b/usr/local/www/diag_logs_ipsec.php
deleted file mode 100644
index 8fa79ce..0000000
--- a/usr/local/www/diag_logs_ipsec.php
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs_ipsec.php
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /sbin/ifconfig /usr/bin/awk
- pfSense_MODULE: ipsec
-*/
-
-##|+PRIV
-##|*IDENT=page-status-systemlogs-ipsecvpn
-##|*NAME=Status: System logs: IPsec VPN page
-##|*DESCR=Allow access to the 'Status: System logs: IPsec VPN' page.
-##|*MATCH=diag_logs_ipsec.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("ipsec.inc");
-
-$ipsec_logfile = "{$g['varlog_path']}/ipsec.log";
-
-$nentries = $config['syslog']['nentries'];
-if (!$nentries) {
- $nentries = 50;
-}
-
-if ($_POST['clear']) {
- clear_log_file($ipsec_logfile);
-}
-
-$ipsec_logarr = return_clog($ipsec_logfile, $nentries);
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("IPsec VPN"));
-$shortcut_section = "ipsec";
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs ipsec">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), false, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), true, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic"><?php printf(gettext("Last %s IPsec log entries"), $nentries);?></td>
- </tr>
- <?php
- foreach ($ipsec_logarr as $logent) {
- $logent = htmlspecialchars($logent);
- $logent = preg_split("/\s+/", $logent, 6);
- echo "<tr valign=\"top\">\n";
- $entry_date_time = htmlspecialchars(join(" ", array_slice($logent, 0, 3)));
- echo "<td class=\"listlr nowrap\">" . $entry_date_time . "</td>\n";
- echo "<td class=\"listr\">" . $logent[4] . " " . $logent[5] . "</td>\n";
- echo "</tr>\n";
- }
- ?>
- <tr>
- <td>
- <br />
- <form action="diag_logs_ipsec.php" method="post">
- <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
- </form>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_ntpd.php b/usr/local/www/diag_logs_ntpd.php
deleted file mode 100644
index d9f6bf5..0000000
--- a/usr/local/www/diag_logs_ntpd.php
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs_ntpd.php
- part of pfSense
- Copyright (C) 2005 Bill Marquette <bill.marquette@gmail.com>.
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: ntpd
-*/
-
-##|+PRIV
-##|*IDENT=page-status-systemlogs-ntpd
-##|*NAME=Status: System logs: NTP page
-##|*DESCR=Allow access to the 'Status: System logs: NTP' page.
-##|*MATCH=diag_logs_ntpd.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$ntpd_logfile = "{$g['varlog_path']}/ntpd.log";
-
-$nentries = $config['syslog']['nentries'];
-if (!$nentries) {
- $nentries = 50;
-}
-
-if ($_POST['clear']) {
- clear_log_file($ntpd_logfile);
-}
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("NTP"));
-$shortcut_section = "ntp";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs ntpd">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), false, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), true, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic">
- <?php printf(gettext("Last %s NTP log entries"), $nentries);?>
- </td>
- </tr>
- <?php dump_clog($ntpd_logfile, $nentries); ?>
- <tr>
- <td>
- <br />
- <form action="diag_logs_ntpd.php" method="post">
- <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
- </form>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_openvpn.php b/usr/local/www/diag_logs_openvpn.php
deleted file mode 100644
index 374014d..0000000
--- a/usr/local/www/diag_logs_openvpn.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs_openvpn.php
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: openvpn
-*/
-
-##|+PRIV
-##|*IDENT=page-status-systemlogs-openvpn
-##|*NAME=Status: System logs: OpenVPN page
-##|*DESCR=Allow access to the 'Status: System logs: OpenVPN' page.
-##|*MATCH=diag_logs_openvpn.php*
-##|-PRIV
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("OpenVPN"));
-$shortcut_section = "openvpn";
-
-require("guiconfig.inc");
-require_once("vpn.inc");
-
-$openvpn_logfile = "{$g['varlog_path']}/openvpn.log";
-
-$nentries = $config['syslog']['nentries'];
-if (!$nentries) {
- $nentries = 50;
-}
-
-if ($_POST['clear']) {
- clear_log_file($openvpn_logfile);
-}
-
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs openvpn">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), false, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), true, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic"><?php printf(gettext("Last %s OpenVPN log entries"), $nentries)?></td>
- </tr>
- <?php dump_clog($openvpn_logfile, $nentries); ?>
- <tr>
- <td>
- <br />
- <form action="diag_logs_openvpn.php" method="post">
- <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
- </form>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_ppp.php b/usr/local/www/diag_logs_ppp.php
deleted file mode 100644
index 4ef3f9c..0000000
--- a/usr/local/www/diag_logs_ppp.php
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs_ppp.php
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /sbin/ifconfig /usr/bin/awk
- pfSense_MODULE:
-*/
-
-##|+PRIV
-##|*IDENT=page-status-systemlogs-ppp
-##|*NAME=Status: System logs: IPsec VPN page
-##|*DESCR=Allow access to the 'Status: System logs: IPsec VPN' page.
-##|*MATCH=diag_logs_ppp.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$ppp_logfile = "{$g['varlog_path']}/ppp.log";
-
-$nentries = $config['syslog']['nentries'];
-if (!$nentries) {
- $nentries = 50;
-}
-
-if ($_POST['clear']) {
- clear_log_file($ppp_logfile);
-}
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("PPP"));
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs ppp">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), false, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), true, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic"><?php printf(gettext("Last %s PPP log entries"), $nentries);?></td>
- </tr>
- <?php dump_clog($ppp_logfile, $nentries); ?>
- <tr>
- <td>
- <br />
- <form action="diag_logs_ppp.php" method="post">
- <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
- </form>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_relayd.php b/usr/local/www/diag_logs_relayd.php
deleted file mode 100644
index 5468761..0000000
--- a/usr/local/www/diag_logs_relayd.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs_relayd.php
- part of pfSense
-
- Copyright (C) 2008 Bill Marquette <bill.marquette@gmail.com>.
- Copyright (C) 2008 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-status-systemlogs-loadbalancer
-##|*NAME=Status: System logs: Load Balancer page
-##|*DESCR=Allow access to the 'Status: System logs: Load Balancer' page.
-##|*MATCH=diag_logs_relayd.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$relayd_logfile = "{$g['varlog_path']}/relayd.log";
-
-$nentries = $config['syslog']['nentries'];
-if (!$nentries) {
- $nentries = 50;
-}
-
-if ($_POST['clear']) {
- clear_log_file($relayd_logfile);
-}
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Load Balancer"));
-$shortcut_section = "relayd";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="load balancer">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), false, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), true, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic">
- <?php printf(gettext("Last %s Load Balancer log entries"), $nentries);?>
- </td>
- </tr>
- <?php dump_clog($relayd_logfile, $nentries); ?>
- <tr>
- <td>
- <br />
- <form action="diag_logs_relayd.php" method="post">
- <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
- </form>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_resolver.php b/usr/local/www/diag_logs_resolver.php
deleted file mode 100755
index 73e39a9..0000000
--- a/usr/local/www/diag_logs_resolver.php
+++ /dev/null
@@ -1,152 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs_resolver.php
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2012 Seth Mos
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-logs-resolver
-##|*NAME=Diagnostics: Logs: System: Resolver page
-##|*DESCR=Allow access to the 'Diagnostics: Logs: System: Resolver' page.
-##|*MATCH=diag_logs_resolver.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$system_logfile = "{$g['varlog_path']}/resolver.log";
-
-$nentries = $config['syslog']['nentries'];
-if (!$nentries) {
- $nentries = 50;
-}
-
-if ($_POST['clear']) {
- clear_log_file($system_logfile);
-}
-
-if ($_GET['filtertext']) {
- $filtertext = htmlspecialchars($_GET['filtertext']);
-}
-
-if ($_POST['filtertext']) {
- $filtertext = htmlspecialchars($_POST['filtertext']);
-}
-
-if ($filtertext) {
- $filtertextmeta="?filtertext=$filtertext";
-}
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Resolver"));
-if (isset($config['dnsmasq']['enable'])) {
- $shortcut_section = "forwarder";
-} else {
- $shortcut_section = "resolver";
-}
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs system resolver">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), true, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("General"), false, "/diag_logs.php");
- $tab_array[] = array(gettext("Gateways"), false, "/diag_logs_gateways.php");
- $tab_array[] = array(gettext("Routing"), false, "/diag_logs_routing.php");
- $tab_array[] = array(gettext("Resolver"), true, "/diag_logs_resolver.php");
- $tab_array[] = array(gettext("Wireless"), false, "/diag_logs_wireless.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic"><?php printf(gettext("Last %s system log entries"), $nentries); ?></td>
- </tr>
- <?php
- if ($filtertext) {
- dump_clog($system_logfile, $nentries, true, array("$filtertext"), array("ppp"));
- } else {
- dump_clog($system_logfile, $nentries, true, array(), array("ppp"));
- }
- ?>
- <tr>
- <td align="left" valign="top">
- <form id="filterform" name="filterform" action="diag_logs_resolver.php" method="post" style="margin-top: 14px;">
- <input id="submit" name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log");?>" />
- </form>
- </td>
- <td align="right" valign="top" >
- <form id="clearform" name="clearform" action="diag_logs_resolver.php" method="post" style="margin-top: 14px;">
- <input id="filtertext" name="filtertext" value="<?=$filtertext;?>" />
- <input id="filtersubmit" name="filtersubmit" type="submit" class="formbtn" value="<?=gettext("Filter");?>" />
- </form>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_routing.php b/usr/local/www/diag_logs_routing.php
deleted file mode 100644
index debbf18..0000000
--- a/usr/local/www/diag_logs_routing.php
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs_routing.php
- part of pfSense
-
- Copyright (C) 2012 Jim Pingle <jimp@pfsense.org>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-status-systemlogs-routing
-##|*NAME=Status: System logs: Routing page
-##|*DESCR=Allow access to the 'Status: System logs: System: Routing' page.
-##|*MATCH=diag_logs_routing.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$routing_logfile = "{$g['varlog_path']}/routing.log";
-
-$nentries = $config['syslog']['nentries'];
-if (!$nentries) {
- $nentries = 50;
-}
-
-if ($_POST['clear']) {
- clear_log_file($routing_logfile);
-}
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Routing"));
-$shortcut_section = "routing";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs system routing">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), true, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("General"), false, "/diag_logs.php");
- $tab_array[] = array(gettext("Gateways"), false, "/diag_logs_gateways.php");
- $tab_array[] = array(gettext("Routing"), true, "/diag_logs_routing.php");
- $tab_array[] = array(gettext("Resolver"), false, "/diag_logs_resolver.php");
- $tab_array[] = array(gettext("Wireless"), false, "/diag_logs_wireless.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic">
- <?php printf(gettext("Routing daemon log entries"), $nentries);?>
- </td>
- </tr>
- <?php dump_clog($routing_logfile, $nentries); ?>
- <tr>
- <td>
- <br />
- <form action="diag_logs_routing.php" method="post">
- <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
- </form>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_settings.php b/usr/local/www/diag_logs_settings.php
deleted file mode 100644
index c9f2791..0000000
--- a/usr/local/www/diag_logs_settings.php
+++ /dev/null
@@ -1,517 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs_settings.php
- Copyright (C) 2004-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-logs-settings
-##|*NAME=Diagnostics: Logs: Settings page
-##|*DESCR=Allow access to the 'Diagnostics: Logs: Settings' page.
-##|*MATCH=diag_logs_settings.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-$pconfig['reverse'] = isset($config['syslog']['reverse']);
-$pconfig['nentries'] = $config['syslog']['nentries'];
-$pconfig['remoteserver'] = $config['syslog']['remoteserver'];
-$pconfig['remoteserver2'] = $config['syslog']['remoteserver2'];
-$pconfig['remoteserver3'] = $config['syslog']['remoteserver3'];
-$pconfig['sourceip'] = $config['syslog']['sourceip'];
-$pconfig['ipproto'] = $config['syslog']['ipproto'];
-$pconfig['filter'] = isset($config['syslog']['filter']);
-$pconfig['dhcp'] = isset($config['syslog']['dhcp']);
-$pconfig['portalauth'] = isset($config['syslog']['portalauth']);
-$pconfig['vpn'] = isset($config['syslog']['vpn']);
-$pconfig['apinger'] = isset($config['syslog']['apinger']);
-$pconfig['relayd'] = isset($config['syslog']['relayd']);
-$pconfig['hostapd'] = isset($config['syslog']['hostapd']);
-$pconfig['logall'] = isset($config['syslog']['logall']);
-$pconfig['system'] = isset($config['syslog']['system']);
-$pconfig['enable'] = isset($config['syslog']['enable']);
-$pconfig['logdefaultblock'] = !isset($config['syslog']['nologdefaultblock']);
-$pconfig['logdefaultpass'] = isset($config['syslog']['nologdefaultpass']);
-$pconfig['logbogons'] = !isset($config['syslog']['nologbogons']);
-$pconfig['logprivatenets'] = !isset($config['syslog']['nologprivatenets']);
-$pconfig['loglighttpd'] = !isset($config['syslog']['nologlighttpd']);
-$pconfig['rawfilter'] = isset($config['syslog']['rawfilter']);
-$pconfig['filterdescriptions'] = $config['syslog']['filterdescriptions'];
-$pconfig['disablelocallogging'] = isset($config['syslog']['disablelocallogging']);
-$pconfig['logfilesize'] = $config['syslog']['logfilesize'];
-
-if (!$pconfig['nentries']) {
- $pconfig['nentries'] = 50;
-}
-
-function is_valid_syslog_server($target) {
- return (is_ipaddr($target)
- || is_ipaddrwithport($target)
- || is_hostname($target)
- || is_hostnamewithport($target));
-}
-
-if ($_POST['resetlogs'] == gettext("Reset Log Files")) {
- clear_all_log_files();
- $savemsg .= gettext("The log files have been reset.");
-} elseif ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if ($_POST['enable'] && !is_valid_syslog_server($_POST['remoteserver'])) {
- $input_errors[] = gettext("A valid IP address/hostname or IP/hostname:port must be specified for remote syslog server #1.");
- }
- if ($_POST['enable'] && $_POST['remoteserver2'] && !is_valid_syslog_server($_POST['remoteserver2'])) {
- $input_errors[] = gettext("A valid IP address/hostname or IP/hostname:port must be specified for remote syslog server #2.");
- }
- if ($_POST['enable'] && $_POST['remoteserver3'] && !is_valid_syslog_server($_POST['remoteserver3'])) {
- $input_errors[] = gettext("A valid IP address/hostname or IP/hostname:port must be specified for remote syslog server #3.");
- }
-
- if (($_POST['nentries'] < 5) || ($_POST['nentries'] > 2000)) {
- $input_errors[] = gettext("Number of log entries to show must be between 5 and 2000.");
- }
-
- if (isset($_POST['logfilesize']) && (strlen($_POST['logfilesize']) > 0)) {
- if (!is_numeric($_POST['logfilesize']) || ($_POST['logfilesize'] < 100000)) {
- $input_errors[] = gettext("Log file size must be numeric and greater than or equal to 100000.");
- }
- }
- if (!$input_errors) {
- $config['syslog']['reverse'] = $_POST['reverse'] ? true : false;
- $config['syslog']['nentries'] = (int)$_POST['nentries'];
- $pconfig['nentries'] = $config['syslog']['nentries'];
- if (isset($_POST['logfilesize']) && (strlen($_POST['logfilesize']) > 0)) {
- $config['syslog']['logfilesize'] = (int)$_POST['logfilesize'];
- $pconfig['logfilesize'] = $config['syslog']['logfilesize'];
- } else {
- unset($config['syslog']['logfilesize']);
- }
- $config['syslog']['remoteserver'] = $_POST['remoteserver'];
- $config['syslog']['remoteserver2'] = $_POST['remoteserver2'];
- $config['syslog']['remoteserver3'] = $_POST['remoteserver3'];
- $config['syslog']['sourceip'] = $_POST['sourceip'];
- $config['syslog']['ipproto'] = $_POST['ipproto'];
- $config['syslog']['filter'] = $_POST['filter'] ? true : false;
- $config['syslog']['dhcp'] = $_POST['dhcp'] ? true : false;
- $config['syslog']['portalauth'] = $_POST['portalauth'] ? true : false;
- $config['syslog']['vpn'] = $_POST['vpn'] ? true : false;
- $config['syslog']['apinger'] = $_POST['apinger'] ? true : false;
- $config['syslog']['relayd'] = $_POST['relayd'] ? true : false;
- $config['syslog']['hostapd'] = $_POST['hostapd'] ? true : false;
- $config['syslog']['logall'] = $_POST['logall'] ? true : false;
- $config['syslog']['system'] = $_POST['system'] ? true : false;
- $config['syslog']['disablelocallogging'] = $_POST['disablelocallogging'] ? true : false;
- $config['syslog']['enable'] = $_POST['enable'] ? true : false;
- $oldnologdefaultblock = isset($config['syslog']['nologdefaultblock']);
- $oldnologdefaultpass = isset($config['syslog']['nologdefaultpass']);
- $oldnologbogons = isset($config['syslog']['nologbogons']);
- $oldnologprivatenets = isset($config['syslog']['nologprivatenets']);
- $oldnologlighttpd = isset($config['syslog']['nologlighttpd']);
- $config['syslog']['nologdefaultblock'] = $_POST['logdefaultblock'] ? false : true;
- $config['syslog']['nologdefaultpass'] = $_POST['logdefaultpass'] ? true : false;
- $config['syslog']['nologbogons'] = $_POST['logbogons'] ? false : true;
- $config['syslog']['nologprivatenets'] = $_POST['logprivatenets'] ? false : true;
- $config['syslog']['nologlighttpd'] = $_POST['loglighttpd'] ? false : true;
- $config['syslog']['rawfilter'] = $_POST['rawfilter'] ? true : false;
- if (is_numeric($_POST['filterdescriptions']) && $_POST['filterdescriptions'] > 0) {
- $config['syslog']['filterdescriptions'] = $_POST['filterdescriptions'];
- } else {
- unset($config['syslog']['filterdescriptions']);
- }
- if ($config['syslog']['enable'] == false) {
- unset($config['syslog']['remoteserver']);
- unset($config['syslog']['remoteserver2']);
- unset($config['syslog']['remoteserver3']);
- }
-
- write_config();
-
- $retval = 0;
- $retval = system_syslogd_start();
- if (($oldnologdefaultblock !== isset($config['syslog']['nologdefaultblock'])) ||
- ($oldnologdefaultpass !== isset($config['syslog']['nologdefaultpass'])) ||
- ($oldnologbogons !== isset($config['syslog']['nologbogons'])) ||
- ($oldnologprivatenets !== isset($config['syslog']['nologprivatenets']))) {
- $retval |= filter_configure();
- }
-
- $savemsg = get_std_save_message($retval);
-
- if ($oldnologlighttpd !== isset($config['syslog']['nologlighttpd'])) {
- ob_flush();
- flush();
- log_error(gettext("webConfigurator configuration has changed. Restarting webConfigurator."));
- send_event("service restart webgui");
- $savemsg .= "<br />" . gettext("WebGUI process is restarting.");
- }
-
- filter_pflog_start(true);
- }
-}
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Settings"));
-$closehead = false;
-include("head.inc");
-
-?>
-
-
-<script type="text/javascript">
-//<![CDATA[
-function enable_change(enable_over) {
- if (document.iform.enable.checked || enable_over) {
- document.iform.remoteserver.disabled = 0;
- document.iform.remoteserver2.disabled = 0;
- document.iform.remoteserver3.disabled = 0;
- document.iform.filter.disabled = 0;
- document.iform.dhcp.disabled = 0;
- document.iform.portalauth.disabled = 0;
- document.iform.vpn.disabled = 0;
- document.iform.apinger.disabled = 0;
- document.iform.relayd.disabled = 0;
- document.iform.hostapd.disabled = 0;
- document.iform.system.disabled = 0;
- document.iform.logall.disabled = 0;
- check_everything();
- } else {
- document.iform.remoteserver.disabled = 1;
- document.iform.remoteserver2.disabled = 1;
- document.iform.remoteserver3.disabled = 1;
- document.iform.filter.disabled = 1;
- document.iform.dhcp.disabled = 1;
- document.iform.portalauth.disabled = 1;
- document.iform.vpn.disabled = 1;
- document.iform.apinger.disabled = 1;
- document.iform.relayd.disabled = 1;
- document.iform.hostapd.disabled = 1;
- document.iform.system.disabled = 1;
- document.iform.logall.disabled = 1;
- }
-}
-function check_everything() {
- if (document.iform.logall.checked) {
- document.iform.filter.disabled = 1;
- document.iform.filter.checked = false;
- document.iform.dhcp.disabled = 1;
- document.iform.dhcp.checked = false;
- document.iform.portalauth.disabled = 1;
- document.iform.portalauth.checked = false;
- document.iform.vpn.disabled = 1;
- document.iform.vpn.checked = false;
- document.iform.apinger.disabled = 1;
- document.iform.apinger.checked = false;
- document.iform.relayd.disabled = 1;
- document.iform.relayd.checked = false;
- document.iform.hostapd.disabled = 1;
- document.iform.hostapd.checked = false;
- document.iform.system.disabled = 1;
- document.iform.system.checked = false;
- } else {
- document.iform.filter.disabled = 0;
- document.iform.dhcp.disabled = 0;
- document.iform.portalauth.disabled = 0;
- document.iform.vpn.disabled = 0;
- document.iform.apinger.disabled = 0;
- document.iform.relayd.disabled = 0;
- document.iform.hostapd.disabled = 0;
- document.iform.system.disabled = 0;
- }
-}
-//]]>
-</script>
-</head>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="diag_logs_settings.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs settings">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), false, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), true, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("General Logging Options");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vtable">Forward/Reverse Display</td>
- <td width="78%" class="vtable">
- <input name="reverse" type="checkbox" id="reverse" value="yes" <?php if ($pconfig['reverse']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Show log entries in reverse order (newest entries on top)");?></strong>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vtable">GUI Log Entries to Display</td>
- <td width="78%" class="vtable">
- <input name="nentries" id="nentries" type="text" class="formfld unknown" size="4" value="<?=htmlspecialchars($pconfig['nentries']);?>" /><br />
- <?=gettext("Hint: This is only the number of log entries displayed in the GUI. It does not affect how many entries are contained in the actual log files.") ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vtable">Log File Size (Bytes)</td>
- <td width="78%" class="vtable">
- <input name="logfilesize" id="logfilesize" type="text" class="formfld unknown" size="8" value="<?=htmlspecialchars($pconfig['logfilesize']);?>" /><br />
- <?=gettext("Logs are held in constant-size circular log files. This field controls how large each log file is, and thus how many entries may exist inside the log. By default this is approximately 500KB per log file, and there are nearly 20 such log files.") ?>
- <br /><br />
- <?=gettext("NOTE: Log sizes are changed the next time a log file is cleared or deleted. To immediately increase the size of the log files, you must first save the options to set the size, then clear all logs using the \"Reset Log Files\" option farther down this page. "); ?>
- <?=gettext("Be aware that increasing this value increases every log file size, so disk usage will increase significantly."); ?>
- <?=gettext("Disk space currently used by log files: ") ?><?= exec("/usr/bin/du -sh /var/log | /usr/bin/awk '{print $1;}'"); ?>.
- <?=gettext("Remaining disk space for log files: ") ?><?= exec("/bin/df -h /var/log | /usr/bin/awk '{print $4;}'"); ?>.
- </td>
- </tr>
- <tr>
- <td valign="top" class="vtable">Log Firewall Default Blocks</td>
- <td class="vtable">
- <input name="logdefaultblock" type="checkbox" id="logdefaultblock" value="yes" <?php if ($pconfig['logdefaultblock']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Log packets matched from the default block rules put in the ruleset");?></strong><br />
- <?=gettext("Hint: packets that are blocked by the implicit default block rule will not be logged if you uncheck this option. Per-rule logging options are still respected.");?>
- <br />
- <input name="logdefaultpass" type="checkbox" id="logdefaultpass" value="yes" <?php if ($pconfig['logdefaultpass']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Log packets matched from the default pass rules put in the ruleset");?></strong><br />
- <?=gettext("Hint: packets that are allowed by the implicit default pass rule will be logged if you check this option. Per-rule logging options are still respected.");?>
- <br />
- <input name="logbogons" type="checkbox" id="logbogons" value="yes" <?php if ($pconfig['logbogons']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Log packets blocked by 'Block Bogon Networks' rules");?></strong><br />
- <br />
- <input name="logprivatenets" type="checkbox" id="logprivatenets" value="yes" <?php if ($pconfig['logprivatenets']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Log packets blocked by 'Block Private Networks' rules");?></strong><br />
- </td>
- </tr>
- <tr>
- <td valign="top" class="vtable">Web Server Log</td>
- <td class="vtable">
- <input name="loglighttpd" type="checkbox" id="loglighttpd" value="yes" <?php if ($pconfig['loglighttpd']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Log errors from the web server process.");?></strong><br />
- <?=gettext("Hint: If this is checked, errors from the lighttpd web server process for the GUI or Captive Portal will appear in the main system log.");?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vtable">Raw Logs</td>
- <td class="vtable">
- <input name="rawfilter" type="checkbox" id="rawfilter" value="yes" <?php if ($pconfig['rawfilter']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Show raw filter logs");?></strong><br />
- <?=gettext("Hint: If this is checked, filter logs are shown as generated by the packet filter, without any formatting. This will reveal more detailed information, but it is more difficult to read.");?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vtable">Filter descriptions</td>
- <td class="vtable">
- <select name="filterdescriptions" id="filterdescriptions" >
- <option value="0"<?=!isset($pconfig['filterdescriptions'])?" selected=\"selected\"":""?>>Dont load descriptions</option>
- <option value="1"<?=($pconfig['filterdescriptions']) === "1"?" selected=\"selected\"":""?>>Display as column</option>
- <option value="2"<?=($pconfig['filterdescriptions']) === "2"?" selected=\"selected\"":""?>>Display as second row</option>
- </select>
- <strong><?=gettext("Show the applied rule description below or in the firewall log rows.");?></strong>
- <br />
- <?=gettext("Displaying rule descriptions for all lines in the log might affect performance with large rule sets.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vtable">Local Logging</td>
- <td width="78%" class="vtable">
- <input name="disablelocallogging" type="checkbox" id="disablelocallogging" value="yes" <?php if ($pconfig['disablelocallogging']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
- <strong>
- <?php if ($g['platform'] == "pfSense"): ?>
- <?=gettext("Disable writing log files to the local disk");?>
- <?php else: ?>
- <?=gettext("Disable writing log files to the local RAM disk");?>
- <?php endif; ?>
- </strong>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">Reset Logs</td>
- <td width="78%">
- <input name="resetlogs" type="submit" class="formbtn" value="<?=gettext("Reset Log Files"); ?>" onclick="return confirm('<?=gettext('Do you really want to reset the log files? This will erase all local log data.');?>')" />
- <br /><br />
- <?= gettext("Note: Clears all local log files and reinitializes them as empty logs. This also restarts the DHCP daemon. Use the Save button first if you have made any setting changes."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Remote Logging Options");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Source Address"); ?></td>
- <td width="78%" class="vtable">
- <select name="sourceip" class="formselect">
- <option value="">Default (any)</option>
- <?php
- $sourceips = get_possible_traffic_source_addresses(false);
- foreach ($sourceips as $sipvalue => $sipname):
- $selected = "";
- if (!link_interface_to_bridge($sipvalue) && ($sipvalue == $pconfig['sourceip'])) {
- $selected = 'selected="selected"';
- }
- ?>
- <option value="<?=$sipvalue;?>" <?=$selected;?>>
- <?=htmlspecialchars($sipname);?>
- </option>
- <?php
- endforeach;
- ?>
- </select>
- <br />
- <?= gettext("This option will allow the logging daemon to bind to a single IP address, rather than all IP addresses."); ?>
- <?= gettext("If you pick a single IP, remote syslog severs must all be of that IP type. If you wish to mix IPv4 and IPv6 remote syslog servers, you must bind to all interfaces."); ?>
- <br /><br />
- <?= gettext("NOTE: If an IP address cannot be located on the chosen interface, the daemon will bind to all addresses."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IP Protocol"); ?></td>
- <td width="78%" class="vtable">
- <select name="ipproto" class="formselect">
- <option value="ipv4" <?php if ($ipproto == "ipv4") echo 'selected="selected"' ?>>IPv4</option>
- <option value="ipv6" <?php if ($ipproto == "ipv6") echo 'selected="selected"' ?>>IPv6</option>
- </select>
- <br />
- <?= gettext("This option is only used when a non-default address is chosen as the source above. This option only expresses a preference; If an IP address of the selected type is not found on the chosen interface, the other type will be tried."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Enable Remote Logging");?></td>
- <td width="78%" class="vtable">
- <input name="enable" type="checkbox" id="enable" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
- <strong><?=gettext("Send log messages to remote syslog server");?></strong>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Remote Syslog Servers");?></td>
- <td width="78%" class="vtable">
- <table summary="remtote syslog servers">
- <tr>
- <td><?=gettext("Server") . " 1";?></td>
- <td><input name="remoteserver" id="remoteserver" type="text" class="formfld host" size="20" value="<?=htmlspecialchars($pconfig['remoteserver']);?>" /></td>
- </tr>
- <tr>
- <td><?=gettext("Server") . " 2";?></td>
- <td><input name="remoteserver2" id="remoteserver2" type="text" class="formfld host" size="20" value="<?=htmlspecialchars($pconfig['remoteserver2']);?>" /></td>
- </tr>
- <tr>
- <td><?=gettext("Server") . " 3";?></td>
- <td><input name="remoteserver3" id="remoteserver3" type="text" class="formfld host" size="20" value="<?=htmlspecialchars($pconfig['remoteserver3']);?>" /></td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td><?=gettext("IP addresses of remote syslog servers, or an IP:port.");?></td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Remote Syslog Contents");?></td>
- <td width="78%" class="vtable">
- <input name="logall" id="logall" type="checkbox" value="yes" <?php if ($pconfig['logall']) echo "checked=\"checked\""; ?> onclick="check_everything();" />
- <?=gettext("Everything");?><br /><br />
- <input name="system" id="system" type="checkbox" value="yes" onclick="enable_change(false)" <?php if ($pconfig['system']) echo "checked=\"checked\""; ?> />
- <?=gettext("System events");?><br />
- <input name="filter" id="filter" type="checkbox" value="yes" <?php if ($pconfig['filter']) echo "checked=\"checked\""; ?> />
- <?=gettext("Firewall events");?><br />
- <input name="dhcp" id="dhcp" type="checkbox" value="yes" <?php if ($pconfig['dhcp']) echo "checked=\"checked\""; ?> />
- <?=gettext("DHCP service events");?><br />
- <input name="portalauth" id="portalauth" type="checkbox" value="yes" <?php if ($pconfig['portalauth']) echo "checked=\"checked\""; ?> />
- <?=gettext("Portal Auth events");?><br />
- <input name="vpn" id="vpn" type="checkbox" value="yes" <?php if ($pconfig['vpn']) echo "checked=\"checked\""; ?> />
- <?=gettext("VPN (PPTP, IPsec, OpenVPN) events");?><br />
- <input name="apinger" id="apinger" type="checkbox" value="yes" <?php if ($pconfig['apinger']) echo "checked=\"checked\""; ?> />
- <?=gettext("Gateway Monitor events");?><br />
- <input name="relayd" id="relayd" type="checkbox" value="yes" <?php if ($pconfig['relayd']) echo "checked=\"checked\""; ?> />
- <?=gettext("Server Load Balancer events");?><br />
- <input name="hostapd" id="hostapd" type="checkbox" value="yes" <?php if ($pconfig['hostapd']) echo "checked=\"checked\""; ?> />
- <?=gettext("Wireless events");?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
- </td>
- </tr>
- <tr>
- <td width="22%" height="53" valign="top">&nbsp;</td>
- <td width="78%">
- <strong>
- <span class="red">
- <?=gettext("Note:")?>
- </span>
- </strong>
- <br />
- <?=gettext("syslog sends UDP datagrams to port 514 on the specified " .
- "remote syslog server, unless another port is specified. Be sure to set syslogd on the " .
- "remote server to accept syslog messages from");?> <?=$g['product_name']?>.
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
-enable_change(false);
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_vpn.php b/usr/local/www/diag_logs_vpn.php
deleted file mode 100755
index d1dc748..0000000
--- a/usr/local/www/diag_logs_vpn.php
+++ /dev/null
@@ -1,211 +0,0 @@
-#!/usr/local/bin/php
-<?php
-/*
- diag_logs_vpn.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /usr/sbin/fifolog_reader /usr/local/sbin/clog
- pfSense_MODULE: vpn
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-logs-pptpvpn
-##|*NAME=Diagnostics: Logs: VPN page
-##|*DESCR=Allow access to the 'Diagnostics: Logs: VPN' page.
-##|*MATCH=diag_logs_vpn.php*
-##|-PRIV
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("VPN"));
-require("guiconfig.inc");
-require_once("vpn.inc");
-
-$nentries = $config['syslog']['nentries'];
-if (!$nentries) {
- $nentries = 50;
-}
-
-if (htmlspecialchars($_POST['vpntype'])) {
- $vpntype = htmlspecialchars($_POST['vpntype']);
-} elseif (htmlspecialchars($_GET['vpntype'])) {
- $vpntype = htmlspecialchars($_GET['vpntype']);
-} else {
- $vpntype = "pptp";
-}
-if (htmlspecialchars($_POST['mode'])) {
- $mode = htmlspecialchars($_POST['mode']);
-} elseif (htmlspecialchars($_GET['mode'])) {
- $mode = htmlspecialchars($_GET['mode']);
-} else {
- $mode = "login";
-}
-switch ($vpntype) {
- case 'pptp':
- $logname = "pptps";
- break;
- case 'poes':
- $logname = "poes";
- break;
- case 'l2tp':
- $logname = "l2tps";
- break;
-}
-
-if ($_POST['clear']) {
- if ($mode != "raw") {
- clear_log_file("/var/log/vpn.log");
- } else {
- clear_log_file("/var/log/{$logname}.log");
- }
-}
-
-function dump_clog_vpn($logfile, $tail) {
- global $g, $config, $vpntype;
-
- $sor = isset($config['syslog']['reverse']) ? "-r" : "";
-
- $logarr = "";
-
- if (isset($config['system']['usefifolog'])) {
- exec("/usr/sbin/fifolog_reader " . escapeshellarg($logfile) . " | tail {$sor} -n " . $tail, $logarr);
- } else {
- exec("/usr/local/sbin/clog " . escapeshellarg($logfile) . " | tail {$sor} -n " . $tail, $logarr);
- }
-
- foreach ($logarr as $logent) {
- $logent = preg_split("/\s+/", $logent, 6);
- $llent = explode(",", $logent[5]);
- $iftype = substr($llent[1], 0, 4);
- if ($iftype != $vpntype) {
- continue;
- }
- echo "<tr>\n";
- echo "<td class=\"listlr nowrap\">" . htmlspecialchars(join(" ", array_slice($logent, 0, 3))) . "</td>\n";
-
- if ($llent[0] == "login") {
- echo "<td class=\"listr\"><img src=\"/themes/{$g['theme']}/images/icons/icon_in.gif\" width=\"11\" height=\"11\" title=\"login\" alt=\"in\" /></td>\n";
- } else {
- echo "<td class=\"listr\"><img src=\"/themes/{$g['theme']}/images/icons/icon_out.gif\" width=\"11\" height=\"11\" title=\"logout\" alt=\"out\" /></td>\n";
- }
-
- echo "<td class=\"listr\">" . htmlspecialchars($llent[3]) . "</td>\n";
- echo "<td class=\"listr\">" . htmlspecialchars($llent[2]) . "&nbsp;</td>\n";
- echo "</tr>\n";
- }
-}
-
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs vpn">
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), false, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), true, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("PPTP Logins"),
- (($vpntype == "pptp") && ($mode != "raw")),
- "/diag_logs_vpn.php?vpntype=pptp");
- $tab_array[] = array(gettext("PPTP Raw"),
- (($vpntype == "pptp") && ($mode == "raw")),
- "/diag_logs_vpn.php?vpntype=pptp&amp;mode=raw");
- $tab_array[] = array(gettext("PPPoE Logins"),
- (($vpntype == "poes") && ($mode != "raw")),
- "/diag_logs_vpn.php?vpntype=poes");
- $tab_array[] = array(gettext("PPPoE Raw"),
- (($vpntype == "poes") && ($mode == "raw")),
- "/diag_logs_vpn.php?vpntype=poes&amp;mode=raw");
- $tab_array[] = array(gettext("L2TP Logins"),
- (($vpntype == "l2tp") && ($mode != "raw")),
- "/diag_logs_vpn.php?vpntype=l2tp");
- $tab_array[] = array(gettext("L2TP Raw"),
- (($vpntype == "l2tp") && ($mode == "raw")),
- "/diag_logs_vpn.php?vpntype=l2tp&amp;mode=raw");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabcont">
- <form action="diag_logs_vpn.php" method="post">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td colspan="4" class="listtopic">
- <?php printf(gettext('Last %1$s %2$s VPN log entries'), $nentries, $vpns[$vpntype]);?>
- </td>
- </tr>
- <?php
- if ($mode != "raw"):
- ?>
- <tr>
- <td class="listhdrr"><?=gettext("Time");?></td>
- <td class="listhdrr"><?=gettext("Action");?></td>
- <td class="listhdrr"><?=gettext("User");?></td>
- <td class="listhdrr"><?=gettext("IP address");?></td>
- </tr>
- <?php
- dump_clog_vpn("/var/log/vpn.log", $nentries);
- ?>
- <?php
- else:
- dump_clog("/var/log/{$logname}.log", $nentries);
- endif;
- ?>
- </table>
- <br />
- <input type="hidden" name="vpntype" id="vpntype" value="<?=$vpntype;?>" />
- <input type="hidden" name="mode" id="mode" value="<?=$mode;?>" />
- <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
- </form>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_logs_wireless.php b/usr/local/www/diag_logs_wireless.php
deleted file mode 100644
index 4979d1e..0000000
--- a/usr/local/www/diag_logs_wireless.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_logs_wireless.php
- part of pfSense
-
- Copyright (C) 2008 Bill Marquette <bill.marquette@gmail.com>.
- Copyright (C) 2008 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2011 Jim Pingle <jimp@pfsense.org>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-status-systemlogs-wireless
-##|*NAME=Status: System logs: Wireless page
-##|*DESCR=Allow access to the 'Status: System logs: System: Wireless' page.
-##|*MATCH=diag_logs_wireless.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$wireless_logfile = "{$g['varlog_path']}/wireless.log";
-
-$nentries = $config['syslog']['nentries'];
-if (!$nentries) {
- $nentries = 50;
-}
-
-if ($_POST['clear']) {
- clear_log_file($wireless_logfile);
-}
-
-$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Wireless"));
-$shortcut_section = "wireless";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs system wireless">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), true, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("General"), false, "/diag_logs.php");
- $tab_array[] = array(gettext("Gateways"), false, "/diag_logs_gateways.php");
- $tab_array[] = array(gettext("Routing"), false, "/diag_logs_routing.php");
- $tab_array[] = array(gettext("Resolver"), false, "/diag_logs_resolver.php");
- $tab_array[] = array(gettext("Wireless"), true, "/diag_logs_wireless.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic">
- <?php printf(gettext("Wireless (hostapd) log entries"), $nentries);?>
- </td>
- </tr>
- <?php dump_clog($wireless_logfile, $nentries); ?>
- <tr>
- <td>
- <br />
- <form action="diag_logs_wireless.php" method="post">
- <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
- </form>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_nanobsd.php b/usr/local/www/diag_nanobsd.php
deleted file mode 100644
index 63a4f35..0000000
--- a/usr/local/www/diag_nanobsd.php
+++ /dev/null
@@ -1,289 +0,0 @@
-<?php
-/*
- diag_nanobsd.php
- Copyright (C) 2009 Scott Ullrich <sullrich@gmail.com>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /sbin/mount /sbin/glabel /usr/bin/grep /usr/bin/cut /usr/bin/head /bin/cp
- pfSense_BUILDER_BINARIES: /usr/sbin/boot0cfg /bin/mkdir /sbin/fsck_ufs /sbin/mount /bin/dd /sbin/tunefs
- pfSense_MODULE: nanobsd
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-nanobsd
-##|*NAME=Diagnostics: NanoBSD
-##|*DESCR=Allow access to the 'Diagnostics: NanoBSD' page.
-##|*MATCH=diag_nanobsd.php*
-##|-PRIV
-
-ini_set('zlib.output_compression', 0);
-ini_set('implicit_flush', 1);
-ini_set('max_input_time', '9999');
-
-require_once("guiconfig.inc");
-require_once("config.inc");
-
-$pgtitle = array(gettext("Diagnostics"), gettext("NanoBSD"));
-include("head.inc");
-
-// Survey slice info
-global $SLICE, $OLDSLICE, $TOFLASH, $COMPLETE_PATH, $COMPLETE_BOOT_PATH;
-global $GLABEL_SLICE, $UFS_ID, $OLD_UFS_ID, $BOOTFLASH;
-global $BOOT_DEVICE, $REAL_BOOT_DEVICE, $BOOT_DRIVE, $ACTIVE_SLICE;
-nanobsd_detect_slice_info();
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?=$jsevents["body"]["onload"];?>">
-
-<?php include("fbegin.inc"); ?>
-
-<?php
-
-$NANOBSD_SIZE = nanobsd_get_size();
-
-if ($_POST['bootslice']) {
- $statusmsg = gettext("Setting slice information, please wait...");
- echo <<<EOF
- <div id="loading">
- <img src="/themes/{$g['theme']}/images/misc/loader.gif">
- $statusmsg
- <p/>&nbsp;
- </div>
-EOF;
- nanobsd_switch_boot_slice();
- $savemsg = gettext("The boot slice has been set to") . " " . nanobsd_get_active_slice();
- // Survey slice info
- nanobsd_detect_slice_info();
-
-}
-
-if ($_POST['destslice']) {
- $statusmsg = gettext("Duplicating slice. Please wait, this will take a moment...");
- echo <<<EOF
- <div id="loading">
- <img src="/themes/{$g['theme']}/images/misc/loader.gif">
- $statusmsg
- <p/>&nbsp;
- </div>
-EOF;
- if (nanobsd_clone_slice($_POST['destslice'])) {
- $savemsg = gettext("The slice has been duplicated.") . "<p/>" . gettext("If you would like to boot from this newly duplicated slice please set it using the bootup information area.");
- } else {
- $savemsg = gettext("There was an error while duplicating the slice. Operation aborted.");
- }
- // Re-Survey slice info
- nanobsd_detect_slice_info();
-}
-
-if ($_POST['changero']) {
- if (is_writable("/")) {
- conf_mount_ro();
- } else {
- conf_mount_rw();
- }
-}
-
-if ($_POST['setrw']) {
- conf_mount_rw();
- if (isset($_POST['nanobsd_force_rw'])) {
- $config['system']['nanobsd_force_rw'] = true;
- } else {
- unset($config['system']['nanobsd_force_rw']);
- }
-
- write_config("Changed Permanent Read/Write Setting");
- conf_mount_ro();
-}
-
-if ($savemsg) {
- print_info_box($savemsg);
-}
-
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td>
- <!-- tabs here if you want them -->
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <span class="vexpl">
- <span class="red">
- <strong><?=gettext("NOTE:")?>&nbsp;</strong>
- </span>
- <?=gettext("The options on this page are intended for use by advanced users only.")?>
- <br />&nbsp;
- </span>
- <p/>
- <table width="100%" border="0" cellpadding="6" cellspacing="0">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Bootup information");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("NanoBSD Image size");?></td>
- <td width="78%" class="vtable">
- <?php echo $NANOBSD_SIZE; ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Bootup");?></td>
- <td width="78%" class="vtable">
- <form action="diag_nanobsd.php" method="post" name="iform">
- <?=gettext("Bootup slice is currently:");?> <?php echo $ACTIVE_SLICE; ?>
- <br /><br /><?=gettext("This will switch the bootup slice to the alternate slice.");?>
- <br />
- <input type='hidden' name='bootslice' value='switch'>
- <input type='submit' value='Switch Slice'></form>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Media Read/Write Status");?></td>
- </tr>
- <tr>
- <td valign="top" class="vncell">Current Read/Write Status:</td>
- <td valign="top" class="vncell">
- <form action="diag_nanobsd.php" method="post" name="iform">
- <?php if (is_writable("/")) {
- $refcount = refcount_read(1000);
- /* refcount_read returns -1 when shared memory section does not exist */
- if ($refcount == 1 || $refcount == -1) {
- $refdisplay = "";
- } else {
- $refdisplay = " (reference count " . $refcount . ")";
- }
- echo gettext("Read/Write") . $refdisplay;
- if (!isset($config['system']['nanobsd_force_rw'])) {
- echo "<br /><input type='submit' name='changero' value='" . gettext("Switch to Read-Only") . "'>";
- }
- } else {
- echo gettext("Read-Only");
- if (!isset($config['system']['nanobsd_force_rw'])) {
- echo "<br /><input type='submit' name='changero' value='" . gettext("Switch to Read/Write") . "'>";
- }
- } ?>
- </form>
- <br /><?php echo gettext("NOTE: This setting is only temporary, and can be switched dynamically in the background."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell">Permanent Read/Write:</td>
- <td valign="top" class="vncell">
- <form action="diag_nanobsd.php" method="post" name="iform">
- <input type="checkbox" name="nanobsd_force_rw" <?php if (isset($config['system']['nanobsd_force_rw'])) echo "checked"; ?>> <?php echo gettext("Keep media mounted read/write at all times.") ?>
- <br /><input type='submit' name='setrw' value='<?php echo gettext("Save") ?>'>
- </form>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Duplicate bootup slice to alternate");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Duplicate bootup slice");?></td>
- <td width="78%" class="vtable">
- <form action="diag_nanobsd.php" method="post" name="iform">
- <?=gettext("Destination slice:");?>
- <select name='destslice'>
- <option value='<?php echo $COMPLETE_PATH; ?>'>
- <?php echo "{$COMPLETE_BOOT_PATH} -> {$TOFLASH}"; ?>
- </option>
- </select>
- <br />
- <?=gettext("This will duplicate the bootup slice to the alternate slice. Use this if you would like to duplicate the known good working boot partition to the alternate.");?>
- <br /><input type='submit' name='duplicateslice' value='<?php echo gettext("Duplicate slice") ?>'>
- </form>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Periodic Data Backup");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RRD/DHCP Backup");?></td>
- <td width="78%" class="vtable">
- <?=gettext("These options have been relocated to");?> <a href="system_advanced_misc.php"><?=gettext("System > Advanced, Miscellaneous tab")?></a>.
- </td>
- </tr>
-<?php if (file_exists("/conf/upgrade_log.txt")): ?>
- <tr>
- <td colspan="2" valign="top" class="">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("View upgrade log");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("View previous upgrade log");?></td>
- <td width="78%" class="vtable">
- <?php
- if ($_POST['viewupgradelog']) {
- echo "<textarea name='log' cols='80' rows='40'>";
- echo str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/upgrade_log.txt"));
- echo "\nFile list:\n";
- echo str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/file_upgrade_log.txt"));
- echo "\nMisc log:\n";
- echo str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/firmware_update_misc_log.txt"));
- echo "\nfdisk/bsdlabel log:\n";
- echo str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/fdisk_upgrade_log.txt"));
- echo "</textarea>";
- } else {
- echo "<form action='diag_nanobsd.php' method='post' name='iform'>";
- echo "<input type='submit' name='viewupgradelog' value='View upgrade log'>";
- }
- ?>
- </td>
- </tr>
-<?php endif; ?>
- <tr>
- <td colspan="2" valign="top" class="">&nbsp;</td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php require("fend.inc"); ?>
-</body>
-</html>
-
-<?php
-
-// Clear the loading indicator
-echo "<script type=\"text/javascript\">";
-echo "jQuery('#loading').html('');";
-echo "</script>";
-
-?>
diff --git a/usr/local/www/diag_ndp.php b/usr/local/www/diag_ndp.php
deleted file mode 100644
index 233d8ee..0000000
--- a/usr/local/www/diag_ndp.php
+++ /dev/null
@@ -1,184 +0,0 @@
-<?php
-/*
- diag_ndp.php
- part of the pfSense project (https://www.pfsense.org)
- Copyright (C) 2004-2010 Scott Ullrich <sullrich@gmail.com>
- Copyright (C) 2011 Seth Mos <seth.mos@dds.nl>
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2005 Paul Taylor (paultaylor@winndixie.com) and Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /bin/cat /usr/sbin/arp
- pfSense_MODULE: arp
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-ndptable
-##|*NAME=Diagnostics: NDP Table page
-##|*DESCR=Allow access to the 'Diagnostics: NDP Table' page.
-##|*MATCH=diag_ndp.php*
-##|-PRIV
-
-@ini_set('zlib.output_compression', 0);
-@ini_set('implicit_flush', 1);
-
-require("guiconfig.inc");
-
-exec("/usr/sbin/ndp -na", $rawdata);
-
-$i = 0;
-
-/* if list */
-$ifdescrs = get_configured_interface_with_descr();
-
-foreach ($ifdescrs as $key =>$interface) {
- $hwif[$config['interfaces'][$key]['if']] = $interface;
-}
-
-/* Array ( [0] => Neighbor [1] => Linklayer [2] => Address
-[3] => Netif [4] => Expire [5] => S
-[6] => Flags ) */
-$data = array();
-array_shift($rawdata);
-foreach ($rawdata as $line) {
- $elements = preg_split('/[ ]+/', $line);
-
- $ndpent = array();
- $ndpent['ipv6'] = trim($elements[0]);
- $ndpent['mac'] = trim($elements[1]);
- $ndpent['interface'] = trim($elements[2]);
- $data[] = $ndpent;
-}
-
-/* FIXME: Not ipv6 compatible dns resolving. PHP needs fixing */
-function _getHostName($mac, $ip) {
- if (is_ipaddr($ip)) {
- list($ip, $scope) = explode("%", $ip);
- if (gethostbyaddr($ip) <> "" and gethostbyaddr($ip) <> $ip) {
- return gethostbyaddr($ip);
- } else {
- return "";
- }
- }
-}
-
-// Resolve hostnames and replace Z_ with "". The intention
-// is to sort the list by hostnames, alpha and then the non
-// resolvable addresses will appear last in the list.
-foreach ($data as &$entry) {
- $dns = trim(_getHostName($entry['mac'], $entry['ipv6']));
- if (trim($dns)) {
- $entry['dnsresolve'] = "$dns";
- } else {
- $entry['dnsresolve'] = "Z_ ";
- }
-}
-
-// Sort the data alpha first
-$data = msort($data, "dnsresolve");
-
-// Load MAC-Manufacturer table
-$mac_man = load_mac_manufacturer_table();
-
-$pgtitle = array(gettext("Diagnostics"), gettext("NDP Table"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-
-<?php include("fbegin.inc"); ?>
-
-<div id="loading">
- <img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" /><?= gettext("Loading, please wait..."); ?>
- <p>&nbsp;</p>
-</div>
-
-<?php
-
-// Flush buffers out to client so that they see Loading, please wait....
-for ($i = 0; $i < ob_get_level(); $i++) {
- ob_end_flush();
-}
-ob_implicit_flush(1);
-
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag ndp">
- <tr>
- <td>
- <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="tabcont">
- <tr>
- <td class="listhdrr"><?= gettext("IPv6 address"); ?></td>
- <td class="listhdrr"><?= gettext("MAC address"); ?></td>
- <td class="listhdrr"><?= gettext("Hostname"); ?></td>
- <td class="listhdr"><?= gettext("Interface"); ?></td>
- <td class="list"></td>
- </tr>
- <?php foreach ($data as $entry): ?>
- <tr>
- <td class="listlr"><?=$entry['ipv6'];?></td>
- <td class="listr">
- <?php
- $mac=trim($entry['mac']);
- $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
- print $mac;
- if (isset($mac_man[$mac_hi])) {
- print "<br /><font size=\"-2\"><i>{$mac_man[$mac_hi]}</i></font>";
- }
- ?>
- </td>
- <td class="listr">
- <?php
- echo "&nbsp;". str_replace("Z_ ", "", $entry['dnsresolve']);
- ?>
- </td>
- <td class="listr">
- <?php
- if (isset($hwif[$entry['interface']])) {
- echo $hwif[$entry['interface']];
- } else {
- echo $entry['interface'];
- }
- ?>
- </td>
- </tr>
- <?php endforeach; ?>
- </table>
- </td>
- </tr>
-</table>
-
-<?php include("fend.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
- jQuery('#loading').html('');
-//]]>
-</script>
-</body>
-</html>
diff --git a/usr/local/www/diag_packet_capture.php b/usr/local/www/diag_packet_capture.php
deleted file mode 100644
index 14be5d1..0000000
--- a/usr/local/www/diag_packet_capture.php
+++ /dev/null
@@ -1,485 +0,0 @@
-<?php
-/*
- diag_packet_capture.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /bin/ps /usr/bin/grep /usr/sbin/tcpdump
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-packetcapture
-##|*NAME=Diagnostics: Packet Capture page
-##|*DESCR=Allow access to the 'Diagnostics: Packet Capture' page.
-##|*MATCH=diag_packet_capture.php*
-##|-PRIV
-
-$allowautocomplete = true;
-
-function fixup_host_logic($value) {
- return str_replace(array(" ", ",", "+", "|", "!"), array("", "and ", "and ", "or ", "not "), $value);
-}
-function strip_host_logic($value) {
- return str_replace(array(" ", ",", "+", "|", "!"), array("", "", "", "", ""), $value);
-}
-function get_host_boolean($value, $host) {
- $value = str_replace(array("!", $host), array("", ""), $value);
- $andor = "";
- switch (trim($value)) {
- case "|":
- $andor = "or ";
- break;
- case ",":
- case "+":
- $andor = "and ";
- break;
- }
- return $andor;
-}
-function has_not($value) {
- return strpos($value, '!') !== false;
-}
-function fixup_not($value) {
- return str_replace("!", "not ", $value);
-}
-function strip_not($value) {
- return ltrim(trim($value), '!');
-}
-
-function fixup_host($value, $position) {
- $host = strip_host_logic($value);
- $not = has_not($value) ? "not " : "";
- $andor = ($position > 0) ? get_host_boolean($value, $host) : "";
- if (is_ipaddr($host)) {
- return "{$andor}host {$not}" . $host;
- } elseif (is_subnet($host)) {
- return "{$andor}net {$not}" . $host;
- } else {
- return "";
- }
-}
-
-if ($_POST['downloadbtn'] == gettext("Download Capture")) {
- $nocsrf = true;
-}
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Packet Capture"));
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-
-$fp = "/root/";
-$fn = "packetcapture.cap";
-$snaplen = 0;//default packet length
-$count = 100;//default number of packets to capture
-
-$fams = array('ip', 'ip6');
-$protos = array('icmp', 'icmp6', 'tcp', 'udp', 'arp', 'carp', 'esp',
- '!icmp', '!icmp6', '!tcp', '!udp', '!arp', '!carp', '!esp');
-
-$input_errors = array();
-
-$interfaces = get_configured_interface_with_descr();
-if (isset($config['ipsec']['enable'])) {
- $interfaces['ipsec'] = "IPsec";
-}
-foreach (array('server', 'client') as $mode) {
- if (is_array($config['openvpn']["openvpn-{$mode}"])) {
- foreach ($config['openvpn']["openvpn-{$mode}"] as $id => $setting) {
- if (!isset($setting['disable'])) {
- $interfaces['ovpn' . substr($mode, 0, 1) . $setting['vpnid']] = gettext("OpenVPN") . " ".$mode.": ".htmlspecialchars($setting['description']);
- }
- }
- }
-}
-
-if ($_POST) {
- $host = $_POST['host'];
- $selectedif = $_POST['interface'];
- $count = $_POST['count'];
- $snaplen = $_POST['snaplen'];
- $port = $_POST['port'];
- $detail = $_POST['detail'];
- $fam = $_POST['fam'];
- $proto = $_POST['proto'];
-
- if (!array_key_exists($selectedif, $interfaces)) {
- $input_errors[] = gettext("Invalid interface.");
- }
- if ($fam !== "" && $fam !== "ip" && $fam !== "ip6") {
- $input_errors[] = gettext("Invalid address family.");
- }
- if ($proto !== "" && !in_array(strip_not($proto), $protos)) {
- $input_errors[] = gettext("Invalid protocol.");
- }
-
- if ($host != "") {
- $host_string = str_replace(array(" ", "|", ","), array("", "#|", "#+"), $host);
- if (strpos($host_string, '#') === false) {
- $hosts = array($host);
- } else {
- $hosts = explode('#', $host_string);
- }
- foreach ($hosts as $h) {
- if (!is_subnet(strip_host_logic($h)) && !is_ipaddr(strip_host_logic($h))) {
- $input_errors[] = sprintf(gettext("A valid IP address or CIDR block must be specified. [%s]"), $h);
- }
- }
- }
- if ($port != "") {
- if (!is_port(strip_not($port))) {
- $input_errors[] = gettext("Invalid value specified for port.");
- }
- }
- if ($snaplen == "") {
- $snaplen = 0;
- } else {
- if (!is_numeric($snaplen) || $snaplen < 0) {
- $input_errors[] = gettext("Invalid value specified for packet length.");
- }
- }
- if ($count == "") {
- $count = 0;
- } else {
- if (!is_numeric($count) || $count < 0) {
- $input_errors[] = gettext("Invalid value specified for packet count.");
- }
- }
-
- if (!count($input_errors)) {
- $do_tcpdump = true;
-
- conf_mount_rw();
-
- if ($_POST['promiscuous']) {
- //if promiscuous mode is checked
- $disablepromiscuous = "";
- } else {
- //if promiscuous mode is unchecked
- $disablepromiscuous = "-p";
- }
-
- if ($_POST['dnsquery']) {
- //if dns lookup is checked
- $disabledns = "";
- } else {
- //if dns lookup is unchecked
- $disabledns = "-n";
- }
-
- if ($_POST['startbtn'] != "") {
- $action = gettext("Start");
-
- //delete previous packet capture if it exists
- if (file_exists($fp.$fn)) {
- unlink ($fp.$fn);
- }
-
- } elseif ($_POST['stopbtn'] != "") {
- $action = gettext("Stop");
- $processes_running = trim(shell_exec("/bin/ps axw -O pid= | /usr/bin/grep tcpdump | /usr/bin/grep {$fn} | /usr/bin/egrep -v '(pflog|grep)'"));
-
- //explode processes into an array, (delimiter is new line)
- $processes_running_array = explode("\n", $processes_running);
-
- //kill each of the packetcapture processes
- foreach ($processes_running_array as $process) {
- $process_id_pos = strpos($process, ' ');
- $process_id = substr($process, 0, $process_id_pos);
- exec("kill $process_id");
- }
-
- } elseif ($_POST['downloadbtn'] != "") {
- //download file
- $fs = filesize($fp.$fn);
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename=$fn");
- header("Content-Length: $fs");
- readfile($fp.$fn);
- exit;
- }
- }
-} else {
- $do_tcpdump = false;
-}
-
-include("head.inc"); ?>
-
-<body link="#000000" vlink="#0000CC" alink="#0000CC">
-
-<?php
-include("fbegin.inc");
-?>
-
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag packet capture">
- <tr><td>
- <form action="diag_packet_capture.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="table">
- <tr>
- <td colspan="3" valign="top" class="listtopic"><?=gettext("Packet capture");?></td>
- </tr>
- <tr>
- <td width="17%" valign="top" class="vncellreq"><?=gettext("Interface");?></td>
- <td width="32%" class="vtable">
- <select name="interface">
- <?php foreach ($interfaces as $iface => $ifacename): ?>
- <option value="<?=$iface;?>" <?php if ($selectedif == $iface) echo "selected=\"selected\""; ?>>
- <?php echo $ifacename;?>
- </option>
- <?php endforeach; ?>
- </select>
- <br /><?=gettext("Select the interface on which to capture traffic.");?>
- </td>
- </tr>
- <tr>
- <td width="17%" valign="top" class="vncellreq"><?=gettext("Promiscuous");?></td>
- <td width="51%" class="vtable">
- <input name="promiscuous" type="checkbox"<?php if ($_POST['promiscuous']) echo " checked=\"checked\""; ?> />
- <br /><?=gettext("If checked, the");?> <a target="_blank" href="http://www.freebsd.org/cgi/man.cgi?query=tcpdump&amp;apropos=0&amp;sektion=0&amp;manpath=FreeBSD+8.3-stable&amp;arch=default&amp;format=html"><?= gettext("packet capture")?></a> <?= gettext("will be performed using promiscuous mode.");?>
- <br /><b><?=gettext("Note");?>: </b><?=gettext("Some network adapters do not support or work well in promiscuous mode.");?>
- </td>
- </tr>
- <tr>
- <td width="17%" valign="top" class="vncellreq"><?=gettext("Address Family");?></td>
- <td colspan="2" width="83%" class="vtable">
- <select name="fam">
- <option value="">Any</option>
- <option value="ip" <?php if ($fam == "ip") echo "selected=\"selected\""; ?>>IPv4 Only</option>
- <option value="ip6" <?php if ($fam == "ip6") echo "selected=\"selected\""; ?>>IPv6 Only</option>
- </select>
- <br /><?=gettext("Select the type of traffic to be captured, either Any, IPv4 only or IPv6 only.");?>
- </td>
- </tr>
- <tr>
- <td width="17%" valign="top" class="vncellreq"><?=gettext("Protocol");?></td>
- <td colspan="2" width="83%" class="vtable">
- <select name="proto">
- <option value="">Any</option>
- <option value="icmp" <?php if ($proto == "icmp") echo "selected=\"selected\""; ?>>ICMP</option>
- <option value="!icmp" <?php if ($proto == "!icmp") echo "selected=\"selected\""; ?>>Exclude ICMP</option>
- <option value="icmp6" <?php if ($proto == "icmp6") echo "selected=\"selected\""; ?>>ICMPv6</option>
- <option value="!icmp6" <?php if ($proto == "!icmp6") echo "selected=\"selected\""; ?>>Exclude ICMPv6</option>
- <option value="tcp" <?php if ($proto == "tcp") echo "selected=\"selected\""; ?>>TCP</option>
- <option value="!tcp" <?php if ($proto == "!tcp") echo "selected=\"selected\""; ?>>Exclude TCP</option>
- <option value="udp" <?php if ($proto == "udp") echo "selected=\"selected\""; ?>>UDP</option>
- <option value="!udp" <?php if ($proto == "!udp") echo "selected=\"selected\""; ?>>Exclude UDP</option>
- <option value="arp" <?php if ($proto == "arp") echo "selected=\"selected\""; ?>>ARP</option>
- <option value="!arp" <?php if ($proto == "!arp") echo "selected=\"selected\""; ?>>Exclude ARP</option>
- <option value="carp" <?php if ($proto == "carp") echo "selected=\"selected\""; ?>>CARP (VRRP)</option>
- <option value="!carp" <?php if ($proto == "!carp") echo "selected=\"selected\""; ?>>Exclude CARP (VRRP)</option>
- <option value="esp" <?php if ($proto == "esp") echo "selected=\"selected\""; ?>>ESP</option>
- </select>
- <br /><?=gettext("Select the protocol to capture, or Any.");?>
- </td>
- </tr>
- <tr>
- <td width="17%" valign="top" class="vncellreq"><?=gettext("Host Address");?></td>
- <td colspan="2" width="83%" class="vtable">
- <input name="host" class="formfld host" id="host" size="20" value="<?=htmlspecialchars($host);?>" />
- <br /><?=gettext("This value is either the Source or Destination IP address or subnet in CIDR notation. The packet capture will look for this address in either field.");?>
- <br /><?=gettext("Matching can be negated by preceding the value with \"!\". Multiple IP addresses or CIDR subnets may be specified. Comma (\",\") separated values perform a boolean \"and\". Separating with a pipe (\"|\") performs a boolean \"or\".");?>
- <br /><?=gettext("If you leave this field blank, all packets on the specified interface will be captured.");?>
- </td>
- </tr>
- <tr>
- <td width="17%" valign="top" class="vncellreq"><?=gettext("Port");?></td>
- <td colspan="2" width="83%" class="vtable">
- <input name="port" class="formfld unknown" id="port" size="5" value="<?=htmlspecialchars($port);?>" />
- <br /><?=gettext("The port can be either the source or destination port. The packet capture will look for this port in either field.");?>
- <br /><?=gettext("Leave blank if you do not want to filter by port.");?>
- </td>
- </tr>
- <tr>
- <td width="17%" valign="top" class="vncellreq"><?=gettext("Packet Length");?></td>
- <td colspan="2" width="83%" class="vtable">
- <input name="snaplen" class="formfld unknown" id="snaplen" size="5" value="<?=htmlspecialchars($snaplen);?>" />
- <br /><?=gettext("The Packet length is the number of bytes of each packet that will be captured. Default value is 0, which will capture the entire frame regardless of its size.");?>
- </td>
- </tr>
- <tr>
- <td width="17%" valign="top" class="vncellreq"><?=gettext("Count");?></td>
- <td colspan="2" width="83%" class="vtable">
- <input name="count" class="formfld unknown" id="count" size="5" value="<?=htmlspecialchars($count);?>" />
- <br /><?=gettext("This is the number of packets the packet capture will grab. Default value is 100.") . "<br />" . gettext("Enter 0 (zero) for no count limit.");?>
- </td>
- </tr>
- <tr>
- <td width="17%" valign="top" class="vncellreq"><?=gettext("Level of Detail");?></td>
- <td colspan="2" width="83%" class="vtable">
- <select name="detail" class="formselect" id="detail" size="1">
- <option value="normal" <?php if ($detail == "normal") echo "selected=\"selected\""; ?>><?=gettext("Normal");?></option>
- <option value="medium" <?php if ($detail == "medium") echo "selected=\"selected\""; ?>><?=gettext("Medium");?></option>
- <option value="high" <?php if ($detail == "high") echo "selected=\"selected\""; ?>><?=gettext("High");?></option>
- <option value="full" <?php if ($detail == "full") echo "selected=\"selected\""; ?>><?=gettext("Full");?></option>
- </select>
- <br />
- <?=gettext("This is the level of detail that will be displayed after hitting 'Stop' when the packets have been captured.") . "<br /><b>" .
- gettext("Note:") . "</b> " .
- gettext("This option does not affect the level of detail when downloading the packet capture.");?>
- </td>
- </tr>
- <tr>
- <td width="17%" valign="top" class="vncellreq"><?=gettext("Reverse DNS Lookup");?></td>
- <td colspan="2" width="83%" class="vtable">
- <input name="dnsquery" type="checkbox" <?php if ($_POST['dnsquery']) echo " checked=\"checked\""; ?> />
- <br /><?=gettext("This check box will cause the packet capture to perform a reverse DNS lookup associated with all IP addresses.");?>
- <br /><b><?=gettext("Note");?>: </b><?=gettext("This option can cause delays for large packet captures.");?>
- </td>
- </tr>
- <tr>
- <td width="17%" valign="top">&nbsp;</td>
- <td colspan="2" width="83%">
-<?php
-
- /* check to see if packet capture tcpdump is already running */
- $processcheck = (trim(shell_exec("/bin/ps axw -O pid= | /usr/bin/grep tcpdump | /usr/bin/grep {$fn} | /usr/bin/egrep -v '(pflog|grep)'")));
-
- if ($processcheck != "") {
- $processisrunning = true;
- } else {
- $processisrunning = false;
- }
-
- if (($action == gettext("Stop") or $action == "") and $processisrunning != true) {
- echo "<input type=\"submit\" name=\"startbtn\" value=\"" . gettext("Start") . "\" />&nbsp;";
- } else {
- echo "<input type=\"submit\" name=\"stopbtn\" value=\"" . gettext("Stop") . "\" />&nbsp;";
- }
- if (file_exists($fp.$fn) and $processisrunning != true) {
- echo "<input type=\"submit\" name=\"viewbtn\" value=\"" . gettext("View Capture") . "\" />&nbsp;";
- echo "<input type=\"submit\" name=\"downloadbtn\" value=\"" . gettext("Download Capture") . "\" />";
- echo "<br />" . gettext("The packet capture file was last updated:") . " " . date("F jS, Y g:i:s a.", filemtime($fp.$fn));
- }
-?>
- </td>
- </tr>
- </table>
- </form>
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="results">
- <tr>
- <td valign="top" colspan="2">
-<?php
- echo "<font face=\"terminal\" size=\"2\">";
- if ($processisrunning == true) {
- echo("<strong>" . gettext("Packet Capture is running.") . "</strong><br />");
- }
-
- if ($do_tcpdump) {
- $matches = array();
-
- if (in_array($fam, $fams)) {
- $matches[] = $fam;
- }
-
- if (in_array($proto, $protos)) {
- $matches[] = fixup_not($proto);
- }
-
- if ($port != "") {
- $matches[] = "port ".fixup_not($port);
- }
-
- if ($host != "") {
- $hostmatch = "";
- $hostcount = 0;
- foreach ($hosts as $h) {
- $h = fixup_host($h, $hostcount++);
- if (!empty($h)) {
- $hostmatch .= " " . $h;
- }
- }
- if (!empty($hostmatch)) {
- $matches[] = "({$hostmatch})";
- }
- }
-
- if ($count != "0") {
- $searchcount = "-c " . $count;
- } else {
- $searchcount = "";
- }
-
- $selectedif = convert_friendly_interface_to_real_interface_name($selectedif);
-
- if ($action == gettext("Start")) {
- $matchstr = implode($matches, " and ");
- echo("<strong>" . gettext("Packet Capture is running.") . "</strong><br />");
- $cmd = "/usr/sbin/tcpdump -i {$selectedif} {$disablepromiscuous} {$searchcount} -s {$snaplen} -w {$fp}{$fn} " . escapeshellarg($matchstr);
- // Debug
- //echo $cmd;
- mwexec_bg ($cmd);
- } else {
- //action = stop
- echo("<strong>" . gettext("Packet Capture stopped.") . "<br /><br />" . gettext("Packets Captured:") . "</strong><br />");
-?>
- <script type="text/javascript">
- //<![CDATA[
- window.onload=function() {
- document.getElementById("packetsCaptured").wrap='off';
- }
- //]]>
- </script>
- <textarea id="packetsCaptured" style="width:98%" name="code" rows="15" cols="66" readonly="readonly">
-<?php
- $detail_args = "";
- switch ($detail) {
- case "full":
- $detail_args = "-vv -e";
- break;
- case "high":
- $detail_args = "-vv";
- break;
- case "medium":
- $detail_args = "-v";
- break;
- case "normal":
- default:
- $detail_args = "-q";
- break;
- }
- system("/usr/sbin/tcpdump {$disabledns} {$detail_args} -r {$fp}{$fn}");
-
- conf_mount_ro();
-?>
- </textarea>
-<?php
- }
- }
-?>
- &nbsp;</font>
- </td>
- </tr>
- </table>
- </td></tr>
-</table>
-
-<?php
-include("fend.inc");
-?>
-</body>
-</html>
diff --git a/usr/local/www/diag_patterns.php b/usr/local/www/diag_patterns.php
deleted file mode 100644
index 1c3528d..0000000
--- a/usr/local/www/diag_patterns.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-/* $Id$ */
-/*
- Exec+ v1.02-000 - Copyright 2001-2003, All rights reserved
- Created by André Ribeiro and Hélder Pereira
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: shaper
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-patters
-##|*NAME=Diagnostics: Patterns page
-##|*DESCR=Allow access to the 'Diagnostics: Patterns' page.
-##|*MATCH=patterns.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-//Move the upload file to /usr/local/share/protocols (is_uploaded_file must use tmp_name as argument)
-if (($_POST['submit'] == gettext("Upload Pattern file")) && is_uploaded_file($_FILES['ulfile']['tmp_name'])) {
- if (fileExtension($_FILES['ulfile']['name'])) {
- if (!is_array($config['l7shaper']['custom_pat'])) {
- $config['l7shaper']['custom_pat'] = array();
- }
-
- $config['l7shaper']['custom_pat'][$_FILES['ulfile']['name']] = base64_encode(file_get_contents($_FILES['ulfile']['tmp_name']));
- write_config(sprintf(gettext("Added custom l7 pattern %s"), $_FILES['ulfile']['name']));
- move_uploaded_file($_FILES['ulfile']['tmp_name'], "/usr/local/share/protocols/" . $_FILES['ulfile']['name']);
- $ulmsg = gettext("Uploaded file to") . " /usr/local/share/protocols/" . htmlentities($_FILES['ulfile']['name']);
- } else {
- $ulmsg = gettext("Warning: You must upload a file with .pat extension.");
- }
-}
-
-//Check if file has correct extension (.pat)
-function fileExtension($nameFile) {
- $format = substr($nameFile, -4);
- return ($format == ".pat");
-}
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Add layer7 pattern"));
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($ulmsg) echo "<p class=\"red\"><strong>" . $ulmsg . "</strong></p>\n"; ?>
-<div id="mainarea">
-<form action="diag_patterns.php" method="post" enctype="multipart/form-data" name="frmPattern">
-<table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="upload pattern">
- <tr>
- <td colspan="4" valign="top" class="listtopic"><?=gettext("Upload layer7 pattern file");?></td>
- </tr>
- <tr>
- <td align="right"><strong><?=gettext("File to upload:");?></strong></td>
- <td valign="top" class="label">
- <input name="ulfile" type="file" class="formfld file" id="ulfile" />
- </td>
- </tr>
- <tr>
- <td valign="top">&nbsp;&nbsp;&nbsp;</td>
- <td valign="top" class="label">
- <input name="submit" type="submit" class="button" id="upload" value="<?=gettext("Upload Pattern file");?>" />
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
-</table>
-</form>
-</div>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_pf_info.php b/usr/local/www/diag_pf_info.php
deleted file mode 100644
index 369c0f4..0000000
--- a/usr/local/www/diag_pf_info.php
+++ /dev/null
@@ -1,117 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_pf_info.php
- Copyright (C) 2010 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/top
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-pf-info
-##|*NAME=Diagnostics: pfInfo
-##|*DESCR=Allows access to the 'Diagnostics: pfInfo' page
-##|*MATCH=diag_pf_info.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$pgtitle = gettext("Diagnostics: pfInfo");
-
-if ($_REQUEST['getactivity']) {
- $text = `/sbin/pfctl -vvsi`;
- $text .= "<p/>";
- $text .= `/sbin/pfctl -vvsm`;
- $text .= "<p/>";
- $text .= `/sbin/pfctl -vvst`;
- $text .= "<p/>";
- $text .= `/sbin/pfctl -vvsI`;
- echo $text;
- exit;
-}
-
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-jQuery(document).ready(function() {setTimeout('getpfinfo()', 5000);});
-//<![CDATA[
- function getpfinfo() {
- jQuery.ajax({
- type: "POST",
- url: "/diag_pf_info.php",
- data: 'getactivity=yes',
- async: false,
- complete: activitycallback
- });
- }
- function activitycallback(transport) {
- jQuery('#pfactivitydiv').html('<font face="Courier" size="2"><pre style="text-align:left;">' + transport.responseText + '<\/pre><\/font>');
- setTimeout('getpfinfo()', 2000);
- }
-//]]>
-</script>
-<div id="maincontent">
-<?php
- if ($savemsg) {
- echo "<div id=\"savemsg\">";
- print_info_box($savemsg);
- echo "</div>";
- }
- if ($input_errors) {
- print_input_errors($input_errors);
- }
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag pf info">
- <tr>
- <td>
- <table id="backuptable" class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
- <tr>
- <td align="center">
- <table summary="results">
- <tr>
- <td>
- <div id="pfactivitydiv">
- <?=gettext("Gathering PF information, please wait...");?>
- </div>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</div>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_ping.php b/usr/local/www/diag_ping.php
deleted file mode 100644
index 102b097..0000000
--- a/usr/local/www/diag_ping.php
+++ /dev/null
@@ -1,202 +0,0 @@
-<?php
-/*
- diag_ping.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2005 Bob Zoller (bob@kludgebox.com) and Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /sbin/ping /sbin/ping6
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-ping
-##|*NAME=Diagnostics: Ping page
-##|*DESCR=Allow access to the 'Diagnostics: Ping' page.
-##|*MATCH=diag_ping.php*
-##|-PRIV
-
-$allowautocomplete = true;
-$pgtitle = array(gettext("Diagnostics"), gettext("Ping"));
-require_once("guiconfig.inc");
-
-define('MAX_COUNT', 10);
-define('DEFAULT_COUNT', 3);
-
-if ($_POST || $_REQUEST['host']) {
- unset($input_errors);
- unset($do_ping);
-
- /* input validation */
- $reqdfields = explode(" ", "host count");
- $reqdfieldsn = array(gettext("Host"), gettext("Count"));
- do_input_validation($_REQUEST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (($_REQUEST['count'] < 1) || ($_REQUEST['count'] > MAX_COUNT)) {
- $input_errors[] = sprintf(gettext("Count must be between 1 and %s"), MAX_COUNT);
- }
-
- $host = trim($_REQUEST['host']);
- $ipproto = $_REQUEST['ipproto'];
- if (($ipproto == "ipv4") && is_ipaddrv6($host)) {
- $input_errors[] = gettext("When using IPv4, the target host must be an IPv4 address or hostname.");
- }
- if (($ipproto == "ipv6") && is_ipaddrv4($host)) {
- $input_errors[] = gettext("When using IPv6, the target host must be an IPv6 address or hostname.");
- }
-
- if (!$input_errors) {
- $do_ping = true;
- $sourceip = $_REQUEST['sourceip'];
- $count = $_POST['count'];
- if (preg_match('/[^0-9]/', $count)) {
- $count = DEFAULT_COUNT;
- }
- }
-}
-if (!isset($do_ping)) {
- $do_ping = false;
- $host = '';
- $count = DEFAULT_COUNT;
-}
-
-include("head.inc"); ?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="ping">
-<tr><td>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="diag_ping.php" method="post" name="iform" id="iform">
-<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Ping"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Host"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="host" type="text" class="formfld unknown" id="host" size="20" value="<?=htmlspecialchars($host);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("IP Protocol"); ?></td>
- <td width="78%" class="vtable">
- <select name="ipproto" class="formselect">
- <option value="ipv4" <?php if ($ipproto == "ipv4") echo "selected=\"selected\"" ?>>IPv4</option>
- <option value="ipv6" <?php if ($ipproto == "ipv6") echo "selected=\"selected\"" ?>>IPv6</option>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Source Address"); ?></td>
- <td width="78%" class="vtable">
- <select name="sourceip" class="formselect">
- <option value="">Default</option>
- <?php $sourceips = get_possible_traffic_source_addresses(true);
- foreach ($sourceips as $sipvalue => $sipname):
- $selected = "";
- if (!link_interface_to_bridge($sipvalue) && ($sipvalue == $sourceip)) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$sipvalue;?>" <?=$selected;?>>
- <?=htmlspecialchars($sipname);?>
- </option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?= gettext("Count"); ?></td>
- <td width="78%" class="vtable">
- <select name="count" class="formfld" id="count">
- <?php for ($i = 1; $i <= MAX_COUNT; $i++): ?>
- <option value="<?=$i;?>" <?php if ($i == $count) echo "selected=\"selected\""; ?>><?=$i;?></option>
- <?php endfor; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Ping"); ?>" />
- </td>
- </tr>
- <tr>
- <td valign="top" colspan="2">
- <?php if ($do_ping) {
- echo "<font face=\"terminal\" size=\"2\">";
- echo "<strong>" . gettext("Ping output") . ":</strong><br />";
- ?>
- <script type="text/javascript">
- //<![CDATA[
- window.onload=function() {
- document.getElementById("pingCaptured").wrap='off';
- }
- //]]>
- </script>
- <?php
- echo "<textarea id=\"pingCaptured\" style=\"width:98%\" name=\"code\" rows=\"15\" cols=\"66\" readonly=\"readonly\">";
- $ifscope = '';
- $command = "/sbin/ping";
- if ($ipproto == "ipv6") {
- $command .= "6";
- $ifaddr = is_ipaddr($sourceip) ? $sourceip : get_interface_ipv6($sourceip);
- if (is_linklocal($ifaddr)) {
- $ifscope = get_ll_scope($ifaddr);
- }
- } else {
- $ifaddr = is_ipaddr($sourceip) ? $sourceip : get_interface_ip($sourceip);
- }
- if ($ifaddr && (is_ipaddr($host) || is_hostname($host))) {
- $srcip = "-S" . escapeshellarg($ifaddr);
- if (is_linklocal($host) && !strstr($host, "%") && !empty($ifscope)) {
- $host .= "%{$ifscope}";
- }
- }
-
- $cmd = "{$command} {$srcip} -c" . escapeshellarg($count) . " " . escapeshellarg($host);
- //echo "Ping command: {$cmd}\n";
- system($cmd);
- echo('</textarea>&nbsp;</font>');
- }
- ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">&nbsp;</td>
- </tr>
-</table>
-</form>
-</td></tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_pkglogs.php b/usr/local/www/diag_pkglogs.php
deleted file mode 100755
index 6575c48..0000000
--- a/usr/local/www/diag_pkglogs.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-/*
- $Id$
-
- diag_pkglogs.php
- Copyright (C) 2005 Colin Smith
- All rights reserved.
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- <logging>
- <logtab>arpwatch</logtab>
- <grepfor>arpwatch</logtab>
- </logging>
-
- <invertgrep/>
- <logfile>/var/log/arpwatch.log</logfile>
-
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/netstat
- pfSense_MODULE: pkgs
-*/
-
-##|+PRIV
-##|*IDENT=page-status-packagelogs
-##|*NAME=Status: Package logs page
-##|*DESCR=Allow access to the 'Status: Package logs' page.
-##|*MATCH=diag_pkglogs.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("pkg-utils.inc");
-
-if (!($nentries = $config['syslog']['nentries'])) {
- $nentries = 50;
-}
-
-//if ($_POST['clear'])
-// clear_log_file($logfile);
-
-$i = 0;
-$pkgwithlogging = false;
-$apkg = $_GET['pkg'];
-if (!$apkg) { // If we aren't looking for a specific package, locate the first package that handles logging.
- if ($config['installedpackages']['package'] <> "") {
- foreach ($config['installedpackages']['package'] as $package) {
- if (is_array($package['logging'])) {
- $pkgwithlogging = true;
- $apkg = $package['name'];
- $apkgid = $i;
- break;
- }
- $i++;
- }
- }
-} elseif ($apkg) {
- $apkgid = get_package_id($apkg);
- if ($apkgid != -1) {
- $pkgwithlogging = true;
- $i = $apkgid;
- }
-}
-
-$pgtitle = array(gettext("Status"), gettext("Package logs"));
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td>
- <?php
- if ($pkgwithlogging == false) {
- print_info_box(gettext("No packages with logging facilities are currently installed."));
- echo '</ul></td></tr></table>';
- include("fend.inc");
- exit;
- }
- $tab_array = array();
- foreach ($config['installedpackages']['package'] as $package) {
- if (is_array($package['logging'])) {
- if (!($logtab = $package['logging']['logtab'])) {
- $logtab = $package['name'];
- }
- if ($apkg == $package['name']) {
- $curtab = $logtab;
- $tab_array[] = array(sprintf(gettext("%s"), $logtab), true, "diag_pkglogs.php?pkg=".$package['name']);
- } else {
- $tab_array[] = array(sprintf(gettext("%s"), $logtab), false, "diag_pkglogs.php?pkg=".$package['name']);
- }
- }
- }
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td colspan="2" class="listtopic">
- <?php printf(gettext('Last %1$s %2$s log entries'), $nentries, $curtab); ?>
- </td>
- </tr>
- <?php
- $package =& $config['installedpackages']['package'][$apkgid];
- dump_clog($g['varlog_path'] . '/' . $package['logging']['logfilename'], $nentries);
- ?>
- </table>
-<!--
-<form action="diag_pkglogs.php" method="post">
-<input name="clear" type="submit" class="formbtn" value="Clear log">
-</form>
--->
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_resetstate.php b/usr/local/www/diag_resetstate.php
deleted file mode 100644
index 07d3575..0000000
--- a/usr/local/www/diag_resetstate.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_resetstate.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004-2009 Scott Ullrich
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: filter
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-resetstate
-##|*NAME=Diagnostics: Reset state page
-##|*DESCR=Allow access to the 'Diagnostics: Reset state' page.
-##|*MATCH=diag_resetstate.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("filter.inc");
-
-if ($_POST) {
- $savemsg = "";
- if ($_POST['statetable']) {
- filter_flush_state_table();
- if ($savemsg) {
- $savemsg .= " ";
- }
- $savemsg .= gettext("The state table has been flushed successfully.");
- }
- if ($_POST['sourcetracking']) {
- mwexec("/sbin/pfctl -F Sources");
- if ($savemsg) {
- $savemsg .= " <br />";
- }
- $savemsg .= gettext("The source tracking table has been flushed successfully.");
- }
-}
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Reset state"));
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<form action="diag_resetstate.php" method="post" name="iform" id="iform">
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="reset states">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("States"), false, "diag_dump_states.php");
- if (isset($config['system']['lb_use_sticky'])) {
- $tab_array[] = array(gettext("Source Tracking"), false, "diag_dump_states_sources.php");
- }
- $tab_array[] = array(gettext("Reset States"), true, "diag_resetstate.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable"> <p>
- <input name="statetable" type="checkbox" id="statetable" value="yes" checked="checked" />
- <strong><?= gettext("Firewall state table"); ?></strong><br />
- <span class="vexpl"><br />
- <?=gettext("Resetting the state tables will remove all entries from " .
- "the corresponding tables. This means that all open connections " .
- "will be broken and will have to be re-established. This " .
- "may be necessary after making substantial changes to the " .
- "firewall and/or NAT rules, especially if there are IP protocol " .
- "mappings (e.g. for PPTP or IPv6) with open connections."); ?><br />
- <br />
- </span><span class="vexpl"><?=gettext("The firewall will normally leave " .
- "the state tables intact when changing rules."); ?><br />
- <br />
- <?=gettext("NOTE: If you reset the firewall state table, the browser " .
- "session may appear to be hung after clicking &quot;Reset&quot;. " .
- "Simply refresh the page to continue."); ?></span></p>
- </td>
- </tr>
- <?php if (isset($config['system']['lb_use_sticky'])): ?>
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable"><p>
- <input name="sourcetracking" type="checkbox" id="sourcetracking" value="yes" checked="checked" />
- <strong><?= gettext("Firewall Source Tracking"); ?></strong><br />
- <span class="vexpl"><br />
- <?=gettext("Resetting the source tracking table will remove all source/destination associations. " .
- "This means that the \"sticky\" source/destination association " .
- "will be cleared for all clients."); ?><br />
- <br />
- </span><span class="vexpl"><?=gettext("This does not clear active connection states, only source tracking."); ?><br />
- </p>
- </td>
- </tr>
- <?php endif; ?>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Reset"); ?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_routes.php b/usr/local/www/diag_routes.php
deleted file mode 100644
index ff2fe8d..0000000
--- a/usr/local/www/diag_routes.php
+++ /dev/null
@@ -1,247 +0,0 @@
-<?php
-
-/* $Id$ */
-/*
- diag_routes.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2006 Fernando Lamos
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/netstat
- pfSense_MODULE: routing
-*/
-##|+PRIV
-##|*IDENT=page-diagnostics-routingtables
-##|*NAME=Diagnostics: Routing tables page
-##|*DESCR=Allow access to the 'Diagnostics: Routing tables' page.
-##|*MATCH=diag_routes.php*
-##|-PRIV
-
-include('guiconfig.inc');
-
-if (isset($_REQUEST['isAjax'])) {
- $netstat = "/usr/bin/netstat -rW";
- if (isset($_REQUEST['IPv6'])) {
- $netstat .= " -f inet6";
- echo "IPv6\n";
- } else {
- $netstat .= " -f inet";
- echo "IPv4\n";
- }
- if (!isset($_REQUEST['resolve'])) {
- $netstat .= " -n";
- }
-
- if (!empty($_REQUEST['filter'])) {
- $netstat .= " | /usr/bin/sed -e '1,3d; 5,\$ { /" . escapeshellarg(htmlspecialchars($_REQUEST['filter'])) . "/!d; };'";
- } else {
- $netstat .= " | /usr/bin/sed -e '1,3d'";
- }
-
- if (is_numeric($_REQUEST['limit']) && $_REQUEST['limit'] > 0) {
- $netstat .= " | /usr/bin/head -n {$_REQUEST['limit']}";
- }
-
- echo htmlspecialchars_decode(shell_exec($netstat));
-
- exit;
-}
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Routing tables"));
-$shortcut_section = "routing";
-
-include('head.inc');
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
-
- function update_routes(section) {
- var url = "diag_routes.php";
- var limit = jQuery('#limit option:selected').text();
- var filter = jQuery('#filter').val();
- var params = "isAjax=true&limit=" + limit + "&filter=" + filter;
- if (jQuery('#resolve').is(':checked')) {
- params += "&resolve=true";
- }
- if (section == "IPv6") {
- params += "&IPv6=true";
- }
- var myAjax = new Ajax.Request(
- url,
- {
- method: 'post',
- parameters: params,
- onComplete: update_routes_callback
- });
- }
-
- function update_routes_callback(transport) {
- // First line contains section
- var responseTextArr = transport.responseText.split("\n");
- var section = responseTextArr.shift();
- var tbody = '';
- var field = '';
- var elements = 8;
- var tr_class = '';
-
- var thead = '<tr><td class="listtopic" colspan="' + elements + '"><strong>' + section + '<\/strong><\/td><\/tr>' + "\n";
- for (var i = 0; i < responseTextArr.length; i++) {
- if (responseTextArr[i] == "") {
- continue;
- }
- var tmp = '';
- if (i == 0) {
- tr_class = 'listhdrr';
- tmp += '<tr class="sortableHeaderRowIdentifier">' + "\n";
- } else {
- tr_class = 'listlr';
- tmp += '<tr>' + "\n";
- }
- var j = 0;
- var entry = responseTextArr[i].split(" ");
- for (var k = 0; k < entry.length; k++) {
- if (entry[k] == "") {
- continue;
- }
- if (i == 0 && j == (elements - 1)) {
- tr_class = 'listhdr';
- }
- tmp += '<td class="' + tr_class + '">' + entry[k] + '<\/td>' + "\n";
- if (i > 0) {
- tr_class = 'listr';
- }
- j++;
- }
- // The 'Expire' field might be blank
- if (j == (elements - 1)) {
- tmp += '<td class="listr">&nbsp;<\/td>' + "\n";
- }
- tmp += '<\/tr>' + "\n";
- if (i == 0) {
- thead += tmp;
- } else {
- tbody += tmp;
- }
- }
- jQuery('#' + section + ' > thead').html(thead);
- jQuery('#' + section + ' > tbody').html(tbody);
- }
-
-//]]>
-</script>
-
-<script type="text/javascript">
-//<![CDATA[
-
- function update_all_routes() {
- update_routes("IPv4");
- update_routes("IPv6");
- }
-
- jQuery(document).ready(function() {setTimeout('update_all_routes()', 5000);});
-
-//]]>
-</script>
-
-<div id="mainarea">
-<form action="diag_routes.php" method="post">
-<table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="6" summary="diag routes">
- <tr>
- <td class="vncellreq" width="22%"><?=gettext("Name resolution");?></td>
- <td class="vtable" width="78%">
- <input type="checkbox" class="formfld" id="resolve" name="resolve" value="yes" <?php if ($_POST['resolve'] == 'yes') echo "checked=\"checked\""; ?> /><?=gettext("Enable");?>
- <br />
- <span class="expl"><?=gettext("Enable this to attempt to resolve names when displaying the tables.");?></span>
- </td>
- </tr>
-
- <tr>
- <td class="vncellreq" width="22%"><?=gettext("Number of rows");?></td>
- <td class="vtable" width="78%">
- <select id="limit" name="limit">
-<?php
- foreach (array("10", "50", "100", "200", "500", "1000", gettext("all")) as $item) {
- echo "<option value=\"{$item}\" " . ($item == "100" ? "selected=\"selected\"" : "") . ">{$item}</option>\n";
- }
-?>
- </select>
- <br />
- <span class="expl"><?=gettext("Select how many rows to display.");?></span>
- </td>
- </tr>
-
- <tr>
- <td class="vncellreq" width="22%"><?=gettext("Filter expression");?></td>
- <td class="vtable" width="78%">
- <input type="text" class="formfld search" name="filter" id="filter" />
- <br />
- <span class="expl"><?=gettext("Use a regular expression to filter IP address or hostnames.");?></span>
- </td>
- </tr>
-
- <tr>
- <td class="vncellreq" width="22%">&nbsp;</td>
- <td class="vtable" width="78%">
- <input type="button" class="formbtn" name="update" onclick="update_all_routes();" value="<?=gettext("Update"); ?>" />
- <br />
- <br />
- <span class="vexpl"><span class="red"><strong><?=gettext("Note:")?></strong></span> <?=gettext("By enabling name resolution, the query should take a bit longer. You can stop it at any time by clicking the Stop button in your browser.");?></span>
- </td>
- </tr>
-</table>
-</form>
-
-<table class="tabcont sortable" width="100%" cellspacing="0" cellpadding="6" border="0" id="IPv4" summary="ipv4 routes">
- <thead>
- <tr><td class="listtopic"><strong>IPv4</strong></td></tr>
- </thead>
- <tbody>
- <tr><td class="listhdrr"><?=gettext("Gathering data, please wait...");?></td></tr>
- </tbody>
-</table>
-<table class="tabcont sortable" width="100%" cellspacing="0" cellpadding="6" border="0" id="IPv6" summary="ipv6 routes">
- <thead>
- <tr><td class="listtopic"><strong>IPv6</strong></td></tr>
- </thead>
- <tbody>
- <tr><td class="listhdrr"><?=gettext("Gathering data, please wait...");?></td></tr>
- </tbody>
-</table>
-
-</div>
-
-<?php
-include('fend.inc');
-?>
-
-</body>
-</html>
diff --git a/usr/local/www/diag_smart.php b/usr/local/www/diag_smart.php
deleted file mode 100644
index 1cc9161..0000000
--- a/usr/local/www/diag_smart.php
+++ /dev/null
@@ -1,453 +0,0 @@
-<?php
-/*
- diag_smart.php
- Part of pfSense
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved
-
- Some modifications:
- Copyright (C) 2010 - Jim Pingle
-
- Copyright (C) 2006, Eric Friesen
- All rights reserved
-
-*/
-
-require("guiconfig.inc");
-
-$pgtitle = array(gettext("Diagnostics"), gettext("S.M.A.R.T. Monitor Tools"));
-$smartctl = "/usr/local/sbin/smartctl";
-$smartd = "/usr/local/sbin/smartd";
-$start_script = "/usr/local/etc/rc.d/smartd.sh";
-
-$valid_test_types = array("offline", "short", "long", "conveyance");
-$valid_info_types = array("i", "H", "c", "A", "a");
-$valid_log_types = array("error", "selftest");
-
-$closehead = false;
-include("head.inc");
-?>
-
-<style type="text/css">
-/*<![CDATA[*/
-
-input {
- font-family: courier new, courier;
- font-weight: normal;
- font-size: 9pt;
-}
-
-pre {
- border: 2px solid #435370;
- background: #F0F0F0;
- padding: 1em;
- font-family: courier new, courier;
- white-space: pre;
- line-height: 10pt;
- font-size: 10pt;
-}
-
-.label {
- font-family: tahoma, verdana, arial, helvetica;
- font-size: 11px;
- font-weight: bold;
-}
-
-.button {
- font-family: tahoma, verdana, arial, helvetica;
- font-weight: bold;
- font-size: 11px;
-}
-
-/*]]>*/
-</style>
-</head>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-
-<?php
-include("fbegin.inc");
-
-// Highlights the words "PASSED", "FAILED", and "WARNING".
-function add_colors($string) {
- // To add words keep arrays matched by numbers
- $patterns[0] = '/PASSED/';
- $patterns[1] = '/FAILED/';
- $patterns[2] = '/Warning/';
- $replacements[0] = '<b><font color="#00ff00">' . gettext("PASSED") . '</font></b>';
- $replacements[1] = '<b><font color="#ff0000">' . gettext("FAILED") . '</font></b>';
- $replacements[2] = '<font color="#ff0000">' . gettext("Warning") . '</font>';
- ksort($patterns);
- ksort($replacements);
- return preg_replace($patterns, $replacements, $string);
-}
-
-// Edits smartd.conf file, adds or removes email for failed disk reporting
-function update_email($email) {
- // Did they pass an email?
- if (!empty($email)) {
- // Put it in the smartd.conf file
- shell_exec("/usr/bin/sed -i old 's/^DEVICESCAN.*/DEVICESCAN -H -m " . escapeshellarg($email) . "/' /usr/local/etc/smartd.conf");
- } else {
- // Remove email flags in smartd.conf
- shell_exec("/usr/bin/sed -i old 's/^DEVICESCAN.*/DEVICESCAN/' /usr/local/etc/smartd.conf");
- }
-}
-
-function smartmonctl($action) {
- global $start_script;
- shell_exec($start_script . escapeshellarg($action));
-}
-
-// What page, aka. action is being wanted
-// If they "get" a page but don't pass all arguments, smartctl will throw an error
-$action = (isset($_POST['action']) ? $_POST['action'] : $_GET['action']);
-$targetdev = basename($_POST['device']);
-if (!file_exists('/dev/' . $targetdev)) {
- echo "Device does not exist, bailing.";
- return;
-}
-switch ($action) {
- // Testing devices
- case 'test':
- {
- $test = $_POST['testType'];
- if (!in_array($test, $valid_test_types)) {
- echo "Invalid test type, bailing.";
- return;
- }
- $output = add_colors(shell_exec($smartctl . " -t " . escapeshellarg($test) . " /dev/" . escapeshellarg($targetdev)));
- echo '<pre>' . $output . '
- <form action="diag_smart.php" method="post" name="abort">
- <input type="hidden" name="device" value="' . $targetdev . '" />
- <input type="hidden" name="action" value="abort" />
- <input type="submit" name="submit" value="' . gettext("Abort") . '" />
- </form>
- </pre>';
- break;
- }
-
- // Info on devices
- case 'info':
- {
- $type = $_POST['type'];
- if (!in_array($type, $valid_info_types)) {
- echo "Invalid info type, bailing.";
- return;
- }
- $output = add_colors(shell_exec($smartctl . " -" . escapeshellarg($type) . " /dev/" . escapeshellarg($targetdev)));
- echo "<pre>$output</pre>";
- break;
- }
-
- // View logs
- case 'logs':
- {
- $type = $_POST['type'];
- if (!in_array($type, $valid_log_types)) {
- echo "Invalid log type, bailing.";
- return;
- }
- $output = add_colors(shell_exec($smartctl . " -l " . escapeshellarg($type) . " /dev/" . escapeshellarg($targetdev)));
- echo "<pre>$output</pre>";
- break;
- }
-
- // Abort tests
- case 'abort':
- {
- $output = shell_exec($smartctl . " -X /dev/" . escapeshellarg($targetdev));
- echo "<pre>$output</pre>";
- break;
- }
-
- // Config changes, users email in xml config and write changes to smartd.conf
- case 'config':
- {
- if (isset($_POST['submit'])) {
- // DOES NOT WORK YET...
- if ($_POST['testemail']) {
-// FIXME shell_exec($smartd . " -M test -m " . $config['system']['smartmonemail']);
- $savemsg = sprintf(gettext("Email sent to %s"), $config['system']['smartmonemail']);
- smartmonctl("stop");
- smartmonctl("start");
- } else {
- $config['system']['smartmonemail'] = $_POST['smartmonemail'];
- write_config();
-
- // Don't know what all this means, but it adds the config changed header when config is saved
- $retval = 0;
- config_lock();
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message($retval);
- } else {
- $savemsg = $retval;
- }
- config_unlock();
-
- if ($_POST['email']) {
- // Write the changes to the smartd.conf file
- update_email($_POST['smartmonemail']);
- }
-
- // Send sig HUP to smartd, rereads the config file
- shell_exec("/usr/bin/killall -HUP smartd");
- }
- }
- // Was the config changed? if so , print the message
- if ($savemsg) {
- print_info_box($savemsg);
- }
- // Get users email from the xml file
- $pconfig['smartmonemail'] = $config['system']['smartmonemail'];
-
- ?>
- <!-- Print the tabs across the top -->
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tabs">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Information/Tests"), false, $_SERVER['PHP_SELF'] . "?action=default");
- $tab_array[1] = array(gettext("Config"), true, $_SERVER['PHP_SELF'] . "?action=config");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- </table>
-<!-- user email address -->
- <form action="<?= $_SERVER['PHP_SELF']?>" method="post" name="config">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="e-mail">
- <tbody>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Config"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Email Address"); ?></td>
- <td width="78%" class="vtable">
- <input type="text" name="smartmonemail" value="<?=htmlspecialchars($pconfig['smartmonemail'])?>"/>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input type="hidden" name="action" value="config" />
- <input type="hidden" name="email" value="true" />
- <input type="submit" name="submit" value="<?=gettext("Save"); ?>" class="formbtn" />
- </td>
- </tr>
- </tbody>
- </table>
- </form>
-
-<!-- test email -->
- <form action="<?= $_SERVER['PHP_SELF']?>" method="post" name="config">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="test e-mail">
- <tbody>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Test email"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell">&nbsp;</td>
- <td width="78%" class="vtable">
- <?php printf(gettext("Send test email to %s"), $config['system']['smartmonemail']); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input type="hidden" name="action" value="config" />
- <input type="hidden" name="testemail" value="true" />
- <input type="submit" name="submit" value="<?=gettext("Send"); ?>" class="formbtn" />
- </td>
- </tr>
- </tbody>
- </table>
- </form>
-
- <?php
- break;
- }
-
- // Default page, prints the forms to view info, test, etc...
- default:
- {
- $devs = get_smart_drive_list();
- ?>
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="default page">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Information/Tests"), true, $_SERVER['PHP_SELF']);
- //$tab_array[1] = array("Config", false, $_SERVER['PHP_SELF'] . "?action=config");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- </table>
-<!--INFO-->
- <form action="<?= $_SERVER['PHP_SELF']?>" method="post" name="info">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="info">
- <tbody>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Info"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Info type"); ?></td>
- <td width="78%" class="vtable">
- <input type="radio" name="type" value="i" /><?=gettext("Info"); ?><br />
- <input type="radio" name="type" value="H" checked="checked" /><?=gettext("Health"); ?><br />
- <input type="radio" name="type" value="c" /><?=gettext("SMART Capabilities"); ?><br />
- <input type="radio" name="type" value="A" /><?=gettext("Attributes"); ?><br />
- <input type="radio" name="type" value="a" /><?=gettext("All"); ?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Device: /dev/"); ?></td>
- <td width="78%" class="vtable">
- <select name="device">
- <?php
- foreach ($devs as $dev) {
- echo "<option value=\"" . $dev . "\">" . $dev . "</option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input type="hidden" name="action" value="info" />
- <input type="submit" name="submit" value="<?=gettext("View"); ?>" class="formbtn" />
- </td>
- </tr>
- </tbody>
- </table>
- </form>
-<!--TESTS-->
- <form action="<?= $_SERVER['PHP_SELF']?>" method="post" name="tests">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="tests">
- <tbody>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Perform Self-tests"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Test type"); ?></td>
- <td width="78%" class="vtable">
- <input type="radio" name="testType" value="offline" /><?=gettext("Offline"); ?><br />
- <input type="radio" name="testType" value="short" checked="checked" /><?=gettext("Short"); ?><br />
- <input type="radio" name="testType" value="long" /><?=gettext("Long"); ?><br />
- <input type="radio" name="testType" value="conveyance" /><?=gettext("Conveyance (ATA Disks Only)"); ?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Device: /dev/"); ?></td>
- <td width="78%" class="vtable">
- <select name="device">
- <?php
- foreach ($devs as $dev) {
- echo "<option value=\"" . $dev . "\">" . $dev . "</option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input type="hidden" name="action" value="test" />
- <input type="submit" name="submit" value="<?=gettext("Test"); ?>" class="formbtn" />
- </td>
- </tr>
- </tbody>
- </table>
- </form>
-<!--LOGS-->
- <form action="<?= $_SERVER['PHP_SELF']?>" method="post" name="logs">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="logs">
- <tbody>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("View Logs"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Log type"); ?></td>
- <td width="78%" class="vtable">
- <input type="radio" name="type" value="error" checked="checked" /><?=gettext("Error"); ?><br />
- <input type="radio" name="type" value="selftest" /><?=gettext("Self-test"); ?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Device: /dev/"); ?></td>
- <td width="78%" class="vtable">
- <select name="device">
- <?php
- foreach ($devs as $dev) {
- echo "<option value=\"" . $dev . "\">" . $dev . "</option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input type="hidden" name="action" value="logs" />
- <input type="submit" name="submit" value="<?=gettext("View"); ?>" class="formbtn" />
- </td>
- </tr>
- </tbody>
- </table>
- </form>
-<!--ABORT-->
- <form action="<?= $_SERVER['PHP_SELF']?>" method="post" name="abort">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="abort">
- <tbody>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Abort tests"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Device: /dev/"); ?></td>
- <td width="78%" class="vtable">
- <select name="device">
- <?php
- foreach ($devs as $dev) {
- echo "<option value=\"" . $dev . "\">" . $dev . "</option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input type="hidden" name="action" value="abort" />
- <input type="submit" name="submit" value="<?=gettext("Abort"); ?>" class="formbtn" onclick="return confirm('<?=gettext("Do you really want to abort the test?"); ?>')" />
- </td>
- </tr>
- </tbody>
- </table>
- </form>
-
- <?php
- break;
- }
-}
-
-// print back button on pages
-if (isset($_POST['submit']) && $_POST['submit'] != "Save") {
-?>
- <input type="button" class="formbtn" value="<?=gettext("Back");?>" onclick="window.location.href='<?=$_SERVER['PHP_SELF'];?>'" />
-<?php
-}
-?>
-<br />
-<?php
-if ($ulmsg) {
- echo "<p><strong>" . $ulmsg . "</strong></p>\n";
-}
-?>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_sockets.php b/usr/local/www/diag_sockets.php
deleted file mode 100644
index cdcfeb7..0000000
--- a/usr/local/www/diag_sockets.php
+++ /dev/null
@@ -1,181 +0,0 @@
-<?php
-
-/* $Id$ */
-/*
- diag_sockets.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2012
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/sockstat
-*/
-##|+PRIV
-##|*IDENT=page-diagnostics-sockets
-##|*NAME=Diagnostics: Sockets page
-##|*DESCR=Allow access to the 'Diagnostics: Sockets' page.
-##|*MATCH=diag_sockets.php*
-##|-PRIV
-
-include('guiconfig.inc');
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Sockets"));
-
-include('head.inc');
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc");
-
-$showAll = isset($_GET['showAll']);
-$showAllText = $showAll ? "Show only listening sockets" : "Show all socket connections";
-$showAllOption = $showAll ? "" : "?showAll";
-
-?>
-<div id="mainarea">
-<table class="tabcont" width="100%" summary="diag sockets">
- <tr>
- <td>Information about listening sockets for both <a href="#IPv4">IPv4</a> and <a href="#IPv6">IPv6</a>.</td>
- </tr>
- <tr>
- <td>For explanation about the meaning of the information listed for each socket click <a href="#about">here</a>.</td>
- </tr>
- <tr>
- <td><input type="button" value="<?=$showAllText?>" onclick="window.location.href='diag_sockets.php<?=$showAllOption?>'"/>To show information about both listening and connected sockets click this.</td>
- </tr>
-</table>
-
-<?php
- if (isset($_GET['showAll'])) {
- $internet4 = shell_exec('sockstat -4');
- $internet6 = shell_exec('sockstat -6');
- } else {
- $internet4 = shell_exec('sockstat -4l');
- $internet6 = shell_exec('sockstat -6l');
- }
- foreach (array(&$internet4, &$internet6) as $tabindex => $table) {
- $elements = ($tabindex == 0 ? 7 : 7);
- $name = ($tabindex == 0 ? 'IPv4' : 'IPv6');
-?>
-<a name="<?=$name;?>"></a>
-<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0" summary="tab">
- <tr>
- <td class="listtopic" colspan="<?=$elements?>"><strong><?=$name;?></strong></td>
- </tr>
- <tr>
- <td>
- <table class="tabcont sortable" id="sortabletable" width="100%" cellspacing="0" cellpadding="6" border="0" summary="results">
- <?php
- foreach (explode("\n", $table) as $i => $line) {
- if ($i == 0) {
- $class = 'listhdrr';
- } else {
- $class = 'listlr';
- }
-
- if (trim($line) == "") {
- continue;
- }
- print("<tr id=\"$name$i\">\n");
- $j = 0;
- foreach (explode(' ', $line) as $entry) {
- if ($entry == '' || $entry == "ADDRESS") {
- continue;
- }
- if ($i == 0) {
- print("<th class=\"$class\">$entry</th>\n");
- } else {
- print("<td class=\"$class\">$entry</td>\n");
- }
- if ($i > 0) {
- $class = 'listr';
- }
- $j++;
- }
- print("</tr>\n");
- }
- ?>
- </table>
- </td>
- </tr>
-</table>
-<?php
- }
-?>
-
-<br />
-<a name="about"></a>
-<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="info">
- <tr>
- <td colspan="2" class="listtopic" >Socket information explanation</td>
- </tr>
- <tr>
- <td colspan="2" class="listhdrr">
-This page show the output for the commands: "sockstat -4lL" and "sockstat -6lL".<br />
-Or in case of showing all sockets the output for: "sockstat -4" and "sockstat -6".<br />
-<br />
-The information listed for each socket is:
- </td>
- </tr>
- <tr>
- <td class="listlr">USER </td>
- <td class="listr">The user who owns the socket.</td>
- </tr>
- <tr>
- <td class="listlr">COMMAND</td>
- <td class="listr">The command which holds the socket.</td>
- </tr>
- <tr>
- <td class="listlr">PID</td>
- <td class="listr">The process ID of the command which holds the socket.</td>
- </tr>
- <tr>
- <td class="listlr">FD</td>
- <td class="listr">The file descriptor number of the socket.</td>
- </tr>
- <tr>
- <td class="listlr">PROTO</td>
- <td class="listr">The transport protocol associated with the socket for Internet sockets, or the type of socket (stream or data-gram) for UNIX sockets.</td>
- </tr>
- <tr>
- <td class="listlr">ADDRESS</td>
- <td class="listr">(UNIX sockets only) For bound sockets, this is the file-name of the socket. For other sockets, it is the name, PID and file descriptor number of the peer, or ``(none)'' if the socket is neither bound nor connected.</td>
- </tr>
- <tr>
- <td class="listlr">LOCAL ADDRESS</td>
- <td class="listr">(Internet sockets only) The address the local end of the socket is bound to (see getsockname(2)).</td>
- </tr>
- <tr>
- <td class="listlr">FOREIGN ADDRESS</td>
- <td class="listr">(Internet sockets only) The address the foreign end of the socket is bound to (see getpeername(2)).</td>
- </tr>
-</table>
-</div>
-<?php
-include('fend.inc');
-?>
-</body>
-</html>
diff --git a/usr/local/www/diag_states_summary.php b/usr/local/www/diag_states_summary.php
deleted file mode 100644
index 7aa91d6..0000000
--- a/usr/local/www/diag_states_summary.php
+++ /dev/null
@@ -1,206 +0,0 @@
-<?php
-/*
- diag_states_summary.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2010-2014 Jim Pingle
-
- Portions borrowed from diag_dump_states.php:
- Copyright (C) 2005-2009 Scott Ullrich
- Copyright (C) 2005 Colin Smith
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /sbin/pfctl
- pfSense_MODULE: filter
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-statessummary
-##|*NAME=Diagnostics: States Summary page
-##|*DESCR=Allow access to the 'Diagnostics: States Summary' page.
-##|*MATCH=diag_states_summary.php*
-##|-PRIV
-
-exec("/sbin/pfctl -s state", $states);
-
-$srcipinfo = array();
-$dstipinfo = array();
-$allipinfo = array();
-$pairipinfo = array();
-
-function addipinfo(&$iparr, $ip, $proto, $srcport, $dstport) {
- $iparr[$ip]['seen']++;
- $iparr[$ip]['protos'][$proto]['seen']++;
- if (!empty($srcport)) {
- $iparr[$ip]['protos'][$proto]['srcports'][$srcport]++;
- }
- if (!empty($dstport)) {
- $iparr[$ip]['protos'][$proto]['dstports'][$dstport]++;
- }
-}
-
-$row = 0;
-if (count($states) > 0) {
- foreach ($states as $line) {
- $line_split = preg_split("/\s+/", $line);
- $iface = array_shift($line_split);
- $proto = array_shift($line_split);
- $state = array_pop($line_split);
- $info = implode(" ", $line_split);
-
- /* Handle NAT cases
- Replaces an external IP + NAT by the internal IP */
- if (strpos($info, ') ->') !== FALSE) {
- /* Outbound NAT */
- $info = preg_replace('/(\S+) \((\S+)\)/U', "$2", $info);
- } elseif (strpos($info, ') <-') !== FALSE) {
- /* Inbound NAT/Port Forward */
- $info = preg_replace('/(\S+) \((\S+)\)/U', "$1", $info);
- }
-
- /* break up info and extract $srcip and $dstip */
- $ends = preg_split("/\<?-\>?/", $info);
-
- if (strpos($info, '->') === FALSE) {
- $srcinfo = $ends[count($ends) - 1];
- $dstinfo = $ends[0];
- } else {
- $srcinfo = $ends[0];
- $dstinfo = $ends[count($ends) - 1];
- }
-
- /* Handle IPv6 */
- $parts = explode(":", $srcinfo);
- $partcount = count($parts);
- if ($partcount <= 2) {
- $srcip = trim($parts[0]);
- $srcport = trim($parts[1]);
- } else {
- preg_match("/([0-9a-f:]+)(\[([0-9]+)\])?/i", $srcinfo, $matches);
- $srcip = $matches[1];
- $srcport = trim($matches[3]);
- }
-
- $parts = explode(":", $dstinfo);
- $partcount = count($parts);
- if ($partcount <= 2) {
- $dstip = trim($parts[0]);
- $dstport = trim($parts[1]);
- } else {
- preg_match("/([0-9a-f:]+)(\[([0-9]+)\])?/i", $dstinfo, $matches);
- $dstip = $matches[1];
- $dstport = trim($matches[3]);
- }
-
- addipinfo($srcipinfo, $srcip, $proto, $srcport, $dstport);
- addipinfo($dstipinfo, $dstip, $proto, $srcport, $dstport);
- addipinfo($pairipinfo, "{$srcip} -> {$dstip}", $proto, $srcport, $dstport);
-
- addipinfo($allipinfo, $srcip, $proto, $srcport, $dstport);
- addipinfo($allipinfo, $dstip, $proto, $srcport, $dstport);
-
- }
-}
-
-function sort_by_ip($a, $b) {
- return ip2ulong($a) < ip2ulong($b) ? -1 : 1;
-}
-
-function build_port_info($portarr, $proto) {
- if (!$portarr) {
- return '';
- }
- $ports = array();
- asort($portarr);
- foreach (array_reverse($portarr, TRUE) as $port => $count) {
- $str = "";
- $service = getservbyport($port, strtolower($proto));
- $port = "{$proto}/{$port}";
- if ($service) {
- $port = "{$port} ({$service})";
- }
- $ports[] = "{$port}: {$count}";
- }
- return implode($ports, ', ');
-}
-
-function print_summary_table($label, $iparr, $sort = TRUE) { ?>
-
-<h3><?php echo $label; ?></h3>
-<table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="states summary">
- <tr>
- <td class="listhdrr"><?=gettext("IP");?></td>
- <td class="listhdrr"># <?=gettext("States");?></td>
- <td class="listhdrr"><?=gettext("Proto");?></td>
- <td class="listhdrr"># <?=gettext("States");?></td>
- <td class="listhdrr"><?=gettext("Src Ports");?></td>
- <td class="listhdrr"><?=gettext("Dst Ports");?></td>
- </tr>
-<?php
- if ($sort) {
- uksort($iparr, "sort_by_ip");
- }
- foreach ($iparr as $ip => $ipinfo) { ?>
- <tr>
- <td class="vncell"><?php echo $ip; ?></td>
- <td class="vncell"><?php echo $ipinfo['seen']; ?></td>
- <td class="vncell">&nbsp;</td>
- <td class="vncell">&nbsp;</td>
- <td class="vncell">&nbsp;</td>
- <td class="vncell">&nbsp;</td>
- </tr>
- <?php foreach ($ipinfo['protos'] as $proto => $protoinfo) { ?>
- <tr>
- <td class="list">&nbsp;</td>
- <td class="list">&nbsp;</td>
- <td class="listlr"><?php echo $proto; ?></td>
- <td class="listr" align="center"><?php echo $protoinfo['seen']; ?></td>
- <td class="listr" align="center"><span title="<?php echo build_port_info($protoinfo['srcports'], $proto); ?>"><?php echo count($protoinfo['srcports']); ?></span></td>
- <td class="listr" align="center"><span title="<?php echo build_port_info($protoinfo['dstports'], $proto); ?>"><?php echo count($protoinfo['dstports']); ?></span></td>
- </tr>
- <?php } ?>
-<?php } ?>
-
-</table>
-
-<?php
-}
-
-$pgtitle = array(gettext("Diagnostics"), gettext("State Table Summary"));
-require_once("guiconfig.inc");
-include("head.inc");
-echo "<body>";
-include("fbegin.inc");
-
-
-print_summary_table(gettext("By Source IP"), $srcipinfo);
-print_summary_table(gettext("By Destination IP"), $dstipinfo);
-print_summary_table(gettext("Total per IP"), $allipinfo);
-print_summary_table(gettext("By IP Pair"), $pairipinfo, FALSE);
-?>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_system_activity.php b/usr/local/www/diag_system_activity.php
deleted file mode 100644
index 1f6380f..0000000
--- a/usr/local/www/diag_system_activity.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_system_activity.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Copyright (C) 2008-2009 Scott Ullrich
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/top
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-system-activity
-##|*NAME=Diagnostics: System Activity
-##|*DESCR=Allows access to the 'Diagnostics: System Activity' page
-##|*MATCH=diag_system_activity.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$pgtitle = gettext("Diagnostics: System Activity");
-
-if ($_REQUEST['getactivity']) {
- $text = `/usr/bin/top -aHS | /usr/bin/cut -c1-105`;
- echo $text;
- exit;
-}
-
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
- function getcpuactivity() {
- scroll(0, 0);
- var url = "/diag_system_activity.php";
- var pars = 'getactivity=yes';
- jQuery.ajax(
- url,
- {
- type: 'post',
- data: pars,
- complete: activitycallback
- });
- }
- function activitycallback(transport) {
- jQuery('#cpuactivitydiv').html('<font face="Courier" size="2"><pre style="text-align:left;">' + transport.responseText + '<\/pre><\/font>');
- setTimeout('getcpuactivity()', 2500);
- }
- setTimeout('getcpuactivity()', 1000);
-//]]>
-</script>
-<div id="maincontent">
-<?php
- if ($savemsg) {
- echo "<div id=\"savemsg\">";
- print_info_box($savemsg);
- echo "</div>";
- }
- if ($input_errors) {
- print_input_errors($input_errors);
- }
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag system activity">
- <tr>
- <td>
- <table id="backuptable" class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
- <tr>
- <td align="center">
- <table summary="results">
- <tr>
- <td>
- <div id="cpuactivitydiv">
- <?=gettext("Gathering CPU activity, please wait...");?>
- </div>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</div>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_system_pftop.php b/usr/local/www/diag_system_pftop.php
deleted file mode 100644
index 7d51c84..0000000
--- a/usr/local/www/diag_system_pftop.php
+++ /dev/null
@@ -1,216 +0,0 @@
-<?php
-/* $Id$ */
-/*
- diag_system_pftop.php
- Copyright (C) 2008-2009 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_MODULE: filter
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-system-pftop
-##|*NAME=Diagnostics: pfTop
-##|*DESCR=Allows access to the 'Diagnostics: pfTop' page
-##|*MATCH=diag_system_pftop.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$pgtitle = gettext("Diagnostics: pfTop");
-
-$sorttypes = array('age', 'bytes', 'dest', 'dport', 'exp', 'none', 'peak', 'pkt', 'rate', 'size', 'sport', 'src');
-$viewtypes = array('default', 'label', 'long', 'queue', 'rules', 'size', 'speed', 'state', 'time');
-$viewall = array('queue', 'label', 'rules');
-$numstates = array('50', '100', '200', '500', '1000', 'all');
-
-if ($_REQUEST['getactivity']) {
- if ($_REQUEST['sorttype'] && in_array($_REQUEST['sorttype'], $sorttypes) &&
- $_REQUEST['viewtype'] && in_array($_REQUEST['viewtype'], $viewtypes) &&
- $_REQUEST['states'] && in_array($_REQUEST['states'], $numstates)) {
- $viewtype = escapeshellarg($_REQUEST['viewtype']);
- if (in_array($_REQUEST['viewtype'], $viewall)) {
- $sorttype = "";
- $numstate = "-a";
- } else {
- $sorttype = "-o " . escapeshellarg($_REQUEST['sorttype']);
- $numstate = ($_REQUEST['states'] == "all" ? "-a" : escapeshellarg($_REQUEST['states']));
- }
- } else {
- $sorttype = "bytes";
- $viewtype = "default";
- $numstate = "100";
- }
-
- $text = `pftop -b {$sorttype} -v {$viewtype} {$numstate}`;
- echo $text;
- exit;
-}
-
-include("head.inc");
-
-if ($_REQUEST['sorttype'] && in_array($_REQUEST['sorttype'], $sorttypes) &&
- $_REQUEST['viewtype'] && in_array($_REQUEST['viewtype'], $viewtypes) &&
- $_REQUEST['states'] && in_array($_REQUEST['states'], $numstates)) {
- $viewtype = escapeshellarg($_REQUEST['viewtype']);
- if (in_array($_REQUEST['viewtype'], $viewall)) {
- $sorttype = "";
- $numstate = "-a";
- } else {
- $sorttype = "-o " . escapeshellarg($_REQUEST['sorttype']);
- $numstate = ($_REQUEST['states'] == "all" ? "-a" : escapeshellarg($_REQUEST['states']));
- }
-} else {
- $sorttype = "bytes";
- $viewtype = "default";
- $numstate = "100";
-}
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form method="post" action="diag_system_pftop.php">
-<script type="text/javascript">
-//<![CDATA[
- function getpftopactivity() {
- var url = "/diag_system_pftop.php";
- var pars = 'getactivity=yes&sorttype=' + jQuery('#sorttype').val() + '&viewtype=' + jQuery('#viewtype').val() + '&states=' + jQuery('#states').val();
- jQuery.ajax(
- url,
- {
- type: 'post',
- data: pars,
- complete: activitycallback
- });
- }
- function activitycallback(transport) {
- jQuery('#pftopactivitydiv').html('<font face="Courier" size="2"><pre style="text-align:left;">' + transport.responseText + '<\/pre><\/font>');
- setTimeout('getpftopactivity()', 2500);
- }
- setTimeout('getpftopactivity()', 1000);
-//]]>
-</script>
-<div id="maincontent">
-<?php
- if ($savemsg) {
- echo "<div id=\"savemsg\">";
- print_info_box($savemsg);
- echo "</div>";
- }
- if ($input_errors) {
- print_input_errors($input_errors);
- }
-?>
- <div id="mainarea" style="padding-bottom: 0px;">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="diag system pftop">
- <tr>
- <td class="list">
- <div id='viewtypediv'><?=gettext("View type:"); ?>
- <select name='viewtype' id='viewtype'>
- <option value='default' <?php echo ($viewtype == "default") ? "selected=\"selected\"" : ""; ?>><?=gettext("Default");?></option>
- <option value='label' <?php echo ($viewtype == "label") ? "selected=\"selected\"" : ""; ?>><?=gettext("Label");?></option>
- <option value='long' <?php echo ($viewtype == "long") ? "selected=\"selected\"" : ""; ?>><?=gettext("Long");?></option>
- <option value='queue' <?php echo ($viewtype == "queue") ? "selected=\"selected\"" : ""; ?>><?=gettext("Queue");?></option>
- <option value='rules' <?php echo ($viewtype == "rules") ? "selected=\"selected\"" : ""; ?>><?=gettext("Rules");?></option>
- <option value='size' <?php echo ($viewtype == "size") ? "selected=\"selected\"" : ""; ?>><?=gettext("Size");?></option>
- <option value='speed' <?php echo ($viewtype == "speed") ? "selected=\"selected\"" : ""; ?>><?=gettext("Speed");?></option>
- <option value='state' <?php echo ($viewtype == "state") ? "selected=\"selected\"" : ""; ?>><?=gettext("State");?></option>
- <option value='time' <?php echo ($viewtype == "time") ? "selected=\"selected\"" : ""; ?>><?=gettext("Time");?></option>
- </select>
- </div>
- </td>
- <td class="list">
- <div id='sorttypediv'><?=gettext("Sort type:"); ?>
- <select name='sorttype' id='sorttype'>
- <option value='age' <?php echo ($sorttype == "age") ? "selected=\"selected\"" : ""; ?>><?=gettext("Age");?></option>
- <option value='bytes' <?php echo ($sorttype == "bytes") ? "selected=\"selected\"" : ""; ?>><?=gettext("Bytes");?></option>
- <option value='dest' <?php echo ($sorttype == "dest") ? "selected=\"selected\"" : ""; ?>><?=gettext("Destination Address");?></option>
- <option value='dport' <?php echo ($sorttype == "dport") ? "selected=\"selected\"" : ""; ?>><?=gettext("Destination Port");?></option>
- <option value='exp' <?php echo ($sorttype == "exp") ? "selected=\"selected\"" : ""; ?>><?=gettext("Expiry");?></option>
- <option value='none' <?php echo ($sorttype == "none") ? "selected=\"selected\"" : ""; ?>><?=gettext("None");?></option>
- <option value='peak' <?php echo ($sorttype == "peak") ? "selected=\"selected\"" : ""; ?>><?=gettext("Peak");?></option>
- <option value='pkt' <?php echo ($sorttype == "pkt") ? "selected=\"selected\"" : ""; ?>><?=gettext("Packet");?></option>
- <option value='rate' <?php echo ($sorttype == "rate") ? "selected=\"selected\"" : ""; ?>><?=gettext("Rate");?></option>
- <option value='size' <?php echo ($sorttype == "size") ? "selected=\"selected\"" : ""; ?>><?=gettext("Size");?></option>
- <option value='sport' <?php echo ($sorttype == "sport") ? "selected=\"selected\"" : ""; ?>><?=gettext("Source Port");?></option>
- <option value='src' <?php echo ($sorttype == "src") ? "selected=\"selected\"" : ""; ?>><?=gettext("Source Address");?></option>
- </select>
- </div>
- </td>
- <td class="list">
- <div id='statesdiv'><?=gettext("Number of States:"); ?>
- <select name='states' id='states'>
- <option value='50' <?php echo ($numstate == "50") ? "selected=\"selected\"" : ""; ?>>50</option>
- <option value='100' <?php echo ($numstate == "100") ? "selected=\"selected\"" : ""; ?>>100</option>
- <option value='200' <?php echo ($numstate == "200") ? "selected=\"selected\"" : ""; ?>>200</option>
- <option value='500' <?php echo ($numstate == "500") ? "selected=\"selected\"" : ""; ?>>500</option>
- <option value='1000' <?php echo ($numstate == "1000") ? "selected=\"selected\"" : ""; ?>>1000</option>
- <option value='all' <?php echo ($numstate == "all") ? "selected=\"selected\"" : ""; ?>>all</option>
- </select>
- </div>
- </td>
- </tr>
- <tr>
- <td colspan="3" align="center">
- <table id="backuptable" class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
- <tr>
- <td align="center">
- <table summary="results">
- <tr>
- <td>
- <div id="pftopactivitydiv"><?=gettext("Gathering pfTOP activity, please wait...");?></div>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
-</div>
-</form>
-<?php include("fend.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-jQuery("#viewtype").change(function() {
- var selected = jQuery("#viewtype option:selected");
- switch (selected.val()) {
- case "queue":
- case "label":
- case "rules":
- jQuery("#sorttype, #sorttypediv, #statesdiv, #states").hide();
- break;
- default:
- jQuery("#sorttype, #sorttypediv, #statesdiv, #states").show();
- }
-});
-//]]>
-</script>
-</body>
-</html>
diff --git a/usr/local/www/diag_tables.php b/usr/local/www/diag_tables.php
deleted file mode 100644
index fe6778f..0000000
--- a/usr/local/www/diag_tables.php
+++ /dev/null
@@ -1,191 +0,0 @@
-<?php
-/*
- diag_tables.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2010 Jim Pingle
-
- Portions borrowed from diag_dump_states.php:
- Copyright (C) 2010 Scott Ullrich
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /sbin/pfctl
- pfSense_MODULE: filter
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-tables
-##|*NAME=Diagnostics: PF Table IP addresses
-##|*DESCR=Allow access to the 'Diagnostics: Tables' page.
-##|*MATCH=diag_tables.php*
-##|-PRIV
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Tables"));
-$shortcut_section = "aliases";
-
-require_once("guiconfig.inc");
-
-// Set default table
-$tablename = "sshlockout";
-
-if ($_REQUEST['type']) {
- $tablename = $_REQUEST['type'];
-}
-
-if ($_REQUEST['delete']) {
- if (is_ipaddr($_REQUEST['delete']) || is_subnet($_REQUEST['delete'])) {
- exec("/sbin/pfctl -t " . escapeshellarg($_REQUEST['type']) . " -T delete " . escapeshellarg($_REQUEST['delete']), $delete);
- echo htmlentities($_REQUEST['delete']);
- }
- exit;
-}
-
-if ($_REQUEST['deleteall']) {
- exec("/sbin/pfctl -t " . escapeshellarg($tablename) . " -T show", $entries);
- if (is_array($entries)) {
- foreach ($entries as $entryA) {
- $entry = trim($entryA);
- exec("/sbin/pfctl -t " . escapeshellarg($tablename) . " -T delete " . escapeshellarg($entry), $delete);
- }
- }
-}
-
-if ((($tablename == "bogons") || ($tablename == "bogonsv6")) && ($_POST['Download'])) {
- mwexec_bg("/etc/rc.update_bogons.sh now");
- $maxtimetowait = 0;
- $loading = true;
- while ($loading == true) {
- $isrunning = `/bin/ps awwwux | /usr/bin/grep -v grep | /usr/bin/grep bogons`;
- if ($isrunning == "") {
- $loading = false;
- }
- $maxtimetowait++;
- if ($maxtimetowait > 89) {
- $loading = false;
- }
- sleep(1);
- }
- if ($maxtimetowait < 90) {
- $savemsg = gettext("The bogons database has been updated.");
- }
-}
-
-exec("/sbin/pfctl -t " . escapeshellarg($tablename) . " -T show", $entries);
-exec("/sbin/pfctl -sT", $tables);
-
-include("head.inc");
-?>
-<body>
-<?php include("fbegin.inc"); ?>
-
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<form method="post" action="diag_tables.php">
-
-<script type="text/javascript">
-//<![CDATA[
- function method_change(entrytype) {
- window.location='diag_tables.php?type=' + entrytype;
- }
- function del_entry(entry) {
- jQuery.ajax("diag_tables.php?type=<?php echo htmlspecialchars($tablename);?>&delete=" + entry, {
- complete: function(response) {
- if (200 == response.status) {
- // Escape all dots to not confuse jQuery selectors
- name = response.responseText.replace(/\./g,'\\.');
- name = name.replace(/\//g,'\\-');
- name = "entry_" + name;
- jQuery('#' + name).fadeOut(1000);
- }
- }
- });
- }
-//]]>
-</script>
-
-<?=gettext("Table:");?>
-<select id="type" onchange="method_change(jQuery('#type').val());" name="type">
- <?php
- foreach ($tables as $table) {
- echo "<option value=\"{$table}\"";
- if ($tablename == $table) {
- echo " selected=\"selected\"";
- }
- echo ">{$table}</option>\n";
- }
- ?>
-</select>
-
-<br/><br/>
-
-<table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="tables">
- <tr>
- <td class="listhdrr"><?=gettext("IP Address");?></td>
- </tr>
-<?php
- $count = 0;
- foreach ($entries as $entryA):
- $entry = trim($entryA);
-?>
- <tr id="entry_<?=str_replace("/", "-", $entry);?>">
- <td>
- <?php echo $entry; ?>
- </td>
- <td>
- <?php if (($tablename != "bogons") && ($tablename != "bogonsv6")) { ?>
- <a onclick="del_entry('<?=htmlspecialchars($entry)?>');">
- <img src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" alt="delete" />
- </a>
- <?php } ?>
- </td>
- </tr>
-<?php
- $count++;
- endforeach;
- if ($count == 0) {
- if (($tablename == "bogons") || ($tablename == "bogonsv6")) {
- echo "<tr><td>" . gettext("No entries exist in this table.") . "&nbsp;&nbsp;" . "<input name=\"Download\" type=\"submit\" class=\"formbtn\" value=\"" . gettext("Download") . "\" /> " . gettext(" the latest bogon data.");
- } else {
- echo "<tr><td>" . gettext("No entries exist in this table.");
- }
- }
-?>
-
-<?php
- if ($count > 0) {
- if (($tablename == "bogons") || ($tablename == "bogonsv6")) {
- $last_updated = exec('/usr/bin/grep -i -m 1 -E "^# last updated" /etc/' . escapeshellarg($tablename));
- echo "<tr><td>&nbsp;<b>$count</b> " . gettext("entries in this table.") . "&nbsp;&nbsp;" . "<input name=\"Download\" type=\"submit\" class=\"formbtn\" value=\"" . gettext("Download") . "\" /> " . gettext(" the latest bogon data.") . "<br />" . "$last_updated";
- } else {
- echo "<tr><td>" . gettext("Delete") . " <a href=\"diag_tables.php?deleteall=true&amp;type=" . htmlspecialchars($tablename) . "\">" . gettext("all") . "</a> " . "<b>$count</b> " . gettext("entries in this table.");
- }
- }
-?>
-</td></tr>
-</table>
-</form>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_testport.php b/usr/local/www/diag_testport.php
deleted file mode 100644
index fbc448a..0000000
--- a/usr/local/www/diag_testport.php
+++ /dev/null
@@ -1,290 +0,0 @@
-<?php
-/*
- diag_testport.php
- Copyright (C) 2013 Jim P (jimp@pfsense.org)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Portions based on diag_ping.php
- part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2005 Bob Zoller (bob@kludgebox.com) and Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/nc
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-testport
-##|*NAME=Diagnostics: Test Port
-##|*DESCR=Allow access to the 'Diagnostics: Test Port' page.
-##|*MATCH=diag_testport.php*
-##|-PRIV
-
-$allowautocomplete = true;
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Test Port"));
-require("guiconfig.inc");
-
-define('NC_TIMEOUT', 10);
-$do_testport = false;
-
-if ($_POST || $_REQUEST['host']) {
- unset($input_errors);
-
- /* input validation */
- $reqdfields = explode(" ", "host port");
- $reqdfieldsn = array(gettext("Host"), gettext("Port"));
- do_input_validation($_REQUEST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (!is_ipaddr($_REQUEST['host']) && !is_hostname($_REQUEST['host'])) {
- $input_errors[] = gettext("Please enter a valid IP or hostname.");
- }
-
- if (!is_port($_REQUEST['port'])) {
- $input_errors[] = gettext("Please enter a valid port number.");
- }
-
- if (($_REQUEST['srcport'] != "") && (!is_numeric($_REQUEST['srcport']) || !is_port($_REQUEST['srcport']))) {
- $input_errors[] = gettext("Please enter a valid source port number, or leave the field blank.");
- }
-
- if (is_ipaddrv4($_REQUEST['host']) && ($_REQUEST['ipprotocol'] == "ipv6")) {
- $input_errors[] = gettext("You cannot connect to an IPv4 address using IPv6.");
- }
- if (is_ipaddrv6($_REQUEST['host']) && ($_REQUEST['ipprotocol'] == "ipv4")) {
- $input_errors[] = gettext("You cannot connect to an IPv6 address using IPv4.");
- }
-
- if (!$input_errors) {
- $do_testport = true;
- $timeout = NC_TIMEOUT;
- }
-
- /* Save these request vars even if there were input errors. Then the fields are refilled for the user to correct. */
- $host = $_REQUEST['host'];
- $sourceip = $_REQUEST['sourceip'];
- $port = $_REQUEST['port'];
- $srcport = $_REQUEST['srcport'];
- $showtext = isset($_REQUEST['showtext']);
- $ipprotocol = $_REQUEST['ipprotocol'];
-}
-
-include("head.inc"); ?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag test port">
-<tr><td>
-<?php echo gettext("This page allows you to perform a simple TCP connection test to determine if a host is up and accepting connections on a given port. This test does not function for UDP since there is no way to reliably determine if a UDP port accepts connections in this manner."); ?>
-<br /><br />
-<?php echo gettext("No data is transmitted to the remote host during this test, it will only attempt to open a connection and optionally display the data sent back from the server."); ?>
-<br /><br /><br />
-<?php if ($input_errors) print_input_errors($input_errors); ?>
- <form action="diag_testport.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Test Port"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Host"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?>
- <input name="host" type="text" class="formfld unknown" id="host" size="20" value="<?=htmlspecialchars($host);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?= gettext("Port"); ?></td>
- <td width="78%" class="vtable">
- <input name="port" type="text" class="formfld unknown" id="port" size="10" value="<?=htmlspecialchars($port);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?= gettext("Source Port"); ?></td>
- <td width="78%" class="vtable">
- <input name="srcport" type="text" class="formfld unknown" id="srcport" size="10" value="<?=htmlspecialchars($srcport);?>" />
- <br /><br /><?php echo gettext("This should typically be left blank."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?= gettext("Show Remote Text"); ?></td>
- <td width="78%" class="vtable">
- <input name="showtext" type="checkbox" id="showtext" <?php if ($showtext) echo "checked=\"checked\"" ?> />
- <br /><br /><?php echo gettext("Shows the text given by the server when connecting to the port. Will take 10+ seconds to display if checked."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Source Address"); ?></td>
- <td width="78%" class="vtable">
- <select name="sourceip" class="formselect">
- <option value="">Any</option>
- <?php $sourceips = get_possible_traffic_source_addresses(true);
- foreach ($sourceips as $sipvalue => $sipname):
- $selected = "";
- if (!link_interface_to_bridge($sipvalue) && ($sipvalue == $sourceip)) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$sipvalue;?>" <?=$selected;?>>
- <?=htmlspecialchars($sipname);?>
- </option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IP Protocol"); ?></td>
- <td width="78%" class="vtable">
- <select name="ipprotocol" class="formfld">
- <option value="any" <?php if ("any" == $ipprotocol) echo "selected=\"selected\""; ?>>
- Any
- </option>
- <option value="ipv4" <?php if ($ipprotocol == "ipv4") echo "selected=\"selected\""; ?>>
- <?=gettext("IPv4");?>
- </option>
- <option value="ipv6" <?php if ($ipprotocol == "ipv6") echo "selected=\"selected\""; ?>>
- <?=gettext("IPv6");?>
- </option>
- </select>
- <br /><br />
- <?php echo gettext("If you force IPv4 or IPv6 and use a hostname that does not contain a result using that protocol, it will result in an error. For example if you force IPv4 and use a hostname that only returns an AAAA IPv6 IP address, it will not work."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Test"); ?>" />
- </td>
- </tr>
- <tr>
- <td valign="top" colspan="2">
- <?php if ($do_testport) {
- echo "<font face=\"terminal\" size=\"2\">";
- echo "<strong>" . gettext("Port Test Results") . ":</strong><br />";
- ?>
- <script type="text/javascript">
- //<![CDATA[
- window.onload=function() {
- document.getElementById("testportCaptured").wrap='off';
- }
- //]]>
- </script>
- <?php
- echo "<textarea id=\"testportCaptured\" style=\"width:98%\" name=\"code\" rows=\"15\" cols=\"66\" readonly=\"readonly\">";
- $result = "";
- $nc_base_cmd = "/usr/bin/nc";
- $nc_args = "-w " . escapeshellarg($timeout);
- if (!$showtext) {
- $nc_args .= " -z ";
- }
- if (!empty($srcport)) {
- $nc_args .= " -p " . escapeshellarg($srcport) . " ";
- }
-
- /* Attempt to determine the interface address, if possible. Else try both. */
- if (is_ipaddrv4($host)) {
- $ifaddr = ($sourceip == "any") ? "" : get_interface_ip($sourceip);
- $nc_args .= " -4";
- } elseif (is_ipaddrv6($host)) {
- if ($sourceip == "any") {
- $ifaddr = "";
- } else if (is_linklocal($sourceip)) {
- $ifaddr = $sourceip;
- } else {
- $ifaddr = get_interface_ipv6($sourceip);
- }
- $nc_args .= " -6";
- } else {
- switch ($ipprotocol) {
- case "ipv4":
- $ifaddr = get_interface_ip($sourceip);
- $nc_ipproto = " -4";
- break;
- case "ipv6":
- $ifaddr = (is_linklocal($sourceip) ? $sourceip : get_interface_ipv6($sourceip));
- $nc_ipproto = " -6";
- break;
- case "any":
- $ifaddr = get_interface_ip($sourceip);
- $nc_ipproto = (!empty($ifaddr)) ? " -4" : "";
- if (empty($ifaddr)) {
- $ifaddr = (is_linklocal($sourceip) ? $sourceip : get_interface_ipv6($sourceip));
- $nc_ipproto = (!empty($ifaddr)) ? " -6" : "";
- }
- break;
- }
- /* Netcat doesn't like it if we try to connect using a certain type of IP without specifying the family. */
- if (!empty($ifaddr)) {
- $nc_args .= $nc_ipproto;
- } elseif ($sourceip == "any") {
- switch ($ipprotocol) {
- case "ipv4":
- $nc_ipproto = " -4";
- break;
- case "ipv6":
- $nc_ipproto = " -6";
- break;
- }
- $nc_args .= $nc_ipproto;
- }
- }
- /* Only add on the interface IP if we managed to find one. */
- if (!empty($ifaddr)) {
- $nc_args .= " -s " . escapeshellarg($ifaddr) . " ";
- $scope = get_ll_scope($ifaddr);
- if (!empty($scope) && !strstr($host, "%")) {
- $host .= "%{$scope}";
- }
- }
-
- $nc_cmd = "{$nc_base_cmd} {$nc_args} " . escapeshellarg($host) . " " . escapeshellarg($port) . " 2>&1";
- exec($nc_cmd, $result, $retval);
- //echo "NC CMD: {$nc_cmd}\n\n";
- if (empty($result)) {
- if ($showtext) {
- echo gettext("No output received, or connection failed. Try with \"Show Remote Text\" unchecked first.");
- } else {
- echo gettext("Connection failed (Refused/Timeout)");
- }
- } else {
- if (is_array($result)) {
- foreach ($result as $resline) {
- echo htmlspecialchars($resline) . "\n";
- }
- } else {
- echo htmlspecialchars($result);
- }
- }
- echo '</textarea>&nbsp;</font>' ;
- }
- ?>
- </td>
- </tr>
- </table>
-</form>
-</td></tr></table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/diag_traceroute.php b/usr/local/www/diag_traceroute.php
deleted file mode 100644
index d094d49..0000000
--- a/usr/local/www/diag_traceroute.php
+++ /dev/null
@@ -1,218 +0,0 @@
-<?php
-/*
- diag_traceroute.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2005 Paul Taylor (paultaylor@winndixie.com) and Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /usr/sbin/traceroute
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-traceroute
-##|*NAME=Diagnostics: Traceroute page
-##|*DESCR=Allow access to the 'Diagnostics: Traceroute' page.
-##|*MATCH=diag_traceroute.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$allowautocomplete = true;
-$pgtitle = array(gettext("Diagnostics"), gettext("Traceroute"));
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php
-
-define('MAX_TTL', 64);
-define('DEFAULT_TTL', 18);
-
-if ($_POST || $_REQUEST['host']) {
- unset($input_errors);
- unset($do_traceroute);
-
- /* input validation */
- $reqdfields = explode(" ", "host ttl");
- $reqdfieldsn = array(gettext("Host"), gettext("ttl"));
- do_input_validation($_REQUEST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (($_REQUEST['ttl'] < 1) || ($_REQUEST['ttl'] > MAX_TTL)) {
- $input_errors[] = sprintf(gettext("Maximum number of hops must be between 1 and %s"), MAX_TTL);
- }
- $host = trim($_REQUEST['host']);
- $ipproto = $_REQUEST['ipproto'];
- if (($ipproto == "ipv4") && is_ipaddrv6($host)) {
- $input_errors[] = gettext("When using IPv4, the target host must be an IPv4 address or hostname.");
- }
- if (($ipproto == "ipv6") && is_ipaddrv4($host)) {
- $input_errors[] = gettext("When using IPv6, the target host must be an IPv6 address or hostname.");
- }
-
- if (!$input_errors) {
- $sourceip = $_REQUEST['sourceip'];
- $do_traceroute = true;
- $ttl = $_REQUEST['ttl'];
- $resolve = $_REQUEST['resolve'];
- }
-} else {
- $resolve = true;
-}
-
-if (!isset($do_traceroute)) {
- $do_traceroute = false;
- $host = '';
- $ttl = DEFAULT_TTL;
-}
-
-?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="diag_traceroute.php" method="post" name="iform" id="iform">
-<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="diag traceroute">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Traceroute");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Host");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="host" type="text" class="formfld unknown" id="host" size="20" value="<?=htmlspecialchars($host);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("IP Protocol"); ?></td>
- <td width="78%" class="vtable">
- <select name="ipproto" class="formselect">
- <option value="ipv4" <?php if ($ipproto == "ipv4") echo "selected=\"selected\"" ?>>IPv4</option>
- <option value="ipv6" <?php if ($ipproto == "ipv6") echo "selected=\"selected\"" ?>>IPv6</option>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Source Address"); ?></td>
- <td width="78%" class="vtable">
- <select name="sourceip" class="formselect">
- <option value="">Any</option>
- <?php $sourceips = get_possible_traffic_source_addresses(true);
- foreach ($sourceips as $sipvalue => $sipname):
- $selected = "";
- if (!link_interface_to_bridge($sipvalue) && ($sipvalue == $sourceip)) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$sipvalue;?>" <?=$selected;?>>
- <?=htmlspecialchars($sipname);?>
- </option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Maximum number of hops");?></td>
- <td width="78%" class="vtable">
- <select name="ttl" class="formfld" id="ttl">
- <?php for ($i = 1; $i <= MAX_TTL; $i++): ?>
- <option value="<?=$i;?>" <?php if ($i == $ttl) echo "selected=\"selected\""; ?>><?=$i;?></option>
- <?php endfor; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Reverse Address Lookup");?></td>
- <td width="78%" class="vtable">
- <input name="resolve" type="checkbox"<?php echo (!isset($resolve) ? "" : " checked=\"checked\""); ?> />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Use ICMP");?></td>
- <td width="78%" class="vtable">
- <input name="useicmp" type="checkbox"<?php if ($_REQUEST['useicmp']) echo " checked=\"checked\""; ?> />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Traceroute");?>" />
- </td>
- </tr>
- <tr>
- <td valign="top" colspan="2">
- <span class="vexpl">
- <span class="red"><b><?=gettext("Note: ");?></b></span>
- <?=gettext("Traceroute may take a while to complete. You may hit the Stop button on your browser at any time to see the progress of failed traceroutes.");?>
- <br /><br />
- <?=gettext("Using a source interface/IP address that does not match selected type (IPv4, IPv6) will result in an error or empty output.");?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" colspan="2">
- <?php
- if ($do_traceroute) {
- echo "<font face=\"terminal\" size=\"2\">\n";
- echo "<strong>" . gettext("Traceroute output:") . "</strong><br />\n";
- ob_end_flush();
- ?>
- <script type="text/javascript">
- //<![CDATA[
- window.onload=function() {
- document.getElementById("tracerouteCaptured").wrap='off';
- }
- //]]>
- </script>
- <?php
- echo "<textarea id=\"tracerouteCaptured\" style=\"width:98%\" name=\"code\" rows=\"15\" cols=\"66\" readonly=\"readonly\">";
- $useicmp = isset($_REQUEST['useicmp']) ? "-I" : "";
- $n = isset($resolve) ? "" : "-n";
-
- $command = "/usr/sbin/traceroute";
- if ($ipproto == "ipv6") {
- $command .= "6";
- $ifaddr = is_ipaddr($sourceip) ? $sourceip : get_interface_ipv6($sourceip);
- } else {
- $ifaddr = is_ipaddr($sourceip) ? $sourceip : get_interface_ip($sourceip);
- }
-
- if ($ifaddr && (is_ipaddr($host) || is_hostname($host))) {
- $srcip = "-s " . escapeshellarg($ifaddr);
- }
-
- $cmd = "{$command} {$n} {$srcip} -w 2 {$useicmp} -m " . escapeshellarg($ttl) . " " . escapeshellarg($host);
-
- //echo "Traceroute command: {$cmd}\n";
- system($cmd);
- echo "</textarea>&nbsp;</font>";
- } ?>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/easyrule.php b/usr/local/www/easyrule.php
deleted file mode 100644
index 74b1051..0000000
--- a/usr/local/www/easyrule.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/*
- easyrule.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2009-2010 Jim Pingle (jpingle@gmail.com)
- Originally Sponsored By Anathematic @ pfSense Forums
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: filter
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-easyrule
-##|*NAME=Firewall: Easy Rule add/status page
-##|*DESCR=Allow access to the 'Firewall: Easy Rule' add/status page.
-##|*MATCH=easyrule.php*
-##|-PRIV
-
-$pgtitle = gettext("Firewall: EasyRule");
-require_once("guiconfig.inc");
-require_once("easyrule.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-$retval = 0;
-$message = "";
-$specialsrcdst = explode(" ", "any pptp pppoe l2tp openvpn");
-
-if ($_GET && isset($_GET['action'])) {
- switch ($_GET['action']) {
- case 'block':
- /* Check that we have a valid host */
- easyrule_parse_block($_GET['int'], $_GET['src'], $_GET['ipproto']);
- break;
- case 'pass':
- easyrule_parse_pass($_GET['int'], $_GET['proto'], $_GET['src'], $_GET['dst'], $_GET['dstport'], $_GET['ipproto']);
- break;
- }
-}
-
-if (stristr($retval, "error") == true) {
- $message = $retval;
-}
-
-include("head.inc"); ?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-
-<?php if ($message) { ?>
-<br />
-<?=gettext("Message"); ?>: <?php echo $message; ?>
-<br />
-<?php } else { ?>
-<?=gettext("This is the Easy Rule status page, mainly used to display errors when adding rules. " .
-"If you are seeing this, there apparently was not an error, and you navigated to the " .
-"page directly without telling it what to do"); ?>.<br /><br />
-<?=gettext("This page is meant to be called from the block/pass buttons on the Firewall Logs page"); ?>, <a href="diag_logs_filter.php"><?=gettext("Status"); ?> &gt; <?=gettext("System Logs, " .
-"Firewall Tab"); ?></a>.
-<br />
-<?php } ?>
-</td></tr></table>
-<?php include("fend.inc"); ?>
diff --git a/usr/local/www/edit.php b/usr/local/www/edit.php
deleted file mode 100644
index 481b2ce..0000000
--- a/usr/local/www/edit.php
+++ /dev/null
@@ -1,254 +0,0 @@
-<?php
-/*
- edit.php
- Copyright (C) 2004, 2005 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: shell
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-edit
-##|*NAME=Diagnostics: Edit FIle
-##|*DESCR=Allow access to the 'Diagnostics: Edit File' page.
-##|*MATCH=edit.php*
-##|*MATCH=browser.php*
-##|*MATCH=filebrowser/browser.php*
-##|-PRIV
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Edit file"));
-require("guiconfig.inc");
-
-if ($_POST['action']) {
- switch ($_POST['action']) {
- case 'load':
- if (strlen($_POST['file']) < 1) {
- echo "|5|" . gettext("No file name specified") . ".|";
- } elseif (is_dir($_POST['file'])) {
- echo "|4|" . gettext("Loading a directory is not supported") . ".|";
- } elseif (!is_file($_POST['file'])) {
- echo "|3|" . gettext("File does not exist or is not a regular file") . ".|";
- } else {
- $data = file_get_contents(urldecode($_POST['file']));
- if ($data === false) {
- echo "|1|" . gettext("Failed to read file") . ".|";
- } else {
- $data = base64_encode($data);
- echo "|0|{$_POST['file']}|{$data}|";
- }
- }
- exit;
- case 'save':
- if (strlen($_POST['file']) < 1) {
- echo "|" . gettext("No file name specified") . ".|";
- } else {
- conf_mount_rw();
- $_POST['data'] = str_replace("\r", "", base64_decode($_POST['data']));
- $ret = file_put_contents($_POST['file'], $_POST['data']);
- conf_mount_ro();
- if ($_POST['file'] == "/conf/config.xml" || $_POST['file'] == "/cf/conf/config.xml") {
- if (file_exists("/tmp/config.cache")) {
- unlink("/tmp/config.cache");
- }
- disable_security_checks();
- }
- if ($ret === false) {
- echo "|" . gettext("Failed to write file") . ".|";
- } elseif ($ret <> strlen($_POST['data'])) {
- echo "|" . gettext("Error while writing file") . ".|";
- } else {
- echo "|" . gettext("File successfully saved") . ".|";
- }
- }
- exit;
- }
- exit;
-}
-
-$closehead = false;
-require("head.inc");
-outputCSSFileInline("code-syntax-highlighter/SyntaxHighlighter.css");
-outputJavaScriptFileInline("filebrowser/browser.js");
-outputJavaScriptFileInline("javascript/base64.js");
-
-?>
-</head>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
- function loadFile() {
- jQuery("#fileStatus").html("<?=gettext("Loading file"); ?> ...");
- jQuery("#fileStatusBox").show(500);
-
- jQuery.ajax(
- "<?=$_SERVER['SCRIPT_NAME'];?>", {
- type: "post",
- data: "action=load&file=" + jQuery("#fbTarget").val(),
- complete: loadComplete
- }
- );
- }
-
- function loadComplete(req) {
- jQuery("#fileContent").show(1000);
- var values = req.responseText.split("|");
- values.shift(); values.pop();
-
- if (values.shift() == "0") {
- var file = values.shift();
- var fileContent = Base64.decode(values.join("|"));
- jQuery("#fileStatus").html("<?=gettext("File successfully loaded"); ?>.");
- jQuery("#fileContent").val(fileContent);
-
- var lang = "none";
- if (file.indexOf(".php") > 0) lang = "php";
- else if (file.indexOf(".inc") > 0) lang = "php";
- else if (file.indexOf(".xml") > 0) lang = "xml";
- else if (file.indexOf(".js") > 0) lang = "js";
- else if (file.indexOf(".css") > 0) lang = "css";
-
- if (jQuery("#highlight").checked && lang != "none") {
- jQuery("fileContent").prop("className", lang + ":showcolumns");
- dp.SyntaxHighlighter.HighlightAll("fileContent", true, false);
- }
- } else {
- jQuery("#fileStatus").html(values[0]);
- jQuery("#fileContent").val("");
- }
- jQuery("#fileContent").show(1000);
- }
-
- function saveFile(file) {
- jQuery("#fileStatus").html("<?=gettext("Saving file"); ?> ...");
- jQuery("#fileStatusBox").show(500);
-
- var fileContent = Base64.encode(jQuery("#fileContent").val());
- fileContent = fileContent.replace(/\+/g, "%2B");
-
- jQuery.ajax(
- "<?=$_SERVER['SCRIPT_NAME'];?>", {
- type: "post",
- data: "action=save&file=" + jQuery("#fbTarget").val() +
- "&data=" + fileContent,
- complete: function(req) {
- var values = req.responseText.split("|");
- jQuery("#fileStatus").html(values[1]);
- }
- }
- );
- }
-//]]>
-</script>
-
-<!-- file status box -->
-<div style="display:none; background:#eeeeee;" id="fileStatusBox">
- <div class="vexpl" style="padding-left:15px;">
- <strong id="fileStatus"></strong>
- </div>
-</div>
-
-<br />
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="file editor">
- <tr>
- <td class="tabcont" align="center">
-
-<!-- controls -->
-<table width="100%" cellpadding="9" cellspacing="9" summary="controls">
- <tr>
- <td align="center" class="list">
- <?=gettext("Save / Load from path"); ?>:
- <input type="text" class="formfld file" id="fbTarget" size="45" />
- <input type="button" class="formbtn" onclick="loadFile();" value="<?=gettext('Load');?>" />
- <input type="button" class="formbtn" id="fbOpen" value="<?=gettext('Browse');?>" />
- <input type="button" class="formbtn" onclick="saveFile();" value="<?=gettext('Save');?>" />
- <br />
- <?php
- /*
- <input type="checkbox" id="highlight" /><?=gettext("Enable syntax highlighting");
- */
- ?>
- </td>
- </tr>
-</table>
-
-<!-- filebrowser -->
-<div id="fbBrowser" style="display:none; border:1px dashed gray; width:98%;"></div>
-
-<!-- file viewer/editor -->
-<table width="100%" summary="file editor">
- <tr>
- <td valign="top">
- <div style="background:#eeeeee;" id="fileOutput">
- <script type="text/javascript">
- //<![CDATA[
- window.onload=function() {
- document.getElementById("fileContent").wrap='off';
- }
- //]]>
- </script>
- <textarea id="fileContent" name="fileContent" style="width:100%;" rows="30" cols=""></textarea>
- </div>
- </td>
- </tr>
-</table>
-
- </td>
- </tr>
-</table>
-
-<script type="text/javascript" src="/code-syntax-highlighter/shCore.js"></script>
-<script type="text/javascript" src="/code-syntax-highlighter/shBrushCss.js"></script>
-<script type="text/javascript" src="/code-syntax-highlighter/shBrushJScript.js"></script>
-<script type="text/javascript" src="/code-syntax-highlighter/shBrushPhp.js"></script>
-<script type="text/javascript" src="/code-syntax-highlighter/shBrushXml.js"></script>
-<script type="text/javascript">
-//<![CDATA[
- jQuery(window).load(
- function() {
- jQuery("#fbTarget").focus();
-
- NiftyCheck();
- Rounded("div#fileStatusBox", "all", "#ffffff", "#eeeeee", "smooth");
- }
- );
-
- <?php if ($_GET['action'] == "load"): ?>
- jQuery(window).load(
- function() {
- jQuery("#fbTarget").val("<?=htmlspecialchars($_GET['path']);?>");
- loadFile();
- }
- );
- <?php endif; ?>
-//]]>
-</script>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/exec.php b/usr/local/www/exec.php
deleted file mode 100644
index e0220b7..0000000
--- a/usr/local/www/exec.php
+++ /dev/null
@@ -1,355 +0,0 @@
-<?php
-/* $Id$ */
-/*
- Exec+ v1.02-000 - Copyright 2001-2003, All rights reserved
- Created by technologEase (http://www.technologEase.com).
-
- (modified for m0n0wall by Manuel Kasper <mk@neon1.net>)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: shell
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-command
-##|*NAME=Diagnostics: Command page
-##|*DESCR=Allow access to the 'Diagnostics: Command' page.
-##|*MATCH=exec.php*
-##|-PRIV
-
-$allowautocomplete = true;
-
-require("guiconfig.inc");
-
-if (($_POST['submit'] == "Download") && file_exists($_POST['dlPath'])) {
- session_cache_limiter('public');
- $fd = fopen($_POST['dlPath'], "rb");
- header("Content-Type: application/octet-stream");
- header("Content-Length: " . filesize($_POST['dlPath']));
- header("Content-Disposition: attachment; filename=\"" .
- trim(htmlentities(basename($_POST['dlPath']))) . "\"");
- if (isset($_SERVER['HTTPS'])) {
- header('Pragma: ');
- header('Cache-Control: ');
- } else {
- header("Pragma: private");
- header("Cache-Control: private, must-revalidate");
- }
-
- fpassthru($fd);
- exit;
-} else if (($_POST['submit'] == "Upload") && is_uploaded_file($_FILES['ulfile']['tmp_name'])) {
- move_uploaded_file($_FILES['ulfile']['tmp_name'], "/tmp/" . $_FILES['ulfile']['name']);
- $ulmsg = "Uploaded file to /tmp/" . htmlentities($_FILES['ulfile']['name']);
- unset($_POST['txtCommand']);
-}
-
-if ($_POST) {
- conf_mount_rw();
-}
-
-// Function: is Blank
-// Returns true or false depending on blankness of argument.
-
-function isBlank($arg) {
- return preg_match("/^\s*$/", $arg);
-}
-
-// Function: Puts
-// Put string, Ruby-style.
-
-function puts($arg) {
- echo "$arg\n";
-}
-
-// "Constants".
-
-$Version = '';
-$ScriptName = $REQUEST['SCRIPT_NAME'];
-
-// Get year.
-
-$arrDT = localtime();
-$intYear = $arrDT[5] + 1900;
-
-$closehead = false;
-$pgtitle = array(gettext("Diagnostics"), gettext("Execute command"));
-include("head.inc");
-?>
-
-<script type="text/javascript">
-//<![CDATA[
-
- // Create recall buffer array (of encoded strings).
-
-<?php
-
-if (isBlank($_POST['txtRecallBuffer'])) {
- puts(" var arrRecallBuffer = new Array;");
-} else {
- puts(" var arrRecallBuffer = new Array(");
- $arrBuffer = explode("&", $_POST['txtRecallBuffer']);
- for ($i = 0; $i < (count($arrBuffer) - 1); $i++) {
- puts(" '" . htmlspecialchars($arrBuffer[$i], ENT_QUOTES | ENT_HTML401) . "',");
- }
- puts(" '" . htmlspecialchars($arrBuffer[count($arrBuffer) - 1], ENT_QUOTES | ENT_HTML401) . "'");
- puts(" );");
-}
-
-?>
-
- // Set pointer to end of recall buffer.
- var intRecallPtr = arrRecallBuffer.length-1;
-
- // Functions to extend String class.
- function str_encode() { return escape( this ) }
- function str_decode() { return unescape( this ) }
-
- // Extend string class to include encode() and decode() functions.
- String.prototype.encode = str_encode
- String.prototype.decode = str_decode
-
- // Function: is Blank
- // Returns boolean true or false if argument is blank.
- function isBlank( strArg ) { return strArg.match( /^\s*$/ ) }
-
- // Function: frmExecPlus onSubmit (event handler)
- // Builds the recall buffer from the command string on submit.
- function frmExecPlus_onSubmit( form ) {
-
- if (!isBlank(form.txtCommand.value)) {
- // If this command is repeat of last command, then do not store command.
- if (form.txtCommand.value.encode() == arrRecallBuffer[arrRecallBuffer.length-1]) { return true }
-
- // Stuff encoded command string into the recall buffer.
- if (isBlank(form.txtRecallBuffer.value)) {
- form.txtRecallBuffer.value = form.txtCommand.value.encode();
- } else {
- form.txtRecallBuffer.value += '&' + form.txtCommand.value.encode();
- }
- }
-
- return true;
- }
-
- // Function: btnRecall onClick (event handler)
- // Recalls command buffer going either up or down.
- function btnRecall_onClick( form, n ) {
-
- // If nothing in recall buffer, then error.
- if (!arrRecallBuffer.length) {
- alert('<?=gettext("Nothing to recall"); ?>!');
- form.txtCommand.focus();
- return;
- }
-
- // Increment recall buffer pointer in positive or negative direction
- // according to <n>.
- intRecallPtr += n;
-
- // Make sure the buffer stays circular.
- if (intRecallPtr < 0) { intRecallPtr = arrRecallBuffer.length - 1 }
- if (intRecallPtr > (arrRecallBuffer.length - 1)) { intRecallPtr = 0 }
-
- // Recall the command.
- form.txtCommand.value = arrRecallBuffer[intRecallPtr].decode();
- }
-
- // Function: Reset onClick (event handler)
- // Resets form on reset button click event.
- function Reset_onClick( form ) {
-
- // Reset recall buffer pointer.
- intRecallPtr = arrRecallBuffer.length;
-
- // Clear form (could have spaces in it) and return focus ready for cmd.
- form.txtCommand.value = '';
- form.txtCommand.focus();
-
- return true;
- }
-//]]>
-</script>
-<style type="text/css">
-/*<![CDATA[*/
-
-input {
- font-family: courier new, courier;
- font-weight: normal;
- font-size: 9pt;
-}
-
-pre {
- border: 2px solid #435370;
- background: #F0F0F0;
- padding: 1em;
- font-family: courier new, courier;
- white-space: pre;
- line-height: 10pt;
- font-size: 10pt;
-}
-
-.label {
- font-family: tahoma, verdana, arial, helvetica;
- font-size: 11px;
- font-weight: bold;
-}
-
-.button {
- font-family: tahoma, verdana, arial, helvetica;
- font-weight: bold;
- font-size: 11px;
-}
-
-/*]]>*/
-</style>
-</head>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if (isBlank($_POST['txtCommand'])): ?>
-<p class="red"><strong><?=gettext("Note: this function is unsupported. Use it " .
-"on your own risk"); ?>!</strong></p>
-<?php endif; ?>
-<?php if ($ulmsg) echo "<p><strong>" . $ulmsg . "</strong></p>\n"; ?>
-<?php
-
-if (!isBlank($_POST['txtCommand'])) {
- puts("<pre>");
- puts("\$ " . htmlspecialchars($_POST['txtCommand']));
- putenv("PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin");
- putenv("SCRIPT_FILENAME=" . strtok($_POST['txtCommand'], " ")); /* PHP scripts */
- $ph = popen($_POST['txtCommand'] . ' 2>&1', "r");
- while ($line = fgets($ph)) {
- echo htmlspecialchars($line);
- }
- pclose($ph);
- puts("&nbsp;</pre>");
-}
-
-
-if (!isBlank($_POST['txtPHPCommand'])) {
- puts("<pre>");
- require_once("config.inc");
- require_once("functions.inc");
- echo eval($_POST['txtPHPCommand']);
- puts("&nbsp;</pre>");
-}
-
-?>
-<div id="niftyOutter">
-<form action="exec.php" method="post" enctype="multipart/form-data" name="frmExecPlus" onsubmit="return frmExecPlus_onSubmit(this);">
- <table summary="exec">
- <tr>
- <td colspan="2" valign="top" class="vnsepcell"><?=gettext("Execute Shell command"); ?></td>
- </tr>
- <tr>
- <td class="label" align="right"><?=gettext("Command"); ?>:</td>
- <td class="type"><input id="txtCommand" name="txtCommand" type="text" class="formfld unknown" size="80" value="<?=htmlspecialchars($_POST['txtCommand']);?>" /></td>
- </tr>
- <tr>
- <td valign="top">&nbsp;&nbsp;&nbsp;</td>
- <td valign="top" class="label">
- <input type="hidden" name="txtRecallBuffer" value="<?=htmlspecialchars($_POST['txtRecallBuffer']) ?>" />
- <input type="button" class="button" name="btnRecallPrev" value="<" onclick="btnRecall_onClick(this.form, -1);" />
- <input type="submit" class="button" value="<?=gettext("Execute"); ?>" />
- <input type="button" class="button" name="btnRecallNext" value=">" onclick="btnRecall_onClick(this.form, 1);" />
- <input type="button" class="button" value="<?=gettext("Clear"); ?>" onclick="return Reset_onClick(this.form);" />
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="vnsepcell"><?=gettext("Download"); ?></td>
- </tr>
- <tr>
- <td align="right"><?=gettext("File to download"); ?>:</td>
- <td>
- <input name="dlPath" type="text" class="formfld file" id="dlPath" size="50" value="<?php echo htmlspecialchars($_GET['dlPath']) ?>" />
- </td>
- </tr>
- <tr>
- <td valign="top">&nbsp;&nbsp;&nbsp;</td>
- <td valign="top" class="label">
- <input name="submit" type="submit" class="button" id="download" value="<?=gettext("Download"); ?>" />
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="vnsepcell"><?=gettext("Upload"); ?></td>
- </tr>
- <tr>
- <td align="right"><?=gettext("File to upload"); ?>:</td>
- <td valign="top" class="label">
- <input name="ulfile" type="file" class="formfld file" id="ulfile" />
- </td>
- </tr>
- <tr>
- <td valign="top">&nbsp;&nbsp;&nbsp;</td>
- <td valign="top" class="label">
- <input name="submit" type="submit" class="button" id="upload" value="<?=gettext("Upload"); ?>" /></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="vnsepcell"><?=gettext("PHP Execute"); ?></td>
- </tr>
- <tr>
- <td align="right"><?=gettext("Command"); ?>:</td>
- <td class="type"><textarea id="txtPHPCommand" name="txtPHPCommand" rows="9" cols="80"><?=htmlspecialchars($_POST['txtPHPCommand']);?></textarea></td>
- </tr>
- <tr>
- <td valign="top">&nbsp;&nbsp;&nbsp;</td>
- <td valign="top" class="label">
- <input type="submit" class="button" value="<?=gettext("Execute"); ?>" />
- <p>
- <strong><?=gettext("Example"); ?>:</strong> interfaces_sync_setup();
- </p>
- </td>
- </tr>
-
- </table>
-</form>
-</div>
-<?php include("fend.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-document.forms[0].txtCommand.focus();
-//]]>
-</script>
-</body>
-</html>
-
-<?php
-
-if ($_POST) {
- conf_mount_ro();
-}
-
-?>
diff --git a/usr/local/www/favicon.ico b/usr/local/www/favicon.ico
deleted file mode 100755
index 3440bf2..0000000
--- a/usr/local/www/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/fbegin.inc b/usr/local/www/fbegin.inc
deleted file mode 100755
index 50a3f2e..0000000
--- a/usr/local/www/fbegin.inc
+++ /dev/null
@@ -1,459 +0,0 @@
-<?php
-/*
- pfSense_MODULE: header
-*/
-
-require_once("globals.inc");
-require_once("functions.inc");
-require_once("shortcuts.inc");
-require_once("service-utils.inc");
-
-/* $Id$ */
-
-
-/* Determine automated help URL. Should output the page name and
- parameters separately */
-$uri_split = "";
-preg_match("/\/(.*)\?(.*)/", $_SERVER["REQUEST_URI"], $uri_split);
-
-/* If there was no match, there were no parameters, just grab the filename
- Otherwise, use the matched filename from above. */
-if (empty($uri_split[0])) {
- $pagename = ltrim($_SERVER["REQUEST_URI"], '/');
-} else {
- $pagename = $uri_split[1];
-}
-/* If the page name is still empty, the user must have requested / (index.php) */
-if (empty($pagename)) {
- $pagename = "index.php";
-}
-
-/* If the filename is pkg_edit.php or wizard.php, reparse looking for the .xml filename */
-if (($pagename == "pkg.php") || ($pagename == "pkg_edit.php") || ($pagename == "wizard.php")) {
- $param_split = explode('&', $uri_split[2]);
- foreach ($param_split as $param) {
- if (substr($param, 0, 4) == "xml=") {
- $xmlfile = explode('=', $param);
- $pagename = $xmlfile[1];
- }
- }
-}
-
-/* Build the full help URL. */
-$helpurl .= "{$g['help_base_url']}?page={$pagename}";
-
-function return_ext_menu($section) {
- global $config;
- $htmltext = "";
- $extarray = array();
- if ($config['installedpackages']['menu'] <> "") {
- foreach ($config['installedpackages']['menu'] as $menuitem) {
- if ($menuitem['section'] != $section) {
- continue;
- }
- if ($menuitem['url'] <> "") {
- $test_url=$menuitem['url'];
- $addresswithport = getenv("HTTP_HOST");
- $colonpos = strpos($addresswithport, ":");
- if ($colonpos !== False) {
- //my url is actually just the IP address of the pfsense box
- $myurl = substr($addresswithport, 0, $colonpos);
- } else {
- $myurl = $addresswithport;
- }
- $description = str_replace('$myurl', $myurl, $menuitem['url']);
- } else {
- $description = '/pkg.php?xml=' . $menuitem['configfile'];
- $test_url=$description;
- }
- if (isAllowedPage($test_url)) {
- $extarray[] = array($menuitem['name'], $description);
- }
- }
- }
- return $extarray;
-}
-
-function output_menu($arrayitem, $target = null) {
- foreach ($arrayitem as $item) {
- if (isAllowedPage($item[1]) || $item[1] == "/index.php?logout") {
- $attr = sprintf("href=\"%s\"", htmlentities($item[1]));
- if ($target) {
- $attr .= sprintf(" target=\"%s\"", htmlentities($target));
- }
- $class = "navlnk";
- if ($item['class']) {
- $class .= " {$item['class']}";
- }
- $attr .= sprintf(" class=\"%s\"", htmlentities($class));
- if ($item['style']) {
- $attr .= sprintf(" style=\"%s\"", htmlentities($item['style']));
- }
- echo "<li>\n";
- printf("<a %s>%s</a>\n", $attr, $item[0]);
- echo "</li>\n";
- }
- }
-}
-
-// System
-$system_menu = array();
-$system_menu[] = array(gettext("Advanced"), "/system_advanced_admin.php");
-$system_menu[] = array(gettext("Firmware"), "/system_firmware.php");
-$system_menu[] = array(gettext("General Setup"), "/system.php");
-$system_menu[] = array(gettext("High Avail. Sync"), "/system_hasync.php");
-$system_menu[] = array(gettext("Logout"), "/index.php?logout");
-if ($g['platform'] == "pfSense" or $g['platform'] == "nanobsd") {
- $system_menu[] = array(gettext("Packages"), "/pkg_mgr_installed.php");
-}
-$system_menu[] = array(gettext("Setup Wizard"), "/wizard.php?xml=setup_wizard.xml");
-$system_menu[] = array(gettext("Routing"), "/system_gateways.php");
-$system_menu[] = array(gettext("Cert Manager"), "/system_camanager.php");
-if (!isAllowedPage("system_usermanager.php*")) {
- $system_menu[] = array(gettext("User Manager"), "/system_usermanager_passwordmg.php");
-} else {
- $system_menu[] = array(gettext("User Manager"), "/system_usermanager.php");
-}
-$system_menu = msort(array_merge($system_menu, return_ext_menu("System")), 0);
-
-// Interfaces
-$interfaces_menu = array();
-if (!isset($config['system']['webgui']['noassigninterfaces'])) {
- $interfaces_menu[] = array(gettext("(assign)"), "/interfaces_assign.php");
-}
-$opts = get_configured_interface_with_descr(false, true);
-foreach ($opts as $oif => $odescr) {
- if (!isset($config['interfaces'][$oif]['ovpn'])) {
- $interfaces_menu[] = array(htmlspecialchars($odescr), "/interfaces.php?if={$oif}");
- }
-}
-$interfaces_menu = msort(array_merge($interfaces_menu, return_ext_menu("Interfaces")), 0);
-
-// Firewall
-$firewall_menu = array();
-$firewall_menu[] = array(gettext("Aliases"), "/firewall_aliases.php");
-$firewall_menu[] = array(gettext("NAT"), "/firewall_nat.php");
-$firewall_menu[] = array(gettext("Rules"), "/firewall_rules.php");
-$firewall_menu[] = array(gettext("Schedules"), "/firewall_schedule.php");
-$firewall_menu[] = array(gettext("Traffic Shaper"), "/firewall_shaper.php");
-$firewall_menu[] = array(gettext("Virtual IPs"), "/firewall_virtual_ip.php");
-$firewall_menu = msort(array_merge($firewall_menu, return_ext_menu("Firewall")), 0);
-
-// Services
-$services_menu = array();
-$services_menu[] = array(gettext("Captive Portal"), "/services_captiveportal.php");
-$services_menu[] = array(gettext("DNS Forwarder"), "/services_dnsmasq.php");
-$services_menu[] = array(gettext("DNS Resolver"), "/services_unbound.php");
-$services_menu[] = array(gettext("DHCP Relay"), "/services_dhcp_relay.php");
-$services_menu[] = array(gettext("DHCPv6 Relay"), "/services_dhcpv6_relay.php");
-if ($g['services_dhcp_server_enable']) {
- $services_menu[] = array(gettext("DHCP Server"), "/services_dhcp.php");
- $services_menu[] = array(gettext("DHCPv6 Server/RA"), "/services_dhcpv6.php");
-}
-$services_menu[] = array(gettext("Dynamic DNS"), "/services_dyndns.php");
-$services_menu[] = array(gettext("IGMP proxy"), "/services_igmpproxy.php");
-$services_menu[] = array(gettext("Load Balancer"), "/load_balancer_pool.php");
-$services_menu[] = array(gettext("NTP"), "/services_ntpd.php");
-$services_menu[] = array(gettext("PPPoE Server"), "/vpn_pppoe.php");
-$services_menu[] = array(gettext("SNMP"), "/services_snmp.php");
-if (count($config['interfaces']) > 1) {
- /* no use for UPnP in single-interface deployments
- remove to reduce user confusion
- */
- $services_menu[] = array(gettext("UPnP &amp; NAT-PMP"), "/pkg_edit.php?xml=miniupnpd.xml");
-}
-$services_menu[] = array(gettext("Wake on LAN"), "/services_wol.php");
-$services_menu = msort(array_merge($services_menu, return_ext_menu("Services")), 0);
-
-// VPN
-$vpn_menu = array();
-$vpn_menu[] = array(gettext("IPsec"), "/vpn_ipsec.php");
-$vpn_menu[] = array(gettext("OpenVPN"), "/vpn_openvpn_server.php");
-$vpn_menu[] = array(gettext("PPTP"), "/vpn_pptp.php");
-$vpn_menu[] = array(gettext("L2TP"), "/vpn_l2tp.php");
-$vpn_menu = msort(array_merge($vpn_menu, return_ext_menu("VPN")), 0);
-
-// Status
-$status_menu = array();
-if (count($config['captiveportal']) > 0) {
- $status_menu[] = array(gettext("Captive Portal"), "/status_captiveportal.php");
-}
-$status_menu[] = array(gettext("CARP (failover)"), "/carp_status.php");
-$status_menu[] = array(gettext("Dashboard"), "/index.php");
-$status_menu[] = array(gettext("Gateways"), "/status_gateways.php");
-$status_menu[] = array(gettext("DHCP Leases"), "/status_dhcp_leases.php");
-$status_menu[] = array(gettext("DHCPv6 Leases"), "/status_dhcpv6_leases.php");
-$status_menu[] = array(gettext("Filter Reload"), "/status_filter_reload.php");
-$status_menu[] = array(gettext("Interfaces"), "/status_interfaces.php");
-$status_menu[] = array(gettext("IPsec"), "/diag_ipsec.php");
-$status_menu[] = array(gettext("Load Balancer"), "/status_lb_pool.php");
-$status_menu[] = array(gettext("NTP"), "/status_ntpd.php");
-$status_menu[] = array(gettext("OpenVPN"), "/status_openvpn.php");
-if ($g['platform'] == "pfSense") {
- $status_menu[] = array(gettext("Package Logs"), "/diag_pkglogs.php");
-}
-$status_menu[] = array(gettext("Queues"), "/status_queues.php");
-$status_menu[] = array(gettext("RRD Graphs"), "/status_rrd_graph.php");
-$status_menu[] = array(gettext("Services"), "/status_services.php");
-$status_menu[] = array(gettext("System Logs"), "/diag_logs.php");
-$status_menu[] = array(gettext("Traffic Graph"), "/status_graph.php?if=wan");
-if (count($config['interfaces']) > 1) {
- $status_menu[] = array(gettext("UPnP &amp; NAT-PMP"), "/status_upnp.php");
-}
-$ifentries = get_configured_interface_with_descr();
-foreach ($ifentries as $ent => $entdesc) {
- if (is_array($config['interfaces'][$ent]['wireless']) &&
- preg_match($g['wireless_regex'], $config['interfaces'][$ent]['if'])) {
- $wifdescrs[$ent] = $entdesc;
- }
-}
-if (count($wifdescrs) > 0) {
- $status_menu[] = array(gettext("Wireless"), "/status_wireless.php");
-}
-$status_menu = msort(array_merge($status_menu, return_ext_menu("Status")), 0);
-
-// Diagnostics
-$diagnostics_menu = array();
-$diagnostics_menu[] = array(gettext("ARP Table"), "/diag_arp.php");
-$diagnostics_menu[] = array(gettext("Authentication"), "/diag_authentication.php");
-$diagnostics_menu[] = array(gettext("Backup/Restore"), "/diag_backup.php");
-$diagnostics_menu[] = array(gettext("Command Prompt"), "/exec.php");
-$diagnostics_menu[] = array(gettext("DNS Lookup"), "/diag_dns.php");
-$diagnostics_menu[] = array(gettext("Edit File"), "/edit.php");
-$diagnostics_menu[] = array(gettext("Factory Defaults"), "/diag_defaults.php");
-
-if (file_exists("/var/run/gmirror_active")) {
- $diagnostics_menu[] = array(gettext("GEOM Mirrors"), "/diag_gmirror.php");
-}
-$diagnostics_menu[] = array(gettext("Halt System"), "/halt.php");
-$diagnostics_menu[] = array(gettext("Limiter Info"), "/diag_limiter_info.php");
-$diagnostics_menu[] = array(gettext("NDP Table"), "/diag_ndp.php");
-
-$diagnostics_menu[] = array(gettext("Tables"), "/diag_tables.php");
-$diagnostics_menu[] = array(gettext("Ping"), "/diag_ping.php");
-$diagnostics_menu[] = array(gettext("Test Port"), "/diag_testport.php");
-$diagnostics_menu[] = array(gettext("pfInfo"), "/diag_pf_info.php");
-$diagnostics_menu[] = array(gettext("pfTop"), "/diag_system_pftop.php");
-$diagnostics_menu[] = array(gettext("Reboot"), "/reboot.php");
-$diagnostics_menu[] = array(gettext("Routes"), "/diag_routes.php");
-$diagnostics_menu[] = array(gettext("SMART Status"), "/diag_smart.php");
-$diagnostics_menu[] = array(gettext("Sockets"), "/diag_sockets.php");
-$diagnostics_menu[] = array(gettext("States"), "/diag_dump_states.php");
-$diagnostics_menu[] = array(gettext("States Summary"), "/diag_states_summary.php");
-$diagnostics_menu[] = array(gettext("System Activity"), "/diag_system_activity.php");
-$diagnostics_menu[] = array(gettext("Traceroute"), "/diag_traceroute.php");
-$diagnostics_menu[] = array(gettext("Packet Capture"), "/diag_packet_capture.php");
-if ($g['platform'] == "nanobsd") {
- $diagnostics_menu[] = array(gettext("NanoBSD"), "/diag_nanobsd.php");
-}
-
-if (isset($config['system']['developer'])) {
- $diagnostics_menu[] = array(gettext("Restart HTTPD"), "/restart_httpd.php", "style" => "font-weight: bold; color: yellow;");
-}
-$diagnostics_menu = msort(array_merge($diagnostics_menu, return_ext_menu("Diagnostics")), 0);
-
-$gold_menu = array();
-$gold_menu[] = array(gettext("pfSense Gold"), "https://www.pfsense.org/gold");
-$gold_menu = msort(array_merge($gold_menu, return_ext_menu("Gold")), 0);
-
-if (!$g['disablehelpmenu']) {
- $help_menu = array();
- $help_menu[] = array(gettext("About this Page"), $helpurl);
- if ($g['product_name'] == "pfSense") {
- $help_menu[] = array(gettext("Bug Database"), "https://www.pfsense.org/j.php?jumpto=redmine");
- }
- $help_menu[] = array(gettext("User Forum"), "https://www.pfsense.org/j.php?jumpto=forum");
- $help_menu[] = array(gettext("Documentation"), "https://www.pfsense.org/j.php?jumpto=doc");
- $help_menu[] = array(gettext("Developers Wiki"), "https://www.pfsense.org/j.php?jumpto=devwiki");
- $help_menu[] = array(gettext("Paid Support"), "https://www.pfsense.org/j.php?jumpto=portal");
- $help_menu[] = array(gettext("pfSense Book"), "https://www.pfsense.org/j.php?jumpto=book");
- $help_menu[] = array(gettext("Search portal"), "https://www.pfsense.org/j.php?jumpto=searchportal");
- $help_menu[] = array(gettext("FreeBSD Handbook"), "https://www.pfsense.org/j.php?jumpto=fbsdhandbook");
- $help_menu = msort(array_merge($help_menu, return_ext_menu("Help")), 0);
-}
-
-?>
-
-<div id="wrapper">
- <div id="header">
- <div id="header-left"><a href="/index.php" id="status-link"><img src="/themes/<?= $g['theme']; ?>/images/transparent.gif" border="0" alt="transparent" /></a></div>
- <div id="header-right">
- <div class="container">
- <div class="left">webConfigurator</div>
- <div class="right" id="menu_messages">
-<?php
- echo get_menu_messages();
-?>
- </div>
- </div>
- </div>
- </div> <!-- Header DIV -->
- <div id="content">
- <div id="left">
- <div id="navigation" style="z-index:1000;">
- <ul id="menu">
- <li class="firstdrop">
- <div><?php echo gettext("System"); ?></div>
- <ul class="subdrop">
- <?php
- output_menu($system_menu);
- ?>
- </ul>
- </li>
- <li class="drop">
- <div><?php echo gettext("Interfaces"); ?></div>
- <ul class="subdrop">
- <?php
- output_menu($interfaces_menu);
- ?>
- </ul>
- </li>
- <li class="drop">
- <div><?php echo gettext("Firewall"); ?></div>
- <ul class="subdrop">
- <?php
- output_menu($firewall_menu);
- ?>
- </ul>
- </li>
- <li class="drop">
- <div><?php echo gettext("Services"); ?></div>
- <ul class="subdrop">
- <?php
- output_menu($services_menu);
- ?>
- </ul>
- </li>
- <li class="drop">
- <div><?php echo gettext("VPN"); ?></div>
- <ul class="subdrop">
- <?php
- output_menu($vpn_menu);
- ?>
- </ul>
- </li>
- <li class="drop">
- <div><?php echo gettext("Status"); ?></div>
- <ul class="subdrop">
- <?php
- output_menu($status_menu);
- ?>
- </ul>
- </li>
- <li class="drop">
- <div><?php echo gettext("Diagnostics"); ?></div>
- <ul id="diag" class="subdrop">
- <?php
- output_menu($diagnostics_menu);
- ?>
- </ul>
- </li>
- <li class="drop">
- <div><?php echo gettext("Gold"); ?></div>
- <ul id="gold" class="subdrop">
- <?php
- output_menu($gold_menu, "_blank");
- ?>
- </ul>
- </li>
- <?php if (!$g['disablehelpmenu']): ?>
- <li class="lastdrop">
- <div><?php echo gettext("Help"); ?></div>
- <ul id="help" class="subdrop">
- <?php
- output_menu($help_menu, "_blank");
- ?>
- </ul>
- </li>
- <?php endif; ?>
- </ul>
- </div>
-
- </div> <!-- Left DIV -->
-
- <div id="right">
-
-<?php
-echo "\t<script type=\"text/javascript\" src=\"/javascript/domTT/domLib.js\"></script>\n";
-echo "\t<script type=\"text/javascript\" src=\"/javascript/domTT/domTT.js\"></script>\n";
-echo "\t<script type=\"text/javascript\" src=\"/javascript/domTT/behaviour.js\"></script>\n";
-echo "\t<script type=\"text/javascript\" src=\"/javascript/domTT/fadomatic.js\"></script>\n";
-/* display a top alert bar if need be */
-$need_alert_display = false;
-$found_notices = are_notices_pending();
-if ($found_notices == true) {
- $notices = get_notices();
- if (!$notices) {
- $need_alert_display = true;
- $display_text = print_notices($notices) . "<br />";
- }
-}
-if ($need_alert_display == true) {
- echo "<div style=\"background-color:#000000\" id=\"roundalert\">";
- echo "<table summary=\"round alert\">";
- echo "<tr><td><font color=\"#ffffff\">";
- echo "&nbsp;&nbsp;<img align=\"middle\" src=\"/top_notification.gif\" alt=\"notification\" />&nbsp;&nbsp;&nbsp;";
- echo $display_text;
- echo "</font></td>";
- echo "</tr>";
- echo "</table>";
- echo "</div>";
-}
-
-function add_to_menu($url, $name) {
- if (isAllowedPage($url)) {
- echo "<li><a href=\"{$url}\" class=\"navlnk\">{$name}</a></li>\n";
- }
-}
-
-?>
-
-<div>
-<span class="pgtitle"><a href="<?= htmlentities($_SERVER['REQUEST_URI']) ?>"><?=genhtmltitle($pgtitle);?></a></span>
-<span style="float:right; margin: 0 0 20px 20px">
-<?php
-if (!$hide_service_status && !empty($shortcuts[$shortcut_section]['service'])) {
- $ssvc = array();
- switch ($shortcut_section) {
- case "openvpn":
- $ssvc = find_service_by_openvpn_vpnid($vpnid);
- break;
- case "captiveportal":
- $ssvc = find_service_by_cp_zone($cpzone);
- break;
- default:
- $ssvc = find_service_by_name($shortcuts[$shortcut_section]['service']);
-
- }
- if (!empty($ssvc)) {
- echo get_service_status_icon($ssvc, false);
- echo get_service_control_links($ssvc, true);
- }
-}
-
-echo get_shortcut_main_link($shortcut_section, true);
-echo get_shortcut_status_link($shortcut_section, true);
-echo get_shortcut_log_link($shortcut_section, true);
-
-?>
-<?php if (!$g['disablehelpicon']): ?>
-
-<a href="<?php echo $helpurl; ?>" title="<?php echo gettext("Help for items on this page"); ?>"><img style="vertical-align:middle" src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_help.gif" border="0" alt="help" /></a>
-<?php endif; ?>
-</span>
-</div>
-<br />
-
-<?php
-/* if upgrade in progress, alert user */
-if (is_subsystem_dirty('packagelock') || (file_exists('/conf/needs_package_sync') && platform_booting())) {
- if (file_exists('/conf/needs_package_sync') && platform_booting()) {
- $info_text = sprintf(gettext("%s is booting then packages will be reinstalled in the background.<p>Do not make changes in the GUI until this is complete."), $g['product_name']);
- } else {
- $pgtitle = array(gettext("System"), gettext("Package Manager"));
- $info_text = gettext("Packages are currently being reinstalled in the background.<p>Do not make changes in the GUI until this is complete.");
- }
- print_info_box($info_text . "<p><img src='/themes/{$g['theme']}/images/icons/icon_fw-update.gif' alt='firmware update' />");
-}
-$pgtitle_output = true;
-?>
diff --git a/usr/local/www/fend.inc b/usr/local/www/fend.inc
deleted file mode 100755
index f1cbdb9..0000000
--- a/usr/local/www/fend.inc
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--
- pfSense_MODULE: footer
--->
-
- </div> <!-- Right DIV -->
-
- </div> <!-- Content DIV -->
-
- <div id="footer">
- <a target="_blank" href="<?=$g['product_website_footer']?>" class="redlnk"><?=$g['product_name']?></a> is &copy;
- <?=$g['product_copyright_years']?> by <a href="<?=$g['product_copyright_url']?>" class="tblnk"><?=$g['product_copyright']?></a>. All Rights Reserved.
- [<a href="/license.php" class="tblnk">view license</a>]
- </div> <!-- Footer DIV -->
-
-</div> <!-- Wrapper Div -->
-
-<?php outputJavaScriptFileInline("/usr/local/www/themes/{$g['theme']}/bottom-loader.js");
-/* Disable form autocomplete on all but the login screen. */
-if (basename($_SERVER["SCRIPT_FILENAME"] != "index.php") && !$allowautocomplete): ?>
-<script type="text/javascript">
-//<![CDATA[
-(function ($) {
- $("input").attr("autocomplete","off");
-})(jQuery);
-//]]>
-</script>
-<?php endif; ?>
diff --git a/usr/local/www/filebrowser/browser.js b/usr/local/www/filebrowser/browser.js
deleted file mode 100644
index 2769db3..0000000
--- a/usr/local/www/filebrowser/browser.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- pfSense_MODULE: shell
-*/
-
-jQuery(document).ready(
- function() {
- jQuery("#fbOpen").click(
- function() {
- jQuery("#fbBrowser").fadeIn(750);
- fbBrowse(jQuery("#fbTarget").val());
- }
- );
- }
-);
-
-function fbBrowse(path) {
- jQuery("#fileContent").fadeOut();
-
- if (jQuery("#fbCurrentDir")) {
- jQuery("#fbCurrentDir").html("Loading ...");
- }
-
- jQuery.ajax(
- "/filebrowser/browser.php?path=" + encodeURI(path ? path : "/"),
- { type: "get", complete: fbComplete }
- );
-
-}
-
-function fbComplete(req) {
- jQuery("#fbBrowser").html(req.responseText);
-
- var actions = {
- fbHome: function() { fbBrowse("/"); },
- fbClose: function() { jQuery("#fbBrowser").fadeOut(750); },
- fbDir: function() { fbBrowse(this.id); },
- fbFile: function() { jQuery("#fbTarget").val(this.id); }
- }
-
- for (var type in actions) {
- jQuery("#fbBrowser ." + type).each(
- function() {
- jQuery(this).click(actions[type]);
- jQuery(this).css("cursor","pointer");
- }
- );
- }
-}
diff --git a/usr/local/www/filebrowser/browser.php b/usr/local/www/filebrowser/browser.php
deleted file mode 100644
index 8ab05db..0000000
--- a/usr/local/www/filebrowser/browser.php
+++ /dev/null
@@ -1,165 +0,0 @@
-<?php
-
-require_once("guiconfig.inc");
-
-/*
- pfSense_MODULE: shell
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
-*/
-// Fetch a list of directories and files inside a given directory
-function get_content($dir) {
- $dirs = array();
- $files = array();
-
- clearstatcache();
- $fd = @opendir($dir);
-
- while ($entry = @readdir($fd)) {
- if ($entry == ".") {
- continue;
- }
- if ($entry == ".." && $dir == "/") {
- continue;
- }
- if (is_dir("{$dir}/{$entry}")) {
- array_push($dirs, $entry);
- } else {
- array_push($files, $entry);
- }
- }
-
- @closedir($fd);
-
- natsort($dirs);
- natsort($files);
-
- return array($dirs, $files);
-}
-
-$path = realpath(strlen($_GET['path']) > 0 ? $_GET['path'] : "/");
-if (is_file($path)) {
- $path = dirname($path);
-}
-
-// ----- header -----
-?>
-<table width="100%">
- <tr>
- <td class="fbHome" width="25px" align="left">
- <img onClick="jQuery('#fbTarget').val('<?=$realDir?>'); fbBrowse('/');" src="/filebrowser/images/icon_home.gif" alt="Home" title="Home" />
- </td>
- <td><b><?=$path;?></b></td>
- <td class="fbClose" align="right">
- <img onClick="jQuery('#fbBrowser').fadeOut();" border="0" src="/filebrowser/images/icon_cancel.gif" alt="Close" title="Close" />
- </td>
- </tr>
- <tr>
- <td id="fbCurrentDir" colspan="3" class="vexpl" align="left">
-<?php
-
-// ----- read contents -----
-if (is_dir($path)) {
- list($dirs, $files) = get_content($path);
-?>
-
- </td>
- </tr>
-<?php
-} else {
-?>
- Directory does not exist.
- </td>
- </tr>
-</table>
-<?php
- exit;
-}
-
-// ----- directories -----
-foreach ($dirs as $dir):
- $realDir = realpath("{$path}/{$dir}");
-?>
- <tr>
- <td></td>
- <td class="fbDir vexpl" id="<?=$realDir;?>" align="left">
- <div onClick="jQuery('#fbTarget').val('<?=$realDir?>'); fbBrowse('<?=$realDir?>');">
- <img src="/filebrowser/images/folder_generic.gif" />
- &nbsp;<?=$dir;?>
- </div>
- </td>
- <td></td>
- </tr>
-<?php
-endforeach;
-
-// ----- files -----
-foreach ($files as $file):
- $ext = strrchr($file, ".");
-
- switch ($ext) {
- case ".css":
- case ".html":
- case ".xml":
- $type = "code";
- break;
- case ".rrd":
- $type = "database";
- break;
- case ".gif":
- case ".jpg":
- case ".png":
- $type = "image";
- break;
- case ".js":
- $type = "js";
- break;
- case ".pdf":
- $type = "pdf";
- break;
- case ".inc":
- case ".php":
- $type = "php";
- break;
- case ".conf":
- case ".pid":
- case ".sh":
- $type = "system";
- break;
- case ".bz2":
- case ".gz":
- case ".tgz":
- case ".zip":
- $type = "zip";
- break;
- default:
- $type = "generic";
- }
-
- $fqpn = "{$path}/{$file}";
-
- if (is_file($fqpn)) {
- $fqpn = realpath($fqpn);
- $size = sprintf("%.2f KiB", filesize($fqpn) / 1024);
- } else {
- $size = "";
- }
-
-?>
- <tr>
- <td></td>
- <td class="fbFile vexpl" id="<?=$fqpn;?>" align="left">
- <?php $filename = str_replace("//","/", "{$path}/{$file}"); ?>
- <div onClick="jQuery('#fbTarget').val('<?=$filename?>'); loadFile(); jQuery('#fbBrowser').fadeOut();">
- <img src="/filebrowser/images/file_<?=$type;?>.gif" alt="" title="">
- &nbsp;<?=$file;?>
- </div>
- </td>
- <td align="right" class="vexpl">
- <?=$size;?>
- </td>
- </tr>
-<?php
-endforeach;
-?>
-</table>
diff --git a/usr/local/www/filebrowser/images/file_code.gif b/usr/local/www/filebrowser/images/file_code.gif
deleted file mode 100755
index f06a205..0000000
--- a/usr/local/www/filebrowser/images/file_code.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/file_database.gif b/usr/local/www/filebrowser/images/file_database.gif
deleted file mode 100755
index d479c91..0000000
--- a/usr/local/www/filebrowser/images/file_database.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/file_doc.gif b/usr/local/www/filebrowser/images/file_doc.gif
deleted file mode 100755
index 222c31b..0000000
--- a/usr/local/www/filebrowser/images/file_doc.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/file_flash.gif b/usr/local/www/filebrowser/images/file_flash.gif
deleted file mode 100755
index e565c37..0000000
--- a/usr/local/www/filebrowser/images/file_flash.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/file_generic.gif b/usr/local/www/filebrowser/images/file_generic.gif
deleted file mode 100755
index 5f39482..0000000
--- a/usr/local/www/filebrowser/images/file_generic.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/file_image.gif b/usr/local/www/filebrowser/images/file_image.gif
deleted file mode 100755
index 4960683..0000000
--- a/usr/local/www/filebrowser/images/file_image.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/file_js.gif b/usr/local/www/filebrowser/images/file_js.gif
deleted file mode 100755
index 9b6601f..0000000
--- a/usr/local/www/filebrowser/images/file_js.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/file_pdf.gif b/usr/local/www/filebrowser/images/file_pdf.gif
deleted file mode 100755
index b01bb23..0000000
--- a/usr/local/www/filebrowser/images/file_pdf.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/file_php.gif b/usr/local/www/filebrowser/images/file_php.gif
deleted file mode 100755
index ab7f459..0000000
--- a/usr/local/www/filebrowser/images/file_php.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/file_ppt.gif b/usr/local/www/filebrowser/images/file_ppt.gif
deleted file mode 100755
index 0383c98..0000000
--- a/usr/local/www/filebrowser/images/file_ppt.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/file_system.gif b/usr/local/www/filebrowser/images/file_system.gif
deleted file mode 100755
index f1997c7..0000000
--- a/usr/local/www/filebrowser/images/file_system.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/file_xls.gif b/usr/local/www/filebrowser/images/file_xls.gif
deleted file mode 100755
index d004013..0000000
--- a/usr/local/www/filebrowser/images/file_xls.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/file_zip.gif b/usr/local/www/filebrowser/images/file_zip.gif
deleted file mode 100755
index ec98255..0000000
--- a/usr/local/www/filebrowser/images/file_zip.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/folder_generic.gif b/usr/local/www/filebrowser/images/folder_generic.gif
deleted file mode 100755
index 45b191d..0000000
--- a/usr/local/www/filebrowser/images/folder_generic.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/icon_cancel.gif b/usr/local/www/filebrowser/images/icon_cancel.gif
deleted file mode 100755
index 246a819..0000000
--- a/usr/local/www/filebrowser/images/icon_cancel.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/icon_contract.gif b/usr/local/www/filebrowser/images/icon_contract.gif
deleted file mode 100755
index cf82159..0000000
--- a/usr/local/www/filebrowser/images/icon_contract.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/icon_expand.gif b/usr/local/www/filebrowser/images/icon_expand.gif
deleted file mode 100755
index 06c0c68..0000000
--- a/usr/local/www/filebrowser/images/icon_expand.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/icon_home.gif b/usr/local/www/filebrowser/images/icon_home.gif
deleted file mode 100755
index f888434..0000000
--- a/usr/local/www/filebrowser/images/icon_home.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/icon_left.gif b/usr/local/www/filebrowser/images/icon_left.gif
deleted file mode 100755
index 0d1137c..0000000
--- a/usr/local/www/filebrowser/images/icon_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/filebrowser/images/icon_magnifier.gif b/usr/local/www/filebrowser/images/icon_magnifier.gif
deleted file mode 100755
index e96e548..0000000
--- a/usr/local/www/filebrowser/images/icon_magnifier.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/firewall_aliases.php b/usr/local/www/firewall_aliases.php
deleted file mode 100644
index 950a8a2..0000000
--- a/usr/local/www/firewall_aliases.php
+++ /dev/null
@@ -1,311 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_aliases.php
- Copyright (C) 2004 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: aliases
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-aliases
-##|*NAME=Firewall: Aliases page
-##|*DESCR=Allow access to the 'Firewall: Aliases' page.
-##|*MATCH=firewall_aliases.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-if (!is_array($config['aliases']['alias'])) {
- $config['aliases']['alias'] = array();
-}
-$a_aliases = &$config['aliases']['alias'];
-
-$tab = ($_REQUEST['tab'] == "" ? "ip" : preg_replace("/\W/", "", $_REQUEST['tab']));
-
-if ($_POST) {
-
- if ($_POST['apply']) {
- $retval = 0;
-
- /* reload all components that use aliases */
- $retval = filter_configure();
-
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message($retval);
- } else {
- $savemsg = $retval;
- }
- if ($retval == 0) {
- clear_subsystem_dirty('aliases');
- }
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($a_aliases[$_GET['id']]) {
- /* make sure rule is not being referenced by any nat or filter rules */
- $is_alias_referenced = false;
- $referenced_by = false;
- $alias_name = $a_aliases[$_GET['id']]['name'];
- // Firewall rules
- find_alias_reference(array('filter', 'rule'), array('source', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
- find_alias_reference(array('filter', 'rule'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
- find_alias_reference(array('filter', 'rule'), array('source', 'port'), $alias_name, $is_alias_referenced, $referenced_by);
- find_alias_reference(array('filter', 'rule'), array('destination', 'port'), $alias_name, $is_alias_referenced, $referenced_by);
- // NAT Rules
- find_alias_reference(array('nat', 'rule'), array('source', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
- find_alias_reference(array('nat', 'rule'), array('source', 'port'), $alias_name, $is_alias_referenced, $referenced_by);
- find_alias_reference(array('nat', 'rule'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
- find_alias_reference(array('nat', 'rule'), array('destination', 'port'), $alias_name, $is_alias_referenced, $referenced_by);
- find_alias_reference(array('nat', 'rule'), array('target'), $alias_name, $is_alias_referenced, $referenced_by);
- find_alias_reference(array('nat', 'rule'), array('local-port'), $alias_name, $is_alias_referenced, $referenced_by);
- // NAT 1:1 Rules
- //find_alias_reference(array('nat', 'onetoone'), array('external'), $alias_name, $is_alias_referenced, $referenced_by);
- //find_alias_reference(array('nat', 'onetoone'), array('source', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
- find_alias_reference(array('nat', 'onetoone'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
- // NAT Outbound Rules
- find_alias_reference(array('nat', 'outbound', 'rule'), array('source', 'network'), $alias_name, $is_alias_referenced, $referenced_by);
- find_alias_reference(array('nat', 'outbound', 'rule'), array('sourceport'), $alias_name, $is_alias_referenced, $referenced_by);
- find_alias_reference(array('nat', 'outbound', 'rule'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
- find_alias_reference(array('nat', 'outbound', 'rule'), array('dstport'), $alias_name, $is_alias_referenced, $referenced_by);
- find_alias_reference(array('nat', 'outbound', 'rule'), array('target'), $alias_name, $is_alias_referenced, $referenced_by);
- // Alias in an alias
- find_alias_reference(array('aliases', 'alias'), array('address'), $alias_name, $is_alias_referenced, $referenced_by);
- // Load Balancer
- find_alias_reference(array('load_balancer', 'lbpool'), array('port'), $alias_name, $is_alias_referenced, $referenced_by);
- find_alias_reference(array('load_balancer', 'virtual_server'), array('port'), $alias_name, $is_alias_referenced, $referenced_by);
- // Static routes
- find_alias_reference(array('staticroutes', 'route'), array('network'), $alias_name, $is_alias_referenced, $referenced_by);
- if ($is_alias_referenced == true) {
- $savemsg = sprintf(gettext("Cannot delete alias. Currently in use by %s"), $referenced_by);
- } else {
- unset($a_aliases[$_GET['id']]);
- if (write_config()) {
- filter_configure();
- mark_subsystem_dirty('aliases');
- }
- header("Location: firewall_aliases.php?tab=" . $tab);
- exit;
- }
- }
-}
-
-function find_alias_reference($section, $field, $origname, &$is_alias_referenced, &$referenced_by) {
- global $config;
- if (!$origname || $is_alias_referenced) {
- return;
- }
-
- $sectionref = &$config;
- foreach ($section as $sectionname) {
- if (is_array($sectionref) && isset($sectionref[$sectionname])) {
- $sectionref = &$sectionref[$sectionname];
- } else {
- return;
- }
- }
-
- if (is_array($sectionref)) {
- foreach ($sectionref as $itemkey => $item) {
- $fieldfound = true;
- $fieldref = &$sectionref[$itemkey];
- foreach ($field as $fieldname) {
- if (is_array($fieldref) && isset($fieldref[$fieldname])) {
- $fieldref = &$fieldref[$fieldname];
- } else {
- $fieldfound = false;
- break;
- }
- }
- if ($fieldfound && $fieldref == $origname) {
- $is_alias_referenced = true;
- if (is_array($item)) {
- $referenced_by = $item['descr'];
- }
- break;
- }
- }
- }
-}
-
-$pgtitle = array(gettext("Firewall"), gettext("Aliases"));
-$shortcut_section = "aliases";
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="firewall_aliases.php" method="post">
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('aliases')): ?><p>
-<?php print_info_box_np(gettext("The alias list has been changed.") . "<br />" . gettext("You must apply the changes in order for them to take effect."));?>
-<?php endif; ?>
-<?php pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases/pre_table"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall aliases">
- <tr>
- <td class="tabnavtbl">
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("IP"), ($tab == "ip" ? true : ($tab == "host" ? true : ($tab == "network" ? true : false))), "/firewall_aliases.php?tab=ip");
- $tab_array[] = array(gettext("Ports"), ($tab == "port"? true : false), "/firewall_aliases.php?tab=port");
- $tab_array[] = array(gettext("URLs"), ($tab == "url"? true : false), "/firewall_aliases.php?tab=url");
- $tab_array[] = array(gettext("All"), ($tab == "all"? true : false), "/firewall_aliases.php?tab=all");
- display_top_tabs($tab_array);
- ?>
- <input type="hidden" name="tab" value="<?=htmlspecialchars($tab);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="20%" class="listhdrr"><?=gettext("Name"); ?></td>
- <td width="43%" class="listhdrr"><?=gettext("Values"); ?></td>
- <td width="30%" class="listhdr"><?=gettext("Description"); ?></td>
- <td width="7%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td valign="middle" width="17">&nbsp;</td>
- <td valign="middle"><a href="firewall_aliases_edit.php?tab=<?=$tab?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" <?=dom_title(gettext("Add a new alias"));?> alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <?php
- asort($a_aliases);
- foreach ($a_aliases as $i=> $alias) {
- unset ($show_alias);
- switch ($tab) {
- case "all":
- $show_alias= true;
- break;
- case "ip":
- case "host":
- case "network":
- if (preg_match("/(host|network)/", $alias["type"])) {
- $show_alias= true;
- }
- break;
- case "url":
- if (preg_match("/(url)/i", $alias["type"])) {
- $show_alias= true;
- }
- break;
- case "port":
- if ($alias["type"] == "port") {
- $show_alias= true;
- }
- break;
- }
- if ($show_alias) {
- ?>
- <tr>
- <td class="listlr" ondblclick="document.location='firewall_aliases_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($alias['name']);?>
- </td>
- <td class="listr" ondblclick="document.location='firewall_aliases_edit.php?id=<?=$i;?>';">
- <?php
- if ($alias["url"]) {
- echo $alias["url"] . "<br />";
- } else {
- if (is_array($alias["aliasurl"])) {
- $aliasurls = implode(", ", array_slice($alias["aliasurl"], 0, 10));
- echo $aliasurls;
- if (count($aliasurls) > 10) {
- echo "...<br />";
- }
- echo "<br />\n";
- }
- $tmpaddr = explode(" ", $alias['address']);
- $addresses = implode(", ", array_slice($tmpaddr, 0, 10));
- echo $addresses;
- if (count($tmpaddr) > 10) {
- echo "...";
- }
- }
- ?>
- </td>
- <td class="listbg" ondblclick="document.location='firewall_aliases_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($alias['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle"><a href="firewall_aliases_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" <?=dom_title(gettext("Edit alias")." {$alias['name']}");?> alt="edit" /></a></td>
- <td><a href="firewall_aliases.php?act=del&amp;tab=<?=$tab;?>&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this alias? All elements that still use it will become invalid (e.g. filter rules)!");?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" <?=dom_title(gettext("Delete alias")." {$alias['name']}");?> alt="delete" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <?php
- } // if ($show_alias)
- } // foreach
- ?>
-
- <tr>
- <td colspan="3">&nbsp;</td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="edit">
- <tbody>
- <tr>
- <td valign="middle">
- <a href="firewall_aliases_edit.php?tab=<?=$tab?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" <?=dom_title(gettext("Add a new alias")); ?> alt="add" /></a>
- </td>
- <td valign="middle">
- <a href="firewall_aliases_import.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_import_alias.gif" width="17" height="17" border="0" <?=dom_title(gettext("Bulk import aliases from list"));?> alt="import" /></a>
- </td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
-
- <tr>
- <td class="tabcont" colspan="3">
- <p><span class="vexpl"><span class="red"><strong><?=gettext("Note:"); ?><br /></strong></span></span></p><div style="overflow:hidden; text-align:justify;"><p><span class="vexpl"><?=gettext("Aliases act as placeholders for real hosts, networks or ports. They can be used to minimize the number of changes that have to be made if a host, network or port changes. You can enter the name of an alias instead of the host, network or port in all fields that have a red background. The alias will be resolved according to the list above. If an alias cannot be resolved (e.g. because you deleted it), the corresponding element (e.g. filter/NAT/shaper rule) will be considered invalid and skipped."); ?></span></p></div>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_aliases_edit.php b/usr/local/www/firewall_aliases_edit.php
deleted file mode 100755
index 638d1f1..0000000
--- a/usr/local/www/firewall_aliases_edit.php
+++ /dev/null
@@ -1,890 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_aliases_edit.php
- Copyright (C) 2004 Scott Ullrich
- Copyright (C) 2009 Ermal Luçi
- Copyright (C) 2010 Jim Pingle
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /bin/rm /bin/mkdir /usr/bin/fetch
- pfSense_MODULE: aliases
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-alias-edit
-##|*NAME=Firewall: Alias: Edit page
-##|*DESCR=Allow access to the 'Firewall: Alias: Edit' page.
-##|*MATCH=firewall_aliases_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-$pgtitle = array(gettext("Firewall"), gettext("Aliases"), gettext("Edit"));
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_aliases.php');
-}
-
-// Keywords not allowed in names
-$reserved_keywords = array("all", "pass", "block", "out", "queue", "max", "min", "pptp", "pppoe", "L2TP", "OpenVPN", "IPsec");
-
-// Add all Load balance names to reserved_keywords
-if (is_array($config['load_balancer']['lbpool'])) {
- foreach ($config['load_balancer']['lbpool'] as $lbpool) {
- $reserved_keywords[] = $lbpool['name'];
- }
-}
-
-$reserved_ifs = get_configured_interface_list(false, true);
-$reserved_keywords = array_merge($reserved_keywords, $reserved_ifs, $reserved_table_names);
-$max_alias_addresses = 5000;
-
-if (!is_array($config['aliases']['alias'])) {
- $config['aliases']['alias'] = array();
-}
-$a_aliases = &$config['aliases']['alias'];
-
-$tab = $_REQUEST['tab'];
-
-if ($_POST) {
- $origname = $_POST['origname'];
-}
-
-// Debugging
-if ($debug) {
- unlink_if_exists("{$g['tmp_path']}/alias_rename_log.txt");
-}
-
-function alias_same_type($name, $type) {
- global $config;
-
- foreach ($config['aliases']['alias'] as $alias) {
- if ($name == $alias['name']) {
- if (in_array($type, array("host", "network")) &&
- in_array($alias['type'], array("host", "network"))) {
- return true;
- }
- if ($type == $alias['type']) {
- return true;
- } else {
- return false;
- }
- }
- }
- return true;
-}
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_aliases[$id]) {
- $original_alias_name = $a_aliases[$id]['name'];
- $pconfig['name'] = $a_aliases[$id]['name'];
- $pconfig['detail'] = $a_aliases[$id]['detail'];
- $pconfig['address'] = $a_aliases[$id]['address'];
- $pconfig['type'] = $a_aliases[$id]['type'];
- $pconfig['descr'] = html_entity_decode($a_aliases[$id]['descr']);
-
- if (preg_match("/urltable/i", $a_aliases[$id]['type'])) {
- $pconfig['address'] = $a_aliases[$id]['url'];
- $pconfig['updatefreq'] = $a_aliases[$id]['updatefreq'];
- }
- if ($a_aliases[$id]['aliasurl'] <> "") {
- if (is_array($a_aliases[$id]['aliasurl'])) {
- $pconfig['address'] = implode(" ", $a_aliases[$id]['aliasurl']);
- } else {
- $pconfig['address'] = $a_aliases[$id]['aliasurl'];
- }
- }
-}
-
-if ($_POST) {
- unset($input_errors);
- $vertical_bar_err_text = gettext("Vertical bars (|) at start or end, or double in the middle of descriptions not allowed. Descriptions have been cleaned. Check and save again.");
-
- /* input validation */
-
- $reqdfields = explode(" ", "name");
- $reqdfieldsn = array(gettext("Name"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- $x = is_validaliasname($_POST['name']);
- if (!isset($x)) {
- $input_errors[] = gettext("Reserved word used for alias name.");
- } else if ($_POST['type'] == "port" && (getservbyname($_POST['name'], "tcp") || getservbyname($_POST['name'], "udp"))) {
- $input_errors[] = gettext("Reserved word used for alias name.");
- } else {
- if (is_validaliasname($_POST['name']) == false) {
- $input_errors[] = gettext("The alias name must be less than 32 characters long, may not consist of only numbers, and may only contain the following characters") . " a-z, A-Z, 0-9, _.";
- }
- }
- /* check for name conflicts */
- if (empty($a_aliases[$id])) {
- foreach ($a_aliases as $alias) {
- if ($alias['name'] == $_POST['name']) {
- $input_errors[] = gettext("An alias with this name already exists.");
- break;
- }
- }
- }
-
- /* Check for reserved keyword names */
- foreach ($reserved_keywords as $rk) {
- if ($rk == $_POST['name']) {
- $input_errors[] = sprintf(gettext("Cannot use a reserved keyword as alias name %s"), $rk);
- }
- }
-
- /* check for name interface description conflicts */
- foreach ($config['interfaces'] as $interface) {
- if ($interface['descr'] == $_POST['name']) {
- $input_errors[] = gettext("An interface description with this name already exists.");
- break;
- }
- }
-
- $alias = array();
- $address = array();
- $final_address_details = array();
- $alias['name'] = $_POST['name'];
-
- if (preg_match("/urltable/i", $_POST['type'])) {
- $address = "";
-
- /* item is a url table type */
- if ($_POST['address0']) {
- /* fetch down and add in */
- $_POST['address0'] = trim($_POST['address0']);
- $address[] = $_POST['address0'];
- $alias['url'] = $_POST['address0'];
- $alias['updatefreq'] = $_POST['address_subnet0'] ? $_POST['address_subnet0'] : 7;
- if (!is_URL($alias['url']) || empty($alias['url'])) {
- $input_errors[] = gettext("You must provide a valid URL.");
- } elseif (!process_alias_urltable($alias['name'], $alias['url'], 0, true)) {
- $input_errors[] = gettext("Unable to fetch usable data.");
- }
- if ($_POST["detail0"] <> "") {
- if ((strpos($_POST["detail0"], "||") === false) && (substr($_POST["detail0"], 0, 1) != "|") && (substr($_POST["detail0"], -1, 1) != "|")) {
- $final_address_details[] = $_POST["detail0"];
- } else {
- /* Remove leading and trailing vertical bars and replace multiple vertical bars with single, */
- /* and put in the output array so the text is at least redisplayed for the user. */
- $final_address_details[] = preg_replace('/\|\|+/', '|', trim($_POST["detail0"], "|"));
- $input_errors[] = $vertical_bar_err_text;
- }
- } else {
- $final_address_details[] = sprintf(gettext("Entry added %s"), date('r'));
- }
- }
- } else if ($_POST['type'] == "url" || $_POST['type'] == "url_ports") {
- $desc_fmt_err_found = false;
-
- /* item is a url type */
- for ($x = 0; $x < $max_alias_addresses - 1; $x++) {
- $_POST['address' . $x] = trim($_POST['address' . $x]);
- if ($_POST['address' . $x]) {
- /* fetch down and add in */
- $temp_filename = tempnam("{$g['tmp_path']}/", "alias_import");
- unlink_if_exists($temp_filename);
- $verify_ssl = isset($config['system']['checkaliasesurlcert']);
- mkdir($temp_filename);
- download_file($_POST['address' . $x], $temp_filename . "/aliases", $verify_ssl);
-
- /* if the item is tar gzipped then extract */
- if (stristr($_POST['address' . $x], ".tgz")) {
- process_alias_tgz($temp_filename);
- } else if (stristr($_POST['address' . $x], ".zip")) {
- process_alias_unzip($temp_filename);
- }
-
- if (!isset($alias['aliasurl'])) {
- $alias['aliasurl'] = array();
- }
-
- $alias['aliasurl'][] = $_POST['address' . $x];
- if ($_POST["detail{$x}"] <> "") {
- if ((strpos($_POST["detail{$x}"], "||") === false) && (substr($_POST["detail{$x}"], 0, 1) != "|") && (substr($_POST["detail{$x}"], -1, 1) != "|")) {
- $final_address_details[] = $_POST["detail{$x}"];
- } else {
- /* Remove leading and trailing vertical bars and replace multiple vertical bars with single, */
- /* and put in the output array so the text is at least redisplayed for the user. */
- $final_address_details[] = preg_replace('/\|\|+/', '|', trim($_POST["detail{$x}"], "|"));
- if (!$desc_fmt_err_found) {
- $input_errors[] = $vertical_bar_err_text;
- $desc_fmt_err_found = true;
- }
- }
- } else {
- $final_address_details[] = sprintf(gettext("Entry added %s"), date('r'));
- }
-
- if (file_exists("{$temp_filename}/aliases")) {
- $address = parse_aliases_file("{$temp_filename}/aliases", $_POST['type'], 3000);
- if ($address == null) {
- /* nothing was found */
- $input_errors[] = sprintf(gettext("You must provide a valid URL. Could not fetch usable data from '%s'."), $_POST['address' . $x]);
- }
- mwexec("/bin/rm -rf " . escapeshellarg($temp_filename));
- } else {
- $input_errors[] = sprintf(gettext("URL '%s' is not valid."), $_POST['address' . $x]);
- }
- }
- }
- unset($desc_fmt_err_found);
- if ($_POST['type'] == "url_ports") {
- $address = group_ports($address);
- }
- } else {
- /* item is a normal alias type */
- $wrongaliases = "";
- $desc_fmt_err_found = false;
- $alias_address_count = 0;
- $input_addresses = array();
-
- // First trim and expand the input data.
- // Users can paste strings like "10.1.2.0/24 10.3.0.0/16 9.10.11.0/24" into an address box.
- // They can also put an IP range.
- // This loop expands out that stuff so it can easily be validated.
- for ($x = 0; $x < ($max_alias_addresses - 1); $x++) {
- if ($_POST["address{$x}"] <> "") {
- if ($_POST["detail{$x}"] <> "") {
- if ((strpos($_POST["detail{$x}"], "||") === false) && (substr($_POST["detail{$x}"], 0, 1) != "|") && (substr($_POST["detail{$x}"], -1, 1) != "|")) {
- $detail_text = $_POST["detail{$x}"];
- } else {
- /* Remove leading and trailing vertical bars and replace multiple vertical bars with single, */
- /* and put in the output array so the text is at least redisplayed for the user. */
- $detail_text = preg_replace('/\|\|+/', '|', trim($_POST["detail{$x}"], "|"));
- if (!$desc_fmt_err_found) {
- $input_errors[] = $vertical_bar_err_text;
- $desc_fmt_err_found = true;
- }
- }
- } else {
- $detail_text = sprintf(gettext("Entry added %s"), date('r'));
- }
- $address_items = explode(" ", trim($_POST["address{$x}"]));
- foreach ($address_items as $address_item) {
- $iprange_type = is_iprange($address_item);
- if ($iprange_type == 4) {
- list($startip, $endip) = explode('-', $address_item);
- if ($_POST['type'] == "network") {
- // For network type aliases, expand an IPv4 range into an array of subnets.
- $rangesubnets = ip_range_to_subnet_array($startip, $endip);
- foreach ($rangesubnets as $rangesubnet) {
- if ($alias_address_count > $max_alias_addresses) {
- break;
- }
- list($address_part, $subnet_part) = explode("/", $rangesubnet);
- $input_addresses[] = $address_part;
- $input_address_subnet[] = $subnet_part;
- $final_address_details[] = $detail_text;
- $alias_address_count++;
- }
- } else {
- // For host type aliases, expand an IPv4 range into a list of individual IPv4 addresses.
- $rangeaddresses = ip_range_to_address_array($startip, $endip, $max_alias_addresses - $alias_address_count);
- if (is_array($rangeaddresses)) {
- foreach ($rangeaddresses as $rangeaddress) {
- $input_addresses[] = $rangeaddress;
- $input_address_subnet[] = "";
- $final_address_details[] = $detail_text;
- $alias_address_count++;
- }
- } else {
- $input_errors[] = sprintf(gettext('Range is too large to expand into individual host IP addresses (%s)'), $address_item);
- $input_errors[] = sprintf(gettext('The maximum number of entries in an alias is %s'), $max_alias_addresses);
- // Put the user-entered data in the output anyway, so it will be re-displayed for correction.
- $input_addresses[] = $address_item;
- $input_address_subnet[] = "";
- $final_address_details[] = $detail_text;
- }
- }
- } else if ($iprange_type == 6) {
- $input_errors[] = sprintf(gettext('IPv6 address ranges are not supported (%s)'), $address_item);
- // Put the user-entered data in the output anyway, so it will be re-displayed for correction.
- $input_addresses[] = $address_item;
- $input_address_subnet[] = "";
- $final_address_details[] = $detail_text;
- } else {
- $subnet_type = is_subnet($address_item);
- if (($_POST['type'] == "host") && $subnet_type) {
- if ($subnet_type == 4) {
- // For host type aliases, if the user enters an IPv4 subnet, expand it into a list of individual IPv4 addresses.
- if (subnet_size($address_item) <= ($max_alias_addresses - $alias_address_count)) {
- $rangeaddresses = subnetv4_expand($address_item);
- foreach ($rangeaddresses as $rangeaddress) {
- $input_addresses[] = $rangeaddress;
- $input_address_subnet[] = "";
- $final_address_details[] = $detail_text;
- $alias_address_count++;
- }
- } else {
- $input_errors[] = sprintf(gettext('Subnet is too large to expand into individual host IP addresses (%s)'), $address_item);
- $input_errors[] = sprintf(gettext('The maximum number of entries in an alias is %s'), $max_alias_addresses);
- // Put the user-entered data in the output anyway, so it will be re-displayed for correction.
- $input_addresses[] = $address_item;
- $input_address_subnet[] = "";
- $final_address_details[] = $detail_text;
- }
- } else {
- $input_errors[] = sprintf(gettext('IPv6 subnets are not supported in host aliases (%s)'), $address_item);
- // Put the user-entered data in the output anyway, so it will be re-displayed for correction.
- $input_addresses[] = $address_item;
- $input_address_subnet[] = "";
- $final_address_details[] = $detail_text;
- }
- } else {
- list($address_part, $subnet_part) = explode("/", $address_item);
- if (!empty($subnet_part)) {
- if (is_subnet($address_item)) {
- $input_addresses[] = $address_part;
- $input_address_subnet[] = $subnet_part;
- } else {
- // The user typed something like "1.2.3.444/24" or "1.2.3.0/36" or similar rubbish.
- // Feed it through without splitting it apart, then it will be caught by the validation loop below.
- $input_addresses[] = $address_item;
- $input_address_subnet[] = "";
- }
- } else {
- $input_addresses[] = $address_part;
- $input_address_subnet[] = $_POST["address_subnet{$x}"];
- }
- $final_address_details[] = $detail_text;
- $alias_address_count++;
- }
- }
- if ($alias_address_count > $max_alias_addresses) {
- $input_errors[] = sprintf(gettext('The maximum number of entries in an alias has been exceeded (%s)'), $max_alias_addresses);
- break;
- }
- }
- }
- }
-
- // Validate the input data expanded above.
- foreach ($input_addresses as $idx => $input_address) {
- if (is_alias($input_address)) {
- if (!alias_same_type($input_address, $_POST['type'])) {
- // But alias type network can include alias type urltable. Feature#1603.
- if (!($_POST['type'] == 'network' &&
- preg_match("/urltable/i", alias_get_type($input_address)))) {
- $wrongaliases .= " " . $input_address;
- }
- }
- } else if ($_POST['type'] == "port") {
- if (!is_port($input_address) && !is_portrange($input_address)) {
- $input_errors[] = $input_address . " " . gettext("is not a valid port or alias.");
- }
- } else if ($_POST['type'] == "host" || $_POST['type'] == "network") {
- if (is_subnet($input_address) ||
- (!is_ipaddr($input_address) && !is_hostname($input_address))) {
- $input_errors[] = sprintf(gettext('%1$s is not a valid %2$s address, FQDN or alias.'), $input_address, $_POST['type']);
- }
- }
- $tmpaddress = $input_address;
- if ($_POST['type'] != "host" && is_ipaddr($input_address) && $input_address_subnet[$idx] <> "") {
- if (!is_subnet($input_address . "/" . $input_address_subnet[$idx])) {
- $input_errors[] = sprintf(gettext('%s/%s is not a valid subnet.'), $input_address, $input_address_subnet[$idx]);
- } else {
- $tmpaddress .= "/" . $input_address_subnet[$idx];
- }
- }
- $address[] = $tmpaddress;
- }
- unset($desc_fmt_err_found);
- if ($wrongaliases <> "") {
- $input_errors[] = sprintf(gettext('The alias(es): %s cannot be nested because they are not of the same type.'), $wrongaliases);
- }
- }
-
- unset($vertical_bar_err_text);
-
- // Allow extending of the firewall edit page and include custom input validation
- pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/input_validation");
-
- if (!$input_errors) {
- $alias['address'] = is_array($address) ? implode(" ", $address) : $address;
- $alias['descr'] = $_POST['descr'];
- $alias['type'] = $_POST['type'];
- $alias['detail'] = implode("||", $final_address_details);
-
- /* Check to see if alias name needs to be
- * renamed on referenced rules and such
- */
- if ($_POST['name'] <> $_POST['origname']) {
- // Firewall rules
- update_alias_names_upon_change(array('filter', 'rule'), array('source', 'address'), $_POST['name'], $origname);
- update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
- update_alias_names_upon_change(array('filter', 'rule'), array('source', 'port'), $_POST['name'], $origname);
- update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'port'), $_POST['name'], $origname);
- // NAT Rules
- update_alias_names_upon_change(array('nat', 'rule'), array('source', 'address'), $_POST['name'], $origname);
- update_alias_names_upon_change(array('nat', 'rule'), array('source', 'port'), $_POST['name'], $origname);
- update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
- update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'port'), $_POST['name'], $origname);
- update_alias_names_upon_change(array('nat', 'rule'), array('target'), $_POST['name'], $origname);
- update_alias_names_upon_change(array('nat', 'rule'), array('local-port'), $_POST['name'], $origname);
- // NAT 1:1 Rules
- //update_alias_names_upon_change(array('nat', 'onetoone'), array('external'), $_POST['name'], $origname);
- //update_alias_names_upon_change(array('nat', 'onetoone'), array('source', 'address'), $_POST['name'], $origname);
- update_alias_names_upon_change(array('nat', 'onetoone'), array('destination', 'address'), $_POST['name'], $origname);
- // NAT Outbound Rules
- update_alias_names_upon_change(array('nat', 'outbound', 'rule'), array('source', 'network'), $_POST['name'], $origname);
- update_alias_names_upon_change(array('nat', 'outbound', 'rule'), array('sourceport'), $_POST['name'], $origname);
- update_alias_names_upon_change(array('nat', 'outbound', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
- update_alias_names_upon_change(array('nat', 'outbound', 'rule'), array('dstport'), $_POST['name'], $origname);
- update_alias_names_upon_change(array('nat', 'outbound', 'rule'), array('target'), $_POST['name'], $origname);
- // Alias in an alias
- update_alias_names_upon_change(array('aliases', 'alias'), array('address'), $_POST['name'], $origname);
- }
-
- pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/pre_write_config");
-
- if (isset($id) && $a_aliases[$id]) {
- if ($a_aliases[$id]['name'] <> $alias['name']) {
- foreach ($a_aliases as $aliasid => $aliasd) {
- if ($aliasd['address'] <> "") {
- $tmpdirty = false;
- $tmpaddr = explode(" ", $aliasd['address']);
- foreach ($tmpaddr as $tmpidx => $tmpalias) {
- if ($tmpalias == $a_aliases[$id]['name']) {
- $tmpaddr[$tmpidx] = $alias['name'];
- $tmpdirty = true;
- }
- }
- if ($tmpdirty == true) {
- $a_aliases[$aliasid]['address'] = implode(" ", $tmpaddr);
- }
- }
- }
- }
- $a_aliases[$id] = $alias;
- } else {
- $a_aliases[] = $alias;
- }
-
- // Sort list
- $a_aliases = msort($a_aliases, "name");
-
- if (write_config()) {
- mark_subsystem_dirty('aliases');
- }
-
- if (!empty($tab)) {
- header("Location: firewall_aliases.php?tab=" . htmlspecialchars ($tab));
- } else {
- header("Location: firewall_aliases.php");
- }
- exit;
- } else {
- //we received input errors, copy data to prevent retype
- $pconfig['name'] = $_POST['name'];
- $pconfig['descr'] = $_POST['descr'];
- if (($_POST['type'] == 'url') || ($_POST['type'] == 'url_ports')) {
- $pconfig['address'] = implode(" ", $alias['aliasurl']);
- } else {
- $pconfig['address'] = implode(" ", $address);
- }
- $pconfig['type'] = $_POST['type'];
- $pconfig['detail'] = implode("||", $final_address_details);
- }
-}
-
-include("head.inc");
-
-$jscriptstr = <<<EOD
-
-<script type="text/javascript">
-//<![CDATA[
-var objAlias = new Array(4999);
-function typesel_change() {
- var field_disabled = 0;
- var field_value = "";
- var set_value = false;
- switch (document.iform.type.selectedIndex) {
- case 0: /* host */
- field_disabled = 1;
- field_value = "";
- set_value = true;
- break;
- case 1: /* network */
- field_disabled = 0;
- break;
- case 2: /* port */
- field_disabled = 1;
- field_value = "128";
- set_value = true;
- break;
- case 3: /* url */
- field_disabled = 1;
- break;
- case 4: /* url_ports */
- field_disabled = 1;
- break;
- case 5: /* urltable */
- field_disabled = 0;
- break;
- case 6: /* urltable_ports */
- field_disabled = 0;
- break;
- }
-
- jQuery("select[id^='address_subnet']").prop("disabled", field_disabled);
- if (set_value == true) {
- jQuery("select[id^='address_subnet']").prop("value", field_value);
- }
-}
-
-function add_alias_control() {
- var name = "address" + (totalrows - 1);
- obj = document.getElementById(name);
- obj.setAttribute('class', 'formfldalias');
- obj.setAttribute('autocomplete', 'off');
- objAlias[totalrows - 1] = new AutoSuggestControl(obj, new StateSuggestions(addressarray));
-}
-EOD;
-
-$network_str = gettext("Network or FQDN");
-$networks_str = gettext("Network(s)");
-$cidr_str = gettext("CIDR");
-$description_str = gettext("Description");
-$hosts_str = gettext("Host(s)");
-$ip_str = gettext("IP or FQDN");
-$ports_str = gettext("Port(s)");
-$port_str = gettext("Port");
-$url_str = gettext("URL (IPs)");
-$url_ports_str = gettext("URL (Ports)");
-$urltable_str = gettext("URL Table (IPs)");
-$urltable_ports_str = gettext("URL Table (Ports)");
-$update_freq_str = gettext("Update Freq. (days)");
-
-$networks_help = gettext("Networks are specified in CIDR format. Select the CIDR mask that pertains to each entry. /32 specifies a single IPv4 host, /128 specifies a single IPv6 host, /24 specifies 255.255.255.0, /64 specifies a normal IPv6 network, etc. Hostnames (FQDNs) may also be specified, using a /32 mask for IPv4 or /128 for IPv6. You may also enter an IP range such as 192.168.1.1-192.168.1.254 and a list of CIDR networks will be derived to fill the range.");
-$hosts_help = gettext("Enter as many hosts as you would like. Hosts must be specified by their IP address or fully qualified domain name (FQDN). FQDN hostnames are periodically re-resolved and updated. If multiple IPs are returned by a DNS query, all are used. You may also enter an IP range such as 192.168.1.1-192.168.1.10 or a small subnet such as 192.168.1.16/28 and a list of individual IP addresses will be generated.");
-$ports_help = gettext("Enter as many ports as you wish. Port ranges can be expressed by separating with a colon.");
-$url_help = sprintf(gettext("Enter as many URLs as you wish. After saving %s will download the URL and import the items into the alias. Use only with small sets of IP addresses (less than 3000)."), $g['product_name']);
-$url_ports_help = sprintf(gettext("Enter as many URLs as you wish. After saving %s will download the URL and import the items into the alias. Use only with small sets of Ports (less than 3000)."), $g['product_name']);
-$urltable_help = sprintf(gettext("Enter a single URL containing a large number of IPs and/or Subnets. After saving %s will download the URL and create a table file containing these addresses. This will work with large numbers of addresses (30,000+) or small numbers."), $g['product_name']);
-$urltable_ports_help = sprintf(gettext("Enter a single URL containing a list of Port numbers and/or Port ranges. After saving %s will download the URL."), $g['product_name']);
-
-$openvpn_str = gettext("Username");
-$openvpn_user_str = gettext("OpenVPN Users");
-$openvpn_help = gettext("Enter as many usernames as you wish.");
-$openvpn_freq = "";
-
-$jscriptstr .= <<<EOD
-
-function update_box_type() {
- var indexNum = document.forms[0].type.selectedIndex;
- var selected = document.forms[0].type.options[indexNum].text;
- if (selected == '{$networks_str}') {
- document.getElementById ("addressnetworkport").firstChild.data = "{$networks_str}";
- document.getElementById ("onecolumn").firstChild.data = "{$network_str}";
- document.getElementById ("twocolumn").firstChild.data = "{$cidr_str}";
- document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
- document.getElementById ("threecolumn").style.display = 'block';
- document.getElementById ("itemhelp").firstChild.data = "{$networks_help}";
- document.getElementById ("addrowbutton").style.display = 'block';
- } else if (selected == '{$hosts_str}') {
- document.getElementById ("addressnetworkport").firstChild.data = "{$hosts_str}";
- document.getElementById ("onecolumn").firstChild.data = "{$ip_str}";
- document.getElementById ("twocolumn").firstChild.data = "";
- document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
- document.getElementById ("threecolumn").style.display = 'block';
- document.getElementById ("itemhelp").firstChild.data = "{$hosts_help}";
- document.getElementById ("addrowbutton").style.display = 'block';
- } else if (selected == '{$ports_str}') {
- document.getElementById ("addressnetworkport").firstChild.data = "{$ports_str}";
- document.getElementById ("onecolumn").firstChild.data = "{$port_str}";
- document.getElementById ("twocolumn").firstChild.data = "";
- document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
- document.getElementById ("threecolumn").style.display = 'block';
- document.getElementById ("itemhelp").firstChild.data = "{$ports_help}";
- document.getElementById ("addrowbutton").style.display = 'block';
- } else if (selected == '{$url_str}') {
- document.getElementById ("addressnetworkport").firstChild.data = "{$url_str}";
- document.getElementById ("onecolumn").firstChild.data = "{$url_str}";
- document.getElementById ("twocolumn").firstChild.data = "";
- document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
- document.getElementById ("threecolumn").style.display = 'block';
- document.getElementById ("itemhelp").firstChild.data = "{$url_help}";
- document.getElementById ("addrowbutton").style.display = 'block';
- } else if (selected == '{$url_ports_str}') {
- document.getElementById ("addressnetworkport").firstChild.data = "{$url_ports_str}";
- document.getElementById ("onecolumn").firstChild.data = "{$url_ports_str}";
- document.getElementById ("twocolumn").firstChild.data = "";
- document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
- document.getElementById ("threecolumn").style.display = 'block';
- document.getElementById ("itemhelp").firstChild.data = "{$url_ports_help}";
- document.getElementById ("addrowbutton").style.display = 'block';
- } else if (selected == '{$openvpn_user_str}') {
- document.getElementById ("addressnetworkport").firstChild.data = "{$openvpn_user_str}";
- document.getElementById ("onecolumn").firstChild.data = "{$openvpn_str}";
- document.getElementById ("twocolumn").firstChild.data = "{$openvpn_freq}";
- document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
- document.getElementById ("threecolumn").style.display = 'block';
- document.getElementById ("itemhelp").firstChild.data = "{$openvpn_help}";
- document.getElementById ("addrowbutton").style.display = 'block';
- } else if (selected == '{$urltable_str}') {
- if ((typeof(totalrows) == "undefined") || (totalrows < 1)) {
- addRowTo('maintable', 'formfldalias');
- typesel_change();
- add_alias_control(this);
- }
- document.getElementById ("addressnetworkport").firstChild.data = "{$urltable_str}";
- document.getElementById ("onecolumn").firstChild.data = "{$urltable_str}";
- document.getElementById ("twocolumn").firstChild.data = "{$update_freq_str}";
- document.getElementById ("threecolumn").firstChild.data = "";
- document.getElementById ("threecolumn").style.display = 'none';
- document.getElementById ("itemhelp").firstChild.data = "{$urltable_help}";
- document.getElementById ("addrowbutton").style.display = 'none';
- } else if (selected == '{$urltable_ports_str}') {
- if ((typeof(totalrows) == "undefined") || (totalrows < 1)) {
- addRowTo('maintable', 'formfldalias');
- typesel_change();
- add_alias_control(this);
- }
- document.getElementById ("addressnetworkport").firstChild.data = "{$urltable_ports_str}";
- document.getElementById ("onecolumn").firstChild.data = "{$urltable_ports_str}";
- document.getElementById ("twocolumn").firstChild.data = "{$update_freq_str}";
- document.getElementById ("threecolumn").firstChild.data = "";
- document.getElementById ("threecolumn").style.display = 'none';
- document.getElementById ("itemhelp").firstChild.data = "{$urltable_ports_help}";
- document.getElementById ("addrowbutton").style.display = 'none';
- }
-}
-//]]>
-</script>
-
-EOD;
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php
- include("fbegin.inc");
- echo $jscriptstr;
-?>
-
-<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
-<script type="text/javascript" src="/javascript/row_helper.js"></script>
-<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
-<script type="text/javascript" src="/javascript/suggestions.js"></script>
-
-<input type='hidden' name='address_type' value='textbox' />
-<input type='hidden' name='address_subnet_type' value='select' />
-
-<script type="text/javascript">
-//<![CDATA[
- rowname[0] = "address";
- rowtype[0] = "textbox,ipv4v6";
- rowsize[0] = "30";
-
- rowname[1] = "address_subnet";
- rowtype[1] = "select,ipv4v6";
- rowsize[1] = "1";
-
- rowname[2] = "detail";
- rowtype[2] = "textbox";
- rowsize[2] = "50";
-//]]>
-</script>
-
-<?php pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/pre_input_errors"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<div id="inputerrors"></div>
-
-<form action="firewall_aliases_edit.php" method="post" name="iform" id="iform">
-<?php
-if (empty($tab)) {
- if (preg_match("/url/i", $pconfig['type'])) {
- $tab = 'url';
- } else if ($pconfig['type'] == 'host') {
- $tab = 'ip';
- } else {
- $tab = $pconfig['type'];
- }
-}
-?>
-<input name="tab" type="hidden" id="tab" value="<?=htmlspecialchars($tab);?>" />
-<table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="firewall aliases edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Alias Edit"); ?></td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
- <td class="vtable">
- <input name="origname" type="hidden" id="origname" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['name']);?>" />
- <input name="name" type="text" id="name" class="formfld unknown" size="40" maxlength="31" value="<?=htmlspecialchars($pconfig['name']);?>" />
- <?php if (isset($id) && $a_aliases[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- <br />
- <span class="vexpl">
- <?=gettext("The name of the alias may only consist of the characters \"a-z, A-Z, 0-9 and _\"."); ?>
- </span>
- </td>
- </tr>
- <?php pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/after_first_tr"); ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed)."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Type"); ?></td>
- <td class="vtable">
- <select name="type" class="formselect" id="type" onchange="update_box_type(); typesel_change();">
- <option value="host" <?php if ($pconfig['type'] == "host") echo "selected=\"selected\""; ?>><?=gettext("Host(s)"); ?></option>
- <option value="network" <?php if ($pconfig['type'] == "network") echo "selected=\"selected\""; ?>><?=gettext("Network(s)"); ?></option>
- <option value="port" <?php if (($pconfig['type'] == "port") || (empty($pconfig['type']) && ($tab == "port"))) echo "selected=\"selected\""; ?>><?=gettext("Port(s)"); ?></option>
- <!--<option value="openvpn" <?php if ($pconfig['type'] == "openvpn") echo "selected=\"selected\""; ?>><?=gettext("OpenVPN Users"); ?></option> -->
- <option value="url" <?php if (($pconfig['type'] == "url") || (empty($pconfig['type']) && ($tab == "url"))) echo "selected=\"selected\""; ?>><?=gettext("URL (IPs)");?></option>
- <option value="url_ports" <?php if ($pconfig['type'] == "url_ports") echo "selected=\"selected\""; ?>><?=gettext("URL (Ports)");?></option>
- <option value="urltable" <?php if ($pconfig['type'] == "urltable") echo "selected=\"selected\""; ?>><?=gettext("URL Table (IPs)"); ?></option>
- <option value="urltable_ports" <?php if ($pconfig['type'] == "urltable_ports") echo "selected=\"selected\""; ?>><?=gettext("URL Table (Ports)"); ?></option>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><div id="addressnetworkport"><?=gettext("Host(s)"); ?></div></td>
- <td width="78%" class="vtable">
- <table id="maintable" summary="maintable">
- <tbody>
- <tr>
- <td colspan="4">
- <div style="padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066; background-color: #ffffff; color: #000000; font-size: 8pt;" id="itemhelp"><?=gettext("Item information"); ?></div>
- </td>
- </tr>
- <tr>
- <td><div id="onecolumn"><?=gettext("Network"); ?></div></td>
- <td><div id="twocolumn">CIDR</div></td>
- <td><div id="threecolumn"><?=gettext("Description"); ?></div></td>
- </tr>
-
- <?php
- $counter = 0;
- if ($pconfig['address'] <> ""):
- $addresses = explode(" ", $pconfig['address']);
- $details = explode("||", $pconfig['detail']);
- while ($counter < count($addresses)):
- if (($pconfig['type'] != "host") && is_subnet($addresses[$counter])) {
- list($address, $address_subnet) = explode("/", $addresses[$counter]);
- } else {
- $address = $addresses[$counter];
- $address_subnet = "";
- }
- ?>
- <tr>
- <td>
- <input autocomplete="off" name="address<?php echo $counter; ?>" type="text" class="formfldalias ipv4v6" id="address<?php echo $counter; ?>" size="30" value="<?=htmlspecialchars($address);?>" />
- </td>
- <td>
- <select name="address_subnet<?php echo $counter; ?>" class="formselect ipv4v6" id="address_subnet<?php echo $counter; ?>">
- <option></option>
- <?php for ($i = 128; $i >= 1; $i--): ?>
- <option value="<?=$i;?>" <?php if (($i == $address_subnet) || ($i == $pconfig['updatefreq'])) echo "selected=\"selected\""; ?>><?=$i;?></option>
- <?php endfor; ?>
- </select>
- </td>
- <td>
- <input name="detail<?php echo $counter; ?>" type="text" class="formfld unknown" id="detail<?php echo $counter; ?>" size="50" value="<?=htmlspecialchars($details[$counter]);?>" />
- </td>
- <td>
- <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="" title="<?=gettext("remove this entry"); ?>" /></a>
- </td>
- </tr>
- <?php
- $counter++;
-
- endwhile;
- endif;
- ?>
- </tbody>
- </table>
- <div id="addrowbutton">
- <a onclick="javascript:addRowTo('maintable', 'formfldalias'); typesel_change(); add_alias_control(this); return false;" href="#">
- <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry"); ?>" />
- </a>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- </td>
- </tr>
-</table>
-</form>
-
-<script type="text/javascript">
-//<![CDATA[
- field_counter_js = 3;
- rows = 1;
- totalrows = <?php echo $counter; ?>;
- loaded = <?php echo $counter; ?>;
- typesel_change();
- update_box_type();
-
- var addressarray = <?= json_encode(array_exclude($pconfig['name'], get_alias_list($pconfig['type']))) ?>;
-
- function createAutoSuggest() {
- <?php
- for ($jv = 0; $jv < $counter; $jv++) {
- echo "objAlias[{$jv}] = new AutoSuggestControl(document.getElementById(\"address{$jv}\"), new StateSuggestions(addressarray));\n";
- }
- ?>
- }
-
- setTimeout("createAutoSuggest();", 500);
-//]]>
-</script>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_aliases_import.php b/usr/local/www/firewall_aliases_import.php
deleted file mode 100755
index 868f5eb..0000000
--- a/usr/local/www/firewall_aliases_import.php
+++ /dev/null
@@ -1,246 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_aliases_import.php
- Copyright (C) 2005 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: filter
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-alias-import
-##|*NAME=Firewall: Alias: Import page
-##|*DESCR=Allow access to the 'Firewall: Alias: Import' page.
-##|*MATCH=firewall_aliases_import.php*
-##|-PRIV
-
-
-// Keywords not allowed in names
-$reserved_keywords = array("all", "pass", "block", "out", "queue", "max", "min", "pptp", "pppoe", "L2TP", "OpenVPN", "IPsec");
-
-require("guiconfig.inc");
-require_once("util.inc");
-require_once("filter.inc");
-require("shaper.inc");
-
-$pgtitle = array(gettext("Firewall"), gettext("Aliases"), gettext("Bulk import"));
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_aliases.php');
-}
-
-// Add all Load balance names to reserved_keywords
-if (is_array($config['load_balancer']['lbpool'])) {
- foreach ($config['load_balancer']['lbpool'] as $lbpool) {
- $reserved_keywords[] = $lbpool['name'];
- }
-}
-
-$reserved_ifs = get_configured_interface_list(false, true);
-$reserved_keywords = array_merge($reserved_keywords, $reserved_ifs, $reserved_table_names);
-
-if (!is_array($config['aliases']['alias'])) {
- $config['aliases']['alias'] = array();
-}
-$a_aliases = &$config['aliases']['alias'];
-
-if ($_POST) {
- $reqdfields = explode(" ", "name aliasimport");
- $reqdfieldsn = array(gettext("Name"), gettext("Aliases"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (is_validaliasname($_POST['name']) == false) {
- $input_errors[] = gettext("The alias name may only consist of the characters") . " a-z, A-Z, 0-9, _.";
- }
-
- /* check for name duplicates */
- if (is_alias($_POST['name'])) {
- $input_errors[] = gettext("An alias with this name already exists.");
- }
-
-
- /* Check for reserved keyword names */
- foreach ($reserved_keywords as $rk) {
- if ($rk == $_POST['name']) {
- $input_errors[] = sprintf(gettext("Cannot use a reserved keyword as alias name %s"), $rk);
- }
- }
-
- /* check for name interface description conflicts */
- foreach ($config['interfaces'] as $interface) {
- if ($interface['descr'] == $_POST['name']) {
- $input_errors[] = gettext("An interface description with this name already exists.");
- break;
- }
- }
-
- if ($_POST['aliasimport']) {
- $tocheck = explode("\n", $_POST['aliasimport']);
- $imported_ips = array();
- $imported_descs = array();
- $desc_len_err_found = false;
- $desc_fmt_err_found = false;
- foreach ($tocheck as $impline) {
- $implinea = explode(" ", trim($impline), 2);
- $impip = $implinea[0];
- $impdesc = trim($implinea[1]);
- if (strlen($impdesc) < 200) {
- if ((strpos($impdesc, "||") === false) && (substr($impdesc, 0, 1) != "|") && (substr($impdesc, -1, 1) != "|")) {
- $iprange_type = is_iprange($impip);
- if ($iprange_type == 4) {
- list($startip, $endip) = explode('-', $impip);
- $rangesubnets = ip_range_to_subnet_array($startip, $endip);
- $imported_ips = array_merge($imported_ips, $rangesubnets);
- $rangedescs = array_fill(0, count($rangesubnets), $impdesc);
- $imported_descs = array_merge($imported_descs, $rangedescs);
- } else if ($iprange_type == 6) {
- $input_errors[] = sprintf(gettext('IPv6 address ranges are not supported (%s)'), $impip);
- } else if (!is_ipaddr($impip) && !is_subnet($impip) && !is_hostname($impip) && !empty($impip)) {
- $input_errors[] = sprintf(gettext("%s is not an IP address. Please correct the error to continue"), $impip);
- } elseif (!empty($impip)) {
- $imported_ips[] = $impip;
- $imported_descs[] = $impdesc;
- }
- } else {
- if (!$desc_fmt_err_found) {
- $input_errors[] = gettext("Descriptions may not start or end with vertical bar (|) or contain double vertical bar ||.");
- $desc_fmt_err_found = true;
- }
- }
- } else {
- if (!$desc_len_err_found) {
- /* Note: The 200 character limit is just a practical check to avoid accidents */
- /* if the user pastes a large number of IP addresses without line breaks. */
- $input_errors[] = gettext("Descriptions must be less than 200 characters long.");
- $desc_len_err_found = true;
- }
- }
- }
- unset($desc_len_err_found, $desc_fmt_err_found);
- }
-
- if (!$input_errors && is_array($imported_ips)) {
- $alias = array();
- $alias['address'] = implode(" ", $imported_ips);
- $alias['detail'] = implode("||", $imported_descs);
- $alias['name'] = $_POST['name'];
- $alias['type'] = "network";
- $alias['descr'] = $_POST['descr'];
- unset($imported_ips, $imported_descs);
- $a_aliases[] = $alias;
-
- // Sort list
- $a_aliases = msort($a_aliases, "name");
-
- if (write_config()) {
- mark_subsystem_dirty('aliases');
- }
- pfSenseHeader("firewall_aliases.php");
-
- exit;
- }
-}
-
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<div id="niftyOutter">
-<form action="firewall_aliases_import.php" method="post" name="iform" id="iform">
-<div id="inputerrors"></div>
-<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="firewall alias import">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Alias Import"); ?></td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Alias Name"); ?></td>
- <td class="vtable">
- <input name="name" type="text" class="formfld unknown" id="name" size="40" maxlength="31" value="<?=htmlspecialchars($_POST['name']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("The name of the alias may only consist of the characters \"a-z, A-Z and 0-9\"."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($_POST['descr']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed)"); ?>.
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Aliases to import"); ?></td>
- <td class="vtable">
- <textarea name="aliasimport" rows="15" cols="40"><?php echo $_POST['aliasimport']; ?></textarea>
- <br />
- <span class="vexpl">
- <?=gettext("Paste in the aliases to import separated by a carriage return. Common examples are lists of IPs, networks, blacklists, etc."); ?>
- <br />
- <?=gettext("The list may contain IP addresses, with or without CIDR prefix, IP ranges, blank lines (ignored) and an optional description after each IP. e.g.:"); ?>
- <br />172.16.1.2
- <br />172.16.0.0/24
- <br />10.11.12.100-10.11.12.200
- <br />192.168.1.254 Home router
- <br />10.20.0.0/16 Office network
- <br />10.40.1.10-10.40.1.19 Managed switches
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- </td>
- </tr>
-</table>
-
-
-</form>
-</div>
-
-<?php include("fend.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
- NiftyCheck();
- Rounded("div#nifty","top","#FFF","#EEEEEE","smooth");
-//]]>
-</script>
-
-</body>
-</html>
diff --git a/usr/local/www/firewall_nat.php b/usr/local/www/firewall_nat.php
deleted file mode 100644
index 70c8041..0000000
--- a/usr/local/www/firewall_nat.php
+++ /dev/null
@@ -1,399 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_nat.php
- Copyright (C) 2004 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: nat
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-nat-portforward
-##|*NAME=Firewall: NAT: Port Forward page
-##|*DESCR=Allow access to the 'Firewall: NAT: Port Forward' page.
-##|*MATCH=firewall_nat.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("itemid.inc");
-
-if (!is_array($config['nat']['rule'])) {
- $config['nat']['rule'] = array();
-}
-
-$a_nat = &$config['nat']['rule'];
-
-/* if a custom message has been passed along, lets process it */
-if ($_GET['savemsg']) {
- $savemsg = $_GET['savemsg'];
-}
-
-if ($_POST) {
-
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
-
- $retval = 0;
-
- $retval |= filter_configure();
- $savemsg = get_std_save_message($retval);
-
- pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/apply");
-
- if ($retval == 0) {
- clear_subsystem_dirty('natconf');
- clear_subsystem_dirty('filter');
- }
-
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($a_nat[$_GET['id']]) {
-
- if (isset($a_nat[$_GET['id']]['associated-rule-id'])) {
- delete_id($a_nat[$_GET['id']]['associated-rule-id'], $config['filter']['rule']);
- $want_dirty_filter = true;
- }
- unset($a_nat[$_GET['id']]);
-
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- if ($want_dirty_filter) {
- mark_subsystem_dirty('filter');
- }
- }
- header("Location: firewall_nat.php");
- exit;
- }
-}
-
-if (isset($_POST['del_x'])) {
- /* delete selected rules */
- if (is_array($_POST['rule']) && count($_POST['rule'])) {
- foreach ($_POST['rule'] as $rulei) {
- $target = $rule['target'];
- // Check for filter rule associations
- if (isset($a_nat[$rulei]['associated-rule-id'])) {
- delete_id($a_nat[$rulei]['associated-rule-id'], $config['filter']['rule']);
-
- mark_subsystem_dirty('filter');
- }
- unset($a_nat[$rulei]);
- }
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- }
- header("Location: firewall_nat.php");
- exit;
- }
-
-} else {
- /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
- unset($movebtn);
- foreach ($_POST as $pn => $pd) {
- if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
- $movebtn = $matches[1];
- break;
- }
- }
- /* move selected rules before this rule */
- if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) {
- $a_nat_new = array();
-
- /* copy all rules < $movebtn and not selected */
- for ($i = 0; $i < $movebtn; $i++) {
- if (!in_array($i, $_POST['rule'])) {
- $a_nat_new[] = $a_nat[$i];
- }
- }
-
- /* copy all selected rules */
- for ($i = 0; $i < count($a_nat); $i++) {
- if ($i == $movebtn) {
- continue;
- }
- if (in_array($i, $_POST['rule'])) {
- $a_nat_new[] = $a_nat[$i];
- }
- }
-
- /* copy $movebtn rule */
- if ($movebtn < count($a_nat)) {
- $a_nat_new[] = $a_nat[$movebtn];
- }
-
- /* copy all rules > $movebtn and not selected */
- for ($i = $movebtn+1; $i < count($a_nat); $i++) {
- if (!in_array($i, $_POST['rule'])) {
- $a_nat_new[] = $a_nat[$i];
- }
- }
- $a_nat = $a_nat_new;
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- }
- header("Location: firewall_nat.php");
- exit;
- }
-}
-
-$closehead = false;
-$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("Port Forward"));
-include("head.inc");
-
-echo "<script type=\"text/javascript\" src=\"/javascript/domTT/domLib.js\"></script>";
-echo "<script type=\"text/javascript\" src=\"/javascript/domTT/domTT.js\"></script>";
-echo "<script type=\"text/javascript\" src=\"/javascript/domTT/behaviour.js\"></script>";
-echo "<script type=\"text/javascript\" src=\"/javascript/domTT/fadomatic.js\"></script>";
-
-?>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="firewall_nat.php" method="post" name="iform">
-<script type="text/javascript" src="/javascript/row_toggle.js"></script>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('natconf')): ?>
-<?php print_info_box_np(gettext("The NAT configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall nat">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Port Forward"), true, "firewall_nat.php");
- $tab_array[] = array(gettext("1:1"), false, "firewall_nat_1to1.php");
- $tab_array[] = array(gettext("Outbound"), false, "firewall_nat_out.php");
- $tab_array[] = array(gettext("NPt"), false, "firewall_nat_npt.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr id="frheader">
- <td width="3%" class="list">&nbsp;</td>
- <td width="3%" class="list">&nbsp;</td>
- <td width="5%" class="listhdrr"><?=gettext("If");?></td>
- <td width="5%" class="listhdrr"><?=gettext("Proto");?></td>
- <td width="11%" class="listhdrr nowrap"><?=gettext("Src. addr");?></td>
- <td width="11%" class="listhdrr nowrap"><?=gettext("Src. ports");?></td>
- <td width="11%" class="listhdrr nowrap"><?=gettext("Dest. addr");?></td>
- <td width="11%" class="listhdrr nowrap"><?=gettext("Dest. ports");?></td>
- <td width="11%" class="listhdrr nowrap"><?=gettext("NAT IP");?></td>
- <td width="11%" class="listhdrr nowrap"><?=gettext("NAT Ports");?></td>
- <td width="11%" class="listhdr"><?=gettext("Description");?></td>
- <td width="5%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="list">
- <tr>
- <td width="17">
- <?php if (count($a_nat) == 0): ?>
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected rules");?>" border="0" alt="delete" />
- <?php else: ?>
- <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="<?=gettext("delete selected rules"); ?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected rules?");?>')" />
- <?php endif; ?>
- </td>
- <td><a href="firewall_nat_edit.php?after=-1"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <?php
- $nnats = $i = 0;
- foreach ($a_nat as $natent):
-
- //build Alias popup box
- $span_end = "</U></span>";
-
- $alias_popup = rule_popup($natent['source']['address'], pprint_port($natent['source']['port']), $natent['destination']['address'], pprint_port($natent['destination']['port']));
-
- $alias_src_span_begin = $alias_popup["src"];
- $alias_src_port_span_begin = $alias_popup["srcport"];
- $alias_dst_span_begin = $alias_popup["dst"];
- $alias_dst_port_span_begin = $alias_popup["dstport"];
-
- $alias_src_span_end = $alias_popup["src_end"];
- $alias_src_port_span_end = $alias_popup["srcport_end"];
- $alias_dst_span_end = $alias_popup["dst_end"];
- $alias_dst_port_span_end = $alias_popup["dstport_end"];
-
- $alias_popup = rule_popup("", "", $natent['target'], pprint_port($natent['local-port']));
-
- $alias_target_span_begin = $alias_popup["dst"];
- $alias_local_port_span_begin = $alias_popup["dstport"];
-
- $alias_target_span_end = $alias_popup["dst_end"];
- $alias_local_port_span_end = $alias_popup["dstport_end"];
-
- if (isset($natent['disabled'])) {
- $textss = "<span class=\"gray\">";
- } else {
- $textss = "<span>";
- }
-
- $textse = "</span>";
-
- /* if user does not have access to edit an interface skip on to the next record */
- if (!have_natpfruleint_access($natent['interface'])) {
- continue;
- }
- ?>
- <tr valign="top" id="fr<?=$nnats;?>">
- <td class="listt"><input type="checkbox" id="frc<?=$nnats;?>" name="rule[]" value="<?=$i;?>" onClick="fr_bgcolor('<?=$nnats;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" /></td>
- <td class="listt" align="center">
- <?php if ($natent['associated-rule-id'] == "pass"): ?>
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" title="<?=gettext("All traffic matching this NAT entry is passed"); ?>" border="0" alt="pass" />
- <?php elseif (!empty($natent['associated-rule-id'])): ?>
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_chain.png" width="17" height="17" title="<?=gettext("Firewall rule ID"); ?> <?=htmlspecialchars($nnatid); ?> <?=gettext("is managed with this rule"); ?>" border="0" alt="change" />
- <?php endif; ?>
- </td>
- <td class="listlr" onClick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
- <?=$textss;?>
- <?php
- if (!$natent['interface']) {
- echo htmlspecialchars(convert_friendly_interface_to_friendly_descr("wan"));
- } else {
- echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface']));
- }
- ?>
- <?=$textse;?>
- </td>
-
- <td class="listr" onclick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
- <?=$textss;?><?=strtoupper($natent['protocol']);?><?=$textse;?>
- </td>
-
- <td class="listr" onclick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
- <?=$textss;?><?php echo $alias_src_span_begin;?><?php echo htmlspecialchars(pprint_address($natent['source']));?><?php echo $alias_src_span_end;?><?=$textse;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
- <?=$textss;?><?php echo $alias_src_port_span_begin;?><?php echo htmlspecialchars(pprint_port($natent['source']['port']));?><?php echo $alias_src_port_span_end;?><?=$textse;?>
- </td>
-
- <td class="listr" onclick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
- <?=$textss;?><?php echo $alias_dst_span_begin;?><?php echo htmlspecialchars(pprint_address($natent['destination']));?><?php echo $alias_dst_span_end;?><?=$textse;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
- <?=$textss;?><?php echo $alias_dst_port_span_begin;?><?php echo htmlspecialchars(pprint_port($natent['destination']['port']));?><?php echo $alias_dst_port_span_end;?><?=$textse;?>
- </td>
-
- <td class="listr" onclick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
- <?=$textss;?><?php echo $alias_target_span_begin;?><?php echo htmlspecialchars($natent['target']);?><?php echo $alias_target_span_end;?><?=$textse;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
- <?php
- $localport = $natent['local-port'];
-
- list($dstbeginport, $dstendport) = explode("-", $natent['destination']['port']);
-
- if ($dstendport) {
- $localendport = $natent['local-port'] + $dstendport - $dstbeginport;
- $localport .= '-' . $localendport;
- }
- ?>
- <?=$textss;?><?php echo $alias_local_port_span_begin;?><?php echo htmlspecialchars(pprint_port($localport));?><?php echo $alias_local_port_span_end;?><?=$textse;?>
- </td>
-
- <td class="listbg" onclick="fr_toggle(<?=$nnats;?>)" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
- <?=$textss;?><?=htmlspecialchars($natent['descr']);?>&nbsp;<?=$textse;?>
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="move">
- <tr>
- <td><input onmouseover="fr_insline(<?=$nnats;?>, true)" onmouseout="fr_insline(<?=$nnats;?>, false)" name="move_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" title="<?=gettext("move selected rules before this rule");?>" height="17" type="image" width="17" border="0" /></td>
- <td><a href="firewall_nat_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit rule"); ?>"></a></td>
- </tr>
- <tr>
- <td align="center" valign="middle"><a href="firewall_nat.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this rule?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete rule");?>" alt="delete" /></a></td>
- <td><a href="firewall_nat_edit.php?dup=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add a new NAT based on this one");?>" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <?php
- $i++;
- $nnats++;
- endforeach;
- ?>
- <tr>
- <td class="list" colspan="8"></td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td class="list nowrap" valign="middle">
- <table border="0" cellspacing="0" cellpadding="1" summary="move">
- <tr>
- <td><?php if ($nnats == 0): ?><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected rules to end"); ?>" border="0" alt="move" /><?php else: ?><input name="move_<?=$i;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" style="width:17;height:17;border:0" title="<?=gettext("move selected rules to end");?>" /><?php endif; ?></td>
- </tr>
- <tr>
- <td width="17">
- <?php if (count($a_nat) == 0): ?>
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected rules");?>" border="0" alt="delete" />
- <?php else: ?>
- <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="<?=gettext("delete selected rules"); ?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected rules?");?>')" />
- <?php endif; ?>
- </td>
- <td><a href="firewall_nat_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <tr><td>&nbsp;</td></tr>
- <tr>
- <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" width="11" height="11" alt="pass" /></td>
- <td colspan="3"><?=gettext("pass"); ?></td>
- </tr>
- <tr>
- <td width="14"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_chain.png" width="11" height="11" alt="chain" /></td>
- <td colspan="3"><?=gettext("linked rule");?></td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-
-<?php
-if ($pkg['tabs'] <> "") {
- echo "</td></tr></table>";
-}
-?>
-
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_nat_1to1.php b/usr/local/www/firewall_nat_1to1.php
deleted file mode 100644
index 10b48dc..0000000
--- a/usr/local/www/firewall_nat_1to1.php
+++ /dev/null
@@ -1,371 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_nat_1to1.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: nat
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-nat-1-1
-##|*NAME=Firewall: NAT: 1:1 page
-##|*DESCR=Allow access to the 'Firewall: NAT: 1:1' page.
-##|*MATCH=firewall_nat_1to1.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-if (!is_array($config['nat']['onetoone'])) {
- $config['nat']['onetoone'] = array();
-}
-
-$a_1to1 = &$config['nat']['onetoone'];
-
-if ($_POST) {
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
- $retval = 0;
- $retval |= filter_configure();
- $savemsg = get_std_save_message($retval);
-
- if ($retval == 0) {
- clear_subsystem_dirty('natconf');
- clear_subsystem_dirty('filter');
- }
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($a_1to1[$_GET['id']]) {
- unset($a_1to1[$_GET['id']]);
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- }
- header("Location: firewall_nat_1to1.php");
- exit;
- }
-}
-
-if (isset($_POST['del_x'])) {
- /* delete selected rules */
- if (is_array($_POST['rule']) && count($_POST['rule'])) {
- foreach ($_POST['rule'] as $rulei) {
- unset($a_1to1[$rulei]);
- }
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- }
- header("Location: firewall_nat_1to1.php");
- exit;
- }
-
-} else if ($_GET['act'] == "toggle") {
- if ($a_1to1[$_GET['id']]) {
- if (isset($a_1to1[$_GET['id']]['disabled'])) {
- unset($a_1to1[$_GET['id']]['disabled']);
- } else {
- $a_1to1[$_GET['id']]['disabled'] = true;
- }
- if (write_config("Firewall: NAT: Outbound, enable/disable NAT rule")) {
- mark_subsystem_dirty('natconf');
- }
- header("Location: firewall_nat_1to1.php");
- exit;
- }
-} else {
- /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
- unset($movebtn);
- foreach ($_POST as $pn => $pd) {
- if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
- $movebtn = $matches[1];
- break;
- }
- }
- /* move selected rules before this rule */
- if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) {
- $a_1to1_new = array();
-
- /* copy all rules < $movebtn and not selected */
- for ($i = 0; $i < $movebtn; $i++) {
- if (!in_array($i, $_POST['rule'])) {
- $a_1to1_new[] = $a_1to1[$i];
- }
- }
-
- /* copy all selected rules */
- for ($i = 0; $i < count($a_1to1); $i++) {
- if ($i == $movebtn) {
- continue;
- }
- if (in_array($i, $_POST['rule'])) {
- $a_1to1_new[] = $a_1to1[$i];
- }
- }
-
- /* copy $movebtn rule */
- if ($movebtn < count($a_1to1)) {
- $a_1to1_new[] = $a_1to1[$movebtn];
- }
-
- /* copy all rules > $movebtn and not selected */
- for ($i = $movebtn+1; $i < count($a_1to1); $i++) {
- if (!in_array($i, $_POST['rule'])) {
- $a_1to1_new[] = $a_1to1[$i];
- }
- }
- if (count($a_1to1_new) > 0) {
- $a_1to1 = $a_1to1_new;
- }
-
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- }
- header("Location: firewall_nat_1to1.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("1:1"));
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="firewall_nat_1to1.php" method="post">
-<script type="text/javascript" src="/javascript/row_toggle.js"></script>
-<?php
-if ($savemsg) {
- print_info_box($savemsg);
-}
-if (is_subsystem_dirty('natconf')) {
- print_info_box_np(gettext("The NAT configuration has been changed.") .
- "<br />" .
- gettext("You must apply the changes in order for them to take effect."));
-}
-?>
-<br />
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall nat 1to1">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Port Forward"), false, "firewall_nat.php");
- $tab_array[] = array(gettext("1:1"), true, "firewall_nat_1to1.php");
- $tab_array[] = array(gettext("Outbound"), false, "firewall_nat_out.php");
- $tab_array[] = array(gettext("NPt"), false, "firewall_nat_npt.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr><td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr id="frheader">
- <td width="3%" class="list">&nbsp;</td>
- <td width="3%" class="list">&nbsp;</td>
- <td width="10%" class="listhdrr"><?=gettext("Interface"); ?></td>
- <td width="15%" class="listhdrr"><?=gettext("External IP"); ?></td>
- <td width="15%" class="listhdrr"><?=gettext("Internal IP"); ?></td>
- <td width="15%" class="listhdrr"><?=gettext("Destination IP"); ?></td>
- <td width="29%" class="listhdr"><?=gettext("Description"); ?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="edit">
- <tr>
- <td width="17"></td>
- <td valign="middle">
- <a href="firewall_nat_1to1_edit.php">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add rule"); ?>" alt="add" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $textse = "</span>";
- $i = 0;
- foreach ($a_1to1 as $natent):
- if (isset($natent['disabled'])) {
- $textss = "<span class=\"gray\">";
- $iconfn = "pass_d";
- } else {
- $textss = "<span>";
- $iconfn = "pass";
- }
-?>
- <tr valign="top" id="fr<?=$i;?>">
- <td class="listt">
- <input type="checkbox" id="frc<?=$i;?>" name="rule[]" value="<?=$i;?>" onclick="fr_bgcolor('<?=$i;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
- </td>
- <td class="listt" align="center">
- <a href="?act=toggle&amp;id=<?=$i;?>">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0"
- title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" />
- </a>
- </td>
- <td class="listlr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_1to1_edit.php?id=<?=$i;?>';">
-<?php
- echo $textss;
- if (!$natent['interface']) {
- echo htmlspecialchars(convert_friendly_interface_to_friendly_descr("wan"));
- } else {
- echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface']));
- }
- echo $textse;
-?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_1to1_edit.php?id=<?=$i;?>';">
-<?php
- $source_net = pprint_address($natent['source']);
- $source_cidr = strstr($source_net, '/');
- echo $textss . $natent['external'] . $source_cidr . $textse;
-?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_1to1_edit.php?id=<?=$i;?>';">
-<?php
- echo $textss . $source_net . $textse;
-?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_1to1_edit.php?id=<?=$i;?>';">
-<?php
- echo $textss . pprint_address($natent['destination']) . $textse;
-?>
- </td>
- <td class="listbg" onclick="fr_toggle(<?=$i;?>)" ondblclick="document.location='firewall_nat_1to1_edit.php?id=<?=$i;?>';">
-<?php
- echo $textss . htmlspecialchars($natent['descr']) . '&nbsp;' . $textse;
-?>
- </td>
- <td class="list nowrap" valign="middle">
- <table border="0" cellspacing="0" cellpadding="1" summary="move">
- <tr>
- <td>
- <input onmouseover="fr_insline(<?=$i;?>, true)" onmouseout="fr_insline(<?=$i;?>, false)" name="move_<?=$i;?>"
- src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif"
- title="<?=gettext("move selected rules before this rule");?>"
- type="image" style="height:17;width:17;border:0" />
- </td>
- <td>
- <a href="firewall_nat_1to1_edit.php?id=<?=$i;?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit rule");?>" alt="edit" />
- </a>
- </td>
- </tr>
- <tr>
- <td align="center" valign="middle">
- <a href="firewall_nat_1to1.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this rule?");?>')">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete rule");?>" alt="delete" />
- </a>
- </td>
- <td>
- <a href="firewall_nat_1to1_edit.php?dup=<?=$i;?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add a new rule based on this one");?>" width="17" height="17" border="0" alt="duplicate" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="7"></td>
- <td class="list nowrap" valign="middle">
- <table border="0" cellspacing="0" cellpadding="1" summary="edit">
- <tr>
- <td>
-<?php
- if ($i == 0):
-?>
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17"
- title="<?=gettext("move selected mappings to end");?>" border="0" alt="move" />
-<?php
- else:
-?>
- <input name="move_<?=$i;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif"
- style="width:17;height:17;border:0" title="<?=gettext("move selected mappings to end");?>" />
-<?php
- endif;
-?>
- </td>
- <td>
- <a href="firewall_nat_1to1_edit.php">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"
- title="<?=gettext("add new mapping");?>" alt="add" />
- </a>
- </td>
- </tr>
- <tr>
- <td>
-<?php
- if ($i == 0):
-?>
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17"
- title="<?=gettext("delete selected rules");?>" border="0" alt="delete" />
-<?php
- else:
-?>
- <input name="del" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif"
- style="width:17;height:17" title="<?=gettext("delete selected mappings");?>"
- onclick="return confirm('<?=gettext("Do you really want to delete the selected mappings?");?>')" />
-<?php
- endif;
-?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td colspan="7">
- <p><span class="vexpl">
- <span class="red"><strong><?=gettext("Note:"); ?><br /></strong></span>
- <?=gettext("Depending on the way your WAN connection is setup, you may also need a"); ?>
- <a href="firewall_virtual_ip.php"><?=gettext("Virtual IP."); ?></a><br />
- <?=gettext("If you add a 1:1 NAT entry for any of the interface IPs on this system, " .
- "it will make this system inaccessible on that IP address. i.e. if " .
- "you use your WAN IP address, any services on this system (IPsec, OpenVPN server, etc.) " .
- "using the WAN IP address will no longer function."); ?>
- </span></p>
- </td>
- </tr>
- </table>
- </div>
- </td></tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_nat_1to1_edit.php b/usr/local/www/firewall_nat_1to1_edit.php
deleted file mode 100644
index e415015..0000000
--- a/usr/local/www/firewall_nat_1to1_edit.php
+++ /dev/null
@@ -1,592 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_nat_1to1_edit.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: nat
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-nat-1-1-edit
-##|*NAME=Firewall: NAT: 1:1: Edit page
-##|*DESCR=Allow access to the 'Firewall: NAT: 1:1: Edit' page.
-##|*MATCH=firewall_nat_1to1_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("interfaces.inc");
-require_once("filter.inc");
-require("shaper.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_nat_1to1.php');
-}
-
-$specialsrcdst = explode(" ", "any pptp pppoe l2tp openvpn");
-$ifdisp = get_configured_interface_with_descr();
-foreach ($ifdisp as $kif => $kdescr) {
- $specialsrcdst[] = "{$kif}";
- $specialsrcdst[] = "{$kif}ip";
-}
-
-if (!is_array($config['nat']['onetoone'])) {
- $config['nat']['onetoone'] = array();
-}
-
-$a_1to1 = &$config['nat']['onetoone'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-$after = $_GET['after'];
-if (isset($_POST['after'])) {
- $after = $_POST['after'];
-}
-
-if (isset($_GET['dup'])) {
- $id = $_GET['dup'];
- $after = $_GET['dup'];
-}
-
-if (isset($id) && $a_1to1[$id]) {
- $pconfig['disabled'] = isset($a_1to1[$id]['disabled']);
-
- address_to_pconfig($a_1to1[$id]['source'], $pconfig['src'],
- $pconfig['srcmask'], $pconfig['srcnot'],
- $pconfig['srcbeginport'], $pconfig['srcendport']);
-
- address_to_pconfig($a_1to1[$id]['destination'], $pconfig['dst'],
- $pconfig['dstmask'], $pconfig['dstnot'],
- $pconfig['dstbeginport'], $pconfig['dstendport']);
-
- $pconfig['interface'] = $a_1to1[$id]['interface'];
- if (!$pconfig['interface']) {
- $pconfig['interface'] = "wan";
- }
-
- $pconfig['external'] = $a_1to1[$id]['external'];
- $pconfig['descr'] = $a_1to1[$id]['descr'];
- $pconfig['natreflection'] = $a_1to1[$id]['natreflection'];
-} else {
- $pconfig['interface'] = "wan";
-}
-
-if (isset($_GET['dup'])) {
- unset($id);
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
- /* run through $_POST items encoding HTML entities so that the user
- * cannot think he is slick and perform a XSS attack on the unwilling
- */
- foreach ($_POST as $key => $value) {
- $temp = str_replace(">", "", $value);
- $newpost = htmlentities($temp);
- if ($newpost <> $temp) {
- $input_errors[] = sprintf(gettext("Invalid characters detected (%s). Please remove invalid characters and save again."), $temp);
- }
- }
-
- /* input validation */
- $reqdfields = explode(" ", "interface external");
- $reqdfieldsn = array(gettext("Interface"), gettext("External subnet"));
- if ($_POST['srctype'] == "single" || $_POST['srctype'] == "network") {
- $reqdfields[] = "src";
- $reqdfieldsn[] = gettext("Source address");
- }
- if ($_POST['dsttype'] == "single" || $_POST['dsttype'] == "network") {
- $reqdfields[] = "dst";
- $reqdfieldsn[] = gettext("Destination address");
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if ($_POST['external']) {
- $_POST['external'] = trim($_POST['external']);
- }
- if ($_POST['src']) {
- $_POST['src'] = trim($_POST['src']);
- }
- if ($_POST['dst']) {
- $_POST['dst'] = trim($_POST['dst']);
- }
-
- if (is_specialnet($_POST['srctype'])) {
- $_POST['src'] = $_POST['srctype'];
- $_POST['srcmask'] = 0;
- } else if ($_POST['srctype'] == "single") {
- $_POST['srcmask'] = 32;
- }
- if (is_specialnet($_POST['dsttype'])) {
- $_POST['dst'] = $_POST['dsttype'];
- $_POST['dstmask'] = 0;
- } else if ($_POST['dsttype'] == "single") {
- $_POST['dstmask'] = 32;
- } else if (is_ipaddr($_POST['dsttype'])) {
- $_POST['dst'] = $_POST['dsttype'];
- $_POST['dstmask'] = 32;
- $_POST['dsttype'] = "single";
- }
-
- /* For external, user can enter only ip's */
- if (($_POST['external'] && !is_ipaddr($_POST['external']))) {
- $input_errors[] = gettext("A valid external subnet must be specified.");
- }
-
- /* For dst, if user enters an alias and selects "network" then disallow. */
- if ($_POST['dsttype'] == "network" && is_alias($_POST['dst'])) {
- $input_errors[] = gettext("You must specify single host or alias for alias entries.");
- }
-
- /* For src, user can enter only ip's or networks */
- if (!is_specialnet($_POST['srctype'])) {
- if (($_POST['src'] && !is_ipaddr($_POST['src']))) {
- $input_errors[] = sprintf(gettext("%s is not a valid internal IP address."), $_POST['src']);
- }
- if (($_POST['srcmask'] && !is_numericint($_POST['srcmask']))) {
- $input_errors[] = gettext("A valid internal bit count must be specified.");
- }
- }
-
- /* For dst, user can enter ip's, networks or aliases */
- if (!is_specialnet($_POST['dsttype'])) {
- if (($_POST['dst'] && !is_ipaddroralias($_POST['dst']))) {
- $input_errors[] = sprintf(gettext("%s is not a valid destination IP address or alias."), $_POST['dst']);
- }
- if (($_POST['dstmask'] && !is_numericint($_POST['dstmask']))) {
- $input_errors[] = gettext("A valid destination bit count must be specified.");
- }
- }
-
- /* check for overlaps with other 1:1 */
- foreach ($a_1to1 as $natent) {
- if (isset($id) && ($a_1to1[$id]) && ($a_1to1[$id] === $natent)) {
- continue;
- }
-
- if (check_subnets_overlap($_POST['internal'], $_POST['subnet'], $natent['internal'], $natent['subnet'])) {
- //$input_errors[] = "Another 1:1 rule overlaps with the specified internal subnet.";
- //break;
- }
- }
-
- if (!$input_errors) {
- $natent = array();
-
- $natent['disabled'] = isset($_POST['disabled']) ? true:false;
- $natent['external'] = $_POST['external'];
- $natent['descr'] = $_POST['descr'];
- $natent['interface'] = $_POST['interface'];
-
- pconfig_to_address($natent['source'], $_POST['src'],
- $_POST['srcmask'], $_POST['srcnot']);
-
- pconfig_to_address($natent['destination'], $_POST['dst'],
- $_POST['dstmask'], $_POST['dstnot']);
-
- if ($_POST['natreflection'] == "enable" || $_POST['natreflection'] == "disable") {
- $natent['natreflection'] = $_POST['natreflection'];
- } else {
- unset($natent['natreflection']);
- }
-
- if (isset($id) && $a_1to1[$id]) {
- $a_1to1[$id] = $natent;
- } else {
- if (is_numeric($after)) {
- array_splice($a_1to1, $after+1, 0, array($natent));
- } else {
- $a_1to1[] = $natent;
- }
- }
-
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- }
- header("Location: firewall_nat_1to1.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("1:1"), gettext("Edit"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script type="text/javascript" src="/javascript/suggestions.js"></script>
-<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
-<script type="text/javascript">
-//<![CDATA[
-function typesel_change() {
- switch (document.iform.srctype.selectedIndex) {
- case 1: /* single */
- document.iform.src.disabled = 0;
- document.iform.srcmask.value = "";
- document.iform.srcmask.disabled = 1;
- break;
- case 2: /* network */
- document.iform.src.disabled = 0;
- document.iform.srcmask.disabled = 0;
- break;
- default:
- document.iform.src.value = "";
- document.iform.src.disabled = 1;
- document.iform.srcmask.value = "";
- document.iform.srcmask.disabled = 1;
- break;
- }
- switch (document.iform.dsttype.selectedIndex) {
- case 1: /* single */
- document.iform.dst.disabled = 0;
- document.iform.dstmask.value = "";
- document.iform.dstmask.disabled = 1;
- break;
- case 2: /* network */
- document.iform.dst.disabled = 0;
- document.iform.dstmask.disabled = 0;
- break;
- default:
- document.iform.dst.value = "";
- document.iform.dst.disabled = 1;
- document.iform.dstmask.value = "";
- document.iform.dstmask.disabled = 1;
- break;
- }
-}
-//]]>
-</script>
-
-<?php
-include("fbegin.inc");
-if ($input_errors) {
- print_input_errors($input_errors);
-}
-?>
-<form action="firewall_nat_1to1_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="firewall nat 1to1 edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit NAT 1:1 entry"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
- <td width="78%" class="vtable">
- <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable this rule"); ?></strong><br />
- <span class="vexpl"><?=gettext("Set this option to disable this rule without removing it from the list."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
- <td width="78%" class="vtable">
- <select name="interface" class="formselect">
-<?php
- foreach ($ifdisp as $if => $ifdesc) {
- if (have_ruleint_access($if)) {
- $interfaces[$if] = $ifdesc;
- }
- }
-
- if ($config['l2tp']['mode'] == "server") {
- if (have_ruleint_access("l2tp")) {
- $interfaces['l2tp'] = "L2TP VPN";
- }
- }
-
- if ($config['pptpd']['mode'] == "server") {
- if (have_ruleint_access("pptp")) {
- $interfaces['pptp'] = "PPTP VPN";
- }
- }
-
- if (is_pppoe_server_enabled() && have_ruleint_access("pppoe")) {
- $interfaces['pppoe'] = "PPPoE Server";
- }
-
- /* add ipsec interfaces */
- if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
- if (have_ruleint_access("enc0")) {
- $interfaces["enc0"] = "IPsec";
- }
- }
-
- /* add openvpn/tun interfaces */
- if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) {
- $interfaces["openvpn"] = "OpenVPN";
- }
-
- foreach ($interfaces as $iface => $ifacename):
-?>
- <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
-<?php
- endforeach;
-?>
- </select><br />
- <span class="vexpl"><?=gettext("Choose which interface this rule applies to"); ?>.<br />
- <?=gettext("Hint: in most cases, you'll want to use WAN here"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("External subnet IP"); ?></td>
- <td width="78%" class="vtable">
- <input name="external" type="text" class="formfld unknown" id="external" size="20" value="<?=htmlspecialchars($pconfig['external']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Enter the external (usually on a WAN) subnet's starting address for the 1:1 mapping. " .
- "The subnet mask from the internal address below will be applied to this IP address."); ?><br />
- <?=gettext("Hint: this is generally an address owned by the router itself on the selected interface."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Internal IP"); ?></td>
- <td width="78%" class="vtable">
- <input name="srcnot" type="checkbox" id="srcnot" value="yes" <?php if ($pconfig['srcnot']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("not"); ?></strong>
- <br />
- <?=gettext("Use this option to invert the sense of the match."); ?>
- <br />
- <br />
- <table border="0" cellspacing="0" cellpadding="0" summary="source">
- <tr>
- <td><?=gettext("Type:"); ?>&nbsp;&nbsp;</td>
- <td>
- <select name="srctype" class="formselect" onchange="typesel_change()">
-<?php
- $sel = is_specialnet($pconfig['src']);
-?>
- <option value="any" <?php if ($pconfig['src'] == "any") { echo "selected=\"selected\""; } ?>><?=gettext("any"); ?></option>
- <option value="single" <?php if ((($pconfig['srcmask'] == 32) || !isset($pconfig['srcmask'])) && !$sel) { echo "selected=\"selected\""; $sel = 1; } ?>>
- <?=gettext("Single host"); ?>
- </option>
- <option value="network" <?php if (!$sel) echo "selected=\"selected\""; ?>><?=gettext("Network"); ?></option>
-<?php
- if (have_ruleint_access("pptp")):
-?>
- <option value="pptp" <?php if ($pconfig['src'] == "pptp") { echo "selected=\"selected\""; } ?>><?=gettext("PPTP clients"); ?></option>
-<?php
- endif;
- if (have_ruleint_access("pppoe")):
-?>
- <option value="pppoe" <?php if ($pconfig['src'] == "pppoe") { echo "selected=\"selected\""; } ?>><?=gettext("PPPoE clients"); ?></option>
-<?php
- endif;
- if (have_ruleint_access("l2tp")):
-?>
- <option value="l2tp" <?php if ($pconfig['src'] == "l2tp") { echo "selected=\"selected\""; } ?>><?=gettext("L2TP clients"); ?></option>
-<?php
- endif;
- foreach ($ifdisp as $ifent => $ifdesc):
- if (have_ruleint_access($ifent)):
-?>
- <option value="<?=$ifent;?>" <?php if ($pconfig['src'] == $ifent) { echo "selected=\"selected\""; } ?>>
- <?=htmlspecialchars($ifdesc);?> <?=gettext("net"); ?>
- </option>
- <option value="<?=$ifent;?>ip"<?php if ($pconfig['src'] == $ifent . "ip") { echo "selected=\"selected\""; } ?>>
- <?=$ifdesc?> <?=gettext("address");?>
- </option>
-<?php
- endif;
- endforeach;
-?>
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
- <td>
- <input name="src" type="text" class="formfld" id="src" size="20" value="<?php if (!is_specialnet($pconfig['src'])) echo htmlspecialchars($pconfig['src']);?>" /> /
- <select name="srcmask" class="formselect" id="srcmask">
-<?php
- for ($i = 31; $i > 0; $i--):
-?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['srcmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
-<?php
- endfor;
-?>
- </select>
- </td>
- </tr>
- </table>
- <br />
- <span class="vexpl"><?=gettext("Enter the internal (LAN) subnet for the 1:1 mapping. The subnet size specified for the internal subnet will be applied to the external subnet."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination"); ?></td>
- <td width="78%" class="vtable">
- <input name="dstnot" type="checkbox" id="dstnot" value="yes" <?php if ($pconfig['dstnot']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("not"); ?></strong>
- <br />
- <?=gettext("Use this option to invert the sense of the match."); ?>
- <br />
- <br />
- <table border="0" cellspacing="0" cellpadding="0" summary="destination">
- <tr>
- <td><?=gettext("Type:"); ?>&nbsp;&nbsp;</td>
- <td>
- <select name="dsttype" class="formselect" onchange="typesel_change()">
-<?php
- $sel = is_specialnet($pconfig['dst']); ?>
- <option value="any" <?php if (empty($pconfig['dst']) || $pconfig['dst'] == "any") { echo "selected=\"selected\""; } ?>><?=gettext("any"); ?></option>
- <option value="single" <?php if (($pconfig['dstmask'] == 32) && !$sel) { echo "selected=\"selected\""; $sel = 1; } ?>>
- <?=gettext("Single host or alias"); ?>
- </option>
- <option value="network" <?php if (!$sel && !empty($pconfig['dst'])) echo "selected=\"selected\""; ?>>
- <?=gettext("Network"); ?>
- </option>
-<?php
- if (have_ruleint_access("pptp")):
-?>
- <option value="pptp" <?php if ($pconfig['dst'] == "pptp") { echo "selected=\"selected\""; } ?>>
- <?=gettext("PPTP clients"); ?>
- </option>
-<?php
- endif;
- if (have_ruleint_access("pppoe")):
-?>
- <option value="pppoe" <?php if ($pconfig['dst'] == "pppoe") { echo "selected=\"selected\""; } ?>>
- <?=gettext("PPPoE clients"); ?>
- </option>
-<?php
- endif;
- if (have_ruleint_access("l2tp")):
-?>
- <option value="l2tp" <?php if ($pconfig['dst'] == "l2tp") { echo "selected=\"selected\""; } ?>>
- <?=gettext("L2TP clients"); ?>
- </option>
-<?php
- endif;
-
- foreach ($ifdisp as $if => $ifdesc):
- if (have_ruleint_access($if)):
-?>
- <option value="<?=$if;?>" <?php if ($pconfig['dst'] == $if) { echo "selected=\"selected\""; } ?>><?=htmlspecialchars($ifdesc);?>
- <?=gettext("net"); ?>
- </option>
- <option value="<?=$if;?>ip"<?php if ($pconfig['dst'] == $if . "ip") { echo "selected=\"selected\""; } ?>>
- <?=$ifdesc;?> <?=gettext("address");?>
- </option>
-<?php
- endif;
- endforeach;
-?>
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
- <td>
- <input name="dst" type="text" autocomplete="off" class="formfldalias" id="dst" size="20" value="<?php if (!is_specialnet($pconfig['dst'])) echo htmlspecialchars($pconfig['dst']);?>" />
- /
- <select name="dstmask" class="formselect" id="dstmask">
-<?php
- for ($i = 31; $i > 0; $i--):
-?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['dstmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
-<?php
- endfor;
-?>
- </select>
- </td>
- </tr>
- </table>
- <br />
- <span class="vexpl">
- <?=gettext("The 1:1 mapping will only be used for connections to or from the specified destination."); ?><br />
- <?=gettext("Hint: this is usually 'any'."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed)."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("NAT reflection"); ?></td>
- <td width="78%" class="vtable">
- <select name="natreflection" class="formselect">
- <option value="default" <?php if ($pconfig['natreflection'] != "enable" && $pconfig['natreflection'] != "disable") echo "selected=\"selected\""; ?>>
- <?=gettext("use system default"); ?>
- </option>
- <option value="enable" <?php if ($pconfig['natreflection'] == "enable") echo "selected=\"selected\""; ?>>
- <?=gettext("enable"); ?>
- </option>
- <option value="disable" <?php if ($pconfig['natreflection'] == "disable") echo "selected=\"selected\""; ?>>
- <?=gettext("disable"); ?>
- </option>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_1to1[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
- typesel_change();
-//]]>
-</script>
-<script type="text/javascript">
-//<![CDATA[
- var addressarray = <?= json_encode(get_alias_list(array("host", "network", "openvpn", "urltable"))) ?>;
- var oTextbox1 = new AutoSuggestControl(document.getElementById("dst"), new StateSuggestions(addressarray));
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_nat_edit.php b/usr/local/www/firewall_nat_edit.php
deleted file mode 100644
index db8a174..0000000
--- a/usr/local/www/firewall_nat_edit.php
+++ /dev/null
@@ -1,1016 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_nat_edit.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: nat
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-nat-portforward-edit
-##|*NAME=Firewall: NAT: Port Forward: Edit page
-##|*DESCR=Allow access to the 'Firewall: NAT: Port Forward: Edit' page.
-##|*MATCH=firewall_nat_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("itemid.inc");
-require_once("filter.inc");
-require("shaper.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_nat.php');
-}
-
-$specialsrcdst = explode(" ", "any (self) pptp pppoe l2tp openvpn");
-$ifdisp = get_configured_interface_with_descr();
-foreach ($ifdisp as $kif => $kdescr) {
- $specialsrcdst[] = "{$kif}";
- $specialsrcdst[] = "{$kif}ip";
-}
-
-if (!is_array($config['nat']['rule'])) {
- $config['nat']['rule'] = array();
-}
-$a_nat = &$config['nat']['rule'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (is_numericint($_GET['after']) || $_GET['after'] == "-1") {
- $after = $_GET['after'];
-}
-if (isset($_POST['after']) && (is_numericint($_POST['after']) || $_POST['after'] == "-1")) {
- $after = $_POST['after'];
-}
-
-if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
- $id = $_GET['dup'];
- $after = $_GET['dup'];
-}
-
-if (isset($id) && $a_nat[$id]) {
- if (isset($a_nat[$id]['created']) && is_array($a_nat[$id]['created'])) {
- $pconfig['created'] = $a_nat[$id]['created'];
- }
-
- if (isset($a_nat[$id]['updated']) && is_array($a_nat[$id]['updated'])) {
- $pconfig['updated'] = $a_nat[$id]['updated'];
- }
-
- $pconfig['disabled'] = isset($a_nat[$id]['disabled']);
- $pconfig['nordr'] = isset($a_nat[$id]['nordr']);
- address_to_pconfig($a_nat[$id]['source'], $pconfig['src'],
- $pconfig['srcmask'], $pconfig['srcnot'],
- $pconfig['srcbeginport'], $pconfig['srcendport']);
-
- address_to_pconfig($a_nat[$id]['destination'], $pconfig['dst'],
- $pconfig['dstmask'], $pconfig['dstnot'],
- $pconfig['dstbeginport'], $pconfig['dstendport']);
-
- $pconfig['proto'] = $a_nat[$id]['protocol'];
- $pconfig['localip'] = $a_nat[$id]['target'];
- $pconfig['localbeginport'] = $a_nat[$id]['local-port'];
- $pconfig['descr'] = $a_nat[$id]['descr'];
- $pconfig['interface'] = $a_nat[$id]['interface'];
- $pconfig['associated-rule-id'] = $a_nat[$id]['associated-rule-id'];
- $pconfig['nosync'] = isset($a_nat[$id]['nosync']);
- $pconfig['natreflection'] = $a_nat[$id]['natreflection'];
-
- if (!$pconfig['interface']) {
- $pconfig['interface'] = "wan";
- }
-} else {
- $pconfig['interface'] = "wan";
- $pconfig['src'] = "any";
- $pconfig['srcbeginport'] = "any";
- $pconfig['srcendport'] = "any";
-}
-
-if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
- unset($id);
-}
-
-/* run through $_POST items encoding HTML entities so that the user
- * cannot think he is slick and perform a XSS attack on the unwilling
- */
-unset($input_errors);
-foreach ($_POST as $key => $value) {
- $temp = $value;
- $newpost = htmlentities($temp);
- if ($newpost <> $temp) {
- $input_errors[] = sprintf(gettext("Invalid characters detected %s. Please remove invalid characters and save again."), $temp);
- }
-}
-
-if ($_POST) {
-
- if (strtoupper($_POST['proto']) == "TCP" || strtoupper($_POST['proto']) == "UDP" || strtoupper($_POST['proto']) == "TCP/UDP") {
- if ($_POST['srcbeginport_cust'] && !$_POST['srcbeginport']) {
- $_POST['srcbeginport'] = trim($_POST['srcbeginport_cust']);
- }
- if ($_POST['srcendport_cust'] && !$_POST['srcendport']) {
- $_POST['srcendport'] = trim($_POST['srcendport_cust']);
- }
-
- if ($_POST['srcbeginport'] == "any") {
- $_POST['srcbeginport'] = 0;
- $_POST['srcendport'] = 0;
- } else {
- if (!$_POST['srcendport']) {
- $_POST['srcendport'] = $_POST['srcbeginport'];
- }
- }
- if ($_POST['srcendport'] == "any") {
- $_POST['srcendport'] = $_POST['srcbeginport'];
- }
-
- if ($_POST['dstbeginport_cust'] && !$_POST['dstbeginport']) {
- $_POST['dstbeginport'] = trim($_POST['dstbeginport_cust']);
- }
- if ($_POST['dstendport_cust'] && !$_POST['dstendport']) {
- $_POST['dstendport'] = trim($_POST['dstendport_cust']);
- }
-
- if ($_POST['dstbeginport'] == "any") {
- $_POST['dstbeginport'] = 0;
- $_POST['dstendport'] = 0;
- } else {
- if (!$_POST['dstendport']) {
- $_POST['dstendport'] = $_POST['dstbeginport'];
- }
- }
- if ($_POST['dstendport'] == "any") {
- $_POST['dstendport'] = $_POST['dstbeginport'];
- }
-
- if ($_POST['localbeginport_cust'] && !$_POST['localbeginport']) {
- $_POST['localbeginport'] = trim($_POST['localbeginport_cust']);
- }
-
- /* Make beginning port end port if not defined and endport is */
- if (!$_POST['srcbeginport'] && $_POST['srcendport']) {
- $_POST['srcbeginport'] = $_POST['srcendport'];
- }
- if (!$_POST['dstbeginport'] && $_POST['dstendport']) {
- $_POST['dstbeginport'] = $_POST['dstendport'];
- }
- } else {
- $_POST['srcbeginport'] = 0;
- $_POST['srcendport'] = 0;
- $_POST['dstbeginport'] = 0;
- $_POST['dstendport'] = 0;
- }
-
- if (is_specialnet($_POST['srctype'])) {
- $_POST['src'] = $_POST['srctype'];
- $_POST['srcmask'] = 0;
- } else if ($_POST['srctype'] == "single") {
- $_POST['srcmask'] = 32;
- }
- if (is_specialnet($_POST['dsttype'])) {
- $_POST['dst'] = $_POST['dsttype'];
- $_POST['dstmask'] = 0;
- } else if ($_POST['dsttype'] == "single") {
- $_POST['dstmask'] = 32;
- } else if (is_ipaddr($_POST['dsttype'])) {
- $_POST['dst'] = $_POST['dsttype'];
- $_POST['dstmask'] = 32;
- $_POST['dsttype'] = "single";
- }
-
- $pconfig = $_POST;
-
- /* input validation */
- if (strtoupper($_POST['proto']) == "TCP" or strtoupper($_POST['proto']) == "UDP" or strtoupper($_POST['proto']) == "TCP/UDP") {
- $reqdfields = explode(" ", "interface proto dstbeginport dstendport");
- $reqdfieldsn = array(gettext("Interface"), gettext("Protocol"), gettext("Destination port from"), gettext("Destination port to"));
- } else {
- $reqdfields = explode(" ", "interface proto");
- $reqdfieldsn = array(gettext("Interface"), gettext("Protocol"));
- }
-
- if ($_POST['srctype'] == "single" || $_POST['srctype'] == "network") {
- $reqdfields[] = "src";
- $reqdfieldsn[] = gettext("Source address");
- }
- if ($_POST['dsttype'] == "single" || $_POST['dsttype'] == "network") {
- $reqdfields[] = "dst";
- $reqdfieldsn[] = gettext("Destination address");
- }
- if (!isset($_POST['nordr'])) {
- $reqdfields[] = "localip";
- $reqdfieldsn[] = gettext("Redirect target IP");
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (!$_POST['srcbeginport']) {
- $_POST['srcbeginport'] = 0;
- $_POST['srcendport'] = 0;
- }
- if (!$_POST['dstbeginport']) {
- $_POST['dstbeginport'] = 0;
- $_POST['dstendport'] = 0;
- }
-
- if ($_POST['src']) {
- $_POST['src'] = trim($_POST['src']);
- }
- if ($_POST['dst']) {
- $_POST['dst'] = trim($_POST['dst']);
- }
- if ($_POST['localip']) {
- $_POST['localip'] = trim($_POST['localip']);
- }
-
- if (!isset($_POST['nordr']) && ($_POST['localip'] && !is_ipaddroralias($_POST['localip']))) {
- $input_errors[] = sprintf(gettext("\"%s\" is not a valid redirect target IP address or host alias."), $_POST['localip']);
- }
-
- if ($_POST['srcbeginport'] && !is_portoralias($_POST['srcbeginport'])) {
- $input_errors[] = sprintf(gettext("%s is not a valid start source port. It must be a port alias or integer between 1 and 65535."), $_POST['srcbeginport']);
- }
- if ($_POST['srcendport'] && !is_portoralias($_POST['srcendport'])) {
- $input_errors[] = sprintf(gettext("%s is not a valid end source port. It must be a port alias or integer between 1 and 65535."), $_POST['srcendport']);
- }
- if ($_POST['dstbeginport'] && !is_portoralias($_POST['dstbeginport'])) {
- $input_errors[] = sprintf(gettext("%s is not a valid start destination port. It must be a port alias or integer between 1 and 65535."), $_POST['dstbeginport']);
- }
- if ($_POST['dstendport'] && !is_portoralias($_POST['dstendport'])) {
- $input_errors[] = sprintf(gettext("%s is not a valid end destination port. It must be a port alias or integer between 1 and 65535."), $_POST['dstendport']);
- }
-
- if ((strtoupper($_POST['proto']) == "TCP" || strtoupper($_POST['proto']) == "UDP" || strtoupper($_POST['proto']) == "TCP/UDP") && (!isset($_POST['nordr']) && !is_portoralias($_POST['localbeginport']))) {
- $input_errors[] = sprintf(gettext("A valid redirect target port must be specified. It must be a port alias or integer between 1 and 65535."), $_POST['localbeginport']);
- }
-
- /* if user enters an alias and selects "network" then disallow. */
- if (($_POST['srctype'] == "network" && is_alias($_POST['src'])) ||
- ($_POST['dsttype'] == "network" && is_alias($_POST['dst']))) {
- $input_errors[] = gettext("You must specify single host or alias for alias entries.");
- }
-
- if (!is_specialnet($_POST['srctype'])) {
- if (($_POST['src'] && !is_ipaddroralias($_POST['src']))) {
- $input_errors[] = sprintf(gettext("%s is not a valid source IP address or alias."), $_POST['src']);
- }
- if (($_POST['srcmask'] && !is_numericint($_POST['srcmask']))) {
- $input_errors[] = gettext("A valid source bit count must be specified.");
- }
- }
- if (!is_specialnet($_POST['dsttype'])) {
- if (($_POST['dst'] && !is_ipaddroralias($_POST['dst']))) {
- $input_errors[] = sprintf(gettext("%s is not a valid destination IP address or alias."), $_POST['dst']);
- }
- if (($_POST['dstmask'] && !is_numericint($_POST['dstmask']))) {
- $input_errors[] = gettext("A valid destination bit count must be specified.");
- }
- }
-
- if ($_POST['srcbeginport'] > $_POST['srcendport']) {
- /* swap */
- $tmp = $_POST['srcendport'];
- $_POST['srcendport'] = $_POST['srcbeginport'];
- $_POST['srcbeginport'] = $tmp;
- }
- if ($_POST['dstbeginport'] > $_POST['dstendport']) {
- /* swap */
- $tmp = $_POST['dstendport'];
- $_POST['dstendport'] = $_POST['dstbeginport'];
- $_POST['dstbeginport'] = $tmp;
- }
-
- if (!$input_errors) {
- if (!isset($_POST['nordr']) && ($_POST['dstendport'] - $_POST['dstbeginport'] + $_POST['localbeginport']) > 65535) {
- $input_errors[] = gettext("The target port range must be an integer between 1 and 65535.");
- }
- }
-
- /* check for overlaps */
- foreach ($a_nat as $natent) {
- if (isset($id) && ($a_nat[$id]) && ($a_nat[$id] === $natent)) {
- continue;
- }
- if ($natent['interface'] != $_POST['interface']) {
- continue;
- }
- if ($natent['destination']['address'] != $_POST['dst']) {
- continue;
- }
- if (($natent['proto'] != $_POST['proto']) && ($natent['proto'] != "tcp/udp") && ($_POST['proto'] != "tcp/udp")) {
- continue;
- }
-
- list($begp, $endp) = explode("-", $natent['destination']['port']);
- if (!$endp) {
- $endp = $begp;
- }
-
- if (!((($_POST['dstbeginport'] < $begp) && ($_POST['dstendport'] < $begp)) ||
- (($_POST['dstbeginport'] > $endp) && ($_POST['dstendport'] > $endp)))) {
- $input_errors[] = gettext("The destination port range overlaps with an existing entry.");
- break;
- }
- }
-
- // Allow extending of the firewall edit page and include custom input validation
- pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/input_validation");
-
- if (!$input_errors) {
- $natent = array();
-
- $natent['disabled'] = isset($_POST['disabled']) ? true:false;
- $natent['nordr'] = isset($_POST['nordr']) ? true:false;
-
- if ($natent['nordr']) {
- $_POST['associated-rule-id'] = '';
- $_POST['filter-rule-association'] = '';
- }
-
- pconfig_to_address($natent['source'], $_POST['src'],
- $_POST['srcmask'], $_POST['srcnot'],
- $_POST['srcbeginport'], $_POST['srcendport']);
-
- pconfig_to_address($natent['destination'], $_POST['dst'],
- $_POST['dstmask'], $_POST['dstnot'],
- $_POST['dstbeginport'], $_POST['dstendport']);
-
- $natent['protocol'] = $_POST['proto'];
-
- if (!$natent['nordr']) {
- $natent['target'] = $_POST['localip'];
- $natent['local-port'] = $_POST['localbeginport'];
- }
- $natent['interface'] = $_POST['interface'];
- $natent['descr'] = $_POST['descr'];
- $natent['associated-rule-id'] = $_POST['associated-rule-id'];
-
- if ($_POST['filter-rule-association'] == "pass") {
- $natent['associated-rule-id'] = "pass";
- }
-
- if ($_POST['nosync'] == "yes") {
- $natent['nosync'] = true;
- } else {
- unset($natent['nosync']);
- }
-
- if ($_POST['natreflection'] == "enable" || $_POST['natreflection'] == "purenat" || $_POST['natreflection'] == "disable") {
- $natent['natreflection'] = $_POST['natreflection'];
- } else {
- unset($natent['natreflection']);
- }
-
- // If we used to have an associated filter rule, but no-longer should have one
- if (!empty($a_nat[$id]) && (empty($natent['associated-rule-id']) || $natent['associated-rule-id'] != $a_nat[$id]['associated-rule-id'])) {
- // Delete the previous rule
- delete_id($a_nat[$id]['associated-rule-id'], $config['filter']['rule']);
- mark_subsystem_dirty('filter');
- }
-
- $need_filter_rule = false;
- // Updating a rule with a filter rule associated
- if (!empty($natent['associated-rule-id'])) {
- $need_filter_rule = true;
- }
- // Create a rule or if we want to create a new one
- if ($natent['associated-rule-id'] == 'new') {
- $need_filter_rule = true;
- unset($natent['associated-rule-id']);
- $_POST['filter-rule-association']='add-associated';
- }
- // If creating a new rule, where we want to add the filter rule, associated or not
- else if (isset($_POST['filter-rule-association']) &&
- ($_POST['filter-rule-association'] == 'add-associated' ||
- $_POST['filter-rule-association'] == 'add-unassociated')) {
- $need_filter_rule = true;
- }
-
- if ($need_filter_rule == true) {
-
- /* auto-generate a matching firewall rule */
- $filterent = array();
- unset($filterentid);
- // If a rule already exists, load it
- if (!empty($natent['associated-rule-id'])) {
- $filterentid = get_id($natent['associated-rule-id'], $config['filter']['rule']);
- if ($filterentid === false) {
- $filterent['associated-rule-id'] = $natent['associated-rule-id'];
- } else {
- $filterent =& $config['filter']['rule'][$filterentid];
- }
- }
- pconfig_to_address($filterent['source'], $_POST['src'],
- $_POST['srcmask'], $_POST['srcnot'],
- $_POST['srcbeginport'], $_POST['srcendport']);
-
- // Update interface, protocol and destination
- $filterent['interface'] = $_POST['interface'];
- $filterent['protocol'] = $_POST['proto'];
- $filterent['destination']['address'] = $_POST['localip'];
-
- $dstpfrom = $_POST['localbeginport'];
- $dstpto = $dstpfrom + $_POST['dstendport'] - $_POST['dstbeginport'];
-
- if ($dstpfrom == $dstpto) {
- $filterent['destination']['port'] = $dstpfrom;
- } else {
- $filterent['destination']['port'] = $dstpfrom . "-" . $dstpto;
- }
-
- /*
- * Our firewall filter description may be no longer than
- * 63 characters, so don't let it be.
- */
- $filterent['descr'] = substr("NAT " . $_POST['descr'], 0, 62);
-
- // If this is a new rule, create an ID and add the rule
- if ($_POST['filter-rule-association'] == 'add-associated') {
- $filterent['associated-rule-id'] = $natent['associated-rule-id'] = get_unique_id();
- $filterent['created'] = make_config_revision_entry(null, gettext("NAT Port Forward"));
- $config['filter']['rule'][] = $filterent;
- }
-
- mark_subsystem_dirty('filter');
- }
-
- if (isset($a_nat[$id]['created']) && is_array($a_nat[$id]['created'])) {
- $natent['created'] = $a_nat[$id]['created'];
- }
-
- $natent['updated'] = make_config_revision_entry();
-
- // Allow extending of the firewall edit page and include custom input validation
- pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/pre_write_config");
-
- // Update the NAT entry now
- if (isset($id) && $a_nat[$id]) {
- $a_nat[$id] = $natent;
- } else {
- $natent['created'] = make_config_revision_entry();
- if (is_numeric($after)) {
- array_splice($a_nat, $after+1, 0, array($natent));
- } else {
- $a_nat[] = $natent;
- }
- }
-
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- }
-
- header("Location: firewall_nat.php");
- exit;
- }
-}
-
-$closehead = false;
-$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("Port Forward"), gettext("Edit"));
-include("head.inc");
-
-?>
-<link type="text/css" rel="stylesheet" href="/javascript/chosen/chosen.css" />
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script src="/javascript/chosen/chosen.jquery.js" type="text/javascript"></script>
-<?php
-include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="firewall_nat_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="firewall nat edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit Redirect entry"); ?></td>
- </tr>
-<?php
- // Allow extending of the firewall edit page and include custom input validation
- pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/htmlphpearly");
-?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
- <td width="78%" class="vtable">
- <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable this rule"); ?></strong><br />
- <span class="vexpl"><?=gettext("Set this option to disable this rule without removing it from the list."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("No RDR (NOT)"); ?></td>
- <td width="78%" class="vtable">
- <input type="checkbox" name="nordr" id="nordr" onclick="nordr_change();" <?php if ($pconfig['nordr']) echo "checked=\"checked\""; ?> />
- <span class="vexpl"><?=gettext("Enabling this option will disable redirection for traffic matching this rule."); ?>
- <br /><?=gettext("Hint: this option is rarely needed, don't use this unless you know what you're doing."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
- <td width="78%" class="vtable">
- <select name="interface" class="formselect" onchange="dst_change(this.value, iface_old, document.iform.dsttype.value);iface_old = document.iform.interface.value;typesel_change();">
- <?php
- $iflist = get_configured_interface_with_descr(false, true);
- // Allow extending of the firewall edit interfaces
- pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/pre_interfaces_edit");
- foreach ($iflist as $if => $ifdesc) {
- if (have_ruleint_access($if)) {
- $interfaces[$if] = $ifdesc;
- }
- }
-
- if ($config['l2tp']['mode'] == "server") {
- if (have_ruleint_access("l2tp")) {
- $interfaces['l2tp'] = "L2TP VPN";
- }
- }
-
- if ($config['pptpd']['mode'] == "server") {
- if (have_ruleint_access("pptp")) {
- $interfaces['pptp'] = "PPTP VPN";
- }
- }
-
- if (is_pppoe_server_enabled() && have_ruleint_access("pppoe")) {
- $interfaces['pppoe'] = "PPPoE Server";
- }
-
- /* add ipsec interfaces */
- if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
- if (have_ruleint_access("enc0")) {
- $interfaces["enc0"] = "IPsec";
- }
- }
-
- /* add openvpn/tun interfaces */
- if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) {
- $interfaces["openvpn"] = "OpenVPN";
- }
-
- foreach ($interfaces as $iface => $ifacename): ?>
- <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
- <?php endforeach; ?>
- </select><br />
- <span class="vexpl"><?=gettext("Choose which interface this rule applies to."); ?><br />
- <?=gettext("Hint: in most cases, you'll want to use WAN here."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol"); ?></td>
- <td width="78%" class="vtable">
- <select name="proto" class="formselect" onchange="proto_change(); check_for_aliases();">
- <?php
- $protocols = explode(" ", "TCP UDP TCP/UDP ICMP ESP AH GRE IPV6 IGMP PIM OSPF");
- foreach ($protocols as $proto): ?>
- <option value="<?=strtolower($proto);?>" <?php if (strtolower($proto) == $pconfig['proto']) echo "selected=\"selected\""; ?>><?=htmlspecialchars($proto);?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Choose which IP protocol this rule should match."); ?><br />
- <?=gettext("Hint: in most cases, you should specify"); ?> <em><?=gettext("TCP"); ?></em> &nbsp;<?=gettext("here."); ?>
- </span>
- </td>
- </tr>
- <tr id="showadvancedboxsrc" name="showadvancedboxsrc">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Source"); ?></td>
- <td width="78%" class="vtable">
- <input type="button" onclick="show_source()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show source address and port range"); ?>
- </td>
- </tr>
- <tr style="display: none;" id="srctable" name="srctable">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Source"); ?></td>
- <td width="78%" class="vtable">
- <input name="srcnot" type="checkbox" id="srcnot" value="yes" <?php if ($pconfig['srcnot']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("not"); ?></strong>
- <br />
- <?=gettext("Use this option to invert the sense of the match."); ?>
- <br />
- <br />
- <table border="0" cellspacing="0" cellpadding="0" summary="type">
- <tr>
- <td><?=gettext("Type:"); ?>&nbsp;&nbsp;</td>
- <td>
- <select name="srctype" class="formselect" onchange="typesel_change()">
-<?php
- $sel = is_specialnet($pconfig['src']); ?>
- <option value="any" <?php if ($pconfig['src'] == "any") { echo "selected=\"selected\""; } ?>><?=gettext("any"); ?></option>
- <option value="single" <?php if (($pconfig['srcmask'] == 32) && !$sel) { echo "selected=\"selected\""; $sel = 1; } ?>><?=gettext("Single host or alias"); ?></option>
- <option value="network" <?php if (!$sel) echo "selected=\"selected\""; ?>><?=gettext("Network"); ?></option>
- <?php if (have_ruleint_access("pptp")): ?>
- <option value="pptp" <?php if ($pconfig['src'] == "pptp") { echo "selected=\"selected\""; } ?>><?=gettext("PPTP clients"); ?></option>
- <?php endif; ?>
- <?php if (have_ruleint_access("pppoe")): ?>
- <option value="pppoe" <?php if ($pconfig['src'] == "pppoe") { echo "selected=\"selected\""; } ?>><?=gettext("PPPoE clients"); ?></option>
- <?php endif; ?>
- <?php if (have_ruleint_access("l2tp")): ?>
- <option value="l2tp" <?php if ($pconfig['src'] == "l2tp") { echo "selected=\"selected\""; } ?>><?=gettext("L2TP clients"); ?></option>
- <?php endif; ?>
-<?php
- foreach ($ifdisp as $ifent => $ifdesc):
- if (have_ruleint_access($ifent)):
-?>
- <option value="<?=$ifent;?>" <?php if ($pconfig['src'] == $ifent) { echo "selected=\"selected\""; } ?>><?=htmlspecialchars($ifdesc);?> <?=gettext("net"); ?></option>
- <option value="<?=$ifent;?>ip"<?php if ($pconfig['src'] == $ifent . "ip") { echo "selected=\"selected\""; } ?>>
- <?=$ifdesc?> <?=gettext("address");?>
- </option>
-<?php
- endif;
- endforeach;
-?>
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
- <td>
- <input autocomplete='off' name="src" type="text" class="formfldalias" id="src" size="20" value="<?php if (!is_specialnet($pconfig['src'])) echo htmlspecialchars($pconfig['src']);?>" /> /
- <select name="srcmask" class="formselect" id="srcmask">
-<?php for ($i = 31; $i > 0; $i--): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['srcmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
-<?php endfor; ?>
- </select>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr style="display:none" id="sprtable" name="sprtable">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Source port range"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="0" summary="source port range">
- <tr>
- <td><?=gettext("from:"); ?>&nbsp;&nbsp;</td>
- <td>
- <select name="srcbeginport" class="formselect" onchange="src_rep_change();ext_change()">
- <option value="">(<?=gettext("other"); ?>)</option>
- <option value="any" <?php $bfound = 0; if ($pconfig['srcbeginport'] == "any") { echo "selected=\"selected\""; $bfound = 1; } ?>><?=gettext("any"); ?></option>
-<?php foreach ($wkports as $wkport => $wkportdesc): ?>
- <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['srcbeginport']) { echo "selected=\"selected\""; $bfound = 1; } ?>><?=htmlspecialchars($wkportdesc);?></option>
-<?php endforeach; ?>
- </select>
- <input autocomplete='off' class="formfldalias" name="srcbeginport_cust" id="srcbeginport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['srcbeginport']) echo htmlspecialchars($pconfig['srcbeginport']); ?>" />
- </td>
- </tr>
- <tr>
- <td><?=gettext("to:"); ?></td>
- <td>
- <select name="srcendport" class="formselect" onchange="ext_change()">
- <option value="">(<?=gettext("other"); ?>)</option>
- <option value="any" <?php $bfound = 0; if ($pconfig['srcendport'] == "any") { echo "selected=\"selected\""; $bfound = 1; } ?>><?=gettext("any"); ?></option>
-<?php foreach ($wkports as $wkport => $wkportdesc): ?>
- <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['srcendport']) { echo "selected=\"selected\""; $bfound = 1; } ?>><?=htmlspecialchars($wkportdesc);?></option>
-<?php endforeach; ?>
- </select>
- <input autocomplete='off' class="formfldalias" name="srcendport_cust" id="srcendport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['srcendport']) echo htmlspecialchars($pconfig['srcendport']); ?>" />
- </td>
- </tr>
- </table>
- <br />
- <span class="vexpl"><?=gettext("Specify the source port or port range for this rule"); ?>. <b><?=gettext("This is usually"); ?> <em><?=gettext("random"); ?></em> <?=gettext("and almost never equal to the destination port range (and should usually be 'any')"); ?>.</b> <br /> <?=gettext("Hint: you can leave the"); ?> <em>'<?=gettext("to"); ?>'</em> <?=gettext("field empty if you only want to filter a single port."); ?></span><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination"); ?></td>
- <td width="78%" class="vtable">
- <input name="dstnot" type="checkbox" id="dstnot" value="yes" <?php if ($pconfig['dstnot']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("not"); ?></strong>
- <br />
- <?=gettext("Use this option to invert the sense of the match."); ?>
- <br />
- <br />
- <table border="0" cellspacing="0" cellpadding="0" summary="type">
- <tr>
- <td><?=gettext("Type:"); ?>&nbsp;&nbsp;</td>
- <td>
- <select name="dsttype" class="formselect" onchange="typesel_change()">
- <?php $sel = is_specialnet($pconfig['dst']); ?>
- <option value="any" <?php if ($pconfig['dst'] == "any") { echo "selected=\"selected\""; } ?>><?=gettext("any"); ?></option>
- <option value="single" <?php if (($pconfig['dstmask'] == 32) && !$sel) { echo "selected=\"selected\""; $sel = 1; } ?>><?=gettext("Single host or alias"); ?></option>
- <option value="network" <?php if (!$sel) echo "selected=\"selected\""; ?>><?=gettext("Network"); ?></option>
- <option value="(self)" <?PHP if ($pconfig['dst'] == "(self)") echo "selected=\"selected\""; ?>><?=gettext("This Firewall (self)");?></option>
- <?php if (have_ruleint_access("pptp")): ?>
- <option value="pptp" <?php if ($pconfig['dst'] == "pptp") { echo "selected=\"selected\""; } ?>><?=gettext("PPTP clients"); ?></option>
- <?php endif; ?>
- <?php if (have_ruleint_access("pppoe")): ?>
- <option value="pppoe" <?php if ($pconfig['dst'] == "pppoe") { echo "selected=\"selected\""; } ?>><?=gettext("PPPoE clients"); ?></option>
- <?php endif; ?>
- <?php if (have_ruleint_access("l2tp")): ?>
- <option value="l2tp" <?php if ($pconfig['dst'] == "l2tp") { echo "selected=\"selected\""; } ?>><?=gettext("L2TP clients"); ?></option>
- <?php endif; ?>
-
-<?php foreach ($ifdisp as $if => $ifdesc):
- if (have_ruleint_access($if)):
-?>
- <option value="<?=$if;?>" <?php if ($pconfig['dst'] == $if) { echo "selected=\"selected\""; } ?>><?=htmlspecialchars($ifdesc);?> <?=gettext("net"); ?></option>
- <option value="<?=$if;?>ip"<?php if ($pconfig['dst'] == $if . "ip") { echo "selected=\"selected\""; } ?>>
- <?=$ifdesc;?> <?=gettext("address");?>
- </option>
-<?php
- endif;
- endforeach;
-?>
-
-<?php if (is_array($config['virtualip']['vip'])):
- foreach ($config['virtualip']['vip'] as $sn):
- if (isset($sn['noexpand'])) {
- continue;
- }
- if ($sn['mode'] == "proxyarp" && $sn['type'] == "network"):
- $start = ip2long32(gen_subnet($sn['subnet'], $sn['subnet_bits']));
- $end = ip2long32(gen_subnet_max($sn['subnet'], $sn['subnet_bits']));
- $len = $end - $start;
- for ($i = 0; $i <= $len; $i++):
- $snip = long2ip32($start+$i);
-?>
- <option value="<?=$snip;?>" <?php if ($snip == $pconfig['dst']) echo "selected=\"selected\""; ?>><?=htmlspecialchars("{$snip} ({$sn['descr']})");?></option>
-<?php endfor;
- else:
-?>
- <option value="<?=$sn['subnet'];?>" <?php if ($sn['subnet'] == $pconfig['dst']) echo "selected=\"selected\""; ?>><?=htmlspecialchars("{$sn['subnet']} ({$sn['descr']})");?></option>
-<?php endif;
- endforeach;
- endif;
-?>
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
- <td>
- <input autocomplete='off' name="dst" type="text" class="formfldalias" id="dst" size="20" value="<?php if (!is_specialnet($pconfig['dst'])) echo htmlspecialchars($pconfig['dst']);?>" />
- /
- <select name="dstmask" class="formselect" id="dstmask">
-<?php
- for ($i = 31; $i > 0; $i--): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['dstmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
-<?php endfor; ?>
- </select>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr id="dprtr" name="dprtr">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination port range"); ?> </td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="0" summary="destination port range">
- <tr>
- <td><?=gettext("from:"); ?>&nbsp;&nbsp;</td>
- <td>
- <select name="dstbeginport" id="dstbeginport" class="formselect" onchange="dst_rep_change();ext_change()">
- <option value="">(<?=gettext("other"); ?>)</option>
-<?php $bfound = 0;
- foreach ($wkports as $wkport => $wkportdesc): ?>
- <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['dstbeginport']) { echo "selected=\"selected\""; $bfound = 1; }?>><?=htmlspecialchars($wkportdesc);?></option>
-<?php endforeach; ?>
- </select>
- <input autocomplete='off' class="formfldalias" name="dstbeginport_cust" id="dstbeginport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['dstbeginport']) echo htmlspecialchars($pconfig['dstbeginport']); ?>" />
- </td>
- </tr>
- <tr>
- <td><?=gettext("to:"); ?></td>
- <td>
- <select name="dstendport" id="dstendport" class="formselect" onchange="ext_change()">
- <option value="">(<?=gettext("other"); ?>)</option>
-<?php $bfound = 0;
- foreach ($wkports as $wkport => $wkportdesc): ?>
- <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['dstendport']) { echo "selected=\"selected\""; $bfound = 1; } ?>><?=htmlspecialchars($wkportdesc);?></option>
-<?php endforeach; ?>
- </select>
- <input autocomplete='off' class="formfldalias" name="dstendport_cust" id="dstendport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['dstendport']) echo htmlspecialchars($pconfig['dstendport']); ?>" />
- </td>
- </tr>
- </table>
- <br />
- <span class="vexpl">
- <?=gettext("Specify the port or port range for the destination of the packet for this mapping."); ?>
- <br />
- <?=gettext("Hint: you can leave the"); ?> <em>'<?=gettext("to"); ?>'</em> <?=gettext("field empty if you only want to map a single port"); ?>
- </span>
- </td>
- </tr>
- <tr name="localiptable" id="localiptable">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Redirect target IP"); ?></td>
- <td width="78%" class="vtable">
- <input autocomplete='off' name="localip" type="text" class="formfldalias" id="localip" size="20" value="<?=htmlspecialchars($pconfig['localip']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Enter the internal IP address of the server on which you want to map the ports."); ?>
- <br />
- <?=gettext("e.g."); ?>
- <em>192.168.1.12</em>
- </span>
- </td>
- </tr>
- <tr name="lprtr" id="lprtr">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Redirect target port"); ?></td>
- <td width="78%" class="vtable">
- <select name="localbeginport" id="localbeginport" class="formselect" onchange="ext_change();check_for_aliases();">
- <option value="">(<?=gettext("other"); ?>)</option>
- <?php
- $bfound = 0;
- foreach ($wkports as $wkport => $wkportdesc):
- ?>
- <option value="<?=$wkport;?>"
- <?php if ($wkport == $pconfig['localbeginport']) {
- echo "selected=\"selected\"";
- $bfound = 1;
- }?>>
- <?=htmlspecialchars($wkportdesc);?>
- </option>
- <?php endforeach; ?>
- </select> <input onchange="check_for_aliases();" autocomplete='off' class="formfldalias" name="localbeginport_cust" id="localbeginport_cust" type="text" size="5" value="<?php if (!$bfound) echo htmlspecialchars($pconfig['localbeginport']); ?>" />
- <br />
- <span class="vexpl"><?=gettext("Specify the port on the machine with the " .
- "IP address entered above. In case of a port range, specify " .
- "the beginning port of the range (the end port will be calculated " .
- "automatically)."); ?><br />
- <?=gettext("Hint: this is usually identical to the 'from' port above"); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("No XMLRPC Sync"); ?></td>
- <td width="78%" class="vtable">
- <input type="checkbox" value="yes" name="nosync"<?php if ($pconfig['nosync']) echo " checked=\"checked\""; ?> /><br />
- <?=gettext("Hint: This prevents the rule on Master from automatically syncing to other CARP members. This does NOT prevent the rule from being overwritten on Slave.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("NAT reflection"); ?></td>
- <td width="78%" class="vtable">
- <select name="natreflection" class="formselect">
- <option value="default" <?php if ($pconfig['natreflection'] != "enable" && $pconfig['natreflection'] != "purenat" && $pconfig['natreflection'] != "disable") echo "selected=\"selected\""; ?>><?=gettext("Use system default"); ?></option>
- <option value="enable" <?php if ($pconfig['natreflection'] == "enable") echo "selected=\"selected\""; ?>><?=gettext("Enable (NAT + Proxy)"); ?></option>
- <option value="purenat" <?php if ($pconfig['natreflection'] == "purenat") echo "selected=\"selected\""; ?>><?=gettext("Enable (Pure NAT)"); ?></option>
- <option value="disable" <?php if ($pconfig['natreflection'] == "disable") echo "selected=\"selected\""; ?>><?=gettext("Disable"); ?></option>
- </select>
- </td>
- </tr>
- <?php if (isset($id) && $a_nat[$id] && (!isset($_GET['dup']) || !is_numericint($_GET['dup']))): ?>
- <tr name="assoctable" id="assoctable">
- <td width="22%" valign="top" class="vncell"><?=gettext("Filter rule association"); ?></td>
- <td width="78%" class="vtable">
- <select name="associated-rule-id">
- <option value=""><?=gettext("None"); ?></option>
- <option value="pass" <?php if ($pconfig['associated-rule-id'] == "pass") echo " selected=\"selected\""; ?>><?=gettext("Pass"); ?></option>
- <?php
- $linkedrule = "";
- if (is_array($config['filter']['rule'])) {
- filter_rules_sort();
- foreach ($config['filter']['rule'] as $filter_id => $filter_rule) {
- if (isset($filter_rule['associated-rule-id'])) {
- echo "<option value=\"{$filter_rule['associated-rule-id']}\"";
- if ($filter_rule['associated-rule-id'] == $pconfig['associated-rule-id']) {
- echo " selected=\"selected\"";
- $linkedrule = "<br /><a href=\"firewall_rules_edit.php?id={$filter_id}\">" . gettext("View the filter rule") . "</a><br />";
- }
- echo ">". htmlspecialchars('Rule ' . $filter_rule['descr']) . "</option>\n";
- }
- }
- }
- if (isset($pconfig['associated-rule-id'])) {
- echo "<option value=\"new\">" . gettext("Create new associated filter rule") . "</option>\n";
- }
- echo "</select>\n";
- echo $linkedrule;
- ?>
- </td>
- </tr>
- <?php endif; ?>
- <?php if ((!(isset($id) && $a_nat[$id])) || (isset($_GET['dup']) && is_numericint($_GET['dup']))): ?>
- <tr name="assoctable" id="assoctable">
- <td width="22%" valign="top" class="vncell"><?=gettext("Filter rule association"); ?></td>
- <td width="78%" class="vtable">
- <select name="filter-rule-association" id="filter-rule-association">
- <option value=""><?=gettext("None"); ?></option>
- <option value="add-associated" selected="selected"><?=gettext("Add associated filter rule"); ?></option>
- <option value="add-unassociated"><?=gettext("Add unassociated filter rule"); ?></option>
- <option value="pass"><?=gettext("Pass"); ?></option>
- </select>
- <br /><br /><?=gettext("NOTE: The \"pass\" selection does not work properly with Multi-WAN. It will only work on an interface containing the default gateway.")?>
- </td>
- </tr>
- <?php endif; ?>
-<?php
- // Allow extending of the firewall edit page and include custom input validation
- pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/htmlphplate");
-?>
-<?php
- $has_created_time = (isset($a_nat[$id]['created']) && is_array($a_nat[$id]['created']));
- $has_updated_time = (isset($a_nat[$id]['updated']) && is_array($a_nat[$id]['updated']));
-?>
- <?php if ($has_created_time || $has_updated_time): ?>
- <tr>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Rule Information");?></td>
- </tr>
- <?php if ($has_created_time): ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Created");?></td>
- <td width="78%" class="vtable">
- <?= date(gettext("n/j/y H:i:s"), $a_nat[$id]['created']['time']) ?> <?= gettext("by") ?> <strong><?= $a_nat[$id]['created']['username'] ?></strong>
- </td>
- </tr>
- <?php endif; ?>
- <?php if ($has_updated_time): ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Updated");?></td>
- <td width="78%" class="vtable">
- <?= date(gettext("n/j/y H:i:s"), $a_nat[$id]['updated']['time']) ?> <?= gettext("by") ?> <strong><?= $a_nat[$id]['updated']['username'] ?></strong>
- </td>
- </tr>
- <?php endif; ?>
- <?php endif; ?>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">&nbsp;</td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_nat[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- <input name="after" type="hidden" value="<?=htmlspecialchars($after);?>" />
- </td>
- </tr>
- </table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
- ext_change();
- dst_change(document.iform.interface.value,'<?=htmlspecialchars($pconfig['interface'])?>','<?=htmlspecialchars($pconfig['dst'])?>');
- var iface_old = document.iform.interface.value;
- typesel_change();
- proto_change();
- <?php if ($pconfig['srcnot'] || $pconfig['src'] != "any" || $pconfig['srcbeginport'] != "any" || $pconfig['srcendport'] != "any"): ?>
- show_source();
- <?php endif; ?>
- nordr_change();
-//]]>
-</script>
-<script type="text/javascript">
-//<![CDATA[
- var addressarray = <?= json_encode(get_alias_list(array("host", "network", "openvpn", "urltable"))) ?>;
- var customarray = <?= json_encode(get_alias_list(array("port", "url_ports", "urltable_ports"))) ?>;
-
- var oTextbox1 = new AutoSuggestControl(document.getElementById("localip"), new StateSuggestions(addressarray));
- var oTextbox2 = new AutoSuggestControl(document.getElementById("src"), new StateSuggestions(addressarray));
- var oTextbox3 = new AutoSuggestControl(document.getElementById("dst"), new StateSuggestions(addressarray));
- var oTextbox4 = new AutoSuggestControl(document.getElementById("dstbeginport_cust"), new StateSuggestions(customarray));
- var oTextbox5 = new AutoSuggestControl(document.getElementById("dstendport_cust"), new StateSuggestions(customarray));
- var oTextbox6 = new AutoSuggestControl(document.getElementById("srcbeginport_cust"), new StateSuggestions(customarray));
- var oTextbox7 = new AutoSuggestControl(document.getElementById("srcendport_cust"), new StateSuggestions(customarray));
- var oTextbox8 = new AutoSuggestControl(document.getElementById("localbeginport_cust"), new StateSuggestions(customarray));
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_nat_npt.php b/usr/local/www/firewall_nat_npt.php
deleted file mode 100644
index 003bd88..0000000
--- a/usr/local/www/firewall_nat_npt.php
+++ /dev/null
@@ -1,195 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_nat_npt.php
- part of pfSense (https://www.pfsense.org)
-
- Copyright (C) 2011 Seth Mos <seth.mos@dds.nl>.
- All rights reserved.
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: nat
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-nat-npt
-##|*NAME=Firewall: NAT: NPT page
-##|*DESCR=Allow access to the 'Firewall: NAT: NPT' page.
-##|*MATCH=firewall_nat_npt.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-if (!is_array($config['nat']['npt'])) {
- $config['nat']['npt'] = array();
-}
-$a_npt = &$config['nat']['npt'];
-
-if ($_POST) {
-
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
- $retval = 0;
- $retval |= filter_configure();
- $savemsg = get_std_save_message($retval);
-
- if ($retval == 0) {
- clear_subsystem_dirty('natconf');
- clear_subsystem_dirty('filter');
- }
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($a_npt[$_GET['id']]) {
- unset($a_npt[$_GET['id']]);
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- }
- header("Location: firewall_nat_npt.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("NPt"));
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="firewall_nat_npt.php" method="post">
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('natconf')): ?>
-<?php print_info_box_np(gettext("The NAT configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall nat npt">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Port Forward"), false, "firewall_nat.php");
- $tab_array[] = array(gettext("1:1"), false, "firewall_nat_1to1.php");
- $tab_array[] = array(gettext("Outbound"), false, "firewall_nat_out.php");
- $tab_array[] = array(gettext("NPt"), true, "firewall_nat_npt.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="10%" class="listhdrr"><?=gettext("Interface"); ?></td>
- <td width="20%" class="listhdrr"><?=gettext("External Prefix"); ?></td>
- <td width="15%" class="listhdrr"><?=gettext("Internal prefix"); ?></td>
- <td width="30%" class="listhdr"><?=gettext("Description"); ?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17"></td>
- <td valign="middle"><a href="firewall_nat_npt_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add rule"); ?>" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $textse = "</span>";
-
- $i = 0;
- foreach ($a_npt as $natent):
-
- if (isset($natent['disabled'])) {
- $textss = "<span class=\"gray\">";
- } else {
- $textss = "<span>";
- }
-?>
- <tr>
- <td class="listlr" ondblclick="document.location='firewall_nat_npt_edit.php?id=<?=$i;?>';">
-<?php
- echo $textss;
- if (!$natent['interface']) {
- echo htmlspecialchars(convert_friendly_interface_to_friendly_descr("wan"));
- } else {
- echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface']));
- }
- echo $textse;
-?>
- </td>
-<?php
- $source_net = pprint_address($natent['source']);
- $source_cidr = strstr($source_net, '/');
- $destination_net = pprint_address($natent['destination']);
- $destination_cidr = strstr($destination_net, '/');
-?>
- <td class="listr" ondblclick="document.location='firewall_nat_npt_edit.php?id=<?=$i;?>';">
- <?php echo $textss . $destination_net . $textse; ?>
- </td>
- <td class="listr" ondblclick="document.location='firewall_nat_npt_edit.php?id=<?=$i;?>';">
- <?php echo $textss . $source_net . $textse; ?>
- </td>
- <td class="listbg" ondblclick="document.location='firewall_nat_npt_edit.php?id=<?=$i;?>';">
- <?=$textss;?>
- <?=htmlspecialchars($natent['descr']);?>&nbsp;
- <?=$textse;?>
- </td>
- <td class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="edit">
- <tr>
- <td valign="middle"><a href="firewall_nat_npt_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit rule"); ?>" alt="edit" /></a></td>
- <td valign="middle"><a href="firewall_nat_npt.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete rule"); ?>" alt="delete" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="4"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17"></td>
- <td valign="middle"><a href="firewall_nat_npt_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add rule"); ?>" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_nat_npt_edit.php b/usr/local/www/firewall_nat_npt_edit.php
deleted file mode 100644
index addddd2..0000000
--- a/usr/local/www/firewall_nat_npt_edit.php
+++ /dev/null
@@ -1,311 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_nat_npt_edit.php
- part of pfSense (https://www.pfsense.org)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2011 Seth Mos <seth.mos@dds.nl>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: nat
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-nat-npt-edit
-##|*NAME=Firewall: NAT: NPt: Edit page
-##|*DESCR=Allow access to the 'Firewall: NAT: NPt: Edit' page.
-##|*MATCH=firewall_nat_npt_edit.php*
-##|-PRIV
-
-function natnptcmp($a, $b) {
- return ipcmp($a['external'], $b['external']);
-}
-
-function nat_npt_rules_sort() {
- global $g, $config;
-
- if (!is_array($config['nat']['npt'])) {
- return;
- }
-
- usort($config['nat']['npt'], "natnptcmp");
-}
-
-require("guiconfig.inc");
-require_once("interfaces.inc");
-require_once("filter.inc");
-require("shaper.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_nat_npt.php');
-}
-
-$ifdisp = get_configured_interface_with_descr();
-foreach ($ifdisp as $kif => $kdescr) {
- $specialsrcdst[] = "{$kif}";
- $specialsrcdst[] = "{$kif}ip";
-}
-
-if (!is_array($config['nat']['npt'])) {
- $config['nat']['npt'] = array();
-}
-$a_npt = &$config['nat']['npt'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_npt[$id]) {
- $pconfig['disabled'] = isset($a_npt[$id]['disabled']);
-
- address_to_pconfig($a_npt[$id]['source'], $pconfig['src'],
- $pconfig['srcmask'], $pconfig['srcnot'],
- $pconfig['srcbeginport'], $pconfig['srcendport']);
-
- address_to_pconfig($a_npt[$id]['destination'], $pconfig['dst'],
- $pconfig['dstmask'], $pconfig['dstnot'],
- $pconfig['dstbeginport'], $pconfig['dstendport']);
-
- $pconfig['interface'] = $a_npt[$id]['interface'];
- if (!$pconfig['interface']) {
- $pconfig['interface'] = "wan";
- }
-
- $pconfig['external'] = $a_npt[$id]['external'];
- $pconfig['descr'] = $a_npt[$id]['descr'];
-} else {
- $pconfig['interface'] = "wan";
-}
-
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "interface");
- $reqdfieldsn = array(gettext("Interface"));
- $reqdfields[] = "src";
- $reqdfieldsn[] = gettext("Source prefix");
- $reqdfields[] = "dst";
- $reqdfieldsn[] = gettext("Destination prefix");
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (!$input_errors) {
- $natent = array();
-
- $natent['disabled'] = isset($_POST['disabled']) ? true:false;
- $natent['descr'] = $_POST['descr'];
- $natent['interface'] = $_POST['interface'];
-
- if ($_POST['src']) {
- $_POST['src'] = trim($_POST['src']);
- }
- if ($_POST['dst']) {
- $_POST['dst'] = trim($_POST['dst']);
- }
-
- pconfig_to_address($natent['source'], $_POST['src'], $_POST['srcmask'], $_POST['srcnot']);
-
- pconfig_to_address($natent['destination'], $_POST['dst'], $_POST['dstmask'], $_POST['dstnot']);
-
- if (isset($id) && $a_npt[$id]) {
- $a_npt[$id] = $natent;
- } else {
- $a_npt[] = $natent;
- }
- nat_npt_rules_sort();
-
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- }
-
- header("Location: firewall_nat_npt.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("NPt"), gettext("Edit"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script type="text/javascript" src="/javascript/suggestions.js"></script>
-<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
-
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="firewall_nat_npt_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="firewall nat npt edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit NAT NPt entry"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
- <td width="78%" class="vtable">
- <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable this rule"); ?></strong><br />
- <span class="vexpl"><?=gettext("Set this option to disable this rule without removing it from the list."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
- <td width="78%" class="vtable">
- <select name="interface" class="formselect">
- <?php
- foreach ($ifdisp as $if => $ifdesc) {
- if (have_ruleint_access($if)) {
- $interfaces[$if] = $ifdesc;
- }
- }
-
- if ($config['l2tp']['mode'] == "server") {
- if (have_ruleint_access("l2tp")) {
- $interfaces['l2tp'] = "L2TP VPN";
- }
- }
-
- if ($config['pptpd']['mode'] == "server") {
- if (have_ruleint_access("pptp")) {
- $interfaces['pptp'] = "PPTP VPN";
- }
- }
-
- if ($config['pppoe']['mode'] == "server") {
- if (have_ruleint_access("pppoe")) {
- $interfaces['pppoe'] = "PPPoE Server";
- }
- }
-
- /* add ipsec interfaces */
- if (isset($config['ipsec']['enable']) || isset($config['ipsec']['mobileclients']['enable'])) {
- if (have_ruleint_access("enc0")) {
- $interfaces["enc0"] = "IPsec";
- }
- }
-
- /* add openvpn/tun interfaces */
- if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) {
- $interfaces["openvpn"] = "OpenVPN";
- }
-
- foreach ($interfaces as $iface => $ifacename):
- ?>
- <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
- <?php endforeach; ?>
- </select><br />
- <span class="vexpl"><?=gettext("Choose which interface this rule applies to"); ?>.<br />
- <?=gettext("Hint: in most cases, you'll want to use WAN here"); ?>.
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Internal IPv6 Prefix"); ?></td>
- <td width="78%" class="vtable">
- <input name="srcnot" type="checkbox" id="srcnot" value="yes" <?php if ($pconfig['srcnot']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("not"); ?></strong>
- <br />
- <?=gettext("Use this option to invert the sense of the match."); ?>
- <br />
- <br />
- <table border="0" cellspacing="0" cellpadding="0" summary="internal">
- <tr>
- <td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
- <td>
- <input name="src" type="text" class="formfldalias" id="src" size="20" value="<?php if (!is_specialnet($pconfig['src'])) echo htmlspecialchars($pconfig['src']);?>" /> /
- <select name="srcmask" class="formselect" id="srcmask">
-<?php for ($i = 128; $i > 0; $i--): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['srcmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
-<?php endfor; ?>
- </select>
- </td>
- </tr>
- </table>
- <br />
- <span class="vexpl"><?=gettext("Enter the internal (LAN) ULA IPv6 Prefix for the Network Prefix translation. The prefix size specified for the internal IPv6 prefix will be applied to the external prefix.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination IPv6 Prefix"); ?></td>
- <td width="78%" class="vtable">
- <input name="dstnot" type="checkbox" id="dstnot" value="yes" <?php if ($pconfig['dstnot']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("not"); ?></strong>
- <br />
- <?=gettext("Use this option to invert the sense of the match."); ?>
- <br />
- <br />
- <table border="0" cellspacing="0" cellpadding="0" summary="destination">
- <tr>
- <td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
- <td>
- <input name="dst" type="text" class="formfldalias" id="dst" size="20" value="<?php if (!is_specialnet($pconfig['dst'])) echo htmlspecialchars($pconfig['dst']);?>" />
- /
- <select name="dstmask" class="formselect" id="dstmask">
-<?php
- for ($i = 128; $i > 0; $i--): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['dstmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
-<?php endfor; ?>
- </select>
- </td>
- </tr>
- </table>
- <br />
- <span class="vexpl"><?=gettext("Enter the Global Unicast routable IPv6 prefix here"); ?><br /></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br /> <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_npt[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_nat_out.php b/usr/local/www/firewall_nat_out.php
deleted file mode 100644
index d560abe..0000000
--- a/usr/local/www/firewall_nat_out.php
+++ /dev/null
@@ -1,695 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_nat_out.php
- Copyright (C) 2004 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: nat
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-nat-outbound
-##|*NAME=Firewall: NAT: Outbound page
-##|*DESCR=Allow access to the 'Firewall: NAT: Outbound' page.
-##|*MATCH=firewall_nat_out.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-global $FilterIflist;
-global $GatewaysList;
-
-if (!is_array($config['nat']['outbound'])) {
- $config['nat']['outbound'] = array();
-}
-
-if (!is_array($config['nat']['outbound']['rule'])) {
- $config['nat']['outbound']['rule'] = array();
-}
-
-$a_out = &$config['nat']['outbound']['rule'];
-
-if (!isset($config['nat']['outbound']['mode'])) {
- $config['nat']['outbound']['mode'] = "automatic";
-}
-
-$mode = $config['nat']['outbound']['mode'];
-
-if ($_POST['apply']) {
- $retval = 0;
- $retval |= filter_configure();
-
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message($retval);
- } else {
- $savemsg = $retval;
- }
-
- if ($retval == 0) {
- clear_subsystem_dirty('natconf');
- clear_subsystem_dirty('filter');
- }
-}
-
-if (isset($_POST['save']) && $_POST['save'] == "Save") {
- /* mutually exclusive settings - if user wants advanced NAT, we don't generate automatic rules */
- if ($_POST['mode'] == "advanced" && ($mode == "automatic" || $mode == "hybrid")) {
- /*
- * user has enabled advanced outbound NAT and doesn't have rules
- * lets automatically create entries
- * for all of the interfaces to make life easier on the pip-o-chap
- */
- if (empty($FilterIflist)) {
- filter_generate_optcfg_array();
- }
- if (empty($GatewaysList)) {
- filter_generate_gateways();
- }
- $tonathosts = filter_nat_rules_automatic_tonathosts(true);
- $automatic_rules = filter_nat_rules_outbound_automatic("");
-
- foreach ($tonathosts as $tonathost) {
- foreach ($automatic_rules as $natent) {
- $natent['source']['network'] = $tonathost['subnet'];
- $natent['descr'] .= sprintf(gettext(' - %1$s to %2$s'),
- $tonathost['descr'],
- convert_real_interface_to_friendly_descr($natent['interface']));
- $natent['created'] = make_config_revision_entry(null, gettext("Manual Outbound NAT Switch"));
-
- /* Try to detect already auto created rules and avoid duplicating them */
- $found = false;
- foreach ($a_out as $rule) {
- if ($rule['interface'] == $natent['interface'] &&
- $rule['source']['network'] == $natent['source']['network'] &&
- $rule['dstport'] == $natent['dstport'] &&
- $rule['target'] == $natent['target'] &&
- $rule['descr'] == $natent['descr']) {
- $found = true;
- break;
- }
- }
-
- if ($found === false) {
- $a_out[] = $natent;
- }
- }
- }
- $savemsg = gettext("Default rules for each interface have been created.");
- unset($FilterIflist, $GatewaysList);
- }
-
- $config['nat']['outbound']['mode'] = $_POST['mode'];
-
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- }
- header("Location: firewall_nat_out.php");
- exit;
-}
-
-if ($_GET['act'] == "del") {
- if ($a_out[$_GET['id']]) {
- unset($a_out[$_GET['id']]);
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- }
- header("Location: firewall_nat_out.php");
- exit;
- }
-}
-
-if (isset($_POST['del_x'])) {
- /* delete selected rules */
- if (is_array($_POST['rule']) && count($_POST['rule'])) {
- foreach ($_POST['rule'] as $rulei) {
- unset($a_out[$rulei]);
- }
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- }
- header("Location: firewall_nat_out.php");
- exit;
- }
-
-} else if ($_GET['act'] == "toggle") {
- if ($a_out[$_GET['id']]) {
- if (isset($a_out[$_GET['id']]['disabled'])) {
- unset($a_out[$_GET['id']]['disabled']);
- } else {
- $a_out[$_GET['id']]['disabled'] = true;
- }
- if (write_config("Firewall: NAT: Outbound, enable/disable NAT rule")) {
- mark_subsystem_dirty('natconf');
- }
- header("Location: firewall_nat_out.php");
- exit;
- }
-} else {
- /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
- unset($movebtn);
- foreach ($_POST as $pn => $pd) {
- if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
- $movebtn = $matches[1];
- break;
- }
- }
- /* move selected rules before this rule */
- if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) {
- $a_out_new = array();
-
- /* copy all rules < $movebtn and not selected */
- for ($i = 0; $i < $movebtn; $i++) {
- if (!in_array($i, $_POST['rule'])) {
- $a_out_new[] = $a_out[$i];
- }
- }
-
- /* copy all selected rules */
- for ($i = 0; $i < count($a_out); $i++) {
- if ($i == $movebtn) {
- continue;
- }
- if (in_array($i, $_POST['rule'])) {
- $a_out_new[] = $a_out[$i];
- }
- }
-
- /* copy $movebtn rule */
- if ($movebtn < count($a_out)) {
- $a_out_new[] = $a_out[$movebtn];
- }
-
- /* copy all rules > $movebtn and not selected */
- for ($i = $movebtn+1; $i < count($a_out); $i++) {
- if (!in_array($i, $_POST['rule'])) {
- $a_out_new[] = $a_out[$i];
- }
- }
- if (count($a_out_new) > 0) {
- $a_out = $a_out_new;
- }
-
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- }
- header("Location: firewall_nat_out.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("Outbound"));
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="firewall_nat_out.php" method="post" name="iform">
-<script type="text/javascript" src="/javascript/row_toggle.js"></script>
-<?php
-if ($savemsg) {
- print_info_box($savemsg);
-}
-if (is_subsystem_dirty('natconf')) {
- print_info_box_np(gettext("The NAT configuration has been changed.")."<br />".gettext("You must apply the changes in order for them to take effect."));
-}
-?>
-<br />
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall nat outbound">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Port Forward"), false, "firewall_nat.php");
- $tab_array[] = array(gettext("1:1"), false, "firewall_nat_1to1.php");
- $tab_array[] = array(gettext("Outbound"), true, "firewall_nat_out.php");
- $tab_array[] = array(gettext("NPt"), false, "firewall_nat_npt.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td rowspan="3" align="right" valign="middle"><b><?=gettext("Mode:"); ?></b></td>
- <td>
- <input name="mode" type="radio" id="automatic" value="automatic" <?php if ($mode == "automatic") echo "checked=\"checked\"";?> />
- </td>
- <td>
- <strong>
- <?=gettext("Automatic outbound NAT rule generation"); ?><br />
- <?=gettext("(IPsec passthrough included)");?>
- </strong>
- </td>
- <td>
- <input name="mode" type="radio" id="hybrid" value="hybrid" <?php if ($mode == "hybrid") echo "checked=\"checked\"";?> />
- </td>
- <td>
- <strong>
- <?=gettext("Hybrid Outbound NAT rule generation"); ?><br />
- <?=gettext("(Automatic Outbound NAT + rules below)");?>
- </strong>
- </td>
- <td rowspan="3" valign="middle" align="left">
- <input name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- </td>
- </tr>
- <tr>
- <td colspan="4">
- &nbsp;
- </td>
- </tr>
- <tr>
- <td>
- <input name="mode" type="radio" id="advanced" value="advanced" <?php if ($mode == "advanced") echo "checked=\"checked\"";?> />
- </td>
- <td>
- <strong>
- <?=gettext("Manual Outbound NAT rule generation"); ?><br />
- <?=gettext("(AON - Advanced Outbound NAT)");?>
- </strong>
- </td>
- <td>
- <input name="mode" type="radio" id="disabled" value="disabled" <?php if ($mode == "disabled") echo "checked=\"checked\"";?> />
- </td>
- <td>
- <strong>
- <?=gettext("Disable Outbound NAT rule generation"); ?><br />
- <?=gettext("(No Outbound NAT rules)");?>
- </strong>
- </td>
- </tr>
- <tr>
- <td colspan="6">
- &nbsp;
- </td>
- </tr>
- </table>
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="mappings">
- <tr><td colspan="5"><b>&nbsp;<?=gettext("Mappings:"); ?></b></td></tr>
- <tr><td>&nbsp;</td></tr>
- <tr id="frheader">
- <td width="3%" class="list">&nbsp;</td>
- <td width="3%" class="list">&nbsp;</td>
- <td width="10%" class="listhdrr"><?=gettext("Interface");?></td>
- <td width="15%" class="listhdrr"><?=gettext("Source");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Source Port");?></td>
- <td width="15%" class="listhdrr"><?=gettext("Destination");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Destination Port");?></td>
- <td width="15%" class="listhdrr"><?=gettext("NAT Address");?></td>
- <td width="10%" class="listhdrr"><?=gettext("NAT Port");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Static Port");?></td>
- <td width="25%" class="listhdr"><?=gettext("Description");?></td>
- <td width="5%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17"></td>
- <td>
- <a href="firewall_nat_out_edit.php?after=-1">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add new mapping");?>" alt="add" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_out as $natent):
- $iconfn = "pass";
- $textss = $textse = "";
- if ($mode == "disabled" || $mode == "automatic" || isset($natent['disabled'])) {
- $textss = "<span class=\"gray\">";
- $textse = "</span>";
- $iconfn .= "_d";
- }
-
- //build Alias popup box
- $alias_src_span_begin = "";
- $alias_src_port_span_begin = "";
- $alias_dst_span_begin = "";
- $alias_dst_port_span_begin = "";
-
- $alias_popup = rule_popup($natent['source']['network'], pprint_port($natent['sourceport']), $natent['destination']['address'], pprint_port($natent['dstport']));
-
- $alias_src_span_begin = $alias_popup["src"];
- $alias_src_port_span_begin = $alias_popup["srcport"];
- $alias_dst_span_begin = $alias_popup["dst"];
- $alias_dst_port_span_begin = $alias_popup["dstport"];
-
- $alias_src_span_end = $alias_popup["src_end"];
- $alias_src_port_span_end = $alias_popup["srcport_end"];
- $alias_dst_span_end = $alias_popup["dst_end"];
- $alias_dst_port_span_end = $alias_popup["dstport_end"];
-?>
- <tr valign="top" id="fr<?=$i;?>">
- <td class="listt">
- <input type="checkbox" id="frc<?=$i;?>" name="rule[]" value="<?=$i;?>" onclick="fr_bgcolor('<?=$i;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
- </td>
- <td class="listt" align="center">
-<?php
- if ($mode == "disabled" || $mode == "automatic"):
-?>
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0"
- title="<?=gettext("This rule is being ignored");?>" alt="icon" />
-<?php
- else:
-?>
- <a href="?act=toggle&amp;id=<?=$i;?>">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0"
- title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" />
- </a>
-<?php
- endif;
-?>
- </td>
- <td class="listlr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
- <?php echo $textss . htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface'])) . $textse; ?>
- &nbsp;
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
- <?php $natent['source']['network'] = ($natent['source']['network'] == "(self)") ? "This Firewall" : $natent['source']['network']; ?>
- <?php echo $textss . $alias_src_span_begin . $natent['source']['network'] . $alias_src_span_end . $textse;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
-<?php
- echo $textss;
- echo ($natent['protocol']) ? $natent['protocol'] . '/' : "" ;
- if (!$natent['sourceport']) {
- echo "*";
- } else {
- echo $alias_src_port_span_begin . $natent['sourceport'] . $alias_src_port_span_end;
- }
- echo $textse;
-?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
-<?php
- echo $textss;
- if (isset($natent['destination']['any'])) {
- echo "*";
- } else {
- if (isset($natent['destination']['not'])) {
- echo "!&nbsp;";
- }
- echo $alias_dst_span_begin . $natent['destination']['address'] . $alias_dst_span_end;
- }
- echo $textse;
-?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
-<?php
- echo $textss;
- echo ($natent['protocol']) ? $natent['protocol'] . '/' : "" ;
- if (!$natent['dstport']) {
- echo "*";
- } else {
- echo $alias_dst_port_span_begin . $natent['dstport'] . $alias_dst_port_span_end;
- }
- echo $textse;
-?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
-<?php
- echo $textss;
- if (isset($natent['nonat'])) {
- echo '<I>NO NAT</I>';
- } elseif (!$natent['target']) {
- echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface'])) . " address";
- } elseif ($natent['target'] == "other-subnet") {
- echo $natent['targetip'] . '/' . $natent['targetip_subnet'];
- } else {
- echo $natent['target'];
- }
- echo $textse;
-?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
-<?php
- echo $textss;
- if (!$natent['natport']) {
- echo "*";
- } else {
- echo $natent['natport'];
- }
- echo $textse;
-?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';" align="center">
-<?php
- echo $textss;
- if (isset($natent['staticnatport'])) {
- echo gettext("YES");
- } else {
- echo gettext("NO");
- }
- echo $textse;
-?>
- </td>
- <td class="listbg" onclick="fr_toggle(<?=$i;?>)" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($natent['descr']);?>&nbsp;
- </td>
- <td class="list nowrap" valign="middle">
- <table border="0" cellspacing="0" cellpadding="1" summary="move">
- <tr>
- <td><input onmouseover="fr_insline(<?=$i;?>, true)" onmouseout="fr_insline(<?=$i;?>, false)" name="move_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" title="<?=gettext("move selected rules before this rule");?>" type="image" style="height:17;width:17;border:0" /></td>
- <td>
- <a href="firewall_nat_out_edit.php?id=<?=$i;?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit mapping");?>" alt="edit" />
- </a>
- </td>
- </tr>
- <tr>
- <td align="center" valign="middle">
- <a href="firewall_nat_out.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this rule?");?>')">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete rule");?>" alt="delete" />
- </a>
- </td>
- <td>
- <a href="firewall_nat_out_edit.php?dup=<?=$i;?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add a new NAT based on this one");?>" width="17" height="17" border="0" alt="duplicate" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr valign="top" id="fr<?=$i;?>">
- <td class="list" colspan="11"></td>
- <td class="list nowrap" valign="middle">
- <table border="0" cellspacing="0" cellpadding="1" summary="edit">
- <tr>
- <td>
-<?php
- if ($i == 0):
-?>
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected mappings to end");?>" border="0" alt="move" />
-<?php
- else:
-?>
- <input onmouseover="fr_insline(<?=$i;?>, true)" onmouseout="fr_insline(<?=$i;?>, false)" name="move_<?=$i;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" style="width:17;height:17;border:0" title="<?=gettext("move selected mappings to end");?>" />
-<?php
- endif;
-?>
- </td>
- <td>
- <a href="firewall_nat_out_edit.php">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add new mapping");?>" alt="add" />
- </a>
- </td>
- </tr>
- <tr>
- <td>
-<?php
- if ($i == 0):
-?>
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected rules");?>" border="0" alt="delete" />
-<?php
- else:
-?>
- <input name="del" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" style="width:17;height:17" title="<?=gettext("delete selected mappings");?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected mappings?");?>')" />
-<?php
- endif;
-?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- if ($mode == "automatic" || $mode == "hybrid"):
- if (empty($FilterIflist)) {
- filter_generate_optcfg_array();
- }
- if (empty($GatewaysList)) {
- filter_generate_gateways();
- }
- $automatic_rules = filter_nat_rules_outbound_automatic(implode(" ", filter_nat_rules_automatic_tonathosts()));
- unset($FilterIflist, $GatewaysList);
-?>
- <tr><td colspan="5"><b>&nbsp;<?=gettext("Automatic rules:"); ?></b></td></tr>
- <tr><td>&nbsp;</td></tr>
- <tr id="frheader">
- <td width="3%" class="list">&nbsp;</td>
- <td width="3%" class="list">&nbsp;</td>
- <td width="10%" class="listhdrr"><?=gettext("Interface");?></td>
- <td width="15%" class="listhdrr"><?=gettext("Source");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Source Port");?></td>
- <td width="15%" class="listhdrr"><?=gettext("Destination");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Destination Port");?></td>
- <td width="15%" class="listhdrr"><?=gettext("NAT Address");?></td>
- <td width="10%" class="listhdrr"><?=gettext("NAT Port");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Static Port");?></td>
- <td width="25%" class="listhdr"><?=gettext("Description");?></td>
- <td width="5%" class="list">&nbsp;</td>
- </tr>
-<?php
- foreach ($automatic_rules as $natent):
-?>
- <tr valign="top">
- <td class="list">&nbsp;</td>
- <td class="listt" align="center">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" width="11" height="11" border="0" title="<?=gettext("automatic outbound nat");?>" alt="icon" />
- </td>
- <td class="listlr" style="background-color: #E0E0E0">
- <?php echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface'])); ?>
- &nbsp;
- </td>
- <td class="listr" style="background-color: #E0E0E0">
- <?=$natent['source']['network'];?>
- </td>
- <td class="listr" style="background-color: #E0E0E0">
-<?php
- echo ($natent['protocol']) ? $natent['protocol'] . '/' : "" ;
- if (!$natent['sourceport']) {
- echo "*";
- } else {
- echo $natent['sourceport'];
- }
-?>
- </td>
- <td class="listr" style="background-color: #E0E0E0">
-<?php
- if (isset($natent['destination']['any'])) {
- echo "*";
- } else {
- if (isset($natent['destination']['not'])) {
- echo "!&nbsp;";
- }
- echo $natent['destination']['address'];
- }
-?>
- </td>
- <td class="listr" style="background-color: #E0E0E0">
-<?php
- echo ($natent['protocol']) ? $natent['protocol'] . '/' : "" ;
- if (!$natent['dstport']) {
- echo "*";
- } else {
- echo $natent['dstport'];
- }
-?>
- </td>
- <td class="listr" style="background-color: #E0E0E0">
-<?php
- if (isset($natent['nonat'])) {
- echo '<I>NO NAT</I>';
- } elseif (!$natent['target']) {
- echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface'])) . " address";
- } elseif ($natent['target'] == "other-subnet") {
- echo $natent['targetip'] . '/' . $natent['targetip_subnet'];
- } else {
- echo $natent['target'];
- }
-?>
- </td>
- <td class="listr" style="background-color: #E0E0E0">
-<?php
- if (!$natent['natport']) {
- echo "*";
- } else {
- echo $natent['natport'];
- }
-?>
- </td>
- <td class="listr" style="background-color: #E0E0E0">
-<?php
- if (isset($natent['staticnatport'])) {
- echo gettext("YES");
- } else {
- echo gettext("NO");
- }
-?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($natent['descr']);?>&nbsp;
- </td>
- <td class="list">&nbsp;</td>
- </tr>
-<?php
- endforeach;
- endif;
-?>
- <tr>
- <td colspan="12">
- <p><span class="vexpl">
- <span class="red"><strong><?=gettext("Note:"); ?><br /></strong></span>
- <?=gettext("If automatic outbound NAT selected, a mapping is automatically created " .
- "for each interface's subnet (except WAN-type connections) and the rules " .
- "on \"Mappings\" section of this page are ignored.<br /><br /> " .
- "If manual outbound NAT is selected, outbound NAT rules will not be " .
- "automatically generated and only the mappings you specify on this page " .
- "will be used. <br /><br /> " .
- "If hybrid outbound NAT is selected, mappings you specify on this page will " .
- "be used, followed by the automatically generated ones. <br /><br />" .
- "If disable outbound NAT is selected, no rules will be used. <br /><br />" .
- "If a target address other than an interface's IP address is used, " .
- "then depending on the way the WAN connection is setup, a "); ?>
- <a href="firewall_virtual_ip.php"><?=gettext("Virtual IP"); ?></a>
- <?= gettext(" may also be required.") ?>
- </span></p>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_nat_out_edit.php b/usr/local/www/firewall_nat_out_edit.php
deleted file mode 100644
index e99cebb..0000000
--- a/usr/local/www/firewall_nat_out_edit.php
+++ /dev/null
@@ -1,905 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_nat_out_edit.php
- Copyright (C) 2004 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: nat
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-nat-outbound-edit
-##|*NAME=Firewall: NAT: Outbound: Edit page
-##|*DESCR=Allow access to the 'Firewall: NAT: Outbound: Edit' page.
-##|*MATCH=firewall_nat_out_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("filter.inc");
-require("shaper.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_nat_out.php');
-}
-
-if (!is_array($config['nat']['outbound'])) {
- $config['nat']['outbound'] = array();
-}
-
-if (!is_array($config['nat']['outbound']['rule'])) {
- $config['nat']['outbound']['rule'] = array();
-}
-
-$a_out = &$config['nat']['outbound']['rule'];
-
-if (!is_array($config['aliases']['alias'])) {
- $config['aliases']['alias'] = array();
-}
-$a_aliases = &$config['aliases']['alias'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (is_numericint($_GET['after']) || $_GET['after'] == "-1") {
- $after = $_GET['after'];
-}
-if (isset($_POST['after']) && (is_numericint($_POST['after']) || $_POST['after'] == "-1")) {
- $after = $_POST['after'];
-}
-
-if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
- $id = $_GET['dup'];
- $after = $_GET['dup'];
-}
-
-if (isset($id) && $a_out[$id]) {
- if (isset($a_out[$id]['created']) && is_array($a_out[$id]['created'])) {
- $pconfig['created'] = $a_out[$id]['created'];
- }
-
- if (isset($a_out[$id]['updated']) && is_array($a_out[$id]['updated'])) {
- $pconfig['updated'] = $a_out[$id]['updated'];
- }
-
- $pconfig['protocol'] = $a_out[$id]['protocol'];
- list($pconfig['source'], $pconfig['source_subnet']) = explode('/', $a_out[$id]['source']['network']);
- if (!is_numeric($pconfig['source_subnet'])) {
- $pconfig['source_subnet'] = 32;
- }
- $pconfig['sourceport'] = $a_out[$id]['sourceport'];
- address_to_pconfig($a_out[$id]['destination'], $pconfig['destination'],
- $pconfig['destination_subnet'], $pconfig['destination_not'],
- $none, $none);
- $pconfig['dstport'] = $a_out[$id]['dstport'];
- $pconfig['natport'] = $a_out[$id]['natport'];
- $pconfig['target'] = $a_out[$id]['target'];
- $pconfig['targetip'] = $a_out[$id]['targetip'];
- $pconfig['targetip_subnet'] = $a_out[$id]['targetip_subnet'];
- $pconfig['poolopts'] = $a_out[$id]['poolopts'];
- $pconfig['interface'] = $a_out[$id]['interface'];
- if (!$pconfig['interface']) {
- $pconfig['interface'] = "wan";
- }
- $pconfig['descr'] = $a_out[$id]['descr'];
- $pconfig['nonat'] = $a_out[$id]['nonat'];
- $pconfig['disabled'] = isset($a_out[$id]['disabled']);
- $pconfig['staticnatport'] = isset($a_out[$id]['staticnatport']);
- $pconfig['nosync'] = isset($a_out[$id]['nosync']);
-} else {
- $pconfig['source_subnet'] = 24;
- $pconfig['destination'] = "any";
- $pconfig['destination_subnet'] = 24;
- $pconfig['interface'] = "wan";
-}
-
-if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
- unset($id);
-}
-
-if ($_POST) {
- if ($_POST['destination_type'] == "any") {
- $_POST['destination'] = "any";
- $_POST['destination_subnet'] = 24;
- }
- if ($_POST['source_type'] == "any") {
- $_POST['source'] = "any";
- $_POST['source_subnet'] = 24;
- } elseif ($_POST['source_type'] == "(self)") {
- $_POST['source'] = "(self)";
- $_POST['source_subnet'] = 24;
- }
-
- unset($input_errors);
- $pconfig = $_POST;
- /* run through $_POST items encoding HTML entitles so that the user
- * cannot think he is slick and perform a XSS attack on the unwilling
- */
- foreach ($_POST as $key => $value) {
- $temp = str_replace(">", "", $value);
- $newpost = htmlentities($temp);
- if ($newpost <> $temp) {
- $input_errors[] = sprintf(gettext("Invalid characters detected (%s). Please remove invalid characters and save again."), $temp);
- }
- }
-
- /* input validation */
- $reqdfields = explode(" ", "interface protocol source source_subnet destination destination_subnet");
- $reqdfieldsn = array(gettext("Interface"), gettext("Protocol"), gettext("Source"), gettext("Source bit count"), gettext("Destination"), gettext("Destination bit count"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- $protocol_uses_ports = in_array($_POST['protocol'], explode(" ", "any tcp udp tcp/udp"));
-
- if ($_POST['source']) {
- $_POST['source'] = trim($_POST['source']);
- }
- if ($_POST['destination']) {
- $_POST['destination'] = trim($_POST['destination']);
- }
- if ($_POST['targetip']) {
- $_POST['targetip'] = trim($_POST['targetip']);
- }
- if ($_POST['sourceport']) {
- $_POST['sourceport'] = trim($_POST['sourceport']);
- }
- if ($_POST['dstport']) {
- $_POST['dstport'] = trim($_POST['dstport']);
- }
- if ($_POST['natport']) {
- $_POST['natport'] = trim($_POST['natport']);
- }
-
- if ($protocol_uses_ports && $_POST['sourceport'] <> "" && !(is_portoralias($_POST['sourceport']) || is_portrange($_POST['sourceport']))) {
- $input_errors[] = gettext("You must supply either a valid port or port alias for the source port entry.");
- }
-
- if ($protocol_uses_ports && $_POST['dstport'] <> "" && !(is_portoralias($_POST['dstport']) || is_portrange($_POST['dstport']))) {
- $input_errors[] = gettext("You must supply either a valid port or port alias for the destination port entry.");
- }
-
- if ($protocol_uses_ports && $_POST['natport'] <> "" && !is_port($_POST['natport']) && !isset($_POST['nonat'])) {
- $input_errors[] = gettext("You must supply a valid port for the NAT port entry.");
- }
-
- if (($_POST['source_type'] != "any") && ($_POST['source_type'] != "(self)")) {
- if ($_POST['source'] && !is_ipaddroralias($_POST['source']) && $_POST['source'] <> "any") {
- $input_errors[] = gettext("A valid source must be specified.");
- }
- }
- if ($_POST['source_subnet'] && !is_numericint($_POST['source_subnet'])) {
- $input_errors[] = gettext("A valid source bit count must be specified.");
- }
- if ($_POST['destination_type'] != "any") {
- if ($_POST['destination'] && !is_ipaddroralias($_POST['destination'])) {
- $input_errors[] = gettext("A valid destination must be specified.");
- }
- }
- if ($_POST['destination_subnet'] && !is_numericint($_POST['destination_subnet'])) {
- $input_errors[] = gettext("A valid destination bit count must be specified.");
- }
- if ($_POST['destination_type'] == "any") {
- if ($_POST['destination_not']) {
- $input_errors[] = gettext("Negating destination address of \"any\" is invalid.");
- }
- }
-
- if ($_POST['target'] && !is_ipaddr($_POST['target']) && !is_subnet($_POST['target']) && !is_alias($_POST['target']) && !isset($_POST['nonat']) && !($_POST['target'] == "other-subnet")) {
- $input_errors[] = gettext("A valid target IP address must be specified.");
- }
-
- if ($_POST['target'] == "other-subnet") {
- if (!is_ipaddr($_POST['targetip'])) {
- $input_errors[] = gettext("A valid target IP must be specified when using the 'Other Subnet' type.");
- }
- if (!is_numericint($_POST['targetip_subnet'])) {
- $input_errors[] = gettext("A valid target bit count must be specified when using the 'Other Subnet' type.");
- }
- }
-
- /* Verify Pool Options */
- $poolopts = "";
- if ($_POST['poolopts']) {
- if (is_subnet($_POST['target']) || ($_POST['target'] == "other-subnet")) {
- $poolopts = $_POST['poolopts'];
- } elseif (is_alias($_POST['target'])) {
- if (substr($_POST['poolopts'], 0, 11) == "round-robin") {
- $poolopts = $_POST['poolopts'];
- } else {
- $input_errors[] = gettext("Only Round Robin pool options may be chosen when selecting an alias.");
- }
- }
- }
-
- /* if user has selected any as source, set it here */
- if ($_POST['source_type'] == "any") {
- $osn = "any";
- } else if ($_POST['source_type'] == "(self)") {
- $osn = "(self)";
- } else if (is_alias($_POST['source'])) {
- $osn = $_POST['source'];
- } else {
- $osn = gen_subnet($_POST['source'], $_POST['source_subnet']) . "/" . $_POST['source_subnet'];
- }
-
- /* check for existing entries */
- if ($_POST['destination_type'] == "any") {
- $ext = "any";
- } else if (is_alias($_POST['destination'])) {
- $ext = $_POST['destination'];
- } else {
- $ext = gen_subnet($_POST['destination'], $_POST['destination_subnet']) . "/" . $_POST['destination_subnet'];
- }
-
- foreach ($a_out as $natent) {
- if (isset($id) && ($a_out[$id]) && ($a_out[$id] === $natent)) {
- continue;
- }
-
- if (!$natent['interface']) {
- $natent['interface'] == "wan";
- }
- }
-
- // Allow extending of the firewall edit page and include custom input validation
- pfSense_handle_custom_code("/usr/local/pkg/firewall_aon/input_validation");
-
- if (!$input_errors) {
- $natent = array();
- $natent['source']['network'] = $osn;
- $natent['sourceport'] = ($protocol_uses_ports) ? $_POST['sourceport'] : "";
- $natent['descr'] = $_POST['descr'];
- $natent['target'] = (!isset($_POST['nonat'])) ? $_POST['target'] : "";
- $natent['targetip'] = (!isset($_POST['nonat'])) ? $_POST['targetip'] : "";
- $natent['targetip_subnet'] = (!isset($_POST['nonat'])) ? $_POST['targetip_subnet'] : "";
- $natent['interface'] = $_POST['interface'];
- $natent['poolopts'] = $poolopts;
-
- /* static-port */
- if (isset($_POST['staticnatport']) && $protocol_uses_ports && !isset($_POST['nonat'])) {
- $natent['staticnatport'] = true;
- } else {
- unset($natent['staticnatport']);
- }
-
- if (isset($_POST['disabled'])) {
- $natent['disabled'] = true;
- } else {
- unset($natent['disabled']);
- }
-
- /* if user has selected not nat, set it here */
- if (isset($_POST['nonat'])) {
- $natent['nonat'] = true;
- } else {
- unset($natent['nonat']);
- }
-
- if ($_POST['protocol'] && $_POST['protocol'] != "any") {
- $natent['protocol'] = $_POST['protocol'];
- } else {
- unset($natent['protocol']);
- }
-
- if ($ext == "any") {
- $natent['destination']['any'] = true;
- } else {
- $natent['destination']['address'] = $ext;
- }
- if ($_POST['natport'] != "" && $protocol_uses_ports && !isset($_POST['nonat'])) {
- $natent['natport'] = $_POST['natport'];
- } else {
- unset($natent['natport']);
- }
- if ($_POST['dstport'] != "" && $protocol_uses_ports) {
- $natent['dstport'] = $_POST['dstport'];
- } else {
- unset($natent['dstport']);
- }
-
- if ($_POST['nosync'] == "yes") {
- $natent['nosync'] = true;
- } else {
- unset($natent['nosync']);
- }
-
- if (isset($_POST['destination_not']) && $ext != "any") {
- $natent['destination']['not'] = true;
- }
-
- if (isset($a_out[$id]['created']) && is_array($a_out[$id]['created'])) {
- $natent['created'] = $a_out[$id]['created'];
- }
-
- $natent['updated'] = make_config_revision_entry();
-
- // Allow extending of the firewall edit page and include custom input validation
- pfSense_handle_custom_code("/usr/local/pkg/firewall_aon/pre_write_config");
-
- if (isset($id) && $a_out[$id]) {
- $a_out[$id] = $natent;
- } else {
- $natent['created'] = make_config_revision_entry();
- if (is_numeric($after)) {
- array_splice($a_out, $after+1, 0, array($natent));
- } else {
- $a_out[] = $natent;
- }
- }
-
- if (write_config()) {
- mark_subsystem_dirty('natconf');
- }
- header("Location: firewall_nat_out.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("Outbound"), gettext("Edit"));
-$closehead = false;
-include("head.inc");
-
-?>
-
-<script type="text/javascript" src="/javascript/suggestions.js"></script>
-<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
-<script type="text/javascript">
-//<![CDATA[
-var portsenabled = 1;
-function staticportchange() {
- if (document.iform.staticnatport.checked) {
- document.iform.natport.value = "";
- document.iform.natport.disabled = 1;
- } else {
- document.iform.natport.disabled = 0;
- }
-}
-function typesel_change() {
- switch (document.iform.destination_type.selectedIndex) {
- case 1: // network
- document.iform.destination.disabled = 0;
- document.iform.destination_subnet.disabled = 0;
- break;
- default:
- document.iform.destination.value = "";
- document.iform.destination.disabled = 1;
- document.iform.destination_subnet.value = "24";
- document.iform.destination_subnet.disabled = 1;
- break;
- }
-}
-function sourcesel_change() {
- switch (document.iform.source_type.selectedIndex) {
- case 2: // network
- document.iform.source.disabled = 0;
- document.iform.source_subnet.disabled = 0;
- break;
- default:
- document.iform.source.value = "";
- document.iform.source.disabled = 1;
- document.iform.source_subnet.value = "24";
- document.iform.source_subnet.disabled = 1;
- break;
- }
-}
-function nonat_change() {
- if (document.iform.nonat.checked) {
- document.getElementById("transtable").style.display = 'none';
- } else {
- document.getElementById("transtable").style.display = '';
- }
-}
-function proto_change() {
- if (document.iform.protocol.selectedIndex >= 0 && document.iform.protocol.selectedIndex <= 3) {
- portsenabled = 1;
- } else {
- portsenabled = 0;
- }
-
- if (portsenabled) {
- document.getElementById("sport_tr").style.display = '';
- document.getElementById("dport_tr").style.display = '';
- document.getElementById("tport_tr").style.display = '';
- document.getElementById("tporttext_tr").style.display = '';
- document.getElementById("tportstatic_tr").style.display = '';
- } else {
- document.getElementById("sport_tr").style.display = 'none';
- document.getElementById("dport_tr").style.display = 'none';
- document.getElementById("tport_tr").style.display = 'none';
- document.getElementById("tporttext_tr").style.display = 'none';
- document.getElementById("tportstatic_tr").style.display = 'none';
- }
-}
-function poolopts_change() {
- if (jQuery('#target option:selected').text().trim().substring(0, 4) == "Host") {
- jQuery('#poolopts_tr').css('display', '');
- jQuery('#target_network').css('display', 'none');
- } else if (jQuery('#target option:selected').text().trim().substring(0, 6) == "Subnet") {
- jQuery('#poolopts_tr').css('display', '');
- jQuery('#target_network').css('display', 'none');
- } else if (jQuery('#target option:selected').text().trim().substring(0, 5) == "Other") {
- jQuery('#poolopts_tr').css('display', '');
- jQuery('#target_network').css('display', '');
- } else {
- jQuery('#poolopts').prop('selectedIndex', 0);
- jQuery('#poolopts_tr').css('display', 'none');
- jQuery('#target_network').css('display', 'none');
- jQuery('#targetip').val('');
- jQuery('#targetip_subnet').val('0');
- }
-}
-//]]>
-</script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="firewall_nat_out_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="1" summary="firewall nat outbound edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit Advanced Outbound NAT entry");?></td>
- </tr>
-<?php
- // Allow extending of the firewall edit page and include custom input validation
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/htmlphpearly");
-?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled");?></td>
- <td width="78%" class="vtable">
- <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable this rule");?></strong><br />
- <span class="vexpl"><?=gettext("Set this option to disable this rule without removing it from the list.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Do not NAT");?></td>
- <td width="78%" class="vtable">
- <input type="checkbox" name="nonat" id="nonat" onclick="nonat_change();" <?php if (isset($pconfig['nonat'])) echo " checked=\"checked\""; ?> />
- <span class="vexpl"><?=gettext("Enabling this option will disable NAT for traffic matching this rule and stop processing Outbound NAT rules.");?>
- <br /><?=gettext("Hint: in most cases, you won't use this option.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface");?></td>
- <td width="78%" class="vtable">
- <select name="interface" class="formselect">
-<?php
- $iflist = get_configured_interface_with_descr(false, true);
- foreach ($iflist as $if => $ifdesc) {
- if (have_ruleint_access($if)) {
- $interfaces[$if] = $ifdesc;
- }
- }
-
- if ($config['l2tp']['mode'] == "server") {
- if (have_ruleint_access("l2tp")) {
- $interfaces['l2tp'] = "L2TP VPN";
- }
- }
-
- if ($config['pptpd']['mode'] == "server") {
- if (have_ruleint_access("pptp")) {
- $interfaces['pptp'] = "PPTP VPN";
- }
- }
-
- if (is_pppoe_server_enabled() && have_ruleint_access("pppoe")) {
- $interfaces['pppoe'] = "PPPoE Server";
- }
-
- /* add ipsec interfaces */
- if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
- if (have_ruleint_access("enc0")) {
- $interfaces["enc0"] = "IPsec";
- }
- }
-
- /* add openvpn/tun interfaces */
- if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) {
- $interfaces["openvpn"] = "OpenVPN";
- }
-
- foreach ($interfaces as $iface => $ifacename):
-?>
- <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
-<?php
- endforeach;
-?>
- </select><br />
- <span class="vexpl"><?=gettext("Choose which interface this rule applies to.");?><br />
- <?=gettext("Hint: in most cases, you'll want to use WAN here.");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol");?></td>
- <td width="78%" class="vtable">
- <select name="protocol" class="formselect" onchange="proto_change();">
-<?php
- $protocols = explode(" ", "any TCP UDP TCP/UDP ICMP ESP AH GRE IPV6 IGMP carp pfsync");
- foreach ($protocols as $proto):
-?>
- <option value="<?=strtolower($proto);?>" <?php if (strtolower($proto) == $pconfig['protocol']) echo "selected=\"selected\""; ?>><?=htmlspecialchars($proto);?></option>
-<?php
- endforeach;
-?>
- </select><br />
- <span class="vexpl"><?=gettext("Choose which protocol this rule should match.");?><br />
-<?php
- printf(gettext("Hint: in most cases, you should specify %s any %s here."), "<em>", "</em>&nbsp;");
-?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Source");?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="1" cellpadding="1" summary="source">
- <tr>
- <td><?=gettext("Type:");?>&nbsp;&nbsp;</td>
- <td>
- <select name="source_type" class="formselect" onchange="sourcesel_change()">
- <option value="any" <?php if ($pconfig['source'] == "any") echo "selected=\"selected\""; ?>><?=gettext("any");?></option>
- <option value="(self)" <?PHP if ($pconfig['source'] == "(self)") echo "selected=\"selected\""; ?>><?=gettext("This Firewall (self)");?></option>
- <option value="network" <?php if (($pconfig['source'] != "any") && ($pconfig['source'] != "(self)")) echo "selected=\"selected\""; ?>><?=gettext("Network");?></option>
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
- <td>
- <input name="source" type="text" autocomplete="off" class="formfldalias" id="source" size="20" value="<?=htmlspecialchars($pconfig['source']);?>" />/
- <select name="source_subnet" class="formfld" id="source_subnet">
-<?php
- for ($i = 32; $i >= 0; $i--):
-?>
- <option value="<?=$i;?>"<?php if ($i == $pconfig['source_subnet']) echo " selected=\"selected\""; ?>><?=$i;?></option>
-<?php
- endfor;
-?>
- </select>
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td>
- <span class="vexpl"><?=gettext("Enter the source network for the outbound NAT mapping.");?></span>
- </td>
- </tr>
- <tr name="sport_tr" id="sport_tr">
- <td><?=gettext("Source port:");?>&nbsp;&nbsp;</td>
- <td>
- <input name="sourceport" type="text" autocomplete="off" class="formfldalias" id="sourceport" size="5" value="<?=htmlspecialchars($pconfig['sourceport']);?>" />
- <?=gettext("(leave blank for any)");?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination");?></td>
- <td width="78%" class="vtable">
- <input name="destination_not" type="checkbox" id="destination_not" value="yes" <?php if ($pconfig['destination_not']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("not");?></strong><br />
- <?=gettext("Use this option to invert the sense of the match.");?><br />
- <br />
- <table border="0" cellspacing="1" cellpadding="1" summary="destination">
- <tr>
- <td><?=gettext("Type:");?>&nbsp;&nbsp;</td>
- <td>
- <select name="destination_type" class="formselect" onchange="typesel_change()">
- <option value="any"<?php if ($pconfig['destination'] == "any") echo " selected=\"selected\""; ?>>
- <?=gettext("any");?>
- </option>
- <option value="network"<?php if ($pconfig['destination'] != "any") echo " selected=\"selected\""; ?>>
- <?=gettext("Network");?>
- </option>
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
- <td>
- <input name="destination" type="text" autocomplete="off" class="formfldalias" id="destination" size="20" value="<?=htmlspecialchars($pconfig['destination']);?>" />/
- <select name="destination_subnet" class="formselect" id="destination_subnet">
-<?php
- for ($i = 32; $i >= 0; $i--):
-?>
- <option value="<?=$i;?>"<?php if ($i == $pconfig['destination_subnet']) echo " selected=\"selected\""; ?>><?=$i;?></option>
-<?php
- endfor;
-?>
- </select>
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td>
- <span class="vexpl"><?=gettext("Enter the destination network for the outbound NAT mapping.");?></span>
- </td>
- </tr>
- <tr name="dport_tr" id="dport_tr">
- <td><?=gettext("Destination port:");?>&nbsp;&nbsp;</td>
- <td>
- <input name="dstport" type="text" autocomplete="off" class="formfldalias" id="dstport" size="5" value="<?=htmlspecialchars($pconfig['dstport']);?>" />
- <?=gettext("(leave blank for any)");?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr name="transtable" id="transtable">
- <td width="22%" valign="top" class="vncell"><?=gettext("Translation");?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="1" cellpadding="1" summary="translation">
- <tr>
- <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
- <td>
- <select name="target" class="formselect" id="target" onchange="poolopts_change();">
- <option value=""<?php if (!$pconfig['target']) echo " selected=\"selected\""; ?>>
- <?=gettext("Interface address");?>
- </option>
-<?php
- if (is_array($config['virtualip']['vip'])):
- foreach ($config['virtualip']['vip'] as $sn):
- if (isset($sn['noexpand'])) {
- continue;
- }
- if ($sn['mode'] == "proxyarp" && $sn['type'] == "network"):
- $start = ip2long32(gen_subnet($sn['subnet'], $sn['subnet_bits']));
- $end = ip2long32(gen_subnet_max($sn['subnet'], $sn['subnet_bits']));
- $len = $end - $start;
-?>
- <option value="<?=$sn['subnet'].'/'.$sn['subnet_bits'];?>" <?php if ($sn['subnet'].'/'.$sn['subnet_bits'] == $pconfig['target']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars("Subnet: {$sn['subnet']}/{$sn['subnet_bits']} ({$sn['descr']})");?>
- </option>
-<?php
- for ($i = 0; $i <= $len; $i++):
- $snip = long2ip32($start+$i);
-?>
- <option value="<?=$snip;?>" <?php if ($snip == $pconfig['target']) echo "selected"; ?>>
- <?=htmlspecialchars("{$snip} ({$sn['descr']})");?>
- </option>
-<?php
- endfor;
-?>
-<?php
- else:
-?>
- <option value="<?=$sn['subnet'];?>" <?php if ($sn['subnet'] == $pconfig['target']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars("{$sn['subnet']} ({$sn['descr']})");?>
- </option>
-<?php
- endif;
- endforeach;
- endif;
- foreach ($a_aliases as $alias):
- if ($alias['type'] != "host") {
- continue;
- }
-?>
- <option value="<?=$alias['name'];?>" <?php if ($alias['name'] == $pconfig['target']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars("Host Alias: {$alias['name']} ({$alias['descr']})");?>
- </option>
-<?php
- endforeach;
-?>
- <option value="other-subnet"<?php if ($pconfig['target'] == "other-subnet") echo " selected=\"selected\""; ?>>
- <?=gettext("Other Subnet (Enter Below)");?>
- </option>
- </select>
- </td>
- </tr>
-
- <tr id="target_network">
- <td><?=gettext("Other Subnet:");?>&nbsp;&nbsp;</td>
- <td>
- <input name="targetip" type="text" class="formfld unknown" id="targetip" size="20" value="<?=htmlspecialchars($pconfig['targetip']);?>" />/
- <select name="targetip_subnet" class="formfld" id="targetip_subnet">
-<?php
- for ($i = 32; $i >= 0; $i--):
-?>
- <option value="<?=$i;?>"<?php if ($i == $pconfig['targetip_subnet']) echo " selected=\"selected\""; ?>><?=$i;?></option>
-<?php
- endfor;
-?>
- </select>
- </td>
- </tr>
-
- <tr>
- <td>&nbsp;</td>
- <td>
- <span class="vexpl"><?=gettext("Packets matching this rule will be mapped to the IP address given here.");?><br />
- <?=gettext("If you want this rule to apply to another IP address rather than the IP address of the interface chosen above, ".
- "select it here (you will need to define ");?>
- <a href="firewall_virtual_ip.php"><?=gettext("Virtual IP");?></a>
- <?=gettext("addresses on the interface first).");?>
- </span><br />
- </td>
- </tr>
- <tr id="poolopts_tr">
- <td valign="top">Pool Options</td>
- <td>
- <select name="poolopts" id="poolopts">
- <option value="" <?php if ($pconfig['poolopts'] == "") echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars("Default");?>
- </option>
- <option value="round-robin" <?php if ($pconfig['poolopts'] == "round-robin") echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars("Round Robin");?>
- </option>
- <option value="round-robin sticky-address" <?php if ($pconfig['poolopts'] == "round-robin sticky-address") echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars("Round Robin with Sticky Address");?>
- </option>
- <option value="random" <?php if ($pconfig['poolopts'] == "random") echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars("Random");?>
- </option>
- <option value="random sticky-address" <?php if ($pconfig['poolopts'] == "random sticky-address") echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars("Random with Sticky Address");?>
- </option>
- <option value="source-hash" <?php if ($pconfig['poolopts'] == "source-hash") echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars("Source Hash");?>
- </option>
- <option value="bitmask" <?php if ($pconfig['poolopts'] == "bitmask") echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars("Bitmask");?>
- </option>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Only Round Robin types work with Host Aliases. Any type can be used with a Subnet.");?><br />
- * <?=gettext("Round Robin: Loops through the translation addresses.");?><br />
- * <?=gettext("Random: Selects an address from the translation address pool at random.");?><br />
- * <?=gettext("Source Hash: Uses a hash of the source address to determine the translation address, ensuring that the redirection address is always the same for a given source.");?><br />
- * <?=gettext("Bitmask: Applies the subnet mask and keeps the last portion identical; 10.0.1.50 -&gt; x.x.x.50.");?><br />
- * <?=gettext("Sticky Address: The Sticky Address option can be used with the Random and Round Robin pool types to ensure that a particular source address is always mapped to the same translation address.");?><br />
- </span><br />
- </td>
- </tr>
- <tr name="tport_tr" id="tport_tr">
- <td><?=gettext("Port:");?>&nbsp;&nbsp;</td>
- <td>
- <input name="natport" type="text" class="formfld unknown" id="natport" size="5" value="<?=htmlspecialchars($pconfig['natport']);?>" />
- </td>
- </tr>
- <tr name="tporttext_tr" id="tporttext_tr">
- <td>&nbsp;</td>
- <td>
- <span class="vexpl"><?=gettext("Enter the source port for the outbound NAT mapping.");?></span>
- </td>
- </tr>
- <tr name="tportstatic_tr" id="tportstatic_tr">
- <td><?=gettext("Static-port:");?>&nbsp;&nbsp;</td>
- <td>
- <input onchange="staticportchange();" name="staticnatport" type="checkbox" class="formfld" id="staticnatport" size="5"<?php if ($pconfig['staticnatport']) echo " checked=\"checked\"";?> />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("No XMLRPC Sync");?></td>
- <td width="78%" class="vtable">
- <input value="yes" name="nosync" type="checkbox" class="formfld" id="nosync"<?php if ($pconfig['nosync']) echo " checked=\"checked\""; ?> /><br />
- <?=gettext("Hint: This prevents the rule on Master from automatically syncing to other CARP members. This does NOT prevent the rule from being overwritten on Slave.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
- </td>
- </tr>
-<?php
- $has_created_time = (isset($a_out[$id]['created']) && is_array($a_out[$id]['created']));
- $has_updated_time = (isset($a_out[$id]['updated']) && is_array($a_out[$id]['updated']));
- if ($has_created_time || $has_updated_time):
-?>
- <tr>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Rule Information");?></td>
- </tr>
-<?php
- if ($has_created_time):
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Created");?></td>
- <td width="78%" class="vtable">
- <?= date(gettext("n/j/y H:i:s"), $a_out[$id]['created']['time']) ?> <?= gettext("by") ?> <strong><?= $a_out[$id]['created']['username'] ?></strong>
- </td>
- </tr>
-<?php
- endif;
-
- if ($has_updated_time):
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Updated");?></td>
- <td width="78%" class="vtable">
- <?= date(gettext("n/j/y H:i:s"), $a_out[$id]['updated']['time']) ?> <?= gettext("by") ?> <strong><?= $a_out[$id]['updated']['username'] ?></strong>
- </td>
- </tr>
-<?php
- endif;
- endif;
- // Allow extending of the firewall edit page and include custom input validation
- pfSense_handle_custom_code("/usr/local/pkg/firewall_aon/htmlphplate");
-?>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
-<?php
- if (isset($id) && $a_out[$id]):
-?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
-<?php
- endif;
-?>
- <input name="after" type="hidden" value="<?=htmlspecialchars($after);?>" />
- </td>
- </tr>
- </table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
- sourcesel_change();
- typesel_change();
- staticportchange();
- nonat_change();
- proto_change();
- poolopts_change();
-
- var addressarray = <?= json_encode(get_alias_list(array("host", "network", "openvpn", "urltable"))) ?>;
- var customarray = <?= json_encode(get_alias_list(array("port", "url_ports", "urltable_ports"))) ?>;
-
- var oTextbox1 = new AutoSuggestControl(document.getElementById("source"), new StateSuggestions(addressarray));
- var oTextbox2 = new AutoSuggestControl(document.getElementById("sourceport"), new StateSuggestions(customarray));
- var oTextbox3 = new AutoSuggestControl(document.getElementById("destination"), new StateSuggestions(addressarray));
- var oTextbox4 = new AutoSuggestControl(document.getElementById("dstport"), new StateSuggestions(customarray));
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_rules.php b/usr/local/www/firewall_rules.php
deleted file mode 100644
index d3e8f24..0000000
--- a/usr/local/www/firewall_rules.php
+++ /dev/null
@@ -1,944 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_rules.php
- part of pfSense (https://www.pfsense.org)
- Copyright (C) 2005 Scott Ullrich (sullrich@gmail.com)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: filter
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-rules
-##|*NAME=Firewall: Rules page
-##|*DESCR=Allow access to the 'Firewall: Rules' page.
-##|*MATCH=firewall_rules.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-$pgtitle = array(gettext("Firewall"), gettext("Rules"));
-$shortcut_section = "firewall";
-
-function delete_nat_association($id) {
- global $config;
-
- if (!$id || !is_array($config['nat']['rule'])) {
- return;
- }
-
- $a_nat = &$config['nat']['rule'];
-
- foreach ($a_nat as &$natent) {
- if ($natent['associated-rule-id'] == $id) {
- $natent['associated-rule-id'] = '';
- }
- }
-}
-
-if (!is_array($config['filter']['rule'])) {
- $config['filter']['rule'] = array();
-}
-filter_rules_sort();
-$a_filter = &$config['filter']['rule'];
-
-$if = $_GET['if'];
-if ($_POST['if']) {
- $if = $_POST['if'];
-}
-
-$ifdescs = get_configured_interface_with_descr();
-
-/* add group interfaces */
-if (is_array($config['ifgroups']['ifgroupentry'])) {
- foreach ($config['ifgroups']['ifgroupentry'] as $ifgen) {
- if (have_ruleint_access($ifgen['ifname'])) {
- $iflist[$ifgen['ifname']] = $ifgen['ifname'];
- }
- }
-}
-
-foreach ($ifdescs as $ifent => $ifdesc) {
- if (have_ruleint_access($ifent)) {
- $iflist[$ifent] = $ifdesc;
- }
-}
-
-if ($config['l2tp']['mode'] == "server") {
- if (have_ruleint_access("l2tp")) {
- $iflist['l2tp'] = "L2TP VPN";
- }
-}
-
-if ($config['pptpd']['mode'] == "server") {
- if (have_ruleint_access("pptp")) {
- $iflist['pptp'] = "PPTP VPN";
- }
-}
-
-if (is_array($config['pppoes']['pppoe'])) {
- foreach ($config['pppoes']['pppoe'] as $pppoes) {
- if (($pppoes['mode'] == 'server') && have_ruleint_access("pppoe")) {
- $iflist['pppoe'] = "PPPoE Server";
- }
- }
-}
-
-/* add ipsec interfaces */
-if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
- if (have_ruleint_access("enc0")) {
- $iflist["enc0"] = "IPsec";
- }
-}
-
-/* add openvpn/tun interfaces */
-if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) {
- $iflist["openvpn"] = "OpenVPN";
-}
-
-pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/interfaces_override");
-
-if (!$if || !isset($iflist[$if])) {
- if ("any" == $if) {
- $if = "FloatingRules";
- } else if ("FloatingRules" != $if) {
- if (isset($iflist['wan'])) {
- $if = "wan";
- } else {
- $if = "FloatingRules";
- }
- }
-}
-
-if ($_POST) {
-
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
- $retval = 0;
- $retval = filter_configure();
-
- clear_subsystem_dirty('filter');
-
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/apply");
-
- $savemsg = sprintf(gettext("The settings have been applied. The firewall rules are now reloading in the background.<br />You can also %s monitor %s the reload progress"), "<a href='status_filter_reload.php'>", "</a>");
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($a_filter[$_GET['id']]) {
- if (!empty($a_filter[$_GET['id']]['associated-rule-id'])) {
- delete_nat_association($a_filter[$_GET['id']]['associated-rule-id']);
- }
- unset($a_filter[$_GET['id']]);
- if (write_config()) {
- mark_subsystem_dirty('filter');
- }
- header("Location: firewall_rules.php?if=" . htmlspecialchars($if));
- exit;
- }
-}
-
-// Handle save msg if defined
-if ($_REQUEST['savemsg']) {
- $savemsg = htmlentities($_REQUEST['savemsg']);
-}
-
-if (isset($_POST['del_x'])) {
- /* delete selected rules */
- if (is_array($_POST['rule']) && count($_POST['rule'])) {
- foreach ($_POST['rule'] as $rulei) {
- delete_nat_association($a_filter[$rulei]['associated-rule-id']);
- unset($a_filter[$rulei]);
- }
- if (write_config()) {
- mark_subsystem_dirty('filter');
- }
- header("Location: firewall_rules.php?if=" . htmlspecialchars($if));
- exit;
- }
-} else if ($_GET['act'] == "toggle") {
- if ($a_filter[$_GET['id']]) {
- if (isset($a_filter[$_GET['id']]['disabled'])) {
- unset($a_filter[$_GET['id']]['disabled']);
- } else {
- $a_filter[$_GET['id']]['disabled'] = true;
- }
- if (write_config()) {
- mark_subsystem_dirty('filter');
- }
- header("Location: firewall_rules.php?if=" . htmlspecialchars($if));
- exit;
- }
-} else {
- /* yuck - IE won't send value attributes for image buttons, while Mozilla does -
- so we use .x/.y to fine move button clicks instead... */
- unset($movebtn);
- foreach ($_POST as $pn => $pd) {
- if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
- $movebtn = $matches[1];
- break;
- }
- }
- /* move selected rules before this rule */
- if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) {
- $a_filter_new = array();
-
- /* copy all rules < $movebtn and not selected */
- for ($i = 0; $i < $movebtn; $i++) {
- if (!in_array($i, $_POST['rule'])) {
- $a_filter_new[] = $a_filter[$i];
- }
- }
-
- /* copy all selected rules */
- for ($i = 0; $i < count($a_filter); $i++) {
- if ($i == $movebtn) {
- continue;
- }
- if (in_array($i, $_POST['rule'])) {
- $a_filter_new[] = $a_filter[$i];
- }
- }
-
- /* copy $movebtn rule */
- if ($movebtn < count($a_filter)) {
- $a_filter_new[] = $a_filter[$movebtn];
- }
-
- /* copy all rules > $movebtn and not selected */
- for ($i = $movebtn+1; $i < count($a_filter); $i++) {
- if (!in_array($i, $_POST['rule'])) {
- $a_filter_new[] = $a_filter[$i];
- }
- }
-
- $a_filter = $a_filter_new;
- if (write_config()) {
- mark_subsystem_dirty('filter');
- }
- header("Location: firewall_rules.php?if=" . htmlspecialchars($if));
- exit;
- }
-}
-$closehead = false;
-
-include("head.inc");
-?>
-<link type="text/css" rel="stylesheet" href="/javascript/chosen/chosen.css" />
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script src="/javascript/chosen/chosen.jquery.js" type="text/javascript"></script>
-<?php include("fbegin.inc"); ?>
-<form action="firewall_rules.php" method="post">
-
-<script type="text/javascript" src="/javascript/row_toggle.js"></script>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('filter')): ?><p>
-<?php print_info_box_np(gettext("The firewall rule configuration has been changed.") . "<br />" . gettext("You must apply the changes in order for them to take effect."), "apply", "", true); ?>
-<br />
-<?php endif; ?>
-<?php
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/before_table");
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall rules">
- <tr><td class="tabnavtbl">
- <?php
- /* active tabs */
- $tab_array = array();
- if ("FloatingRules" == $if) {
- $active = true;
- } else {
- $active = false;
- }
- $tab_array[] = array(gettext("Floating"), $active, "firewall_rules.php?if=FloatingRules");
- $tabscounter = 0;
- $i = 0;
- foreach ($iflist as $ifent => $ifname) {
- if ($ifent == $if) {
- $active = true;
- } else {
- $active = false;
- }
- $tab_array[] = array($ifname, $active, "firewall_rules.php?if={$ifent}");
- }
- display_top_tabs($tab_array);
- ?>
- </td></tr>
- <tr><td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <?php
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/before_first_tr");
- ?>
- <tr id="frheader">
- <td width="3%" class="list">&nbsp;</td>
- <td width="5%" class="list">&nbsp;</td>
- <td width="3%" class="listhdrr"><?=gettext("ID");?></td>
- <?php
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_id_tablehead");
- ?>
- <?php
- if ('FloatingRules' == $if) {
- ?>
- <td width="3%" class="listhdrr"><?=gettext('Interfaces');?></td>
- <?php
- }
- ?>
- <td width="6%" class="listhdrr"><?=gettext("Proto");?></td>
- <td width="12%" class="listhdrr"><?=gettext("Source");?></td>
- <td width="6%" class="listhdrr"><?=gettext("Port");?></td>
- <td width="12%" class="listhdrr"><?=gettext("Destination");?></td>
- <td width="6%" class="listhdrr"><?=gettext("Port");?></td>
- <td width="5%" class="listhdrr"><?=gettext("Gateway");?></td>
- <td width="8%" class="listhdrr"><?=gettext("Queue");?></td>
- <td width="5%" class="listhdrr"><?=gettext("Schedule");?></td>
- <?php
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_desc_tablehead");
- ?>
- <td width="19%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="delete selected rules">
- <tr>
- <?php
- $nrules = 0;
- for ($i = 0; isset($a_filter[$i]); $i++) {
- $filterent = $a_filter[$i];
- if ($filterent['interface'] != $if && !isset($filterent['floating'])) {
- continue;
- }
- if (isset($filterent['floating']) && "FloatingRules" != $if) {
- continue;
- }
- $nrules++;
- }
- ?>
- <td>
- <?php if ($nrules == 0): ?>
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?gettext("delete selected rules"); ?>" border="0" alt="delete" /><?php else: ?>
- <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" style="width:17;height:17" title="<?=gettext("delete selected rules");?>" onclick="return confirm('<?=gettext('Do you really want to delete the selected rules?');?>')" />
- <?php endif; ?>
- </td>
- <td align="center" valign="middle">
- <a href="firewall_rules_edit.php?if=<?=htmlspecialchars($if);?>&amp;after=-1">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add new rule");?>" width="17" height="17" border="0" alt="add" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <?php // Show the anti-lockout rule if it's enabled, and we are on LAN with an if count > 1, or WAN with an if count of 1.
- if (!isset($config['system']['webgui']['noantilockout']) &&
- (((count($config['interfaces']) > 1) && ($if == 'lan')) ||
- ((count($config['interfaces']) == 1) && ($if == 'wan')))):
-
- $alports = implode('<br />', filter_get_antilockout_ports(true));
- ?>
- <tr valign="top" id="antilockout">
- <td class="list">&nbsp;</td>
- <td class="listt" align="center"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" width="11" height="11" border="0" alt="pass" /></td>
- <td class="listlr" style="background-color: #E0E0E0">&nbsp;</td>
- <?php
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_id_tr_antilockout");
- ?>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0"><?=$iflist[$if];?> Address</td>
- <td class="listr" style="background-color: #E0E0E0"><?= $alports ?></td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0">&nbsp;</td>
- <td class="listbg"><?=gettext("Anti-Lockout Rule");?></td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="move rules before">
- <tr>
- <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected rules before this rule");?>" alt="move" /></td>
- <td><a href="system_advanced_admin.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit rule");?>" width="17" height="17" border="0" alt="edit" /></a></td>
- </tr>
- <tr>
- <td align="center" valign="middle"></td>
- <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus_d.gif" title="<?=gettext("add a new rule based on this one");?>" width="17" height="17" border="0" alt="add" /></td>
- </tr>
- </table>
- </td>
- </tr>
-<?php endif; ?>
-
-<?php if (isset($config['interfaces'][$if]['blockpriv'])): ?>
- <tr valign="top" id="frrfc1918">
- <td class="list">&nbsp;</td>
- <td class="listt" align="center"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" width="11" height="11" border="0" alt="block" /></td>
- <td class="listlr" style="background-color: #E0E0E0">&nbsp;</td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0"><?=gettext("RFC 1918 networks");?></td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0">&nbsp;</td>
- <td class="listbg"><?=gettext("Block private networks");?></td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="move rules before">
- <tr>
- <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected rules before this rule");?>" alt="edit" /></td>
- <td><a href="interfaces.php?if=<?=htmlspecialchars($if)?>#rfc1918"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit rule");?>" width="17" height="17" border="0" alt="edit" /></a></td>
- </tr>
- <tr>
- <td align="center" valign="middle"></td>
- <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus_d.gif" title="<?=gettext("add a new rule based on this one");?>" width="17" height="17" border="0" alt="add" /></td>
- </tr>
- </table>
- </td>
- </tr>
-<?php endif; ?>
-<?php if (isset($config['interfaces'][$if]['blockbogons'])): ?>
- <tr valign="top" id="frrfc1918">
- <td class="list">&nbsp;</td>
- <td class="listt" align="center"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" width="11" height="11" border="0" alt="block" /></td>
- <td class="listlr" style="background-color: #E0E0E0">&nbsp;</td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0"><?=gettext("Reserved/not assigned by IANA");?></td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listr" style="background-color: #E0E0E0">*</td>
- <td class="listbg"><?=gettext("Block bogon networks");?></td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="move rules before">
- <tr>
- <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected rules before this rule");?>" alt="move" /></td>
- <td><a href="interfaces.php?if=<?=htmlspecialchars($if)?>#rfc1918"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit rule");?>" width="17" height="17" border="0" alt=" edit" /></a></td>
- </tr>
- <tr>
- <td align="center" valign="middle"></td>
- <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus_d.gif" title="<?=gettext("add a new rule based on this one");?>" width="17" height="17" border="0" alt="add" /></td>
- </tr>
- </table>
- </td>
- </tr>
-<?php endif; ?>
- <tbody>
-<?php
- $nrules = 0;
- for ($i = 0; isset($a_filter[$i]); $i++):
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/row_start");
- $filterent = $a_filter[$i];
- if ($filterent['interface'] != $if && !isset($filterent['floating'])) {
- continue;
- }
- if (isset($filterent['floating']) && "FloatingRules" != $if) {
- continue;
- }
- $isadvset = firewall_check_for_advanced_options($filterent);
- if ($isadvset) {
- $advanced_set = "<img src=\"./themes/{$g['theme']}/images/icons/icon_advanced.gif\" title=\"" . gettext("advanced settings set") . ": {$isadvset}\" border=\"0\" alt=\"advanced\" />";
- } else {
- $advanced_set = "";
- }
-?>
- <tr valign="top" id="fr<?=$nrules;?>">
- <td class="listt">
- <input type="checkbox" id="frc<?=$nrules;?>" name="rule[]" value="<?=$i;?>" onclick="fr_bgcolor('<?=$nrules;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
- <?php echo $advanced_set; ?>
- </td>
- <td class="listt" align="center">
- <?php
- if ($filterent['type'] == "block") {
- $iconfn = "block";
- } else if ($filterent['type'] == "reject") {
- $iconfn = "reject";
- } else if ($filterent['type'] == "match") {
- $iconfn = "match";
- } else {
- $iconfn = "pass";
- }
- if (isset($filterent['disabled'])) {
- $textss = "<span class=\"gray\">";
- $textse = "</span>";
- $iconfn .= "_d";
- } else {
- $textss = $textse = "";
- }
- ?>
- <a href="?if=<?=htmlspecialchars($if);?>&amp;act=toggle&amp;id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0" title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" /></a>
-<?php
- if (isset($filterent['log'])):
- $iconfnlog = "log_s";
- if (isset($filterent['disabled'])) {
- $iconfnlog .= "_d";
- }
-?>
- <br /><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfnlog;?>.gif" width="11" height="15" border="0" alt="icon" />
-<?php endif; ?>
- </td>
- <?php
-
- //build Alias popup box
- $alias_src_span_begin = "";
- $alias_src_port_span_begin = "";
- $alias_dst_span_begin = "";
- $alias_dst_port_span_begin = "";
-
- $alias_popup = rule_popup($filterent['source']['address'], pprint_port($filterent['source']['port']), $filterent['destination']['address'], pprint_port($filterent['destination']['port']));
-
- $alias_src_span_begin = $alias_popup["src"];
- $alias_src_port_span_begin = $alias_popup["srcport"];
- $alias_dst_span_begin = $alias_popup["dst"];
- $alias_dst_port_span_begin = $alias_popup["dstport"];
-
- $alias_src_span_end = $alias_popup["src_end"];
- $alias_src_port_span_end = $alias_popup["srcport_end"];
- $alias_dst_span_end = $alias_popup["dst_end"];
- $alias_dst_port_span_end = $alias_popup["dstport_end"];
-
- //build Schedule popup box
- $a_schedules = &$config['schedules']['schedule'];
- $schedule_span_begin = "";
- $schedule_span_end = "";
- $sched_caption_escaped = "";
- $sched_content = "";
- $schedstatus = false;
- $dayArray = array (gettext('Mon'), gettext('Tues'), gettext('Wed'), gettext('Thur'), gettext('Fri'), gettext('Sat'), gettext('Sun'));
- $monthArray = array (gettext('January'), gettext('February'), gettext('March'), gettext('April'), gettext('May'), gettext('June'), gettext('July'), gettext('August'), gettext('September'), gettext('October'), gettext('November'), gettext('December'));
- if ($config['schedules']['schedule'] <> "" and is_array($config['schedules']['schedule'])) {
- foreach ($a_schedules as $schedule) {
- if ($schedule['name'] == $filterent['sched']) {
- $schedstatus = filter_get_time_based_rule_status($schedule);
-
- foreach ($schedule['timerange'] as $timerange) {
- $tempFriendlyTime = "";
- $tempID = "";
- $firstprint = false;
- if ($timerange) {
- $dayFriendly = "";
- $tempFriendlyTime = "";
-
- //get hours
- $temptimerange = $timerange['hour'];
- $temptimeseparator = strrpos($temptimerange, "-");
-
- $starttime = substr ($temptimerange, 0, $temptimeseparator);
- $stoptime = substr ($temptimerange, $temptimeseparator+1);
-
- if ($timerange['month']) {
- $tempmontharray = explode(",", $timerange['month']);
- $tempdayarray = explode(",", $timerange['day']);
- $arraycounter = 0;
- $firstDayFound = false;
- $firstPrint = false;
- foreach ($tempmontharray as $monthtmp) {
- $month = $tempmontharray[$arraycounter];
- $day = $tempdayarray[$arraycounter];
-
- if (!$firstDayFound) {
- $firstDay = $day;
- $firstmonth = $month;
- $firstDayFound = true;
- }
-
- $currentDay = $day;
- $nextDay = $tempdayarray[$arraycounter+1];
- $currentDay++;
- if (($currentDay != $nextDay) || ($tempmontharray[$arraycounter] != $tempmontharray[$arraycounter+1])) {
- if ($firstPrint) {
- $dayFriendly .= ", ";
- }
- $currentDay--;
- if ($currentDay != $firstDay) {
- $dayFriendly .= $monthArray[$firstmonth-1] . " " . $firstDay . " - " . $currentDay ;
- } else {
- $dayFriendly .= $monthArray[$month-1] . " " . $day;
- }
- $firstDayFound = false;
- $firstPrint = true;
- }
- $arraycounter++;
- }
- } else {
- $tempdayFriendly = $timerange['position'];
- $firstDayFound = false;
- $tempFriendlyDayArray = explode(",", $tempdayFriendly);
- $currentDay = "";
- $firstDay = "";
- $nextDay = "";
- $counter = 0;
- foreach ($tempFriendlyDayArray as $day) {
- if ($day != "") {
- if (!$firstDayFound) {
- $firstDay = $tempFriendlyDayArray[$counter];
- $firstDayFound = true;
- }
- $currentDay =$tempFriendlyDayArray[$counter];
- //get next day
- $nextDay = $tempFriendlyDayArray[$counter+1];
- $currentDay++;
- if ($currentDay != $nextDay) {
- if ($firstprint) {
- $dayFriendly .= ", ";
- }
- $currentDay--;
- if ($currentDay != $firstDay) {
- $dayFriendly .= $dayArray[$firstDay-1] . " - " . $dayArray[$currentDay-1];
- } else {
- $dayFriendly .= $dayArray[$firstDay-1];
- }
- $firstDayFound = false;
- $firstprint = true;
- }
- $counter++;
- }
- }
- }
- $timeFriendly = $starttime . " - " . $stoptime;
- $description = $timerange['rangedescr'];
- $sched_content .= $dayFriendly . "; " . $timeFriendly . "<br />";
- }
- }
- $sched_caption_escaped = str_replace("'", "\'", $schedule['descr']);
- $schedule_span_begin = "<span style=\"cursor: help;\" onmouseover=\"domTT_activate(this, event, 'content', '<h1>{$sched_caption_escaped}</h1><p>{$sched_content}</p>', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle');\" onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\"><u>";
- $schedule_span_end = "</u></span>";
- }
- }
- }
- $printicon = false;
- $alttext = "";
- $image = "";
- if (!isset($filterent['disabled'])) {
- if ($schedstatus) {
- if ($iconfn == "block" || $iconfn == "reject") {
- $image = "icon_block";
- $alttext = gettext("Traffic matching this rule is currently being denied");
- } else {
- $image = "icon_pass";
- $alttext = gettext("Traffic matching this rule is currently being allowed");
- }
- $printicon = true;
- } else if ($filterent['sched']) {
- if ($iconfn == "block" || $iconfn == "reject") {
- $image = "icon_block_d";
- } else {
- $image = "icon_block";
- }
- $alttext = gettext("This rule is not currently active because its period has expired");
- $printicon = true;
- }
- }
- ?>
- <td class="listlr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
- <?=$textss;?><?php if (isset($filterent['id'])) echo $filterent['id']."&nbsp;"; else echo "&nbsp;"; ?><?=$textse;?>
- </td>
- <?php
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_id_tr");
- ?>
- <?php
- if ('FloatingRules' == $if) {
- ?>
- <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
- <?=$textss;?>
- <?php
- if (isset($filterent['interface'])) {
- $selected_interfaces = explode(',', $filterent['interface']);
- unset($selected_descs);
- foreach ($selected_interfaces as $interface) {
- if (isset($ifdescs[$interface])) {
- $selected_descs[] = $ifdescs[$interface];
- } else {
- switch ($interface) {
- case 'l2tp':
- if ($config['l2tp']['mode'] == 'server') {
- $selected_descs[] = 'L2TP VPN';
- }
- break;
- case 'pptp':
- if ($config['pptpd']['mode'] == 'server') {
- $selected_descs[] = 'PPTP VPN';
- }
- break;
- case 'pppoe':
- if (is_pppoe_server_enabled()) {
- $selected_descs[] = 'PPPoE Server';
- }
- break;
- case 'enc0':
- if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
- $selected_descs[] = 'IPsec';
- }
- break;
- case 'openvpn':
- if ($config['openvpn']['openvpn-server'] || $config['openvpn']['openvpn-client']) {
- $selected_descs[] = 'OpenVPN';
- }
- break;
- default:
- $selected_descs[] = $interface;
- break;
- }
- }
- }
-
- echo implode('<br/>', $selected_descs);
- }
- ?>
- <?=$textse;?>
- </td>
- <?php
- }
- ?>
- <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
- <?=$textss;?>
- <?php
- if (isset($filterent['ipprotocol'])) {
- switch ($filterent['ipprotocol']) {
- case "inet":
- echo "IPv4 ";
- break;
- case "inet6":
- echo "IPv6 ";
- break;
- case "inet46":
- echo "IPv4+6 ";
- break;
- }
- } else {
- echo "IPv4 ";
- }
- if (isset($filterent['protocol'])) {
- echo strtoupper($filterent['protocol']);
- if (strtoupper($filterent['protocol']) == "ICMP" && !empty($filterent['icmptype'])) {
- echo ' <span style="cursor: help;" title="ICMP type: ' .
- ($filterent['ipprotocol'] == "inet6" ? $icmp6types[$filterent['icmptype']] : $icmptypes[$filterent['icmptype']]) .
- '"><u>';
- echo $filterent['icmptype'];
- echo '</u></span>';
- }
- } else {
- echo "*";
- }
- ?>
- <?=$textse;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
- <?=$textss;?><?php echo $alias_src_span_begin;?><?php echo htmlspecialchars(pprint_address($filterent['source']));?><?php echo $alias_src_span_end;?><?=$textse;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
- <?=$textss;?><?php echo $alias_src_port_span_begin;?><?php echo htmlspecialchars(pprint_port($filterent['source']['port'])); ?><?php echo $alias_src_port_span_end;?><?=$textse;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
- <?=$textss;?><?php echo $alias_dst_span_begin;?><?php echo htmlspecialchars(pprint_address($filterent['destination'])); ?><?php echo $alias_dst_span_end;?><?=$textse;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
- <?=$textss;?><?php echo $alias_dst_port_span_begin;?><?php echo htmlspecialchars(pprint_port($filterent['destination']['port'])); ?><?php echo $alias_dst_port_span_end;?><?=$textse;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
- <?=$textss;?><?php if (isset($config['interfaces'][$filterent['gateway']]['descr'])) echo htmlspecialchars($config['interfaces'][$filterent['gateway']]['descr']); else echo htmlspecialchars(pprint_port($filterent['gateway'])); ?><?=$textse;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
- <?=$textss;?>
- <?php
- if (isset($filterent['ackqueue']) && isset($filterent['defaultqueue'])) {
- $desc = $filterent['ackqueue'] ;
- echo "<a href=\"firewall_shaper_queues.php?queue={$filterent['ackqueue']}&amp;action=show\">{$desc}</a>";
- $desc = $filterent['defaultqueue'];
- echo "/<a href=\"firewall_shaper_queues.php?queue={$filterent['defaultqueue']}&amp;action=show\">{$desc}</a>";
- } else if (isset($filterent['defaultqueue'])) {
- $desc = $filterent['defaultqueue'];
- echo "<a href=\"firewall_shaper_queues.php?queue={$filterent['defaultqueue']}&amp;action=show\">{$desc}</a>";
- } else {
- echo gettext("none");
- }
- ?>
- <?=$textse;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
- <font color="black">
- <?php if ($printicon) { ?><img src="./themes/<?= $g['theme']; ?>/images/icons/<?php echo $image; ?>.gif" title="<?php echo $alttext;?>" border="0" alt="icon" /><?php } ?><?=$textss;?><?php echo $schedule_span_begin;?><?=htmlspecialchars($filterent['sched']);?>&nbsp;<?php echo $schedule_span_end; ?><?=$textse;?>
- </font>
- </td>
- <?php
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_descr_tr");
- ?>
- <td class="listbg descr" onclick="fr_toggle(<?=$nrules;?>)" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
- <?=$textss;?><?=htmlspecialchars($filterent['descr']);?>&nbsp;<?=$textse;?>
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="move before">
- <tr>
- <td><input name="move_<?=$i;?>" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" style="width:17;height:17" title="<?=gettext("move selected rules before this rule"); ?>" onmouseover="fr_insline(<?=$nrules;?>, true)" onmouseout="fr_insline(<?=$nrules;?>, false)" /></td>
- <td><a href="firewall_rules_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit rule"); ?>" width="17" height="17" border="0" alt="edit" /></a></td>
- </tr>
- <tr>
- <td align="center" valign="middle"><a href="firewall_rules.php?act=del&amp;if=<?=htmlspecialchars($if);?>&amp;id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete rule"); ?>" onclick="return confirm('Do you really want to delete this rule?')" alt="delete" /></a></td>
- <td><a href="firewall_rules_edit.php?dup=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add a new rule based on this one"); ?>" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <?php $nrules++; endfor; ?>
- <tr><td></td></tr>
- </tbody>
-<?php if ($nrules == 0): ?>
- <tr>
- <td class="listt"></td>
- <td class="listt"></td>
- <?php
- if ($_REQUEST['if'] == "FloatingRules") {
- $ncolumns = "11";
- } else {
- $ncolumns = "10";
- }
- ?>
- <td class="listlr" colspan=<?=$ncolumns;?> align="center" valign="middle">
- <span class="gray">
- <?php if ($_REQUEST['if'] == "FloatingRules"): ?>
- <?=gettext("No floating rules are currently defined."); ?><br /><br />
- <?php else: ?>
- <?=gettext("No rules are currently defined for this interface"); ?><br />
- <?=gettext("All incoming connections on this interface will be blocked until you add pass rules."); ?><br /><br />
- <?php endif; ?>
- <?=gettext("Click the"); ?> <a href="firewall_rules_edit.php?if=<?=htmlspecialchars($if);?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add new rule");?>" border="0" width="17" height="17" align="middle" alt="add" /></a><?=gettext(" button to add a new rule.");?></span>
- </td>
- </tr>
-<?php endif; ?>
- <tr id="fr<?=$nrules;?>">
- <td class="list"></td>
- <td class="list"></td>
- <?php
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_id_tr_belowtable");
- ?>
- <td class="list">&nbsp;</td>
- <td class="list">&nbsp;</td>
- <td class="list">&nbsp;</td>
- <td class="list">&nbsp;</td>
- <td class="list">&nbsp;</td>
- <td class="list">&nbsp;</td>
- <td class="list">&nbsp;</td>
- <td class="list">&nbsp;</td>
- <td class="list">&nbsp;</td>
- <td class="list">&nbsp;</td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="move rules">
- <tr>
- <td>
- <?php if ($nrules == 0): ?><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected rules to end");?>" border="0" alt="move" /><?php else: ?><input name="move_<?=$i;?>" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" style="width:17;height:17" title="<?=gettext("move selected rules to end");?>" onmouseover="fr_insline(<?=$nrules;?>, true)" onmouseout="fr_insline(<?=$nrules;?>, false)" /><?php endif; ?>
- </td>
- <td></td>
- </tr>
- <tr>
- <td>
-<?php if ($nrules == 0): ?>
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected rules");?>" border="0" alt="delete" /><?php else: ?>
- <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" style="width:17;height:17" title="<?=gettext("delete selected rules");?>" onclick="return confirm('<?=gettext('Do you really want to delete the selected rules?');?>')" />
-<?php endif; ?>
- </td>
- <td>
- <a href="firewall_rules_edit.php?if=<?=htmlspecialchars($if);?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add new rule");?>" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="icons">
- <tr>
- <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" width="11" height="11" alt="pass" /></td>
- <td width="100"><?=gettext("pass");?></td>
- <td width="14"></td>
- <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_match.gif" width="11" height="11" alt="match" /></td>
- <td width="100"><?=gettext("match");?></td>
- <td width="14"></td>
- <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" width="11" height="11" alt="block" /></td>
- <td width="100"><?=gettext("block");?></td>
- <td width="14"></td>
- <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_reject.gif" width="11" height="11" alt="reject" /></td>
- <td width="100"><?=gettext("reject");?></td>
- <td width="14"></td>
- <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_log.gif" width="11" height="11" alt="log" /></td>
- <td width="100"><?=gettext("log");?></td>
- </tr>
- <tr>
- <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass_d.gif" width="11" height="11" alt="pass disabled" /></td>
- <td class="nowrap"><?=gettext("pass (disabled)");?></td>
- <td>&nbsp;</td>
- <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_match_d.gif" width="11" height="11" alt="match disabled" /></td>
- <td class="nowrap"><?=gettext("match (disabled)");?></td>
- <td>&nbsp;</td>
- <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block_d.gif" width="11" height="11" alt="block disabled" /></td>
- <td class="nowrap"><?=gettext("block (disabled)");?></td>
- <td>&nbsp;</td>
- <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_reject_d.gif" width="11" height="11" alt="reject disabled" /></td>
- <td class="nowrap"><?=gettext("reject (disabled)");?></td>
- <td>&nbsp;</td>
- <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_log_d.gif" width="11" height="11" alt="log disabled" /></td>
- <td class="nowrap"><?=gettext("log (disabled)");?></td>
- </tr>
- <tr>
- <td colspan="10">
- <p>&nbsp;</p>
- <strong>
- <span class="red"><?=gettext("Hint:");?></span>
- </strong><br />
- <ul>
- <?php if ("FloatingRules" != $if): ?>
- <li><?=gettext("Rules are evaluated on a first-match basis (i.e. " .
- "the action of the first rule to match a packet will be executed). " .
- "This means that if you use block rules, you'll have to pay attention " .
- "to the rule order. Everything that isn't explicitly passed is blocked " .
- "by default. ");?>
- </li>
- <?php else: ?>
- <li><?=gettext("Floating rules are evaluated on a first-match basis (i.e. " .
- "the action of the first rule to match a packet will be executed) only " .
- "if the 'quick' option is checked on a rule. Otherwise they will only apply if no " .
- "other rules match. Pay close attention to the rule order and options " .
- "chosen. If no rule here matches, the per-interface or default rules are used. ");?>
- </li>
- <?php endif; ?>
- </ul>
- </td>
- </tr>
- </table>
- </div>
- </td></tr>
-</table>
-<input type="hidden" name="if" value="<?=htmlspecialchars($if);?>" />
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_rules_edit.php b/usr/local/www/firewall_rules_edit.php
deleted file mode 100644
index b0af4cc..0000000
--- a/usr/local/www/firewall_rules_edit.php
+++ /dev/null
@@ -1,1946 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_rules_edit.php
- part of pfSense (https://www.pfsense.org)
- Copyright (C) 2005 Scott Ullrich (sullrich@gmail.com)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: filter
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-rules-edit
-##|*NAME=Firewall: Rules: Edit page
-##|*DESCR=Allow access to the 'Firewall: Rules: Edit' page.
-##|*MATCH=firewall_rules_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("filter.inc");
-require("shaper.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_rules.php');
-}
-
-function is_posnumericint($arg) {
- // Note that to be safe we do not allow any leading zero - "01", "007"
- return (is_numericint($arg) && $arg[0] != '0' && $arg > 0);
-}
-
-function is_aoadv_used($rule_config) {
- // Note that the user could set "tag" or "tagged" to the string "0", which is valid but empty().
- // And if the user enters "0" in other fields, we want to present an error message, and keep the Advanced Options section open.
- if ((isset($rule_config['allowopts'])) ||
- (isset($rule_config['disablereplyto'])) ||
- ($rule_config['tag'] != "") ||
- ($rule_config['tagged'] != "") ||
- ($rule_config['max'] != "") ||
- ($rule_config['max-src-nodes'] != "") ||
- ($rule_config['max-src-conn'] != "") ||
- ($rule_config['max-src-states'] != "") ||
- ($rule_config['max-src-conn-rate'] != "") ||
- ($rule_config['max-src-conn-rates'] != "") ||
- ($rule_config['statetimeout'] != "")) {
- return true;
- }
- return false;
-}
-
-$ostypes = array();
-exec('/sbin/pfctl -s osfp | /usr/bin/tr \'\t\' \' \'', $ostypes);
-
-if (count($ostypes) > 2) {
- // Remove header rows from pfctl output
- array_shift($ostypes);
- array_shift($ostypes);
-} else {
- // Fall back to a default list
- $ostypes = array(
- "AIX",
- "Linux",
- "FreeBSD",
- "NetBSD",
- "OpenBSD",
- "Solaris",
- "MacOS",
- "Windows",
- "Novell",
- "NMAP"
- );
-}
-
-$specialsrcdst = explode(" ", "any (self) pptp pppoe l2tp openvpn");
-$ifdisp = get_configured_interface_with_descr();
-foreach ($ifdisp as $kif => $kdescr) {
- $specialsrcdst[] = "{$kif}";
- $specialsrcdst[] = "{$kif}ip";
-}
-
-if (!is_array($config['filter']['rule'])) {
- $config['filter']['rule'] = array();
-}
-filter_rules_sort();
-$a_filter = &$config['filter']['rule'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (is_numericint($_GET['after']) || $_GET['after'] == "-1") {
- $after = $_GET['after'];
-}
-if (isset($_POST['after']) && (is_numericint($_POST['after']) || $_POST['after'] == "-1")) {
- $after = $_POST['after'];
-}
-
-if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
- $id = $_GET['dup'];
- $after = $_GET['dup'];
-}
-
-if (isset($id) && $a_filter[$id]) {
- $pconfig['interface'] = $a_filter[$id]['interface'];
-
- if (isset($a_filter[$id]['id'])) {
- $pconfig['ruleid'] = $a_filter[$id]['id'];
- }
-
- if (isset($a_filter[$id]['created']) && is_array($a_filter[$id]['created'])) {
- $pconfig['created'] = $a_filter[$id]['created'];
- }
-
- if (isset($a_filter[$id]['updated']) && is_array($a_filter[$id]['updated'])) {
- $pconfig['updated'] = $a_filter[$id]['updated'];
- }
-
- if (!isset($a_filter[$id]['type'])) {
- $pconfig['type'] = "pass";
- } else {
- $pconfig['type'] = $a_filter[$id]['type'];
- }
-
- if (isset($a_filter[$id]['floating']) || $if == "FloatingRules") {
- $pconfig['floating'] = $a_filter[$id]['floating'];
- if (isset($a_filter[$id]['interface']) && $a_filter[$id]['interface'] <> "") {
- $pconfig['interface'] = $a_filter[$id]['interface'];
- }
- }
-
- if (isset($a_filter['floating'])) {
- $pconfig['floating'] = "yes";
- }
-
- if (isset($a_filter[$id]['direction'])) {
- $pconfig['direction'] = $a_filter[$id]['direction'];
- }
-
- if (isset($a_filter[$id]['ipprotocol'])) {
- $pconfig['ipprotocol'] = $a_filter[$id]['ipprotocol'];
- }
-
- if (isset($a_filter[$id]['protocol'])) {
- $pconfig['proto'] = $a_filter[$id]['protocol'];
- } else {
- $pconfig['proto'] = "any";
- }
-
- if ($a_filter[$id]['protocol'] == "icmp") {
- $pconfig['icmptype'] = $a_filter[$id]['icmptype'];
- }
-
- address_to_pconfig($a_filter[$id]['source'], $pconfig['src'],
- $pconfig['srcmask'], $pconfig['srcnot'],
- $pconfig['srcbeginport'], $pconfig['srcendport']);
-
- if ($a_filter[$id]['os'] <> "") {
- $pconfig['os'] = $a_filter[$id]['os'];
- }
-
- address_to_pconfig($a_filter[$id]['destination'], $pconfig['dst'],
- $pconfig['dstmask'], $pconfig['dstnot'],
- $pconfig['dstbeginport'], $pconfig['dstendport']);
-
- if ($a_filter[$id]['dscp'] <> "") {
- $pconfig['dscp'] = $a_filter[$id]['dscp'];
- }
-
- $pconfig['disabled'] = isset($a_filter[$id]['disabled']);
- $pconfig['log'] = isset($a_filter[$id]['log']);
- $pconfig['descr'] = $a_filter[$id]['descr'];
-
- if (isset($a_filter[$id]['tcpflags_any'])) {
- $pconfig['tcpflags_any'] = true;
- } else {
- if (isset($a_filter[$id]['tcpflags1']) && $a_filter[$id]['tcpflags1'] <> "") {
- $pconfig['tcpflags1'] = $a_filter[$id]['tcpflags1'];
- }
- if (isset($a_filter[$id]['tcpflags2']) && $a_filter[$id]['tcpflags2'] <> "") {
- $pconfig['tcpflags2'] = $a_filter[$id]['tcpflags2'];
- }
- }
-
- if (isset($a_filter[$id]['tag']) && $a_filter[$id]['tag'] <> "") {
- $pconfig['tag'] = $a_filter[$id]['tag'];
- }
- if (isset($a_filter[$id]['tagged']) && $a_filter[$id]['tagged'] <> "") {
- $pconfig['tagged'] = $a_filter[$id]['tagged'];
- }
- if (isset($a_filter[$id]['quick']) && $a_filter[$id]['quick']) {
- $pconfig['quick'] = $a_filter[$id]['quick'];
- }
- if (isset($a_filter[$id]['allowopts'])) {
- $pconfig['allowopts'] = true;
- }
- if (isset($a_filter[$id]['disablereplyto'])) {
- $pconfig['disablereplyto'] = true;
- }
-
- /* advanced */
- $pconfig['max'] = $a_filter[$id]['max'];
- $pconfig['max-src-nodes'] = $a_filter[$id]['max-src-nodes'];
- $pconfig['max-src-conn'] = $a_filter[$id]['max-src-conn'];
- $pconfig['max-src-states'] = $a_filter[$id]['max-src-states'];
- $pconfig['statetype'] = $a_filter[$id]['statetype'];
- $pconfig['statetimeout'] = $a_filter[$id]['statetimeout'];
- $pconfig['nopfsync'] = isset($a_filter[$id]['nopfsync']);
-
- /* advanced - nosync */
- $pconfig['nosync'] = isset($a_filter[$id]['nosync']);
-
- /* advanced - new connection per second banning*/
- $pconfig['max-src-conn-rate'] = $a_filter[$id]['max-src-conn-rate'];
- $pconfig['max-src-conn-rates'] = $a_filter[$id]['max-src-conn-rates'];
-
- /* Multi-WAN next-hop support */
- $pconfig['gateway'] = $a_filter[$id]['gateway'];
-
- /* Shaper support */
- $pconfig['defaultqueue'] = (($a_filter[$id]['ackqueue'] == "none") ? '' : $a_filter[$id]['defaultqueue']);
- $pconfig['ackqueue'] = (($a_filter[$id]['ackqueue'] == "none") ? '' : $a_filter[$id]['ackqueue']);
- $pconfig['dnpipe'] = (($a_filter[$id]['dnpipe'] == "none") ? '' : $a_filter[$id]['dnpipe']);
- $pconfig['pdnpipe'] = (($a_filter[$id]['pdnpipe'] == "none") ? '' : $a_filter[$id]['pdnpipe']);
- $pconfig['l7container'] = (($a_filter[$id]['l7container'] == "none") ? '' : $a_filter[$id]['l7container']);
-
- //schedule support
- $pconfig['sched'] = (($a_filter[$id]['sched'] == "none") ? '' : $a_filter[$id]['sched']);
- $pconfig['vlanprio'] = (($a_filter[$id]['vlanprio'] == "none") ? '' : $a_filter[$id]['vlanprio']);
- $pconfig['vlanprioset'] = (($a_filter[$id]['vlanprioset'] == "none") ? '' : $a_filter[$id]['vlanprioset']);
- if (!isset($_GET['dup']) || !is_numericint($_GET['dup'])) {
- $pconfig['associated-rule-id'] = $a_filter[$id]['associated-rule-id'];
- }
-
- $pconfig['tracker'] = $a_filter[$id]['tracker'];
-
-} else {
- /* defaults */
- if ($_GET['if']) {
- $pconfig['interface'] = $_GET['if'];
- }
- $pconfig['type'] = "pass";
- $pconfig['src'] = "any";
- $pconfig['dst'] = "any";
-}
-/* Allow the FloatingRules to work */
-$if = $pconfig['interface'];
-
-if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
- unset($id);
-}
-
-read_altq_config(); /* XXX: */
-$qlist =& get_unique_queue_list();
-read_dummynet_config(); /* XXX: */
-$dnqlist =& get_unique_dnqueue_list();
-read_layer7_config();
-$l7clist =& get_l7_unique_list();
-$a_gatewaygroups = return_gateway_groups_array();
-
-if ($_POST) {
- unset($input_errors);
-
- if (isset($a_filter[$id]['associated-rule-id'])) {
- $_POST['proto'] = $pconfig['proto'];
- if ($pconfig['proto'] == "icmp") {
- $_POST['icmptype'] = $pconfig['icmptype'];
- }
- }
-
- if (($_POST['ipprotocol'] <> "") && ($_POST['gateway'] <> "")) {
- if (is_array($config['gateways']['gateway_group'])) {
- foreach ($config['gateways']['gateway_group'] as $gw_group) {
- if ($gw_group['name'] == $_POST['gateway']) {
- $family = $a_gatewaygroups[$_POST['gateway']]['ipprotocol'];
- if ($_POST['ipprotocol'] == $family) {
- continue;
- }
- if (($_POST['ipprotocol'] == "inet46") && ($_POST['ipprotocol'] != $family)) {
- $input_errors[] = gettext("You can not assign a gateway to a rule that applies to IPv4 and IPv6");
- }
- if (($_POST['ipprotocol'] == "inet6") && ($_POST['ipprotocol'] != $family)) {
- $input_errors[] = gettext("You can not assign an IPv4 gateway group on IPv6 Address Family rule");
- }
- if (($_POST['ipprotocol'] == "inet") && ($_POST['ipprotocol'] != $family)) {
- $input_errors[] = gettext("You can not assign an IPv6 gateway group on IPv4 Address Family rule");
- }
- }
- }
- }
- }
- if (($_POST['ipprotocol'] <> "") && ($_POST['gateway'] <> "") && (is_ipaddr(lookup_gateway_ip_by_name($_POST['gateway'])))) {
- if (($_POST['ipprotocol'] == "inet46") && ($_POST['gateway'] <> "")) {
- $input_errors[] = gettext("You can not assign a gateway to a rule that applies to IPv4 and IPv6");
- }
- if (($_POST['ipprotocol'] == "inet6") && (!is_ipaddrv6(lookup_gateway_ip_by_name($_POST['gateway'])))) {
- $input_errors[] = gettext("You can not assign an IPv4 Gateway to an IPv6 Filter rule");
- }
- if (($_POST['ipprotocol'] == "inet") && (!is_ipaddrv4(lookup_gateway_ip_by_name($_POST['gateway'])))) {
- $input_errors[] = gettext("You can not assign an IPv6 Gateway to an IPv4 Filter rule");
- }
- }
- if (($_POST['proto'] == "icmp") && ($_POST['icmptype'] <> "")) {
- if ($_POST['ipprotocol'] == "inet46") {
- $input_errors[] = gettext("You can not assign a ICMP type to a rule that applies to IPv4 and IPv6");
- }
- }
-
- if (($_POST['proto'] != "tcp") && ($_POST['proto'] != "udp") && ($_POST['proto'] != "tcp/udp")) {
- $_POST['srcbeginport'] = 0;
- $_POST['srcendport'] = 0;
- $_POST['dstbeginport'] = 0;
- $_POST['dstendport'] = 0;
- } else {
- if ($_POST['srcbeginport_cust'] && !$_POST['srcbeginport']) {
- $_POST['srcbeginport'] = trim($_POST['srcbeginport_cust']);
- }
- if ($_POST['srcendport_cust'] && !$_POST['srcendport']) {
- $_POST['srcendport'] = trim($_POST['srcendport_cust']);
- }
- if ($_POST['srcbeginport'] == "any") {
- $_POST['srcbeginport'] = 0;
- $_POST['srcendport'] = 0;
- } else {
- if (!$_POST['srcendport']) {
- $_POST['srcendport'] = $_POST['srcbeginport'];
- }
- }
- if ($_POST['srcendport'] == "any") {
- $_POST['srcendport'] = $_POST['srcbeginport'];
- }
-
- if ($_POST['dstbeginport_cust'] && !$_POST['dstbeginport']) {
- $_POST['dstbeginport'] = trim($_POST['dstbeginport_cust']);
- }
- if ($_POST['dstendport_cust'] && !$_POST['dstendport']) {
- $_POST['dstendport'] = trim($_POST['dstendport_cust']);
- }
-
- if ($_POST['dstbeginport'] == "any") {
- $_POST['dstbeginport'] = 0;
- $_POST['dstendport'] = 0;
- } else {
- if (!$_POST['dstendport']) {
- $_POST['dstendport'] = $_POST['dstbeginport'];
- }
- }
- if ($_POST['dstendport'] == "any") {
- $_POST['dstendport'] = $_POST['dstbeginport'];
- }
- }
-
- if (is_specialnet($_POST['srctype'])) {
- $_POST['src'] = $_POST['srctype'];
- $_POST['srcmask'] = 0;
- } else if ($_POST['srctype'] == "single") {
- if (is_ipaddrv6($_POST['src'])) {
- $_POST['srcmask'] = 128;
- } else {
- $_POST['srcmask'] = 32;
- }
- }
- if (is_specialnet($_POST['dsttype'])) {
- $_POST['dst'] = $_POST['dsttype'];
- $_POST['dstmask'] = 0;
- } else if ($_POST['dsttype'] == "single") {
- if (is_ipaddrv6($_POST['dst'])) {
- $_POST['dstmask'] = 128;
- } else {
- $_POST['dstmask'] = 32;
- }
- }
-
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "type proto");
- if (isset($a_filter[$id]['associated-rule-id']) === false) {
- $reqdfields[] = "src";
- $reqdfields[] = "dst";
- }
- $reqdfieldsn = explode(",", "Type,Protocol");
- if (isset($a_filter[$id]['associated-rule-id']) === false) {
- $reqdfieldsn[] = "Source";
- $reqdfieldsn[] = "Destination";
- }
-
- if ($_POST['statetype'] == "modulate state" or $_POST['statetype'] == "synproxy state") {
- if ($_POST['proto'] != "tcp") {
- $input_errors[] = sprintf(gettext("%s is only valid with protocol TCP."), $_POST['statetype']);
- }
- if (($_POST['statetype'] == "synproxy state") && ($_POST['gateway'] != "")) {
- $input_errors[] = sprintf(gettext("%s is only valid if the gateway is set to 'default'."), $_POST['statetype']);
- }
- }
-
- if (isset($a_filter[$id]['associated-rule-id']) === false &&
- (!(is_specialnet($_POST['srctype']) || ($_POST['srctype'] == "single")))) {
- $reqdfields[] = "srcmask";
- $reqdfieldsn[] = "Source bit count";
- }
- if (isset($a_filter[$id]['associated-rule-id']) === false &&
- (!(is_specialnet($_POST['dsttype']) || ($_POST['dsttype'] == "single")))) {
- $reqdfields[] = "dstmask";
- $reqdfieldsn[] = gettext("Destination bit count");
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (!$_POST['srcbeginport']) {
- $_POST['srcbeginport'] = 0;
- $_POST['srcendport'] = 0;
- }
- if (!$_POST['dstbeginport']) {
- $_POST['dstbeginport'] = 0;
- $_POST['dstendport'] = 0;
- }
-
- if ($_POST['srcbeginport'] && !is_portoralias($_POST['srcbeginport'])) {
- $input_errors[] = sprintf(gettext("%s is not a valid start source port. It must be a port alias or integer between 1 and 65535."), $_POST['srcbeginposrt']);
- }
- if ($_POST['srcendport'] && !is_portoralias($_POST['srcendport'])) {
- $input_errors[] = sprintf(gettext("%s is not a valid end source port. It must be a port alias or integer between 1 and 65535."), $_POST['srcendport']);
- }
- if ($_POST['dstbeginport'] && !is_portoralias($_POST['dstbeginport'])) {
- $input_errors[] = sprintf(gettext("%s is not a valid start destination port. It must be a port alias or integer between 1 and 65535."), $_POST['dstbeginport']);
- }
- if ($_POST['dstendport'] && !is_portoralias($_POST['dstendport'])) {
- $input_errors[] = sprintf(gettext("%s is not a valid end destination port. It must be a port alias or integer between 1 and 65535."), $_POST['dstendport']);
- }
- if (!$_POST['srcbeginport_cust'] && $_POST['srcendport_cust']) {
- if (is_alias($_POST['srcendport_cust'])) {
- $input_errors[] = 'If you put port alias in Source port range to: field you must put the same port alias in from: field';
- }
- }
- if ($_POST['srcbeginport_cust'] && $_POST['srcendport_cust']) {
- if (is_alias($_POST['srcendport_cust']) && is_alias($_POST['srcendport_cust']) && $_POST['srcbeginport_cust'] != $_POST['srcendport_cust']) {
- $input_errors[] = 'The same port alias must be used in Source port range from: and to: fields';
- }
- if ((is_alias($_POST['srcbeginport_cust']) && (!is_alias($_POST['srcendport_cust']) && $_POST['srcendport_cust'] != '')) ||
- ((!is_alias($_POST['srcbeginport_cust']) && $_POST['srcbeginport_cust'] != '') && is_alias($_POST['srcendport_cust']))) {
- $input_errors[] = 'You cannot specify numbers and port aliases at the same time in Source port range from: and to: field';
- }
- }
- if (!$_POST['dstbeginport_cust'] && $_POST['dstendport_cust']) {
- if (is_alias($_POST['dstendport_cust'])) {
- $input_errors[] = 'If you put port alias in Destination port range to: field you must put the same port alias in from: field';
- }
- }
- if ($_POST['dstbeginport_cust'] && $_POST['dstendport_cust']) {
- if (is_alias($_POST['dstendport_cust']) && is_alias($_POST['dstendport_cust']) && $_POST['dstbeginport_cust'] != $_POST['dstendport_cust']) {
- $input_errors[] = 'The same port alias must be used in Destination port range from: and to: fields';
- }
- if ((is_alias($_POST['dstbeginport_cust']) && (!is_alias($_POST['dstendport_cust']) && $_POST['dstendport_cust'] != '')) ||
- ((!is_alias($_POST['dstbeginport_cust']) && $_POST['dstbeginport_cust'] != '') && is_alias($_POST['dstendport_cust']))) {
- $input_errors[] = 'You cannot specify numbers and port aliases at the same time in Destination port range from: and to: field';
- }
- }
-
- if ($_POST['src']) {
- $_POST['src'] = trim($_POST['src']);
- }
- if ($_POST['dst']) {
- $_POST['dst'] = trim($_POST['dst']);
- }
-
- /* if user enters an alias and selects "network" then disallow. */
- if ($_POST['srctype'] == "network") {
- if (is_alias($_POST['src'])) {
- $input_errors[] = gettext("You must specify single host or alias for alias entries.");
- }
- }
- if ($_POST['dsttype'] == "network") {
- if (is_alias($_POST['dst'])) {
- $input_errors[] = gettext("You must specify single host or alias for alias entries.");
- }
- }
-
- if (!is_specialnet($_POST['srctype'])) {
- if (($_POST['src'] && !is_ipaddroralias($_POST['src']))) {
- $input_errors[] = sprintf(gettext("%s is not a valid source IP address or alias."), $_POST['src']);
- }
- if (($_POST['srcmask'] && !is_numericint($_POST['srcmask']))) {
- $input_errors[] = gettext("A valid source bit count must be specified.");
- }
- }
- if (!is_specialnet($_POST['dsttype'])) {
- if (($_POST['dst'] && !is_ipaddroralias($_POST['dst']))) {
- $input_errors[] = sprintf(gettext("%s is not a valid destination IP address or alias."), $_POST['dst']);
- }
- if (($_POST['dstmask'] && !is_numericint($_POST['dstmask']))) {
- $input_errors[] = gettext("A valid destination bit count must be specified.");
- }
- }
- if ((is_ipaddr($_POST['src']) && is_ipaddr($_POST['dst']))) {
- if (!validate_address_family($_POST['src'], $_POST['dst'])) {
- $input_errors[] = sprintf(gettext("The Source IP address %s Address Family differs from the destination %s."), $_POST['src'], $_POST['dst']);
- }
- if ((is_ipaddrv6($_POST['src']) || is_ipaddrv6($_POST['dst'])) && ($_POST['ipprotocol'] == "inet")) {
- $input_errors[] = gettext("You can not use IPv6 addresses in IPv4 rules.");
- }
- if ((is_ipaddrv4($_POST['src']) || is_ipaddrv4($_POST['dst'])) && ($_POST['ipprotocol'] == "inet6")) {
- $input_errors[] = gettext("You can not use IPv4 addresses in IPv6 rules.");
- }
- }
-
- if ((is_ipaddr($_POST['src']) || is_ipaddr($_POST['dst'])) && ($_POST['ipprotocol'] == "inet46")) {
- $input_errors[] = gettext("You can not use a IPv4 or IPv6 address in combined IPv4 + IPv6 rules.");
- }
-
- if ($_POST['srcbeginport'] > $_POST['srcendport']) {
- /* swap */
- $tmp = $_POST['srcendport'];
- $_POST['srcendport'] = $_POST['srcbeginport'];
- $_POST['srcbeginport'] = $tmp;
- }
- if ($_POST['dstbeginport'] > $_POST['dstendport']) {
- /* swap */
- $tmp = $_POST['dstendport'];
- $_POST['dstendport'] = $_POST['dstbeginport'];
- $_POST['dstbeginport'] = $tmp;
- }
- if ($_POST['os']) {
- if ($_POST['proto'] != "tcp") {
- $input_errors[] = gettext("OS detection is only valid with protocol TCP.");
- }
- if (!in_array($_POST['os'], $ostypes)) {
- $input_errors[] = gettext("Invalid OS detection selection. Please select a valid OS.");
- }
- }
-
- if ($_POST['ackqueue'] != "") {
- if ($_POST['defaultqueue'] == "") {
- $input_errors[] = gettext("You have to select a queue when you select an acknowledge queue too.");
- } else if ($_POST['ackqueue'] == $_POST['defaultqueue']) {
- $input_errors[] = gettext("Acknowledge queue and Queue cannot be the same.");
- }
- }
- if (isset($_POST['floating']) && $_POST['pdnpipe'] != "" && (empty($_POST['direction']) || $_POST['direction'] == "any")) {
- $input_errors[] = gettext("You can not use limiters in Floating rules without choosing a direction.");
- }
- if (isset($_POST['floating']) && $_POST['gateway'] != "" && (empty($_POST['direction']) || $_POST['direction'] == "any")) {
- $input_errors[] = gettext("You can not use gateways in Floating rules without choosing a direction.");
- }
- if ($_POST['pdnpipe'] && $_POST['pdnpipe'] != "") {
- if ($_POST['dnpipe'] == "") {
- $input_errors[] = gettext("You must select a queue for the In direction before selecting one for Out too.");
- } else if ($_POST['pdnpipe'] == $_POST['dnpipe']) {
- $input_errors[] = gettext("In and Out Queue cannot be the same.");
- } else if ($dnqlist[$_POST['pdnpipe']][0] == "?" && $dnqlist[$_POST['dnpipe']][0] <> "?") {
- $input_errors[] = gettext("You cannot select one queue and one virtual interface for IN and Out. Both must be from the same type.");
- } else if ($dnqlist[$_POST['dnpipe']][0] == "?" && $dnqlist[$_POST['pdnpipe']][0] <> "?") {
- $input_errors[] = gettext("You cannot select one queue and one virtual interface for IN and Out. Both must be from the same type.");
- }
- if ($_POST['direction'] == "out" && empty($_POST['gateway'])) {
- $input_errors[] = gettext("Please select a gateway, normally the interface selected gateway, so the limiters work correctly");
- }
- }
- if (!empty($_POST['ruleid']) && !ctype_digit($_POST['ruleid'])) {
- $input_errors[] = gettext('ID must be an integer');
- }
- if ($_POST['l7container'] && $_POST['l7container'] != "") {
- if (!($_POST['proto'] == "tcp" || $_POST['proto'] == "udp" || $_POST['proto'] == "tcp/udp")) {
- $input_errors[] = gettext("You can only select a layer7 container for TCP and/or UDP protocols");
- }
- if ($_POST['type'] <> "pass") {
- $input_errors[] = gettext("You can only select a layer7 container for Pass type rules.");
- }
- }
-
- if (!in_array($_POST['proto'], array("tcp", "tcp/udp"))) {
- if (!empty($_POST['max-src-conn'])) {
- $input_errors[] = gettext("You can only specify the maximum number of established connections per host (advanced option) for TCP protocol.");
- }
- if (!empty($_POST['max-src-conn-rate']) || !empty($_POST['max-src-conn-rates'])) {
- $input_errors[] = gettext("You can only specify the maximum new connections per host / per second(s) (advanced option) for TCP protocol.");
- }
- if (!empty($_POST['statetimeout'])) {
- $input_errors[] = gettext("You can only specify the state timeout (advanced option) for TCP protocol.");
- }
- }
-
- if ($_POST['type'] <> "pass") {
- if (!empty($_POST['max'])) {
- $input_errors[] = gettext("You can only specify the maximum state entries (advanced option) for Pass type rules.");
- }
- if (!empty($_POST['max-src-nodes'])) {
- $input_errors[] = gettext("You can only specify the maximum number of unique source hosts (advanced option) for Pass type rules.");
- }
- if (!empty($_POST['max-src-conn'])) {
- $input_errors[] = gettext("You can only specify the maximum number of established connections per host (advanced option) for Pass type rules.");
- }
- if (!empty($_POST['max-src-states'])) {
- $input_errors[] = gettext("You can only specify the maximum state entries per host (advanced option) for Pass type rules.");
- }
- if (!empty($_POST['max-src-conn-rate']) || !empty($_POST['max-src-conn-rates'])) {
- $input_errors[] = gettext("You can only specify the maximum new connections per host / per second(s) (advanced option) for Pass type rules.");
- }
- if (!empty($_POST['statetimeout'])) {
- $input_errors[] = gettext("You can only specify the state timeout (advanced option) for Pass type rules.");
- }
- }
-
- if (($_POST['statetype'] == "none") && (empty($_POST['l7container']))) {
- if (!empty($_POST['max'])) {
- $input_errors[] = gettext("You cannot specify the maximum state entries (advanced option) if statetype is none and no L7 container is selected.");
- }
- if (!empty($_POST['max-src-nodes'])) {
- $input_errors[] = gettext("You cannot specify the maximum number of unique source hosts (advanced option) if statetype is none and no L7 container is selected.");
- }
- if (!empty($_POST['max-src-conn'])) {
- $input_errors[] = gettext("You cannot specify the maximum number of established connections per host (advanced option) if statetype is none and no L7 container is selected.");
- }
- if (!empty($_POST['max-src-states'])) {
- $input_errors[] = gettext("You cannot specify the maximum state entries per host (advanced option) if statetype is none and no L7 container is selected.");
- }
- if (!empty($_POST['max-src-conn-rate']) || !empty($_POST['max-src-conn-rates'])) {
- $input_errors[] = gettext("You cannot specify the maximum new connections per host / per second(s) (advanced option) if statetype is none and no L7 container is selected.");
- }
- if (!empty($_POST['statetimeout'])) {
- $input_errors[] = gettext("You cannot specify the state timeout (advanced option) if statetype is none and no L7 container is selected.");
- }
- }
-
- if (($_POST['max'] != "") && !is_posnumericint($_POST['max'])) {
- $input_errors[] = gettext("Maximum state entries (advanced option) must be a positive integer");
- }
-
- if (($_POST['max-src-nodes'] != "") && !is_posnumericint($_POST['max-src-nodes'])) {
- $input_errors[] = gettext("Maximum number of unique source hosts (advanced option) must be a positive integer");
- }
-
- if (($_POST['max-src-conn'] != "") && !is_posnumericint($_POST['max-src-conn'])) {
- $input_errors[] = gettext("Maximum number of established connections per host (advanced option) must be a positive integer");
- }
-
- if (($_POST['max-src-states'] != "") && !is_posnumericint($_POST['max-src-states'])) {
- $input_errors[] = gettext("Maximum state entries per host (advanced option) must be a positive integer");
- }
-
- if (($_POST['max-src-conn-rate'] != "") && !is_posnumericint($_POST['max-src-conn-rate'])) {
- $input_errors[] = gettext("Maximum new connections per host / per second(s) (advanced option) must be a positive integer");
- }
-
- if (($_POST['statetimeout'] != "") && !is_posnumericint($_POST['statetimeout'])) {
- $input_errors[] = gettext("State timeout (advanced option) must be a positive integer");
- }
-
- if ((($_POST['max-src-conn-rate'] <> "" and $_POST['max-src-conn-rates'] == "")) ||
- (($_POST['max-src-conn-rate'] == "" and $_POST['max-src-conn-rates'] <> ""))) {
- $input_errors[] = gettext("Both maximum new connections per host and the interval (per second(s)) must be specified");
- }
-
- if (!$_POST['tcpflags_any']) {
- $settcpflags = array();
- $outoftcpflags = array();
- foreach ($tcpflags as $tcpflag) {
- if ($_POST['tcpflags1_' . $tcpflag] == "on") {
- $settcpflags[] = $tcpflag;
- }
- if ($_POST['tcpflags2_' . $tcpflag] == "on") {
- $outoftcpflags[] = $tcpflag;
- }
- }
- if (empty($outoftcpflags) && !empty($settcpflags)) {
- $input_errors[] = gettext("If you specify TCP flags that should be set you should specify out of which flags as well.");
- }
- }
-
- // Allow extending of the firewall edit page and include custom input validation
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/input_validation");
-
- if (!$input_errors) {
- $filterent = array();
- $filterent['id'] = $_POST['ruleid']>0?$_POST['ruleid']:'';
-
- $filterent['tracker'] = empty($_POST['tracker']) ? (int)microtime(true) : $_POST['tracker'];
-
- $filterent['type'] = $_POST['type'];
- if (isset($_POST['interface'])) {
- $filterent['interface'] = $_POST['interface'];
- }
-
- if (isset($_POST['ipprotocol'])) {
- $filterent['ipprotocol'] = $_POST['ipprotocol'];
- }
-
- if ($_POST['tcpflags_any']) {
- $filterent['tcpflags_any'] = true;
- } else {
- $settcpflags = array();
- $outoftcpflags = array();
- foreach ($tcpflags as $tcpflag) {
- if ($_POST['tcpflags1_' . $tcpflag] == "on") {
- $settcpflags[] = $tcpflag;
- }
- if ($_POST['tcpflags2_' . $tcpflag] == "on") {
- $outoftcpflags[] = $tcpflag;
- }
- }
- if (!empty($outoftcpflags)) {
- $filterent['tcpflags2'] = join(",", $outoftcpflags);
- if (!empty($settcpflags)) {
- $filterent['tcpflags1'] = join(",", $settcpflags);
- }
- }
- }
-
- if (isset($_POST['tag'])) {
- $filterent['tag'] = $_POST['tag'];
- }
- if (isset($_POST['tagged'])) {
- $filterent['tagged'] = $_POST['tagged'];
- }
- if ($if == "FloatingRules" || isset($_POST['floating'])) {
- $filterent['direction'] = $_POST['direction'];
- if (isset($_POST['quick']) && $_POST['quick'] <> "") {
- $filterent['quick'] = $_POST['quick'];
- }
- $filterent['floating'] = "yes";
- if (isset($_POST['interface']) && count($_POST['interface']) > 0) {
- $filterent['interface'] = implode(",", $_POST['interface']);
- }
- }
-
- /* Advanced options */
- if ($_POST['allowopts'] == "yes") {
- $filterent['allowopts'] = true;
- } else {
- unset($filterent['allowopts']);
- }
- if ($_POST['disablereplyto'] == "yes") {
- $filterent['disablereplyto'] = true;
- } else {
- unset($filterent['disablereplyto']);
- }
- $filterent['max'] = $_POST['max'];
- $filterent['max-src-nodes'] = $_POST['max-src-nodes'];
- $filterent['max-src-conn'] = $_POST['max-src-conn'];
- $filterent['max-src-states'] = $_POST['max-src-states'];
- $filterent['statetimeout'] = $_POST['statetimeout'];
- $filterent['statetype'] = $_POST['statetype'];
- $filterent['os'] = $_POST['os'];
- if ($_POST['nopfsync'] <> "") {
- $filterent['nopfsync'] = true;
- } else {
- unset($filterent['nopfsync']);
- }
-
- /* Nosync directive - do not xmlrpc sync this item */
- if ($_POST['nosync'] <> "") {
- $filterent['nosync'] = true;
- } else {
- unset($filterent['nosync']);
- }
-
- /* unless both values are provided, unset the values - ticket #650 */
- if ($_POST['max-src-conn-rate'] <> "" and $_POST['max-src-conn-rates'] <> "") {
- $filterent['max-src-conn-rate'] = $_POST['max-src-conn-rate'];
- $filterent['max-src-conn-rates'] = $_POST['max-src-conn-rates'];
- } else {
- unset($filterent['max-src-conn-rate']);
- unset($filterent['max-src-conn-rates']);
- }
-
- if ($_POST['proto'] != "any") {
- $filterent['protocol'] = $_POST['proto'];
- } else {
- unset($filterent['protocol']);
- }
-
- if ($_POST['proto'] == "icmp") {
- if ($filterent['ipprotocol'] == 'inet6' && $_POST['icmp6type']) {
- $filterent['icmptype'] = $_POST['icmp6type'];
- } else if ($filterent['ipprotocol'] != 'inet6' && $_POST['icmptype']) {
- $filterent['icmptype'] = $_POST['icmptype'];
- } else {
- unset($filterent['icmptype']);
- }
- } else {
- unset($filterent['icmptype']);
- }
-
- pconfig_to_address($filterent['source'], $_POST['src'],
- $_POST['srcmask'], $_POST['srcnot'],
- $_POST['srcbeginport'], $_POST['srcendport']);
-
- pconfig_to_address($filterent['destination'], $_POST['dst'],
- $_POST['dstmask'], $_POST['dstnot'],
- $_POST['dstbeginport'], $_POST['dstendport']);
-
- if ($_POST['disabled']) {
- $filterent['disabled'] = true;
- } else {
- unset($filterent['disabled']);
- }
-
- if ($_POST['dscp']) {
- $filterent['dscp'] = $_POST['dscp'];
- }
-
- if ($_POST['log']) {
- $filterent['log'] = true;
- } else {
- unset($filterent['log']);
- }
- strncpy($filterent['descr'], $_POST['descr'], 52);
-
- if ($_POST['gateway'] != "") {
- $filterent['gateway'] = $_POST['gateway'];
- }
-
- if ($_POST['defaultqueue'] != "") {
- $filterent['defaultqueue'] = $_POST['defaultqueue'];
- if ($_POST['ackqueue'] != "") {
- $filterent['ackqueue'] = $_POST['ackqueue'];
- }
- }
-
- if ($_POST['dnpipe'] != "") {
- $filterent['dnpipe'] = $_POST['dnpipe'];
- if ($_POST['pdnpipe'] != "") {
- $filterent['pdnpipe'] = $_POST['pdnpipe'];
- }
- }
-
- if ($_POST['l7container'] != "") {
- $filterent['l7container'] = $_POST['l7container'];
- }
-
- if ($_POST['sched'] != "") {
- $filterent['sched'] = $_POST['sched'];
- }
-
- if ($_POST['vlanprio'] != "") {
- $filterent['vlanprio'] = $_POST['vlanprio'];
- }
- if ($_POST['vlanprioset'] != "") {
- $filterent['vlanprioset'] = $_POST['vlanprioset'];
- }
-
- // If we have an associated nat rule, make sure the source and destination doesn't change
- if (isset($a_filter[$id]['associated-rule-id'])) {
- $filterent['interface'] = $a_filter[$id]['interface'];
- if (isset($a_filter[$id]['protocol'])) {
- $filterent['protocol'] = $a_filter[$id]['protocol'];
- } else if (isset($filterent['protocol'])) {
- unset($filterent['protocol']);
- }
- if ($a_filter[$id]['protocol'] == "icmp" && $a_filter[$id]['icmptype']) {
- $filterent['icmptype'] = $a_filter[$id]['icmptype'];
- } else if (isset($filterent['icmptype'])) {
- unset($filterent['icmptype']);
- }
-
- $filterent['source'] = $a_filter[$id]['source'];
- $filterent['destination'] = $a_filter[$id]['destination'];
- $filterent['associated-rule-id'] = $a_filter[$id]['associated-rule-id'];
- }
-
- if (isset($a_filter[$id]['created']) && is_array($a_filter[$id]['created'])) {
- $filterent['created'] = $a_filter[$id]['created'];
- }
-
- $filterent['updated'] = make_config_revision_entry();
-
- // Allow extending of the firewall edit page and include custom input validation
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_write_config");
-
- if (isset($id) && $a_filter[$id]) {
- $a_filter[$id] = $filterent;
- } else {
- $filterent['created'] = make_config_revision_entry();
- if (is_numeric($after)) {
- array_splice($a_filter, $after+1, 0, array($filterent));
- } else {
- $a_filter[] = $filterent;
- }
- }
-
- filter_rules_sort();
-
- if (write_config()) {
- mark_subsystem_dirty('filter');
- }
-
- if (isset($_POST['floating'])) {
- header("Location: firewall_rules.php?if=FloatingRules");
- } else {
- header("Location: firewall_rules.php?if=" . htmlspecialchars($_POST['interface']));
- }
- exit;
- }
-}
-
-$pgtitle = array(gettext("Firewall"), gettext("Rules"), gettext("Edit"));
-$shortcut_section = "firewall";
-
-$closehead = false;
-
-$page_filename = "firewall_rules_edit.php";
-include("head.inc");
-
-?>
-<link rel="stylesheet" href="/javascript/chosen/chosen.css" />
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
-<script src="/javascript/chosen/chosen.jquery.js" type="text/javascript"></script>
-<?php include("fbegin.inc"); ?>
-<?php pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_input_errors"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-
-<form action="firewall_rules_edit.php" method="post" name="iform" id="iform">
-<input type='hidden' name="ruleid" value="<?=(isset($pconfig['ruleid'])&&$pconfig['ruleid']>0)?htmlspecialchars($pconfig['ruleid']):''?>" />
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="firewall rules edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit Firewall rule");?></td>
- </tr>
-<?php
- // Allow extending of the firewall edit page and include custom input validation
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/htmlphpearly");
-?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Action");?></td>
- <td width="78%" class="vtable">
- <select name="type" class="formselect">
- <?php $types = explode(" ", "Pass Block Reject"); foreach ($types as $type): ?>
- <option value="<?=strtolower($type);?>" <?php if (strtolower($type) == strtolower($pconfig['type'])) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($type);?>
- </option>
- <?php endforeach; ?>
-<?php if ($if == "FloatingRules" || isset($pconfig['floating'])): ?>
- <option value="match" <?php if ("match" == strtolower($pconfig['type'])) echo "selected=\"selected\""; ?>>Match</option>
-<?php endif; ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Choose what to do with packets that match the criteria specified below.");?> <br />
- <?=gettext("Hint: the difference between block and reject is that with reject, a packet (TCP RST or ICMP port unreachable for UDP) is returned to the sender, whereas with block the packet is dropped silently. In either case, the original packet is discarded.");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled");?></td>
- <td width="78%" class="vtable">
- <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable this rule");?></strong><br />
- <span class="vexpl"><?=gettext("Set this option to disable this rule without removing it from the list.");?></span>
- </td>
- </tr>
-<?php if ($if == "FloatingRules" || isset($pconfig['floating'])): ?>
- <tr>
- <td width="22%" valign="top" class="vncellreq">
- <?=gettext("Quick");?>
- </td>
- <td width="78%" class="vtable">
- <input name="quick" type="checkbox" id="quick" value="yes" <?php if ($pconfig['quick']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Apply the action immediately on match.");?></strong><br />
- <span class="vexpl"><?=gettext("Set this option if you need to apply this action to traffic that matches this rule immediately.");?></span>
- </td>
- </tr>
-<?php endif; ?>
-<?php $edit_disabled = ""; ?>
-<?php if (isset($pconfig['associated-rule-id'])): ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Associated filter rule");?></td>
- <td width="78%" class="vtable">
- <span class="red"><strong><?=gettext("Note: ");?></strong></span><?=gettext("This is associated to a NAT rule.");?><br />
- <?=gettext("You cannot edit the interface, protocol, source, or destination of associated filter rules.");?><br />
- <br />
- <?php
- $edit_disabled = "disabled";
- if (is_array($config['nat']['rule'])) {
- foreach ($config['nat']['rule'] as $index => $nat_rule) {
- if (isset($nat_rule['associated-rule-id']) && $nat_rule['associated-rule-id'] == $pconfig['associated-rule-id']) {
- echo "<a href=\"firewall_nat_edit.php?id={$index}\">" . gettext("View the NAT rule") . "</a><br />";
- break;
- }
- }
- }
- echo "<input name='associated-rule-id' id='associated-rule-id' type='hidden' value='{$pconfig['associated-rule-id']}' />";
- if (!empty($pconfig['interface'])) {
- echo "<input name='interface' id='interface' type='hidden' value='{$pconfig['interface']}' />";
- }
- ?>
- <script type="text/javascript">
- //<![CDATA[
- editenabled = 0;
- //]]>
- </script>
- </td>
- </tr>
-<?php endif; ?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface");?></td>
- <td width="78%" class="vtable">
-<?php if ($if == "FloatingRules" || isset($pconfig['floating'])): ?>
- <select name="interface[]" title="Select interfaces..." multiple="multiple" style="width:350px;" class="chzn-select" tabindex="2" <?=$edit_disabled;?>>
-<?php else: ?>
- <select name="interface" class="formselect" <?=$edit_disabled;?>>
-<?php endif;
- /* add group interfaces */
- if (is_array($config['ifgroups']['ifgroupentry'])) {
- foreach ($config['ifgroups']['ifgroupentry'] as $ifgen) {
- if (have_ruleint_access($ifgen['ifname'])) {
- $interfaces[$ifgen['ifname']] = $ifgen['ifname'];
- }
- }
- }
- $ifdescs = get_configured_interface_with_descr();
- // Allow extending of the firewall edit page and include custom input validation
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_interfaces_edit");
- foreach ($ifdescs as $ifent => $ifdesc) {
- if (have_ruleint_access($ifent)) {
- $interfaces[$ifent] = $ifdesc;
- }
- }
- if ($config['l2tp']['mode'] == "server") {
- if (have_ruleint_access("l2tp")) {
- $interfaces['l2tp'] = "L2TP VPN";
- }
- }
- if ($config['pptpd']['mode'] == "server") {
- if (have_ruleint_access("pptp")) {
- $interfaces['pptp'] = "PPTP VPN";
- }
- }
-
- if (is_pppoe_server_enabled() && have_ruleint_access("pppoe")) {
- $interfaces['pppoe'] = "PPPoE Server";
- }
- /* add ipsec interfaces */
- if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
- if (have_ruleint_access("enc0")) {
- $interfaces["enc0"] = "IPsec";
- }
- }
- /* add openvpn/tun interfaces */
- if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) {
- $interfaces["openvpn"] = "OpenVPN";
- }
- if (is_array($pconfig['interface'])) {
- $pconfig['interface'] = implode(",", $pconfig['interface']);
- }
- $selected_interfaces = explode(",", $pconfig['interface']);
- foreach ($interfaces as $iface => $ifacename): ?>
- <option value="<?=$iface;?>" <?php if ($pconfig['interface'] <> "" && (strcasecmp($pconfig['interface'], $iface) == 0 || in_array($iface, $selected_interfaces))) echo "selected=\"selected\""; ?>><?=$ifacename?></option>
-<?php endforeach; ?>
- </select>
- <br />
- <?php if ($if == "FloatingRules" || isset($pconfig['floating'])): ?>
- <span class="vexpl"><?=gettext("Choose the interface(s) for this rule.");?></span>
- <?php else: ?>
- <span class="vexpl"><?=gettext("Choose which interface packets must be sourced on to match this rule.");?></span>
- <?php endif; ?>
- </td>
- </tr>
-<?php if ($if == "FloatingRules" || isset($pconfig['floating'])): ?>
- <tr>
- <td width="22%" valign="top" class="vncellreq">
- <?=gettext("Direction");?>
- </td>
- <td width="78%" class="vtable">
- <select name="direction" class="formselect">
- <?php $directions = array('any', 'in', 'out');
- foreach ($directions as $direction): ?>
- <option value="<?=$direction;?>"
- <?php if ($direction == $pconfig['direction']): ?>
- selected="selected"
- <?php endif; ?>
- ><?=$direction;?></option>
- <?php endforeach; ?>
- </select>
- <input type="hidden" id="floating" name="floating" value="floating" />
- </td>
- </tr>
-<?php endif; ?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("TCP/IP Version");?></td>
- <td width="78%" class="vtable">
- <select name="ipprotocol" class="formselect" onchange="proto_change()">
- <?php
- $ipproto = array('inet' => 'IPv4', 'inet6' => 'IPv6', 'inet46' => 'IPv4+IPv6');
- foreach ($ipproto as $proto => $name):
- ?>
- <option value="<?=$proto;?>"
- <?php if ($proto == $pconfig['ipprotocol']): ?>
- selected="selected"
- <?php endif; ?>
- ><?=$name;?></option>
- <?php endforeach; ?>
- </select>
- <strong><?=gettext("Select the Internet Protocol version this rule applies to");?></strong><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol");?></td>
- <td width="78%" class="vtable">
- <select <?=$edit_disabled;?> name="proto" class="formselect" onchange="proto_change()">
-<?php
- $protocols = explode(" ", "TCP UDP TCP/UDP ICMP ESP AH GRE IPV6 IGMP PIM OSPF SCTP any carp pfsync");
- foreach ($protocols as $proto): ?>
- <option value="<?=strtolower($proto);?>" <?php if (strtolower($proto) == $pconfig['proto']) echo "selected=\"selected\""; ?>><?=htmlspecialchars($proto);?></option>
-<?php endforeach; ?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Choose which IP protocol this rule should match.");?> <br /> <?=gettext("Hint: in most cases, you should specify ");?><em>TCP</em> &nbsp;<?=gettext("here.");?></span>
- </td>
- </tr>
- <tr id="icmpbox">
- <td valign="top" class="vncell"><?=gettext("ICMP type");?></td>
- <td class="vtable">
- <select <?=$edit_disabled;?> name="icmptype" class="formselect">
-<?php
- foreach ($icmptypes as $icmptype => $descr):
-?>
- <option value="<?=$icmptype;?>" <?php if ($icmptype == $pconfig['icmptype']) echo "selected=\"selected\""; ?>><?=htmlspecialchars($descr);?></option>
-<?php
- endforeach;
-?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("If you selected ICMP for the protocol above, you may specify an ICMP type here.");?></span>
- </td>
- </tr>
- <tr id="icmp6box">
- <td valign="top" class="vncell"><?=gettext("ICMPv6 type");?></td>
- <td class="vtable">
- <select <?=$edit_disabled;?> name="icmp6type" class="formselect">
-<?php
- foreach ($icmp6types as $icmptype => $descr):
-?>
- <option value="<?=$icmptype;?>" <?php if ($icmptype == $pconfig['icmptype']) echo "selected=\"selected\""; ?>><?=htmlspecialchars($descr);?></option>
-<?php
- endforeach;
-?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("If you selected ICMP for the protocol above, you may specify an ICMP type here.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Source");?></td>
- <td width="78%" class="vtable">
- <input <?=$edit_disabled;?> name="srcnot" type="checkbox" id="srcnot" value="yes" <?php if ($pconfig['srcnot']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("not");?></strong>
- <br />
- <?=gettext("Use this option to invert the sense of the match.");?>
- <br />
- <br />
- <table border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td><?=gettext("Type:");?>&nbsp;&nbsp;</td>
- <td>
- <select <?=$edit_disabled;?> name="srctype" class="formselect" onchange="typesel_change()">
-<?php
- $sel = is_specialnet($pconfig['src']);
-?>
- <option value="any" <?php if ($pconfig['src'] == "any") { echo "selected=\"selected\""; } ?>><?=gettext("any");?></option>
- <option value="single"
- <?php
- if (!$sel &&
- ((is_ipaddrv6($pconfig['src']) && $pconfig['srcmask'] == 128) ||
- (is_ipaddrv4($pconfig['src']) && $pconfig['srcmask'] == 32) || is_alias($pconfig['src']))) {
- echo "selected=\"selected\""; $sel = 1;
- }
- ?>
- > <?=gettext("Single host or alias");?></option>
- <option value="network" <?php if (!$sel) echo "selected=\"selected\""; ?>><?=gettext("Network");?></option>
- <?php if (isset($a_filter[$id]['floating']) || $if == "FloatingRules"): ?>
- <option value="(self)" <?php if ($pconfig['src'] == "(self)") echo "selected=\"selected\""; ?>><?=gettext("This Firewall (self)");?></option>
- <?php endif;?>
- <?php if (have_ruleint_access("pptp")): ?>
- <option value="pptp" <?php if ($pconfig['src'] == "pptp") { echo "selected=\"selected\""; } ?>><?=gettext("PPTP clients");?></option>
- <?php endif; ?>
- <?php if (have_ruleint_access("pppoe")): ?>
- <option value="pppoe" <?php if ($pconfig['src'] == "pppoe") { echo "selected=\"selected\""; } ?>><?=gettext("PPPoE clients");?></option>
- <?php endif; ?>
- <?php if (have_ruleint_access("l2tp")): ?>
- <option value="l2tp" <?php if ($pconfig['src'] == "l2tp") { echo "selected=\"selected\""; } ?>><?=gettext("L2TP clients");?></option>
- <?php endif; ?>
-<?php
- foreach ($ifdisp as $ifent => $ifdesc):
-?>
- <?php if (have_ruleint_access($ifent)): ?>
- <option value="<?=$ifent;?>" <?php if ($pconfig['src'] == $ifent) { echo "selected=\"selected\""; } ?>><?=htmlspecialchars($ifdesc);?> <?=gettext("net");?></option>
- <option value="<?=$ifent;?>ip"<?php if ($pconfig['src'] == $ifent . "ip") { echo "selected=\"selected\""; } ?>>
- <?=$ifdesc?> <?=gettext("address");?>
- </option>
- <?php endif; ?>
-<?php
- endforeach;
-?>
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
- <td>
- <input <?=$edit_disabled;?> autocomplete='off' name="src" type="text" class="formfldalias ipv4v6" id="src" size="20" value="<?php if (!is_specialnet($pconfig['src'])) echo htmlspecialchars($pconfig['src']);?>" /> /
- <select <?=$edit_disabled;?> name="srcmask" class="formselect ipv4v6" id="srcmask">
-<?php for ($i = 127; $i > 0; $i--): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['srcmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
-<?php endfor; ?>
- </select>
- </td>
- </tr>
- </table>
- <div id="showadvancedboxspr">
- <p>
- <input <?=$edit_disabled;?> type="button" onclick="show_source_port_range()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show source port range");?>
- </p>
- </div>
- </td>
- </tr>
- <tr style="display:none" id="sprtable">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Source port range");?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td><?=gettext("from:");?>&nbsp;&nbsp;</td>
- <td>
- <select <?=$edit_disabled;?> name="srcbeginport" class="formselect" onchange="src_rep_change();ext_change()">
- <option value="">(<?=gettext("other"); ?>)</option>
- <option value="any" <?php $bfound = 0; if ($pconfig['srcbeginport'] == "any") { echo "selected=\"selected\""; $bfound = 1; } ?>><?=gettext("any");?></option>
-<?php foreach ($wkports as $wkport => $wkportdesc): ?>
- <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['srcbeginport']) { echo "selected=\"selected\""; $bfound = 1; } ?>><?=htmlspecialchars("{$wkportdesc} ({$wkport})");?></option>
-<?php endforeach; ?>
- </select>
- <input <?=$edit_disabled;?> autocomplete='off' class="formfldalias" name="srcbeginport_cust" id="srcbeginport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['srcbeginport']) echo htmlspecialchars($pconfig['srcbeginport']); ?>" />
- </td>
- </tr>
- <tr>
- <td><?=gettext("to:");?></td>
- <td>
- <select <?=$edit_disabled;?> name="srcendport" class="formselect" onchange="ext_change()">
- <option value="">(<?=gettext("other"); ?>)</option>
- <option value="any" <?php $bfound = 0; if ($pconfig['srcendport'] == "any") { echo "selected=\"selected\""; $bfound = 1; } ?>><?=gettext("any");?></option>
-<?php foreach ($wkports as $wkport => $wkportdesc): ?>
- <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['srcendport']) { echo "selected=\"selected\""; $bfound = 1; } ?>><?=htmlspecialchars("{$wkportdesc} ({$wkport})");?></option>
-<?php endforeach; ?>
- </select>
- <input <?=$edit_disabled;?> autocomplete='off' class="formfldalias" name="srcendport_cust" id="srcendport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['srcendport']) echo htmlspecialchars($pconfig['srcendport']); ?>" />
- </td>
- </tr>
- </table>
- <br />
- <span class="vexpl"><?=gettext("Specify the source port or port range for this rule."); ?> <b><?=gettext("This is usually"); ?> <em><?=gettext("random"); ?></em> <?=gettext("and almost never equal to the destination port range (and should usually be"); ?> &quot;<?=gettext("any"); ?>&quot;).</b><br /><?=gettext("Hint: you can leave the"); ?> <em><?=gettext("'to'"); ?></em> <?=gettext("field empty if you only want to filter a single port.");?></span><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination");?></td>
- <td width="78%" class="vtable">
- <input <?=$edit_disabled;?> name="dstnot" type="checkbox" id="dstnot" value="yes" <?php if ($pconfig['dstnot']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("not");?></strong>
- <br />
- <?=gettext("Use this option to invert the sense of the match.");?>
- <br />
- <br />
- <table border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td><?=gettext("Type:");?>&nbsp;&nbsp;</td>
- <td>
- <select <?=$edit_disabled;?> name="dsttype" class="formselect" onchange="typesel_change()">
-<?php
- $sel = is_specialnet($pconfig['dst']); ?>
- <option value="any" <?php if ($pconfig['dst'] == "any") { echo "selected=\"selected\""; } ?>><?=gettext("any");?></option>
- <option value="single"
- <?php
- if (!$sel &&
- ((is_ipaddrv6($pconfig['dst']) && $pconfig['dstmask'] == 128) ||
- (is_ipaddrv4($pconfig['dst']) && $pconfig['dstmask'] == 32) || is_alias($pconfig['dst']))) {
- echo "selected=\"selected\""; $sel = 1;
- }
- ?>
- ><?=gettext("Single host or alias");?></option>
- <option value="network" <?php if (!$sel) echo "selected=\"selected\""; ?>><?=gettext("Network");?></option>
- <option value="(self)" <?PHP if ($pconfig['dst'] == "(self)") echo "selected=\"selected\""; ?>><?=gettext("This Firewall (self)");?></option>
- <?php if (have_ruleint_access("pptp")): ?>
- <option value="pptp" <?php if ($pconfig['dst'] == "pptp") { echo "selected=\"selected\""; } ?>><?=gettext("PPTP clients");?></option>
- <?php endif; ?>
- <?php if (have_ruleint_access("pppoe")): ?>
- <option value="pppoe" <?php if ($pconfig['dst'] == "pppoe") { echo "selected=\"selected\""; } ?>><?=gettext("PPPoE clients");?></option>
- <?php endif; ?>
- <?php if (have_ruleint_access("l2tp")): ?>
- <option value="l2tp" <?php if ($pconfig['dst'] == "l2tp") { echo "selected=\"selected\""; } ?>><?=gettext("L2TP clients");?></option>
- <?php endif; ?>
-
-<?php foreach ($ifdisp as $if => $ifdesc): ?>
- <?php if (have_ruleint_access($if)): ?>
- <option value="<?=$if;?>" <?php if ($pconfig['dst'] == $if) { echo "selected=\"selected\""; } ?>><?=htmlspecialchars($ifdesc);?> <?=gettext("net");?></option>
- <option value="<?=$if;?>ip"<?php if ($pconfig['dst'] == $if . "ip") { echo "selected=\"selected\""; } ?>>
- <?=$ifdesc;?> <?=gettext("address");?>
- </option>
- <?php endif; ?>
-<?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
- <td>
- <input <?=$edit_disabled;?> autocomplete='off' name="dst" type="text" class="formfldalias ipv4v6" id="dst" size="20" value="<?php if (!is_specialnet($pconfig['dst'])) echo htmlspecialchars($pconfig['dst']);?>" />
- /
- <select <?=$edit_disabled;?> name="dstmask" class="formselect ipv4v6" id="dstmask">
-<?php for ($i = 127; $i > 0; $i--): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['dstmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
-<?php endfor; ?>
- </select>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr id="dprtr">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination port range ");?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td><?=gettext("from:");?>&nbsp;&nbsp;</td>
- <td>
- <select <?=$edit_disabled;?> name="dstbeginport" class="formselect" onchange="dst_rep_change();ext_change()">
- <option value="">(<?=gettext("other"); ?>)</option>
- <option value="any" <?php $bfound = 0; if ($pconfig['dstbeginport'] == "any") { echo "selected=\"selected\""; $bfound = 1; } ?>><?=gettext("any");?></option>
-<?php foreach ($wkports as $wkport => $wkportdesc): ?>
- <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['dstbeginport']) { echo "selected=\"selected\""; $bfound = 1; }?>><?=htmlspecialchars("{$wkportdesc} ({$wkport})");?></option>
-<?php endforeach; ?>
- </select>
- <input <?=$edit_disabled;?> autocomplete='off' class="formfldalias" name="dstbeginport_cust" id="dstbeginport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['dstbeginport']) echo htmlspecialchars($pconfig['dstbeginport']); ?>" />
- </td>
- </tr>
- <tr>
- <td><?=gettext("to:");?></td>
- <td>
- <select <?=$edit_disabled;?> name="dstendport" class="formselect" onchange="ext_change()">
- <option value="">(<?=gettext("other"); ?>)</option>
- <option value="any" <?php $bfound = 0; if ($pconfig['dstendport'] == "any") { echo "selected=\"selected\""; $bfound = 1; } ?>><?=gettext("any");?></option>
-<?php foreach ($wkports as $wkport => $wkportdesc): ?>
- <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['dstendport']) { echo "selected=\"selected\""; $bfound = 1; } ?>><?=htmlspecialchars("{$wkportdesc} ({$wkport})");?></option>
-<?php endforeach; ?>
- </select>
- <input <?=$edit_disabled;?> autocomplete='off' class="formfldalias" name="dstendport_cust" id="dstendport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['dstendport']) echo htmlspecialchars($pconfig['dstendport']); ?>" />
- </td>
- </tr>
- </table>
- <br />
- <span class="vexpl">
- <?=gettext("Specify the port or port range for the destination of the packet for this rule.");?>
- <br />
- <?=gettext("Hint: you can leave the"); ?> <em><?=gettext("'to'"); ?></em> <?=gettext("field empty if you only want to filter a single port");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Log");?></td>
- <td width="78%" class="vtable">
- <input name="log" type="checkbox" id="log" value="yes" <?php if ($pconfig['log']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Log packets that are handled by this rule");?></strong>
- <br />
- <span class="vexpl"><?=gettext("Hint: the firewall has limited local log space. Don't turn on logging for everything. If you want to do a lot of logging, consider using a remote syslog server"); ?> (<?=gettext("see the"); ?> <a href="diag_logs_settings.php"><?=gettext("Diagnostics: System logs: Settings"); ?></a> <?=gettext("page"); ?>).</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="52" maxlength="52" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl"><?=gettext("You may enter a description here for your reference.");?></span>
- </td>
- </tr>
-<?php if (!isset($id) || !($a_filter[$id] && firewall_check_for_advanced_options($a_filter[$id]) <> "")): ?>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- &nbsp;<br />&nbsp;
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
-<?php if (isset($id) && $a_filter[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
-<?php endif; ?>
- <input name="after" type="hidden" value="<?=htmlspecialchars($after);?>" />
- </td>
- </tr>
-<?php endif; ?>
- <tr>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Advanced features");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Source OS");?></td>
- <td width="78%" class="vtable">
- <div id="showadvsourceosbox" <?php if ($pconfig['os']) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_advanced_sourceos()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
- </div>
- <div id="showsourceosadv" <?php if (empty($pconfig['os'])) echo "style='display:none'"; ?>>
- <?=gettext("OS Type:");?>&nbsp;
- <select name="os" id="os" class="formselect">
- <option value="" <?php if (empty($pconfig['os'])) echo "selected=\"selected\""; ?>>Any</option>
-<?php foreach ($ostypes as $ostype): ?>
- <option value="<?=$ostype;?>" <?php if ($ostype == $pconfig['os']) echo "selected=\"selected\""; ?>><?=htmlspecialchars($ostype);?></option>
-<?php endforeach; ?>
- </select>
- <br />
- <?=gettext("Note: this only works for TCP rules. General OS choice matches all subtypes.");?>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Diffserv Code Point");?></td>
- <td width="78%" class="vtable">
- <div id="dsadv" <?php if ($pconfig['dscp']) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_dsdiv();" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
- </div>
- <div id="dsdivmain" <?php if (empty($pconfig['dscp'])) echo "style='display:none'"; ?>>
- <select name="dscp" id="dscp">
- <option value=""></option>
- <?php foreach ($firewall_rules_dscp_types as $frdt): ?>
- <option value="<?=$frdt?>"<?php if ($pconfig['dscp'] == $frdt) echo " selected=\"selected\""; ?>><?=$frdt?></option>
- <?php endforeach; ?>
- </select>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Advanced Options");?></td>
- <td width="78%" class="vtable">
- <div id="aoadv" <?php if (is_aoadv_used($pconfig)) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_aodiv();" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
- </div>
- <div id="aodivmain" <?php if (!is_aoadv_used($pconfig)) echo "style='display:none'"; ?>>
- <input type="checkbox" id="allowopts" value="yes" name="allowopts"<?php if ($pconfig['allowopts'] == true) echo " checked=\"checked\""; ?> />
- <br /><span class="vexpl"><?=gettext("This allows packets with IP options to pass. Otherwise they are blocked by default. This is usually only seen with multicast traffic.");?>
- </span><p>
- <input type="checkbox" id="disablereplyto" value="yes" name="disablereplyto"<?php if ($pconfig['disablereplyto'] == true) echo " checked=\"checked\""; ?> />
- <br /><span class="vexpl"><?=gettext("This will disable auto generated reply-to for this rule.");?>
- </span></p><p>
- <input name="tag" id="tag" value="<?=htmlspecialchars($pconfig['tag']);?>" />
- <br /><span class="vexpl"><?=gettext("You can mark a packet matching this rule and use this mark to match on other NAT/filter rules. It is called"); ?> <b><?=gettext("Policy filtering"); ?></b>
- </span></p><p>
- <input name="tagged" id="tagged" value="<?=htmlspecialchars($pconfig['tagged']);?>" />
- <br /><span class="vexpl"><?=gettext("You can match packet on a mark placed before on another rule.")?>
- </span></p><p>
- <input name="max" id="max" value="<?php echo htmlspecialchars($pconfig['max']) ?>" /><br /><?=gettext(" Maximum state entries this rule can create");?></p><p>
- <input name="max-src-nodes" id="max-src-nodes" value="<?php echo htmlspecialchars($pconfig['max-src-nodes']) ?>" /><br /><?=gettext(" Maximum number of unique source hosts");?></p><p>
- <input name="max-src-conn" id="max-src-conn" value="<?php echo htmlspecialchars($pconfig['max-src-conn']) ?>" /><br /><?=gettext(" Maximum number of established connections per host (TCP only)");?></p><p>
- <input name="max-src-states" id="max-src-states" value="<?php echo htmlspecialchars($pconfig['max-src-states']) ?>" /><br /><?=gettext(" Maximum state entries per host");?></p><p>
- <input name="max-src-conn-rate" id="max-src-conn-rate" value="<?php echo htmlspecialchars($pconfig['max-src-conn-rate']) ?>" /> /
- <select name="max-src-conn-rates" id="max-src-conn-rates">
- <option value=""<?php if (intval($pconfig['max-src-conn-rates']) < 1) echo " selected=\"selected\""; ?>></option>
-<?php for ($x=1; $x<255; $x++) {
- if ($x == $pconfig['max-src-conn-rates']) $selected = " selected=\"selected\""; else $selected = ""; {
- echo "<option value=\"{$x}\"{$selected}>{$x}</option>\n";
- }
- } ?>
- </select><br />
- <?=gettext("Maximum new connections per host / per second(s) (TCP only)");?>
- </p><p>
- <input name="statetimeout" value="<?php echo htmlspecialchars($pconfig['statetimeout']) ?>" /><br />
- <?=gettext("State Timeout in seconds (TCP only)");?>
- </p>
- <p><strong><?=gettext("Note: Leave fields blank to disable that feature.");?></strong></p>
- </div>
- </td>
- </tr>
- <tr id="tcpflags">
- <td width="22%" valign="top" class="vncell"><?=gettext("TCP flags");?></td>
- <td width="78%" class="vtable">
- <div id="showtcpflagsbox" <?php if ($pconfig['tcpflags_any'] || $pconfig['tcpflags1'] || $pconfig['tcpflags2']) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_advanced_tcpflags()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
- </div>
- <div id="showtcpflagsadv" <?php if (empty($pconfig['tcpflags_any']) && empty($pconfig['tcpflags1']) && empty($pconfig['tcpflags2'])) echo "style='display:none'"; ?>>
- <div id="tcpheader" align="center">
- <table border="0" cellspacing="0" cellpadding="0">
- <?php
- $setflags = explode(",", $pconfig['tcpflags1']);
- $outofflags = explode(",", $pconfig['tcpflags2']);
- $header = "<td width='40' class='nowrap'></td>";
- $tcpflags1 = "<td width='40' class='nowrap'>set</td>";
- $tcpflags2 = "<td width='40' class='nowrap'>out of</td>";
- foreach ($tcpflags as $tcpflag) {
- $header .= "<td width='40' class='nowrap'><strong>" . strtoupper($tcpflag) . "</strong></td>\n";
- $tcpflags1 .= "<td width='40' class='nowrap'> <input type='checkbox' name='tcpflags1_{$tcpflag}' value='on' ";
- if (array_search($tcpflag, $setflags) !== false) {
- $tcpflags1 .= "checked=\"checked\"";
- }
- $tcpflags1 .= " /></td>\n";
- $tcpflags2 .= "<td width='40' class='nowrap'> <input type='checkbox' name='tcpflags2_{$tcpflag}' value='on' ";
- if (array_search($tcpflag, $outofflags) !== false) {
- $tcpflags2 .= "checked=\"checked\"";
- }
- $tcpflags2 .= " /></td>\n";
- }
- echo "<tr id='tcpheader'>{$header}</tr>\n";
- echo "<tr id='tcpflags1'>{$tcpflags1}</tr>\n";
- echo "<tr id='tcpflags2'>{$tcpflags2}</tr>\n";
- ?>
- </table>
- </div>
- <br /><center>
- <input onclick='tcpflags_anyclick(this);' type='checkbox' name='tcpflags_any' value='on' <?php if ($pconfig['tcpflags_any']) echo "checked=\"checked\""; ?> /><strong><?=gettext("Any flags.");?></strong><br /></center>
- <br />
- <span class="vexpl"><?=gettext("Use this to choose TCP flags that must ".
- "be set or cleared for this rule to match.");?></span>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("State Type");?></td>
- <td width="78%" class="vtable">
- <div id="showadvstatebox" <?php if (!empty($pconfig['nopfsync']) || (!empty($pconfig['statetype']) && $pconfig['statetype'] != "keep state")) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_advanced_state()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
- </div>
- <div id="showstateadv" <?php if (empty($pconfig['nopfsync']) && (empty($pconfig['statetype']) || $pconfig['statetype'] == "keep state")) echo "style='display:none'"; ?>>
- <input name="nopfsync" type="checkbox" id="nopfsync" value="yes" <?php if ($pconfig['nopfsync']) echo "checked=\"checked\""; ?> />
- <span class="vexpl">
- NO pfsync<br />
- <?=gettext("Hint: This prevents states created by this rule to be sync'ed over pfsync.");?><br />
- </span><br />
- <select name="statetype">
- <option value="keep state" <?php if (!isset($pconfig['statetype']) or $pconfig['statetype'] == "keep state") echo "selected=\"selected\""; ?>><?=gettext("keep state");?></option>
- <option value="sloppy state" <?php if ($pconfig['statetype'] == "sloppy state") echo "selected=\"selected\""; ?>><?=gettext("sloppy state");?></option>
- <option value="synproxy state"<?php if ($pconfig['statetype'] == "synproxy state") echo "selected=\"selected\""; ?>><?=gettext("synproxy state");?></option>
- <option value="none"<?php if ($pconfig['statetype'] == "none") echo "selected=\"selected\""; ?>><?=gettext("none");?></option>
- </select><br />
- <span class="vexpl">
- <?=gettext("Hint: Select which type of state tracking mechanism you would like to use. If in doubt, use keep state.");?>
- </span>
- <table width="90%">
- <tr><td width="25%"><ul><li><?=gettext("keep state");?></li></ul></td><td><?=gettext("Works with all IP protocols.");?></td></tr>
- <tr><td width="25%"><ul><li><?=gettext("sloppy state");?></li></ul></td><td><?=gettext("Works with all IP protocols.");?></td></tr>
- <tr><td width="25%"><ul><li><?=gettext("synproxy state");?></li></ul></td><td><?=gettext("Proxies incoming TCP connections to help protect servers from spoofed TCP SYN floods. This option includes the functionality of keep state and modulate state combined.");?></td></tr>
- <tr><td width="25%"><ul><li><?=gettext("none");?></li></ul></td><td><?=gettext("Do not use state mechanisms to keep track. This is only useful if you're doing advanced queueing in certain situations. Please check the documentation.");?></td></tr>
- </table>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("No XMLRPC Sync");?></td>
- <td width="78%" class="vtable">
- <div id="showadvnoxmlrpcsyncbox" <?php if ($pconfig['nosync']) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_advanced_noxmlrpc()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
- </div>
- <div id="shownoxmlrpcadv" <?php if (empty($pconfig['nosync'])) echo "style='display:none'"; ?>>
- <input type="checkbox" name="nosync"<?php if ($pconfig['nosync']) echo " checked=\"checked\""; ?> /><br />
- <?=gettext("Hint: This prevents the rule on Master from automatically syncing to other CARP members. This does NOT prevent the rule from being overwritten on Slave.");?>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("802.1p");?></td>
- <td width="78%" class="vtable">
- <div id="showadvvlanpriobox" <?php if (!empty($pconfig['vlanprio'])) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_advanced_vlanprio()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
- </div>
- <div id="showvlanprioadv" <?php if (empty($pconfig['vlanprio'])) echo "style='display:none'"; ?>>
- <?php $vlanprio = array("none", "be", "bk", "ee", "ca", "vi", "vo", "ic", "nc"); ?>
-<?php
- $opts = "";
- foreach ($vlanprio as $vprio) {
- if ($vprio == $pconfig['vlanprio']) {
- $selected = " selected=\"selected\"";
- } else {
- $selected = "";
- }
- if ($vprio == "none") {
- $opts .= "<option value=\"\">{$vprio}</option>\n";
- } else {
- $opts .= "<option value=\"{$vprio}\" {$selected}>" . strtoupper($vprio) . "</option>\n";
- }
- }
-
- $optsset = "";
- foreach ($vlanprio as $vprioset) {
- if ($vprioset == $pconfig['vlanprioset']) {
- $selected = " selected=\"selected\"";
- } else {
- $selected = "";
- }
- if ($vprioset == "none") {
- $optsset .= "<option value=\"\">{$vprioset}</option>\n";
- } else {
- $optsset .= "<option value=\"{$vprioset}\" {$selected}>" . strtoupper($vprioset) . "</option>\n";
- }
- }
-?>
- <select name='vlanprio'>
- <?php echo $opts; ?>
- </select>
- <p><?=gettext("Choose 802.1p priority to match on");?></p>
- <select name='vlanprioset'>
- <?php echo $optsset; ?>
- </select>
- <p><?=gettext("Choose 802.1p priority to apply");?></p>
- </div>
- </td>
- </tr>
- <?php
- //build list of schedules
- $schedules = array();
- $schedules[] = "none";//leave none to leave rule enabled all the time
- if (is_array($config['schedules']['schedule'])) {
- foreach ($config['schedules']['schedule'] as $schedule) {
- if ($schedule['name'] <> "") {
- $schedules[] = $schedule['name'];
- }
- }
- }
- ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Schedule");?></td>
- <td width="78%" class="vtable">
- <div id="showadvschedulebox" <?php if (!empty($pconfig['sched'])) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_advanced_schedule()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
- </div>
- <div id="showscheduleadv" <?php if (empty($pconfig['sched'])) echo "style='display:none'"; ?>>
- <select name='sched'>
-<?php
- foreach ($schedules as $schedule) {
- if ($schedule == $pconfig['sched']) {
- $selected = " selected=\"selected\"";
- } else {
- $selected = "";
- }
- if ($schedule == "none") {
- echo "<option value=\"\" {$selected}>{$schedule}</option>\n";
- } else {
- echo "<option value=\"{$schedule}\" {$selected}>{$schedule}</option>\n";
- }
- }
-?>
- </select>
- <p><?=gettext("Leave as 'none' to leave the rule enabled all the time.");?></p>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Gateway");?></td>
- <td width="78%" class="vtable">
- <div id="showadvgatewaybox" <?php if (!empty($pconfig['gateway'])) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_advanced_gateway()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
- </div>
- <div id="showgatewayadv" <?php if (empty($pconfig['gateway'])) echo "style='display:none'"; ?>>
- <select name='gateway'>
- <option value="" ><?=gettext("default");?></option>
-<?php
- /* build a list of gateways */
- $gateways = return_gateways_array();
- // add statically configured gateways to list
- foreach ($gateways as $gwname => $gw) {
- if (($pconfig['ipprotocol'] == "inet46")) {
- continue;
- }
- if (($pconfig['ipprotocol'] == "inet6") && !(($gw['ipprotocol'] == "inet6") || (is_ipaddrv6($gw['gateway'])))) {
- continue;
- }
- if (($pconfig['ipprotocol'] == "inet") && !(($gw['ipprotocol'] == "inet") || (is_ipaddrv4($gw['gateway'])))) {
- continue;
- }
- if ($gw == "") {
- continue;
- }
- if ($gwname == $pconfig['gateway']) {
- $selected = " selected=\"selected\"";
- } else {
- $selected = "";
- }
- $gateway_addr_str = empty($gw['gateway']) ? "" : " - " . $gw[gateway];
- echo "<option value=\"{$gwname}\" {$selected}>{$gw['name']}{$gateway_addr_str}</option>\n";
- }
- /* add gateway groups to the list */
- if (is_array($a_gatewaygroups)) {
- foreach ($a_gatewaygroups as $gwg_name => $gwg_data) {
- if ((empty($pconfig['ipprotocol'])) || ($pconfig['ipprotocol'] == $gwg_data['ipprotocol'])) {
- if ($pconfig['gateway'] == $gwg_name) {
- $selected = " selected=\"selected\"";
- } else {
- $selected = "";
- }
- echo "<option value=\"{$gwg_name}\" $selected>{$gwg_name}</option>\n";
- }
- }
- }
-?>
- </select>
- <p><?=gettext("Leave as 'default' to use the system routing table. Or choose a gateway to utilize policy based routing.");?></p>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("In/Out");?></td>
- <td width="78%" class="vtable">
- <div id="showadvinoutbox" <?php if (!empty($pconfig['dnpipe'])) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_advanced_inout()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
- </div>
- <div id="showinoutadv" <?php if (empty($pconfig['dnpipe'])) echo "style='display:none'"; ?>>
- <select name="dnpipe">
-<?php
- if (!is_array($dnqlist)) {
- $dnqlist = array();
- }
- echo "<option value=\"\"";
- if (!$dnqselected) {
- echo " selected=\"selected\"";
- }
- echo " >none</option>";
- foreach ($dnqlist as $dnq => $dnqkey) {
- if ($dnq == "") {
- continue;
- }
- echo "<option value=\"$dnq\"";
- if ($dnq == $pconfig['dnpipe']) {
- $dnqselected = 1;
- echo " selected=\"selected\"";
- }
- echo ">{$dnq}</option>";
- }
-?>
- </select> /
- <select name="pdnpipe">
-<?php
- $dnqselected = 0;
- echo "<option value=\"\"";
- if (!$dnqselected) {
- echo " selected=\"selected\"";
- }
- echo " >none</option>";
- foreach ($dnqlist as $dnq => $dnqkey) {
- if ($dnq == "") {
- continue;
- }
- echo "<option value=\"$dnq\"";
- if ($dnq == $pconfig['pdnpipe']) {
- $dnqselected = 1;
- echo " selected=\"selected\"";
- }
- echo ">{$dnq}</option>";
- }
-?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Choose the Out queue/Virtual interface only if you have also selected In.")."<br />".gettext("The Out selection is applied to traffic leaving the interface where the rule is created, In is applied to traffic coming into the chosen interface.")."<br />".gettext("If you are creating a floating rule, if the direction is In then the same rules apply, if the direction is out the selections are reverted Out is for incoming and In is for outgoing.");?></span>
- </div>
- </td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Ackqueue/Queue");?></td>
- <td width="78%" class="vtable">
- <div id="showadvackqueuebox" <?php if (!empty($pconfig['defaultqueue'])) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_advanced_ackqueue()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
- </div>
- <div id="showackqueueadv" <?php if (empty($pconfig['defaultqueue'])) echo "style='display:none'"; ?>>
- <select name="ackqueue">
-<?php
- if (!is_array($qlist)) {
- $qlist = array();
- }
- echo "<option value=\"\"";
- if (!$qselected) {
- echo " selected=\"selected\"";
- }
- echo " >none</option>";
- foreach ($qlist as $q => $qkey) {
- if ($q == "") {
- continue;
- }
- echo "<option value=\"$q\"";
- if ($q == $pconfig['ackqueue']) {
- $qselected = 1;
- echo " selected=\"selected\"";
- }
- if (isset($ifdisp[$q])) {
- echo ">{$ifdisp[$q]}</option>";
- } else {
- echo ">{$q}</option>";
- }
- }
-?>
- </select> /
- <select name="defaultqueue">
-<?php
- $qselected = 0;
- echo "<option value=\"\"";
- if (!$qselected) {
- echo " selected=\"selected\"";
- }
- echo " >none</option>";
- foreach ($qlist as $q => $qkey) {
- if ($q == "") {
- continue;
- }
- echo "<option value=\"$q\"";
- if ($q == $pconfig['defaultqueue']) {
- $qselected = 1;
- echo " selected=\"selected\"";
- }
- if (isset($ifdisp[$q])) {
- echo ">{$ifdisp[$q]}</option>";
- } else {
- echo ">{$q}</option>";
- }
- }
-?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Choose the Acknowledge Queue only if you have selected Queue.");?></span>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Layer7");?></td>
- <td width="78%" class="vtable">
- <div id="showadvlayer7box" <?php if (!empty($pconfig['l7container'])) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_advanced_layer7()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
- </div>
- <div id="showlayer7adv" <?php if (empty($pconfig['l7container'])) echo "style='display:none'"; ?>>
- <select name="l7container">
-<?php
- if (!is_array($l7clist)) {
- $l7clist = array();
- }
- echo "<option value=\"\"";
- echo " >none</option>";
- foreach ($l7clist as $l7ckey) {
- echo "<option value=\"{$l7ckey}\"";
- if ($l7ckey == $pconfig['l7container']) {
- echo " selected=\"selected\"";
- }
- echo ">{$l7ckey}</option>";
- }
-?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Choose a Layer7 container to apply application protocol inspection rules. " .
- "These are valid for TCP and UDP protocols only.");?>
- </span>
- </div>
- </td>
- </tr>
-<?php
- // Allow extending of the firewall edit page and include custom input validation
- pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/htmlphplate");
-?>
-<?php
-$has_created_time = (isset($a_filter[$id]['created']) && is_array($a_filter[$id]['created']));
-$has_updated_time = (isset($a_filter[$id]['updated']) && is_array($a_filter[$id]['updated']));
-?>
- <?php if ($has_created_time || $has_updated_time): ?>
- <tr>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Rule Information");?></td>
- </tr>
- <?php if ($has_created_time): ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Created");?></td>
- <td width="78%" class="vtable">
- <?= date(gettext("n/j/y H:i:s"), $a_filter[$id]['created']['time']) ?> <?= gettext("by") ?> <strong><?= $a_filter[$id]['created']['username'] ?></strong>
- </td>
- </tr>
- <?php endif; ?>
- <?php if ($has_updated_time): ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Updated");?></td>
- <td width="78%" class="vtable">
- <?= date(gettext("n/j/y H:i:s"), $a_filter[$id]['updated']['time']) ?> <?= gettext("by") ?> <strong><?= $a_filter[$id]['updated']['username'] ?></strong>
- </td>
- </tr>
- <?php endif; ?>
- <?php endif; ?>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- &nbsp;<br />&nbsp;
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
-<?php if (isset($id) && $a_filter[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <input name="tracker" type="hidden" value="<?=htmlspecialchars($pconfig['tracker']);?>">
-<?php endif; ?>
- <input name="after" type="hidden" value="<?=htmlspecialchars($after);?>" />
- </td>
- </tr>
- </table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
- ext_change();
- typesel_change();
- proto_change();
- <?php if ((!empty($pconfig['srcbeginport']) && $pconfig['srcbeginport'] != "any") || (!empty($pconfig['srcendport']) && $pconfig['srcendport'] != "any")): ?>
- show_source_port_range();
- <?php endif; ?>
-
- var addressarray = <?= json_encode(get_alias_list(array("host", "network", "openvpn", "urltable"))) ?>;
- var customarray = <?= json_encode(get_alias_list(array("port", "url_ports", "urltable_ports"))) ?>;
-
- var oTextbox1 = new AutoSuggestControl(document.getElementById("src"), new StateSuggestions(addressarray));
- var oTextbox2 = new AutoSuggestControl(document.getElementById("srcbeginport_cust"), new StateSuggestions(customarray));
- var oTextbox3 = new AutoSuggestControl(document.getElementById("srcendport_cust"), new StateSuggestions(customarray));
- var oTextbox4 = new AutoSuggestControl(document.getElementById("dst"), new StateSuggestions(addressarray));
- var oTextbox5 = new AutoSuggestControl(document.getElementById("dstbeginport_cust"), new StateSuggestions(customarray));
- var oTextbox6 = new AutoSuggestControl(document.getElementById("dstendport_cust"), new StateSuggestions(customarray));
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_schedule.php b/usr/local/www/firewall_schedule.php
deleted file mode 100644
index e6b7a21..0000000
--- a/usr/local/www/firewall_schedule.php
+++ /dev/null
@@ -1,255 +0,0 @@
-<?php
-/*
- firewall_schedule.php
- Copyright (C) 2004 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: schedules
-*/
-##|+PRIV
-##|*IDENT=page-firewall-schedules
-##|*NAME=Firewall: Schedules page
-##|*DESCR=Allow access to the 'Firewall: Schedules' page.
-##|*MATCH=firewall_schedule.php*
-##|-PRIV
-
-
-$dayArray = array (gettext('Mon'), gettext('Tues'), gettext('Wed'), gettext('Thur'), gettext('Fri'), gettext('Sat'), gettext('Sun'));
-$monthArray = array (gettext('January'), gettext('February'), gettext('March'), gettext('April'), gettext('May'), gettext('June'), gettext('July'), gettext('August'), gettext('September'), gettext('October'), gettext('November'), gettext('December'));
-
-require("guiconfig.inc");
-require_once("filter.inc");
-require("shaper.inc");
-
-$pgtitle = array(gettext("Firewall"), gettext("Schedules"));
-
-if (!is_array($config['schedules']['schedule'])) {
- $config['schedules']['schedule'] = array();
-}
-
-$a_schedules = &$config['schedules']['schedule'];
-
-
-if ($_GET['act'] == "del") {
- if ($a_schedules[$_GET['id']]) {
- /* make sure rule is not being referenced by any nat or filter rules */
- $is_schedule_referenced = false;
- $referenced_by = false;
- $schedule_name = $a_schedules[$_GET['id']]['name'];
-
- if (is_array($config['filter']['rule'])) {
- foreach ($config['filter']['rule'] as $rule) {
- //check for this later once this is established
- if ($rule['sched'] == $schedule_name) {
- $referenced_by = $rule['descr'];
- $is_schedule_referenced = true;
- break;
- }
- }
- }
-
- if ($is_schedule_referenced == true) {
- $savemsg = sprintf(gettext("Cannot delete Schedule. Currently in use by %s"), $referenced_by);
- } else {
- unset($a_schedules[$_GET['id']]);
- write_config();
- header("Location: firewall_schedule.php");
- exit;
- }
- }
-}
-
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<form action="firewall_schedule.php" method="post">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall schedule">
- <tr>
- <td width="25%" class="listhdrr"><?=gettext("Name");?></td>
- <td width="35%" class="listhdrr"><?=gettext("Time Range(s)");?></td>
- <td width="35%" class="listhdr"><?=gettext("Description");?></td>
- <td width="5%" class="list sort_ignore">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17"></td>
- <td valign="middle"><a href="firewall_schedule_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new schedule");?>" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <?php $i = 0; foreach ($a_schedules as $schedule): ?>
- <tr>
- <td class="listlr" ondblclick="document.location='firewall_schedule_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($schedule['name']);?>
- <?php
- $schedstatus = filter_get_time_based_rule_status($schedule);
- if ($schedstatus) { ?>
- &nbsp;<img src="./themes/<?= $g['theme']; ?>/images/icons/icon_frmfld_time.png" title="<?=gettext("Schedule is currently active");?>" width="17" height="17" border="0" alt="schedule" />
- <?php } ?>
- </td>
- <td class="listlr" ondblclick="document.location='firewall_schedule_edit.php?id=<?=$i;?>';">
- <table width="98%" border="0" cellpadding="0" cellspacing="0" summary="schedule">
- <?php
- foreach ($schedule['timerange'] as $timerange) {
- $tempFriendlyTime = "";
- $tempID = "";
- $firstprint = false;
- if ($timerange) {
- $dayFriendly = "";
- $tempFriendlyTime = "";
-
- //get hours
- $temptimerange = $timerange['hour'];
- $temptimeseparator = strrpos($temptimerange, "-");
-
- $starttime = substr ($temptimerange, 0, $temptimeseparator);
- $stoptime = substr ($temptimerange, $temptimeseparator+1);
-
- if ($timerange['month']) {
- $tempmontharray = explode(",", $timerange['month']);
- $tempdayarray = explode(",", $timerange['day']);
- $arraycounter = 0;
- $firstDayFound = false;
- $firstPrint = false;
- foreach ($tempmontharray as $monthtmp) {
- $month = $tempmontharray[$arraycounter];
- $day = $tempdayarray[$arraycounter];
-
- if (!$firstDayFound) {
- $firstDay = $day;
- $firstmonth = $month;
- $firstDayFound = true;
- }
-
- $currentDay = $day;
- $nextDay = $tempdayarray[$arraycounter+1];
- $currentDay++;
- if (($currentDay != $nextDay) || ($tempmontharray[$arraycounter] != $tempmontharray[$arraycounter+1])) {
- if ($firstPrint) {
- $dayFriendly .= "<br />";
- }
- $currentDay--;
- if ($currentDay != $firstDay) {
- $dayFriendly .= $monthArray[$firstmonth-1] . " " . $firstDay . " - " . $currentDay ;
- } else {
- $dayFriendly .= $monthArray[$month-1] . " " . $day;
- }
- $firstDayFound = false;
- $firstPrint = true;
- }
- $arraycounter++;
- }
- } else {
- $tempdayFriendly = $timerange['position'];
- $firstDayFound = false;
- $tempFriendlyDayArray = explode(",", $tempdayFriendly);
- $currentDay = "";
- $firstDay = "";
- $nextDay = "";
- $counter = 0;
- foreach ($tempFriendlyDayArray as $day) {
- if ($day != "") {
- if (!$firstDayFound) {
- $firstDay = $tempFriendlyDayArray[$counter];
- $firstDayFound = true;
- }
- $currentDay =$tempFriendlyDayArray[$counter];
- //get next day
- $nextDay = $tempFriendlyDayArray[$counter+1];
- $currentDay++;
- if ($currentDay != $nextDay) {
- if ($firstprint) {
- $dayFriendly .= "<br />";
- }
- $currentDay--;
- if ($currentDay != $firstDay) {
- $dayFriendly .= $dayArray[$firstDay-1] . " - " . $dayArray[$currentDay-1];
- } else {
- $dayFriendly .= $dayArray[$firstDay-1];
- }
- $firstDayFound = false;
- $firstprint = true;
- }
- $counter++;
- }
- }
- }
- $timeFriendly = $starttime . "-" . $stoptime;
- $description = $timerange['rangedescr'];
-
- ?>
- <tr>
- <td><?=$dayFriendly;?></td>
- <td><?=$timeFriendly;?></td>
- <td><?=$description;?></td>
- </tr>
- <?php
- }
- }//end for
- ?>
- </table>
- </td>
- <td class="listbg" ondblclick="document.location='firewall_schedule_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($schedule['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="buttons">
- <tr>
- <td valign="middle"><a href="firewall_schedule_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit alias");?>" alt="edit" /></a></td>
- <td><a href="firewall_schedule.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext('Do you really want to delete this schedule?');?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete alias");?>" alt="delete" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
-<?php $i++; endforeach; ?>
- <tr>
- <td class="list" colspan="3"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17"></td>
- <td valign="middle"><a href="firewall_schedule_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new schedule");?>" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td class="tabcont" colspan="3">
- <p><span class="vexpl"><span class="red"><strong><?=gettext("Note:");?><br /></strong></span><?=gettext("Schedules act as placeholders for time ranges to be used in Firewall Rules.");?></span></p>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_schedule_edit.php b/usr/local/www/firewall_schedule_edit.php
deleted file mode 100644
index e7c4bca..0000000
--- a/usr/local/www/firewall_schedule_edit.php
+++ /dev/null
@@ -1,1151 +0,0 @@
-<?php
-/*
- firewall_schedule_edit.php
- Copyright (C) 2004 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: schedules
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-schedules-edit
-##|*NAME=Firewall: Schedules: Edit page
-##|*DESCR=Allow access to the 'Firewall: Schedules: Edit' page.
-##|*MATCH=firewall_schedule_edit.php*
-##|-PRIV
-
-function schedulecmp($a, $b) {
- return strcmp($a['name'], $b['name']);
-}
-
-function schedule_sort() {
- global $g, $config;
-
- if (!is_array($config['schedules']['schedule'])) {
- return;
- }
-
- usort($config['schedules']['schedule'], "schedulecmp");
-}
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-$pgtitle = array(gettext("Firewall"), gettext("Schedules"), gettext("Edit"));
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_schedule.php');
-}
-
-$dayArray = array (gettext('Mon'), gettext('Tues'), gettext('Wed'), gettext('Thur'), gettext('Fri'), gettext('Sat'), gettext('Sun'));
-$monthArray = array (gettext('January'), gettext('February'), gettext('March'), gettext('April'), gettext('May'), gettext('June'), gettext('July'), gettext('August'), gettext('September'), gettext('October'), gettext('November'), gettext('December'));
-
-if (!is_array($config['schedules']['schedule'])) {
- $config['schedules']['schedule'] = array();
-}
-
-$a_schedules = &$config['schedules']['schedule'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_schedules[$id]) {
- $pconfig['name'] = $a_schedules[$id]['name'];
- $pconfig['descr'] = html_entity_decode($a_schedules[$id]['descr']);
- $pconfig['timerange'] = $a_schedules[$id]['timerange'];
- $pconfig['schedlabel'] = $a_schedules[$id]['schedlabel'];
- $getSchedule = true;
-}
-
-if ($_POST) {
-
- if (strtolower($_POST['name']) == "lan") {
- $input_errors[] = gettext("Schedule may not be named LAN.");
- }
- if (strtolower($_POST['name']) == "wan") {
- $input_errors[] = gettext("Schedule may not be named WAN.");
- }
- if (strtolower($_POST['name']) == "") {
- $input_errors[] = gettext("Schedule name cannot be blank.");
- }
-
- $x = is_validaliasname($_POST['name']);
- if (!isset($x)) {
- $input_errors[] = gettext("Reserved word used for schedule name.");
- } else {
- if (is_validaliasname($_POST['name']) == false) {
- $input_errors[] = gettext("The schedule name may only consist of the characters a-z, A-Z, 0-9");
- }
- }
-
- /* check for name conflicts */
- foreach ($a_schedules as $schedule) {
- if (isset($id) && ($a_schedules[$id]) && ($a_schedules[$id] === $schedule)) {
- continue;
- }
-
- if ($schedule['name'] == $_POST['name']) {
- $input_errors[] = gettext("A Schedule with this name already exists.");
- break;
- }
- }
- $schedule = array();
-
- $schedule['name'] = $_POST['name'];
- $schedule['descr'] = htmlentities($_POST['descr'], ENT_QUOTES, 'UTF-8');
-
- $timerangeFound = false;
- for ($x = 0; $x < 99; $x++) {
- if ($_POST['schedule' . $x]) {
- if (!preg_match('/^[0-9]+:[0-9]+$/', $_POST['starttime' . $x])) {
- $input_errors[] = sprintf(gettext("Invalid start time - '%s'"), $_POST['starttime' . $x]);
- continue;
- }
- if (!preg_match('/^[0-9]+:[0-9]+$/', $_POST['stoptime' . $x])) {
- $input_errors[] = sprintf(gettext("Invalid stop time - '%s'"), $_POST['stoptime' . $x]);
- continue;
- }
- $timerangeFound = true;
- $timeparts = array();
- $firstprint = false;
- $timestr = $_POST['schedule' . $x];
- $timehourstr = $_POST['starttime' . $x];
- $timehourstr .= "-";
- $timehourstr .= $_POST['stoptime' . $x];
- $timedescrstr = htmlentities($_POST['timedescr' . $x], ENT_QUOTES, 'UTF-8');
- $dashpos = strpos($timestr, '-');
- if ($dashpos === false) {
- $timeparts['position'] = $timestr;
- } else {
- $tempindarray = array();
- $monthstr = "";
- $daystr = "";
- $tempindarray = explode(",", $timestr);
- foreach ($tempindarray as $currentselection) {
- if ($currentselection) {
- if ($firstprint) {
- $monthstr .= ",";
- $daystr .= ",";
- }
- $tempstr = "";
- $monthpos = strpos($currentselection, "m");
- $daypos = strpos($currentselection, "d");
- $monthstr .= substr($currentselection, $monthpos+1, $daypos-$monthpos-1);
- $daystr .= substr($currentselection, $daypos+1);
- $firstprint = true;
- }
- }
- $timeparts['month'] = $monthstr;
- $timeparts['day'] = $daystr;
- }
- $timeparts['hour'] = $timehourstr;
- $timeparts['rangedescr'] = $timedescrstr;
- $schedule['timerange'][$x] = $timeparts;
- }
- }
-
- if (!$timerangeFound) {
- $input_errors[] = gettext("The schedule must have at least one time range configured.");
- }
-
- if (!$input_errors) {
-
- if (!empty($pconfig['schedlabel'])) {
- $schedule['schedlabel'] = $pconfig['schedlabel'];
- } else {
- $schedule['schedlabel'] = uniqid();
- }
-
- if (isset($id) && $a_schedules[$id]) {
- $a_schedules[$id] = $schedule;
- } else {
- $a_schedules[] = $schedule;
- }
- schedule_sort();
- if (write_config()) {
- filter_configure();
- }
-
- header("Location: firewall_schedule.php");
- exit;
- } else {
- //we received input errors, copy data to prevent retype
- if (!$_POST['schedule0']) {
- $getSchedule = false;
- } else {
- $getSchedule = true;
- }
- $pconfig['name'] = $schedule['name'];
- $pconfig['descr'] = $schedule['descr'];
- $pconfig['timerange'] = $schedule['timerange'];
- }
-
-}
-include("head.inc");
-
-/* put your custom HTML head content here */
-/* using some of the $pfSenseHead function calls */
-$jscriptstr = <<<EOD
-<script type="text/javascript">
-//<![CDATA[
-var daysSelected = "";
-var month_array = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
-var day_array = ['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun'];
-var schCounter = 0;
-
-function rgb2hex(rgb) {
- var parts = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
- if (parts == null) {
- return;
- }
- function hex(x) {
- return ("0" + parseInt(x).toString(16)).slice(-2);
- }
- return ("#" + hex(parts[1]) + hex(parts[2]) + hex(parts[3])).toUpperCase();
-}
-
-function repeatExistingDays() {
- var tempstr, tempstrdaypos, week, daypos, dayposdone = "";
-
- var dayarray = daysSelected.split(",");
- for (i = 0; i <= dayarray.length; i++) {
- tempstr = dayarray[i];
- tempstrdaypos = tempstr.search("p");
- week = tempstr.substring(1, tempstrdaypos);
- week = parseInt(week);
- dashpos = tempstr.search("-");
- daypos = tempstr.substring(tempstrdaypos+1, dashpos);
- daypos = parseInt(daypos);
-
- daydone = dayposdone.search(daypos);
- tempstr = 'w' + week + 'p' + daypos;
- daycell = eval('document.getElementById(tempstr)');
- if (daydone == "-1") {
- if (rgb2hex(daycell.style.backgroundColor) == "#F08080") { // lightcoral
- daytogglerepeating(week, daypos, true);
- } else {
- daytogglerepeating(week, daypos, false);
- }
- dayposdone += daypos + ",";
- }
- }
-}
-
-function daytogglerepeating(week, daypos, bExists) {
- var tempstr, daycell, dayoriginal = "";
- for (j=1; j<=53; j++) {
- tempstr = 'w' + j + 'p' + daypos;
- daycell = eval('document.getElementById(tempstr)');
- dayoriginalpos = daysSelected.indexOf(tempstr);
-
- //if bExists set to true, means cell is already select it
- //unselect it and remove original day from daysSelected string
-
- if (daycell != null) {
- if (bExists) {
- daycell.style.backgroundColor = "#FFFFFF"; // white
- } else {
- daycell.style.backgroundColor = "#F08080"; // lightcoral
- }
-
- if (dayoriginalpos != "-1") {
- dayoriginalend = daysSelected.indexOf(',', dayoriginalpos);
- tempstr = daysSelected.substring(dayoriginalpos, dayoriginalend+1);
- daysSelected = daysSelected.replace(tempstr, "");
-
- }
- }
- }
-}
-
-function daytoggle(id) {
- var runrepeat, tempstr = "";
- var bFoundValid = false;
-
- iddashpos = id.search("-");
- var tempstrdaypos = id.search("p");
- var week = id.substring(1, tempstrdaypos);
- week = parseInt(week);
-
- if (iddashpos == "-1") {
- idmod = id;
- runrepeat = true;
- var daypos = id.substr(tempstrdaypos+1);
- } else {
- idmod = id.substring(0, iddashpos);
- var daypos = id.substring(tempstrdaypos+1, iddashpos);
- }
-
- daypos = parseInt(daypos);
-
- while (!bFoundValid) {
- var daycell = document.getElementById(idmod);
-
- if (daycell != null) {
- if (rgb2hex(daycell.style.backgroundColor) == "#FF0000") { // red
- daycell.style.backgroundColor = "#FFFFFF"; // white
- str = id + ",";
- daysSelected = daysSelected.replace(str, "");
- } else if (rgb2hex(daycell.style.backgroundColor) == "#F08080") { // lightcoral
- daytogglerepeating(week, daypos, true);
- } else {
- //color is white cell
- if (!runrepeat) {
- daycell.style.backgroundColor = "#FF0000"; // red
- } else {
- daycell.style.backgroundColor = "#F08080"; // lightcoral
- daytogglerepeating(week, daypos, false);
- }
- daysSelected += id + ",";
- }
- bFoundValid = true;
- } else {
- //we found an invalid cell when column was clicked, move up to the next week
- week++;
- tempstr = "w" + week + "p" + daypos;
- idmod = tempstr;
- }
- }
-}
-
-function update_month() {
- var indexNum = document.forms[0].monthsel.selectedIndex;
- var selected = document.forms[0].monthsel.options[indexNum].text;
-
- for (i = 0; i <= 11; i++) {
- option = document.forms[0].monthsel.options[i].text;
- document.popupMonthLayer = eval('document.getElementById (option)');
-
- if (selected == option) {
- document.popupMonthLayer.style.display="block";
- } else {
- document.popupMonthLayer.style.display="none";
- }
- }
-}
-
-function checkForRanges() {
- if (daysSelected != "") {
- alert("You have not saved the specified time range. Please click 'Add Time' button to save the time range.");
- return false;
- } else {
- return true;
- }
-}
-
-function processEntries() {
- var tempstr, starttimehour, starttimemin, stoptimehour, stoptimemin, errors = "";
- var passedValidiation = true;
-
- //get time specified
- starttimehour = parseInt(document.getElementById("starttimehour").value);
- starttimemin = parseInt(document.getElementById("starttimemin").value);
- stoptimehour = parseInt(document.getElementById("stoptimehour").value);
- stoptimemin = parseInt(document.getElementById("stoptimemin").value);
-
-
- //do time checks
- if (starttimehour > stoptimehour) {
- errors = "Error: Start Hour cannot be greater than Stop Hour.";
- passedValidiation = false;
-
- } else if (starttimehour == stoptimehour) {
- if (starttimemin > stoptimemin) {
- errors = "Error: Start Minute cannot be greater than Stop Minute.";
- passedValidiation = false;
- }
- }
-
- if (passedValidiation) {
- addTimeRange();
- } else {
- if (errors != "") {
- alert(errors);
- }
- }
-}
-
-function addTimeRange() {
- var tempdayarray = daysSelected.split(",");
- var tempstr, tempFriendlyDay, starttimehour, starttimemin, stoptimehour, nrtempFriendlyTime, rtempFriendlyTime, nrtempID, rtempID = "";
- var stoptimemin, timeRange, tempstrdaypos, week, daypos, day, month, dashpos, nrtempTime, rtempTime, monthstr, daystr = "";
- rtempFriendlyTime = "";
- nrtempFriendlyTime = "";
- nrtempID = "";
- rtempID = "";
- nrtempTime = "";
- rtempTime = "";
- tempdayarray.sort();
- rtempFriendlyDay = "";
- monthstr = "";
- daystr = "";
-
- //check for existing entries
- var findCurrentCounter;
- for (u = 0; u < 99; u++) {
- findCurrentCounter = document.getElementById("schedule" + u);
- if (!findCurrentCounter) {
- schCounter = u;
- break;
- }
- }
-
- if (daysSelected != "") {
- //get days selected
- for (i = 0; i < tempdayarray.length; i++) {
- tempstr = tempdayarray[i];
- if (tempstr != "") {
- tempstrdaypos = tempstr.search("p");
- week = tempstr.substring(1, tempstrdaypos);
- week = parseInt(week);
- dashpos = tempstr.search("-");
-
- if (dashpos != "-1") {
- var nonrepeatingfound = true;
- daypos = tempstr.substring(tempstrdaypos+1, dashpos);
- daypos = parseInt(daypos);
- monthpos = tempstr.search("m");
- tempstrdaypos = tempstr.search("d");
- month = tempstr.substring(monthpos+1, tempstrdaypos);
- month = parseInt(month);
- day = tempstr.substring(tempstrdaypos+1);
- day = parseInt(day);
- monthstr += month + ",";
- daystr += day + ",";
- nrtempID += tempstr + ",";
- } else {
- var repeatingfound = true;
- daypos = tempstr.substr(tempstrdaypos+1);
- daypos = parseInt(daypos);
- rtempFriendlyDay += daypos + ",";
- rtempID += daypos + ",";
- }
- }
- }
-
- //code below spits out friendly look format for nonrepeating schedules
- var foundEnd = false;
- var firstDayFound = false;
- var firstprint = false;
- var tempFriendlyMonthArray = monthstr.split(",");
- var tempFriendlyDayArray = daystr.split(",");
- var currentDay, firstDay, nextDay, currentMonth, nextMonth, firstDay, firstMonth = "";
- for (k = 0; k < tempFriendlyMonthArray.length; k++) {
- tempstr = tempFriendlyMonthArray[k];
- if (tempstr != "") {
- if (!firstDayFound) {
- firstDay = tempFriendlyDayArray[k];
- firstDay = parseInt(firstDay);
- firstMonth = tempFriendlyMonthArray[k];
- firstMonth = parseInt(firstMonth);
- firstDayFound = true;
- }
- currentDay = tempFriendlyDayArray[k];
- currentDay = parseInt(currentDay);
- //get next day
- nextDay = tempFriendlyDayArray[k+1];
- nextDay = parseInt(nextDay);
- //get next month
-
- currentDay++;
- if ((currentDay != nextDay) || (tempFriendlyMonthArray[k] != tempFriendlyMonthArray[k+1])) {
- if (firstprint) {
- nrtempFriendlyTime += ", ";
- }
- currentDay--;
- if (currentDay != firstDay) {
- nrtempFriendlyTime += month_array[firstMonth-1] + " " + firstDay + "-" + currentDay;
- } else {
- nrtempFriendlyTime += month_array[firstMonth-1] + " " + currentDay;
- }
- firstDayFound = false;
- firstprint = true;
- }
- }
- }
-
- //code below spits out friendly look format for repeating schedules
- foundEnd = false;
- firstDayFound = false;
- firstprint = false;
- tempFriendlyDayArray = rtempFriendlyDay.split(",");
- tempFriendlyDayArray.sort();
- currentDay, firstDay, nextDay = "";
- for (k = 0; k < tempFriendlyDayArray.length; k++) {
- tempstr = tempFriendlyDayArray[k];
- if (tempstr != "") {
- if (!firstDayFound) {
- firstDay = tempFriendlyDayArray[k];
- firstDay = parseInt(firstDay);
- firstDayFound = true;
- }
- currentDay = tempFriendlyDayArray[k];
- currentDay = parseInt(currentDay);
- //get next day
- nextDay = tempFriendlyDayArray[k+1];
- nextDay = parseInt(nextDay);
- currentDay++;
- if (currentDay != nextDay) {
- if (firstprint) {
- rtempFriendlyTime += ", ";
- }
- currentDay--;
- if (currentDay != firstDay) {
- rtempFriendlyTime += day_array[firstDay-1] + " - " + day_array[currentDay-1];
- } else {
- rtempFriendlyTime += day_array[firstDay-1];
- }
- firstDayFound = false;
- firstprint = true;
- }
- }
- }
-
- //sort the tempID
- var tempsortArray = rtempID.split(",");
- var isFirstdone = false;
- tempsortArray.sort();
- //clear tempID
- rtempID = "";
- for (t = 0; t < tempsortArray.length; t++) {
- if (tempsortArray[t] != "") {
- if (!isFirstdone) {
- rtempID += tempsortArray[t];
- isFirstdone = true;
- } else {
- rtempID += "," + tempsortArray[t];
- }
- }
- }
-
-
- //get time specified
- starttimehour = document.getElementById("starttimehour").value
- starttimemin = document.getElementById("starttimemin").value;
- stoptimehour = document.getElementById("stoptimehour").value;
- stoptimemin = document.getElementById("stoptimemin").value;
-
- timeRange = "||" + starttimehour + ":";
- timeRange += starttimemin + "-";
- timeRange += stoptimehour + ":";
- timeRange += stoptimemin;
-
- //get description for time range
- var tempdescr = document.getElementById("timerangedescr").value
-
- if (nonrepeatingfound) {
- nrtempTime += nrtempID;
- //add time ranges
- nrtempTime += timeRange;
- //add description
- nrtempTime += "||" + tempdescr;
- insertElements(nrtempFriendlyTime, starttimehour, starttimemin, stoptimehour, stoptimemin, tempdescr, nrtempTime, nrtempID);
- }
-
- if (repeatingfound) {
- rtempTime += rtempID;
- //add time ranges
- rtempTime += timeRange;
- //add description
- rtempTime += "||" + tempdescr;
- insertElements(rtempFriendlyTime, starttimehour, starttimemin, stoptimehour, stoptimemin, tempdescr, rtempTime, rtempID);
- }
-
- } else {
- //no days were selected, alert user
- alert ("You must select at least 1 day before adding time");
- }
-}
-
-function insertElements(tempFriendlyTime, starttimehour, starttimemin, stoptimehour, stoptimemin, tempdescr, tempTime, tempID) {
-
- //add it to the schedule list
- d = document;
- tbody = d.getElementById("scheduletable").getElementsByTagName("tbody").item(0);
- tr = d.createElement("tr");
- td = d.createElement("td");
- td.innerHTML= "<span class='vexpl'>" + tempFriendlyTime + "<\/span>";
- tr.appendChild(td);
-
- td = d.createElement("td");
- td.innerHTML="<input type='text' readonly class='vexpl' name='starttime" + schCounter + "' id='starttime" + schCounter + "' style=' word-wrap:break-word; width:100%; border:0px solid;' value='" + starttimehour + ":" + starttimemin + "' />";
- tr.appendChild(td);
-
- td = d.createElement("td");
- td.innerHTML="<input type='text' readonly class='vexpl' name='stoptime" + schCounter + "' id='stoptime" + schCounter + "' style=' word-wrap:break-word; width:100%; border:0px solid;' value='" + stoptimehour + ":" + stoptimemin + "' />";
- tr.appendChild(td);
-
- td = d.createElement("td");
- td.innerHTML="<input type='text' readonly class='vexpl' name='timedescr" + schCounter + "' id='timedescr" + schCounter + "' style=' word-wrap:break-word; width:100%; border:0px solid;' value='" + tempdescr + "' />";
- tr.appendChild(td);
-
- td = d.createElement("td");
- td.innerHTML = "<a onclick='editRow(\"" + tempTime + "\",this); return false;' href='#'><img border='0' src='/themes/" + theme + "/images/icons/icon_e.gif' alt='edit' /></\a>";
- tr.appendChild(td);
-
- td = d.createElement("td");
- td.innerHTML = "<a onclick='removeRow(this); return false;' href='#'><img border='0' src='/themes/" + theme + "/images/icons/icon_x.gif' alt='remove' /></\a>";
- tr.appendChild(td);
-
- td = d.createElement("td");
- td.innerHTML="<input type='hidden' id='schedule" + schCounter + "' name='schedule" + schCounter + "' value='" + tempID + "' />";
- tr.appendChild(td);
- tbody.appendChild(tr);
-
- schCounter++;
-
- //reset calendar and time and descr
- clearCalendar();
- clearTime();
- clearDescr();
-}
-
-
-function clearCalendar() {
- var tempstr, daycell = "";
- //clear days selected
- daysSelected = "";
- //loop through all 52 weeks
- for (j=1; j<=53; j++) {
- //loop through all 7 days
- for (k=1; k<8; k++) {
- tempstr = 'w' + j + 'p' + k;
- daycell = eval('document.getElementById(tempstr)');
- if (daycell != null) {
- daycell.style.backgroundColor = "#FFFFFF"; // white
- }
- }
- }
-}
-
-function clearTime() {
- document.getElementById("starttimehour").value = "0";
- document.getElementById("starttimemin").value = "00";
- document.getElementById("stoptimehour").value = "23";
- document.getElementById("stoptimemin").value = "59";
-}
-
-function clearDescr() {
- document.getElementById("timerangedescr").value = "";
-}
-
-function editRow(incTime, el) {
- var check = checkForRanges();
-
- if (check) {
-
- //reset calendar and time
- clearCalendar();
- clearTime();
-
- var starttimehour, descr, days, tempstr, starttimemin, hours, stoptimehour, stoptimemin = "";
-
- tempArray = incTime.split ("||");
-
- days = tempArray[0];
- hours = tempArray[1];
- descr = tempArray[2];
-
- var tempdayArray = days.split(",");
- var temphourArray = hours.split("-");
- tempstr = temphourArray[0];
- var temphourArray2 = tempstr.split(":");
-
- document.getElementById("starttimehour").value = temphourArray2[0];
- document.getElementById("starttimemin").value = temphourArray2[1];
-
- tempstr = temphourArray[1];
- temphourArray2 = tempstr.split(":");
-
- document.getElementById("stoptimehour").value = temphourArray2[0];
- document.getElementById("stoptimemin").value = temphourArray2[1];
-
- document.getElementById("timerangedescr").value = descr;
-
- //toggle the appropriate days
- for (i = 0; i < tempdayArray.length; i++) {
- if (tempdayArray[i]) {
- var tempweekstr = tempdayArray[i];
- dashpos = tempweekstr.search("-");
-
- if (dashpos == "-1") {
- tempstr = "w2p" + tempdayArray[i];
- } else {
- tempstr = tempdayArray[i];
- }
- daytoggle(tempstr);
- }
- }
- removeRownoprompt(el);
- }
-}
-
-function removeRownoprompt(el) {
- var cel;
- while (el && el.nodeName.toLowerCase() != "tr") {
- el = el.parentNode;
- }
-
- if (el && el.parentNode) {
- cel = el.getElementsByTagName("td").item(0);
- el.parentNode.removeChild(el);
- }
-}
-
-
-function removeRow(el) {
- var check = confirm ("Do you really want to delete this time range?");
- if (check) {
- var cel;
- while (el && el.nodeName.toLowerCase() != "tr") {
- el = el.parentNode;
- }
-
- if (el && el.parentNode) {
- cel = el.getElementsByTagName("td").item(0);
- el.parentNode.removeChild(el);
- }
- }
-}
-//]]>
-</script>
-EOD;
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-
-
-<?php include("fbegin.inc"); echo $jscriptstr; ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<div id="inputerrors"></div>
-
-<form action="firewall_schedule_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall schedule">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Schedule information");?></td>
- </tr>
- <tr>
- <td>
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="15%" valign="top" class="vncellreq"><?=gettext("Schedule Name");?></td>
- <td width="85%" class="vtable">
- <?php if (is_schedule_inuse($pconfig['name']) == true): ?>
- <input name="name" type="hidden" id="name" size="40" value="<?=htmlspecialchars($pconfig['name']);?>" />
- <?php echo $pconfig['name']; ?>
- <p>
- <span class="vexpl"><?=gettext("NOTE: This schedule is in use so the name may not be modified!");?></span>
- </p>
- <?php else: ?>
- <input name="name" type="text" id="name" size="40" maxlength="40" class="formfld unknown" value="<?=htmlspecialchars($pconfig['name']);?>" /><br />
- <span class="vexpl">
- <?=gettext("The name of the alias may only consist of the characters a-z, A-Z and 0-9");?>
- </span>
- <?php endif; ?>
- </td>
- </tr>
- <tr>
- <td width="15%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="85%" class="vtable"><input name="descr" type="text" id="descr" size="40" maxlength="40" class="formfld unknown" value="<?=htmlspecialchars($pconfig['descr']);?>" /><br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed).");?>
- </span>
- </td>
- </tr>
- <!-- tr>
- </tr -->
- <tr>
- <td width="15%" valign="top" class="vncellreq"><?=gettext("Month");?></td>
- <td width="85%" class="vtable">
- <select name="monthsel" class="formselect" id="monthsel" onchange="update_month();">
- <?php
- $monthcounter = date("n");
- $monthlimit = $monthcounter + 12;
- $yearcounter = date("Y");
- for ($k = 0; $k < 12; $k++) {?>
- <option value="<?php echo $monthcounter;?>"><?php echo date("F_y", mktime(0, 0, 0, date($monthcounter), 1, date($yearcounter)));?></option>
- <?php
- if ($monthcounter == 12) {
- $monthcounter = 1;
- $yearcounter++;
- } else {
- $monthcounter++;
- }
- } ?>
- </select>
- <br /><br />
- <?php
- $firstmonth = TRUE;
- $monthcounter = date("n");
- $yearcounter = date("Y");
- for ($k = 0; $k < 12; $k++) {
- $firstdayofmonth = date("w", mktime(0, 0, 0, date($monthcounter), 1, date($yearcounter)));
- if ($firstdayofmonth == 0) {
- $firstdayofmonth = 7;
- }
-
- $daycounter = 1;
- //number of day in month
- $numberofdays = date("t", mktime(0, 0, 0, date($monthcounter), 1, date($yearcounter)));
- $firstdayprinted = FALSE;
- $lasttr = FALSE;
- $positioncounter = 1;//7 for Sun, 1 for Mon, 2 for Tues, etc
- ?>
- <div id="<?php echo date("F_y", mktime(0, 0, 0, date($monthcounter), 1, date($yearcounter)));?>" style=" position:relative; display:<?php if ($firstmonth)echo "block";else echo "none";?>">
- <table border="1" cellspacing="1" cellpadding="1" id="calTable<?=$monthcounter . $yearcounter;?>" class="tabcont" summary="month">
- <tr>
- <td colspan="7" align="center" class="listbg"><b><?php echo date("F_Y", mktime(0, 0, 0, date($monthcounter), 1, date($yearcounter)));?></b></td>
- </tr>
- <tr>
- <td align="center" class="listhdrr" style="cursor: pointer;" onclick="daytoggle('w1p1');"><u><b><?=gettext("Mon");?></b></u></td>
- <td align="center" class="listhdrr" style="cursor: pointer;" onclick="daytoggle('w1p2');"><u><b><?=gettext("Tue");?></b></u></td>
- <td align="center" class="listhdrr" style="cursor: pointer;" onclick="daytoggle('w1p3');"><u><b><?=gettext("Wed");?></b></u></td>
- <td align="center" class="listhdrr" style="cursor: pointer;" onclick="daytoggle('w1p4');"><u><b><?=gettext("Thu");?></b></u></td>
- <td align="center" class="listhdrr" style="cursor: pointer;" onclick="daytoggle('w1p5');"><u><b><?=gettext("Fri");?></b></u></td>
- <td align="center" class="listhdrr" style="cursor: pointer;" onclick="daytoggle('w1p6');"><u><b><?=gettext("Sat");?></b></u></td>
- <td align="center" class="listhdrr" style="cursor: pointer;" onclick="daytoggle('w1p7');"><u><b><?=gettext("Sun");?></b></u></td>
- </tr>
- <?php
- $firstmonth = FALSE;
- while ($daycounter<=$numberofdays) {
- $weekcounter = date("W", mktime(0, 0, 0, date($monthcounter), date($daycounter), date($yearcounter)));
- $weekcounter = ltrim($weekcounter, "0");
- if ($positioncounter == 1) {
- echo "<tr>";
- }
- if ($firstdayofmonth == $positioncounter) {
- ?>
- <td align="center" style="cursor: pointer;" class="listr" id="w<?=$weekcounter;?>p<?=$positioncounter;?>" onclick="daytoggle('w<?=$weekcounter;?>p<?=$positioncounter;?>-m<?=$monthcounter;?>d<?=$daycounter;?>');">
- <?php
- echo $daycounter;
- $daycounter++;
- $firstdayprinted = TRUE;
- echo "</td>";
- } elseif ($firstdayprinted == TRUE && $daycounter <= $numberofdays) {
- ?>
- <td align="center" style="cursor: pointer;" class="listr" id="w<?=$weekcounter;?>p<?=$positioncounter;?>" onclick="daytoggle('w<?=$weekcounter;?>p<?=$positioncounter;?>-m<?=$monthcounter;?>d<?=$daycounter;?>');">
- <?php
- echo $daycounter;
- $daycounter++;
- echo "</td>";
- } else {
- echo "<td align=\"center\" class=\"listr\"></td>";
- }
-
- if ($positioncounter == 7 || $daycounter > $numberofdays) {
- $positioncounter = 1;
- echo "</tr>";
- } else {
- $positioncounter++;
- }
-
- } //end while loop
- ?>
- </table>
- </div>
- <?php
- if ($monthcounter == 12) {
- $monthcounter = 1;
- $yearcounter++;
- } else {
- $monthcounter++;
- }
- } //end for loop
- ?>
- <br />
- <?=gettext("Click individual date to select that date only. Click the appropriate weekday Header to select all occurrences of that weekday.");?>
- </td>
- </tr>
- <tr>
- <td width="15%" valign="top" class="vncellreq"><?=gettext("Time");?></td>
- <td width="85%" class="vtable">
- <table cellspacing="2" class="tabcont" summary="time">
- <tr>
- <td class="listhdrr" align="center"><?=gettext("Start Time");?></td><td></td><td class="listhdrr" align="center"><?=gettext("Stop Time");?></td>
- </tr>
- <tr>
- <td>
- <select name="starttimehour" class="formselect" id="starttimehour">
- <?php
- for ($i = 0; $i < 24; $i++) {
- echo "<option value=\"$i\">";
- echo $i;
- echo "</option>";
- }
- ?>
- </select>&nbsp;<?=gettext("Hr"); ?>&nbsp;&nbsp;
- <select name="starttimemin" class="formselect" id="starttimemin">
- <option value="00">00</option>
- <option value="15">15</option>
- <option value="30">30</option>
- <option value="45">45</option>
- <option value="59">59</option>
- </select>&nbsp;<?=gettext("Min"); ?>
- </td>
- <td></td>
- <td>
- <select name="stoptimehour" class="formselect" id="stoptimehour">
- <?php
- for ($i = 0; $i < 24; $i++) {
- if ($i == 23) {
- $selected = "selected=\"selected\"";
- } else {
- $selected = "";
- }
-
- echo "<option value=\"$i\" $selected>";
- echo $i;
- echo "</option>";
- }
- ?>
- </select>&nbsp;<?=gettext("Hr");?>&nbsp;&nbsp;
- <select name="stoptimemin" class="formselect" id="stoptimemin">
- <option value="00">00</option>
- <option value="15">15</option>
- <option value="30">30</option>
- <option value="45">45</option>
- <option value="59" selected="selected">59</option>
- </select>&nbsp;<?=gettext("Min");?>
- </td>
- </tr>
- </table>
- <br />
- <?=gettext("Select the time range for the day(s) selected on the Month(s) above. A full day is 0:00-23:59.")?>
- </td>
- </tr>
- <tr>
- <td width="15%" valign="top" class="vncell"><?=gettext("Time Range Description")?></td>
- <td width="85%" class="vtable"><input name="timerangedescr" type="text" class="formfld unknown" id="timerangedescr" size="40" maxlength="40" /><br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed).")?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input type="button" value="<?=gettext("Add Time");?>" class="formbtn" onclick="javascript:processEntries();" />&nbsp;&nbsp;&nbsp;
- <input type="button" value="<?=gettext("Clear Selection");?>" class="formbtn" onclick="javascript:clearCalendar(); clearTime(); clearDescr();" />
- </td>
- </tr>
- <tr>
- <td width="15%" valign="top" class="vtable"></td>
- <td width="85%" class="vtable"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Schedule repeat");?></td>
- </tr>
- <tr>
- <td width="15%" valign="top" class="vncellreq"><?=gettext("Configured Ranges");?></td>
- <td width="85%">
- <table id="scheduletable" summary="range">
- <tbody>
- <tr>
- <td align="center" class="listbg" width="35%"><?=gettext("Day(s)");?></td>
- <td align="center" class="listbg" width="12%"><?=gettext("Start Time");?></td>
- <td align="center" class="listbg" width="11%"><?=gettext("Stop Time");?></td>
- <td align="center" class="listbg" width="42%"><?=gettext("Description");?></td>
- </tr>
- <?php
- if ($getSchedule) {
- $counter = 0;
-
- foreach ($pconfig['timerange'] as $timerange) {
- $tempFriendlyTime = "";
- $tempID = "";
- if ($timerange) {
- $dayFriendly = "";
- $tempFriendlyTime = "";
- $timedescr = $timerange['rangedescr'];
-
- //get hours
- $temptimerange = $timerange['hour'];
- $temptimeseparator = strrpos($temptimerange, "-");
-
- $starttime = substr ($temptimerange, 0, $temptimeseparator);
- $stoptime = substr ($temptimerange, $temptimeseparator+1);
- $currentDay = "";
- $firstDay = "";
- $nextDay = "";
- $foundEnd = false;
- $firstDayFound = false;
- $firstPrint = false;
- $firstprint2 = false;
-
- if ($timerange['month']) {
- $tempmontharray = explode(",", $timerange['month']);
- $tempdayarray = explode(",", $timerange['day']);
- $arraycounter = 0;
- foreach ($tempmontharray as $monthtmp) {
- $month = $tempmontharray[$arraycounter];
- $day = $tempdayarray[$arraycounter];
- $daypos = date("w", mktime(0, 0, 0, date($month), date($day), date("Y")));
- //if sunday, set position to 7 to get correct week number. This is due to php limitations on ISO-8601. When we move to php5.1 we can change this.
- if ($daypos == 0) {
- $daypos = 7;
- }
- $weeknumber = date("W", mktime(0, 0, 0, date($month), date($day), date("Y")));
- $weeknumber = ltrim($weeknumber, "0");
-
- if ($firstPrint) {
- $tempID .= ",";
- }
- $tempID .= "w" . $weeknumber . "p" . $daypos . "-m" . $month . "d" . $day;
- $firstPrint = true;
-
- if (!$firstDayFound) {
- $firstDay = $day;
- $firstmonth = $month;
- $firstDayFound = true;
- }
-
- $currentDay = $day;
- $nextDay = $tempdayarray[$arraycounter+1];
- $currentDay++;
- if (($currentDay != $nextDay) || ($tempmontharray[$arraycounter] != $tempmontharray[$arraycounter+1])) {
- if ($firstprint2) {
- $tempFriendlyTime .= ", ";
- }
- $currentDay--;
- if ($currentDay != $firstDay) {
- $tempFriendlyTime .= $monthArray[$firstmonth-1] . " " . $firstDay . " - " . $currentDay ;
- } else {
- $tempFriendlyTime .= $monthArray[$month-1] . " " . $day;
- }
- $firstDayFound = false;
- $firstprint2 = true;
- }
- $arraycounter++;
- }
- } else {
- $dayFriendly = $timerange['position'];
- $tempID = $dayFriendly;
- }
-
- $tempTime = $tempID . "||" . $starttime . "-" . $stoptime . "||" . $timedescr;
-
- //following code makes the days friendly appearing, IE instead of Mon, Tues, Wed it will show Mon - Wed
- $foundEnd = false;
- $firstDayFound = false;
- $firstprint = false;
- $tempFriendlyDayArray = explode(",", $dayFriendly);
- $currentDay = "";
- $firstDay = "";
- $nextDay = "";
- $i = 0;
- if (!$timerange['month']) {
- foreach ($tempFriendlyDayArray as $day) {
- if ($day != "") {
- if (!$firstDayFound) {
- $firstDay = $tempFriendlyDayArray[$i];
- $firstDayFound = true;
- }
- $currentDay =$tempFriendlyDayArray[$i];
- //get next day
- $nextDay = $tempFriendlyDayArray[$i+1];
- $currentDay++;
- if ($currentDay != $nextDay) {
- if ($firstprint) {
- $tempFriendlyTime .= ", ";
- }
- $currentDay--;
- if ($currentDay != $firstDay) {
- $tempFriendlyTime .= $dayArray[$firstDay-1] . " - " . $dayArray[$currentDay-1];
- } else {
- $tempFriendlyTime .= $dayArray[$firstDay-1];
- }
- $firstDayFound = false;
- $firstprint = true;
- }
- $i++;
- }
- }
- }
- ?>
- <tr>
- <td>
- <span class="vexpl"><?php echo $tempFriendlyTime; ?></span>
- </td>
- <td>
- <input type='text' readonly='readonly' class='vexpl' name='starttime<?php echo $counter; ?>' id='starttime<?php echo $counter; ?>' style=' word-wrap:break-word; width:100%; border:0px solid;' value='<?php echo $starttime; ?>' />
- </td>
- <td>
- <input type='text' readonly='readonly' class='vexpl' name='stoptime<?php echo $counter; ?>' id='stoptime<?php echo $counter; ?>' style=' word-wrap:break-word; width:100%; border:0px solid;' value='<?php echo $stoptime; ?>' />
- </td>
- <td>
- <input type='text' readonly='readonly' class='vexpl' name='timedescr<?php echo $counter; ?>' id='timedescr<?php echo $counter; ?>' style=' word-wrap:break-word; width:100%; border:0px solid;' value='<?php echo $timedescr; ?>' />
- </td>
- <td>
- <a onclick='editRow("<?php echo $tempTime; ?>",this); return false;' href='#'><img border='0' src='/themes/<?php echo $g['theme']; ?>/images/icons/icon_e.gif' alt='edit' /></a>
- </td>
- <td>
- <a onclick='removeRow(this); return false;' href='#'><img border='0' src='/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif' alt='remove' /></a>
- </td>
- <td>
- <input type='hidden' id='schedule<?php echo $counter; ?>' name='schedule<?php echo $counter; ?>' value='<?php echo $tempID; ?>' />
- </td>
- </tr>
- <?php
- $counter++;
- }//end if
- } // end foreach
- }//end if
- ?>
- </tbody>
- </table>
- </td>
- </tr>
- <tr>
- <td width="15%" valign="top">&nbsp;</td>
- <td width="85%">
- <input id="submit" name="submit" type="submit" onclick="return checkForRanges();" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_schedules[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_shaper.php b/usr/local/www/firewall_shaper.php
deleted file mode 100644
index 7b8f489..0000000
--- a/usr/local/www/firewall_shaper.php
+++ /dev/null
@@ -1,486 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_shaper.php
- Copyright (C) 2004, 2005 Scott Ullrich
- Copyright (C) 2008 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/killall
- pfSense_MODULE: shaper
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-trafficshaper
-##|*NAME=Firewall: Traffic Shaper page
-##|*DESCR=Allow access to the 'Firewall: Traffic Shaper' page.
-##|*MATCH=firewall_shaper.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("rrd.inc");
-
-if ($_GET['reset'] <> "") {
- /* XXX: Huh, why are we killing php? */
- mwexec("killall -9 pfctl php");
- exit;
-}
-
-$pgtitle = array(gettext("Firewall"), gettext("Traffic Shaper"));
-$shortcut_section = "trafficshaper";
-
-$shaperIFlist = get_configured_interface_with_descr();
-read_altq_config();
-/*
- * The whole logic in these code maybe can be specified.
- * If you find a better way contact me :).
- */
-
-if ($_GET) {
- if ($_GET['queue']) {
- $qname = htmlspecialchars(trim($_GET['queue']));
- }
- if ($_GET['interface']) {
- $interface = htmlspecialchars(trim($_GET['interface']));
- }
- if ($_GET['action']) {
- $action = htmlspecialchars($_GET['action']);
- }
-}
-if ($_POST) {
- if ($_POST['name']) {
- $qname = htmlspecialchars(trim($_POST['name']));
- }
- if ($_POST['interface']) {
- $interface = htmlspecialchars(trim($_POST['interface']));
- }
- if ($_POST['parentqueue']) {
- $parentqueue = htmlspecialchars(trim($_POST['parentqueue']));
- }
-}
-
-if ($interface) {
- $altq = $altq_list_queues[$interface];
- if ($altq) {
- $queue =& $altq->find_queue($interface, $qname);
- } else {
- $addnewaltq = true;
- }
-}
-
-$dontshow = false;
-$newqueue = false;
-$output_form = "";
-
-if ($_GET) {
- switch ($action) {
- case "delete":
- if ($queue) {
- $queue->delete_queue();
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
- }
- header("Location: firewall_shaper.php");
- exit;
- break;
- case "resetall":
- foreach ($altq_list_queues as $altq) {
- $altq->delete_all();
- }
- unset($altq_list_queues);
- $altq_list_queues = array();
- $tree = "<ul class=\"tree\" >";
- $tree .= get_interface_list_to_show();
- $tree .= "</ul>";
- unset($config['shaper']['queue']);
- unset($queue);
- unset($altq);
- $can_add = false;
- $can_enable = false;
- $dontshow = true;
- foreach ($config['filter']['rule'] as $key => $rule) {
- if (isset($rule['wizard']) && $rule['wizard'] == "yes") {
- unset($config['filter']['rule'][$key]);
- }
- }
- if (write_config()) {
- $retval = 0;
- $retval |= filter_configure();
- $savemsg = get_std_save_message($retval);
-
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message($retval);
- } else {
- $savemsg = $retval;
- }
- } else {
- $savemsg = gettext("Unable to write config.xml (Access Denied?)");
- }
- $output_form = $default_shaper_message;
-
- break;
- case "add":
- /* XXX: Find better way because we shouldn't know about this */
- if ($altq) {
- switch ($altq->GetScheduler()) {
- case "PRIQ":
- $q = new priq_queue();
- break;
- case "FAIRQ":
- $q = new fairq_queue();
- break;
- case "HFSC":
- $q = new hfsc_queue();
- break;
- case "CBQ":
- $q = new cbq_queue();
- break;
- default:
- /* XXX: Happens when sched == NONE?! */
- $q = new altq_root_queue();
- break;
- }
- } else if ($addnewaltq) {
- $q = new altq_root_queue();
- } else {
- $input_errors[] = gettext("Could not create new queue/discipline!");
- }
-
- if ($q) {
- $q->SetInterface($interface);
- $output_form .= $q->build_form();
- $output_form .= "<input type=\"hidden\" name=\"parentqueue\" id=\"parentqueue\"";
- $output_form .= " value=\"".htmlspecialchars($qname)."\" />";
- $newjavascript = $q->build_javascript();
- unset($q);
- $newqueue = true;
- }
- break;
- case "show":
- if ($queue) {
- $output_form .= $queue->build_form();
- } else {
- $input_errors[] = gettext("Queue not found!");
- }
- break;
- case "enable":
- if ($queue) {
- $queue->SetEnabled("on");
- $output_form .= $queue->build_form();
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
- } else {
- $input_errors[] = gettext("Queue not found!");
- }
- break;
- case "disable":
- if ($queue) {
- $queue->SetEnabled("");
- $output_form .= $queue->build_form();
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
- } else {
- $input_errors[] = gettext("Queue not found!");
- }
- break;
- default:
- $output_form .= $default_shaper_msg;
- $dontshow = true;
- break;
- }
-} else if ($_POST) {
- unset($input_errors);
-
- if ($addnewaltq) {
- $altq =& new altq_root_queue();
- $altq->SetInterface($interface);
-
- switch ($altq->GetBwscale()) {
- case "Mb":
- $factor = 1000 * 1000;
- brak;
- case "Kb":
- $factor = 1000;
- break;
- case "b":
- $factor = 1;
- break;
- case "Gb":
- $factor = 1000 * 1000 * 1000;
- break;
- case "%": /* We don't use it for root_XXX queues. */
- default: /* XXX assume Kb by default. */
- $factor = 1000;
- break;
- }
- $altq->SetAvailableBandwidth($altq->GetBandwidth() * $factor);
- $altq->ReadConfig($_POST);
- $altq->validate_input($_POST, $input_errors);
- if (!$input_errors) {
- unset($tmppath);
- $tmppath[] = $altq->GetInterface();
- $altq->SetLink($tmppath);
- $altq->wconfig();
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
- $can_enable = true;
- $can_add = true;
- }
- read_altq_config();
- $output_form .= $altq->build_form();
-
- } else if ($parentqueue) { /* Add a new queue */
- $qtmp =& $altq->find_queue($interface, $parentqueue);
- if ($qtmp) {
- $tmppath =& $qtmp->GetLink();
- array_push($tmppath, $qname);
- $tmp =& $qtmp->add_queue($interface, $_POST, $tmppath, $input_errors);
- if (!$input_errors) {
- array_pop($tmppath);
- $tmp->wconfig();
- $can_enable = true;
- if ($tmp->CanHaveChildren() && $can_enable) {
- if ($tmp->GetDefault() <> "") {
- $can_add = false;
- } else {
- $can_add = true;
- }
- } else {
- $can_add = false;
- }
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
- $can_enable = true;
- if ($altq->GetScheduler() != "PRIQ") { /* XXX */
- if ($tmp->GetDefault() <> "") {
- $can_add = false;
- } else {
- $can_add = true;
- }
- }
- }
- read_altq_config();
- $output_form .= $tmp->build_form();
- } else {
- $input_errors[] = gettext("Could not add new queue.");
- }
- } else if ($_POST['apply']) {
- write_config();
-
- $retval = 0;
- $retval = filter_configure();
- $savemsg = get_std_save_message($retval);
-
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message($retval);
- } else {
- $savemsg = $retval;
- }
-
- /* reset rrd queues */
- system("rm -f /var/db/rrd/*queuedrops.rrd");
- system("rm -f /var/db/rrd/*queues.rrd");
- enable_rrd_graphing();
-
- clear_subsystem_dirty('shaper');
-
- if ($queue) {
- $output_form .= $queue->build_form();
- $dontshow = false;
- } else {
- $output_form .= $default_shaper_message;
- $dontshow = true;
- }
- } else if ($queue) {
- $queue->validate_input($_POST, $input_errors);
- if (!$input_errors) {
- $queue->update_altq_queue_data($_POST);
- $queue->wconfig();
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
- $dontshow = false;
- }
- read_altq_config();
- $output_form .= $queue->build_form();
- } else {
- $output_form .= $default_shaper_msg;
- $dontshow = true;
- }
- mwexec("killall qstats");
-} else {
- $output_form .= $default_shaper_msg;
- $dontshow = true;
-}
-
-if ($queue) {
- if ($queue->GetEnabled()) {
- $can_enable = true;
- } else {
- $can_enable = false;
- }
- if ($queue->CanHaveChildren() && $can_enable) {
- if ($altq->GetQname() <> $queue->GetQname() && $queue->GetDefault() <> "") {
- $can_add = false;
- } else {
- $can_add = true;
- }
- } else {
- $can_add = false;
- }
-}
-
-$tree = "<ul class=\"tree\" >";
-if (is_array($altq_list_queues)) {
- foreach ($altq_list_queues as $tmpaltq) {
- $tree .= $tmpaltq->build_tree();
- }
- $tree .= get_interface_list_to_show();
-}
-$tree .= "</ul>";
-
-if (!$dontshow || $newqueue) {
-
- $output_form .= "<tr><td width=\"22%\" valign=\"middle\" class=\"vncellreq\">";
- $output_form .= "<br />" . gettext("Queue Actions") . "<br />";
- $output_form .= "</td><td valign=\"middle\" class=\"vncellreq\" width=\"78%\"><br />";
-
- $output_form .= "<input type=\"submit\" name=\"Submit\" value=\"" . gettext("Save") . "\" class=\"formbtn\" />";
- if ($can_add || $addnewaltq) {
- $output_form .= "<a href=\"firewall_shaper.php?interface=";
- $output_form .= $interface;
- if ($queue) {
- $output_form .= "&amp;queue=" . $queue->GetQname();
- }
- $output_form .= "&amp;action=add\">";
- $output_form .= "<input type=\"button\" class=\"formbtn\" name=\"add\" value=\"" . gettext("Add new queue") . "\" />";
- $output_form .= "</a>";
- }
- $output_form .= "<a href=\"firewall_shaper.php?interface=";
- $output_form .= $interface . "&amp;queue=";
- if ($queue) {
- $output_form .= "&amp;queue=" . $queue->GetQname();
- }
- $output_form .= "&amp;action=delete\">";
- $output_form .= "<input type=\"button\" class=\"formbtn\" name=\"delete\"";
- if ($queue) {
- $output_form .= " value=\"" . gettext("Delete this queue") . "\" />";
- } else {
- $output_form .= " value=\"" . gettext("Disable shaper on interface") . "\" />";
- }
- $output_form .= "</a>";
- $output_form .= "<br /></td></tr>";
- $output_form .= "</table>";
-} else {
- $output_form .= "</table>";
-}
-
-$output = "<table summary=\"output form\">";
-$output .= $output_form;
-
-//$pgtitle = "Firewall: Shaper: By Interface View";
-$closehead = false;
-include("head.inc");
-?>
-<link rel="stylesheet" type="text/css" media="all" href="./tree/tree.css" />
-<script type="text/javascript" src="./tree/tree.js"></script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" >
-<?php
-if ($queue) {
- echo $queue->build_javascript();
-}
-echo $newjavascript;
-
-include("fbegin.inc");
-?>
-<div id="inputerrors"></div>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-
-<form action="firewall_shaper.php" method="post" id="iform" name="iform">
-
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('shaper')): ?><p>
-<?php print_info_box_np(gettext("The traffic shaper configuration has been changed.")."<br />".gettext("You must apply the changes in order for them to take effect."));?><br /></p>
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="traffic shaper">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("By Interface"), true, "firewall_shaper.php");
- $tab_array[1] = array(gettext("By Queue"), false, "firewall_shaper_queues.php");
- $tab_array[2] = array(gettext("Limiter"), false, "firewall_shaper_vinterface.php");
- $tab_array[3] = array(gettext("Layer7"), false, "firewall_shaper_layer7.php");
- $tab_array[4] = array(gettext("Wizards"), false, "firewall_shaper_wizards.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
-<?php if (count($altq_list_queues) > 0): ?>
- <tr class="tabcont">
- <td width="25%" align="left">
- <a href="firewall_shaper.php?action=resetall" >
- <input type="button" value="<?=gettext("Remove Shaper")?>" class="formbtn" />
- </a>
- </td>
- <td width="75%"> </td>
- </tr>
-<?php endif; ?>
- <tr>
- <td width="25%" valign="top" align="left">
- <?php
- echo $tree;
- ?>
- </td>
- <td width="75%" valign="top" align="center">
- <div id="shaperarea" style="position:relative">
- <?php
- echo $output;
- ?>
- </div>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_shaper_layer7.php b/usr/local/www/firewall_shaper_layer7.php
deleted file mode 100644
index 9a72233..0000000
--- a/usr/local/www/firewall_shaper_layer7.php
+++ /dev/null
@@ -1,584 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_shaper_layer7.php
- Copyright (C) 2008 Helder Pereira, André Ribeiro
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/killall
- pfSense_MODULE: shaper
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-trafficshaper-layer7
-##|*NAME=Firewall: Traffic Shaper: Layer7 page
-##|*DESCR=Allow access to the 'Firewall: Traffic Shaper: Layer7' page.
-##|*MATCH=firewall_shaper_layer7.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-// Variables protocols (dynamic) and structures (static)
-$avail_protos =& generate_protocols_array();
-$avail_structures = array("action", "queue", "limiter");
-
-// Available behaviours
-$avail_behaviours_action = array("block");
-read_altq_config();
-$avail_behaviours_altq = get_altq_name_list();
-read_dummynet_config();
-$avail_behaviours_limiter = get_dummynet_name_list();
-$show_proto_form = false;
-
-//More variables
-$pgtitle = array(gettext("Firewall"), gettext("Traffic Shaper"), gettext("Layer7"));
-$shortcut_section = "trafficshaper";
-
-$output_form = "";
-
-$default_layer7shaper_msg = "<tr><td colspan=\"4\">";
-$default_layer7shaper_msg .= "<span class=\"vexpl\"><span class=\"red\"><strong>" . gettext("Note") . ":<br />";
-$default_layer7shaper_msg .= "</strong></span>" . gettext("You can add new layer7 protocol patterns by simply uploading the file") . " <a href=\"diag_patterns.php\">" . gettext("here") . ".</a></span><br />";
-$default_layer7shaper_msg .= "</td></tr>";
-
-read_layer7_config();
-
-if ($_GET['reset'] <> "") {
- // kill all ipfw-classifyd processes
- mwexec("killall -9 ipfw-classifyd");
- exit;
-}
-
-if ($_GET) {
- if ($_GET['container']) {
- $name = htmlspecialchars(trim($_GET['container']));
- }
- if ($_GET['action']) {
- $action = htmlspecialchars($_GET['action']);
- }
-}
-
-if ($_POST) {
- if ($_POST['container']) {
- $name = htmlspecialchars(trim($_POST['container']));
- }
-}
-
-if ($name) {
- //Get the object from the 7rules list
- $container = $layer7_rules_list[$name];
-}
-
-if ($_GET) {
- switch ($action) {
- case "add":
- $show_proto_form = true;
- $container = new layer7();
- $output_form .= $container->build_form(); //constructs the graphical interface on the right side
- unset($container);
- break;
- case "show":
- $show_proto_form = true;
- if ($container) {
- $output_form .= $container->build_form();
- } else {
- $show_proto_form = false;
- $input_errors[] = gettext("Layer7 Rules Container not found!");
- }
- break;
- default:
- echo log_error("Get default");
- $show_proto_form = false;
- $output_form .= $dn_default_shaper_msg . $default_layer7shaper_msg;
- break;
- }
-} else if ($_POST) {
- //add a new l7rules container
- $show_proto_form = true;
- unset($input_errors);
-
- if ($_POST['submit']) {
- if (isset($layer7_rules_list[$name])) {
- $l7r = $layer7_rules_list[$name];
- $_POST['divert_port'] = $l7r->GetRPort();
- } else {
- $l7r =& new layer7();
- $_POST['divert_port'] = $l7r->gen_divert_port();
- }
- for ($i = 0; $_POST['protocol'][$i] <> ""; $i++) {
- $_POST['l7rules'][$i]['protocol'] = $_POST['protocol'][$i];
- $_POST['l7rules'][$i]['structure'] = $_POST['structure'][$i];
- $_POST['l7rules'][$i]['behaviour'] = $_POST['behaviour'][$i];
- }
- $l7r->validate_input($_POST, $input_errors);
- $l7r->ReadConfig($_POST['container'], $_POST);
- //Before writing the results, we need to test for repeated protocols
- $non_dupes = array();
- $dupes = array();
- for ($j = 0; $j < $i; $j++) {
- if (!$non_dupes[$_POST['protocol'][$j]]) {
- $non_dupes[$_POST['protocol'][$j]] = true;
- } else {
- $dupes[] = $_POST['protocol'][$j];
- }
- }
- unset($non_dupes);
- if (sizeof($dupes) == 0 && !$input_errors) {
- $l7r->wconfig();
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
-
- read_layer7_config();
- } else {
- if (sizeof($dupes) > 0) {
- $dupe_error = gettext("Found the following repeated protocol definitions") . ": ";
- foreach ($dupes as $dupe) {
- $dupe_error .= "$dupe ";
- }
- $input_errors[] .= $dupe_error;
- }
- }
- unset($dupes);
- unset($dupe_error);
- //Even if there are repeated protocols, we won't lose any previous values
- //The user will be able to solve the situation
- $output_form .= $l7r->build_form();
- //Necessary to correctly build the proto form
- $container = $layer7_rules_list[$name];
- if ($input_errors) {
- $container =& $l7r;
- }
- } else if ($_POST['apply']) {
- write_config();
-
- $retval = 0;
- $retval = filter_configure();
- $savemsg = get_std_save_message($retval);
-
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message($retval);
- } else {
- $savemsg = $retval;
- }
-
- clear_subsystem_dirty('shaper');
-
- if ($container) {
- $output_form .= $container->build_form();
- } else {
- $show_proto_form = false;
- $output_form .= $dn_default_shaper_msg . $default_layer7shaper_msg;
- }
- } else if ($_POST['delete']) {
- $container->delete_l7c();
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
- unset($container);
-
- header("Location: firewall_shaper_layer7.php");
- exit;
- } else {
- $show_proto_form = false;
- }
-} else {
- $show_proto_form = false;
- $output_form .= $dn_default_shaper_msg . $default_layer7shaper_msg;
-}
-
-// Builds the left tree
-$tree = "<ul class=\"tree\" >";
-if (is_array($layer7_rules_list)) {
- foreach ($layer7_rules_list as $tmpl7) {
- $tree .= $tmpl7->build_tree();
- }
-}
-$tree .= "</ul>";
-$closehead = false;
-include("head.inc");
-?>
-<link rel="stylesheet" type="text/css" media="all" href="./tree/tree.css" />
-<script type="text/javascript" src="./tree/tree.js"></script>
-
-<script type="text/javascript">
-//<![CDATA[
-var initial_count = new Array();
-var rows_limit = 0; // Set to 0 to disable limitation
-
-/* Build the behaviours arrays in javascript */
-var js_behaviours_action = ['block']; //static
-
-var js_behaviours_altq = new Array();
-js_behaviours_altq = array_altq(js_behaviours_altq);
-
-var js_behaviours_limiter = new Array();
-js_behaviours_limiter = array_limiter(js_behaviours_limiter);
-
-function array_altq(a_behav) {
- var index;
- <?php
- if (!empty($avail_behaviours_altq)) {
- foreach ($avail_behaviours_altq as $key => $queue) { ?>
- name = "<?= $queue; ?>";
- index = <?= $key; ?>;
- a_behav[index] = name;
- <?php
- }
- } ?>
- return a_behav;
-}
-
-function array_limiter(a_behav) {
- var index;
- <?php
- if (!empty($avail_behaviours_limiter)) {
- foreach ($avail_behaviours_limiter as $key => $limiter) { ?>
- name = "<?= $limiter; ?>";
- index = <?= $key; ?>;
- a_behav[index] = name;
- <?php
- }
- } ?>
- return a_behav;
-}
-
-/* Fill the variables with available protocols, structures and behaviours */
-function fillProtocol() {
- var protocol = '<select name="protocol[]" style="font-size:8pt">';
- var name;
-
- <?php foreach ($avail_protos as $key => $proto) { ?>
- name = "<?= $proto; ?>";
- protocol += "<option value=" + name + ">" + name + "<\/option>";
- <?php } ?>
- protocol += "<\/select>";
-
- return protocol;
-}
-
-function fillStructure() {
- var structure = '<select name="structure[]" style="font-size:8pt" onchange="changeBehaviourValues(this.parentNode.parentNode);">';
- var name;
- <?php foreach ($avail_structures as $key => $struct) { ?>
- name = "<?= $struct; ?>";
- if (name == "queue") {
- if (js_behaviours_altq != "") {
- structure += "<option value=" + name + ">" + name + "<\/option>";
- }
- } else {
- if (name == "limiter") {
- if (js_behaviours_limiter != "") {
- structure += "<option value=" + name + ">" + name + "<\/option>";
- }
- } else {
- structure += "<option value=" + name + ">" + name + "<\/option>"; //action
- }
- }
- <?php } ?>
- structure += "<\/select>";
-
- return structure;
-}
-
-//Used by default to fill the values when inserting a new row.
-function fillBehaviour() {
- var behaviour = '<select name="behaviour[]" style="width:80px; font-size:8pt">';
- var name;
- <?php foreach ($avail_behaviours_action as $key => $behav) { ?>
- name = "<?= $behav; ?>";
- behaviour += "<option value=" + name + ">" + name + "<\/option>";
- <?php } ?>
- behaviour += "<\/select>";
-
- return behaviour;
-}
-
-/* Change the values on behaviours select when changing the structure row */
-function changeBehaviourValues(row) {
- var selectedRow = row.rowIndex - 2; //because row.rowIndex returns 2, not 0
- var structureSelected = document.getElementsByName("structure[]")[selectedRow].value;
-
- //Select the behaviours values to array a_behav
- var a_behav = new Array();
- if (structureSelected == "action") {
- a_behav = js_behaviours_action; //static
- } else {
- if (structureSelected == "queue") {
- a_behav = js_behaviours_altq;
- } else {
- a_behav = js_behaviours_limiter;
- }
- }
-
- //Build the html statement with the array values previously selected
- var new_behav;
- var name;
- for (i = 0; i < a_behav.length; i++) {
- new_behav += "<option value=" + a_behav[i] + ">" + a_behav[i] + "<\/option>";
- }
-
- document.getElementsByName("behaviour[]")[selectedRow].innerHTML = new_behav;
-}
-
-/* Add row to the table */
-function addRow(table_id) {
- var tbl = document.getElementById(table_id);
- // counting rows in table
- var rows_count = tbl.rows.length;
- if (initial_count[table_id] == undefined) {
- // if it is first adding in this table setting initial rows count
- initial_count[table_id] = rows_count;
- }
- // determining real count of added fields
- var tFielsNum = rows_count - initial_count[table_id];
- if (rows_limit != 0 && tFielsNum >= rows_limit) return false;
-
- var remove = '<a onclick="removeRow(\''+table_id+'\',this.parentNode.parentNode)" href="#"><img border="0" src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" alt="x" /><\/a>';
-
- try {
- var newRow = tbl.insertRow(rows_count);
- var newCell = newRow.insertCell(0);
- newCell.innerHTML = fillProtocol();
- var newCell = newRow.insertCell(1);
- newCell.innerHTML = fillStructure();
- var newCell = newRow.insertCell(2);
- newCell.innerHTML = fillBehaviour();
- var newCell = newRow.insertCell(3);
- newCell.innerHTML = remove;
- }
- catch (ex) {
- //if exception occurs
- alert(ex);
- }
-}
-
-/* Remove row from the table */
-function removeRow(tbl, row) {
- var table = document.getElementById(tbl);
- try {
- table.deleteRow(row.rowIndex);
- } catch (ex) {
- alert(ex);
- }
-}
-//]]>
-</script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-
-<?php include("fbegin.inc"); ?>
-<div id="inputerrors"></div>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-
-<form action="firewall_shaper_layer7.php" method="post" id="iform" name="iform">
-
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('shaper')): ?><p>
-<?php print_info_box_np(gettext("The traffic shaper configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br /></p>
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="traffic shaper layer7">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("By Interface"), false, "firewall_shaper.php");
- $tab_array[1] = array(gettext("By Queue"), false, "firewall_shaper_queues.php");
- $tab_array[2] = array(gettext("Limiter"), false, "firewall_shaper_vinterface.php");
- $tab_array[3] = array(gettext("Layer7"), true, "firewall_shaper_layer7.php");
- $tab_array[4] = array(gettext("Wizards"), false, "firewall_shaper_wizards.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
-
- <?php if (count($layer7_rules_list) > 0): ?>
- <tr class="tabcont">
- <td width="25%" align="left"></td>
- <td width="75%"> </td>
- </tr>
- <?php endif; ?>
- <tr>
- <td width="25%" valign="top" align="left">
- <?php
- echo $tree;
- ?>
- <br /><br />
- <a href="firewall_shaper_layer7.php?action=add">
- <img src="./themes/<?=$g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("Create new l7 rules group"); ?>" width="17" height="17" border="0" alt="add" /> <?=gettext("Create new l7 rules group"); ?>
- </a>
- <br />
- </td>
- <td width="75%" valign="top" align="center">
- <div id="shaperarea" style="position:relative">
- <table summary="output form">
- <?php
- echo $output_form;
- ?>
-
- <!-- Layer 7 rules form -->
- <?php if ($show_proto_form): ?>
- <tr>
- <td width="22%" valign="top" class="vncellreq">
- <div id="addressnetworkport">
- <?=gettext("Rule(s)"); ?>
- </div>
- </td>
-
- <td width="78%" class="vtable">
- <table width="236" id="maintable" summary="main table">
- <tbody>
- <tr>
- <td colspan="4">
- <div style="font-size: 8pt; padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066;" id="itemhelp">
- <?=gettext("Add one or more rules"); ?>
- </div>
- </td>
- </tr>
- <tr>
- <td>
- <div style="font-size: 8pt; padding:5px;" id="onecolumn">
- <?=gettext("Protocol"); ?>
- </div>
- </td>
- <td>
- <div style="font-size: 8pt; padding:5px;" id="twocolumn">
- <?=gettext("Structure"); ?>
- </div>
- </td>
- <td>
- <div style="font-size: 8pt; padding:5px;" id="threecolumn">
- <?=gettext("Behaviour"); ?>
- </div>
- </td>
- </tr>
- <!-- PHP Code to generate the existing rules -->
- <?php
- if ($container) {
- foreach ($container->rsets as $l7rule) {
- ?>
- <tr>
- <td>
- <select name="protocol[]" class="formselect" style="font-size:8pt">
- <?php foreach ($avail_protos as $proto): ?>
- <option value="<?=$proto;?>" <?php if ($proto == $l7rule->GetRProtocol()) echo "selected=\"selected\""; ?>><?=$proto;?></option>
- <?php endforeach; ?>
- </select>
- </td>
- <td>
- <select name="structure[]" class="formselect" style="font-size:8pt" onchange="changeBehaviourValues(this.parentNode.parentNode);">
- <?php foreach ($avail_structures as $struct) {
- if ($struct == "queue") {
- if (!empty($avail_behaviours_altq)) { ?>
- <option value="<?=$struct ?>" <?php if ($struct == $l7rule->GetRStructure()) echo "selected=\"selected\""; ?>><?=$struct;?></option>
- <?php }
- } else {
- if ($struct == "limiter") {
- if (!empty($avail_behaviours_limiter)) { ?>
- <option value="<?=$struct ?>" <?php if ($struct == $l7rule->GetRStructure()) echo "selected=\"selected\""; ?>><?=$struct;?></option>
- <?php }
- } else {
- if ($struct == "action") { ?>
- <option value="<?=$struct ?>" <?php if ($struct == $l7rule->GetRStructure()) echo "selected=\"selected\""; ?>><?=$struct;?></option>
- <?php }
- }
- }
- } ?>
- </select>
- </td>
- <td>
- <select name="behaviour[]" class="formselect" style="width:80px; font-size:8pt">
- <?php if ($l7rule->GetRStructure() == "action"): ?>
- <?php foreach ($avail_behaviours_action as $behaviour): ?>
- <option value="<?=$behaviour ?>" <?php if ($behaviour == $l7rule->GetRBehaviour()) echo "selected=\"selected\""; ?>><?=$behaviour;?></option>
- <?php endforeach; ?>
- <?php endif; ?>
- <?php if ($l7rule->GetRStructure() == "queue"): ?>
- <?php foreach ($avail_behaviours_altq as $behaviour): ?>
- <option value="<?=$behaviour ?>" <?php if ($behaviour == $l7rule->GetRBehaviour()) echo "selected=\"selected\""; ?>><?=$behaviour;?></option>
- <?php endforeach; ?>
- <?php endif; ?>
- <?php if ($l7rule->GetRStructure() == "limiter"): ?>
- <?php foreach ($avail_behaviours_limiter as $behaviour): ?>
- <option value="<?=$behaviour ?>" <?php if ($behaviour == $l7rule->GetRBehaviour()) echo "selected=\"selected\""; ?>><?=$behaviour;?></option>
- <?php endforeach; ?>
- <?php endif; ?>
- </select>
- </td>
- <td>
- <a onclick="removeRow('maintable', this.parentNode.parentNode); return false;" href="#"><img border="0" src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" alt="x" /></a>
- </td>
- </tr>
- <?php
- } //end foreach
- } //end if
- ?>
- </tbody>
- </table>
-
- <a onclick="javascript:addRow('maintable'); return false;" href="#"> <img border="0"
- src="/themes/<?=$g['theme']; ?>/images/icons/icon_plus.gif"
- alt="" title="<?=gettext("add another entry"); ?>" /> </a>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">
- &nbsp;
- </td>
- <td width="78%">
- <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
-
- <a href="firewall_shaper_layer7.php">
- <input id="cancelbutton" name="cancelbutton" type="button" class="formbtn" value="<?=gettext("Cancel"); ?>" />
-
- <?php if ($container): ?>
- <input id="delete" type="submit" class="formbtn" name="delete" value="<?=gettext("Delete"); ?>" />
- <?php endif ?>
- </a>
- </td>
- </tr>
- <?php endif; ?>
- <!-- End of layer7 rules form -->
- </table>
- </div><!-- end of div:shape area -->
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_shaper_queues.php b/usr/local/www/firewall_shaper_queues.php
deleted file mode 100644
index 6aa062b..0000000
--- a/usr/local/www/firewall_shaper_queues.php
+++ /dev/null
@@ -1,244 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_shaper_queues.php
- Copyright (C) 2004, 2005 Scott Ullrich
- Copyright (C) 2008 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/killall
- pfSense_MODULE: shaper
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-trafficshaper-queues
-##|*NAME=Firewall: Traffic Shaper: Queues page
-##|*DESCR=Allow access to the 'Firewall: Traffic Shaper: Queues' page.
-##|*MATCH=firewall_shaper_queues.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("rrd.inc");
-
-if ($_GET['reset'] <> "") {
- mwexec("killall -9 pfctl");
- exit;
-}
-
-$shaperIFlist = get_configured_interface_with_descr();
-read_altq_config();
-$qlist =& get_unique_queue_list();
-
-if (!is_array($qlist)) {
- $qlist = array();
-}
-
-$tree = "<ul class=\"tree\" >";
-foreach ($qlist as $queue => $qkey) {
- $tree .= "<li><a href=\"firewall_shaper_queues.php?queue={$queue}&amp;action=show\" >";
- if (isset($shaperIFlist[$queue])) {
- $tree .= $shaperIFlist[$queue] . "</a></li>";
- } else {
- $tree .= $queue . "</a></li>";
- }
-}
-$tree .= "</ul>";
-
-if ($_GET) {
- if ($_GET['queue']) {
- $qname = htmlspecialchars(trim($_GET['queue']));
- }
- if ($_GET['interface']) {
- $interface = htmlspecialchars(trim($_GET['interface']));
- }
- if ($_GET['action']) {
- $action = htmlspecialchars($_GET['action']);
- }
-
- switch ($action) {
- case "delete":
- $altq =& $altq_list_queues[$interface];
- $qtmp =& $altq->find_queue("", $qname);
- if ($qtmp) {
- $qtmp->delete_queue();
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
- }
- header("Location: firewall_shaper_queues.php");
- exit;
- break;
- case "add":
- /*
- * XXX: WARNING: This returns the first it finds.
- * Maybe the user expects something else?!
- */
- foreach ($altq_list_queues as $altq) {
- $qtmp =& $altq->find_queue("", $qname);
- if ($qtmp) {
- $copycfg = array();
- $qtmp->copy_queue($interface, $copycfg);
- $aq =& $altq_list_queues[$interface];
- if ($qname == $qtmp->GetInterface()) {
- $config['shaper']['queue'][] = $copycfg;
- } else if ($aq) {
- $tmp1 =& $qtmp->find_parentqueue($interface, $qname);
- if ($tmp1) {
- $tmp =& $aq->find_queue($interface, $tmp1->GetQname());
- }
-
- if ($tmp) {
- $link =& get_reference_to_me_in_config($tmp->GetLink());
- } else {
- $link =& get_reference_to_me_in_config($aq->GetLink());
- }
- $link['queue'][] = $copycfg;
- } else {
- $newroot = array();
- $newroot['name'] = $interface;
- $newroot['interface'] = $interface;
- $newroot['scheduler'] = $altq->GetScheduler();
- $newroot['queue'] = array();
- $newroot['queue'][] = $copycfg;
- $config['shaper']['queue'][] = $newroot;
- }
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
- break;
- }
- }
-
- header("Location: firewall_shaper_queues.php?queue=".$qname."&action=show");
- exit;
- break;
- case "show":
- foreach ($config['interfaces'] as $if => $ifdesc) {
- $altq = $altq_list_queues[$if];
- if ($altq) {
- $qtmp =& $altq->find_queue("", $qname);
- if ($qtmp) {
- $output .= $qtmp->build_shortform();
- } else {
- $output .= build_iface_without_this_queue($if, $qname);
- }
- } else {
- if (!is_altq_capable($ifdesc['if'])) {
- continue;
- }
- if (!isset($ifdesc['enable']) && $if != "lan" && $if != "wan") {
- continue;
- }
- $output .= build_iface_without_this_queue($if, $qname);
- }
- }
- break;
- }
-}
-
-if ($_POST['apply']) {
- write_config();
-
- $retval = 0;
- /* Setup pf rules since the user may have changed the optimization value */
- $retval = filter_configure();
- $savemsg = get_std_save_message($retval);
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message($retval);
- } else {
- $savemsg = $retval;
- }
-
- /* reset rrd queues */
- system("rm -f /var/db/rrd/*queuedrops.rrd");
- system("rm -f /var/db/rrd/*queues.rrd");
- enable_rrd_graphing();
-
- clear_subsystem_dirty('shaper');
-}
-
-$pgtitle = gettext("Firewall: Shaper: By Queues View");
-$shortcut_section = "trafficshaper";
-$closehead = false;
-include("head.inc");
-?>
-<link rel="stylesheet" type="text/css" media="all" href="./tree/tree.css" />
-<script type="text/javascript" src="./tree/tree.js"></script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<div id="inputerrors"></div>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="firewall_shaper_queues.php" method="post" name="iform" id="iform">
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('shaper')): ?><p>
-<?php print_info_box_np(gettext("The traffic shaper configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br /></p>
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="traffic shaper queues">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("By Interface"), false, "firewall_shaper.php");
- $tab_array[1] = array(gettext("By Queue"), true, "firewall_shaper_queues.php");
- $tab_array[2] = array(gettext("Limiter"), false, "firewall_shaper_vinterface.php");
- $tab_array[3] = array(gettext("Layer7"), false, "firewall_shaper_layer7.php");
- $tab_array[4] = array(gettext("Wizards"), false, "firewall_shaper_wizards.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td valign="top">
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="30%" valign="top" align="left">
- <?php echo $tree; ?>
- </td>
- <td width="70%" valign="top" align="center">
- <?php
- if ($qname) {
- echo "<p class=\"pgtitle\">" . $qname . "</p><br />";
- }
- echo "<table align=\"center\" class=\"tabcont\" width=\"80%\" border=\"0\" cellpadding=\"4\" cellspacing=\"0\" summary=\"output form\">";
- echo $output;
- echo "<tr><td>&nbsp;</td></tr>";
- echo "</table>";
- ?>
- </td>
- </tr>
- </table><!-- table:main area -->
- </div><!-- div:main area -->
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_shaper_vinterface.php b/usr/local/www/firewall_shaper_vinterface.php
deleted file mode 100644
index ffa3f15..0000000
--- a/usr/local/www/firewall_shaper_vinterface.php
+++ /dev/null
@@ -1,475 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_shaper_vinterface.php
- Copyright (C) 2004, 2005 Scott Ullrich
- Copyright (C) 2008 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/killall
- pfSense_MODULE: shaper
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-trafficshaper-limiter
-##|*NAME=Firewall: Traffic Shaper: Limiter page
-##|*DESCR=Allow access to the 'Firewall: Traffic Shaper: Limiter' page.
-##|*MATCH=firewall_shaper_vinterface.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-if ($_GET['reset'] <> "") {
- mwexec("/usr/bin/killall -9 pfctl");
- exit;
-}
-
-$pgtitle = array(gettext("Firewall"), gettext("Traffic Shaper"), gettext("Limiter"));
-$shortcut_section = "trafficshaper-limiters";
-
-read_dummynet_config();
-/*
- * The whole logic in these code maybe can be specified.
- * If you find a better way contact me :).
- */
-
-if ($_GET) {
- if ($_GET['queue']) {
- $qname = htmlspecialchars(trim($_GET['queue']));
- }
- if ($_GET['pipe']) {
- $pipe = htmlspecialchars(trim($_GET['pipe']));
- }
- if ($_GET['action']) {
- $action = htmlspecialchars($_GET['action']);
- }
-}
-if ($_POST) {
- if ($_POST['name']) {
- $qname = htmlspecialchars(trim($_POST['name']));
- } else if ($_POST['newname']) {
- $qname = htmlspecialchars(trim($_POST['newname']));
- }
- if ($_POST['pipe']) {
- $pipe = htmlspecialchars(trim($_POST['pipe']));
- } else {
- $pipe = htmlspecialchars(trim($qname));
- }
- if ($_POST['parentqueue']) {
- $parentqueue = htmlspecialchars(trim($_POST['parentqueue']));
- }
-}
-
-if ($pipe) {
- $dnpipe = $dummynet_pipe_list[$pipe];
- if ($dnpipe) {
- $queue =& $dnpipe->find_queue($pipe, $qname);
- } else {
- $addnewpipe = true;
- }
-}
-
-$dontshow = false;
-$newqueue = false;
-$output_form = "";
-
-if ($_GET) {
- switch ($action) {
- case "delete":
- if ($queue) {
- if (is_array($config['filter']['rule'])) {
- foreach ($config['filter']['rule'] as $rule) {
- if ($rule['dnpipe'] == $queue->GetQname() || $rule['pdnpipe'] == $queue->GetQname()) {
- $input_errors[] = gettext("This pipe/queue is referenced in filter rules, please remove references from there before deleting.");
- }
- }
- }
- if (!$input_errors) {
- $queue->delete_queue();
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
- header("Location: firewall_shaper_vinterface.php");
- exit;
- }
- $output_form .= $queue->build_form();
- } else {
- $input_errors[] = sprintf(gettext("No queue with name %s was found!"), $qname);
- $output_form .= $dn_default_shaper_msg;
- $dontshow = true;
- }
- break;
- case "resetall":
- foreach ($dummynet_pipe_list as $dn) {
- $dn->delete_queue();
- }
- unset($dummynet_pipe_list);
- $dummynet_pipe_list = array();
- unset($config['dnshaper']['queue']);
- unset($queue);
- unset($pipe);
- $can_add = false;
- $can_enable = false;
- $dontshow = true;
- foreach ($config['filter']['rule'] as $key => $rule) {
- if (isset($rule['dnpipe'])) {
- unset($config['filter']['rule'][$key]['dnpipe']);
- }
- if (isset($rule['pdnpipe'])) {
- unset($config['filter']['rule'][$key]['pdnpipe']);
- }
- }
- if (write_config()) {
- $retval = 0;
- $retval = filter_configure();
- $savemsg = get_std_save_message($retval);
-
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message($retval);
- } else {
- $savemsg = $retval;
- }
- } else {
- $savemsg = gettext("Unable to write config.xml (Access Denied?)");
- }
- $output_form = $dn_default_shaper_message;
-
- break;
- case "add":
- if ($dnpipe) {
- $q = new dnqueue_class();
- $q->SetPipe($pipe);
- $output_form .= "<input type=\"hidden\" name=\"parentqueue\" id=\"parentqueue\"";
- $output_form .= " value=\"".$pipe."\" />";
- } else if ($addnewpipe) {
- $q = new dnpipe_class();
- $q->SetQname($pipe);
- } else {
- $input_errors[] = gettext("Could not create new queue/discipline!");
- }
-
- if ($q) {
- $output_form .= $q->build_form();
- $newjavascript = $q->build_javascript();
- unset($q);
- $newqueue = true;
- }
- break;
- case "show":
- if ($queue) {
- $output_form .= $queue->build_form();
- } else {
- $input_errors[] = gettext("Queue not found!");
- }
- break;
- case "enable":
- if ($queue) {
- $queue->SetEnabled("on");
- $output_form .= $queue->build_form();
- $queue->wconfig();
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
- } else {
- $input_errors[] = gettext("Queue not found!");
- }
- break;
- case "disable":
- if ($queue) {
- $queue->SetEnabled("");
- $output_form .= $queue->build_form();
- $queue->wconfig();
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
- } else {
- $input_errors[] = gettext("Queue not found!");
- }
- break;
- default:
- $output_form .= $dn_default_shaper_msg;
- $dontshow = true;
- break;
- }
-} else if ($_POST) {
- unset($input_errors);
-
- if ($addnewpipe) {
- if (!empty($dummynet_pipe_list[$qname])) {
- $input_errors[] = gettext("You cannot name a child queue with the same name as a parent limiter");
- } else {
- $dnpipe =& new dnpipe_class();
-
- $dnpipe->ReadConfig($_POST);
- $dnpipe->validate_input($_POST, $input_errors);
- if (!$input_errors) {
- $number = dnpipe_find_nextnumber();
- $dnpipe->SetNumber($number);
- unset($tmppath);
- $tmppath[] = $dnpipe->GetQname();
- $dnpipe->SetLink($tmppath);
- $dnpipe->wconfig();
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
- $can_enable = true;
- $can_add = true;
- }
-
- read_dummynet_config();
- $output_form .= $dnpipe->build_form();
- $newjavascript = $dnpipe->build_javascript();
- }
- } else if ($parentqueue) { /* Add a new queue */
- if (!empty($dummynet_pipe_list[$qname])) {
- $input_errors[] = gettext("You cannot name a child queue with the same name as a parent limiter");
- } else if ($dnpipe) {
- $tmppath =& $dnpipe->GetLink();
- array_push($tmppath, $qname);
- $tmp =& $dnpipe->add_queue($pipe, $_POST, $tmppath, $input_errors);
- if (!$input_errors) {
- array_pop($tmppath);
- $tmp->wconfig();
- if (write_config()) {
- $can_enable = true;
- $can_add = false;
- mark_subsystem_dirty('shaper');
- }
- }
- read_dummynet_config();
- $output_form .= $tmp->build_form();
- } else {
- $input_errors[] = gettext("Could not add new queue.");
- }
- } else if ($_POST['apply']) {
- write_config();
-
- $retval = 0;
- $retval = filter_configure();
- $savemsg = get_std_save_message($retval);
-
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message($retval);
- } else {
- $savemsg = $retval;
- }
-
- /* XXX: TODO Make dummynet pretty graphs */
- // enable_rrd_graphing();
-
- clear_subsystem_dirty('shaper');
-
- if ($queue) {
- $output_form .= $queue->build_form();
- $dontshow = false;
- } else {
- $output_form .= $dn_default_shaper_message;
- $dontshow = true;
- }
- } else if ($queue) {
- $queue->validate_input($_POST, $input_errors);
- if (!$input_errors) {
- $queue->update_dn_data($_POST);
- $queue->wconfig();
- if (write_config()) {
- mark_subsystem_dirty('shaper');
- }
- $dontshow = false;
- }
- read_dummynet_config();
- $output_form .= $queue->build_form();
- } else {
- $output_form .= $dn_default_shaper_msg;
- $dontshow = true;
- }
-} else {
- $output_form .= $dn_default_shaper_msg;
- $dontshow = true;
-}
-
-if ($queue) {
- if ($queue->GetEnabled()) {
- $can_enable = true;
- } else {
- $can_enable = false;
- }
- if ($queue->CanHaveChildren()) {
- $can_add = true;
- } else {
- $can_add = false;
- }
-}
-
-$tree = "<ul class=\"tree\" >";
-if (is_array($dummynet_pipe_list)) {
- foreach ($dummynet_pipe_list as $tmpdn) {
- $tree .= $tmpdn->build_tree();
- }
-}
-$tree .= "</ul>";
-
-if (!$dontshow || $newqueue) {
-
-$output_form .= "<tr><td width=\"22%\" valign=\"top\" class=\"vncellreq\">";
-$output_form .= gettext("Queue Actions");
-$output_form .= "</td><td valign=\"top\" class=\"vncellreq\" width=\"78%\">";
-
-$output_form .= "<input type=\"submit\" name=\"Submit\" value=\"" . gettext("Save") . "\" class=\"formbtn\" />";
-if ($can_add || $addnewaltq) {
- $output_form .= "<a href=\"firewall_shaper_vinterface.php?pipe=";
- $output_form .= $pipe;
- if ($queue) {
- $output_form .= "&amp;queue=" . $queue->GetQname();
- }
- $output_form .= "&amp;action=add\">";
- $output_form .= "<input type=\"button\" class=\"formbtn\" name=\"add\" value=\"" . gettext("Add new queue") ."\" />";
- $output_form .= "</a>";
-}
-$output_form .= "<a href=\"firewall_shaper_vinterface.php?pipe=";
-$output_form .= $pipe;
-if ($queue) {
- $output_form .= "&amp;queue=" . $queue->GetQname();
-}
-$output_form .= "&amp;action=delete\">";
-$output_form .= "<input type=\"button\" class=\"formbtn\" name=\"delete\"";
-if ($queue) {
- $output_form .= " value=\"" . gettext("Delete this queue") ."\" />";
-} else {
- $output_form .= " value=\"" . gettext("Delete Limiter") ."\" />";
-}
-$output_form .= "</a>";
-$output_form .= "</td></tr>";
-$output_form .= "</table>";
-} else {
- $output_form .= "</table>";
-}
-
-$output = "<table summary=\"output form\">";
-$output .= $output_form;
-$closehead = false;
-include("head.inc");
-?>
-<link rel="stylesheet" type="text/css" media="all" href="./tree/tree.css" />
-<script type="text/javascript" src="./tree/tree.js"></script>
-<script type="text/javascript">
-//<![CDATA[
-function show_source_port_range() {
- document.getElementById("sprtable").style.display = '';
- document.getElementById("sprtable1").style.display = '';
- document.getElementById("sprtable2").style.display = '';
- document.getElementById("sprtable5").style.display = '';
- document.getElementById("sprtable4").style.display = 'none';
- document.getElementById("showadvancedboxspr").innerHTML='';
-}
-//]]>
-</script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-
-<?php
-if ($queue) {
- echo $queue->build_javascript();
-} else {
- echo $newjavascript;
-}
-
-include("fbegin.inc");
-?>
-<div id="inputerrors"></div>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-
-<form action="firewall_shaper_vinterface.php" method="post" id="iform" name="iform">
-
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('shaper')): ?><p>
-<?php print_info_box_np(gettext("The traffic shaper configuration has been changed.")."<br />".gettext("You must apply the changes in order for them to take effect."));?><br /></p>
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="traffic shaper limiter">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("By Interface"), false, "firewall_shaper.php");
- $tab_array[1] = array(gettext("By Queue"), false, "firewall_shaper_queues.php");
- $tab_array[2] = array(gettext("Limiter"), true, "firewall_shaper_vinterface.php");
- $tab_array[3] = array(gettext("Layer7"), false, "firewall_shaper_layer7.php");
- $tab_array[4] = array(gettext("Wizards"), false, "firewall_shaper_wizards.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
-<?php if (count($dummynet_pipe_list) > 0): ?>
- <tr class="tabcont">
- <td width="25%" align="left"></td>
- <td width="75%"> </td>
- </tr>
-<?php endif; ?>
- <tr>
- <td width="25%" valign="top" align="left">
- <?php
- echo $tree;
- ?>
- <br /><br />
- <a href="firewall_shaper_vinterface.php?pipe=new&amp;action=add">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("Create new limiter");?>" width="17" height="17" border="0" alt="add" />&nbsp;<?=gettext("Create new limiter");?>
- </a>
- <br />
- </td>
- <td width="75%" valign="top" align="center">
- <div id="shaperarea" style="position:relative">
- <?php
- echo $output;
- ?>
- </div>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<script type='text/javascript'>
-//<![CDATA[
-<?php
- $totalrows = 0;
- if (is_array($config['dnshaper']) && is_array($config['dnshaper']['queue'])) {
- $totalrows = count($config['dnshaper']['queue']);
- }
- echo "totalrows = {$totalrows}";
-?>
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_shaper_wizards.php b/usr/local/www/firewall_shaper_wizards.php
deleted file mode 100644
index 583fdef..0000000
--- a/usr/local/www/firewall_shaper_wizards.php
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_shaper_wizards.php
- Copyright (C) 2004, 2005 Scott Ullrich
- Copyright (C) 2008 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/killall
- pfSense_MODULE: shaper
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-trafficshaper-wizard
-##|*NAME=Firewall: Traffic Shaper: Wizard page
-##|*DESCR=Allow access to the 'Firewall: Traffic Shaper: Wizard' page.
-##|*MATCH=firewall_shaper_wizards.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("util.inc");
-
-if ($_GET['reset'] <> "") {
- sigkillbyname('pfctl', SIGKILL);
- exit;
-}
-
-if ($_POST['apply']) {
- write_config();
-
- $retval = 0;
- /* Setup pf rules since the user may have changed the optimization value */
- $retval = filter_configure();
- $savemsg = get_std_save_message($retval);
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message($retval);
- } else {
- $savemsg = $retval;
- }
-
- /* reset rrd queues */
- unlink_if_exists("/var/db/rrd/*queuedrops.rrd");
- unlink_if_exists("/var/db/rrd/*queues.rrd");
- enable_rrd_graphing();
-
- clear_subsystem_dirty('shaper');
-}
-
-$pgtitle = array(gettext("Firewall"), gettext("Traffic Shaper"), gettext("Wizards"));
-$shortcut_section = "trafficshaper";
-
-$wizards = array(
- gettext("Multiple Lan/Wan") => "traffic_shaper_wizard_multi_all.xml",
- gettext("Dedicated Links") => "traffic_shaper_wizard_dedicated.xml",
-);
-
-$closehead = false;
-include("head.inc");
-?>
-<link rel="stylesheet" type="text/css" media="all" href="./tree/tree.css" />
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" >
-
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-
-<form action="firewall_shaper_wizards.php" method="post" id="iform" name="iform">
-
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('shaper')): ?><p>
-<?php print_info_box_np(gettext("The traffic shaper configuration has been changed.")."<br />".gettext("You must apply the changes in order for them to take effect."));?><br /></p>
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="traffic shaper wizard">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("By Interface"), false, "firewall_shaper.php");
- $tab_array[1] = array(gettext("By Queue"), false, "firewall_shaper_queues.php");
- $tab_array[2] = array(gettext("Limiter"), false, "firewall_shaper_vinterface.php");
- $tab_array[3] = array(gettext("Layer7"), false, "firewall_shaper_layer7.php");
- $tab_array[4] = array(gettext("Wizards"), true, "firewall_shaper_wizards.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td class="listhdrr" width="25%" align="center" ><?=gettext("Wizard function");?></td>
- <td class="listhdrr" width="75%" align="center"><?=gettext("Wizard Link");?></td>
- </tr>
-<?php
- foreach ($wizards as $key => $wizard):
-?>
- <tr class="tabcont">
- <td class="listlr" style="background-color: #e0e0e0" width="25%" align="center">
-<?php
- echo $key;
-?>
- </td>
- <td class="listr" style="background-color: #e0e0e0" width="75%" align="center">
-<?php
- echo "<a href=\"wizard.php?xml=" . $wizard ."\" >" .$wizard . "</a>";
-?>
- </td>
- </tr>
-<?php
- endforeach;
-?>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_virtual_ip.php b/usr/local/www/firewall_virtual_ip.php
deleted file mode 100644
index 148477f..0000000
--- a/usr/local/www/firewall_virtual_ip.php
+++ /dev/null
@@ -1,373 +0,0 @@
-<?php
-/* $Id$ */
-/*
- firewall_virtual_ip.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2005 Bill Marquette <bill.marquette@gmail.com>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Includes code from m0n0wall which is:
- Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Includes code from pfSense which is:
- Copyright (C) 2004-2005 Scott Ullrich <geekgod@pfsense.com>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ifconfig
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-virtualipaddresses
-##|*NAME=Firewall: Virtual IP Addresses page
-##|*DESCR=Allow access to the 'Firewall: Virtual IP Addresses' page.
-##|*MATCH=firewall_virtual_ip.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-if (!is_array($config['virtualip']['vip'])) {
- $config['virtualip']['vip'] = array();
-}
-$a_vip = &$config['virtualip']['vip'];
-
-if ($_POST) {
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
- $check_carp = false;
- if (file_exists("{$g['tmp_path']}/.firewall_virtual_ip.apply")) {
- $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.firewall_virtual_ip.apply"));
- foreach ($toapplylist as $vid => $ovip) {
- if (!empty($ovip)) {
- interface_vip_bring_down($ovip);
- }
- if ($a_vip[$vid]) {
- switch ($a_vip[$vid]['mode']) {
- case "ipalias":
- interface_ipalias_configure($a_vip[$vid]);
- break;
- case "proxyarp":
- interface_proxyarp_configure($a_vip[$vid]['interface']);
- break;
- case "carp":
- $check_carp = true;
- interface_carp_configure($a_vip[$vid]);
- break;
- default:
- break;
- }
- }
- }
- @unlink("{$g['tmp_path']}/.firewall_virtual_ip.apply");
- }
- /* Before changing check #4633 */
- if ($check_carp === true && !get_carp_status()) {
- set_single_sysctl("net.inet.carp.allow", "1");
- }
-
- $retval = 0;
- $retval |= filter_configure();
- $savemsg = get_std_save_message($retval);
-
- clear_subsystem_dirty('vip');
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($a_vip[$_GET['id']]) {
- /* make sure no inbound NAT mappings reference this entry */
- if (is_array($config['nat']['rule'])) {
- foreach ($config['nat']['rule'] as $rule) {
- if ($rule['destination']['address'] <> "") {
- if ($rule['destination']['address'] == $a_vip[$_GET['id']]['subnet']) {
- $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one NAT mapping.");
- break;
- }
- }
- }
- }
-
- /* make sure no OpenVPN server or client references this entry */
- $openvpn_types_a = array("openvpn-server" => gettext("server"), "openvpn-client" => gettext("client"));
- foreach ($openvpn_types_a as $openvpn_type => $openvpn_type_text) {
- if (is_array($config['openvpn'][$openvpn_type])) {
- foreach ($config['openvpn'][$openvpn_type] as $openvpn) {
- if ($openvpn['ipaddr'] <> "") {
- if ($openvpn['ipaddr'] == $a_vip[$_GET['id']]['subnet']) {
- if (strlen($openvpn['description'])) {
- $openvpn_desc = $openvpn['description'];
- } else {
- $openvpn_desc = $openvpn['ipaddr'] . ":" . $openvpn['local_port'];
- }
- $input_errors[] = sprintf(gettext("This entry cannot be deleted because it is still referenced by OpenVPN %s %s."), $openvpn_type_text, $openvpn_desc);
- break;
- }
- }
- }
- }
- }
-
- if (is_ipaddrv6($a_vip[$_GET['id']]['subnet'])) {
- $is_ipv6 = true;
- $subnet = gen_subnetv6($a_vip[$_GET['id']]['subnet'], $a_vip[$_GET['id']]['subnet_bits']);
- $if_subnet_bits = get_interface_subnetv6($a_vip[$_GET['id']]['interface']);
- $if_subnet = gen_subnetv6(get_interface_ipv6($a_vip[$_GET['id']]['interface']), $if_subnet_bits);
- } else {
- $is_ipv6 = false;
- $subnet = gen_subnet($a_vip[$_GET['id']]['subnet'], $a_vip[$_GET['id']]['subnet_bits']);
- $if_subnet_bits = get_interface_subnet($a_vip[$_GET['id']]['interface']);
- $if_subnet = gen_subnet(get_interface_ip($a_vip[$_GET['id']]['interface']), $if_subnet_bits);
- }
-
- $subnet .= "/" . $a_vip[$_GET['id']]['subnet_bits'];
- $if_subnet .= "/" . $if_subnet_bits;
-
- if (is_array($config['gateways']['gateway_item'])) {
- foreach ($config['gateways']['gateway_item'] as $gateway) {
- if ($a_vip[$_GET['id']]['interface'] != $gateway['interface']) {
- continue;
- }
- if ($is_ipv6 && $gateway['ipprotocol'] == 'inet') {
- continue;
- }
- if (!$is_ipv6 && $gateway['ipprotocol'] == 'inet6') {
- continue;
- }
- if (ip_in_subnet($gateway['gateway'], $if_subnet)) {
- continue;
- }
-
- if (ip_in_subnet($gateway['gateway'], $subnet)) {
- $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one Gateway.");
- break;
- }
- }
- }
-
- if ($a_vip[$_GET['id']]['mode'] == "ipalias") {
- $subnet = gen_subnet($a_vip[$_GET['id']]['subnet'], $a_vip[$_GET['id']]['subnet_bits']) . "/" . $a_vip[$_GET['id']]['subnet_bits'];
- $found_if = false;
- $found_carp = false;
- $found_other_alias = false;
-
- if ($subnet == $if_subnet) {
- $found_if = true;
- }
-
- $vipiface = $a_vip[$_GET['id']]['interface'];
- foreach ($a_vip as $vip_id => $vip) {
- if ($vip_id == $_GET['id']) {
- continue;
- }
-
- if ($vip['interface'] == $vipiface && ip_in_subnet($vip['subnet'], $subnet)) {
- if ($vip['mode'] == "carp") {
- $found_carp = true;
- } else if ($vip['mode'] == "ipalias") {
- $found_other_alias = true;
- }
- }
- }
-
- if ($found_carp === true && $found_other_alias === false && $found_if === false) {
- $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by a CARP IP with the description") . " {$vip['descr']}.";
- }
- } else if ($a_vip[$_GET['id']]['mode'] == "carp") {
- $vipiface = "{$a_vip[$_GET['id']]['interface']}_vip{$a_vip[$_GET['id']]['vhid']}";
- foreach ($a_vip as $vip) {
- if ($vipiface == $vip['interface'] && $vip['mode'] == "ipalias") {
- $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by an IP alias entry with the description") . " {$vip['descr']}.";
- }
- }
- }
-
- if (!$input_errors) {
- if (!session_id()) {
- session_start();
- }
- $user = getUserEntry($_SESSION['Username']);
- if (is_array($user) && userHasPrivilege($user, "user-config-readonly")) {
- header("Location: firewall_virtual_ip.php");
- exit;
- }
- session_commit();
-
- // Special case since every proxyarp vip is handled by the same daemon.
- if ($a_vip[$_GET['id']]['mode'] == "proxyarp") {
- $viface = $a_vip[$_GET['id']]['interface'];
- unset($a_vip[$_GET['id']]);
- interface_proxyarp_configure($viface);
- } else {
- interface_vip_bring_down($a_vip[$_GET['id']]);
- unset($a_vip[$_GET['id']]);
- }
- if (count($config['virtualip']['vip']) == 0) {
- unset($config['virtualip']['vip']);
- }
- write_config();
- header("Location: firewall_virtual_ip.php");
- exit;
- }
- }
-} else if ($_GET['changes'] == "mods" && is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-
-$pgtitle = array(gettext("Firewall"), gettext("Virtual IP Addresses"));
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="firewall_virtual_ip.php" method="post">
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- } else if ($savemsg) {
- print_info_box($savemsg);
- } else if (is_subsystem_dirty('vip')) {
- print_info_box_np(gettext("The VIP configuration has been changed.")."<br />".gettext("You must apply the changes in order for them to take effect."));
- }
-?>
-<br />
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="virtual ip">
- <tr><td class="tabnavtbl">
- <?php
- /* active tabs */
- $tab_array = array();
- $tab_array[] = array(gettext("Virtual IPs"), true, "firewall_virtual_ip.php");
- $tab_array[] = array(gettext("CARP Settings"), false, "system_hasync.php");
- display_top_tabs($tab_array);
- ?>
- </td></tr>
- <tr>
- <td><input type="hidden" id="id" name="id" value="<?php echo htmlspecialchars($id); ?>" /></td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="30%" class="listhdrr"><?=gettext("Virtual IP address");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Interface");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Type");?></td>
- <td width="40%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="edit">
- <tr>
- <td width="17"></td>
- <td valign="middle"><a href="firewall_virtual_ip_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="edit" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <?php
- $interfaces = get_configured_interface_with_descr(false, true);
- $carplist = get_configured_carp_interface_list();
- foreach ($carplist as $cif => $carpip) {
- $interfaces[$cif] = $carpip." (".get_vip_descr($carpip).")";
- }
- $interfaces['lo0'] = "Localhost";
- $i = 0;
- foreach ($a_vip as $vipent):
- if ($vipent['subnet'] <> "" or $vipent['range'] <> "" or $vipent['subnet_bits'] <> "" or (isset($vipent['range']['from']) && $vipent['range']['from'] <> "")):
- ?>
- <tr>
- <td class="listlr" ondblclick="document.location='firewall_virtual_ip_edit.php?id=<?=$i;?>';">
- <?php
- if (($vipent['type'] == "single") || ($vipent['type'] == "network")) {
- if ($vipent['subnet_bits']) {
- echo "{$vipent['subnet']}/{$vipent['subnet_bits']}";
- }
- }
- if ($vipent['type'] == "range") {
- echo "{$vipent['range']['from']}-{$vipent['range']['to']}";
- }
- if ($vipent['mode'] == "carp") {
- echo " (vhid {$vipent['vhid']})";
- }
- ?>
- </td>
- <td class="listr" ondblclick="document.location='firewall_virtual_ip_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($interfaces[$vipent['interface']]);?>&nbsp;
- </td>
- <td class="listr" align="center" ondblclick="document.location='firewall_virtual_ip_edit.php?id=<?=$i;?>';">
- <?php if ($vipent['mode'] == "proxyarp") echo "<img src='./themes/".$g['theme']."/images/icons/icon_parp.gif' title='Proxy ARP' alt='proxy arp' />"; elseif ($vipent['mode'] == "carp") echo "<img src='./themes/".$g['theme']."/images/icons/icon_carp.gif' title='CARP' alt='carp' />"; elseif ($vipent['mode'] == "other") echo "<img src='./themes/".$g['theme']."/images/icons/icon_other.gif' title='Other' alt='other' />"; elseif ($vipent['mode'] == "ipalias") echo "<img src='./themes/".$g['theme']."/images/icons/icon_ifalias.gif' title='IP Alias' alt='ip alias' />";?>
- </td>
- <td class="listbg" ondblclick="document.location='firewall_virtual_ip_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($vipent['descr']);?>&nbsp;
- </td>
- <td class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle"><a href="firewall_virtual_ip_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a></td>
- <td valign="middle"><a href="firewall_virtual_ip.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext('Do you really want to delete this entry?');?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <?php
- endif;
- $i++;
- endforeach;
- ?>
- <tfoot>
- <tr>
- <td class="list" colspan="4"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="edit">
- <tr>
- <td width="17"></td>
- <td valign="middle"><a href="firewall_virtual_ip_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="edit" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td colspan="5">
- <p>
- <span class="vexpl"><span class="red"><strong><?=gettext("Note:");?><br /></strong></span>
- <?=gettext("The virtual IP addresses defined on this page may be used in");?><a href="firewall_nat.php"> <?=gettext("NAT"); ?> </a><?=gettext("mappings.");?><br />
- <?=gettext("You can check the status of your CARP Virtual IPs and interfaces ");?><a href="carp_status.php"><?=gettext("here");?></a>.</span>
- </p>
- </td>
- </tr>
- </tfoot>
- </table>
- </div><!-- div:mainarea -->
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/firewall_virtual_ip_edit.php b/usr/local/www/firewall_virtual_ip_edit.php
deleted file mode 100644
index 6021115..0000000
--- a/usr/local/www/firewall_virtual_ip_edit.php
+++ /dev/null
@@ -1,572 +0,0 @@
-<?php
-/* $Id$ */
-/*
-
- firewall_virtual_ip_edit.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Copyright (C) 2005 Bill Marquette <bill.marquette@gmail.com>.
- All rights reserved.
-
- Includes code from m0n0wall which is:
- Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Includes code from pfSense which is:
- Copyright (C) 2004-2005 Scott Ullrich <geekgod@pfsense.com>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ifconfig
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-firewall-virtualipaddress-edit
-##|*NAME=Firewall: Virtual IP Address: Edit page
-##|*DESCR=Allow access to the 'Firewall: Virtual IP Address: Edit' page.
-##|*MATCH=firewall_virtual_ip_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("filter.inc");
-require("shaper.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_virtual_ip.php');
-}
-
-if (!is_array($config['virtualip']['vip'])) {
- $config['virtualip']['vip'] = array();
-}
-$a_vip = &$config['virtualip']['vip'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-function return_first_two_octets($ip) {
- $ip_split = explode(".", $ip);
- return $ip_split[0] . "." . $ip_split[1];
-}
-
-function find_last_used_vhid() {
- global $config, $g;
- $vhid = 0;
- foreach ($config['virtualip']['vip'] as $vip) {
- if ($vip['vhid'] > $vhid) {
- $vhid = $vip['vhid'];
- }
- }
- return $vhid;
-}
-
-if (isset($id) && $a_vip[$id]) {
- $pconfig['mode'] = $a_vip[$id]['mode'];
- $pconfig['vhid'] = $a_vip[$id]['vhid'];
- $pconfig['advskew'] = $a_vip[$id]['advskew'];
- $pconfig['advbase'] = $a_vip[$id]['advbase'];
- $pconfig['password'] = $a_vip[$id]['password'];
- $pconfig['range'] = $a_vip[$id]['range'];
- $pconfig['subnet'] = $a_vip[$id]['subnet'];
- $pconfig['subnet_bits'] = $a_vip[$id]['subnet_bits'];
- $pconfig['noexpand'] = $a_vip[$id]['noexpand'];
- $pconfig['descr'] = $a_vip[$id]['descr'];
- $pconfig['type'] = $a_vip[$id]['type'];
- $pconfig['interface'] = $a_vip[$id]['interface'];
- $pconfig['uniqid'] = $a_vip[$id]['interface'];
-} else {
- $lastvhid = find_last_used_vhid();
- $lastvhid++;
- $pconfig['vhid'] = $lastvhid;
- $pconfig['uniqid'] = uniqid();
-}
-
-if ($_POST) {
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "mode");
- $reqdfieldsn = array(gettext("Type"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if ($_POST['subnet']) {
- $_POST['subnet'] = trim($_POST['subnet']);
- }
-
- if ($_POST['subnet']) {
- if (!is_ipaddr($_POST['subnet'])) {
- $input_errors[] = gettext("A valid IP address must be specified.");
- } else {
- if (isset($id) && isset($a_vip[$id])) {
- $ignore_if = $a_vip[$id]['interface'];
- $ignore_mode = $a_vip[$id]['mode'];
- if (isset($a_vip[$id]['vhid'])) {
- $ignore_vhid = $a_vip[$id]['vhid'];
- }
- } else {
- $ignore_if = $_POST['interface'];
- $ignore_mode = $_POST['mode'];
- }
-
- if (!isset($ignore_vhid)) {
- $ignore_vhid = $_POST['vhid'];
- }
-
- if ($ignore_mode == 'carp') {
- $ignore_if .= "_vip{$ignore_vhid}";
- } else {
- $ignore_if .= "_virtualip{$id}";
- }
-
- if (is_ipaddr_configured($_POST['subnet'], $ignore_if)) {
- $input_errors[] = gettext("This IP address is being used by another interface or VIP.");
- }
-
- unset($ignore_if, $ignore_mode);
- }
- }
-
- $natiflist = get_configured_interface_with_descr();
- foreach ($natiflist as $natif => $natdescr) {
- if ($_POST['interface'] == $natif && (empty($config['interfaces'][$natif]['ipaddr']) && empty($config['interfaces'][$natif]['ipaddrv6']))) {
- $input_errors[] = gettext("The interface chosen for the VIP has no IPv4 or IPv6 address configured so it cannot be used as a parent for the VIP.");
- }
- }
-
- /* ipalias and carp should not use network or broadcast address */
- if ($_POST['mode'] == "ipalias" || $_POST['mode'] == "carp") {
- if (is_ipaddrv4($_POST['subnet']) && $_POST['subnet_bits'] != "32") {
- $network_addr = gen_subnet($_POST['subnet'], $_POST['subnet_bits']);
- $broadcast_addr = gen_subnet_max($_POST['subnet'], $_POST['subnet_bits']);
- } else if (is_ipaddrv6($_POST['subnet']) && $_POST['subnet_bits'] != "128") {
- $network_addr = gen_subnetv6($_POST['subnet'], $_POST['subnet_bits']);
- $broadcast_addr = gen_subnetv6_max($_POST['subnet'], $_POST['subnet_bits']);
- }
-
- if (isset($network_addr) && $_POST['subnet'] == $network_addr) {
- $input_errors[] = gettext("You cannot use the network address for this VIP");
- } else if (isset($broadcast_addr) && $_POST['subnet'] == $broadcast_addr) {
- $input_errors[] = gettext("You cannot use the broadcast address for this VIP");
- }
- }
-
- /* make sure new ip is within the subnet of a valid ip
- * on one of our interfaces (wan, lan optX)
- */
- switch ($_POST['mode']) {
- case 'carp':
- /* verify against reusage of vhids */
- $idtracker = 0;
- foreach ($config['virtualip']['vip'] as $vip) {
- if ($vip['vhid'] == $_POST['vhid'] && $vip['interface'] == $_POST['interface'] && $idtracker <> $id) {
- $input_errors[] = sprintf(gettext("VHID %s is already in use on interface %s. Pick a unique number on this interface."), $_POST['vhid'], convert_friendly_interface_to_friendly_descr($_POST['interface']));
- }
- $idtracker++;
- }
- if (empty($_POST['password'])) {
- $input_errors[] = gettext("You must specify a CARP password that is shared between the two VHID members.");
- }
-
- if ($_POST['interface'] == 'lo0') {
- $input_errors[] = gettext("For this type of vip localhost is not allowed.");
- } else if (strpos($_POST['interface'], '_vip')) {
- $input_errors[] = gettext("A CARP parent interface can only be used with IP Alias type Virtual IPs.");
- }
- break;
- case 'ipalias':
- if (strstr($_POST['interface'], "_vip")) {
- if (is_ipaddrv4($_POST['subnet'])) {
- $parent_ip = get_interface_ip($_POST['interface']);
- $parent_sn = get_interface_subnet($_POST['interface']);
- $subnet = gen_subnet($parent_ip, $parent_sn);
- } else if (is_ipaddrv6($_POST['subnet'])) {
- $parent_ip = get_interface_ipv6($_POST['interface']);
- $parent_sn = get_interface_subnetv6($_POST['interface']);
- $subnet = gen_subnetv6($parent_ip, $parent_sn);
- }
- if (isset($parent_ip) && !ip_in_subnet($_POST['subnet'], "{$subnet}/{$parent_sn}") &&
- !ip_in_interface_alias_subnet(link_carp_interface_to_parent($_POST['interface']), $_POST['subnet'])) {
- $cannot_find = $_POST['subnet'] . "/" . $_POST['subnet_bits'] ;
- $input_errors[] = sprintf(gettext("Sorry, we could not locate an interface with a matching subnet for %s. Please add an IP alias in this subnet on this interface."), $cannot_find);
- }
- unset($parent_ip, $parent_sn, $subnet);
- }
- break;
- default:
- if ($_POST['interface'] == 'lo0') {
- $input_errors[] = gettext("For this type of vip localhost is not allowed.");
- } else if (strpos($_POST['interface'], '_vip')) {
- $input_errors[] = gettext("A CARP parent interface can only be used with IP Alias type Virtual IPs.");
- }
- break;
- }
-
- if (!$input_errors) {
- $vipent = array();
-
- $vipent['mode'] = $_POST['mode'];
- $vipent['interface'] = $_POST['interface'];
-
- /* ProxyARP specific fields */
- if ($_POST['mode'] === "proxyarp") {
- if ($_POST['type'] == "range") {
- $vipent['range']['from'] = $_POST['range_from'];
- $vipent['range']['to'] = $_POST['range_to'];
-
- }
- $vipent['noexpand'] = isset($_POST['noexpand']);
- }
-
- /* CARP specific fields */
- if ($_POST['mode'] === "carp") {
- $vipent['vhid'] = $_POST['vhid'];
- $vipent['vhid'] = $_POST['uinqid'];
- $vipent['advskew'] = $_POST['advskew'];
- $vipent['advbase'] = $_POST['advbase'];
- $vipent['password'] = $_POST['password'];
- }
-
- /* Common fields */
- $vipent['descr'] = $_POST['descr'];
- if (isset($_POST['type'])) {
- $vipent['type'] = $_POST['type'];
- } else {
- $vipent['type'] = "single";
- }
-
- if ($vipent['type'] == "single" || $vipent['type'] == "network") {
- if (!isset($_POST['subnet_bits'])) {
- $vipent['subnet_bits'] = "32";
- } else {
- $vipent['subnet_bits'] = $_POST['subnet_bits'];
- }
- $vipent['subnet'] = $_POST['subnet'];
- }
-
- if (!isset($id)) {
- $id = count($a_vip);
- }
- if (file_exists("{$g['tmp_path']}/.firewall_virtual_ip.apply")) {
- $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.firewall_virtual_ip.apply"));
- } else {
- $toapplylist = array();
- }
-
- $toapplylist[$id] = $a_vip[$id];
- if (!empty($a_vip[$id])) {
- /* modify all virtual IP rules with this address */
- for ($i = 0; isset($config['nat']['rule'][$i]); $i++) {
- if ($config['nat']['rule'][$i]['destination']['address'] == $a_vip[$id]['subnet']) {
- $config['nat']['rule'][$i]['destination']['address'] = $vipent['subnet'];
- }
- }
- }
- $a_vip[$id] = $vipent;
-
- if (write_config()) {
- mark_subsystem_dirty('vip');
- file_put_contents("{$g['tmp_path']}/.firewall_virtual_ip.apply", serialize($toapplylist));
- }
- header("Location: firewall_virtual_ip.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Firewall"), gettext("Virtual IP Address"), gettext("Edit"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-function get_radio_value(obj) {
- for (i = 0; i < obj.length; i++) {
- if (obj[i].checked) {
- return obj[i].value;
- }
- }
- return null;
-}
-function set_note(noteMessage) {
- var note = document.getElementById("typenote");
- if (note.firstChild != null) {
- note.removeChild(note.firstChild);
- }
- if (noteMessage) {
- note.appendChild(noteMessage);
- }
-}
-function enable_change() {
- var carpnote = document.createTextNode("<?=gettext("This must be the network's subnet mask. It does not specify a CIDR range.");?>");
- var proxyarpnote = document.createTextNode("<?=gettext("This is a CIDR block of proxy ARP addresses.");?>");
- var ipaliasnote = document.createTextNode("<?=gettext("This must be the network's subnet mask. It does not specify a CIDR range.");?>");
-
- $mode = get_radio_value(document.iform.mode);
-
- document.iform.password.disabled = $mode != "carp";
- document.iform.vhid.disabled = $mode != "carp";
- document.iform.advskew.disabled = $mode != "carp";
- document.iform.advbase.disabled = $mode != "carp";
- document.iform.type.disabled = $mode in {"carp":1, "ipalias":1};
-
- if ($mode in {"carp":1, "ipalias":1}) {
- document.iform.type.selectedIndex = 0;// single-adress
- }
- switch ($mode) {
- case "carp" : set_note(carpnote); break;
- case "ipalias" : set_note(ipaliasnote); break;
- case "proxyarp": set_note(proxyarpnote); break;
- default: set_note(undefined);
- }
- typesel_change();
-}
-
-function typesel_change() {
- switch (document.iform.type.selectedIndex) {
- case 0: // single
- document.iform.subnet.disabled = 0;
- document.iform.subnet_bits.disabled = (get_radio_value(document.iform.mode) == "proxyarp") || (get_radio_value(document.iform.mode) == "other");
- document.iform.noexpand.disabled = 1;
- jQuery('#noexpandrow').css('display', 'none');
- break;
- case 1: // network
- document.iform.subnet.disabled = 0;
- document.iform.subnet_bits.disabled = 0;
- document.iform.noexpand.disabled = 0;
- jQuery('#noexpandrow').css('display', '');
- //document.iform.range_from.disabled = 1;
- //document.iform.range_to.disabled = 1;
- break;
- case 2: // range
- document.iform.subnet.disabled = 1;
- document.iform.subnet_bits.disabled = 1;
- document.iform.noexpand.disabled = 1;
- jQuery('#noexpandrow').css('display', 'none');
- //document.iform.range_from.disabled = 0;
- //document.iform.range_to.disabled = 0;
- break;
- case 3: // IP alias
- document.iform.subnet.disabled = 1;
- document.iform.subnet_bits.disabled = 0;
- document.iform.noexpand.disabled = 1;
- jQuery('#noexpandrow').css('display', 'none');
- //document.iform.range_from.disabled = 0;
- //document.iform.range_to.disabled = 0;
- break;
- }
-}
-//]]>
-</script>
-
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="firewall_virtual_ip_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="virtual IP edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit Virtual IP");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Type");?></td>
- <td width="78%" class="vtable">
- <input name="mode" type="radio" onclick="enable_change()" value="ipalias"
- <?php if ($pconfig['mode'] == "ipalias") echo "checked=\"checked\"";?> /> <?=gettext("IP Alias");?>
- <input name="mode" type="radio" onclick="enable_change()" value="carp"
- <?php if ($pconfig['mode'] == "carp") echo "checked=\"checked\"";?> /> <?=gettext("CARP"); ?>
- <input name="mode" type="radio" onclick="enable_change()" value="proxyarp"
- <?php if ($pconfig['mode'] == "proxyarp") echo "checked=\"checked\"";?> /> <?=gettext("Proxy ARP"); ?>
- <input name="mode" type="radio" onclick="enable_change()" value="other"
- <?php if ($pconfig['mode'] == "other") echo "checked=\"checked\"";?> /> <?=gettext("Other");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface");?></td>
- <td width="78%" class="vtable">
- <select name="interface" class="formselect">
- <?php
- $interfaces = get_configured_interface_with_descr(false, true);
- $carplist = get_configured_carp_interface_list();
- foreach ($carplist as $cif => $carpip) {
- $interfaces[$cif] = $carpip . ' (' . get_vip_descr($carpip) . ')';
- }
- $interfaces['lo0'] = 'Localhost';
- foreach ($interfaces as $iface => $ifacename): ?>
- <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
- <?php
- endforeach;
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("IP Address(es)");?></td>
- <td class="vtable">
- <table border="0" cellspacing="0" cellpadding="0" summary="ip addresses">
- <tr>
- <td><?=gettext("Type:");?>&nbsp;&nbsp;</td>
- <td>
- <select name="type" class="formselect" onchange="typesel_change()">
- <option value="single" <?php if ((!$pconfig['range'] && $pconfig['subnet_bits'] == 32) || (!isset($pconfig['subnet']))) echo "selected=\"selected\""; ?>>
- <?=gettext("Single address");?>
- </option>
- <option value="network" <?php if (!$pconfig['range'] && $pconfig['subnet_bits'] != 32 && isset($pconfig['subnet'])) echo "selected=\"selected\""; ?>>
- <?=gettext("Network");?>
- </option>
- <!-- XXX: Billm, don't let anyone choose this until NAT configuration screens are ready for it <option value="range" <?php if ($pconfig['range']) echo "selected=\"selected\""; ?>>
- Range</option> -->
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
- <td>
- <input name="subnet" type="text" class="formfld unknown ipv4v6" id="subnet" size="28" value="<?=htmlspecialchars($pconfig['subnet']);?>" />
- /
- <select name="subnet_bits" class="formselect ipv4v6" id="select">
- <?php for ($i = 128; $i >= 1; $i--): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['subnet_bits']) echo "selected=\"selected\""; ?>>
- <?=$i;?>
- </option>
- <?php endfor; ?>
- </select>
- <i id="typenote"></i>
- </td>
- </tr>
- <tr id="noexpandrow">
- <td><?=gettext("Expansion:");?>&nbsp;&nbsp;</td>
- <td>
- <input name="noexpand" type="checkbox" class="formfld unknown" id="noexpand" <?php echo (isset($pconfig['noexpand'])) ? "checked=\"checked\"" : "" ; ?> />
- Disable expansion of this entry into IPs on NAT lists (e.g. 192.168.1.0/24 expands to 256 entries.)
- </td>
- </tr>
- <?php
- /*
- <tr>
- <td>Range:&nbsp;&nbsp;</td>
- <td><input name="range_from" type="text" class="formfld unknown" id="range_from" size="28" value="<?=htmlspecialchars($pconfig['range']['from']);?>" />
--
- <input name="range_to" type="text" class="formfld unknown" id="range_to" size="28" value="<?=htmlspecialchars($pconfig['range']['to']);?>" />
- </td>
- </tr>
- */
-?>
- </table>
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncellreq"><?=gettext("Virtual IP Password");?></td>
- <td class="vtable"><input type='password' name='password' value="<?=htmlspecialchars($pconfig['password']);?>" />
- <br /><?=gettext("Enter the VHID group password.");?>
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncellreq"><?=gettext("VHID Group");?></td>
- <td class="vtable">
- <select id='vhid' name='vhid'>
- <?php for ($i = 1; $i <= 255; $i++): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['vhid']) echo "selected=\"selected\""; ?>>
- <?=$i;?>
- </option>
- <?php endfor; ?>
- </select>
- <br /><?=gettext("Enter the VHID group that the machines will share");?>
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncellreq"><?=gettext("Advertising Frequency");?></td>
- <td class="vtable">
- Base:
- <select id='advbase' name='advbase'>
- <?php for ($i = 1; $i <= 254; $i++): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['advbase']) echo "selected=\"selected\""; ?>>
- <?=$i;?>
- </option>
- <?php endfor; ?>
- </select>
- Skew:
- <select id='advskew' name='advskew'>
- <?php for ($i = 0; $i <= 254; $i++): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['advskew']) echo "selected=\"selected\""; ?>>
- <?=$i;?>
- </option>
- <?php endfor; ?>
- </select>
- <br /><br />
- <?=gettext("The frequency that this machine will advertise. 0 means usually master. Otherwise the lowest combination of both values in the cluster determines the master.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_vip[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- <input name="uniqid" type="hidden" value="<?=$pconfig['uniqid'];?>" />
- </td>
- </tr>
- <tr>
- <td colspan="4">
- <span class="vexpl">
- <span class="red">
- <b><?=gettext("Note:");?><br /></b>
- </span>&nbsp;&nbsp;
- <?=gettext("Proxy ARP and Other type Virtual IPs cannot be bound to by anything running on the firewall, such as IPsec, OpenVPN, etc. Use a CARP or IP Alias type address for these cases.");?>
- <br /><br />&nbsp;&nbsp;&nbsp;<?=gettext("For more information on CARP and the above values, visit the OpenBSD ");?><a href='http://www.openbsd.org/faq/pf/carp.html'> <?=gettext("CARP FAQ"); ?></a>.
- </span>
- </td>
- </tr>
- </table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
-enable_change();
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/getserviceproviders.php b/usr/local/www/getserviceproviders.php
deleted file mode 100644
index cb456aa..0000000
--- a/usr/local/www/getserviceproviders.php
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-/*
- getserviceproviders.php
- Copyright (C) 2010 Vinicius Coque <vinicius.coque@bluepex.com>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: ajax
-*/
-
-##|+PRIV
-##|*IDENT=page-getserviceproviders
-##|*NAME=AJAX: Get Service Providers
-##|*DESCR=Allow access to the 'AJAX: Service Providers' page.
-##|*MATCH=getserviceproviders.php*
-##|-PRIV
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-
-$serviceproviders_xml = "/usr/local/share/mobile-broadband-provider-info/serviceproviders.xml";
-$serviceproviders_contents = file_get_contents($serviceproviders_xml);
-$serviceproviders_attr = xml2array($serviceproviders_contents, 1, "attr");
-
-$serviceproviders = &$serviceproviders_attr['serviceproviders']['country'];
-
-function get_country_providers($country) {
- global $serviceproviders;
- foreach ($serviceproviders as $sp) {
- if ($sp['attr']['code'] == strtolower($country)) {
- return is_array($sp['provider'][0]) ? $sp['provider'] : array($sp['provider']);
- }
- }
- return $provider_list;
-}
-
-function country_list() {
- global $serviceproviders;
- $country_list = get_country_name("ALL");
- foreach ($serviceproviders as $sp) {
- foreach ($country_list as $country) {
- if (strtoupper($sp['attr']['code']) == $country['code']) {
- echo $country['name'] . ":" . $country['code'] . "\n";
- }
- }
- }
-}
-
-function providers_list($country) {
- $serviceproviders = get_country_providers($country);
- foreach ($serviceproviders as $sp) {
- echo $sp['name']['value'] . "\n";
- }
-}
-
-function provider_plan_data($country, $provider, $connection) {
- header("Content-type: application/xml;");
- echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
- echo "<connection>\n";
- $serviceproviders = get_country_providers($country);
- foreach ($serviceproviders as $sp) {
- if (strtolower($sp['name']['value']) == strtolower($provider)) {
- if (strtoupper($connection) == "CDMA") {
- $conndata = $sp['cdma'];
- } else {
- if (!is_array($sp['gsm']['apn'][0])) {
- $conndata = $sp['gsm']['apn'];
- } else {
- foreach ($sp['gsm']['apn'] as $apn) {
- if ($apn['attr']['value'] == $connection) {
- $conndata = $apn;
- break;
- }
- }
- }
- }
- if (is_array($conndata)) {
- echo "<apn>" . $connection . "</apn>\n";
- echo "<username>" . $conndata['username']['value'] . "</username>\n";
- echo "<password>" . $conndata['password']['value'] . "</password>\n";
-
- $dns_arr = is_array($conndata['dns'][0]) ? $conndata['dns'] : array($conndata['dns']);
- foreach ($dns_arr as $dns) {
- echo '<dns>' . $dns['value'] . "</dns>\n";
- }
- }
- break;
- }
- }
- echo "</connection>";
-}
-
-function provider_plans_list($country, $provider) {
- $serviceproviders = get_country_providers($country);
- foreach ($serviceproviders as $sp) {
- if (strtolower($sp['name']['value']) == strtolower($provider)) {
- if (array_key_exists('gsm', $sp)) {
- if (array_key_exists('attr', $sp['gsm']['apn'])) {
- $name = ($sp['gsm']['apn']['name'] ? $sp['gsm']['apn']['name'] : $sp['name']['value']);
- echo $name . ":" . $sp['gsm']['apn']['attr']['value'];
- } else {
- foreach ($sp['gsm']['apn'] as $apn_info) {
- $name = ($apn_info['name']['value'] ? $apn_info['name']['value'] : $apn_info['gsm']['apn']['name']);
- echo $name . ":" . $apn_info['attr']['value'] . "\n";
- }
- }
- }
- if (array_key_exists('cdma', $sp)) {
- $name = $sp['cdma']['name']['value'] ? $sp['cdma']['name']['value']:$sp['name']['value'];
- echo $name . ":" . "CDMA";
- }
- }
- }
-}
-
-$_GET_OR_POST = ($_SERVER['REQUEST_METHOD'] === 'POST') ? $_POST : $_GET;
-
-if (isset($_GET_OR_POST['country']) && !isset($_GET_OR_POST['provider'])) {
- providers_list($_GET_OR_POST['country']);
-} elseif (isset($_GET_OR_POST['country']) && isset($_GET_OR_POST['provider'])) {
- if (isset($_GET_OR_POST['plan'])) {
- provider_plan_data($_GET_OR_POST['country'], $_GET_OR_POST['provider'], $_GET_OR_POST['plan']);
- } else {
- provider_plans_list($_GET_OR_POST['country'], $_GET_OR_POST['provider']);
- }
-} else {
- country_list();
-}
-?>
diff --git a/usr/local/www/getstats.php b/usr/local/www/getstats.php
deleted file mode 100644
index 886114b..0000000
--- a/usr/local/www/getstats.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/*
- getstats.php
- Copyright (C) 2009 Bill Marquette
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: ajax
-*/
-
-##|+PRIV
-##|*IDENT=page-getstats
-##|*NAME=AJAX: Get Stats
-##|*DESCR=Allow access to the 'AJAX: Get Stats' page.
-##|*MATCH=getstats.php*
-##|-PRIV
-
-header("Last-Modified: " . gmdate("D, j M Y H:i:s") . " GMT");
-header("Expires: " . gmdate("D, j M Y H:i:s", time()) . " GMT");
-header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP/1.1
-header("Pragma: no-cache"); // HTTP/1.0
-
-require_once("guiconfig.inc");
-include_once("includes/functions.inc.php");
-
-echo get_stats();
-
-?>
diff --git a/usr/local/www/graph.php b/usr/local/www/graph.php
deleted file mode 100755
index d637836..0000000
--- a/usr/local/www/graph.php
+++ /dev/null
@@ -1,408 +0,0 @@
-<?php
-/*
- graph.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004-2006 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
- and Jonathan Watt <jwatt@jwatt.org>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: graph
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-interfacetraffic
-##|*NAME=Diagnostics: Interface Traffic page
-##|*DESCR=Allow access to the 'Diagnostics: Interface Traffic' page.
-##|*MATCH=graph.php*
-##|-PRIV
-
-require("globals.inc");
-require("guiconfig.inc");
-
-header("Last-Modified: " . gmdate("D, j M Y H:i:s") . " GMT");
-header("Expires: " . gmdate("D, j M Y H:i:s", time()) . " GMT");
-header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP/1.1
-header("Pragma: no-cache"); // HTTP/1.0
-header("Content-type: image/svg+xml");
-
-/********** HTTP GET Based Conf ***********/
-$ifnum = @$_GET["ifnum"]; // BSD / SNMP interface name / number
-$ifnum = get_real_interface($ifnum);
-$ifname = @$_GET["ifname"]?$_GET["ifname"]:"Interface $ifnum"; //Interface name that will be showed on top right of graph
-
-/********* Other conf *******/
-if (isset($config["widgets"]["trafficgraphs"]["scale_type"])) {
- $scale_type = $config["widgets"]["trafficgraphs"]["scale_type"];
-} else {
- $scale_type = "up";
-}
-
-$nb_plot=120; //NB plot in graph
-if ($_GET["timeint"]) {
- $time_interval = $_GET["timeint"]; //Refresh time Interval
-} else {
- $time_interval = 3;
-}
-
-if ($_GET["initdelay"]) {
- $init_delay = $_GET["initdelay"]; //Initial Delay
-} else {
- $init_delay = 3;
-}
-
-//SVG attributes
-$attribs['axis']='fill="black" stroke="black"';
-$attribs['in']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="7"';
-$attribs['out']='fill="#000000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="7"';
-$attribs['graph_in']='fill="none" stroke="#FF0000" stroke-opacity="0.8"';
-$attribs['graph_out']='fill="none" stroke="#000000" stroke-opacity="0.8"';
-$attribs['legend']='fill="black" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4"';
-$attribs['graphname']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="8"';
-$attribs['grid_txt']='fill="gray" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="6"';
-$attribs['grid']='stroke="gray" stroke-opacity="0.5"';
-$attribs['switch_unit']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4" text-decoration="underline"';
-$attribs['switch_scale']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4" text-decoration="underline"';
-$attribs['error']='fill="blue" font-family="Arial" font-size="4"';
-$attribs['collect_initial']='fill="gray" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4"';
-
-//Error text if we cannot fetch data : depends on which method is used
-$error_text = "Cannot get data about interface " . htmlspecialchars($ifnum);
-
-$height=100; //SVG internal height : do not modify
-$width=200; //SVG internal width : do not modify
-
-$fetch_link = "ifstats.php?if=" . htmlspecialchars($ifnum);
-
-/* check for custom theme colors */
-if (file_exists("/usr/local/www/themes/{$g['theme']}/graph.php")) {
- $themetxt = file_get_contents("/usr/local/www/themes/{$g['theme']}/graph.php");
- eval($themetxt);
-}
-
-/********* Graph DATA **************/
-print('<?xml version="1.0" encoding="UTF-8"?>' . "\n");?>
-<svg width="100%" height="100%" viewBox="0 0 <?=$width?> <?=$height?>" preserveAspectRatio="none" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" onload="init(evt)">
- <g id="graph">
- <rect id="bg" x1="0" y1="0" width="100%" height="100%" fill="white"/>
- <line id="axis_x" x1="0" y1="0" x2="0" y2="100%" <?=$attribs['axis']?>/>
- <line id="axis_y" x1="0" y1="100%" x2="100%" y2="100%" <?=$attribs['axis']?>/>
- <path id="graph_out" d="M0 <?=$height?> L 0 <?=$height?>" <?=$attribs['graph_out']?>/>
- <path id="graph_in" d="M0 <?=$height?> L 0 <?=$height?>" <?=$attribs['graph_in']?>/>
- <path id="grid" d="M0 <?=$height/4*1?> L <?=$width?> <?=$height/4*1?> M0 <?=$height/4*2?> L <?=$width?> <?=$height/4*2?> M0 <?=$height/4*3?> L <?=$width?> <?=$height/4*3?>" <?=$attribs['grid']?>/>
- <text id="grid_txt1" x="<?=$width?>" y="<?=$height/4*1?>" <?=$attribs['grid_txt']?> text-anchor="end"> </text>
- <text id="grid_txt2" x="<?=$width?>" y="<?=$height/4*2?>" <?=$attribs['grid_txt']?> text-anchor="end"> </text>
- <text id="grid_txt3" x="<?=$width?>" y="<?=$height/4*3?>" <?=$attribs['grid_txt']?> text-anchor="end"> </text>
- <text id="graph_in_lbl" x="5" y="8" <?=$attribs['in']?>><?=gettext("In"); ?></text>
- <text id="graph_out_lbl" x="5" y="16" <?=$attribs['out']?>><?=gettext("Out"); ?></text>
- <text id="graph_in_txt" x="20" y="8" <?=$attribs['in']?>> </text>
- <text id="graph_out_txt" x="20" y="16" <?=$attribs['out']?>> </text>
- <text id="ifname" x="<?=$width?>" y="8" <?=$attribs['graphname']?> text-anchor="end"><?=htmlspecialchars($ifname)?></text>
- <text id="switch_unit" x="<?=$width*0.55?>" y="5" <?=$attribs['switch_unit']?>><?=gettext("Switch to bytes/s"); ?></text>
- <text id="switch_scale" x="<?=$width*0.55?>" y="11" <?=$attribs['switch_scale']?>><?=gettext("AutoScale"); ?> (<?=$scale_type?>)</text>
- <text id="date" x="<?=$width*0.33?>" y="5" <?=$attribs['legend']?>> </text>
- <text id="time" x="<?=$width*0.33?>" y="11" <?=$attribs['legend']?>> </text>
- <text id="graphlast" x="<?=$width*0.55?>" y="17" <?=$attribs['legend']?>><?=gettext("Graph shows last"); ?> <?=$time_interval*$nb_plot?> <?=gettext("seconds"); ?></text>
- <polygon id="axis_arrow_x" <?=$attribs['axis']?> points="<?=($width) . "," . ($height)?> <?=($width-2) . "," . ($height-2)?> <?=($width-2) . "," . $height?>"/>
- <text id="error" x="<?=$width*0.5?>" y="<?=$height*0.5?>" visibility="hidden" <?=$attribs['error']?> text-anchor="middle"><?=$error_text?></text>
- <text id="collect_initial" x="<?=$width*0.5?>" y="<?=$height*0.5?>" visibility="hidden" <?=$attribs['collect_initial']?> text-anchor="middle"><?=gettext("Collecting initial data, please wait"); ?>...</text>
- </g>
- <script type="text/ecmascript">
- <![CDATA[
-
-/**
- * getURL is a proprietary Adobe function, but it's simplicity has made it very
- * popular. If getURL is undefined we spin our own by wrapping XMLHttpRequest.
- */
-if (typeof getURL == 'undefined') {
- getURL = function(url, callback) {
- if (!url) {
- throw '<?=gettext("No URL for getURL"); ?>';
- }
-
- try {
- if (typeof callback.operationComplete == 'function') {
- callback = callback.operationComplete;
- }
- } catch (e) {}
- if (typeof callback != 'function') {
- throw '<?=gettext("No callback function for getURL"); ?>';
- }
-
- var http_request = null;
- if (typeof XMLHttpRequest != 'undefined') {
- http_request = new XMLHttpRequest();
- } else if (typeof ActiveXObject != 'undefined') {
- try {
- http_request = new ActiveXObject('Msxml2.XMLHTTP');
- } catch (e) {
- try {
- http_request = new ActiveXObject('Microsoft.XMLHTTP');
- } catch (e) {}
- }
- }
- if (!http_request) {
- throw '<?=gettext("Both getURL and XMLHttpRequest are undefined"); ?>';
- }
-
- http_request.onreadystatechange = function() {
- if (http_request.readyState == 4) {
- callback( { success : true,
- content : http_request.responseText,
- contentType : http_request.getResponseHeader("Content-Type") } );
- }
- }
- http_request.open('GET', url, true);
- http_request.send(null);
- }
-}
-
-var SVGDoc = null;
-var last_ifin = 0;
-var last_ifout = 0;
-var last_ugmt = 0;
-var max = 0;
-var plot_in = new Array();
-var plot_out = new Array();
-
-var max_num_points = <?=$nb_plot?>; // maximum number of plot data points
-var step = <?=$width?> / max_num_points ;
-var unit = 'bits';
-var scale_type = '<?=$scale_type?>';
-
-function init(evt) {
- SVGDoc = evt.target.ownerDocument;
- SVGDoc.getElementById("switch_unit").addEventListener("mousedown", switch_unit, false);
- SVGDoc.getElementById("switch_scale").addEventListener("mousedown", switch_scale, false);
-
- fetch_data();
-}
-
-function switch_unit(event) {
- SVGDoc.getElementById('switch_unit').firstChild.data = '<?=gettext("Switch to"); ?> ' + unit + '/s';
- unit = (unit == 'bits') ? 'bytes' : 'bits';
-}
-
-function switch_scale(event) {
- scale_type = (scale_type == 'up') ? '<?=gettext("follow"); ?>' : '<?=gettext("up"); ?>';
- SVGDoc.getElementById('switch_scale').firstChild.data = 'AutoScale (' + scale_type + ')';
-}
-
-function fetch_data() {
- getURL('<?=$fetch_link?>', plot_data);
-}
-
-function plot_data(obj) {
- // Show datetimelegend
- var now = new Date();
- var time = LZ(now.getHours()) + ":" + LZ(now.getMinutes()) + ":" + LZ(now.getSeconds());
- SVGDoc.getElementById('time').firstChild.data = time;
- var date = (now.getMonth()+1) + "/" + now.getDate() + "/" + now.getFullYear();
- SVGDoc.getElementById('date').firstChild.data = date;
-
- if (!obj.success) {
- return handle_error(); // getURL failed to get data
- }
-
- var t = obj.content.split("|");
- var ugmt = parseFloat(t[0]); // ugmt is an unixtimestamp style
- var ifin = parseInt(t[1], 10); // number of bytes received by the interface
- var ifout = parseInt(t[2], 10); // number of bytes sent by the interface
- var scale;
-
- if (!isNumber(ifin) || !isNumber(ifout)) {
- return handle_error();
- }
-
- var diff_ugmt = ugmt - last_ugmt;
- var diff_ifin = ifin - last_ifin;
- var diff_ifout = ifout - last_ifout;
-
- if (diff_ugmt == 0) {
- diff_ugmt = 1; /* avoid division by zero */
- }
-
- last_ugmt = ugmt;
- last_ifin = ifin;
- last_ifout = ifout;
- var graphTimerId = 0;
- switch (plot_in.length) {
- case 0:
- SVGDoc.getElementById("collect_initial").setAttributeNS(null, 'visibility', 'visible');
- plot_in[0] = diff_ifin / diff_ugmt;
- plot_out[0] = diff_ifout / diff_ugmt;
- setTimeout('fetch_data()', <?=1000*($time_interval + $init_delay)?>);
- return;
- case 1:
- SVGDoc.getElementById("collect_initial").setAttributeNS(null, 'visibility', 'hidden');
- break;
- case max_num_points:
- // shift plot to left if the maximum number of plot points has been reached
- var i = 0;
- while (i < max_num_points) {
- plot_in[i] = plot_in[i+1];
- plot_out[i] = plot_out[++i];
- }
- plot_in.length--;
- plot_out.length--;
- }
-
- plot_in[plot_in.length] = diff_ifin / diff_ugmt;
- plot_out[plot_out.length]= diff_ifout / diff_ugmt;
- var index_plot = plot_in.length - 1;
-
- SVGDoc.getElementById('graph_in_txt').firstChild.data = formatSpeed(plot_in[index_plot], unit);
- SVGDoc.getElementById('graph_out_txt').firstChild.data = formatSpeed(plot_out[index_plot], unit);
-
- /* determine peak for sensible scaling */
- if (scale_type == 'up') {
- if (plot_in[index_plot] > max) {
- max = plot_in[index_plot];
- }
- if (plot_out[index_plot] > max) {
- max = plot_out[index_plot];
- }
- } else if (scale_type == 'follow') {
- i = 0;
- max = 0;
- while (i < plot_in.length) {
- if (plot_in[i] > max) {
- max = plot_in[i];
- }
- if (plot_out[i] > max) {
- max = plot_out[i];
- }
- i++;
- }
- }
-
- var rmax; // max, rounded up
-
- if (unit == 'bits') {
- /* round up max, such that
- 100 kbps -> 200 kbps -> 400 kbps -> 800 kbps -> 1 Mbps -> 2 Mbps -> ... */
- rmax = 12500;
- i = 0;
- while (max > rmax) {
- i++;
- if (i && (i % 4 == 0)) {
- rmax *= 1.25;
- } else {
- rmax *= 2;
- }
- }
- } else {
- /* round up max, such that
- 10 KB/s -> 20 KB/s -> 40 KB/s -> 80 KB/s -> 100 KB/s -> 200 KB/s -> 400 KB/s -> 800 KB/s -> 1 MB/s ... */
- rmax = 10240;
- i = 0;
- while (max > rmax) {
- i++;
- if (i && (i % 4 == 0)) {
- rmax *= 1.25;
- } else {
- rmax *= 2;
- }
-
- if (i == 8) {
- rmax *= 1.024;
- }
- }
- }
-
- scale = <?=$height?> / rmax;
-
- /* change labels accordingly */
- SVGDoc.getElementById('grid_txt1').firstChild.data = formatSpeed(3*rmax/4, unit);
- SVGDoc.getElementById('grid_txt2').firstChild.data = formatSpeed(2*rmax/4, unit);
- SVGDoc.getElementById('grid_txt3').firstChild.data = formatSpeed(rmax/4, unit);
-
- var path_in = "M 0 " + (<?=$height?> - (plot_in[0] * scale));
- var path_out = "M 0 " + (<?=$height?> - (plot_out[0] * scale));
- for (i = 1; i < plot_in.length; i++) {
- var x = step * i;
- var y_in = <?=$height?> - (plot_in[i] * scale);
- var y_out = <?=$height?> - (plot_out[i] * scale);
- path_in += " L" + x + " " + y_in;
- path_out += " L" + x + " " + y_out;
- }
-
- SVGDoc.getElementById('error').setAttributeNS(null, 'visibility', 'hidden');
- SVGDoc.getElementById('graph_in').setAttributeNS(null, 'd', path_in);
- SVGDoc.getElementById('graph_out').setAttributeNS(null, 'd', path_out);
-
- setTimeout('fetch_data()', <?=1000*$time_interval?>);
-}
-
-function handle_error() {
- SVGDoc.getElementById("error").setAttributeNS(null, 'visibility', 'visible');
- setTimeout('fetch_data()', <?=1000*$time_interval?>);
-}
-
-function isNumber(a) {
- return typeof a == 'number' && isFinite(a);
-}
-
-function formatSpeed(speed, unit) {
- if (unit == 'bits') {
- return formatSpeedBits(speed);
- }
- if (unit == 'bytes') {
- return formatSpeedBytes(speed);
- }
-}
-
-function formatSpeedBits(speed) {
- // format speed in bits/sec, input: bytes/sec
- if (speed < 125000) {
- return Math.round(speed / 125) + " <?=gettext("Kbps"); ?>";
- }
- if (speed < 125000000) {
- return Math.round(speed / 1250)/100 + " <?=gettext("Mbps"); ?>";
- }
- // else
- return Math.round(speed / 1250000)/100 + " <?=gettext("Gbps"); ?>"; /* wow! */
-}
-
-function formatSpeedBytes(speed) {
- // format speed in bytes/sec, input: bytes/sec
- if (speed < 1048576) {
- return Math.round(speed / 10.24)/100 + " <?=gettext("KB/s"); ?>";
- }
- if (speed < 1073741824) {
- return Math.round(speed / 10485.76)/100 + " <?=gettext("MB/s"); ?>";
- }
- // else
- return Math.round(speed / 10737418.24)/100 + " <?=gettext("GB/s"); ?>"; /* wow! */
-}
-
-function LZ(x) {
- return (x < 0 || x > 9 ? "" : "0") + x;
-}
-
- ]]>
- </script>
-</svg>
diff --git a/usr/local/www/graph_cpu.php b/usr/local/www/graph_cpu.php
deleted file mode 100644
index 80d97f1..0000000
--- a/usr/local/www/graph_cpu.php
+++ /dev/null
@@ -1,211 +0,0 @@
-<?php
-/*
- $Id$
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
- and Jonathan Watt <jwatt@jwatt.org>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: graph
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-cpuutilization
-##|*NAME=Diagnostics: CPU Utilization page
-##|*DESCR=Allow access to the 'Diagnostics: CPU Utilization' page.
-##|*MATCH=graph_cpu.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-
-header("Last-Modified: " . gmdate("D, j M Y H:i:s") . " GMT");
-header("Expires: " . gmdate("D, j M Y H:i:s", time()) . " GMT");
-header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP/1.1
-header("Pragma: no-cache"); // HTTP/1.0
-header("Content-type: image/svg+xml");
-
-/********* Other conf *******/
-
-$nb_plot = 120; // maximum number of data points to plot in the graph
-$fetch_link = "stats.php?stats=cpu";
-
-//SVG attributes
-$attribs['axis']='fill="black" stroke="black"';
-$attribs['cpu']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="7"';
-$attribs['graph_cpu']='fill="none" stroke="#FF0000" stroke-opacity="0.8"';
-$attribs['legend']='fill="black" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4"';
-$attribs['grid_txt']='fill="gray" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="6"';
-$attribs['grid']='stroke="gray" stroke-opacity="0.5"';
-$attribs['error']='fill="blue" font-family="Arial" font-size="4"';
-$attribs['collect_initial']='fill="gray" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4"';
-
-$height=100; // SVG internal height : do not modify
-$width=200; // SVG internal width : do not modify
-
-/********* Graph DATA **************/
-print('<?xml version="1.0" encoding="UTF-8"?>' . "\n");?>
-<svg width="100%" height="100%" viewBox="0 0 <?=$width?> <?=$height?>" preserveAspectRatio="none" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" onload="init(evt);">
- <g id="graph">
- <rect id="bg" x1="0" y1="0" width="100%" height="100%" fill="white"/>
- <line id="axis_x" x1="0" y1="0" x2="0" y2="100%" <?=$attribs['axis']?>/>
- <line id="axis_y" x1="0" y1="100%" x2="100%" y2="100%" <?=$attribs['axis']?>/>
- <polygon id="axis_arrow_x" <?=$attribs['axis']?> points="<?=($width) . "," . ($height)?> <?=($width-2) . "," . ($height-2)?> <?=($width-2) . "," . $height?>"/>
- <path id="graph_cpu" d="" <?=$attribs['graph_cpu']?>/>
- <path id="grid" d="M0 <?=$height/4*1?> L <?=$width?> <?=$height/4*1?> M0 <?=$height/4*2?> L <?=$width?> <?=$height/4*2?> M0 <?=$height/4*3?> L <?=$width?> <?=$height/4*3?>" <?=$attribs['grid']?>/>
- <text id="grid_txt1" x="100%" y="25%" <?=$attribs['grid_txt']?> text-anchor="end">75%</text>
- <text id="grid_txt2" x="100%" y="50%" <?=$attribs['grid_txt']?> text-anchor="end">50%</text>
- <text id="grid_txt3" x="100%" y="75%" <?=$attribs['grid_txt']?> text-anchor="end">25%</text>
- <text id="graph_cpu_txt" x="4" y="8" <?=$attribs['cpu']?>> </text>
- <text id="error" x="50%" y="50%" visibility="hidden" <?=$attribs['error']?> text-anchor="middle"><?=gettext("Cannot get CPU load"); ?></text>
- <text id="collect_initial" x="50%" y="50%" visibility="hidden" <?=$attribs['collect_initial']?> text-anchor="middle"><?=gettext("Collecting initial data, please wait"); ?>...</text>
- </g>
- <script type="text/ecmascript">
- <![CDATA[
-
-/**
- * getURL is a proprietary Adobe function, but it's simplicity has made it very
- * popular. If getURL is undefined we spin our own by wrapping XMLHttpRequest.
- */
-if (typeof getURL == 'undefined') {
- getURL = function(url, callback) {
- if (!url) {
- throw '<?=gettext("No URL for getURL"); ?>';
- }
-
- try {
- if (typeof callback.operationComplete == 'function') {
- callback = callback.operationComplete;
- }
- } catch (e) {}
- if (typeof callback != 'function') {
- throw '<?=gettext("No callback function for getURL"); ?>';
- }
-
- var http_request = null;
- if (typeof XMLHttpRequest != 'undefined') {
- http_request = new XMLHttpRequest();
- } else if (typeof ActiveXObject != 'undefined') {
- try {
- http_request = new ActiveXObject('Msxml2.XMLHTTP');
- } catch (e) {
- try {
- http_request = new ActiveXObject('Microsoft.XMLHTTP');
- } catch (e) {}
- }
- }
- if (!http_request) {
- throw '<?=gettext("Both getURL and XMLHttpRequest are undefined"); ?>';
- }
-
- http_request.onreadystatechange = function() {
- if (http_request.readyState == 4) {
- callback( { success : true,
- content : http_request.responseText,
- contentType : http_request.getResponseHeader("Content-Type") } );
- }
- }
- http_request.open('GET', url, true);
- http_request.send(null);
- }
-}
-
-var SVGDoc = null;
-var last_cpu_total = 0;
-var last_cpu_idle = 0;
-var diff_cpu_total = 0;
-var diff_cpu_idle = 0;
-var cpu_data = new Array();
-
-var max_num_points = <?=$nb_plot?>; // maximum number of plot data points
-var step = <?=$width?> / max_num_points; // plot X division size
-var scale = <?=$height?> / 100;
-
-function init(evt) {
- SVGDoc = evt.target.ownerDocument;
- fetch_data();
-}
-
-function fetch_data() {
- getURL('<?=$fetch_link?>', plot_cpu_data);
-}
-
-function plot_cpu_data(obj) {
- if (!obj.success) {
- return handle_error(); // getURL failed to get current CPU load data
- }
-
- var cpu = parseInt(obj.content);
- if (!isNumber(cpu)) {
- return handle_error();
- }
-
- switch (cpu_data.length) {
- case 0:
- SVGDoc.getElementById("collect_initial").setAttributeNS(null, 'visibility', 'visible');
- cpu_data[0] = cpu;
- fetch_data();
- return;
- case 1:
- SVGDoc.getElementById("collect_initial").setAttributeNS(null, 'visibility', 'hidden');
- break;
- case max_num_points:
- // shift plot to left if the maximum number of plot points has been reached
- var i = 0;
- while (i < max_num_points) {
- cpu_data[i] = cpu_data[++i];
- }
- --cpu_data.length;
- }
-
- cpu_data[cpu_data.length] = cpu;
-
- var path_data = "M 0 " + (<?=$height?> - (cpu_data[0] * scale));
- for (var i = 1; i < cpu_data.length; ++i) {
- var x = step * i;
- var y_cpu = <?=$height?> - (cpu_data[i] * scale);
- path_data += " L" + x + " " + y_cpu;
- }
-
- SVGDoc.getElementById("error").setAttributeNS(null, 'visibility', 'hidden');
- SVGDoc.getElementById('graph_cpu_txt').firstChild.data = cpu + '%';
- SVGDoc.getElementById('graph_cpu').setAttributeNS(null, "d", path_data);
-
- fetch_data();
-}
-
-function handle_error() {
- SVGDoc.getElementById("error").setAttributeNS(null, 'visibility', 'visible');
- fetch_data();
-}
-
-function isNumber(a) {
- return typeof a == 'number' && isFinite(a);
-}
-
- ]]>
- </script>
-</svg>
diff --git a/usr/local/www/green_dot.jpg b/usr/local/www/green_dot.jpg
deleted file mode 100755
index 9df0abf..0000000
--- a/usr/local/www/green_dot.jpg
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/gui.css b/usr/local/www/gui.css
deleted file mode 100755
index d93c4d9..0000000
--- a/usr/local/www/gui.css
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- pfSense_MODULE: base
-*/
-
-html,body {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
-}
-td,th,input,select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
-}
-form {
- margin: 0px;
-}
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
-
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-a {
- text-decoration: none;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 0.9em;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #FFFFFF;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listrborder {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
diff --git a/usr/local/www/guiconfig.inc b/usr/local/www/guiconfig.inc
deleted file mode 100644
index 3b36f5f..0000000
--- a/usr/local/www/guiconfig.inc
+++ /dev/null
@@ -1,1252 +0,0 @@
-<?php
-/*
- guiconfig.inc
- by Scott Ullrich, Copyright 2004, All rights reserved.
- originally based on of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: base
-*/
-
-/* Include authentication routines */
-/* THIS MUST BE ABOVE ALL OTHER CODE */
-if (!$nocsrf) {
- function csrf_startup() {
- csrf_conf('rewrite-js', '/csrf/csrf-magic.js');
- $timeout_minutes = isset($config['system']['webgui']['session_timeout']) ? $config['system']['webgui']['session_timeout'] : 240;
- csrf_conf('expires', $timeout_minutes * 60);
- }
- require_once("csrf/csrf-magic.php");
-}
-
-/* make sure nothing is cached */
-if (!$omit_nocacheheaders) {
- header("Expires: 0");
- header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
- header("Cache-Control: no-cache, no-store, must-revalidate");
- header("Pragma: no-cache");
-}
-
-header("X-Frame-Options: SAMEORIGIN");
-require_once("authgui.inc");
-
-/* parse the configuration and include all configuration functions */
-require_once("functions.inc");
-
-/* Pull in all the gui related display classes) */
-foreach (scandir("/usr/local/www/classes/") as $file) {
- if (substr($file, -4) == ".inc") {
- require_once("classes/{$file}");
- }
-}
-
-$g['theme'] = get_current_theme();
-
-/* Set the default interface language */
-if ($config['system']['language'] <> "") {
- $g['language'] = $config['system']['language'];
-} elseif ($g['language'] == "") {
- $g['language'] = 'en_US';
-}
-
-set_language($g['language']);
-
-/* used by progress bar */
-$lastseen = "-1";
-
-$navlevelsep = ": "; /* navigation level separator string */
-$mandfldhtml = ""; /* display this before mandatory input fields */
-$mandfldhtmlspc = ""; /* same as above, but with spacing */
-
-/* Some ajax scripts still need access to GUI */
-if (!$ignorefirmwarelock) {
- if (is_subsystem_dirty('firmwarelock')) {
- if (!$d_isfwfile) {
- header("Location: system_firmware.php");
- exit;
- } else {
- return;
- }
- }
-}
-
-/* Reserved table names to avoid collision */
-$reserved_table_names = array(
- "bogons",
- "bogonsv6",
- "negate_networks",
- "snort2c",
- "sshlockout",
- "tonatsubnets",
- "virusprot",
- "vpn_networks",
- "webConfiguratorlockout"
-);
-
-$firewall_rules_dscp_types = array(
- "af11",
- "af12",
- "af13",
- "af21",
- "af22",
- "af23",
- "af31",
- "af32",
- "af33",
- "af41",
- "af42",
- "af43",
- "VA",
- "EF",
- "cs1",
- "cs2",
- "cs3",
- "cs4",
- "cs5",
- "cs6",
- "cs7",
- "0x01",
- "0x02",
- "0x04");
-
-$auth_server_types = array(
- 'ldap' => "LDAP",
- 'radius' => "Radius");
-
-$ldap_urltypes = array(
- 'TCP - Standard' => 389,
- 'SSL - Encrypted' => 636);
-
-$ldap_scopes = array(
- 'one' => "One Level",
- 'subtree' => "Entire Subtree");
-
-$ldap_protvers = array(
- 2,
- 3);
-
-$ldap_templates = array(
-
- 'open' => array(
- 'desc' => "OpenLDAP",
- 'attr_user' => "cn",
- 'attr_group' => "cn",
- 'attr_member' => "member"),
-
- 'msad' => array(
- 'desc' => "Microsoft AD",
- 'attr_user' => "samAccountName",
- 'attr_group' => "cn",
- 'attr_member' => "memberOf"),
-
- 'edir' => array(
- 'desc' => "Novell eDirectory",
- 'attr_user' => "cn",
- 'attr_group' => "cn",
- 'attr_member' => "uniqueMember"));
-
-$radius_srvcs = array(
- 'both' => "Authentication and Accounting",
- 'auth' => "Authentication",
- 'acct' => "Accounting");
-
-$netbios_nodetypes = array(
- '0' => "none",
- '1' => "b-node",
- '2' => "p-node",
- '4' => "m-node",
- '8' => "h-node");
-
-/* some well known ports */
-$wkports = array(
- 5999 => "CVSup",
- 53 => "DNS",
- 21 => "FTP",
- 3000 => "HBCI",
- 80 => "HTTP",
- 443 => "HTTPS",
- 5190 => "ICQ",
- 113 => "IDENT/AUTH",
- 143 => "IMAP",
- 993 => "IMAP/S",
- 4500 => "IPsec NAT-T",
- 500 => "ISAKMP",
- 1701 => "L2TP",
- 389 => "LDAP",
- 1755 => "MMS/TCP",
- 7000 => "MMS/UDP",
- 445 => "MS DS",
- 3389 => "MS RDP",
- 1512 => "MS WINS",
- 1863 => "MSN",
- 119 => "NNTP",
- 123 => "NTP",
- 138 => "NetBIOS-DGM",
- 137 => "NetBIOS-NS",
- 139 => "NetBIOS-SSN",
- 1194 => "OpenVPN",
- 110 => "POP3",
- 995 => "POP3/S",
- 1723 => "PPTP",
- 1812 => "RADIUS",
- 1813 => "RADIUS accounting",
- 5004 => "RTP",
- 5060 => "SIP",
- 25 => "SMTP",
- 465 => "SMTP/S",
- 161 => "SNMP",
- 162 => "SNMP-Trap",
- 22 => "SSH",
- 3478 => "STUN",
- 587 => "SUBMISSION",
- 3544 => "Teredo",
- 23 => "Telnet",
- 69 => "TFTP",
- 5900 => "VNC");
-
-/* TCP flags */
-$tcpflags = array("fin", "syn", "rst", "psh", "ack", "urg", "ece", "cwr");
-
-$specialnets = array("(self)" => "This Firewall", "pptp" => "PPTP clients", "pppoe" => "PPPoE clients", "l2tp" => "L2TP clients");
-
-$spiflist = get_configured_interface_with_descr(false, true);
-foreach ($spiflist as $ifgui => $ifdesc) {
- $specialnets[$ifgui] = $ifdesc . " net";
- $specialnets[$ifgui . 'ip'] = $ifdesc . " address";
-}
-
-$medias = array(
- "auto" => "autoselect",
- "100full" => "100BASE-TX full-duplex",
- "100half" => "100BASE-TX half-duplex",
- "10full" => "10BASE-T full-duplex",
- "10half" => "10BASE-T half-duplex");
-
-$wlan_modes = array(
- "bss" => "Infrastructure (BSS)",
- "adhoc" => "Ad-hoc (IBSS)",
- "hostap" => "Access Point");
-
-function do_input_validation($postdata, $reqdfields, $reqdfieldsn, &$input_errors) {
-
- /* check for bad control characters */
- foreach ($postdata as $pn => $pd) {
- if (is_string($pd) && preg_match("/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/", $pd)) {
- $input_errors[] = sprintf(gettext("The field %s contains invalid characters."), $pn);
- }
- }
-
- for ($i = 0; $i < count($reqdfields); $i++) {
- if ($_POST[$reqdfields[$i]] == "" && $_REQUEST[$reqdfields[$i]] == "") {
- $input_errors[] = sprintf(gettext("The field %s is required."), $reqdfieldsn[$i]);
- }
- }
-}
-
-function print_input_errors($input_errors) {
- global $g;
-
- print <<<EOF
- <div id="inputerrorsdiv">
- <table border="0" cellspacing="0" cellpadding="4" width="100%" summary="input errors">
- <tr>
- <td class="inputerrorsleft">
- <img src="/themes/{$g['theme']}/images/icons/icon_error.gif" alt="errors" />
- </td>
- <td class="inputerrorsright errmsg">
-EOF;
- echo "<p>" . gettext("The following input errors were detected:") . "</p>\n<ul>";
- foreach ($input_errors as $ierr) {
- echo "<li>" . htmlspecialchars($ierr) . "</li>";
- }
-
- print <<<EOF2
- </ul>
- </td>
- </tr>
- </table>
- </div>
- &nbsp;<br />
-EOF2;
-
-}
-
-function verify_gzip_file($fname) {
- $returnvar = mwexec("/usr/bin/gzip -t " . escapeshellarg($fname));
- if ($returnvar != 0) {
- return 0;
- } else {
- return 1;
- }
-}
-
-function print_info_box_np($msg, $name = "apply", $value = "", $showapply = false) {
- global $g, $nifty_redbox, $nifty_blackbox, $nifty_background;
-
- if (empty($value)) {
- $value = gettext("Apply changes");
- }
-
- // Set the Nifty background color if one is not set already (defaults to white)
- if ($nifty_background == "") {
- $nifty_background = "#FFF";
- }
-
- if (stristr($msg, gettext("apply")) != false || stristr($msg, gettext("save")) != false || stristr($msg, gettext("create")) != false || $showapply) {
- $savebutton = "<td class=\"infoboxsave\">";
- $savebutton .= "<input name=\"{$name}\" type=\"submit\" class=\"formbtn\" id=\"${name}\" value=\"{$value}\" />";
- if ($_POST['if']) {
- $savebutton .= "<input type=\"hidden\" name=\"if\" value=\"" . htmlspecialchars($_POST['if']) . "\" />";
- }
- $savebutton .= "</td>";
- }
- $nifty_redbox = "#990000";
- $nifty_blackbox = "#000000";
-
- $themename = $g['theme'];
-
- if (file_exists("/usr/local/www/themes/{$themename}/tabcontrols.php")) {
- $toeval = file_get_contents("/usr/local/www/themes/{$themename}/tabcontrols.php");
- eval($toeval);
- }
-
- if (file_exists("/usr/local/www/themes/{$themename}/infobox.php")) {
- $toeval = file_get_contents("/usr/local/www/themes/{$themename}/infobox.php");
- eval($toeval);
- }
-
- if (!$savebutton) {
- $savebutton = "<td class=\"infoboxsave\"><input value=\"" . gettext("Close") . "\" type=\"button\" onclick=\"jQuery(this).parents('table[id=redboxtable]').hide();\" /></td>";
- }
-
- echo <<<EOFnp
- <table class="infobox" id="redboxtable" summary="red box table">
- <tr>
- <td>
- <div class="infoboxnp" id="redbox">
- <table class="infoboxnptable2" summary="message">
- <tr>
- <td class="infoboxnptd">
- &nbsp;&nbsp;&nbsp;<img class="infoboxnpimg" src="/themes/{$g['theme']}/images/icons/icon_exclam.gif" alt="exclamation" />
- </td>
- <td class="infoboxnptd2">
- <b>{$msg}</b>
- </td>
- {$savebutton}
- </tr>
- </table>
- </div>
- <div>
- <p>&nbsp;</p>
- </div>
- </td>
- </tr>
- </table>
- <script type="text/javascript">
- //<![CDATA[
- NiftyCheck();
- Rounded("div#redbox","all","{$nifty_background}","{$nifty_redbox}","smooth");
- Rounded("td#blackbox","all","{$nifty_background}","{$nifty_blackbox}","smooth");
- //]]>
- </script>
-EOFnp;
-
-}
-
-function print_info_box_np_undo($msg, $name = "apply", $value = "Apply changes", $undo) {
- global $g;
-
- if (stristr($msg, "apply") != false || stristr($msg, "save") != false || stristr($msg, "create") != false) {
- $savebutton = "<td class=\"infoboxsave nowrap\">";
- $savebutton .= "<input type=\"button\" value=\"". gettext("Undo") . "\" onclick=\"document.location='{$undo}'\" />";
- $savebutton .= "<input name=\"{$name}\" type=\"submit\" class=\"formbtn\" id=\"${name}\" value=\"{$value}\" />";
- $savebutton .= "</td>";
- if ($_POST['if']) {
- $savebutton .= "<input type=\"hidden\" name=\"if\" value=\"" . htmlspecialchars($_POST['if']) . "\" />";
- }
- }
- $nifty_redbox = "#990000";
- $nifty_blackbox = "#000000";
-
- $themename = $g['theme'];
-
- if (file_exists("/usr/local/www/themes/{$themename}/tabcontrols.php")) {
- $toeval = file_get_contents("/usr/local/www/themes/{$themename}/tabcontrols.php");
- eval($toeval);
- }
-
- if (file_exists("/usr/local/www/themes/{$themename}/infobox.php")) {
- $toeval = file_get_contents("/usr/local/www/themes/{$themename}/infobox.php");
- eval($toeval);
- }
-
-
- if (!$savebutton) {
- $savebutton = "<td class=\"infoboxsave\"><input value=\"" . gettext("Close") . "\" type=\"button\" onclick=\"jQuery(this).parents('table[id=redboxtable]').hide();\" /></td>";
- }
-
- echo <<<EOFnp
- <table class="infobox" id="redboxtable" summary="red box table">
- <tr>
- <td>
- <div class="infoboxnp" id="redbox">
- <table class="infoboxnptable2" summary="message">
- <tr>
- <td class="infoboxnptd">
- &nbsp;&nbsp;&nbsp;<img class="infoboxnpimg" src="/themes/{$g['theme']}/images/icons/icon_exclam.gif" alt="exclamation" />
- </td>
- <td class="infoboxnptd2">
- <b>{$msg}</b>
- </td>
- {$savebutton}
- {$undobutton}
- </tr>
- </table>
- </div>
- <div>
- <p>&nbsp;</p>
- </div>
- </td>
- </tr>
- </table>
- <script type="text/javascript">
- //<![CDATA[
- NiftyCheck();
- Rounded("div#redbox","all","#FFF","{$nifty_redbox}","smooth");
- Rounded("td#blackbox","all","#FFF","{$nifty_blackbox}","smooth");
- //]]>
- </script>
-EOFnp;
-
-}
-
-function print_info_box($msg) {
- print_info_box_np($msg);
-}
-
-function get_std_save_message($ok) {
- global $d_sysrebootreqd_path;
- $filter_related = false;
- $filter_pages = array("nat", "filter");
- $to_return = gettext("The changes have been applied successfully.");
- foreach ($filter_pages as $fp) {
- if (stristr($_SERVER['SCRIPT_FILENAME'], $fp)) {
- $filter_related = true;
- }
- }
- if ($filter_related) {
- $to_return .= "<br />" . gettext("You can also <a href=\"status_filter_reload.php\">monitor</a> the filter reload progress.");
- }
- return $to_return;
-}
-
-function pprint_address($adr) {
- global $specialnets;
-
- if (isset($adr['any'])) {
- $padr = "*";
- } else if ($adr['network']) {
- $padr = $specialnets[$adr['network']];
- } else {
- $padr = $adr['address'];
- }
-
- if (isset($adr['not'])) {
- $padr = "! " . $padr;
- }
-
- return $padr;
-}
-
-function pprint_port($port) {
- global $wkports;
-
- $pport = "";
-
- if (!$port) {
- return "*";
- } else {
- $srcport = explode("-", $port);
- if ((!$srcport[1]) || ($srcport[0] == $srcport[1])) {
- $pport = $srcport[0];
- if ($wkports[$srcport[0]]) {
- $pport .= " (" . $wkports[$srcport[0]] . ")";
- }
- } else {
- $pport .= $srcport[0] . " - " . $srcport[1];
- }
- }
-
- return $pport;
-}
-
-function firewall_check_for_advanced_options(&$item) {
- $item_set = "";
- if ($item['os']) {
- $item_set .= "os {$item['os']} ";
- }
- if ($item['dscp']) {
- $item_set .= "dscp {$item['dscp']} ";
- }
- if ($item['max']) {
- $item_set .= "max {$item['max']} ";
- }
- if ($item['max-src-nodes']) {
- $item_set .= "max-src-nodes {$item['max-src-nodes']} ";
- }
- if ($item['max-src-conn']) {
- $item_set .= "max-src-conn {$item['max-src-conn']} ";
- }
- if ($item['max-src-states']) {
- $item_set .= "max-src-states {$item['max-src-states']} ";
- }
- if (isset($item['nopfsync'])) {
- $item_set .= "nopfsync ";
- }
- if ($item['statetype'] != "keep state" && $item['statetype'] != "") {
- $item_set .= "statetype {$item['statetype']} ";
- }
- if ($item['statetimeout']) {
- $item_set .= "statetimeout {$item['statetimeout']} ";
- }
- if (isset($item['nosync'])) {
- $item_set .= "no XMLRPC Sync ";
- }
- if ($item['max-src-conn-rate']) {
- $item_set .= "max-src-conn-rate {$item['max-src-conn-rate']} ";
- }
- if ($item['max-src-conn-rates']) {
- $item_set .= "max-src-conn-rates {$item['max-src-conn-rates']} ";
- }
- if ($item['vlanprio']) {
- $item_set .= "vlanprio {$item['vlanprio']} ";
- }
- if ($item['vlanprioset']) {
- $item_set .= "vlanprioset {$item['vlanprioset']} ";
- }
- if ($item['gateway']) {
- $item_set .= "gateway {$item['gateway']} ";
- }
- if ($item['dnpipe']) {
- $item_set .= "limiter {$item['dnpipe']} ";
- }
- if ($item['pdnpipe']) {
- $item_set .= "limiter {$item['pdnpipe']} ";
- }
- if ($item['ackqueue']) {
- $item_set .= "ackqueue {$item['ackqueue']} ";
- }
- if ($item['defaultqueue']) {
- $item_set .= "defaultqueue {$item['defaultqueue']} ";
- }
- if ($item['l7container']) {
- $item_set .= "layer7 {$item['l7container']} ";
- }
- if ($item['tag']) {
- $item_set .= "tag {$item['tag']} ";
- }
- if ($item['tagged']) {
- $item_set .= "tagged {$item['tagged']} ";
- }
- if (isset($item['allowopts'])) {
- $item_set .= "allowopts ";
- }
- if (isset($item['disablereplyto'])) {
- $item_set .= "disable reply-to ";
- }
- if ($item['tcpflags_any'] || $item['tcpflags1'] || $item['tcpflags2']) {
- $item_set .= "tcpflags set";
- }
-
- return $item_set;
-}
-
-function gentitle($title) {
- global $navlevelsep;
- if (!is_array($title)) {
- return $title;
- } else {
- return join($navlevelsep, $title);
- }
-}
-
-function genhtmltitle($title) {
- global $config;
- return gentitle($title);
-}
-
-/* update the changedesc and changecount(er) variables */
-function update_changedesc($update) {
- global $changedesc;
- global $changecount;
-
- $changedesc .= " {$update}";
- $changecount++;
-}
-
-function clear_log_file($logfile = "/var/log/system.log", $restart_syslogd = true) {
- global $config, $g;
- if ($restart_syslogd) {
- exec("/usr/bin/killall syslogd");
- }
- if (isset($config['system']['disablesyslogclog'])) {
- unlink($logfile);
- touch($logfile);
- } else {
- $log_size = isset($config['syslog']['logfilesize']) ? $config['syslog']['logfilesize'] : "511488";
- if (isset($config['system']['usefifolog'])) {
- exec("/usr/sbin/fifolog_create -s {$log_size} " . escapeshellarg($logfile));
- } else {
- exec("/usr/local/sbin/clog -i -s {$log_size} " . escapeshellarg($logfile));
- }
- }
- if ($restart_syslogd) {
- system_syslogd_start();
- }
-}
-
-function clear_all_log_files() {
- global $g;
- exec("/usr/bin/killall syslogd");
-
- $log_files = array("system", "filter", "dhcpd", "vpn", "pptps", "poes", "l2tps", "openvpn", "portalauth", "ipsec", "ppp", "relayd", "wireless", "lighttpd", "ntpd", "gateways", "resolver", "routing");
- foreach ($log_files as $lfile) {
- clear_log_file("{$g['varlog_path']}/{$lfile}.log", false);
- }
-
- system_syslogd_start();
- killbyname("dhcpd");
- services_dhcpd_configure();
- return;
-}
-
-function dump_clog($logfile, $tail, $withorig = true, $grepfor = "", $grepinvert = "") {
- global $g, $config;
- $sor = isset($config['syslog']['reverse']) ? "-r" : "";
- $logarr = "";
- $grepline = " ";
- if (is_array($grepfor)) {
- $grepline .= " | /usr/bin/egrep " . escapeshellarg(implode("|", $grepfor));
- }
- if (is_array($grepinvert)) {
- $grepline .= " | /usr/bin/egrep -v " . escapeshellarg(implode("|", $grepinvert));
- }
- if (is_dir($logfile)) {
- $logarr = array("File $logfile is a directory.");
- } elseif (file_exists($logfile) && filesize($logfile) == 0) {
- $logarr = array("Log file started.");
- } else {
- if ($config['system']['disablesyslogclog']) {
- exec("cat " . escapeshellarg($logfile) . "{$grepline} | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr);
- } else {
- if (isset($config['system']['usefifolog'])) {
- exec("/usr/sbin/fifolog_reader " . escapeshellarg($logfile) . "{$grepline} | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr);
- } else {
- exec("/usr/local/sbin/clog " . escapeshellarg($logfile) . "{$grepline}| grep -v \"CLOG\" | grep -v \"\033\" | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr);
- }
- }
- }
- foreach ($logarr as $logent) {
- $logent = preg_split("/\s+/", $logent, 6);
- echo "<tr valign=\"top\">\n";
- if ($withorig) {
- if (isset($config['system']['usefifolog'])) {
- $entry_date_time = htmlspecialchars(date("F j, Y, g:i a", "" . $logent[1] . ""));
- $entry_text = htmlspecialchars($logent[5]);
- } else {
- $entry_date_time = htmlspecialchars(join(" ", array_slice($logent, 0, 3)));
- $entry_text = ($logent[3] == $config['system']['hostname']) ? "" : $logent[3] . " ";
- $entry_text .= htmlspecialchars($logent[4] . " " . $logent[5]);
- }
- echo "<td class=\"listlr nowrap\">{$entry_date_time}</td>\n";
- echo "<td class=\"listr\">{$entry_text}</td>\n";
- } else {
- echo "<td class=\"listlr\" colspan=\"2\">" . htmlspecialchars($logent[5]) . "</td>\n";
- }
- echo "</tr>\n";
- }
-}
-
-function return_clog($logfile, $tail, $withorig = true, $grepfor = "", $grepinvert = "", $grepreverse = false) {
- global $g, $config;
- $sor = (isset($config['syslog']['reverse']) || $grepreverse) ? "-r" : "";
- $logarr = "";
- $grepline = " ";
- if (is_array($grepfor)) {
- $grepline .= " | /usr/bin/egrep " . escapeshellarg(implode("|", $grepfor));
- }
- if (is_array($grepinvert)) {
- $grepline .= " | /usr/bin/egrep -v " . escapeshellarg(implode("|", $grepinvert));
- }
- if ($config['system']['disablesyslogclog']) {
- exec("cat " . escapeshellarg($logfile) . "{$grepline} | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr);
- } else {
- if (isset($config['system']['usefifolog'])) {
- exec("/usr/sbin/fifolog_reader " . escapeshellarg($logfile) . "{$grepline} | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr);
- } else {
- exec("/usr/local/sbin/clog " . escapeshellarg($logfile) . "{$grepline}| grep -v \"CLOG\" | grep -v \"\033\" | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr);
- }
- }
- return($logarr);
-}
-
-/* Check if variable has changed, update and log if it has
- * returns true if var changed
- * varname = variable name in plain text
- * orig = original value
- * new = new value
- */
-function update_if_changed($varname, & $orig, $new) {
- if (is_array($orig) && is_array($new)) {
- $a_diff = array_diff($orig, $new);
- foreach ($a_diff as $diff) {
- update_changedesc("removed {$varname}: \"{$diff}\"");
- }
- $a_diff = array_diff($new, $orig);
- foreach ($a_diff as $diff) {
- update_changedesc("added {$varname}: \"{$diff}\"");
- }
- $orig = $new;
- return true;
-
- } else {
- if ($orig != $new) {
- update_changedesc("{$varname}: \"{$orig}\" -> \"{$new}\"");
- $orig = $new;
- return true;
- }
- }
- return false;
-}
-
-function address_to_pconfig($adr, &$padr, &$pmask, &$pnot, &$pbeginport, &$pendport) {
- if (isset($adr['any'])) {
- $padr = "any";
- } else if ($adr['network']) {
- $padr = $adr['network'];
- } else if ($adr['address']) {
- list($padr, $pmask) = explode("/", $adr['address']);
- if (!$pmask) {
- if (is_ipaddrv6($padr)) {
- $pmask = 128;
- } else {
- $pmask = 32;
- }
- }
- }
-
- if (isset($adr['not'])) {
- $pnot = 1;
- } else {
- $pnot = 0;
- }
-
- if ($adr['port']) {
- list($pbeginport, $pendport) = explode("-", $adr['port']);
- if (!$pendport) {
- $pendport = $pbeginport;
- }
- } else if (!is_alias($pbeginport) && !is_alias($pendport)) {
- $pbeginport = "any";
- $pendport = "any";
- }
-}
-
-function pconfig_to_address(&$adr, $padr, $pmask, $pnot = false, $pbeginport = 0, $pendport = 0) {
- $adr = array();
-
- if ($padr == "any") {
- $adr['any'] = true;
- } else if (is_specialnet($padr)) {
- $adr['network'] = $padr;
- } else {
- $adr['address'] = $padr;
- if (is_ipaddrv6($padr)) {
- if ($pmask != 128) {
- $adr['address'] .= "/" . $pmask;
- }
- } else {
- if ($pmask != 32) {
- $adr['address'] .= "/" . $pmask;
- }
- }
- }
-
- if ($pnot) {
- $adr['not'] = true;
- } else {
- unset($adr['not']);
- }
-
- if (($pbeginport != 0) && ($pbeginport != "any")) {
- if ($pbeginport != $pendport) {
- $adr['port'] = $pbeginport . "-" . $pendport;
- } else {
- $adr['port'] = $pbeginport;
- }
- }
-
- if (is_alias($pbeginport)) {
- $adr['port'] = $pbeginport;
- }
-}
-
-function is_specialnet($net) {
- global $specialsrcdst;
-
- if (!$net) {
- return false;
- }
- if (in_array($net, $specialsrcdst)) {
- return true;
- } else {
- return false;
- }
-}
-
-//function to create widget tabs when called
-function display_widget_tabs(& $tab_array) {
- echo "<div id=\"tabs\">";
- $tabscounter = 0;
- foreach ($tab_array as $ta) {
- $dashpos = strpos($ta[2], '-');
- $tabname = $ta[2] . "-tab";
- $tabclass = substr($ta[2], 0, $dashpos);
- $tabclass = $tabclass . "-class";
- if ($ta[1] == true) {
- $tabActive = "table-cell";
- $tabNonActive = "none";
- } else {
- $tabActive = "none";
- $tabNonActive = "table-cell";
- }
- echo "<div id=\"{$ta[2]}-active\" class=\"{$tabclass}-tabactive\" style=\"display:{$tabActive}; background-color:#EEEEEE; color:black;\">";
- echo "<b>&nbsp;&nbsp;&nbsp;{$ta[0]}";
- echo "&nbsp;&nbsp;&nbsp;</b>";
- echo "</div>";
-
- echo "<div id=\"{$ta[2]}-deactive\" class=\"{$tabclass}-tabdeactive\" style=\"display:{$tabNonActive}; background-color:#777777; color:white; cursor: pointer;\" onclick=\"return changeTabDIV('{$ta[2]}')\">";
- echo "<b>&nbsp;&nbsp;&nbsp;{$ta[0]}";
- echo "&nbsp;&nbsp;&nbsp;</b>";
- echo "</div>";
- }
-
- echo "<script type=\"text/javascript\">";
- echo "\n//<![CDATA[\n";
- echo "NiftyCheck();\n";
- echo "Rounded(\"div.{$tabclass}-tabactive\",\"top\",\"#CCCCCC\",\"#EEEEEE\",\"smooth\");\n";
- echo "Rounded(\"div.{$tabclass}-tabdeactive\",\"top\",\"#CCCCCC\",\"#777777\",\"smooth\");\n";
- echo "//]]>\n";
- echo "</script>";
- echo "</div>";
-}
-
-
-// Return inline javascript file or CSS to minimize
-// request count going back to server.
-function outputJavaScriptFileInline($javascript) {
- if (file_exists($javascript)) {
- echo "\n<script type=\"text/javascript\">\n";
- include($javascript);
- echo "\n</script>\n";
- } else {
- echo "\n\n<!-- Could not locate file: {$javascript} -->\n\n";
- }
-}
-
-
-
-function outputCSSPrintFileInline($css) {
- if (file_exists($css)) {
- echo "\n<style media=\"print\" type=\"text/css\">\n";
- include($css);
- echo "\n</style>\n";
- } else {
- echo "\n\n<!-- Could not locate file: {$css} -->\n\n";
- }
-}
-
-
-function outputCSSFileInline($css) {
- if (file_exists($css)) {
- echo "\n<style type=\"text/css\">\n";
- include($css);
- echo "\n</style>\n";
- } else {
- echo "\n\n<!-- Could not locate file: {$css} -->\n\n";
- }
-}
-
-$rfc2616 = array(
- 100 => "100 Continue",
- 101 => "101 Switching Protocols",
- 200 => "200 OK",
- 201 => "201 Created",
- 202 => "202 Accepted",
- 203 => "203 Non-Authoritative Information",
- 204 => "204 No Content",
- 205 => "205 Reset Content",
- 206 => "206 Partial Content",
- 300 => "300 Multiple Choices",
- 301 => "301 Moved Permanently",
- 302 => "302 Found",
- 303 => "303 See Other",
- 304 => "304 Not Modified",
- 305 => "305 Use Proxy",
- 306 => "306 (Unused)",
- 307 => "307 Temporary Redirect",
- 400 => "400 Bad Request",
- 401 => "401 Unauthorized",
- 402 => "402 Payment Required",
- 403 => "403 Forbidden",
- 404 => "404 Not Found",
- 405 => "405 Method Not Allowed",
- 406 => "406 Not Acceptable",
- 407 => "407 Proxy Authentication Required",
- 408 => "408 Request Timeout",
- 409 => "409 Conflict",
- 410 => "410 Gone",
- 411 => "411 Length Required",
- 412 => "412 Precondition Failed",
- 413 => "413 Request Entity Too Large",
- 414 => "414 Request-URI Too Long",
- 415 => "415 Unsupported Media Type",
- 416 => "416 Requested Range Not Satisfiable",
- 417 => "417 Expectation Failed",
- 500 => "500 Internal Server Error",
- 501 => "501 Not Implemented",
- 502 => "502 Bad Gateway",
- 503 => "503 Service Unavailable",
- 504 => "504 Gateway Timeout",
- 505 => "505 HTTP Version Not Supported"
-);
-
-function is_rfc2616_code($code) {
- global $rfc2616;
- if (isset($rfc2616[$code])) {
- return true;
- } else {
- return false;
- }
-}
-
-function print_rfc2616_select($tag, $current) {
- global $rfc2616;
-
- /* Default to 200 OK if not set */
- if ($current == "") {
- $current = 200;
- }
-
- echo "<select id=\"{$tag}\" name=\"{$tag}\">\n";
- foreach ($rfc2616 as $code => $message) {
- if ($code == $current) {
- $sel = " selected=\"selected\"";
- } else {
- $sel = "";
- }
- echo "<option value=\"{$code}\"{$sel}>{$message}</option>\n";
- }
- echo "</select>\n";
-}
-
-// Useful debugging function, much cleaner than print_r
-function echo_array($array, $return_me = false) {
- if (is_array($array) == false) {
- $return = "The provided variable is not an array.";
- } else {
- foreach ($array as $name=>$value) {
- if (is_array($value)) {
- $return .= "";
- $return .= "['<b>$name</b>'] {<div style=\"margin-left:10px;\">\n";
- $return .= echo_array($value, true);
- $return .= "</div>}";
- $return .= "\n\n";
- } else {
- if (is_string($value)) {
- $value = "\"$value\"";
- }
- $return .= "['<b>$name</b>'] = $value\n\n";
- }
- }
- }
- if ($return_me == true) {
- return $return;
- } else {
- echo "<pre>".$return."</pre>";
- }
-}
-
-/****f* pfsense-utils/display_top_tabs
- * NAME
- * display_top_tabs - display tabs with rounded edges
- * INPUTS
- * $text - array of tabs
- * RESULT
- * null
- ******/
-function display_top_tabs(& $tab_array, $no_drop_down = false) {
- global $config;
- global $g;
- global $tab_array_indent;
- global $tab_array_space;
- global $tab_array_char_limit;
-
- /* does the user have access to this tab?
- * master user has access to everything.
- * if the user does not have access, simply
- * unset the tab item.
- */
-
- /* empty string code */
- if ($tab_array_indent == '') {
- $tab_array_indent = 0;
- }
-
- if ($tab_array_space == '') {
- $tab_array_space = 1;
- }
-
- if ($tab_array_char_limit == '') {
- $tab_array_char_limit = 92;
- }
-
- foreach ($tab_array as $tab_id => $ta) {
- if (!isAllowedPage($ta[2])) {
- unset ($tab_array[$tab_id]);
- }
- }
-
- $tab_active_bg = "#EEEEEE";
- $tab_inactive_bg = "#777777";
- $nifty_tabs_corners = "#FFF";
- $font_color = "white";
-
- /* if tabcontrols.php exist for a theme, allow it to be overridden */
- $themename = $config['theme'];
- $filename = "/usr/local/www/themes/{$themename}/tabcontrols.php";
- if (file_exists($filename)) {
- $eval_code = file_get_contents($filename);
- eval($eval_code);
- }
-
- $tabcharcount = 0;
- foreach ($tab_array as $ta) {
- $tabcharcount = $tabcharcount + strlen($ta[0]);
- }
-
- if ($no_drop_down == true) {
- $tabcharcount = 0;
- unset($tab_array_char_limit);
- }
-
- // If the character count of the tab names is > 670
- // then show a select item dropdown menubox.
- if ($tabcharcount > $tab_array_char_limit) {
- echo gettext("Currently viewing: ");
- echo "<select name=\"TabSelect\" onchange=\"tabs_will_go(this)\">\n";
- foreach ($tab_array as $ta) {
- if ($ta[1] == "true") {
- $selected = " selected=\"selected\"";
- } else {
- $selected = "";
- }
- // Onclick in option will not work in some browser
- // echo "<option onclick=\"document.location='{$ta[2]}';\"{$selected}>{$ta['0']}</option>\n";
- echo "<option value=\"{$ta[2]}\"{$selected}>{$ta['0']}</option>\n";
- }
- echo "</select>\n<p>&nbsp;</p>";
- echo "<script type=\"text/javascript\">";
- echo "\n//<![CDATA[\n";
- echo " function tabs_will_go(obj) { document.location = obj.value; }\n";
- echo "//]]>\n";
- echo "</script>";
- } else {
- echo "<div class=\"newtabmenu\" style=\"margin:{$tab_array_space}px {$tab_array_indent}px; width:775px;\">\n";
- echo "<!-- Tabbed bar code-->\n";
- echo "<ul class=\"newtabmenu\">\n";
- $tabscounter = 0;
- foreach ($tab_array as $ta) {
- if ($ta[1] == true) {
- echo " <li class=\"newtabmenu_active\"><a href=\"{$ta[2]}\"><span>{$ta[0]}</span></a></li>\n";
- } else {
- echo " <li><a href=\"{$ta[2]}\"><span>{$ta[0]}</span></a></li>\n";
- }
- $tabscounter++;
- }
- echo "</ul>\n</div>\n";
- }
-}
-
-function add_package_tabs($pkgname, &$tab_array) {
- global $config, $g;
-
- $pkg = get_pkg_data($pkgname);
-
- if (!isset($pkg['configurationfile']) || !file_exists('/usr/local/pkg/' . $pkg['configurationfile'])) {
- return;
- }
-
- $pkg_config = parse_xml_config_pkg('/usr/local/pkg/' . $pkg['configurationfile'], "packagegui");
-
- if (!isset($pkg_config['tabs']['tab'])) {
- return;
- }
-
- foreach ($pkg_config['tabs']['tab'] as $tab) {
- $tab_entry = array();
- if ($tab['name']) {
- $tab_entry[] = $tab['name'];
- $tab_entry[] = false;
- $tab_entry[] = $tab['url'];
- $tab_array[] = $tab_entry;
- }
- }
-}
-
-function alias_info_popup($alias_id) {
- global $config;
- $maxlength = 60;
- $close_title="title='".gettext('move mouse out of this alias to hide')."'";
- if (is_array($config['aliases']['alias'][$alias_id])) {
- $alias_name = $config['aliases']['alias'][$alias_id];
- $alias_objects_with_details = "<table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" summary=\"alias info popup\">";
- if ($alias_name['url']) {
- // TODO: Change it when pf supports tables with ports
- if ($alias_name['type'] == "urltable") {
- exec("/sbin/pfctl -t {$alias_name['name']} -T show | wc -l", $total_entries);
- $counter = preg_replace("/\D/", "", $total_entries[0]);
- exec("/sbin/pfctl -t {$alias_name['name']} -T show | head -10002", $alias_addresses);
- } else {
- $urlfn = alias_expand_urltable($alias_name['name']);
- $alias_addresses = explode("\n", file_get_contents($urlfn));
- $counter = count($alias_addresses);
- }
- $alias_objects_with_details .= "<tr><td colspan=\"3\" $close_title class=\"vncell\">{$alias_name['url']}</td></tr>";
- $x = 0;
- foreach ($alias_addresses as $alias_ports_address) {
- switch ($x) {
- case 0:
- $x++;
- $alias_objects_with_details .= "<tr><td $close_title class=\"vncell\" width=\"33%\" style=\"background: #FFFFFF;color: #000000;\">{$alias_ports_address}</td>";
- break;
- case 1:
- $x++;
- $alias_objects_with_details .= "<td $close_title class=\"vncell\" width=\"33%\" style=\"background: #FFFFFF;color: #000000;\">{$alias_ports_address}</td>";
- break;
- default:
- $x = 0;
- $alias_objects_with_details .= "<td $close_title class=\"vncell\" width=\"33%\" style=\"background: #FFFFFF;color: #000000;\">{$alias_ports_address}</td><tr>";
- break;
- }
- }
- for ($y = $x; $y <= $x; $y++) {
- $alias_objects_with_details .= "<td $close_title class=\"vncell\" width=\"33%\">&nbsp;</td>";
- }
- if ($x > 0) {
- $alias_objects_with_details .= "</tr>";
- }
- if ($counter > 10002) {
- $alias_objects_with_details .= "<tr><td colspan=\"3\"> ". gettext("listing only first 10k items") . "</td><tr>";
- }
- } else {
- $alias_addresses = explode (" ", $alias_name['address']);
- $alias_details = explode ("||", $alias_name['detail']);
- $counter = 0;
- foreach ($alias_addresses as $alias_ports_address) {
- $alias_objects_with_details .= "<tr><td $close_title width=\"5%\" class=\"vncell\" style=\"background: #FFFFFF;color: #000000;\">{$alias_addresses[$counter]}</td>";
- $alias_detail_default = strpos ($alias_details[$counter], "Entry added");
- if ($alias_details[$counter] != "" && $alias_detail_default === False) {
- $alias_objects_with_details .="<td $close_title width=\"95%\" class=\"vncell\" style=\"background: #FFFFFF;color: #000000;\">{$alias_details[$counter]}</td>";
- } else {
- $alias_objects_with_details .="<td $close_title width=\"95%\" class=\"vncell\" style=\"background: #FFFFFF;color: #000000;\">&nbsp;</td>";
- }
- $alias_objects_with_details .= "</tr>";
- $counter++;
- }
- }
- $alias_objects_with_details .= "</table>";
- }
- $alias_descr_substr = $alias_name['descr'];
- if ($strlength >= $maxlength) {
- $alias_descr_substr = substr($alias_descr_substr, 0, $maxlength) . "...";
- }
- $item_text = ($counter > 1 ? "items" : "item");
- $alias_caption = "{$alias_descr_substr} - {$counter} {$item_text}<a href=\"/firewall_aliases_edit.php?id={$alias_id}\" title=\"".gettext('edit this alias')."\">&nbsp;&nbsp;edit </a>";
- $strlength = strlen ($alias_caption);
- print "<h1>{$alias_caption}</h1>" . $alias_objects_with_details;
-}
-
-function rule_popup($src, $srcport, $dst, $dstport) {
- global $config, $g;
- $aliases_array = array();
- if ($config['aliases']['alias'] <> "" and is_array($config['aliases']['alias'])) {
- $descriptions = array ();
- foreach ($config['aliases']['alias'] as $alias_id=>$alias_name) {
- $loading_image="<a><img src=\'/themes/{$g['theme']}/images/misc/loader.gif\' alt=\'loader\' /> " .gettext("loading...")."</a>";
- switch ($alias_name['type']) {
- case "port":
- $width="250";
- break;
- case "urltable":
- $width="500";
- break;
- default:
- $width="350";
- break;
- }
- $span_begin = "<span style=\"cursor: help;\" onmouseover=\"var response_html=domTT_activate(this, event, 'id','ttalias_{$alias_id}','content','{$loading_image}', 'trail', true, 'delay', 300, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle','type','velcro','width',{$width});alias_popup('{$alias_id}','{$g['theme']}','".gettext('loading...')."');\" onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\"><u>";
- $span_end = "</u></span>";
- if ($alias_name['name'] == $src) {
- $descriptions['src'] = $span_begin;
- $descriptions['src_end'] = $span_end;
- }
- if ($alias_name['name'] == $srcport) {
- $descriptions['srcport'] = $span_begin;
- $descriptions['srcport_end'] = $span_end;
- }
- if ($alias_name['name'] == $dst) {
- $descriptions['dst'] = $span_begin;
- $descriptions['dst_end'] = $span_end;
- }
- if ($alias_name['name'] == $dstport) {
- $descriptions['dstport'] = $span_begin;
- $descriptions['dstport_end'] = $span_end;
- }
- }
- return $descriptions;
- }
-}
-
-$timezone = $config['system']['timezone'];
-if (!$timezone) {
- $timezone = "Etc/UTC";
-}
-
-date_default_timezone_set($timezone);
-
-?>
diff --git a/usr/local/www/halt.php b/usr/local/www/halt.php
deleted file mode 100755
index ab4fe99..0000000
--- a/usr/local/www/halt.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-/* $Id$ */
-/*
- halt.php
- part of pfSense
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004 Scott Ullrich
- All rights reserved.
-
- part of m0n0wall as reboot.php (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: header
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-haltsystem
-##|*NAME=Diagnostics: Halt system page
-##|*DESCR=Allow access to the 'Diagnostics: Halt system' page.
-##|*MATCH=halt.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-require("captiveportal.inc");
-
-if ($_POST['Submit'] == " " . gettext("No") . " ") {
- header("Location: index.php");
- exit;
-}
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Halt system"));
-include('head.inc');
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($_POST['Submit'] == " " . gettext("Yes") . " "):
- print_info_box(gettext("The system is halting now. This may take one minute.")); ?>
-<pre>
-<?php system_halt(); ?>
-</pre>
-<?php else: ?>
-<form action="halt.php" method="post">
- <p><strong><?=gettext("Are you sure you want to halt the system?");?></strong></p>
- <p>
- <input name="Submit" type="submit" class="formbtn" value=" <?=gettext("Yes"); ?> " />
- <input name="Submit" type="submit" class="formbtn" value=" <?=gettext("No"); ?> " />
- </p>
-</form>
-<?php endif; ?>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/head.inc b/usr/local/www/head.inc
deleted file mode 100755
index d8b8867..0000000
--- a/usr/local/www/head.inc
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-/*
- pfSense_MODULE: header
-*/
-
-$g['theme'] = get_current_theme();
-
-$pagetitle = gentitle($pgtitle);
-
-if (isset($config['system']['webgui']['pagenamefirst'])) {
- $tabtitle = $pagetitle . " - " . $config['system']['hostname'] . "." . $config['system']['domain'];
-} else {
- $tabtitle = $config['system']['hostname'] . "." . $config['system']['domain'] . " - " . $pagetitle;
-}
-?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="<?=system_get_language_code();?>" xml:lang="<?=system_get_language_code();?>">
-<head>
- <title><?php echo($tabtitle); ?></title>
- <meta http-equiv="Content-Type" content="text/html; charset=<?=system_get_language_codeset();?>" />
- <link rel="apple-touch-icon" href="/themes/<?php echo $g['theme']; ?>/apple-touch-icon.png"/>
- <link rel="shortcut icon" href="/themes/<?php echo $g['theme']; ?>/images/icons/favicon.ico"/>
- <?php
- if (file_exists("{$g['www_path']}/themes/{$g['theme']}/table.css")):
- echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/themes/{$g['theme']}/table.css\" />";
- else:
- echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/css/table.css\" media=\"all\" />";
- endif;
- ?>
-
- <?php if (strpos($_SERVER["SCRIPT_FILENAME"], "wizard.php") !== false &&
- file_exists("{$g['www_path']}/themes/{$g['theme']}/wizard.css")): ?>
- <?php echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/themes/{$g['theme']}/wizard.css\" />"; ?>
- <?php else: ?>
- <link type="text/css" rel="stylesheet" href="/themes/<?php echo $g['theme']; ?>/all.css" media="all" />
- <?php endif; ?>
- <link rel="stylesheet" type="text/css" href="/niftycssCode.css" />
- <link rel="stylesheet" type="text/css" href="/niftycssprintCode.css" media="print" />
- <link rel="stylesheet" type="text/css" href="/themes/<?=$g['theme']?>/new_tab_menu.css" media="all" />
- <link rel="stylesheet" type="text/css" href="/themes/<?=$g['theme']?>/styles/jquery-ui-1.11.1.css" />
- <script type="text/javascript" src="/javascript/niftyjsCode.js"></script>
- <script type="text/javascript" src="/javascript/jquery-1.11.1.min.js"></script>
- <script type="text/javascript" src="/javascript/jquery-migrate-1.2.1.min.js"></script>
- <script type="text/javascript" src="/javascript/jquery/jquery-ui-1.11.1.min.js"></script>
- <script type="text/javascript">
- //<![CDATA[
- var theme = "<?php echo $g['theme']; ?>";
-
- jQuery.noConflict();
- //]]>
- </script>
-
- <script type="text/javascript" src="/javascript/sorttable.js"></script>
- <script type="text/javascript" src="/javascript/ticker.js"></script>
- <style type="text/css" id="antiClickjack">
- /*<![CDATA[*/
- body{display:none}
- /*]]>*/
- </style>
- <script type="text/javascript">
- //<![CDATA[
- if (self === top) {
- var antiClickjack = document.getElementById("antiClickjack"); antiClickjack.parentNode.removeChild(antiClickjack);
- } else {
- top.location = self.location;
- }
- //]]>
- </script>
-
-<?php
-echo "\t<script type=\"text/javascript\" src=\"/themes/{$g['theme']}/loader.js\"></script>\n";
-if ($_GET['enablefirebuglite']) {
- echo "\t<script type=\"text/javascript\" src=\"/javascript/pi.js\"></script>\n";
- echo "\t<script type=\"text/javascript\" src=\"/javascript/firebug-lite.js\"></script>\n";
-}
-echo "\t<script type=\"text/javascript\" src=\"/javascript/scriptaculous/prototype.js\"></script>\n";
-echo "\t<script type=\"text/javascript\" src=\"/javascript/scriptaculous/scriptaculous.js\"></script>\n";
-echo "\t<script type=\"text/javascript\" src=\"/javascript/scriptaculous/effects.js\"></script>\n";
-echo "\t<script type=\"text/javascript\" src=\"/javascript/scriptaculous/dragdrop.js\"></script>\n";
-if (file_exists("{$g['www_path']}/javascript/global.js")) {
- echo "\t<script type=\"text/javascript\" src=\"/javascript/global.js\"></script>\n";
-}
-/*
- * Find all javascript files that need to be included
- * for this page ... from the arrays ... :)
- * Coded by: Erik Kristensen
- */
-
-$dir = trim(basename($_SERVER["SCRIPT_FILENAME"], '.php'));
-$path = "{$g['www_path']}/javascript/" . $dir . "/";
-if (is_dir($path)) {
- if ($dh = opendir($path)) {
- while (($file = readdir($dh)) !== false) {
- if (is_dir($file)) {
- continue;
- }
- echo "\t<script type=\"text/javascript\" src=\"/javascript/{$dir}/{$file}?rev=1\"></script>\n";
- }
- closedir($dh);
- }
-}
-
-if (!isset($closehead)) {
- echo "</head>";
-}
-
-/* If this page is being remotely managed then do not allow the loading of the contents. */
-if ($config['remote_managed_pages']['item']) {
- foreach ($config['remote_managed_pages']['item'] as $rmp) {
- if ($rmp == $_SERVER['SCRIPT_NAME']) {
- include("fbegin.inc");
- print_info_box_np("This page is currently being managed by a remote machine.");
- include("fend.inc");
- exit;
- }
- }
-}
-
-?>
diff --git a/usr/local/www/headjs.php b/usr/local/www/headjs.php
deleted file mode 100644
index 5e4148f..0000000
--- a/usr/local/www/headjs.php
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php
-/*
- headjs.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: header
-*/
-
-##|+PRIV
-##|*IDENT=page-requiredforjavascript
-##|*NAME=Required for javascript page
-##|*DESCR=Allow access to the 'Required for javascript' page.
-##|*MATCH=headjs.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-
-function getHeadJS() {
- global $g, $use_loader_tab_gif;
-
- if (!$use_loader_tab_gif) {
- $loader_gif = "/themes/{$g['theme']}/images/misc/loader.gif";
- } else {
- $loader_gif = "/themes/{$g['theme']}/images/misc/loader_tab.gif";
- }
-
- $headjs = "
- var input_errors = '';
- jQuery(document).ready(init);
- ";
- if (!session_id()) {
- session_start();
- }
- $_SESSION['NO_AJAX'] == "True" ? $noajax = "var noAjaxOnSubmit = true;" : $noajax = "var noAjaxOnSubmit = false;";
- session_commit();
-
- $headjs .= "
- {$noajax}
-
- function init() {
- if (jQuery('#submit') && ! noAjaxOnSubmit) {
- // debugging helper
- //alert('adding observe event for submit button');
-
- jQuery(\"#submit\").click(submit_form);
- jQuery('#submit').click(function() {return false;});
- var to_insert = \"<div style='visibility:hidden' id='loading' name='loading'><img src='{$loader_gif}' alt='loader' \/><\/div>\";
- jQuery('#submit').before(to_insert);
- }
- }
-
- function submit_form(e) {
- // debugging helper
- //alert(Form.serialize($('iform')));
-
- if (jQuery('#inputerrors')) {
- jQuery('#inputerrors').html('<center><b><i>Loading...<\/i><\/b><\/center>');
- }
-
- /* dsh: Introduced because pkg_edit tries to set some hidden fields
- * if executing submit's onclick event. The click gets deleted
- * by Ajax. Hence using onkeydown instead.
- */
- if (jQuery('#submit').prop('keydown')) {
- jQuery('#submit').keydown();
- jQuery('#submit').css('visibility','hidden');
- }
- if (jQuery('#cancelbutton')) {
- jQuery('#cancelbutton').css('visibility','hidden');
- }
- jQuery('#loading').css('visibility','visible');
- // submit the form using Ajax
- }
-
- function formSubmitted(resp) {
- var responseText = resp.responseText;
-
- // debugging helper
- // alert(responseText);
-
- if (responseText.indexOf('html') > 0) {
- /* somehow we have been fed an html page! */
- //alert('Somehow we have been fed an html page! Forwarding to /.');
- document.location.href = '/';
- }
-
- eval(responseText);
- }
-
- /* this function will be called if an HTTP error will be triggered */
- function formFailure(resp) {
- showajaxmessage(resp.responseText);
- if (jQuery('#submit')) {
- jQuery('#submit').css('visibility','visible');
- }
- if (jQuery('#cancelbutton')) {
- jQuery('#cancelbutton').css('visibility','visible');
- }
- if (jQuery('#loading')) {
- jQuery('#loading').css('visibility','hidden');
- }
- }
-
- function showajaxmessage(message) {
- var message_html;
-
- if (message == '') {
- NiftyCheck();
- Rounded(\"div#redbox\",\"all\",\"#FFF\",\"#990000\",\"smooth\");
- Rounded(\"td#blackbox\",\"all\",\"#FFF\",\"#000000\",\"smooth\");
-
- if (jQuery('#submit')) {
- jQuery('#submit').css('visibility','visible');
- }
- if (jQuery('#cancelbutton')) {
- jQuery('#cancelbutton').css('visibility','visible');
- }
- if (jQuery('#loading')) {
- jQuery('#loading').css('visibility','hidden');
- }
-
- return;
- }
-
- message_html = '<table height=\"32\" width=\"100%\" summary=\"redbox\"><tr><td>';
- message_html += '<div style=\"background-color:#990000\" id=\"redbox\">';
- message_html += '<table width=\"100%\" summary=\"message\"><tr><td width=\"8%\">';
- message_html += '<img style=\"vertical-align:center\" src=\"/themes/{$g['theme']}/images/icons/icon_exclam.gif\" width=\"28\" height=\"32\" alt=\"exclamation\" \/>';
- message_html += '<\/td><td width=\"70%\"><font color=\"white\">';
- message_html += '<b>' + message + '<\/b><\/font><\/td>';
-
- if (message.indexOf('apply') > 0) {
- message_html += '<td>';
- message_html += '<input name=\"apply\" type=\"submit\" class=\"formbtn\" id=\"apply\" value=\"" . gettext("Apply changes") . "\" \/>';
- message_html += '<\/td>';
- }
-
- message_html += '<\/tr><\/table><\/div><\/td><\/table><br \/>';
- jQuery('#inputerrors').html(message_html);
-
- NiftyCheck();
- Rounded(\"div#redbox\",\"all\",\"#FFF\",\"#990000\",\"smooth\");
- Rounded(\"td#blackbox\",\"all\",\"#FFF\",\"#000000\",\"smooth\");
-
- if (jQuery('#submit')) {
- jQuery('#submit').css('visibility','visible');
- }
- if (jQuery('#cancelbutton')) {
- jQuery('#cancelbutton').css('visibility','visible');
- }
- if (jQuery('#loading')) {
- jQuery('#loading').css('visibility','hidden');
- }
- if (jQuery('#inputerrors')) {
- window.scrollTo(0, 0);
- }
- }
- ";
-
- return $headjs;
-}
-
-?>
diff --git a/usr/local/www/help.php b/usr/local/www/help.php
deleted file mode 100644
index 8cee1ab..0000000
--- a/usr/local/www/help.php
+++ /dev/null
@@ -1,377 +0,0 @@
-<?php
-/* Redirector for Contextual Help System
- * Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- * (c) 2009 Jim Pingle <jimp@pfsense.org>
- *
- */
-
-require_once("guiconfig.inc");
-
-/* Define hash of jumpto url maps */
-
-/* Links to categories could probably be more specific. */
-$helppages = array(
- /* These pages are confirmed to work and have usable content */
- 'index.php' => 'https://doc.pfsense.org/index.php/Dashboard',
- 'license.php' => 'https://www.pfsense.org/about-pfsense/#legal',
- 'miniupnpd.xml' => 'https://doc.pfsense.org/index.php/What_are_UPnP_and_NAT-PMP',
- 'status_upnp.php' => 'https://doc.pfsense.org/index.php/What_are_UPnP_and_NAT-PMP',
- 'firewall_virtual_ip.php' => 'https://doc.pfsense.org/index.php/What_are_Virtual_IP_Addresses',
- 'firewall_virtual_ip_edit.php' => 'https://doc.pfsense.org/index.php/What_are_Virtual_IP_Addresses',
- 'firewall_aliases.php' => 'https://doc.pfsense.org/index.php/Aliases',
- 'firewall_aliases_edit.php' => 'https://doc.pfsense.org/index.php/Aliases',
- 'firewall_aliases_import.php' => 'https://doc.pfsense.org/index.php/Aliases',
- 'firewall_nat_out.php' => 'https://doc.pfsense.org/index.php/Outbound_NAT',
- 'firewall_nat_out_edit.php' => 'https://doc.pfsense.org/index.php/Outbound_NAT',
- 'firewall_rules.php' => 'https://doc.pfsense.org/index.php/Firewall_Rule_Basics',
- 'firewall_rules_edit.php' => 'https://doc.pfsense.org/index.php/Firewall_Rule_Basics',
- 'firewall_schedule.php' => 'https://doc.pfsense.org/index.php/Firewall_Rule_Schedules',
- 'firewall_schedule_edit.php' => 'https://doc.pfsense.org/index.php/Firewall_Rule_Schedules',
- 'interfaces_vlan.php' => 'https://doc.pfsense.org/index.php/VLAN_Trunking',
- 'interfaces_vlan_edit.php' => 'https://doc.pfsense.org/index.php/VLAN_Trunking',
- 'diag_routes.php' => 'https://doc.pfsense.org/index.php/Viewing_Routes',
- 'diag_packet_capture.php' => 'https://doc.pfsense.org/index.php/Sniffers,_Packet_Capture',
- 'diag_system_pftop.php' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage#pftop',
- 'status_rrd_graph.php' => 'https://doc.pfsense.org/index.php/RRD_Graphs',
- 'status_rrd_graph_img.php' => 'https://doc.pfsense.org/index.php/RRD_Graphs',
- 'status_rrd_graph_settings.php' => 'https://doc.pfsense.org/index.php/RRD_Graphs',
- 'firewall_nat.php' => 'https://doc.pfsense.org/index.php/How_can_I_forward_ports_with_pfSense',
- 'firewall_nat_edit.php' => 'https://doc.pfsense.org/index.php/How_can_I_forward_ports_with_pfSense',
- 'diag_arp.php' => 'https://doc.pfsense.org/index.php/ARP_Table',
- 'diag_backup.php' => 'https://doc.pfsense.org/index.php/Configuration_Backup_and_Restore',
- 'diag_confbak.php' => 'https://doc.pfsense.org/index.php/Configuration_History',
- 'diag_defaults.php' => 'https://doc.pfsense.org/index.php/Factory_Defaults',
- 'firewall_shaper.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide',
- 'firewall_shaper_layer7.php' => 'https://doc.pfsense.org/index.php/Layer_7',
- 'firewall_shaper_queues.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide',
- 'firewall_shaper_vinterface.php' => 'https://doc.pfsense.org/index.php/Limiters',
- 'firewall_shaper_wizards.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide',
- 'status_queues.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide',
- 'status_dhcp_leases.php' => 'https://doc.pfsense.org/index.php/DHCP_Leases',
- 'diag_dns.php' => 'https://doc.pfsense.org/index.php/DNS_Lookup',
- 'diag_dump_states.php' => 'https://doc.pfsense.org/index.php/Show_States',
- 'diag_resetstate.php' => 'https://doc.pfsense.org/index.php/Reset_States',
- 'diag_logs.php' => 'https://doc.pfsense.org/index.php/System_Logs',
- 'diag_logs_auth.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Authentication_Logs',
- 'diag_logs_dhcp.php' => 'https://doc.pfsense.org/index.php/DHCP_Logs',
- 'diag_logs_filter.php' => 'https://doc.pfsense.org/index.php/Firewall_Logs',
- 'diag_logs_filter_dynamic.php' => 'https://doc.pfsense.org/index.php/Firewall_Logs',
- 'diag_logs_filter_summary.php' => 'https://doc.pfsense.org/index.php/Firewall_Logs',
- 'diag_logs_ntpd.php' => 'https://doc.pfsense.org/index.php/NTP_Logs',
- 'diag_logs_ppp.php' => 'https://doc.pfsense.org/index.php/PPP_Logs',
- 'diag_logs_relayd.php' => 'https://doc.pfsense.org/index.php/Load_Balancer_Logs',
- 'diag_logs_settings.php' => 'https://doc.pfsense.org/index.php/Log_Settings',
- 'diag_logs_vpn.php' => 'https://doc.pfsense.org/index.php/PPTP_VPN_Logs',
- 'diag_logs_ipsec.php' => 'https://doc.pfsense.org/index.php/IPsec_Logs',
- 'diag_logs_openvpn.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Logs',
- 'diag_nanobsd.php' => 'https://doc.pfsense.org/index.php/NanoBSD_Diagnostics',
- 'diag_patterns.php' => 'https://doc.pfsense.org/index.php/Layer7_Pattern_Diagnostics',
- 'diag_ping.php' => 'https://doc.pfsense.org/index.php/Ping_Host',
- 'diag_pkglogs.php' => 'https://doc.pfsense.org/index.php/Package_Logs',
- 'diag_tables.php' => 'https://doc.pfsense.org/index.php/Tables',
- 'diag_system_activity.php' => 'https://doc.pfsense.org/index.php/System_Activity',
- 'diag_traceroute.php' => 'https://doc.pfsense.org/index.php/Traceroute',
- 'easyrule.php' => 'https://doc.pfsense.org/index.php/Easy_Rule',
- 'edit.php' => 'https://doc.pfsense.org/index.php/Edit_File',
- 'exec.php' => 'https://doc.pfsense.org/index.php/Execute_Command',
- 'firewall_nat_1to1.php' => 'https://doc.pfsense.org/index.php/1:1_NAT',
- 'firewall_nat_1to1_edit.php' => 'https://doc.pfsense.org/index.php/1:1_NAT',
- 'halt.php' => 'https://doc.pfsense.org/index.php/Halt_System',
- 'reboot.php' => 'https://doc.pfsense.org/index.php/Reboot_System',
- 'status_filter_reload.php' => 'https://doc.pfsense.org/index.php/Filter_Reload_Status',
- 'status_gateway_groups.php' => 'https://doc.pfsense.org/index.php/Gateway_Status',
- 'status_gateways.php' => 'https://doc.pfsense.org/index.php/Gateway_Status',
- 'status_graph.php' => 'https://doc.pfsense.org/index.php/Traffic_Graph',
- 'status_graph_cpu.php' => 'https://doc.pfsense.org/index.php/CPU_Load',
- 'status_interfaces.php' => 'https://doc.pfsense.org/index.php/Interface_Status',
- 'status_services.php' => 'https://doc.pfsense.org/index.php/Services_Status',
- 'status_wireless.php' => 'https://doc.pfsense.org/index.php/Wireless_Status',
- 'pkg_mgr.php' => 'https://doc.pfsense.org/index.php/Package_Manager',
- 'pkg_mgr_install.php' => 'https://doc.pfsense.org/index.php/Package_Manager',
- 'pkg_mgr_installed.php' => 'https://doc.pfsense.org/index.php/Package_Manager',
- 'pkg_mgr_settings.php' => 'https://doc.pfsense.org/index.php/Package_Manager_Settings',
- 'interfaces.php' => 'https://doc.pfsense.org/index.php/Interface_Settings',
- 'interfaces_assign.php' => 'https://doc.pfsense.org/index.php/Assign_Interfaces',
- 'interfaces_bridge.php' => 'https://doc.pfsense.org/index.php/Interface_Bridges',
- 'interfaces_bridge_edit.php' => 'https://doc.pfsense.org/index.php/Interface_Bridges',
- 'interfaces_gif.php' => 'https://doc.pfsense.org/index.php/GIF_Interfaces',
- 'interfaces_gif_edit.php' => 'https://doc.pfsense.org/index.php/GIF_Interfaces',
- 'interfaces_gre.php' => 'https://doc.pfsense.org/index.php/GRE_Interfaces',
- 'interfaces_gre_edit.php' => 'https://doc.pfsense.org/index.php/GRE_Interfaces',
- 'interfaces_groups.php' => 'https://doc.pfsense.org/index.php/Interface_Groups',
- 'interfaces_groups_edit.php' => 'https://doc.pfsense.org/index.php/Interface_Groups',
- 'interfaces_lagg.php' => 'https://doc.pfsense.org/index.php/LAGG_Interfaces',
- 'interfaces_lagg_edit.php' => 'https://doc.pfsense.org/index.php/LAGG_Interfaces',
- 'interfaces_ppps.php' => 'https://doc.pfsense.org/index.php/PPP_Interfaces',
- 'interfaces_ppps_edit.php' => 'https://doc.pfsense.org/index.php/PPP_Interfaces',
- 'interfaces_qinq.php' => 'https://doc.pfsense.org/index.php/QinQ_Interfaces',
- 'interfaces_qinq_edit.php' => 'https://doc.pfsense.org/index.php/QinQ_Interfaces',
- 'services_dyndns.php' => 'https://doc.pfsense.org/index.php/Dynamic_DNS',
- 'services_dyndns_edit.php' => 'https://doc.pfsense.org/index.php/Dynamic_DNS',
- 'services_rfc2136.php' => 'https://doc.pfsense.org/index.php/Dynamic_DNS',
- 'services_rfc2136_edit.php' => 'https://doc.pfsense.org/index.php/Dynamic_DNS',
- 'services_dhcp.php' => 'https://doc.pfsense.org/index.php/DHCP_Server',
- 'services_dhcp_edit.php' => 'https://doc.pfsense.org/index.php/DHCP_Server',
- 'services_dhcp_relay.php' => 'https://doc.pfsense.org/index.php/DHCP_Relay',
- 'services_dnsmasq.php' => 'https://doc.pfsense.org/index.php/DNS_Forwarder',
- 'services_dnsmasq_domainoverride_edit.php' => 'https://doc.pfsense.org/index.php/DNS_Forwarder',
- 'services_dnsmasq_edit.php' => 'https://doc.pfsense.org/index.php/DNS_Forwarder',
- 'services_igmpproxy.php' => 'https://doc.pfsense.org/index.php/IGMP_Proxy',
- 'services_igmpproxy_edit.php' => 'https://doc.pfsense.org/index.php/IGMP_Proxy',
- 'services_snmp.php' => 'https://doc.pfsense.org/index.php/SNMP_Daemon',
- 'services_wol.php' => 'https://doc.pfsense.org/index.php/Wake_on_LAN',
- 'services_wol_edit.php' => 'https://doc.pfsense.org/index.php/Wake_on_LAN',
- 'system.php' => 'https://doc.pfsense.org/index.php/General_Setup',
- 'system_advanced_admin.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup',
- 'system_advanced_firewall.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup#Firewall.2FNAT',
- 'system_advanced_misc.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup#Miscellaneous',
- 'system_advanced_network.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup#Firewall.2FNAT',
- 'system_advanced_notifications.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup#Notifications',
- 'system_advanced_sysctl.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup#System_Tunables',
- 'system_firmware.php' => 'https://doc.pfsense.org/index.php/Firmware_Updates',
- 'system_firmware_auto.php' => 'https://doc.pfsense.org/index.php/Firmware_Updates',
- 'system_firmware_check.php' => 'https://doc.pfsense.org/index.php/Firmware_Updates',
- 'system_firmware_settings.php' => 'https://doc.pfsense.org/index.php/Firmware_Updates',
- 'system_gateway_groups.php' => 'https://doc.pfsense.org/index.php/Gateway_Settings',
- 'system_gateway_groups_edit.php' => 'https://doc.pfsense.org/index.php/Gateway_Settings',
- 'system_gateways.php' => 'https://doc.pfsense.org/index.php/Gateway_Settings',
- 'system_gateways_edit.php' => 'https://doc.pfsense.org/index.php/Gateway_Settings',
- 'system_routes.php' => 'https://doc.pfsense.org/index.php/Static_Routes',
- 'system_routes_edit.php' => 'https://doc.pfsense.org/index.php/Static_Routes',
- 'system_authservers.php' => 'https://doc.pfsense.org/index.php/User_Authentication_Servers',
- 'system_groupmanager.php' => 'https://doc.pfsense.org/index.php/Group_Manager',
- 'system_groupmanager_addprivs.php' => 'https://doc.pfsense.org/index.php/Group_Manager',
- 'system_usermanager.php' => 'https://doc.pfsense.org/index.php/User_Manager',
- 'system_usermanager_addprivs.php' => 'https://doc.pfsense.org/index.php/User_Manager',
- 'system_usermanager_settings.php' => 'https://doc.pfsense.org/index.php/User_Manager',
- 'system_usermanager_settings_ldapacpicker.php' => 'https://doc.pfsense.org/index.php/User_Manager',
- 'system_usermanager_settings_test.php' => 'https://doc.pfsense.org/index.php/User_Manager',
- 'system_usermanager_passwordmg.php' => 'https://doc.pfsense.org/index.php/User_Manager',
- 'system_camanager.php' => 'https://doc.pfsense.org/index.php/Certificate_Management',
- 'system_certmanager.php' => 'https://doc.pfsense.org/index.php/Certificate_Management',
- 'vpn_l2tp.php' => 'https://doc.pfsense.org/index.php/L2TP_VPN_Settings',
- 'vpn_l2tp_users.php' => 'https://doc.pfsense.org/index.php/L2TP_VPN_Settings',
- 'vpn_l2tp_users_edit.php' => 'https://doc.pfsense.org/index.php/L2TP_VPN_Settings',
- 'vpn_pppoe.php' => 'https://doc.pfsense.org/index.php/PPPoE_Server_Settings',
- 'vpn_pppoe_edit.php' => 'https://doc.pfsense.org/index.php/PPPoE_Server_Settings',
- 'vpn_pptp.php' => 'https://doc.pfsense.org/index.php/PPTP_VPN_Settings',
- 'vpn_pptp_users.php' => 'https://doc.pfsense.org/index.php/PPTP_VPN_Settings',
- 'vpn_pptp_users_edit.php' => 'https://doc.pfsense.org/index.php/PPTP_VPN_Settings',
- 'diag_ipsec.php' => 'https://doc.pfsense.org/index.php/IPsec_Status',
- 'diag_ipsec_sad.php' => 'https://doc.pfsense.org/index.php/IPsec_Status',
- 'diag_ipsec_spd.php' => 'https://doc.pfsense.org/index.php/IPsec_Status',
- 'vpn_ipsec.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels',
- 'vpn_ipsec_mobile.php' => 'https://doc.pfsense.org/index.php/IPsec_Mobile_Clients',
- 'diag_ipsec_leases.php' => 'https://doc.pfsense.org/index.php/IPsec_Mobile_Clients',
- 'vpn_ipsec_phase1.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels',
- 'vpn_ipsec_phase2.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels',
- 'vpn_ipsec_keys.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels',
- 'vpn_ipsec_keys_edit.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels',
- 'vpn_ipsec_settings.php' => 'https://doc.pfsense.org/index.php/Advanced_IPsec_Settings',
- 'services_captiveportal.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
- 'services_captiveportal_filemanager.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
- 'services_captiveportal_ip.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
- 'services_captiveportal_ip_edit.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
- 'services_captiveportal_mac.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
- 'services_captiveportal_mac_edit.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
- 'services_captiveportal_hostname.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
- 'services_captiveportal_hostname_edit.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
- 'status_captiveportal.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Status',
- 'status_captiveportal_test.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Status',
- 'services_captiveportal_vouchers.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Vouchers',
- 'services_captiveportal_vouchers_edit.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Vouchers',
- 'status_captiveportal_voucher_rolls.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Vouchers',
- 'status_captiveportal_vouchers.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Vouchers',
- 'status_openvpn.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Status',
- 'vpn_openvpn_client.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Settings',
- 'vpn_openvpn_csc.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Settings',
- 'vpn_openvpn_server.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Settings',
- 'openvpn-client-export.xml' => 'https://doc.pfsense.org/index.php/OpenVPN_Client_Exporter', /* Package */
- 'vpn_openvpn_export.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Client_Exporter', /* Package */
- 'diag_authentication.php' => 'https://doc.pfsense.org/index.php/User_Authentication_Servers',
- 'diag_limiter_info.php' => 'https://doc.pfsense.org/index.php/Limiters',
- 'diag_pf_info.php' => 'https://doc.pfsense.org/index.php/Packet_Filter_Information',
- 'diag_smart.php' => 'https://doc.pfsense.org/index.php/SMART_Status',
- 'diag_states_summary.php' => 'https://doc.pfsense.org/index.php/States_Summary',
- 'interfaces_wireless.php' => 'https://doc.pfsense.org/index.php/Wireless_Interfaces',
- 'interfaces_wireless_edit.php' => 'https://doc.pfsense.org/index.php/Wireless_Interfaces',
- 'system_crlmanager.php' => 'https://doc.pfsense.org/index.php/Certificate_Management',
- 'crash_reporter.php' => 'https://doc.pfsense.org/index.php/Unexpected_Reboot_Troubleshooting',
- 'diag_dump_states_sources.php' => 'https://doc.pfsense.org/index.php/Show_Source_Tracking',
- 'diag_logs_gateways.php' => 'https://doc.pfsense.org/index.php/Gateway_Logs',
- 'diag_logs_resolver.php' => 'https://doc.pfsense.org/index.php/Resolver_Logs',
- 'diag_logs_routing.php' => 'https://doc.pfsense.org/index.php/Routing_Logs',
- 'diag_logs_wireless.php' => 'https://doc.pfsense.org/index.php/Wireless_Logs',
- 'diag_ndp.php' => 'https://doc.pfsense.org/index.php/NDP_Table',
- 'diag_sockets.php' => 'https://doc.pfsense.org/index.php/Diag_Sockets',
- 'diag_testport.php' => 'https://doc.pfsense.org/index.php/Test_Port',
- 'firewall_nat_npt.php' => 'https://doc.pfsense.org/index.php/NPt',
- 'firewall_nat_npt_edit.php' => 'https://doc.pfsense.org/index.php/NPt',
- 'services_captiveportal_zones.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
- 'services_captiveportal_zones_edit.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
- 'status_captiveportal_expire.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
- 'services_ntpd.php' => 'https://doc.pfsense.org/index.php/NTP_Server',
- 'status_ntpd.php' => 'https://doc.pfsense.org/index.php/NTP_Server',
- 'services_ntpd_gps.php' => 'https://doc.pfsense.org/index.php/NTP_Server',
- 'services_ntpd_pps.php' => 'https://doc.pfsense.org/index.php/NTP_Server',
- 'system_firmware_restorefullbackup.php' => 'https://doc.pfsense.org/index.php/Full_Backup',
- 'load_balancer_monitor.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing',
- 'load_balancer_monitor_edit.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing',
- 'load_balancer_pool.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing#Set_up_Load_Balancing_Pool',
- 'load_balancer_pool_edit.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing#Set_up_Load_Balancing_Pool',
- 'load_balancer_virtual_server.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing#Set_up_Virtual_Server',
- 'load_balancer_virtual_server_edit.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing#Set_up_Virtual_Server',
- 'load_balancer_setting.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing#Advanced_Settings',
- 'status_lb_pool.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing_Status',
- 'status_lb_vs.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing_Status',
- 'services_dhcpv6_relay.php' => 'https://doc.pfsense.org/index.php/DHCP_Relay',
- 'status_dhcpv6_leases.php' => 'https://doc.pfsense.org/index.php/DHCPv6_Leases',
- 'services_dhcpv6.php' => 'https://doc.pfsense.org/index.php/DHCPv6_Server',
- 'services_dhcpv6_edit.php' => 'https://doc.pfsense.org/index.php/DHCPv6_Server',
- 'services_router_advertisements.php' => 'https://doc.pfsense.org/index.php/Router_Advertisements',
- 'carp_status.php' => 'https://doc.pfsense.org/index.php/CARP_Status',
- 'system_hasync.php' => 'https://doc.pfsense.org/index.php/High_Availability',
- 'services_unbound.php' => 'https://doc.pfsense.org/index.php/Unbound_DNS_Resolver',
- 'services_unbound_advanced.php' => 'https://doc.pfsense.org/index.php/Unbound_DNS_Resolver#Advanced_Settings_Tab',
- 'services_unbound_acls.php' => 'https://doc.pfsense.org/index.php/Unbound_DNS_Resolver#Access_Lists_Tab',
- 'services_unbound_domainoverride_edit.php' => 'https://doc.pfsense.org/index.php/Unbound_DNS_Resolver',
- 'services_unbound_host_edit.php' => 'https://doc.pfsense.org/index.php/Unbound_DNS_Resolver',
- 'diag_gmirror.php' => 'https://doc.pfsense.org/index.php/Create_a_Software_RAID1_%28gmirror%29',
-
- /* From here down are packages. Not checking these as strictly,
- any information is better than nothing. */
- 'olsrd.xml' => 'https://doc.pfsense.org/index.php/OLSR_Daemon',
- 'routed.xml' => 'https://doc.pfsense.org/index.php/Routing_Information_Protocol_(RIP)', # RIP
- 'autoconfigbackup.xml' => 'https://doc.pfsense.org/index.php/AutoConfigBackup',
- 'phpservice.xml' => 'https://doc.pfsense.org/index.php/PHPService',
- 'anyterm.xml' => 'https://doc.pfsense.org/index.php/AnyTerm_package',
- 'avahi.xml' => 'https://doc.pfsense.org/index.php/Avahi_package',
- 'squid.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
- 'squid_auth.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
- 'squid_cache.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
- 'squid_extauth.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
- 'squid_nac.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
- 'squid_ng.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
- 'squid_traffic.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
- 'squid_upstream.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
- 'squid_users.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
- 'squidGuard.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
- 'squidguard.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
- 'squidguard_acl.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
- 'squidguard_default.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
- 'squidguard_dest.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
- 'squidguard_log.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
- 'squidguard_rewr.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
- 'squidguard_time.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
- 'bandwidthd.xml' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage',
- 'pfflowd.xml' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage',
- 'darkstat.xml' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage',
- 'rate.xml' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage',
- 'ntop.xml' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage',
- 'ntopng.xml' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage',
- 'vnstat.xml' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage',
- 'widentd.xml' => 'https://doc.pfsense.org/index.php/Widentd_package',
- 'tinydns.xml' => 'https://doc.pfsense.org/index.php/Tinydns_package',
- 'tinydns_domains.xml' => 'https://doc.pfsense.org/index.php/Tinydns_package',
- 'tinydns_sync.xml' => 'https://doc.pfsense.org/index.php/Tinydns_package',
- 'blinkled.xml' => 'https://doc.pfsense.org/index.php/BlinkLED_Package',
- 'havp.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning',
- 'havp_avset.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning',
- 'havp_blacklist.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning',
- 'havp_fscan.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning',
- 'havp_trans_exclude.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning',
- 'havp_whitelist.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning',
- 'snort.xml' => 'https://doc.pfsense.org/index.php/Setup_Snort_Package',
- 'snort/snort_interfaces.php' => 'https://doc.pfsense.org/index.php/Snort_interfaces',
- 'snort/snort_interfaces_global.php' => 'https://doc.pfsense.org/index.php/Snort_interfaces_global',
- 'snort/snort_download_updates.php' => 'https://doc.pfsense.org/index.php/Snort_updates',
- 'snort/snort_alerts.php' => 'https://doc.pfsense.org/index.php/Snort_alerts',
- 'snort/snort_blocked.php' => 'https://doc.pfsense.org/index.php/Snort_blocked_hosts',
- 'snort/snort_passlist.php' => 'https://doc.pfsense.org/index.php/Snort_passlist',
- 'snort/snort_passlist_edit.php' => 'https://doc.pfsense.org/index.php/Snort_passlist',
- 'snort/snort_interfaces_suppress.php' => 'https://doc.pfsense.org/index.php/Snort_suppress_list',
- 'snort/snort_interfaces_suppress_edit.php' => 'https://doc.pfsense.org/index.php/Snort_suppress_list',
- 'snort/snort_interfaces_edit.php' => 'https://doc.pfsense.org/index.php/Snort_interfaces_edit',
- 'snort/snort_rulesets.php' => 'https://doc.pfsense.org/index.php/Snort_rulesets',
- 'snort/snort_rules.php' => 'https://doc.pfsense.org/index.php/Snort_rules',
- 'snort/snort_define_servers.php' => 'https://doc.pfsense.org/index.php/Snort_define_servers',
- 'snort/snort_preprocessors.php' => 'https://doc.pfsense.org/index.php/Snort_preprocessors',
- 'snort/snort_barnyard.php' => 'https://doc.pfsense.org/index.php/Snort_barnyard2',
- 'snort/snort_ip_reputation.php' => 'https://doc.pfsense.org/index.php/Snort_ip_reputation_preprocessor',
- 'snort/snort_ip_list_mgmt.php' => 'https://doc.pfsense.org/index.php/Snort_ip_list_mgmt',
- 'snort/snort_sync.xml' => 'https://doc.pfsense.org/index.php/Snort_sync',
- 'stunnel.xml' => 'https://doc.pfsense.org/index.php/Stunnel_package',
- 'stunnel_certs.xml' => 'https://doc.pfsense.org/index.php/Stunnel_package',
- 'openbgpd.xml' => 'https://doc.pfsense.org/index.php/OpenBGPD_package',
- 'openbgpd_groups.xml' => 'https://doc.pfsense.org/index.php/OpenBGPD_package',
- 'openbgpd_neighbors.xml' => 'https://doc.pfsense.org/index.php/OpenBGPD_package',
- 'iperf.xml' => 'https://doc.pfsense.org/index.php/Iperf_package',
- 'iperfserver.xml' => 'https://doc.pfsense.org/index.php/Iperf_package',
- 'jail_template.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package',
- 'jailctl.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package',
- 'jailctl.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package',
- 'jailctl_defaults.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package',
- 'jailctl_settings.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package',
- 'siproxd.xml' => 'https://doc.pfsense.org/index.php/Siproxd_package',
- 'siproxdusers.xml' => 'https://doc.pfsense.org/index.php/Siproxd_package',
- 'open-vm-tools.xml' => 'https://doc.pfsense.org/index.php/Open_VM_Tools_package',
- 'arping.xml' => 'https://doc.pfsense.org/index.php/Arping_package',
- 'unbound.xml' => 'https://doc.pfsense.org/index.php/Unbound_package',
- 'nut.xml' => 'https://doc.pfsense.org/index.php/Nut_package',
-
-);
-
-$pagename = "";
-/* Check for parameter "page". */
-if ($_GET && isset($_GET['page'])) {
- $pagename = $_GET['page'];
-}
-
-/* If "page" is not found, check referring URL */
-if (empty($pagename)) {
- /* Attempt to parse out filename */
- $uri_split = "";
- preg_match("/\/(.*)\?(.*)/", $_SERVER["HTTP_REFERER"], $uri_split);
-
- /* If there was no match, there were no parameters, just grab the filename
- Otherwise, use the matched filename from above. */
- if (empty($uri_split[0])) {
- $pagename = ltrim(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_PATH), '/');
- } else {
- $pagename = $uri_split[1];
- }
-
- /* If the page name is still empty, the user must have requested / (index.php) */
- if (empty($pagename)) {
- $pagename = "index.php";
- }
-
- /* If the filename is pkg_edit.php or wizard.php, reparse looking
- for the .xml filename */
- if (($pagename == "pkg.php") || ($pagename == "pkg_edit.php") || ($pagename == "wizard.php")) {
- $param_split = explode('&', $uri_split[2]);
- foreach ($param_split as $param) {
- if (substr($param, 0, 4) == "xml=") {
- $xmlfile = explode('=', $param);
- $pagename = $xmlfile[1];
- }
- }
- }
-}
-
-/* Using the derived page name, attempt to find in the URL mapping hash */
-if (array_key_exists($pagename, $helppages)) {
- $helppage = $helppages[$pagename];
-}
-
-/* If we haven't determined a proper page, use a generic help page
- stating that a given page does not have help yet. */
-
-if (empty($helppage)) {
- $helppage = 'https://doc.pfsense.org/index.php/No_Help_Found';
-}
-
-/* Redirect to help page. */
-header("Location: {$helppage}");
-
-?>
diff --git a/usr/local/www/ifstats.php b/usr/local/www/ifstats.php
deleted file mode 100644
index 68cc6d8..0000000
--- a/usr/local/www/ifstats.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-/* $Id$ */
-/*
- ifstats.php
- part of pfSense (https://www.pfsense.org)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2005-2006 Scott Ullrich (sullrich@gmail.com)
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/netstat
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-xmlrpcinterfacestats
-##|*NAME=XMLRPC Interface Stats page
-##|*DESCR=Allow access to the 'XMLRPC Interface Stats' page.
-##|*MATCH=ifstats.php*
-##|-PRIV
-
- require_once('guiconfig.inc');
- require_once("interfaces.inc");
-
- $if = $_GET['if'];
-
- $realif = get_real_interface($if);
- if (!$realif) {
- $realif = $if; // Need for IPsec case interface.
- }
-
- $ifinfo = pfSense_get_interface_stats($realif);
-
- $temp = gettimeofday();
- $timing = (double)$temp["sec"] + (double)$temp["usec"] / 1000000.0;
-
- header("Last-Modified: " . gmdate("D, j M Y H:i:s") . " GMT");
- header("Expires: " . gmdate("D, j M Y H:i:s", time()) . " GMT");
- header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP/1.1
- header("Pragma: no-cache"); // HTTP/1.0
-
- echo "$timing|" . $ifinfo['inbytes'] . "|" . $ifinfo['outbytes'] . "\n";
-
-?>
diff --git a/usr/local/www/includes/functions.inc.php b/usr/local/www/includes/functions.inc.php
deleted file mode 100644
index 2c48543..0000000
--- a/usr/local/www/includes/functions.inc.php
+++ /dev/null
@@ -1,407 +0,0 @@
-<?
-/*
- functions.inc.php
- pfSense_MODULE: ajax
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-*/
-
-if (Connection_Aborted()) {
- exit;
-}
-
-require_once("config.inc");
-require_once("pfsense-utils.inc");
-
-function get_stats() {
- $stats['cpu'] = cpu_usage();
- $stats['mem'] = mem_usage();
- $stats['uptime'] = get_uptime();
- $stats['states'] = get_pfstate();
- $stats['temp'] = get_temp();
- $stats['datetime'] = update_date_time();
- $stats['interfacestatistics'] = get_interfacestats();
- $stats['interfacestatus'] = get_interfacestatus();
- $stats['gateways'] = get_gatewaystats();
- $stats['cpufreq'] = get_cpufreq();
- $stats['load_average'] = get_load_average();
- $stats['mbuf'] = get_mbuf();
- $stats['mbufpercent'] = get_mbuf(true);
- $stats['statepercent'] = get_pfstate(true);
- $stats = join("|", $stats);
- return $stats;
-}
-
-function get_gatewaystats() {
- global $config;
- if (isset($config["widgets"]["gateways_widget"]["display_type"])) {
- $display_type = $config["widgets"]["gateways_widget"]["display_type"];
- } else {
- $display_type = "gw_ip";
- }
-
- $a_gateways = return_gateways_array();
- $gateways_status = array();
- $gateways_status = return_gateways_status(true);
- $data = "";
- $isfirst = true;
- foreach ($a_gateways as $gname => $gw) {
- if (!$isfirst) {
- $data .= ",";
- }
- $isfirst = false;
- $data .= $gw['name'] . ",";
-
- $monitor_address = "";
- $monitor_address_disp = "";
- if ($display_type == "monitor_ip" || $display_type == "both_ip") {
- $monitor_address = $gw['monitor'];
- if ($monitor_address != "" && $display_type == "both_ip") {
- $monitor_address_disp = " (" . $monitor_address . ")";
- } else {
- $monitor_address_disp = $monitor_address;
- }
- }
-
- if ($gateways_status[$gname]) {
- if ($display_type == "gw_ip" || $display_type == "both_ip" || ($display_type == "monitor_ip" && $monitor_address == "")) {
- $if_gw = lookup_gateway_ip_by_name($gname);
- } else {
- $if_gw = "";
- }
- if ($monitor_address == $if_gw) {
- $monitor_address_disp = "";
- }
-
- $data .= "<b>" . $if_gw . $monitor_address_disp . "</b>,";
- $gws = $gateways_status[$gname];
- switch (strtolower($gws['status'])) {
- case "none":
- $online = "Online";
- $bgcolor = "#90EE90"; // lightgreen
- break;
- case "down":
- $online = "Offline";
- $bgcolor = "#F08080"; // lightcoral
- break;
- case "delay":
- $online = "Latency";
- $bgcolor = "#F0E68C"; // khaki
- break;
- case "loss":
- $online = "Packetloss";
- $bgcolor = "#F0E68C"; // khaki
- break;
- default:
- $online = "Pending";
- break;
- }
- } else {
- if ($display_type == "gw_ip" || $display_type == "both_ip" || ($display_type == "monitor_ip" && $monitor_address == "")) {
- $if_gw = "~";
- } else {
- $if_gw = "";
- }
- $data .= $if_gw . $monitor_address_disp . ",";
- $gws['delay'] = "~";
- $gws['loss'] = "~";
- $online = "Unknown";
- $bgcolor = "#ADD8E6"; // lightblue
- }
- $data .= ($online == "Pending") ? "{$online},{$online}," : "{$gws['delay']},{$gws['loss']},";
- $data .= "{$online}^{$bgcolor}";
- }
- return $data;
-}
-
-function get_uptime() {
- $uptime = get_uptime_sec();
-
- if (intval($uptime) == 0) {
- return;
- }
-
- $updays = (int)($uptime / 86400);
- $uptime %= 86400;
- $uphours = (int)($uptime / 3600);
- $uptime %= 3600;
- $upmins = (int)($uptime / 60);
- $uptime %= 60;
- $upsecs = (int)($uptime);
-
- $uptimestr = "";
- if ($updays > 1) {
- $uptimestr .= "$updays Days ";
- } else if ($updays > 0) {
- $uptimestr .= "1 Day ";
- }
-
- if ($uphours > 1) {
- $hours = "s";
- }
-
- if ($upmins > 1) {
- $minutes = "s";
- }
-
- if ($upmins > 1) {
- $seconds = "s";
- }
-
- $uptimestr .= sprintf("%02d Hour$hours %02d Minute$minutes %02d Second$seconds", $uphours, $upmins, $upsecs);
- return $uptimestr;
-}
-
-/* Calculates non-idle CPU time and returns as a percentage */
-function cpu_usage() {
- $duration = 1;
- $diff = array('user', 'nice', 'sys', 'intr', 'idle');
- $cpuTicks = array_combine($diff, explode(" ", get_single_sysctl('kern.cp_time')));
- sleep($duration);
- $cpuTicks2 = array_combine($diff, explode(" ", get_single_sysctl('kern.cp_time')));
-
- $totalStart = array_sum($cpuTicks);
- $totalEnd = array_sum($cpuTicks2);
-
- // Something wrapped ?!?!
- if ($totalEnd <= $totalStart) {
- return 0;
- }
-
- // Calculate total cycles used
- $totalUsed = ($totalEnd - $totalStart) - ($cpuTicks2['idle'] - $cpuTicks['idle']);
-
- // Calculate the percentage used
- $cpuUsage = floor(100 * ($totalUsed / ($totalEnd - $totalStart)));
-
- return $cpuUsage;
-}
-
-function get_pfstate($percent=false) {
- global $config;
- $matches = "";
- if (isset($config['system']['maximumstates']) and $config['system']['maximumstates'] > 0) {
- $maxstates="{$config['system']['maximumstates']}";
- } else {
- $maxstates=pfsense_default_state_size();
- }
- $curentries = `/sbin/pfctl -si |grep current`;
- if (preg_match("/([0-9]+)/", $curentries, $matches)) {
- $curentries = $matches[1];
- }
- if (!is_numeric($curentries)) {
- $curentries = 0;
- }
- if ($percent) {
- if (intval($maxstates) > 0) {
- return round(($curentries / $maxstates) * 100, 0);
- } else {
- return "NA";
- }
- } else {
- return $curentries . "/" . $maxstates;
- }
-}
-
-function has_temp() {
- /* no known temp monitors available at present */
-
- /* should only reach here if there is no hardware monitor */
- return false;
-}
-
-function get_hwtype() {
- return;
-}
-
-function get_mbuf($percent=false) {
- $mbufs_output=trim(`/usr/bin/netstat -mb | /usr/bin/grep "mbuf clusters in use" | /usr/bin/awk '{ print $1 }'`);
- list($mbufs_current, $mbufs_cache, $mbufs_total, $mbufs_max) = explode("/", $mbufs_output);
- if ($percent) {
- if ($mbufs_max > 0) {
- return round(($mbufs_total / $mbufs_max) * 100, 0);
- } else {
- return "NA";
- }
- } else {
- return "{$mbufs_total}/{$mbufs_max}";
- }
-}
-
-function get_temp() {
- $temp_out = get_single_sysctl("dev.cpu.0.temperature");
- if ($temp_out == "") {
- $temp_out = get_single_sysctl("hw.acpi.thermal.tz0.temperature");
- }
-
- // Remove 'C' from the end
- return rtrim($temp_out, 'C');
-}
-
-/* Get mounted filesystems and usage. Do not display entries for virtual filesystems (e.g. devfs, nullfs, unionfs) */
-function get_mounted_filesystems() {
- $mout = "";
- $filesystems = array();
- exec("/bin/df -Tht ufs,zfs,cd9660 | /usr/bin/awk '{print $1, $2, $3, $6, $7;}'", $mout);
-
- /* Get rid of the header */
- array_shift($mout);
- foreach ($mout as $fs) {
- $f = array();
- list($f['device'], $f['type'], $f['total_size'], $f['percent_used'], $f['mountpoint']) = explode(' ', $fs);
-
- /* We dont' want the trailing % sign. */
- $f['percent_used'] = trim($f['percent_used'], '%');
-
- $filesystems[] = $f;
- }
- return $filesystems;
-}
-
-function disk_usage($slice = '/') {
- $dfout = "";
- exec("/bin/df -h {$slice} | /usr/bin/tail -n 1 | /usr/bin/awk '{ print $5 }' | /usr/bin/cut -d '%' -f 1", $dfout);
- $diskusage = trim($dfout[0]);
-
- return $diskusage;
-}
-
-function swap_usage() {
- exec("/usr/sbin/swapinfo", $swap_info);
- $swap_used = "";
- foreach ($swap_info as $line) {
- if (preg_match('/(\d+)%$/', $line, $matches)) {
- $swap_used = $matches[1];
- break;
- }
- }
-
- return $swap_used;
-}
-
-function mem_usage() {
- $totalMem = get_single_sysctl("vm.stats.vm.v_page_count");
- if ($totalMem > 0) {
- $inactiveMem = get_single_sysctl("vm.stats.vm.v_inactive_count");
- $cachedMem = get_single_sysctl("vm.stats.vm.v_cache_count");
- $freeMem = get_single_sysctl("vm.stats.vm.v_free_count");
- $usedMem = $totalMem - ($inactiveMem + $cachedMem + $freeMem);
- $memUsage = round(($usedMem * 100) / $totalMem, 0);
- } else {
- $memUsage = "NA";
- }
-
- return $memUsage;
-}
-
-function update_date_time() {
- $datetime = date("D M j G:i:s T Y");
- return $datetime;
-}
-
-function get_cpufreq() {
- $cpufreqs = "";
- $out = "";
- $cpufreqs = explode(" ", get_single_sysctl('dev.cpu.0.freq_levels'));
- $maxfreq = explode("/", $cpufreqs[0]);
- $maxfreq = $maxfreq[0];
- $curfreq = "";
- $curfreq = get_single_sysctl('dev.cpu.0.freq');
- if (($curfreq > 0) && ($curfreq != $maxfreq)) {
- $out = "Current: {$curfreq} MHz, Max: {$maxfreq} MHz";
- }
- return $out;
-}
-
-function get_cpu_count($show_detail = false) {
- $cpucount = get_single_sysctl('kern.smp.cpus');
-
- if ($show_detail) {
- $cpudetail = "";
- exec("/usr/bin/grep 'SMP.*package.*core' /var/log/dmesg.boot | /usr/bin/cut -f2- -d' '", $cpudetail);
- $cpucount = $cpudetail[0];
- }
- return $cpucount;
-}
-
-function get_load_average() {
- $load_average = "";
- exec("/usr/bin/uptime | /usr/bin/sed 's/^.*: //'", $load_average);
- return $load_average[0];
-}
-
-function get_interfacestats() {
- global $config;
- //build interface list for widget use
- $ifdescrs = get_configured_interface_list();
-
- $array_in_packets = array();
- $array_out_packets = array();
- $array_in_bytes = array();
- $array_out_bytes = array();
- $array_in_errors = array();
- $array_out_errors = array();
- $array_collisions = array();
- $array_interrupt = array();
- $new_data = "";
-
- //build data arrays
- foreach ($ifdescrs as $ifdescr => $ifname) {
- $ifinfo = get_interface_info($ifdescr);
- $new_data .= "{$ifinfo['inpkts']},";
- $new_data .= "{$ifinfo['outpkts']},";
- $new_data .= format_bytes($ifinfo['inbytes']) . ",";
- $new_data .= format_bytes($ifinfo['outbytes']) . ",";
- if (isset($ifinfo['inerrs'])) {
- $new_data .= "{$ifinfo['inerrs']},";
- $new_data .= "{$ifinfo['outerrs']},";
- } else {
- $new_data .= "0,";
- $new_data .= "0,";
- }
- if (isset($ifinfo['collisions'])) {
- $new_data .= htmlspecialchars($ifinfo['collisions']) . ",";
- } else {
- $new_data .= "0,";
- }
- }//end for
-
- return $new_data;
-}
-
-function get_interfacestatus() {
- $data = "";
- global $config;
-
- //build interface list for widget use
- $ifdescrs = get_configured_interface_with_descr();
-
- foreach ($ifdescrs as $ifdescr => $ifname) {
- $ifinfo = get_interface_info($ifdescr);
- $data .= $ifname . "^";
- if ($ifinfo['status'] == "up" || $ifinfo['status'] == "associated") {
- $data .= "up";
- } else if ($ifinfo['status'] == "no carrier") {
- $data .= "down";
- } else if ($ifinfo['status'] == "down") {
- $data .= "block";
- }
- $data .= "^";
- if ($ifinfo['ipaddr']) {
- $data .= "<strong>" . htmlspecialchars($ifinfo['ipaddr']) . "</strong>";
- }
- $data .= "^";
- if ($ifinfo['ipaddrv6']) {
- $data .= "<strong>" . htmlspecialchars($ifinfo['ipaddrv6']) . "</strong>";
- }
- $data .= "^";
- if ($ifinfo['status'] != "down") {
- $data .= htmlspecialchars($ifinfo['media']);
- }
-
- $data .= "~";
-
- }
- return $data;
-}
-
-?>
diff --git a/usr/local/www/index.php b/usr/local/www/index.php
deleted file mode 100644
index ba39623..0000000
--- a/usr/local/www/index.php
+++ /dev/null
@@ -1,799 +0,0 @@
-<?php
-/* $Id$ */
-/*
- index.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004-2012 Scott Ullrich
- All rights reserved.
-
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- oR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ifconfig
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-system-login/logout
-##|*NAME=System: Login / Logout page / Dashboard
-##|*DESCR=Allow access to the 'System: Login / Logout' page and Dashboard.
-##|*MATCH=index.php*
-##|-PRIV
-
-// Turn on buffering to speed up rendering
-ini_set('output_buffering', 'true');
-
-// Start buffering with a cache size of 100000
-ob_start(null, "1000");
-
-
-## Load Essential Includes
-require_once('guiconfig.inc');
-require_once('functions.inc');
-require_once('notices.inc');
-require_once("pkg-utils.inc");
-
-if (isset($_REQUEST['closenotice'])) {
- close_notice($_REQUEST['closenotice']);
- echo get_menu_messages();
- exit;
-}
-if ($_REQUEST['act'] == 'alias_info_popup' && !preg_match("/\D/", $_REQUEST['aliasid'])) {
- alias_info_popup($_REQUEST['aliasid']);
- exit;
-}
-
-if ($g['disablecrashreporter'] != true) {
- // Check to see if we have a crash report
- $x = 0;
- if (file_exists("/tmp/PHP_errors.log")) {
- $total = `/usr/bin/grep -vi warning /tmp/PHP_errors.log | /usr/bin/wc -l | /usr/bin/awk '{ print $1 }'`;
- if ($total > 0) {
- $x++;
- }
- }
- $crash = glob("/var/crash/*");
- $skip_files = array(".", "..", "minfree", "");
- if (is_array($crash)) {
- foreach ($crash as $c) {
- if (!in_array(basename($c), $skip_files)) {
- $x++;
- }
- }
- if ($x > 0) {
- $savemsg = "{$g['product_name']} has detected a crash report or programming bug. Click <a href='crash_reporter.php'>here</a> for more information.";
- }
- }
-}
-
-##build list of widgets
-$directory = "/usr/local/www/widgets/widgets/";
-$dirhandle = opendir($directory);
-$filename = "";
-$widgetnames = array();
-$widgetfiles = array();
-$widgetlist = array();
-
-while (false !== ($filename = readdir($dirhandle))) {
- $periodpos = strpos($filename, ".");
- /* Ignore files not ending in .php */
- if (substr($filename, -4, 4) != ".php") {
- continue;
- }
- $widgetname = substr($filename, 0, $periodpos);
- $widgetnames[] = $widgetname;
- if ($widgetname != "system_information") {
- $widgetfiles[] = $filename;
- }
-}
-
-##sort widgets alphabetically
-sort($widgetfiles);
-
-##insert the system information widget as first, so as to be displayed first
-array_unshift($widgetfiles, "system_information.widget.php");
-
-##if no config entry found, initialize config entry
-if (!is_array($config['widgets'])) {
- $config['widgets'] = array();
-}
-
-if ($_POST && $_POST['submit']) {
- $config['widgets']['sequence'] = $_POST['sequence'];
-
- foreach ($widgetnames as $widget) {
- if ($_POST[$widget . '-config']) {
- $config['widgets'][$widget . '-config'] = $_POST[$widget . '-config'];
- }
- }
-
- write_config(gettext("Widget configuration has been changed."));
- header("Location: index.php");
- exit;
-}
-
-## Load Functions Files
-require_once('includes/functions.inc.php');
-
-## Check to see if we have a swap space,
-## if true, display, if false, hide it ...
-if (file_exists("/usr/sbin/swapinfo")) {
- $swapinfo = `/usr/sbin/swapinfo`;
- if (stristr($swapinfo, '%') == true) {
- $showswap=true;
- }
-}
-
-## User recently restored his config.
-## If packages are installed lets resync
-if (file_exists('/conf/needs_package_sync')) {
- if ($config['installedpackages'] <> '' && is_array($config['installedpackages']['package'])) {
- if ($g['platform'] == "pfSense" || $g['platform'] == "nanobsd") {
- ## If the user has logged into webGUI quickly while the system is booting then do not redirect them to
- ## the package reinstall page. That is about to be done by the boot script anyway.
- ## The code in fbegin.inc will put up a notice to the user.
- if (!platform_booting()) {
- header('Location: pkg_mgr_install.php?mode=reinstallall');
- exit;
- }
- }
- } else {
- conf_mount_rw();
- @unlink('/conf/needs_package_sync');
- conf_mount_ro();
- }
-}
-
-## If it is the first time webConfigurator has been
-## accessed since initial install show this stuff.
-if (file_exists('/conf/trigger_initial_wizard')) {
- $lang_code = system_get_language_code();
- $lang_codeset = system_get_language_codeset();
- echo <<<EOF
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="$lang_code" xml:lang="$lang_code">
-<head>
- <title>{$g['product_name']}.localdomain - {$g['product_name']} first time setup</title>
- <meta http-equiv="Content-Type" content="text/html; charset=$lang_codeset" />
- <link rel="stylesheet" type="text/css" href="/niftycssprintCode.css" media="print" />
- <script type="text/javascript">var theme = "{$g['theme']}"</script>
- <script type="text/javascript" src="/themes/{$g['theme']}/loader.js"></script>
-
-EOF;
-
- echo "<body link=\"#0000CC\" vlink=\"#0000CC\" alink=\"#0000CC\">\n";
-
- if (file_exists("/usr/local/www/themes/{$g['theme']}/wizard.css")) {
- echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/themes/{$g['theme']}/wizard.css\" media=\"all\" />\n";
- } else {
- echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/themes/{$g['theme']}/all.css\" media=\"all\" />";
- }
-
- echo "<form>\n";
- echo "<center>\n";
- echo "<img src=\"/themes/{$g['theme']}/images/logo.gif\" border=\"0\" alt=\"logo\" /><p>\n";
- echo "<div \" style=\"width:700px;background-color:#ffffff\" id=\"nifty\">\n";
- echo sprintf(gettext("Welcome to %s!\n"), $g['product_name']) . "<p>";
- echo gettext("One moment while we start the initial setup wizard.") . "<p>\n";
- echo gettext("Embedded platform users: Please be patient, the wizard takes a little longer to run than the normal GUI.") . "<p>\n";
- echo sprintf(gettext("To bypass the wizard, click on the %s logo on the initial page."), $g['product_name']) . "\n";
- echo "</div>\n";
- echo "<meta http-equiv=\"refresh\" content=\"1;url=wizard.php?xml=setup_wizard.xml\">\n";
- echo "<script type=\"text/javascript\">\n";
- echo "//<![CDATA[\n";
- echo "NiftyCheck();\n";
- echo "Rounded(\"div#nifty\",\"all\",\"#AAA\",\"#FFFFFF\",\"smooth\");\n";
- echo "//]]>\n";
- echo "</script>\n";
- exit;
-}
-
-
-## Find out whether there's hardware encryption or not
-unset($hwcrypto);
-$fd = @fopen("{$g['varlog_path']}/dmesg.boot", "r");
-if ($fd) {
- while (!feof($fd)) {
- $dmesgl = fgets($fd);
- if (preg_match("/^hifn.: (.*?),/", $dmesgl, $matches) or
- preg_match("/.*(VIA Padlock)/", $dmesgl, $matches) or
- preg_match("/^safe.: (\w.*)/", $dmesgl, $matches) or
- preg_match("/^ubsec.: (.*?),/", $dmesgl, $matches) or
- preg_match("/^padlock.: <(.*?)>,/", $dmesgl, $matches) or
- preg_match("/^glxsb.: (.*?),/", $dmesgl, $matches) or
- preg_match("/^aesni.: <(.*?)>/", $dmesgl, $matches)) {
- $hwcrypto = $matches[1];
- break;
- }
- }
- fclose($fd);
-}
-
-##build widget saved list information
-if ($config['widgets'] && $config['widgets']['sequence'] != "") {
- $pconfig['sequence'] = $config['widgets']['sequence'];
-
- $widgetlist = $pconfig['sequence'];
- $colpos = array();
- $savedwidgetfiles = array();
- $widgetname = "";
- $widgetlist = explode(",", $widgetlist);
-
- ##read the widget position and display information
- foreach ($widgetlist as $widget) {
- $dashpos = strpos($widget, "-");
- $widgetname = substr($widget, 0, $dashpos);
- $colposition = strpos($widget, ":");
- $displayposition = strrpos($widget, ":");
- $colpos[] = substr($widget, $colposition + 1, $displayposition - $colposition - 1);
- $displayarray[] = substr($widget, $displayposition + 1);
- $savedwidgetfiles[] = $widgetname . ".widget.php";
- }
-
- ##add widgets that may not be in the saved configuration, in case they are to be displayed later
- foreach ($widgetfiles as $defaultwidgets) {
- if (!in_array($defaultwidgets, $savedwidgetfiles)) {
- $savedwidgetfiles[] = $defaultwidgets;
- }
- }
-
- ##find custom configurations of a particular widget and load its info to $pconfig
- foreach ($widgetnames as $widget) {
- if ($config['widgets'][$widget . '-config']) {
- $pconfig[$widget . '-config'] = $config['widgets'][$widget . '-config'];
- }
- }
-
- $widgetlist = $savedwidgetfiles;
-} else {
- // no saved widget sequence found, build default list.
- $widgetlist = $widgetfiles;
-}
-
-##build list of php include files
-$phpincludefiles = array();
-$directory = "/usr/local/www/widgets/include/";
-$dirhandle = opendir($directory);
-$filename = "";
-while (false !== ($filename = readdir($dirhandle))) {
- $phpincludefiles[] = $filename;
-}
-foreach ($phpincludefiles as $includename) {
- if (!stristr($includename, ".inc")) {
- continue;
- }
- include($directory . $includename);
-}
-
-##begin AJAX
-$jscriptstr = <<<EOD
-<script type="text/javascript">
-//<![CDATA[
-
-function widgetAjax(widget) {
- uri = "widgets/widgets/" + widget + ".widget.php";
- var opt = {
- // Use GET
- type: 'get',
- async: true,
- // Handle 404
- statusCode: {
- 404: function(t) {
- alert('Error 404: location "' + t.statusText + '" was not found.');
- }
- },
- // Handle other errors
- error: function(t) {
- alert('Error ' + t.status + ' -- ' + t.statusText);
- },
- success: function(data) {
- widget2 = '#' + widget + "-loader";
- jQuery(widget2).fadeOut(1000,function() {
- jQuery('#' + widget).show();
- });
- jQuery('#' + widget).html(data);
- }
- }
- jQuery.ajax(uri, opt);
-}
-
-
-function addWidget(selectedDiv) {
- selectedDiv2 = '#' + selectedDiv + "-container";
- if (jQuery(selectedDiv2).css('display') != "none")
- {
- jQuery(selectedDiv2).effect('shake',{times: 2}, 100);
- }
- else
- {
- jQuery(selectedDiv2).show('blind');
- widgetAjax(selectedDiv);
- selectIntLink = selectedDiv2 + "-input";
- jQuery(selectIntLink).val("show");
- showSave();
- }
-}
-
-function configureWidget(selectedDiv) {
- selectIntLink = '#' + selectedDiv + "-settings";
- if (jQuery(selectIntLink).css('display') == "none") {
- jQuery(selectIntLink).show();
- } else {
- jQuery(selectIntLink).hide();
- }
-}
-
-function showWidget(selectedDiv, swapButtons) {
- //appear element
- jQuery('#' + selectedDiv).show('blind');
- showSave();
- d = document;
- if (swapButtons) {
- selectIntLink = selectedDiv + "-min";
- textlink = d.getElementById(selectIntLink);
- textlink.style.display = "inline";
-
-
- selectIntLink = selectedDiv + "-open";
- textlink = d.getElementById(selectIntLink);
- textlink.style.display = "none";
-
- }
- selectIntLink = selectedDiv + "-container-input";
- textlink = d.getElementById(selectIntLink);
- textlink.value = "show";
-
-}
-
-function minimizeWidget(selectedDiv, swapButtons) {
- //fade element
- jQuery('#' + selectedDiv).hide('blind');
- showSave();
- d = document;
- if (swapButtons) {
- selectIntLink = selectedDiv + "-open";
- textlink = d.getElementById(selectIntLink);
- textlink.style.display = "inline";
-
- selectIntLink = selectedDiv + "-min";
- textlink = d.getElementById(selectIntLink);
- textlink.style.display = "none";
- }
- selectIntLink = selectedDiv + "-container-input";
- textlink = d.getElementById(selectIntLink);
- textlink.value = "hide";
-
-}
-
-function closeWidget(selectedDiv) {
- showSave();
- selectedDiv2 = "#" + selectedDiv + "-container";
- jQuery(selectedDiv2).hide('blind');
- selectIntLink = "#" + selectedDiv + "-container-input";
- jQuery(selectIntLink).val("close");
-}
-
-function showSave() {
- d = document;
- selectIntLink = "submit";
- textlink = d.getElementById(selectIntLink);
- textlink.style.display = "inline";
-}
-
-function updatePref() {
- var widgets = document.getElementsByClassName('widgetdiv');
- var widgetSequence = "";
- var firstprint = false;
- d = document;
- for (i = 0; i < widgets.length; i++) {
- if (firstprint) {
- widgetSequence += ",";
- }
- var widget = widgets[i].id;
- widgetSequence += widget + ":" + widgets[i].parentNode.id + ":";
- widget = widget + "-input";
- textlink = d.getElementById(widget).value;
- widgetSequence += textlink;
- firstprint = true;
- }
- selectLink = "sequence";
- textlink = d.getElementById(selectLink);
- textlink.value = widgetSequence;
- return true;
-}
-
-function hideAllWidgets() {
- jQuery('#niftyOutter').fadeTo('slow', 0.2);
-}
-
-function showAllWidgets() {
- jQuery('#niftyOutter').fadeTo('slow', 1.0);
-}
-
-
-function changeTabDIV(selectedDiv) {
- var dashpos = selectedDiv.indexOf("-");
- var tabclass = selectedDiv.substring(0, dashpos);
- d = document;
-
- //get deactive tabs first
- tabclass = tabclass + "-class-tabdeactive";
- var tabs = document.getElementsByClassName(tabclass);
- var incTabSelected = selectedDiv + "-deactive";
- for (i = 0; i < tabs.length; i++) {
- var tab = tabs[i].id;
- dashpos = tab.lastIndexOf("-");
- var tab2 = tab.substring(0, dashpos) + "-deactive";
- if (tab2 == incTabSelected) {
- tablink = d.getElementById(tab2);
- tablink.style.display = "none";
- tab2 = tab.substring(0, dashpos) + "-active";
- tablink = d.getElementById(tab2);
- tablink.style.display = "table-cell";
-
- //now show main div associated with link clicked
- tabmain = d.getElementById(selectedDiv);
- tabmain.style.display = "block";
- }
- else
- {
- tab2 = tab.substring(0, dashpos) + "-deactive";
- tablink = d.getElementById(tab2);
- tablink.style.display = "table-cell";
- tab2 = tab.substring(0, dashpos) + "-active";
- tablink = d.getElementById(tab2);
- tablink.style.display = "none";
-
- //hide sections we don't want to see
- tab2 = tab.substring(0, dashpos);
- tabmain = d.getElementById(tab2);
- tabmain.style.display = "none";
-
- }
- }
-}
-//]]>
-</script>
-EOD;
-
-
-## Set Page Title and Include Header
-$pgtitle = array(gettext("Status: Dashboard"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-
-<script type="text/javascript">
-//<![CDATA[
-columns = ['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8', 'col9', 'col10'];
-//]]>
-</script>
-
-<?php
-include("fbegin.inc");
-echo $jscriptstr;
-if (!file_exists("/usr/local/www/themes/{$g['theme']}/no_big_logo")) {
- echo "<center><img src=\"./themes/".$g['theme']."/images/logobig.jpg\" alt=\"big logo\" /></center><br />";
-}
-
-/* Print package server mismatch warning. See https://redmine.pfsense.org/issues/484 */
-if (!verify_all_package_servers()) {
- print_info_box(package_server_mismatch_message());
-}
-
-if ($savemsg) {
- print_info_box($savemsg);
-}
-
-pfSense_handle_custom_code("/usr/local/pkg/dashboard/pre_dashboard");
-
-?>
-<div id="widgetcontainer" style="display:none">
- <div id="content1"><h1><?=gettext("Available Widgets"); ?></h1><p><?php
- $widgetfiles_add = $widgetfiles;
- sort($widgetfiles_add);
- foreach ($widgetfiles_add as $widget) {
- if (!stristr($widget, "widget.php")) {
- continue;
- }
-
- $periodpos = strpos($widget, ".");
- $widgetname = substr($widget, 0, $periodpos);
- $nicename = $widgetname;
- $nicename = str_replace("_", " ", $nicename);
- //make the title look nice
- $nicename = ucwords($nicename);
-
- $widgettitle = $widgetname . "_title";
- $widgettitlelink = $widgetname . "_title_link";
- if ($$widgettitle != "") {
- //echo widget title
- ?>
- <span style="cursor: pointer;" onclick='return addWidget("<?php echo $widgetname; ?>")'>
- <u><?php echo $$widgettitle; ?></u></span><br />
- <?php
- } else {
- ?>
- <span style="cursor: pointer;" onclick='return addWidget("<?php echo $widgetname; ?>")'>
- <u><?php echo $nicename; ?></u></span><br /><?php
- }
- }
- ?>
- </p>
- </div>
-</div>
-
-<div id="welcomecontainer" style="display:none">
- <div id="welcome-container">
- <div style="float:left;width:100%;padding: 2px">
- <h1><?=gettext("Welcome to the Dashboard page"); ?>!</h1>
- </div>
- <div onclick="domTT_close(this);showAllWidgets();" style="width:87%; position: absolute; cursor:pointer; padding: 10px;" >
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_close.gif" alt="close" style="float:right" />
- </div>
- <div style="clear:both;">
- </div>
- <p>
- <?=gettext("This page allows you to customize the information you want to be displayed!");?><br />
- <?=gettext("To get started click the");?> <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="plus" /> <?=gettext("icon to add widgets.");?><br />
- <br />
- <?=gettext("You can move any widget around by clicking and dragging the title.");?>
- </p>
- </div>
-</div>
-
-<form action="index.php" method="post">
- <input type="hidden" value="" name="sequence" id="sequence" />
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="<?=gettext("Click here to add widgets"); ?>" style="cursor: pointer;" onmouseup="domTT_activate(this, event, 'content', document.getElementById('content1'), 'type', 'velcro', 'delay', 0, 'fade', 'both', 'fadeMax', 100, 'styleClass', 'niceTitle');" />
-
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_info_pkg.gif" alt="<?=gettext("Click here for help"); ?>" style="cursor: help;" onmouseup="hideAllWidgets();domTT_activate(this, event, 'content', document.getElementById('welcome-container'), 'type', 'sticky', 'closeLink', '', 'delay', 0, 'fade', 'both', 'fadeMax', 100, 'styleClass', 'niceTitle');" />
-
-&nbsp;&nbsp;&nbsp;
- <input id="submit" name="submit" type="submit" style="display:none" onclick="return updatePref();" class="formbtn" value="<?=gettext("Save Settings");?>" />
-</form>
-<!-- fakeClass contains no CSS but is used as an identifier in theme pfsense_ng_fs - loader.js -->
-<div id="niftyOutter" class="fakeClass">
- <?php
- $totalwidgets = count($widgetfiles);
- $halftotal = $totalwidgets / 2 - 2;
- $widgetcounter = 0;
- $directory = "/usr/local/www/widgets/widgets/";
- $printed = false;
- $firstprint = false;
- ?>
- <div id="col1" style="float:left;width:49%;padding-bottom:40px" class="ui-sortable">
- <?php
-
- foreach ($widgetlist as $widget) {
-
- if (!stristr($widget, "widget.php")) {
- continue;
- }
- $periodpos = strpos($widget, ".");
- $widgetname = substr($widget, 0, $periodpos);
- if ($widgetname != "") {
- $nicename = $widgetname;
- $nicename = str_replace("_", " ", $nicename);
-
- //make the title look nice
- $nicename = ucwords($nicename);
- }
-
- if ($config['widgets'] && $pconfig['sequence'] != "") {
- switch ($displayarray[$widgetcounter]) {
- case "show":
- $divdisplay = "block";
- $display = "block";
- $inputdisplay = "show";
- $showWidget = "none";
- $mindiv = "inline";
- break;
- case "hide":
- $divdisplay = "block";
- $display = "none";
- $inputdisplay = "hide";
- $showWidget = "inline";
- $mindiv = "none";
- break;
- case "close":
- $divdisplay = "none";
- $display = "block";
- $inputdisplay = "close";
- $showWidget = "none";
- $mindiv = "inline";
- break;
- default:
- $divdisplay = "none";
- $display = "block";
- $inputdisplay = "none";
- $showWidget = "none";
- $mindiv = "inline";
- break;
- }
- } else {
- if ($firstprint == false) {
- $divdisplay = "block";
- $display = "block";
- $inputdisplay = "show";
- $showWidget = "none";
- $mindiv = "inline";
- $firstprint = true;
- } else {
- switch ($widget) {
- case "interfaces.widget.php":
- case "traffic_graphs.widget.php":
- $divdisplay = "block";
- $display = "block";
- $inputdisplay = "show";
- $showWidget = "none";
- $mindiv = "inline";
- break;
- default:
- $divdisplay = "none";
- $display = "block";
- $inputdisplay = "close";
- $showWidget = "none";
- $mindiv = "inline";
- break;
- }
- }
- }
-
- if (substr($g['theme'], -3) != "_fs") {
- if ($config['widgets'] && $pconfig['sequence'] != "") {
- if ($colpos[$widgetcounter] == "col2" && $printed == false) {
- $printed = true;
- ?>
- </div>
- <div id="col2" style="float:right;width:49%;padding-bottom:40px" class="ui-sortable">
- <?php
- }
- } else if ($widgetcounter >= $halftotal && $printed == false) {
- $printed = true;
- ?>
- </div>
- <div id="col2" style="float:right;width:49%;padding-bottom:40px" class="ui-sortable">
- <?php
- }
- } else {
- if ($config['widgets'] && $pconfig['sequence'] != "") {
- if ($colpos[$widgetcounter] == "col2" && $printed == false) {
- $printed = true;
- ?>
- </div>
- <div id="col2" style="float:right;width:49%;padding-bottom:40px" class="ui-sortable">
- <?php
- } else { ?>
- <script type="text/javascript">
- //<![CDATA[
- var colpos = "<?=$colpos[$widgetcounter]?>";
- createColumn(colpos);
- //]]>
- </script>
- <?php }
- }
- }
-
- ?>
- <div style="clear:both;"></div>
- <div id="<?php echo $widgetname;?>-container" class="widgetdiv" style="display:<?php echo $divdisplay; ?>;">
- <input type="hidden" value="<?php echo $inputdisplay;?>" id="<?php echo $widgetname;?>-container-input" name="<?php echo $widgetname;?>-container-input" />
- <div id="<?php echo $widgetname;?>-topic" class="widgetheader" style="cursor:move">
- <div style="float:left;">
- <?php
-
- $widgettitle = $widgetname . "_title";
- $widgettitlelink = $widgetname . "_title_link";
- if ($$widgettitle != "") {
- //only show link if defined
- if ($$widgettitlelink != "") {?>
- <u><span onclick="location.href='/<?php echo $$widgettitlelink;?>'" style="cursor:pointer">
- <?php }
- //echo widget title
- echo $$widgettitle;
- if ($$widgettitlelink != "") { ?>
- </span></u>
- <?php }
- } else {
- if ($$widgettitlelink != "") {?>
- <u><span onclick="location.href='/<?php echo $$widgettitlelink;?>'" style="cursor:pointer">
- <?php }
- echo $nicename;
- if ($$widgettitlelink != "") { ?>
- </span></u>
- <?php }
- }
- ?>
- </div>
- <div align="right" style="float:right;">
- <div id="<?php echo $widgetname;?>-configure" onclick='return configureWidget("<?php echo $widgetname;?>")' style="display:none; cursor:pointer" ><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_configure.gif" alt="configure" /></div>
- <div id="<?php echo $widgetname;?>-open" onclick='return showWidget("<?php echo $widgetname;?>", true)' style="display:<?php echo $showWidget;?>; cursor:pointer" ><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_open.gif" alt="open" /></div>
- <div id="<?php echo $widgetname;?>-min" onclick='return minimizeWidget("<?php echo $widgetname;?>", true)' style="display:<?php echo $mindiv;?>; cursor:pointer" ><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_minus.gif" alt="minimize" /></div>
- <div id="<?php echo $widgetname;?>-close" onclick='return closeWidget("<?php echo $widgetname;?>", true)' style="display:inline; cursor:pointer" ><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_close.gif" alt="close" /></div>
- </div>
- <div style="clear:both;"></div>
- </div>
- <?php if ($divdisplay != "block") { ?>
- <div id="<?php echo $widgetname;?>-loader" style="display:<?php echo $display; ?>;" align="center">
- <br />
- <img src="./themes/<?= $g['theme']; ?>/images/misc/widget_loader.gif" width="25" height="25" alt="<?=gettext("Loading selected widget"); ?>..." />
- <br />
- </div> <?php $display = "none"; } ?>
- <div id="<?php echo $widgetname;?>" style="display:<?php echo $display; ?>;">
- <?php
- if ($divdisplay == "block") {
- include($directory . $widget);
- }
- ?>
- </div>
- <div style="clear:both;"></div>
- </div>
- <?php
- $widgetcounter++;
-
- }//end foreach
- ?>
- </div>
- <div style="clear:both;"></div>
-</div>
-
-<?php include("fend.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
- jQuery(document).ready(function(in_event)
- {
- jQuery('.ui-sortable').sortable({connectWith: '.ui-sortable', dropOnEmpty: true, handle: '.widgetheader', change: showSave});
-
- <?php if (!$config['widgets'] && $pconfig['sequence'] != "") { ?>
- hideAllWidgets();
- domTT_activate('welcome1', null, 'x', 287, 'y', 107, 'content', document.getElementById('welcome-container'), 'type', 'sticky', 'closeLink', '', 'delay', 1000, 'fade', 'both', 'fadeMax', 100, 'styleClass', 'niceTitle');
- <?php } ?>
- });
-//]]>
-</script>
-<?php
- //build list of javascript include files
- $jsincludefiles = array();
- $directory = "widgets/javascript/";
- $dirhandle = opendir($directory);
- $filename = "";
- while (false !== ($filename = readdir($dirhandle))) {
- $jsincludefiles[] = $filename;
- }
- foreach ($jsincludefiles as $jsincludename) {
- if (!preg_match('/\.js$/', $jsincludename)) {
- continue;
- }
- echo "<script src='{$directory}{$jsincludename}' type='text/javascript'></script>\n";
- }
-?>
-
-</body>
-</html>
diff --git a/usr/local/www/interfaces.php b/usr/local/www/interfaces.php
deleted file mode 100644
index 760d386..0000000
--- a/usr/local/www/interfaces.php
+++ /dev/null
@@ -1,3882 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004-2008 Scott Ullrich
- Copyright (C) 2006 Daniel S. Haischt.
- Copyright (C) 2008-2010 Ermal Luçi
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/sbin/arp
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces
-##|*NAME=Interfaces: WAN page
-##|*DESCR=Allow access to the 'Interfaces' page.
-##|*MATCH=interfaces.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("ipsec.inc");
-require_once("functions.inc");
-require_once("captiveportal.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("rrd.inc");
-require_once("vpn.inc");
-require_once("xmlparse_attr.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces.php');
-}
-
-// Get configured interface list
-$ifdescrs = get_configured_interface_with_descr(false, true);
-
-$if = "wan";
-if ($_REQUEST['if']) {
- $if = $_REQUEST['if'];
-}
-
-if (empty($ifdescrs[$if])) {
- header("Location: interfaces.php");
- exit;
-}
-
-define("CRON_MONTHLY_PATTERN", "0 0 1 * *");
-define("CRON_WEEKLY_PATTERN", "0 0 * * 0");
-define("CRON_DAILY_PATTERN", "0 0 * * *");
-define("CRON_HOURLY_PATTERN", "0 * * * *");
-
-if (!is_array($pconfig)) {
- $pconfig = array();
-}
-
-if (!is_array($config['ppps'])) {
- $config['ppps'] = array();
-}
-if (!is_array($config['ppps']['ppp'])) {
- $config['ppps']['ppp'] = array();
-}
-$a_ppps = &$config['ppps']['ppp'];
-
-function remove_bad_chars($string) {
- return preg_replace('/[^a-z_0-9]/i', '', $string);
-}
-
-if (!is_array($config['gateways']['gateway_item'])) {
- $config['gateways']['gateway_item'] = array();
-}
-$a_gateways = &$config['gateways']['gateway_item'];
-
-$wancfg = &$config['interfaces'][$if];
-$old_wancfg = $wancfg;
-$old_wancfg['realif'] = get_real_interface($if);
-$old_ppps = $a_ppps;
-// Populate page descr if it does not exist.
-if ($if == "wan" && !$wancfg['descr']) {
- $wancfg['descr'] = "WAN";
-} else if ($if == "lan" && !$wancfg['descr']) {
- $wancfg['descr'] = "LAN";
-}
-
-/* NOTE: The code here is used to set the $pppid for the curious */
-foreach ($a_ppps as $pppid => $ppp) {
- if ($wancfg['if'] == $ppp['if']) {
- break;
- }
-}
-
-$type_disabled = (substr($wancfg['if'], 0, 3) == 'gre') ? 'disabled="disabled"' : '';
-
-if ($wancfg['if'] == $a_ppps[$pppid]['if']) {
- $pconfig['pppid'] = $pppid;
- $pconfig['ptpid'] = $a_ppps[$pppid]['ptpid'];
- $pconfig['port'] = $a_ppps[$pppid]['ports'];
- if ($a_ppps[$pppid]['type'] == "ppp") {
- $pconfig['ppp_username'] = $a_ppps[$pppid]['username'];
- $pconfig['ppp_password'] = base64_decode($a_ppps[$pppid]['password']);
-
- $pconfig['phone'] = $a_ppps[$pppid]['phone'];
- $pconfig['apn'] = $a_ppps[$pppid]['apn'];
- } else if ($a_ppps[$pppid]['type'] == "pppoe") {
- $pconfig['pppoe_username'] = $a_ppps[$pppid]['username'];
- $pconfig['pppoe_password'] = base64_decode($a_ppps[$pppid]['password']);
- $pconfig['provider'] = $a_ppps[$pppid]['provider'];
- $pconfig['pppoe_dialondemand'] = isset($a_ppps[$pppid]['ondemand']);
- $pconfig['pppoe_idletimeout'] = $a_ppps[$pppid]['idletimeout'];
-
- /* ================================================ */
- /* = force a connection reset at a specific time? = */
- /* ================================================ */
-
- if (isset($a_ppps[$pppid]['pppoe-reset-type'])) {
- $pconfig['pppoe-reset-type'] = $a_ppps[$pppid]['pppoe-reset-type'];
- $itemhash = getMPDCRONSettings($a_ppps[$pppid]['if']);
- if ($itemhash) {
- $cronitem = $itemhash['ITEM'];
- }
- if (isset($cronitem)) {
- $resetTime = "{$cronitem['minute']} {$cronitem['hour']} {$cronitem['mday']} {$cronitem['month']} {$cronitem['wday']}";
- } else {
- $resetTime = NULL;
- }
- //log_error("ResetTime:".$resetTime);
- if ($a_ppps[$pppid]['pppoe-reset-type'] == "custom") {
- if ($cronitem) {
- $pconfig['pppoe_pr_custom'] = true;
- $pconfig['pppoe_resetminute'] = $cronitem['minute'];
- $pconfig['pppoe_resethour'] = $cronitem['hour'];
- if ($cronitem['mday'] <> "*" && $cronitem['month'] <> "*") {
- $pconfig['pppoe_resetdate'] = "{$cronitem['month']}/{$cronitem['mday']}/" . date("Y");
- }
- }
- } else if ($a_ppps[$pppid]['pppoe-reset-type'] == "preset") {
- $pconfig['pppoe_pr_preset'] = true;
- switch ($resetTime) {
- case CRON_MONTHLY_PATTERN:
- $pconfig['pppoe_monthly'] = true;
- break;
- case CRON_WEEKLY_PATTERN:
- $pconfig['pppoe_weekly'] = true;
- break;
- case CRON_DAILY_PATTERN:
- $pconfig['pppoe_daily'] = true;
- break;
- case CRON_HOURLY_PATTERN:
- $pconfig['pppoe_hourly'] = true;
- break;
- }
- }
- } // End force pppoe reset at specific time
- // End if type == pppoe
- } else if ($a_ppps[$pppid]['type'] == "pptp" || $a_ppps[$pppid]['type'] == "l2tp") {
- $pconfig['pptp_username'] = $a_ppps[$pppid]['username'];
- $pconfig['pptp_password'] = base64_decode($a_ppps[$pppid]['password']);
- $pconfig['pptp_local'] = explode(",", $a_ppps[$pppid]['localip']);
- $pconfig['pptp_subnet'] = explode(",", $a_ppps[$pppid]['subnet']);
- $pconfig['pptp_remote'] = explode(",", $a_ppps[$pppid]['gateway']);
- $pconfig['pptp_dialondemand'] = isset($a_ppps[$pppid]['ondemand']);
- $pconfig['pptp_idletimeout'] = $a_ppps[$pppid]['timeout'];
- }
-} else {
- $pconfig['ptpid'] = interfaces_ptpid_next();
- $pppid = count($a_ppps);
-}
-$pconfig['dhcphostname'] = $wancfg['dhcphostname'];
-$pconfig['alias-address'] = $wancfg['alias-address'];
-$pconfig['alias-subnet'] = $wancfg['alias-subnet'];
-$pconfig['dhcprejectfrom'] = $wancfg['dhcprejectfrom'];
-
-$pconfig['adv_dhcp_pt_timeout'] = $wancfg['adv_dhcp_pt_timeout'];
-$pconfig['adv_dhcp_pt_retry'] = $wancfg['adv_dhcp_pt_retry'];
-$pconfig['adv_dhcp_pt_select_timeout'] = $wancfg['adv_dhcp_pt_select_timeout'];
-$pconfig['adv_dhcp_pt_reboot'] = $wancfg['adv_dhcp_pt_reboot'];
-$pconfig['adv_dhcp_pt_backoff_cutoff'] = $wancfg['adv_dhcp_pt_backoff_cutoff'];
-$pconfig['adv_dhcp_pt_initial_interval'] = $wancfg['adv_dhcp_pt_initial_interval'];
-
-$pconfig['adv_dhcp_pt_values'] = $wancfg['adv_dhcp_pt_values'];
-
-$pconfig['adv_dhcp_send_options'] = $wancfg['adv_dhcp_send_options'];
-$pconfig['adv_dhcp_request_options'] = $wancfg['adv_dhcp_request_options'];
-$pconfig['adv_dhcp_required_options'] = $wancfg['adv_dhcp_required_options'];
-$pconfig['adv_dhcp_option_modifiers'] = $wancfg['adv_dhcp_option_modifiers'];
-
-$pconfig['adv_dhcp_config_advanced'] = $wancfg['adv_dhcp_config_advanced'];
-$pconfig['adv_dhcp_config_file_override'] = $wancfg['adv_dhcp_config_file_override'];
-$pconfig['adv_dhcp_config_file_override_path'] = $wancfg['adv_dhcp_config_file_override_path'];
-
-$pconfig['adv_dhcp6_interface_statement_send_options'] = $wancfg['adv_dhcp6_interface_statement_send_options'];
-$pconfig['adv_dhcp6_interface_statement_request_options'] = $wancfg['adv_dhcp6_interface_statement_request_options'];
-$pconfig['adv_dhcp6_interface_statement_information_only_enable'] = $wancfg['adv_dhcp6_interface_statement_information_only_enable'];
-$pconfig['adv_dhcp6_interface_statement_script'] = $wancfg['adv_dhcp6_interface_statement_script'];
-
-$pconfig['adv_dhcp6_id_assoc_statement_address_enable'] = $wancfg['adv_dhcp6_id_assoc_statement_address_enable'];
-$pconfig['adv_dhcp6_id_assoc_statement_address'] = $wancfg['adv_dhcp6_id_assoc_statement_address'];
-$pconfig['adv_dhcp6_id_assoc_statement_address_id'] = $wancfg['adv_dhcp6_id_assoc_statement_address_id'];
-$pconfig['adv_dhcp6_id_assoc_statement_address_pltime'] = $wancfg['adv_dhcp6_id_assoc_statement_address_pltime'];
-$pconfig['adv_dhcp6_id_assoc_statement_address_vltime'] = $wancfg['adv_dhcp6_id_assoc_statement_address_vltime'];
-
-$pconfig['adv_dhcp6_id_assoc_statement_prefix_enable'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix_enable'];
-$pconfig['adv_dhcp6_id_assoc_statement_prefix'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix'];
-$pconfig['adv_dhcp6_id_assoc_statement_prefix_id'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix_id'];
-$pconfig['adv_dhcp6_id_assoc_statement_prefix_pltime'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime'];
-$pconfig['adv_dhcp6_id_assoc_statement_prefix_vltime'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime'];
-
-$pconfig['adv_dhcp6_prefix_interface_statement_sla_id'] = $wancfg['adv_dhcp6_prefix_interface_statement_sla_id'];
-$pconfig['adv_dhcp6_prefix_interface_statement_sla_len'] = $wancfg['adv_dhcp6_prefix_interface_statement_sla_len'];
-
-$pconfig['adv_dhcp6_authentication_statement_authname'] = $wancfg['adv_dhcp6_authentication_statement_authname'];
-$pconfig['adv_dhcp6_authentication_statement_protocol'] = $wancfg['adv_dhcp6_authentication_statement_protocol'];
-$pconfig['adv_dhcp6_authentication_statement_algorithm'] = $wancfg['adv_dhcp6_authentication_statement_algorithm'];
-$pconfig['adv_dhcp6_authentication_statement_rdm'] = $wancfg['adv_dhcp6_authentication_statement_rdm'];
-
-$pconfig['adv_dhcp6_key_info_statement_keyname'] = $wancfg['adv_dhcp6_key_info_statement_keyname'];
-$pconfig['adv_dhcp6_key_info_statement_realm'] = $wancfg['adv_dhcp6_key_info_statement_realm'];
-$pconfig['adv_dhcp6_key_info_statement_keyid'] = $wancfg['adv_dhcp6_key_info_statement_keyid'];
-$pconfig['adv_dhcp6_key_info_statement_secret'] = $wancfg['adv_dhcp6_key_info_statement_secret'];
-$pconfig['adv_dhcp6_key_info_statement_expire'] = $wancfg['adv_dhcp6_key_info_statement_expire'];
-
-$pconfig['adv_dhcp6_config_advanced'] = $wancfg['adv_dhcp6_config_advanced'];
-$pconfig['adv_dhcp6_config_file_override'] = $wancfg['adv_dhcp6_config_file_override'];
-$pconfig['adv_dhcp6_config_file_override_path'] = $wancfg['adv_dhcp6_config_file_override_path'];
-
-$pconfig['dhcp_plus'] = isset($wancfg['dhcp_plus']);
-$pconfig['descr'] = remove_bad_chars($wancfg['descr']);
-$pconfig['enable'] = isset($wancfg['enable']);
-
-if (is_array($config['aliases']['alias'])) {
- foreach ($config['aliases']['alias'] as $alias) {
- if ($alias['name'] == $wancfg['descr']) {
- $input_errors[] = sprintf(gettext("Sorry, an alias with the name %s already exists."), $wancfg['descr']);
- }
- }
-}
-
-switch ($wancfg['ipaddr']) {
- case "dhcp":
- $pconfig['type'] = "dhcp";
- break;
- case "pppoe":
- case "pptp":
- case "l2tp":
- case "ppp":
- $pconfig['type'] = $wancfg['ipaddr'];
- break;
- default:
- if (is_ipaddrv4($wancfg['ipaddr'])) {
- $pconfig['type'] = "staticv4";
- $pconfig['ipaddr'] = $wancfg['ipaddr'];
- $pconfig['subnet'] = $wancfg['subnet'];
- $pconfig['gateway'] = $wancfg['gateway'];
- } else {
- $pconfig['type'] = "none";
- }
- break;
-}
-
-switch ($wancfg['ipaddrv6']) {
- case "slaac":
- $pconfig['type6'] = "slaac";
- break;
- case "dhcp6":
- $pconfig['dhcp6-duid'] = $wancfg['dhcp6-duid'];
- if (!isset($wancfg['dhcp6-ia-pd-len'])) {
- $wancfg['dhcp6-ia-pd-len'] = "none";
- }
- $pconfig['dhcp6-ia-pd-len'] = $wancfg['dhcp6-ia-pd-len'];
- $pconfig['dhcp6-ia-pd-send-hint'] = isset($wancfg['dhcp6-ia-pd-send-hint']);
- $pconfig['type6'] = "dhcp6";
- $pconfig['dhcp6prefixonly'] = isset($wancfg['dhcp6prefixonly']);
- $pconfig['dhcp6usev4iface'] = isset($wancfg['dhcp6usev4iface']);
- break;
- case "6to4":
- $pconfig['type6'] = "6to4";
- break;
- case "track6":
- $pconfig['type6'] = "track6";
- $pconfig['track6-interface'] = $wancfg['track6-interface'];
- if ($wancfg['track6-prefix-id'] == "") {
- $pconfig['track6-prefix-id'] = 0;
- } else {
- $pconfig['track6-prefix-id'] = $wancfg['track6-prefix-id'];
- }
- $pconfig['track6-prefix-id--hex'] = sprintf("%x", $pconfig['track6-prefix-id']);
- break;
- case "6rd":
- $pconfig['prefix-6rd'] = $wancfg['prefix-6rd'];
- if ($wancfg['prefix-6rd-v4plen'] == "") {
- $wancfg['prefix-6rd-v4plen'] = "0";
- }
- $pconfig['prefix-6rd-v4plen'] = $wancfg['prefix-6rd-v4plen'];
- $pconfig['type6'] = "6rd";
- $pconfig['gateway-6rd'] = $wancfg['gateway-6rd'];
- break;
- default:
- if (is_ipaddrv6($wancfg['ipaddrv6'])) {
- $pconfig['type6'] = "staticv6";
- $pconfig['ipaddrv6'] = $wancfg['ipaddrv6'];
- $pconfig['subnetv6'] = $wancfg['subnetv6'];
- $pconfig['gatewayv6'] = $wancfg['gatewayv6'];
- } else {
- $pconfig['type6'] = "none";
- }
- break;
-}
-
-// print_r($pconfig);
-
-$pconfig['blockpriv'] = isset($wancfg['blockpriv']);
-$pconfig['blockbogons'] = isset($wancfg['blockbogons']);
-$pconfig['spoofmac'] = $wancfg['spoofmac'];
-$pconfig['mtu'] = $wancfg['mtu'];
-$pconfig['mss'] = $wancfg['mss'];
-
-/* Wireless interface? */
-if (isset($wancfg['wireless'])) {
- /* Sync first to be sure it displays the actual settings that will be used */
- interface_sync_wireless_clones($wancfg, false);
- /* Get wireless modes */
- $wlanif = get_real_interface($if);
- if (!does_interface_exist($wlanif)) {
- interface_wireless_clone($wlanif, $wancfg);
- }
- $wlanbaseif = interface_get_wireless_base($wancfg['if']);
- preg_match("/^(.*?)([0-9]*)$/", $wlanbaseif, $wlanbaseif_split);
- $wl_modes = get_wireless_modes($if);
- $wl_chaninfo = get_wireless_channel_info($if);
- $wl_sysctl_prefix = 'dev.' . $wlanbaseif_split[1] . '.' . $wlanbaseif_split[2];
- $wl_sysctl = get_sysctl(
- array(
- "{$wl_sysctl_prefix}.diversity",
- "{$wl_sysctl_prefix}.txantenna",
- "{$wl_sysctl_prefix}.rxantenna",
- "{$wl_sysctl_prefix}.slottime",
- "{$wl_sysctl_prefix}.acktimeout",
- "{$wl_sysctl_prefix}.ctstimeout"));
- $wl_regdomain_xml_attr = array();
- $wl_regdomain_xml = parse_xml_regdomain($wl_regdomain_xml_attr);
- $wl_regdomains = &$wl_regdomain_xml['regulatory-domains']['rd'];
- $wl_regdomains_attr = &$wl_regdomain_xml_attr['regulatory-domains']['rd'];
- $wl_countries = &$wl_regdomain_xml['country-codes']['country'];
- $wl_countries_attr = &$wl_regdomain_xml_attr['country-codes']['country'];
- $pconfig['persistcommonwireless'] = isset($config['wireless']['interfaces'][$wlanbaseif]);
- $pconfig['standard'] = $wancfg['wireless']['standard'];
- $pconfig['mode'] = $wancfg['wireless']['mode'];
- $pconfig['protmode'] = $wancfg['wireless']['protmode'];
- $pconfig['ssid'] = $wancfg['wireless']['ssid'];
- $pconfig['channel'] = $wancfg['wireless']['channel'];
- $pconfig['txpower'] = $wancfg['wireless']['txpower'];
- $pconfig['diversity'] = $wancfg['wireless']['diversity'];
- $pconfig['txantenna'] = $wancfg['wireless']['txantenna'];
- $pconfig['rxantenna'] = $wancfg['wireless']['rxantenna'];
- $pconfig['distance'] = $wancfg['wireless']['distance'];
- $pconfig['regdomain'] = $wancfg['wireless']['regdomain'];
- $pconfig['regcountry'] = $wancfg['wireless']['regcountry'];
- $pconfig['reglocation'] = $wancfg['wireless']['reglocation'];
- $pconfig['wme_enable'] = isset($wancfg['wireless']['wme']['enable']);
- if (isset($wancfg['wireless']['puren']['enable'])) {
- $pconfig['puremode'] = '11n';
- } else if (isset($wancfg['wireless']['pureg']['enable'])) {
- $pconfig['puremode'] = '11g';
- } else {
- $pconfig['puremode'] = 'any';
- }
- $pconfig['apbridge_enable'] = isset($wancfg['wireless']['apbridge']['enable']);
- $pconfig['authmode'] = $wancfg['wireless']['authmode'];
- $pconfig['hidessid_enable'] = isset($wancfg['wireless']['hidessid']['enable']);
- $pconfig['auth_server_addr'] = $wancfg['wireless']['auth_server_addr'];
- $pconfig['auth_server_port'] = $wancfg['wireless']['auth_server_port'];
- $pconfig['auth_server_shared_secret'] = $wancfg['wireless']['auth_server_shared_secret'];
- $pconfig['auth_server_addr2'] = $wancfg['wireless']['auth_server_addr2'];
- $pconfig['auth_server_port2'] = $wancfg['wireless']['auth_server_port2'];
- $pconfig['auth_server_shared_secret2'] = $wancfg['wireless']['auth_server_shared_secret2'];
- if (is_array($wancfg['wireless']['wpa'])) {
- $pconfig['debug_mode'] = $wancfg['wireless']['wpa']['debug_mode'];
- $pconfig['macaddr_acl'] = $wancfg['wireless']['wpa']['macaddr_acl'];
- $pconfig['mac_acl_enable'] = isset($wancfg['wireless']['wpa']['mac_acl_enable']);
- $pconfig['auth_algs'] = $wancfg['wireless']['wpa']['auth_algs'];
- $pconfig['wpa_mode'] = $wancfg['wireless']['wpa']['wpa_mode'];
- $pconfig['wpa_key_mgmt'] = $wancfg['wireless']['wpa']['wpa_key_mgmt'];
- $pconfig['wpa_pairwise'] = $wancfg['wireless']['wpa']['wpa_pairwise'];
- $pconfig['wpa_group_rekey'] = $wancfg['wireless']['wpa']['wpa_group_rekey'];
- $pconfig['wpa_gmk_rekey'] = $wancfg['wireless']['wpa']['wpa_gmk_rekey'];
- $pconfig['wpa_strict_rekey'] = isset($wancfg['wireless']['wpa']['wpa_strict_rekey']);
- $pconfig['passphrase'] = $wancfg['wireless']['wpa']['passphrase'];
- $pconfig['ieee8021x'] = isset($wancfg['wireless']['wpa']['ieee8021x']['enable']);
- $pconfig['rsn_preauth'] = isset($wancfg['wireless']['wpa']['rsn_preauth']);
- $pconfig['ext_wpa_sw'] = $wancfg['wireless']['wpa']['ext_wpa_sw'];
- $pconfig['wpa_enable'] = isset($wancfg['wireless']['wpa']['enable']);
- }
- $pconfig['wep_enable'] = isset($wancfg['wireless']['wep']['enable']);
- $pconfig['mac_acl'] = $wancfg['wireless']['mac_acl'];
- if (is_array($wancfg['wireless']['wep']) && is_array($wancfg['wireless']['wep']['key'])) {
- $i = 1;
- foreach ($wancfg['wireless']['wep']['key'] as $wepkey) {
- $pconfig['key' . $i] = $wepkey['value'];
- if (isset($wepkey['txkey'])) {
- $pconfig['txkey'] = $i;
- }
- $i++;
- }
- if (!isset($wepkey['txkey'])) {
- $pconfig['txkey'] = 1;
- }
- }
-}
-
-if ($_POST['apply']) {
- unset($input_errors);
- if (!is_subsystem_dirty('interfaces')) {
- $input_errors[] = gettext("You have already applied your settings!");
- } else {
- unlink_if_exists("{$g['tmp_path']}/config.cache");
- clear_subsystem_dirty('interfaces');
-
- if (file_exists("{$g['tmp_path']}/.interfaces.apply")) {
- $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply"));
- foreach ($toapplylist as $ifapply => $ifcfgo) {
- if (isset($config['interfaces'][$ifapply]['enable'])) {
- interface_bring_down($ifapply, false, $ifcfgo);
- interface_configure($ifapply, true);
- } else {
- interface_bring_down($ifapply, true, $ifcfgo);
- if (isset($config['dhcpd'][$ifapply]['enable']) ||
- isset($config['dhcpdv6'][$ifapply]['enable'])) {
- services_dhcpd_configure();
- }
- }
- }
- }
- /* restart snmp so that it binds to correct address */
- services_snmpd_configure();
-
- /* sync filter configuration */
- setup_gateways_monitor();
-
- clear_subsystem_dirty('interfaces');
-
- filter_configure();
-
- enable_rrd_graphing();
-
- if (is_subsystem_dirty('staticroutes') && (system_routing_configure() == 0)) {
- clear_subsystem_dirty('staticroutes');
- }
- }
- @unlink("{$g['tmp_path']}/.interfaces.apply");
- header("Location: interfaces.php?if={$if}");
- exit;
-} else if ($_POST && $_POST['enable'] != "yes") {
- unset($wancfg['enable']);
- if (isset($wancfg['wireless'])) {
- interface_sync_wireless_clones($wancfg, false);
- }
- write_config("Interface {$_POST['descr']}({$if}) is now disabled.");
- mark_subsystem_dirty('interfaces');
- if (file_exists("{$g['tmp_path']}/.interfaces.apply")) {
- $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply"));
- } else {
- $toapplylist = array();
- }
- $toapplylist[$if]['ifcfg'] = $wancfg;
- $toapplylist[$if]['ppps'] = $a_ppps;
- /* we need to be able remove IP aliases for IPv6 */
- file_put_contents("{$g['tmp_path']}/.interfaces.apply", serialize($toapplylist));
- header("Location: interfaces.php?if={$if}");
- exit;
-} else if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- if (is_numeric("0x" . $_POST['track6-prefix-id--hex'])) {
- $pconfig['track6-prefix-id'] = intval($_POST['track6-prefix-id--hex'], 16);
- } else {
- $pconfig['track6-prefix-id'] = 0;
- }
- conf_mount_rw();
-
- /* filter out spaces from descriptions */
- $_POST['descr'] = remove_bad_chars($_POST['descr']);
-
- /* okay first of all, cause we are just hiding the PPPoE HTML
- * fields related to PPPoE resets, we are going to unset $_POST
- * vars, if the reset feature should not be used. Otherwise the
- * data validation procedure below, may trigger a false error
- * message.
- */
- if (empty($_POST['pppoe-reset-type'])) {
- unset($_POST['pppoe_pr_type']);
- unset($_POST['pppoe_resethour']);
- unset($_POST['pppoe_resetminute']);
- unset($_POST['pppoe_resetdate']);
- unset($_POST['pppoe_pr_preset_val']);
- }
- /* description unique? */
- foreach ($ifdescrs as $ifent => $ifdescr) {
- if ($if != $ifent && $ifdescr == $_POST['descr']) {
- $input_errors[] = gettext("An interface with the specified description already exists.");
- break;
- }
- }
- if (is_numeric($_POST['descr'])) {
- $input_errors[] = gettext("The interface description cannot contain only numbers.");
- }
- /* input validation */
- if (isset($config['dhcpd']) && isset($config['dhcpd'][$if]['enable']) && (!preg_match("/^staticv4/", $_POST['type']))) {
- $input_errors[] = gettext("The DHCP Server is active on this interface and it can be used only with a static IP configuration. Please disable the DHCP Server service on this interface first, then change the interface configuration.");
- }
- if (isset($config['dhcpdv6']) && isset($config['dhcpdv6'][$if]['enable']) && (!preg_match("/^staticv6/", $_POST['type6']))) {
- $input_errors[] = gettext("The DHCP6 Server is active on this interface and it can be used only with a static IPv6 configuration. Please disable the DHCPv6 Server service on this interface first, then change the interface configuration.");
- }
-
- switch (strtolower($_POST['type'])) {
- case "staticv4":
- $reqdfields = explode(" ", "ipaddr subnet gateway");
- $reqdfieldsn = array(gettext("IPv4 address"), gettext("Subnet bit count"), gettext("Gateway"));
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- break;
- case "none":
- if (is_array($config['virtualip']['vip'])) {
- foreach ($config['virtualip']['vip'] as $vip) {
- if (is_ipaddrv4($vip['subnet']) && $vip['interface'] == $if) {
- $input_errors[] = gettext("This interface is referenced by IPv4 VIPs. Please delete those before setting the interface to 'none' configuration.");
- }
- }
- }
- break;
- case "ppp":
- $reqdfields = explode(" ", "port phone");
- $reqdfieldsn = array(gettext("Modem Port"), gettext("Phone Number"));
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- break;
- case "pppoe":
- if ($_POST['pppoe_dialondemand']) {
- $reqdfields = explode(" ", "pppoe_username pppoe_password pppoe_dialondemand pppoe_idletimeout");
- $reqdfieldsn = array(gettext("PPPoE username"), gettext("PPPoE password"), gettext("Dial on demand"), gettext("Idle timeout value"));
- } else {
- $reqdfields = explode(" ", "pppoe_username pppoe_password");
- $reqdfieldsn = array(gettext("PPPoE username"), gettext("PPPoE password"));
- }
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- break;
- case "pptp":
- if ($_POST['pptp_dialondemand']) {
- $reqdfields = explode(" ", "pptp_username pptp_password pptp_local pptp_subnet pptp_remote pptp_dialondemand pptp_idletimeout");
- $reqdfieldsn = array(gettext("PPTP username"), gettext("PPTP password"), gettext("PPTP local IP address"), gettext("PPTP subnet"), gettext("PPTP remote IP address"), gettext("Dial on demand"), gettext("Idle timeout value"));
- } else {
- $reqdfields = explode(" ", "pptp_username pptp_password pptp_local pptp_subnet pptp_remote");
- $reqdfieldsn = array(gettext("PPTP username"), gettext("PPTP password"), gettext("PPTP local IP address"), gettext("PPTP subnet"), gettext("PPTP remote IP address"));
- }
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- break;
- case "l2tp":
- if ($_POST['pptp_dialondemand']) {
- $reqdfields = explode(" ", "pptp_username pptp_password pptp_remote pptp_dialondemand pptp_idletimeout");
- $reqdfieldsn = array(gettext("L2TP username"), gettext("L2TP password"), gettext("L2TP remote IP address"), gettext("Dial on demand"), gettext("Idle timeout value"));
- } else {
- $reqdfields = explode(" ", "pptp_username pptp_password pptp_remote");
- $reqdfieldsn = array(gettext("L2TP username"), gettext("L2TP password"), gettext("L2TP remote IP address"));
- }
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- break;
- }
- switch (strtolower($_POST['type6'])) {
- case "staticv6":
- $reqdfields = explode(" ", "ipaddrv6 subnetv6 gatewayv6");
- $reqdfieldsn = array(gettext("IPv6 address"), gettext("Subnet bit count"), gettext("Gateway"));
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- break;
- case "none":
- if (is_array($config['virtualip']['vip'])) {
- foreach ($config['virtualip']['vip'] as $vip) {
- if (is_ipaddrv6($vip['subnet']) && $vip['interface'] == $if) {
- $input_errors[] = gettext("This interface is referenced by IPv6 VIPs. Please delete those before setting the interface to 'none' configuration.");
- }
- }
- }
- break;
- case "dhcp6":
- if (in_array($wancfg['ipaddrv6'], array())) {
- $input_errors[] = sprintf(gettext("You have to reassign the interface to be able to configure as %s."), $_POST['type6']);
- }
- if ($_POST['dhcp6-ia-pd-send-hint'] && strtolower($_POST['dhcp6-ia-pd-len']) == 'none') {
- $input_errors[] = gettext('DHCPv6 Prefix Delegation size must be provided when Send IPv6 prefix hint flag is checked');
- }
- break;
- case "6rd":
- foreach ($ifdescrs as $ifent => $ifdescr) {
- if ($if != $ifent && ($config[interfaces][$ifent]['ipaddrv6'] == $_POST['type6'])) {
- if ($config[interfaces][$ifent]['prefix-6rd'] == $_POST['prefix-6rd']) {
- $input_errors[] = gettext("You can only have one interface configured in 6rd with same prefix.");
- break;
- }
- }
- }
- if (in_array($wancfg['ipaddrv6'], array())) {
- $input_errors[] = sprintf(gettext("You have to reassign the interface to be able to configure as %s."), $_POST['type6']);
- }
- break;
- case "6to4":
- foreach ($ifdescrs as $ifent => $ifdescr) {
- if ($if != $ifent && ($config[interfaces][$ifent]['ipaddrv6'] == $_POST['type6'])) {
- $input_errors[] = sprintf(gettext("You can only have one interface configured as 6to4."), $_POST['type6']);
- break;
- }
- }
- if (in_array($wancfg['ipaddrv6'], array())) {
- $input_errors[] = sprintf(gettext("You have to reassign the interface to be able to configure as %s."), $_POST['type6']);
- }
- break;
- case "track6":
- /* needs to check if $track6-prefix-id is used on another interface */
- if (in_array($wancfg['ipaddrv6'], array())) {
- $input_errors[] = sprintf(gettext("You have to reassign the interface to be able to configure as %s."), $_POST['type6']);
- }
-
- if ($_POST['track6-prefix-id--hex'] != "" && !is_numeric("0x" . $_POST['track6-prefix-id--hex'])) {
- $input_errors[] = gettext("You must enter a valid hexadecimal number for the IPv6 prefix ID.");
- } else {
- $track6_prefix_id = intval($_POST['track6-prefix-id--hex'], 16);
- if ($track6_prefix_id < 0 || $track6_prefix_id > $_POST['ipv6-num-prefix-ids-' . $_POST['track6-interface']]) {
- $input_errors[] = gettext("You specified an IPv6 prefix ID that is out of range.") .
- " ({$_POST['track6-interface']}) - (0) - (" . sprintf('%x', $_POST['ipv6-num-prefix-ids-' . $_POST['track6-interface']]) . ")";
- } else {
- foreach ($ifdescrs as $ifent => $ifdescr) {
- if ($if == $ifent) {
- continue;
- }
- if ($config['interfaces'][$ifent]['ipaddrv6'] == 'track6' &&
- $config['interfaces'][$ifent]['track6-interface'] == $_POST['track6-interface'] &&
- $config['interfaces'][$ifent]['track6-prefix-id'] == $track6_prefix_id) {
- $input_errors[] = sprintf(gettext("This track6 prefix ID is already being used in %s."), $ifdescr);
- }
- }
- }
- }
- break;
- }
-
- /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */
- $staticroutes = get_staticroutes(true);
- $_POST['spoofmac'] = strtolower(str_replace("-", ":", $_POST['spoofmac']));
- if ($_POST['ipaddr']) {
- if (!is_ipaddrv4($_POST['ipaddr'])) {
- $input_errors[] = gettext("A valid IPv4 address must be specified.");
- } else {
- $where_ipaddr_configured = where_is_ipaddr_configured($_POST['ipaddr'], $if, true, true, $_POST['subnet']);
- if (count($where_ipaddr_configured)) {
- $subnet_conflict_text = sprintf(gettext("IPv4 address %s is being used by or overlaps with:"), $_POST['ipaddr'] . "/" . $_POST['subnet']);
- foreach ($where_ipaddr_configured as $subnet_conflict) {
- $subnet_conflict_text .= " " . convert_friendly_interface_to_friendly_descr($subnet_conflict['if']) . " (" . $subnet_conflict['ip_or_subnet'] . ")";
- }
- $input_errors[] = $subnet_conflict_text;
- }
-
- /* Do not accept network or broadcast address, except if subnet is 31 or 32 */
- if ($_POST['subnet'] < 31) {
- if ($_POST['ipaddr'] == gen_subnet($_POST['ipaddr'], $_POST['subnet'])) {
- $input_errors[] = gettext("This IPv4 address is the network address and cannot be used");
- } else if ($_POST['ipaddr'] == gen_subnet_max($_POST['ipaddr'], $_POST['subnet'])) {
- $input_errors[] = gettext("This IPv4 address is the broadcast address and cannot be used");
- }
- }
-
- foreach ($staticroutes as $route_subnet) {
- list($network, $subnet) = explode("/", $route_subnet);
- if ($_POST['subnet'] == $subnet && $network == gen_subnet($_POST['ipaddr'], $_POST['subnet'])) {
- $input_errors[] = gettext("This IPv4 address conflicts with a Static Route.");
- break;
- }
- unset($network, $subnet);
- }
- }
- }
- if ($_POST['ipaddrv6']) {
- if (!is_ipaddrv6($_POST['ipaddrv6'])) {
- $input_errors[] = gettext("A valid IPv6 address must be specified.");
- } else {
- $where_ipaddr_configured = where_is_ipaddr_configured($_POST['ipaddrv6'], $if, true, true, $_POST['subnetv6']);
- if (count($where_ipaddr_configured)) {
- $subnet_conflict_text = sprintf(gettext("IPv6 address %s is being used by or overlaps with:"), $_POST['ipaddrv6'] . "/" . $_POST['subnetv6']);
- foreach ($where_ipaddr_configured as $subnet_conflict) {
- $subnet_conflict_text .= " " . convert_friendly_interface_to_friendly_descr($subnet_conflict['if']) . " (" . $subnet_conflict['ip_or_subnet'] . ")";
- }
- $input_errors[] = $subnet_conflict_text;
- }
-
- foreach ($staticroutes as $route_subnet) {
- list($network, $subnet) = explode("/", $route_subnet);
- if ($_POST['subnetv6'] == $subnet && $network == gen_subnetv6($_POST['ipaddrv6'], $_POST['subnetv6'])) {
- $input_errors[] = gettext("This IPv6 address conflicts with a Static Route.");
- break;
- }
- unset($network, $subnet);
- }
- }
- }
- if (($_POST['subnet'] && !is_numeric($_POST['subnet']))) {
- $input_errors[] = gettext("A valid subnet bit count must be specified.");
- }
- if (($_POST['subnetv6'] && !is_numeric($_POST['subnetv6']))) {
- $input_errors[] = gettext("A valid subnet bit count must be specified.");
- }
- if (($_POST['alias-address'] && !is_ipaddrv4($_POST['alias-address']))) {
- $input_errors[] = gettext("A valid alias IP address must be specified.");
- }
- if (($_POST['alias-subnet'] && !is_numeric($_POST['alias-subnet']))) {
- $input_errors[] = gettext("A valid alias subnet bit count must be specified.");
- }
- if ($_POST['dhcprejectfrom'] && !is_ipaddrv4($_POST['dhcprejectfrom'])) {
- $input_errors[] = gettext("A valid alias IP address must be specified to reject DHCP Leases from.");
- }
- if (($_POST['gateway'] != "none") || ($_POST['gatewayv6'] != "none")) {
- $match = false;
- foreach ($a_gateways as $gateway) {
- if (in_array($_POST['gateway'], $gateway)) {
- $match = true;
- }
- }
- foreach ($a_gateways as $gateway) {
- if (in_array($_POST['gatewayv6'], $gateway)) {
- $match = true;
- }
- }
- if (!$match) {
- $input_errors[] = gettext("A valid gateway must be specified.");
- }
- }
- if (($_POST['provider'] && !is_domain($_POST['provider']))) {
- $input_errors[] = gettext("The service name contains invalid characters.");
- }
- if (($_POST['pppoe_idletimeout'] != "") && !is_numericint($_POST['pppoe_idletimeout'])) {
- $input_errors[] = gettext("The idle timeout value must be an integer.");
- }
- if ($_POST['pppoe_resethour'] <> "" && !is_numericint($_POST['pppoe_resethour']) &&
- $_POST['pppoe_resethour'] >= 0 && $_POST['pppoe_resethour'] <=23) {
- $input_errors[] = gettext("A valid PPPoE reset hour must be specified (0-23).");
- }
- if ($_POST['pppoe_resetminute'] <> "" && !is_numericint($_POST['pppoe_resetminute']) &&
- $_POST['pppoe_resetminute'] >= 0 && $_POST['pppoe_resetminute'] <=59) {
- $input_errors[] = gettext("A valid PPPoE reset minute must be specified (0-59).");
- }
- if ($_POST['pppoe_resetdate'] <> "" && !is_numeric(str_replace("/", "", $_POST['pppoe_resetdate']))) {
- $input_errors[] = gettext("A valid PPPoE reset date must be specified (mm/dd/yyyy).");
- }
- if (($_POST['pptp_local'] && !is_ipaddrv4($_POST['pptp_local']))) {
- $input_errors[] = gettext("A valid PPTP local IP address must be specified.");
- }
- if (($_POST['pptp_subnet'] && !is_numeric($_POST['pptp_subnet']))) {
- $input_errors[] = gettext("A valid PPTP subnet bit count must be specified.");
- }
- if (($_POST['pptp_remote'] && !is_ipaddrv4($_POST['pptp_remote']) && !is_hostname($_POST['gateway'][$iface]))) {
- $input_errors[] = gettext("A valid PPTP remote IP address must be specified.");
- }
- if (($_POST['pptp_idletimeout'] != "") && !is_numericint($_POST['pptp_idletimeout'])) {
- $input_errors[] = gettext("The idle timeout value must be an integer.");
- }
- if (($_POST['spoofmac'] && !is_macaddr($_POST['spoofmac']))) {
- $input_errors[] = gettext("A valid MAC address must be specified.");
- }
- if ($_POST['mtu']) {
- if (!is_numericint($_POST['mtu'])) {
- $input_errors[] = "MTU must be an integer.";
- }
- if (substr($wancfg['if'], 0, 3) == 'gif') {
- $min_mtu = 1280;
- $max_mtu = 8192;
- } else {
- $min_mtu = 576;
- $max_mtu = 9000;
- }
-
- if ($_POST['mtu'] < $min_mtu || $_POST['mtu'] > $max_mtu) {
- $input_errors[] = sprintf(gettext("The MTU must be between %d and %d bytes."), $min_mtu, $max_mtu);
- }
-
- unset($min_mtu, $max_mtu);
-
- if (stristr($wancfg['if'], "_vlan")) {
- $realhwif_array = get_parent_interface($wancfg['if']);
- // Need code to handle MLPPP if we ever use $realhwif for MLPPP handling
- $parent_realhwif = $realhwif_array[0];
- $parent_if = convert_real_interface_to_friendly_interface_name($parent_realhwif);
- if (!empty($parent_if) && !empty($config['interfaces'][$parent_if]['mtu'])) {
- if ($_POST['mtu'] > intval($config['interfaces'][$parent_if]['mtu'])) {
- $input_errors[] = gettext("The MTU of a VLAN cannot be greater than that of its parent interface.");
- }
- }
- } else {
- foreach ($config['interfaces'] as $idx => $ifdata) {
- if (($idx == $if) || !preg_match('/_vlan[0-9]/', $ifdata['if'])) {
- continue;
- }
-
- $realhwif_array = get_parent_interface($ifdata['if']);
- // Need code to handle MLPPP if we ever use $realhwif for MLPPP handling
- $parent_realhwif = $realhwif_array[0];
-
- if ($parent_realhwif != $wancfg['if']) {
- continue;
- }
-
- if (isset($ifdata['mtu']) && $ifdata['mtu'] > $_POST['mtu']) {
- $input_errors[] = sprintf(gettext("Interface %s (VLAN) has MTU set to a larger value"), $ifdata['descr']);
- }
- }
- }
- }
- if ($_POST['mss'] <> '') {
- if (!is_numericint($_POST['mss']) || ($_POST['mss'] < 576 || $_POST['mss'] > 65535)) {
- $input_errors[] = gettext("The MSS must be an integer between 576 and 65535 bytes.");
- }
- }
- /* Wireless interface? */
- if (isset($wancfg['wireless'])) {
- $reqdfields = array("mode");
- $reqdfieldsn = array(gettext("Mode"));
- if ($_POST['mode'] == 'hostap') {
- $reqdfields[] = "ssid";
- $reqdfieldsn[] = gettext("SSID");
- if (isset($_POST['channel']) && $_POST['channel'] == "0") {
- // auto channel with hostap is broken, prevent this for now.
- $input_errors[] = gettext("A specific channel, not auto, must be selected for Access Point mode.");
- }
- }
- if (stristr($_POST['standard'], '11n')) {
- if (!($_POST['wme_enable'])) {
- $input_errors[] = gettext("802.11n standards require enabling WME.");
- }
- }
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- check_wireless_mode();
- if (isset($_POST['wpa_group_rekey']) && (!is_numericint($_POST['wpa_group_rekey']) || $_POST['wpa_group_rekey'] < 1 || $_POST['wpa_group_rekey'] > 9999)) {
- $input_errors[] = gettext("Key Rotation must be an integer between 1 and 9999.");
- }
- if (isset($_POST['wpa_gmk_rekey']) && (!is_numericint($_POST['wpa_gmk_rekey']) || $_POST['wpa_gmk_rekey'] < 1 || $_POST['wpa_gmk_rekey'] > 9999)) {
- $input_errors[] = gettext("Master Key Regeneration must be an integer between 1 and 9999.");
- }
- if (isset($_POST['wpa_group_rekey']) && isset($_POST['wpa_gmk_rekey'])) {
- if ($_POST['wpa_group_rekey'] > $_POST['wpa_gmk_rekey']) {
- $input_errors[] = gettext("Master Key Regeneration must be greater than Key Rotation.");
- }
- }
- if (!empty($_POST['auth_server_addr'])) {
- if (!is_domain($_POST['auth_server_addr']) && !is_ipaddr($_POST['auth_server_addr'])) {
- $input_errors[] = gettext("802.1X Authentication Server must be an IP or hostname.");
- }
- }
- if (!empty($_POST['auth_server_addr2'])) {
- if (!is_domain($_POST['auth_server_addr2']) && !is_ipaddr($_POST['auth_server_addr2'])) {
- $input_errors[] = gettext("Secondary 802.1X Authentication Server must be an IP or hostname.");
- }
- }
- if (!empty($_POST['auth_server_port'])) {
- if (!is_port($_POST['auth_server_port'])) {
- $input_errors[] = gettext("802.1X Authentication Server Port must be a valid port number (1-65535).");
- }
- }
- if (!empty($_POST['auth_server_port2'])) {
- if (!is_port($_POST['auth_server_port2'])) {
- $input_errors[] = gettext("Secondary 802.1X Authentication Server Port must be a valid port number (1-65535).");
- }
- }
- if (isset($_POST['channel']) && !is_numericint($_POST['channel'])) {
- if (!is_numericint($_POST['channel'])) {
- $input_errors[] = gettext("Invalid channel specified.");
- } else {
- if ($_POST['channel'] > 255 || $_POST['channel'] < 0) {
- $input_errors[] = gettext("Channel must be between 0-255.");
- }
- }
- }
- if (!empty($_POST['distance']) && !is_numericint($_POST['distance'])) {
- $input_errors[] = gettext("Distance must be an integer.");
- }
- if (isset($_POST['standard']) && (stristr($_POST['standard'], '11na') || stristr($_POST['standard'], '11a'))) {
- if ($_POST['channel'] != 0 && $_POST['channel'] < 15) {
- $input_errors[] = gettext("Channel selected is not valid for 802.11a or 802.11na.");
- }
- }
- if (isset($_POST['standard']) && ($_POST['standard'] == "11b" || $_POST['standard'] == "11g")) {
- if ($_POST['channel'] > 14) {
- $input_errors[] = gettext("Channel selected is not valid for 802.11b or 802.11g.");
- }
- }
- if (!empty($_POST['protmode']) && !in_array($_POST['protmode'], array("off", "cts", "rtscts"))) {
- $input_errors[] = gettext("Invalid option chosen for OFDM Protection Mode");
- }
- /* loop through keys and enforce size */
- for ($i = 1; $i <= 4; $i++) {
- if ($_POST['key' . $i]) {
- /* 64 bit */
- if (strlen($_POST['key' . $i]) == 5) {
- continue;
- }
- if (strlen($_POST['key' . $i]) == 10) {
- /* hex key */
- if (stristr($_POST['key' . $i], "0x") == false) {
- $_POST['key' . $i] = "0x" . $_POST['key' . $i];
- }
- continue;
- }
- if (strlen($_POST['key' . $i]) == 12) {
- /* hex key */
- if (stristr($_POST['key' . $i], "0x") == false) {
- $_POST['key' . $i] = "0x" . $_POST['key' . $i];
- }
- continue;
- }
- /* 128 bit */
- if (strlen($_POST['key' . $i]) == 13) {
- continue;
- }
- if (strlen($_POST['key' . $i]) == 26) {
- /* hex key */
- if (stristr($_POST['key' . $i], "0x") == false) {
- $_POST['key' . $i] = "0x" . $_POST['key' . $i];
- }
- continue;
- }
- if (strlen($_POST['key' . $i]) == 28) {
- continue;
- }
- $input_errors[] = gettext("Invalid WEP key. Enter a valid 40, 64, 104 or 128 bit WEP key.");
- break;
- }
- }
-
- if ($_POST['passphrase']) {
- $passlen = strlen($_POST['passphrase']);
- if ($passlen < 8 || $passlen > 63) {
- $input_errors[] = gettext("The WPA passphrase must be between 8 and 63 characters long.");
- }
- }
- if ($_POST['wpa_enable'] == "yes") {
- if (empty($_POST['passphrase']) && stristr($_POST['wpa_key_mgmt'], "WPA-PSK")) {
- $input_errors[] = gettext("A WPA Passphrase must be specified when WPA PSK is enabled.");
- }
- }
- }
- if (!$input_errors) {
- if ($wancfg['ipaddr'] != $_POST['type']) {
- if (in_array($wancfg['ipaddr'], array("ppp", "pppoe", "pptp", "l2tp"))) {
- $wancfg['if'] = $a_ppps[$pppid]['ports'];
- unset($a_ppps[$pppid]);
- } else if ($wancfg['ipaddr'] == "dhcp") {
- kill_dhclient_process($wancfg['if']);
- }
- if ($wancfg['ipaddrv6'] == "dhcp6") {
- $pid = find_dhcp6c_process($wancfg['if']);
- if ($pid) {
- posix_kill($pid, SIGTERM);
- }
- }
- }
- $ppp = array();
- if ($wancfg['ipaddr'] != "ppp") {
- unset($wancfg['ipaddr']);
- }
- if ($wancfg['ipaddrv6'] != "ppp") {
- unset($wancfg['ipaddrv6']);
- }
- unset($wancfg['subnet']);
- unset($wancfg['gateway']);
- unset($wancfg['subnetv6']);
- unset($wancfg['gatewayv6']);
- unset($wancfg['dhcphostname']);
- unset($wancfg['dhcprejectfrom']);
- unset($wancfg['dhcp6-duid']);
- unset($wancfg['dhcp6-ia-pd-len']);
- unset($wancfg['dhcp6-ia-pd-send-hint']);
- unset($wancfg['dhcp6prefixonly']);
- unset($wancfg['dhcp6usev4iface']);
- unset($wancfg['track6-interface']);
- unset($wancfg['track6-prefix-id']);
- unset($wancfg['prefix-6rd']);
- unset($wancfg['prefix-6rd-v4plen']);
- unset($wancfg['gateway-6rd']);
-
- unset($wancfg['adv_dhcp_pt_timeout']);
- unset($wancfg['adv_dhcp_pt_retry']);
- unset($wancfg['adv_dhcp_pt_select_timeout']);
- unset($wancfg['adv_dhcp_pt_reboot']);
- unset($wancfg['adv_dhcp_pt_backoff_cutoff']);
- unset($wancfg['adv_dhcp_pt_initial_interval']);
-
- unset($wancfg['adv_dhcp_pt_values']);
-
- unset($wancfg['adv_dhcp_send_options']);
- unset($wancfg['adv_dhcp_request_options']);
- unset($wancfg['adv_dhcp_required_options']);
- unset($wancfg['adv_dhcp_option_modifiers']);
-
- unset($wancfg['adv_dhcp_config_advanced']);
- unset($wancfg['adv_dhcp_config_file_override']);
- unset($wancfg['adv_dhcp_config_file_override_path']);
-
- unset($wancfg['adv_dhcp6_interface_statement_send_options']);
- unset($wancfg['adv_dhcp6_interface_statement_request_options']);
- unset($wancfg['adv_dhcp6_interface_statement_information_only_enable']);
- unset($wancfg['adv_dhcp6_interface_statement_script']);
-
- unset($wancfg['adv_dhcp6_id_assoc_statement_address_enable']);
- unset($wancfg['adv_dhcp6_id_assoc_statement_address']);
- unset($wancfg['adv_dhcp6_id_assoc_statement_address_id']);
- unset($wancfg['adv_dhcp6_id_assoc_statement_address_pltime']);
- unset($wancfg['adv_dhcp6_id_assoc_statement_address_vltime']);
-
- unset($wancfg['adv_dhcp6_id_assoc_statement_prefix_enable']);
- unset($wancfg['adv_dhcp6_id_assoc_statement_prefix']);
- unset($wancfg['adv_dhcp6_id_assoc_statement_prefix_id']);
- unset($wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime']);
- unset($wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime']);
-
- unset($wancfg['adv_dhcp6_prefix_interface_statement_sla_id']);
- unset($wancfg['adv_dhcp6_prefix_interface_statement_sla_len']);
-
- unset($wancfg['adv_dhcp6_authentication_statement_authname']);
- unset($wancfg['adv_dhcp6_authentication_statement_protocol']);
- unset($wancfg['adv_dhcp6_authentication_statement_algorithm']);
- unset($wancfg['adv_dhcp6_authentication_statement_rdm']);
-
- unset($wancfg['adv_dhcp6_key_info_statement_keyname']);
- unset($wancfg['adv_dhcp6_key_info_statement_realm']);
- unset($wancfg['adv_dhcp6_key_info_statement_keyid']);
- unset($wancfg['adv_dhcp6_key_info_statement_secret']);
- unset($wancfg['adv_dhcp6_key_info_statement_expire']);
-
- unset($wancfg['adv_dhcp6_config_advanced']);
- unset($wancfg['adv_dhcp6_config_file_override']);
- unset($wancfg['adv_dhcp6_config_file_override_path']);
-
- unset($wancfg['pppoe_password']);
- unset($wancfg['pptp_username']);
- unset($wancfg['pptp_password']);
- unset($wancfg['provider']);
- unset($wancfg['ondemand']);
- unset($wancfg['timeout']);
- if (empty($wancfg['pppoe']['pppoe-reset-type'])) {
- unset($wancfg['pppoe']['pppoe-reset-type']);
- }
- unset($wancfg['local']);
-
- unset($wancfg['remote']);
- if (is_array($a_ppps[$pppid]) && in_array($wancfg['ipaddr'], array("ppp", "pppoe", "pptp", "l2tp"))) {
- if ($wancfg['ipaddr'] != 'ppp') {
- unset($a_ppps[$pppid]['apn']);
- unset($a_ppps[$pppid]['phone']);
- unset($a_ppps[$pppid]['provider']);
- unset($a_ppps[$pppid]['ondemand']);
- }
- if (in_array($wancfg['ipaddr'], array("pppoe", "pptp", "l2tp"))) {
- unset($a_ppps[$pppid]['localip']);
- unset($a_ppps[$pppid]['subnet']);
- unset($a_ppps[$pppid]['gateway']);
- }
- if ($wancfg['ipaddr'] != 'pppoe') {
- unset($a_ppps[$pppid]['pppoe-reset-type']);
- }
- if ($wancfg['type'] != $_POST['type']) {
- unset($a_ppps[$pppid]['idletimeout']);
- }
- }
-
- $wancfg['descr'] = remove_bad_chars($_POST['descr']);
- $wancfg['enable'] = $_POST['enable'] == "yes" ? true : false;
-
- /* let return_gateways_array() do the magic on dynamic interfaces for us */
- switch ($_POST['type']) {
- case "staticv4":
- $wancfg['ipaddr'] = $_POST['ipaddr'];
- $wancfg['subnet'] = $_POST['subnet'];
- if ($_POST['gateway'] != "none") {
- $wancfg['gateway'] = $_POST['gateway'];
- }
- break;
- case "dhcp":
- $wancfg['ipaddr'] = "dhcp";
- $wancfg['dhcphostname'] = $_POST['dhcphostname'];
- $wancfg['alias-address'] = $_POST['alias-address'];
- $wancfg['alias-subnet'] = $_POST['alias-subnet'];
- $wancfg['dhcprejectfrom'] = $_POST['dhcprejectfrom'];
-
- $wancfg['adv_dhcp_pt_timeout'] = $_POST['adv_dhcp_pt_timeout'];
- $wancfg['adv_dhcp_pt_retry'] = $_POST['adv_dhcp_pt_retry'];
- $wancfg['adv_dhcp_pt_select_timeout'] = $_POST['adv_dhcp_pt_select_timeout'];
- $wancfg['adv_dhcp_pt_reboot'] = $_POST['adv_dhcp_pt_reboot'];
- $wancfg['adv_dhcp_pt_backoff_cutoff'] = $_POST['adv_dhcp_pt_backoff_cutoff'];
- $wancfg['adv_dhcp_pt_initial_interval'] = $_POST['adv_dhcp_pt_initial_interval'];
-
- $wancfg['adv_dhcp_pt_values'] = $_POST['adv_dhcp_pt_values'];
-
- $wancfg['adv_dhcp_send_options'] = $_POST['adv_dhcp_send_options'];
- $wancfg['adv_dhcp_request_options'] = $_POST['adv_dhcp_request_options'];
- $wancfg['adv_dhcp_required_options'] = $_POST['adv_dhcp_required_options'];
- $wancfg['adv_dhcp_option_modifiers'] = $_POST['adv_dhcp_option_modifiers'];
-
- $wancfg['adv_dhcp_config_advanced'] = $_POST['adv_dhcp_config_advanced'];
- $wancfg['adv_dhcp_config_file_override'] = $_POST['adv_dhcp_config_file_override'];
- $wancfg['adv_dhcp_config_file_override_path'] = $_POST['adv_dhcp_config_file_override_path'];
-
- $wancfg['dhcp_plus'] = $_POST['dhcp_plus'] == "yes" ? true : false;
- if ($gateway_item) {
- $a_gateways[] = $gateway_item;
- }
- break;
- case "ppp":
- $a_ppps[$pppid]['ptpid'] = $_POST['ptpid'];
- $a_ppps[$pppid]['type'] = $_POST['type'];
- $a_ppps[$pppid]['if'] = $_POST['type'].$_POST['ptpid'];
- $a_ppps[$pppid]['ports'] = $_POST['port'];
- $a_ppps[$pppid]['username'] = $_POST['ppp_username'];
- $a_ppps[$pppid]['password'] = base64_encode($_POST['ppp_password']);
- $a_ppps[$pppid]['phone'] = $_POST['phone'];
- $a_ppps[$pppid]['apn'] = $_POST['apn'];
- $wancfg['if'] = $_POST['type'] . $_POST['ptpid'];
- $wancfg['ipaddr'] = $_POST['type'];
- break;
-
- case "pppoe":
- $a_ppps[$pppid]['ptpid'] = $_POST['ptpid'];
- $a_ppps[$pppid]['type'] = $_POST['type'];
- $a_ppps[$pppid]['if'] = $_POST['type'].$_POST['ptpid'];
- if (isset($_POST['ppp_port'])) {
- $a_ppps[$pppid]['ports'] = $_POST['ppp_port'];
- } else {
- $a_ppps[$pppid]['ports'] = $wancfg['if'];
- }
- $a_ppps[$pppid]['username'] = $_POST['pppoe_username'];
- $a_ppps[$pppid]['password'] = base64_encode($_POST['pppoe_password']);
- if (!empty($_POST['provider'])) {
- $a_ppps[$pppid]['provider'] = $_POST['provider'];
- } else {
- $a_ppps[$pppid]['provider'] = true;
- }
- $a_ppps[$pppid]['ondemand'] = $_POST['pppoe_dialondemand'] ? true : false;
- if (!empty($_POST['pppoe_idletimeout'])) {
- $a_ppps[$pppid]['idletimeout'] = $_POST['pppoe_idletimeout'];
- } else {
- unset($a_ppps[$pppid]['idletimeout']);
- }
-
- if (!empty($_POST['pppoe-reset-type'])) {
- $a_ppps[$pppid]['pppoe-reset-type'] = $_POST['pppoe-reset-type'];
- } else {
- unset($a_ppps[$pppid]['pppoe-reset-type']);
- }
- $wancfg['if'] = $_POST['type'].$_POST['ptpid'];
- $wancfg['ipaddr'] = $_POST['type'];
- if ($gateway_item) {
- $a_gateways[] = $gateway_item;
- }
-
- break;
- case "pptp":
- case "l2tp":
- $a_ppps[$pppid]['ptpid'] = $_POST['ptpid'];
- $a_ppps[$pppid]['type'] = $_POST['type'];
- $a_ppps[$pppid]['if'] = $_POST['type'].$_POST['ptpid'];
- if (isset($_POST['ppp_port'])) {
- $a_ppps[$pppid]['ports'] = $_POST['ppp_port'];
- } else {
- $a_ppps[$pppid]['ports'] = $wancfg['if'];
- }
- $a_ppps[$pppid]['username'] = $_POST['pptp_username'];
- $a_ppps[$pppid]['password'] = base64_encode($_POST['pptp_password']);
- $a_ppps[$pppid]['localip'] = $_POST['pptp_local'];
- $a_ppps[$pppid]['subnet'] = $_POST['pptp_subnet'];
- $a_ppps[$pppid]['gateway'] = $_POST['pptp_remote'];
- $a_ppps[$pppid]['ondemand'] = $_POST['pptp_dialondemand'] ? true : false;
- if (!empty($_POST['pptp_idletimeout'])) {
- $a_ppps[$pppid]['idletimeout'] = $_POST['pptp_idletimeout'];
- } else {
- unset($a_ppps[$pppid]['idletimeout']);
- }
- $wancfg['if'] = $_POST['type'].$_POST['ptpid'];
- $wancfg['ipaddr'] = $_POST['type'];
- if ($gateway_item) {
- $a_gateways[] = $gateway_item;
- }
- break;
- case "none":
- break;
- }
- switch ($_POST['type6']) {
- case "staticv6":
- $wancfg['ipaddrv6'] = $_POST['ipaddrv6'];
- $wancfg['subnetv6'] = $_POST['subnetv6'];
- if ($_POST['gatewayv6'] != "none") {
- $wancfg['gatewayv6'] = $_POST['gatewayv6'];
- }
- break;
- case "slaac":
- $wancfg['ipaddrv6'] = "slaac";
- break;
- case "dhcp6":
- $wancfg['ipaddrv6'] = "dhcp6";
- $wancfg['dhcp6-duid'] = $_POST['dhcp6-duid'];
- $wancfg['dhcp6-ia-pd-len'] = $_POST['dhcp6-ia-pd-len'];
- if ($_POST['dhcp6-ia-pd-send-hint'] == "yes") {
- $wancfg['dhcp6-ia-pd-send-hint'] = true;
- }
- if ($_POST['dhcp6prefixonly'] == "yes") {
- $wancfg['dhcp6prefixonly'] = true;
- }
- if ($_POST['dhcp6usev4iface'] == "yes") {
- $wancfg['dhcp6usev4iface'] = true;
- }
-
- if (!empty($_POST['adv_dhcp6_interface_statement_send_options'])) {
- $wancfg['adv_dhcp6_interface_statement_send_options'] = $_POST['adv_dhcp6_interface_statement_send_options'];
- }
- if (!empty($_POST['adv_dhcp6_interface_statement_request_options'])) {
- $wancfg['adv_dhcp6_interface_statement_request_options'] = $_POST['adv_dhcp6_interface_statement_request_options'];
- }
- if (isset($_POST['adv_dhcp6_interface_statement_information_only_enable'])) {
- $wancfg['adv_dhcp6_interface_statement_information_only_enable'] = $_POST['adv_dhcp6_interface_statement_information_only_enable'];
- }
- if (!empty($_POST['adv_dhcp6_interface_statement_script'])) {
- $wancfg['adv_dhcp6_interface_statement_script'] = $_POST['adv_dhcp6_interface_statement_script'];
- }
-
- if (isset($_POST['adv_dhcp6_id_assoc_statement_address_enable'])) {
- $wancfg['adv_dhcp6_id_assoc_statement_address_enable'] = $_POST['adv_dhcp6_id_assoc_statement_address_enable'];
- }
- if (!empty($_POST['adv_dhcp6_id_assoc_statement_address'])) {
- $wancfg['adv_dhcp6_id_assoc_statement_address'] = $_POST['adv_dhcp6_id_assoc_statement_address'];
- }
- if (is_numericint($_POST['adv_dhcp6_id_assoc_statement_address_id'])) {
- $wancfg['adv_dhcp6_id_assoc_statement_address_id'] = $_POST['adv_dhcp6_id_assoc_statement_address_id'];
- }
- if (!empty($_POST['adv_dhcp6_id_assoc_statement_address_pltime'])) {
- $wancfg['adv_dhcp6_id_assoc_statement_address_pltime'] = $_POST['adv_dhcp6_id_assoc_statement_address_pltime'];
- }
- if (!empty($_POST['adv_dhcp6_id_assoc_statement_address_vltime'])) {
- $wancfg['adv_dhcp6_id_assoc_statement_address_vltime'] = $_POST['adv_dhcp6_id_assoc_statement_address_vltime'];
- }
-
- if (isset($_POST['adv_dhcp6_id_assoc_statement_prefix_enable'])) {
- $wancfg['adv_dhcp6_id_assoc_statement_prefix_enable'] = $_POST['adv_dhcp6_id_assoc_statement_prefix_enable'];
- }
- if (!empty($_POST['adv_dhcp6_id_assoc_statement_prefix'])) {
- $wancfg['adv_dhcp6_id_assoc_statement_prefix'] = $_POST['adv_dhcp6_id_assoc_statement_prefix'];
- }
- if (is_numericint($_POST['adv_dhcp6_id_assoc_statement_prefix_id'])) {
- $wancfg['adv_dhcp6_id_assoc_statement_prefix_id'] = $_POST['adv_dhcp6_id_assoc_statement_prefix_id'];
- }
- if (!empty($_POST['adv_dhcp6_id_assoc_statement_prefix_pltime'])) {
- $wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime'] = $_POST['adv_dhcp6_id_assoc_statement_prefix_pltime'];
- }
- if (!empty($_POST['adv_dhcp6_id_assoc_statement_prefix_vltime'])) {
- $wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime'] = $_POST['adv_dhcp6_id_assoc_statement_prefix_vltime'];
- }
-
- if (is_numericint($_POST['adv_dhcp6_prefix_interface_statement_sla_id'])) {
- $wancfg['adv_dhcp6_prefix_interface_statement_sla_id'] = $_POST['adv_dhcp6_prefix_interface_statement_sla_id'];
- }
- if (is_numericint($_POST['adv_dhcp6_prefix_interface_statement_sla_len'])) {
- $wancfg['adv_dhcp6_prefix_interface_statement_sla_len'] = $_POST['adv_dhcp6_prefix_interface_statement_sla_len'];
- }
-
- if (!empty($_POST['adv_dhcp6_authentication_statement_authname'])) {
- $wancfg['adv_dhcp6_authentication_statement_authname'] = $_POST['adv_dhcp6_authentication_statement_authname'];
- }
- if (!empty($_POST['adv_dhcp6_authentication_statement_protocol'])) {
- $wancfg['adv_dhcp6_authentication_statement_protocol'] = $_POST['adv_dhcp6_authentication_statement_protocol'];
- }
- if (!empty($_POST['adv_dhcp6_authentication_statement_algorithm'])) {
- $wancfg['adv_dhcp6_authentication_statement_algorithm'] = $_POST['adv_dhcp6_authentication_statement_algorithm'];
- }
- if (!empty($_POST['adv_dhcp6_authentication_statement_rdm'])) {
- $wancfg['adv_dhcp6_authentication_statement_rdm'] = $_POST['adv_dhcp6_authentication_statement_rdm'];
- }
-
- if (!empty($_POST['adv_dhcp6_key_info_statement_keyname'])) {
- $wancfg['adv_dhcp6_key_info_statement_keyname'] = $_POST['adv_dhcp6_key_info_statement_keyname'];
- }
- if (!empty($_POST['adv_dhcp6_key_info_statement_realm'])) {
- $wancfg['adv_dhcp6_key_info_statement_realm'] = $_POST['adv_dhcp6_key_info_statement_realm'];
- }
- if (!empty($_POST['adv_dhcp6_key_info_statement_keyid'])) {
- $wancfg['adv_dhcp6_key_info_statement_keyid'] = $_POST['adv_dhcp6_key_info_statement_keyid'];
- }
- if (!empty($_POST['adv_dhcp6_key_info_statement_secret'])) {
- $wancfg['adv_dhcp6_key_info_statement_secret'] = $_POST['adv_dhcp6_key_info_statement_secret'];
- }
- if (!empty($_POST['adv_dhcp6_key_info_statement_expire'])) {
- $wancfg['adv_dhcp6_key_info_statement_expire'] = $_POST['adv_dhcp6_key_info_statement_expire'];
- }
-
- if (!empty($_POST['adv_dhcp6_config_advanced'])) {
- $wancfg['adv_dhcp6_config_advanced'] = $_POST['adv_dhcp6_config_advanced'];
- }
- if (!empty($_POST['adv_dhcp6_config_file_override'])) {
- $wancfg['adv_dhcp6_config_file_override'] = $_POST['adv_dhcp6_config_file_override'];
- }
- if (!empty($_POST['adv_dhcp6_config_file_override_path'])) {
- $wancfg['adv_dhcp6_config_file_override_path'] = $_POST['adv_dhcp6_config_file_override_path'];
- }
-
- if ($gateway_item) {
- $a_gateways[] = $gateway_item;
- }
- break;
- case "6rd":
- $wancfg['ipaddrv6'] = "6rd";
- $wancfg['prefix-6rd'] = $_POST['prefix-6rd'];
- $wancfg['prefix-6rd-v4plen'] = $_POST['prefix-6rd-v4plen'];
- $wancfg['gateway-6rd'] = $_POST['gateway-6rd'];
- if ($gateway_item) {
- $a_gateways[] = $gateway_item;
- }
- break;
- case "6to4":
- $wancfg['ipaddrv6'] = "6to4";
- break;
- case "track6":
- $wancfg['ipaddrv6'] = "track6";
- $wancfg['track6-interface'] = $_POST['track6-interface'];
- if ($_POST['track6-prefix-id--hex'] === "") {
- $wancfg['track6-prefix-id'] = 0;
- } else if (is_numeric("0x" . $_POST['track6-prefix-id--hex'])) {
- $wancfg['track6-prefix-id'] = intval($_POST['track6-prefix-id--hex'], 16);
- } else {
- $wancfg['track6-prefix-id'] = 0;
- }
- break;
- case "none":
- break;
- }
- handle_pppoe_reset($_POST);
-
- if ($_POST['blockpriv'] == "yes") {
- $wancfg['blockpriv'] = true;
- } else {
- unset($wancfg['blockpriv']);
- }
- if ($_POST['blockbogons'] == "yes") {
- $wancfg['blockbogons'] = true;
- } else {
- unset($wancfg['blockbogons']);
- }
- $wancfg['spoofmac'] = $_POST['spoofmac'];
- if (empty($_POST['mtu'])) {
- unset($wancfg['mtu']);
- } else {
- $wancfg['mtu'] = $_POST['mtu'];
- }
- if (empty($_POST['mss'])) {
- unset($wancfg['mss']);
- } else {
- $wancfg['mss'] = $_POST['mss'];
- }
- if (empty($_POST['mediaopt'])) {
- unset($wancfg['media']);
- unset($wancfg['mediaopt']);
- } else {
- $mediaopts = explode(' ', $_POST['mediaopt']);
- if ($mediaopts[0] != '') {
- $wancfg['media'] = $mediaopts[0];
- }
- if ($mediaopts[1] != '') {
- $wancfg['mediaopt'] = $mediaopts[1];
- } else {
- unset($wancfg['mediaopt']);
- }
- }
- if (isset($wancfg['wireless'])) {
- handle_wireless_post();
- }
-
- conf_mount_ro();
- write_config();
-
- if (file_exists("{$g['tmp_path']}/.interfaces.apply")) {
- $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply"));
- } else {
- $toapplylist = array();
- }
- $toapplylist[$if]['ifcfg'] = $old_wancfg;
- $toapplylist[$if]['ppps'] = $old_ppps;
- file_put_contents("{$g['tmp_path']}/.interfaces.apply", serialize($toapplylist));
-
- mark_subsystem_dirty('interfaces');
-
- /* regenerate cron settings/crontab file */
- configure_cron();
-
- header("Location: interfaces.php?if={$if}");
- exit;
- }
-
-} // end if ($_POST)
-
-function handle_wireless_post() {
- global $_POST, $config, $g, $wancfg, $if, $wl_countries_attr, $wlanbaseif;
- if (!is_array($wancfg['wireless'])) {
- $wancfg['wireless'] = array();
- }
- $wancfg['wireless']['standard'] = $_POST['standard'];
- $wancfg['wireless']['mode'] = $_POST['mode'];
- $wancfg['wireless']['protmode'] = $_POST['protmode'];
- $wancfg['wireless']['ssid'] = $_POST['ssid'];
- $wancfg['wireless']['channel'] = $_POST['channel'];
- $wancfg['wireless']['authmode'] = $_POST['authmode'];
- $wancfg['wireless']['txpower'] = $_POST['txpower'];
- $wancfg['wireless']['distance'] = $_POST['distance'];
- $wancfg['wireless']['regdomain'] = $_POST['regdomain'];
- $wancfg['wireless']['regcountry'] = $_POST['regcountry'];
- $wancfg['wireless']['reglocation'] = $_POST['reglocation'];
- if (!empty($wancfg['wireless']['regdomain']) && !empty($wancfg['wireless']['regcountry'])) {
- foreach ($wl_countries_attr as $wl_country) {
- if ($wancfg['wireless']['regcountry'] == $wl_country['ID']) {
- $wancfg['wireless']['regdomain'] = $wl_country['rd'][0]['REF'];
- break;
- }
- }
- }
- if (!is_array($wancfg['wireless']['wpa'])) {
- $wancfg['wireless']['wpa'] = array();
- }
- $wancfg['wireless']['wpa']['macaddr_acl'] = $_POST['macaddr_acl'];
- $wancfg['wireless']['wpa']['auth_algs'] = $_POST['auth_algs'];
- $wancfg['wireless']['wpa']['wpa_mode'] = $_POST['wpa_mode'];
- $wancfg['wireless']['wpa']['wpa_key_mgmt'] = $_POST['wpa_key_mgmt'];
- $wancfg['wireless']['wpa']['wpa_pairwise'] = $_POST['wpa_pairwise'];
- $wancfg['wireless']['wpa']['wpa_group_rekey'] = $_POST['wpa_group_rekey'];
- $wancfg['wireless']['wpa']['wpa_gmk_rekey'] = $_POST['wpa_gmk_rekey'];
- $wancfg['wireless']['wpa']['passphrase'] = $_POST['passphrase'];
- $wancfg['wireless']['wpa']['ext_wpa_sw'] = $_POST['ext_wpa_sw'];
- $wancfg['wireless']['auth_server_addr'] = $_POST['auth_server_addr'];
- $wancfg['wireless']['auth_server_port'] = $_POST['auth_server_port'];
- $wancfg['wireless']['auth_server_shared_secret'] = $_POST['auth_server_shared_secret'];
- $wancfg['wireless']['auth_server_addr2'] = $_POST['auth_server_addr2'];
- $wancfg['wireless']['auth_server_port2'] = $_POST['auth_server_port2'];
- $wancfg['wireless']['auth_server_shared_secret2'] = $_POST['auth_server_shared_secret2'];
-
- if ($_POST['persistcommonwireless'] == "yes") {
- if (!is_array($config['wireless'])) {
- $config['wireless'] = array();
- }
- if (!is_array($config['wireless']['interfaces'])) {
- $config['wireless']['interfaces'] = array();
- }
- if (!is_array($config['wireless']['interfaces'][$wlanbaseif])) {
- $config['wireless']['interfaces'][$wlanbaseif] = array();
- }
- } else if (isset($config['wireless']['interfaces'][$wlanbaseif])) {
- unset($config['wireless']['interfaces'][$wlanbaseif]);
- }
- if (isset($_POST['diversity']) && is_numeric($_POST['diversity'])) {
- $wancfg['wireless']['diversity'] = $_POST['diversity'];
- } else if (isset($wancfg['wireless']['diversity'])) {
- unset($wancfg['wireless']['diversity']);
- }
- if (isset($_POST['txantenna']) && is_numeric($_POST['txantenna'])) {
- $wancfg['wireless']['txantenna'] = $_POST['txantenna'];
- } else if (isset($wancfg['wireless']['txantenna'])) {
- unset($wancfg['wireless']['txantenna']);
- }
- if (isset($_POST['rxantenna']) && is_numeric($_POST['rxantenna'])) {
- $wancfg['wireless']['rxantenna'] = $_POST['rxantenna'];
- } else if (isset($wancfg['wireless']['rxantenna'])) {
- unset($wancfg['wireless']['rxantenna']);
- }
- if ($_POST['hidessid_enable'] == "yes") {
- $wancfg['wireless']['hidessid']['enable'] = true;
- } else if (isset($wancfg['wireless']['hidessid']['enable'])) {
- unset($wancfg['wireless']['hidessid']['enable']);
- }
- if ($_POST['mac_acl_enable'] == "yes") {
- $wancfg['wireless']['wpa']['mac_acl_enable'] = true;
- } else if (isset($wancfg['wireless']['wpa']['mac_acl_enable'])) {
- unset($wancfg['wireless']['wpa']['mac_acl_enable']);
- }
- if ($_POST['rsn_preauth'] == "yes") {
- $wancfg['wireless']['wpa']['rsn_preauth'] = true;
- } else {
- unset($wancfg['wireless']['wpa']['rsn_preauth']);
- }
- if ($_POST['ieee8021x'] == "yes") {
- $wancfg['wireless']['wpa']['ieee8021x']['enable'] = true;
- } else if (isset($wancfg['wireless']['wpa']['ieee8021x']['enable'])) {
- unset($wancfg['wireless']['wpa']['ieee8021x']['enable']);
- }
- if ($_POST['wpa_strict_rekey'] == "yes") {
- $wancfg['wireless']['wpa']['wpa_strict_rekey'] = true;
- } else if (isset($wancfg['wireless']['wpa']['wpa_strict_rekey'])) {
- unset($wancfg['wireless']['wpa']['wpa_strict_rekey']);
- }
- if ($_POST['debug_mode'] == "yes") {
- $wancfg['wireless']['wpa']['debug_mode'] = true;
- } else if (isset($wancfg['wireless']['wpa']['debug_mode'])) {
- sunset($wancfg['wireless']['wpa']['debug_mode']);
- }
- if ($_POST['wpa_enable'] == "yes") {
- $wancfg['wireless']['wpa']['enable'] = $_POST['wpa_enable'] = true;
- } else if (isset($wancfg['wireless']['wpa']['enable'])) {
- unset($wancfg['wireless']['wpa']['enable']);
- }
- if ($_POST['wep_enable'] == "yes") {
- if (!is_array($wancfg['wireless']['wep'])) {
- $wancfg['wireless']['wep'] = array();
- }
- $wancfg['wireless']['wep']['enable'] = $_POST['wep_enable'] = true;
- } else if (isset($wancfg['wireless']['wep'])) {
- unset($wancfg['wireless']['wep']);
- }
- if ($_POST['wme_enable'] == "yes") {
- if (!is_array($wancfg['wireless']['wme'])) {
- $wancfg['wireless']['wme'] = array();
- }
- $wancfg['wireless']['wme']['enable'] = $_POST['wme_enable'] = true;
- } else if (isset($wancfg['wireless']['wme']['enable'])) {
- unset($wancfg['wireless']['wme']['enable']);
- }
- if ($_POST['puremode'] == "11g") {
- if (!is_array($wancfg['wireless']['pureg'])) {
- $wancfg['wireless']['pureg'] = array();
- }
- $wancfg['wireless']['pureg']['enable'] = true;
- } else if ($_POST['puremode'] == "11n") {
- if (!is_array($wancfg['wireless']['puren'])) {
- $wancfg['wireless']['puren'] = array();
- }
- $wancfg['wireless']['puren']['enable'] = true;
- } else {
- if (isset($wancfg['wireless']['pureg'])) {
- unset($wancfg['wireless']['pureg']);
- }
- if (isset($wancfg['wireless']['puren'])) {
- unset($wancfg['wireless']['puren']);
- }
- }
- if ($_POST['apbridge_enable'] == "yes") {
- if (!is_array($wancfg['wireless']['apbridge'])) {
- $wancfg['wireless']['apbridge'] = array();
- }
- $wancfg['wireless']['apbridge']['enable'] = $_POST['apbridge_enable'] = true;
- } else if (isset($wancfg['wireless']['apbridge']['enable'])) {
- unset($wancfg['wireless']['apbridge']['enable']);
- }
- if ($_POST['standard'] == "11g Turbo" || $_POST['standard'] == "11a Turbo") {
- if (!is_array($wancfg['wireless']['turbo'])) {
- $wancfg['wireless']['turbo'] = array();
- }
- $wancfg['wireless']['turbo']['enable'] = true;
- } else if (isset($wancfg['wireless']['turbo']['enable'])) {
- unset($wancfg['wireless']['turbo']['enable']);
- }
- $wancfg['wireless']['wep']['key'] = array();
- for ($i = 1; $i <= 4; $i++) {
- if ($_POST['key' . $i]) {
- $newkey = array();
- $newkey['value'] = $_POST['key' . $i];
- if ($_POST['txkey'] == $i) {
- $newkey['txkey'] = true;
- }
- $wancfg['wireless']['wep']['key'][] = $newkey;
- }
- }
- interface_sync_wireless_clones($wancfg, true);
-}
-
-function check_wireless_mode() {
- global $_POST, $config, $g, $wlan_modes, $wancfg, $if, $wlanif, $wlanbaseif, $old_wireless_mode, $input_errors;
-
- if ($wancfg['wireless']['mode'] == $_POST['mode']) {
- return;
- }
-
- if (does_interface_exist(interface_get_wireless_clone($wlanbaseif))) {
- $clone_count = 1;
- } else {
- $clone_count = 0;
- }
- if (isset($config['wireless']['clone']) && is_array($config['wireless']['clone'])) {
- foreach ($config['wireless']['clone'] as $clone) {
- if ($clone['if'] == $wlanbaseif) {
- $clone_count++;
- }
- }
- }
- if ($clone_count > 1) {
- $old_wireless_mode = $wancfg['wireless']['mode'];
- $wancfg['wireless']['mode'] = $_POST['mode'];
- if (!interface_wireless_clone("{$wlanif}_", $wancfg)) {
- $input_errors[] = sprintf(gettext("Unable to change mode to %s. You may already have the maximum number of wireless clones supported in this mode."), $wlan_modes[$wancfg['wireless']['mode']]);
- } else {
- mwexec("/sbin/ifconfig " . escapeshellarg($wlanif) . "_ destroy");
- }
- $wancfg['wireless']['mode'] = $old_wireless_mode;
- }
-}
-
-// Find all possible media options for the interface
-$mediaopts_list = array();
-$intrealname = $config['interfaces'][$if]['if'];
-exec("/sbin/ifconfig -m $intrealname | grep \"media \"", $mediaopts);
-foreach ($mediaopts as $mediaopt) {
- preg_match("/media (.*)/", $mediaopt, $matches);
- if (preg_match("/(.*) mediaopt (.*)/", $matches[1], $matches1)) {
- // there is media + mediaopt like "media 1000baseT mediaopt full-duplex"
- array_push($mediaopts_list, $matches1[1] . " " . $matches1[2]);
- } else {
- // there is only media like "media 1000baseT"
- array_push($mediaopts_list, $matches[1]);
- }
-}
-
-$pgtitle = array(gettext("Interfaces"), $pconfig['descr']);
-$shortcut_section = "interfaces";
-
-$closehead = false;
-include("head.inc");
-$types4 = array("none" => gettext("None"), "staticv4" => gettext("Static IPv4"), "dhcp" => gettext("DHCP"), "ppp" => gettext("PPP"), "pppoe" => gettext("PPPoE"), "pptp" => gettext("PPTP"), "l2tp" => gettext("L2TP"));
-$types6 = array("none" => gettext("None"), "staticv6" => gettext("Static IPv6"), "dhcp6" => gettext("DHCP6"), "slaac" => gettext("SLAAC"), "6rd" => gettext("6rd Tunnel"), "6to4" => gettext("6to4 Tunnel"), "track6" => gettext("Track Interface"));
-
-?>
-
-<script type="text/javascript" src="/javascript/numericupdown/js/numericupdown.js"></script>
-<link href="/javascript/numericupdown/css/numericupdown.css" rel="stylesheet" type="text/css" />
-<script type="text/javascript" src="/javascript/datepicker/js/datepicker.js"></script>
-<link href="/javascript/datepicker/css/datepicker.css" rel="stylesheet" type="text/css"/>
-
-<script type="text/javascript">
-//<![CDATA[
- function updateType(t) {
- switch (t) {
- case "none": {
- jQuery('#staticv4, #dhcp, #pppoe, #pptp, #ppp').hide();
- break;
- }
- case "staticv4": {
- jQuery('#none, #dhcp, #pppoe, #pptp, #ppp').hide();
- break;
- }
- case "dhcp": {
- jQuery('#none, #staticv4, #pppoe, #pptp, #ppp').hide();
- break;
- }
- case "ppp": {
- jQuery('#none, #staticv4, #dhcp, #pptp, #pppoe').hide();
- country_list();
- break;
- }
- case "pppoe": {
- jQuery('#none, #staticv4, #dhcp, #pptp, #ppp').hide();
- break;
- }
- case "l2tp":
- case "pptp": {
- jQuery('#none, #staticv4, #dhcp, #pppoe, #ppp').hide();
- jQuery('#pptp').show();
- break;
- }
- }
- if (t != "l2tp" && t != "pptp") {
- jQuery('#'+t).show();
- }
- }
- function updateTypeSix(t) {
- if (!isNaN(t[0])) t = '_' + t;
- switch (t) {
- case "none": {
- jQuery('#staticv6, #dhcp6, #_6rd, #_6to4, #track6, #slaac').hide();
- break;
- }
- case "staticv6": {
- jQuery('#none, #dhcp6, #_6rd, #_6to4, #track6, #slaac').hide();
- break;
- }
- case "slaac": {
- jQuery('#none, #staticv6, #_6rd, #_6to4, #track6, #dhcp6').hide();
- break;
- }
- case "dhcp6": {
- jQuery('#none, #staticv6, #_6rd, #_6to4, #track6, #slaac').hide();
- break;
- }
- case "_6rd": {
- jQuery('#none, #dhcp6, #staticv6, #_6to4, #track6, #slaac').hide();
- break;
- }
- case "_6to4": {
- jQuery('#none, #dhcp6, #staticv6, #_6rd, #track6, #slaac').hide();
- break;
- }
- case "track6": {
- jQuery('#none, #dhcp6, #staticv6, #_6rd, #_6to4, #slaac').hide();
- update_track6_prefix();
- break;
- }
- }
- if (t != "l2tp" && t != "pptp") {
- jQuery('#'+t).show();
- }
- }
-
- function show_allcfg(obj) {
- if (obj.checked) {
- jQuery('#allcfg').show();
- } else {
- jQuery('#allcfg').hide();
- }
- }
-
- function show_reset_settings(reset_type) {
- if (reset_type == 'preset') {
- jQuery('#pppoepresetwrap').show();
- jQuery('#pppoecustomwrap').hide();
- } else if (reset_type == 'custom') {
- jQuery('#pppoecustomwrap').show();
- jQuery('#pppoepresetwrap').hide();
- } else {
- jQuery('#pppoecustomwrap').hide();
- jQuery('#pppoepresetwrap').hide();
- }
- }
-
- function show_mon_config() {
- jQuery("#showmonbox").html('');
- jQuery('#showmon').css('display', 'block');
- }
-
- function openwindow(url) {
- var oWin = window.open(url, "pfSensePop", "width=620,height=400,top=150,left=150");
- if (oWin == null || typeof(oWin) == "undefined") {
- return false;
- } else {
- return true;
- }
- }
-
- function country_list() {
- jQuery('#country').children().remove();
- jQuery('#provider_list').children().remove();
- jQuery('#providerplan').children().remove();
- jQuery.ajax("getserviceproviders.php",{
- success: function(response) {
- var responseTextArr = response.split("\n");
- responseTextArr.sort();
- responseTextArr.each( function(value) {
- var option = new Element('option');
- country = value.split(":");
- option.text = country[0];
- option.value = country[1];
- jQuery('#country').append(option);
- });
- }
- });
- jQuery('#trcountry').css('display', "table-row");
- }
-
- function providers_list() {
- jQuery('#provider_list').children().remove();
- jQuery('#providerplan').children().remove();
- jQuery.ajax("getserviceproviders.php",{
- type: 'post',
- data: {country : jQuery('#country').val()},
- success: function(response) {
- var responseTextArr = response.split("\n");
- responseTextArr.sort();
- responseTextArr.each( function(value) {
- var option = new Element('option');
- option.text = value;
- option.value = value;
- jQuery('#provider_list').append(option);
- });
- }
- });
- jQuery('#trprovider').css("display", "table-row");
- jQuery('#trproviderplan').css("display", "none");
- }
-
- function providerplan_list() {
- jQuery('#providerplan').children().remove();
- jQuery('#providerplan').append( new Element('option') );
- jQuery.ajax("getserviceproviders.php",{
- type: 'post',
- data: {country : jQuery('#country').val(), provider : jQuery('#provider_list').val()},
- success: function(response) {
- var responseTextArr = response.split("\n");
- responseTextArr.sort();
- responseTextArr.each( function(value) {
- if (value != "") {
- providerplan = value.split(":");
-
- var option = new Element('option');
- option.text = providerplan[0] + " - " + providerplan[1];
- option.value = providerplan[1];
- jQuery('#providerplan').append(option);
- }
- });
- }
- });
- jQuery('#trproviderplan').css("display", "table-row");
- }
-
- function prefill_provider() {
- jQuery.ajax("getserviceproviders.php",{
- type: 'post',
- data: {country : jQuery('#country').val(), provider : jQuery('#provider_list').val(), plan : jQuery('#providerplan').val()},
- success: function(data, textStatus, response) {
- var xmldoc = response.responseXML;
- var provider = xmldoc.getElementsByTagName('connection')[0];
- jQuery('#ppp_username').val('');
- jQuery('#ppp_password').val('');
- if (provider.getElementsByTagName('apn')[0].firstChild.data == "CDMA") {
- jQuery('#phone').val('#777');
- jQuery('#apn').val('');
- } else {
- jQuery('#phone').val('*99#');
- jQuery('#apn').val(provider.getElementsByTagName('apn')[0].firstChild.data);
- }
- ppp_username = provider.getElementsByTagName('ppp_username')[0].firstChild.data;
- ppp_password = provider.getElementsByTagName('ppp_password')[0].firstChild.data;
- jQuery('#ppp_username').val(ppp_username);
- jQuery('#ppp_password').val(ppp_password);
- }
- });
- }
-
- function update_track6_prefix() {
- var iface = jQuery("#track6-interface").val();
- if (iface == null) {
- return;
- }
- var track6_prefix_ids = jQuery('#ipv6-num-prefix-ids-' + iface).val();
- if (track6_prefix_ids == null) {
- return;
- }
- track6_prefix_ids = parseInt(track6_prefix_ids).toString(16);
- jQuery('#track6-prefix-id-range').html('(<b>hexadecimal</b> from 0 to ' + track6_prefix_ids + ')');
- }
-
-//]]>
-</script>
-</head>
- <body link="#0000CC" vlink="#0000CC" alink="#0000CC">
- <?php include("fbegin.inc"); ?>
- <form action="interfaces.php" method="post" name="iform" id="iform">
- <?php if ($input_errors) print_input_errors($input_errors); ?>
- <?php if (is_subsystem_dirty('interfaces')): ?><p>
- <?php print_info_box_np(sprintf(gettext("The %s configuration has been changed."), $wancfg['descr']) . "</p><p>" . gettext("You must apply the changes in order for them to take effect.") . "</p><p>" . gettext("Don't forget to adjust the DHCP Server range if needed after applying."));?></p><br />
- <?php endif; ?>
- <?php if ($savemsg) print_info_box($savemsg); ?>
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces">
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabs">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("General configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Enable"); ?></td>
- <td width="78%" class="vtable">
- <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable'] == true) echo "checked=\"checked\""; ?> onclick="show_allcfg(this);" />
- <strong><?=gettext("Enable Interface"); ?></strong>
- </td>
- </tr>
- </table>
- <div style="display:none;" id="allcfg">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="allcfg">
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="30" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br /><span class="vexpl"><?= gettext("Enter a description (name) for the interface here."); ?></span>
- </td>
- </tr>
- <tr>
- <td valign="middle" class="vncell"><strong><?=gettext("IPv4 Configuration Type"); ?></strong></td>
- <td class="vtable">
- <select name="type" onchange="updateType(this.value);" <?php echo $type_disabled; ?> class="formselect" id="type">
- <?php
- foreach ($types4 as $key => $opt) {
- echo "<option onclick=\"updateType('{$key}');\"";
- if ($key == $pconfig['type']) {
- echo " selected=\"selected\"";
- }
- echo " value=\"{$key}\" >" . htmlspecialchars($opt);
- echo "</option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td valign="middle" class="vncell"><strong><?=gettext("IPv6 Configuration Type"); ?></strong></td>
- <td class="vtable">
- <select name="type6" onchange="updateTypeSix(this.value);" <?php echo $type_disabled; ?> class="formselect" id="type6">
- <?php
- foreach ($types6 as $key => $opt) {
- echo "<option onclick=\"updateTypeSix('{$key}');\"";
- if ($key == $pconfig['type6']) {
- echo " selected=\"selected\"";
- }
- echo " value=\"{$key}\" >" . htmlspecialchars($opt);
- echo "</option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("MAC address"); ?></td>
- <td class="vtable">
- <input name="spoofmac" type="text" class="formfld unknown" id="spoofmac" size="30" value="<?=htmlspecialchars($pconfig['spoofmac']);?>" />
- <br />
- <?=gettext("This field can be used to modify (\"spoof\") the MAC " .
- "address of this interface"); ?><br />
- <?=gettext("Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx " .
- "or leave blank"); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("MTU"); ?></td>
- <td class="vtable">
- <input name="mtu" type="text" class="formfld unknown" id="mtu" size="8" value="<?=htmlspecialchars($pconfig['mtu']);?>" />
- <br />
- <?php
- print gettext("If you leave this field blank, the adapter's default MTU will " .
- "be used. This is typically 1500 bytes but can vary in some circumstances.");
- ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("MSS"); ?></td>
- <td class="vtable">
- <input name="mss" type="text" class="formfld unknown" id="mss" size="8" value="<?=htmlspecialchars($pconfig['mss']);?>" />
- <br />
- <?=gettext("If you enter a value in this field, then MSS clamping for " .
- "TCP connections to the value entered above minus 40 (TCP/IP " .
- "header size) will be in effect."); ?>
- </td>
- </tr>
- <?php
- if (count($mediaopts_list) > 0) {
- $mediaopt_from_config = $config['interfaces'][$if]['media'] . ' ' . $config['interfaces'][$if]['mediaopt'];
- echo "<tr>";
- echo '<td valign="top" class="vncell">' . gettext("Speed and duplex") . '</td>';
- echo '<td class="vtable">';
- echo '<div id="showadvmediabox"';
- if ($mediaopt_from_config != 'autoselect ' && $mediaopt_from_config != ' ') {
- echo " style='display:none'>";
- } else {
- echo '>';
- }
- echo '<input type="button" onclick="show_advanced_media()" value="' . gettext("Advanced") . '" /> - ' . gettext("Show advanced option");
- echo "</div>";
- echo '<div id="showmediaadv" ';
- if ($mediaopt_from_config == 'autoselect ' || $mediaopt_from_config == ' ') {
- echo "style='display:none'>";
- } else {
- echo '>';
- }
- echo '<select name="mediaopt" class="formselect" id="mediaopt">';
- print "<option value=\"\">Default (no preference, typically autoselect)</option>";
- print "<option value=\"\">------- Media Supported by this interface -------</option>";
- foreach ($mediaopts_list as $mediaopt) {
- if ($mediaopt != rtrim($mediaopt_from_config)) {
- print "<option value=\"$mediaopt\">" . gettext("$mediaopt") . "</option>";
- } else {
- print "<option value=\"$mediaopt\" selected=\"selected\">" . gettext("$mediaopt") . "</option>";
- }
- }
- echo '</select><br />';
- echo gettext("Here you can explicitly set speed and duplex mode for this interface. WARNING: You MUST leave this set to autoselect (automatically negotiate speed) unless the port this interface connects to has its speed and duplex forced.");
- echo '</div>';
- echo '</td>';
- echo '</tr>';
- }
- ?>
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
- <tr style="display:none;" id="none">
- <td style="display:none;"></td>
- </tr>
- <tr style="display:none;" id="staticv4">
- <td colspan="2" style="padding:0px;">
- <a name="gatewaysection"></a>
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="staticv4">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Static IPv4 configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("IPv4 address"); ?></td>
- <td width="78%" class="vtable">
- <input name="ipaddr" type="text" class="formfld unknown" id="ipaddr" size="20" value="<?=htmlspecialchars($pconfig['ipaddr']);?>" />
- /
- <select name="subnet" class="formselect" id="subnet">
- <?php
- for ($i = 32; $i > 0; $i--) {
- echo "<option value=\"{$i}\" ";
- if ($i == $pconfig['subnet']) {
- echo "selected=\"selected\"";
- }
- echo ">" . $i . "</option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv4 Upstream Gateway"); ?></td>
- <td width="78%" class="vtable">
- <select name="gateway" class="formselect" id="gateway">
- <option value="none" selected="selected"><?=gettext("None"); ?></option>
- <?php
- if (count($a_gateways) > 0) {
- foreach ($a_gateways as $gateway) {
- if (($gateway['interface'] == $if) && (is_ipaddrv4($gateway['gateway']))) {
- ?>
- <option value="<?=$gateway['name'];?>" <?php if ($gateway['name'] == $pconfig['gateway']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($gateway['name']) . " - " . htmlspecialchars($gateway['gateway']);?>
- </option>
- <?php
- }
- }
- }
- ?>
- </select>
- - or <strong><a onclick="show_add_gateway();" href="#gatewaysection"><?=gettext("add a new one."); ?></a></strong>
- <br />
- <div id='addgwbox'>
- <?=gettext("If this interface is an Internet connection, select an existing Gateway from the list or add a new one using the link above."); ?><br />
- <?=gettext("On local LANs the upstream gateway should be \"none\"."); ?>
- </div>
- <div id='notebox'>
- </div>
- <div id="status">
- </div>
- <div style="display:none" id="addgateway">
- <p>&nbsp;</p>
- <table border="1" class="addgatewaybox" summary="addgateway">
- <tr>
- <td>
- <table class="addgatewaybox" cellpadding="1" cellspacing="1" summary="addgateway">
- <tr>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2"><center><b><font color="white"><?=gettext("Add new gateway:"); ?></font></b></center></td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- </tr>
- <?php
- if ($if == "wan" || $if == "WAN") {
- $checked = " checked=\"checked\"";
- }
- ?>
- <tr>
- <td width="45%" align="right"><font color="white"><?=gettext("Default gateway:"); ?></font></td><td><input type="checkbox" id="defaultgw" name="defaultgw"<?=$checked?> /></td>
- </tr>
- <tr>
- <td align="right"><font color="white"><?=gettext("Gateway Name:"); ?></font></td><td><input id="name" name="name" value="<?=$wancfg['descr'] . "GW"?>" /></td>
- </tr>
- <tr>
- <td align="right"><font color="white"><?=gettext("Gateway IPv4:"); ?></font></td><td><input id="gatewayip" name="gatewayip" /></td>
- </tr>
- <tr>
- <td align="right"><font color="white"><?=gettext("Description:"); ?></font></td><td><input id="gatewaydescr" name="gatewaydescr" /></td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2">
- <center>
- <div id='savebuttondiv'>
- <input id="gwsave" type="button" value="<?=gettext("Save Gateway"); ?>" onclick='hide_add_gatewaysave();' />
- <input id="gwcancel" type="button" value="<?=gettext("Cancel"); ?>" onclick='hide_add_gateway();' />
- </div>
- </center>
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
- </table>
- </td>
- </tr>
- <tr style="display:none;" id="staticv6">
- <td colspan="2" style="padding:0px;">
- <a name="gatewayv6section"></a>
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="staticv6">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Static IPv6 configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("IPv6 address"); ?></td>
- <td width="78%" class="vtable">
- <input name="ipaddrv6" type="text" class="formfld unknown" id="ipaddrv6" size="28" value="<?=htmlspecialchars($pconfig['ipaddrv6']);?>" />
- /
- <select name="subnetv6" class="formselect" id="subnetv6">
- <?php
- for ($i = 128; $i > 0; $i--) {
- echo "<option value=\"{$i}\" ";
- if ($i == $pconfig['subnetv6']) {
- echo "selected=\"selected\"";
- }
- echo ">" . $i . "</option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Upstream Gateway"); ?></td>
- <td width="78%" class="vtable">
- <select name="gatewayv6" class="formselect" id="gatewayv6">
- <option value="none" selected="selected"><?=gettext("None"); ?></option>
- <?php
- if (count($a_gateways) > 0) {
- foreach ($a_gateways as $gateway) {
- if (($gateway['interface'] == $if) && (is_ipaddrv6($gateway['gateway']))) {
- ?>
- <option value="<?=$gateway['name'];?>" <?php if ($gateway['name'] == $pconfig['gatewayv6']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($gateway['name']) . " - " . htmlspecialchars($gateway['gateway']);?>
- </option>
- <?php
- }
- }
- }
- ?>
- </select>
- - or <strong><a onclick="show_add_gateway_v6();" href="#gatewayv6section"><?=gettext("add a new one."); ?></a></strong>
- <br />
- <div id='addgwboxv6'>
- <?=gettext("If this interface is an Internet connection, select an existing Gateway from the list or add a new one using the link above."); ?><br />
- <?=gettext("On local LANs the upstream gateway should be \"none\"."); ?>
- </div>
- <div id='noteboxv6'>
- </div>
- <div id="statusv6">
- </div>
- <div style="display:none" id="addgatewayv6">
- <p>&nbsp;</p>
- <table border="1" class="addgatewaybox" summary="addgatewayv6">
- <tr>
- <td>
- <table class="addgatewaybox" cellpadding="1" cellspacing="1" summary="addgatewayv6">
- <tr>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2"><center><b><font color="white"><?=gettext("Add new v6 gateway:"); ?></font></b></center></td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- </tr>
- <?php
- if ($if == "wan" || $if == "WAN") {
- $checked = " checked=\"checked\"";
- }
- ?>
- <tr>
- <td width="45%" align="right"><font color="white"><?=gettext("Default v6 gateway:"); ?></font></td><td><input type="checkbox" id="defaultgwv6" name="defaultgwv6"<?=$checked?> /></td>
- </tr>
- <tr>
- <td align="right"><font color="white"><?=gettext("Gateway Name IPv6:"); ?></font></td><td><input id="namev6" name="namev6" value="<?=$wancfg['descr'] . "GWv6"?>" /></td>
- </tr>
- <tr>
- <td align="right"><font color="white"><?=gettext("Gateway IPv6:"); ?></font></td><td><input id="gatewayipv6" name="gatewayipv6" /></td>
- </tr>
- <tr>
- <td align="right"><font color="white"><?=gettext("Description:"); ?></font></td><td><input id="gatewaydescrv6" name="gatewaydescrv6" /></td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2">
- <center>
- <div id='savebuttondivv6'>
- <input id="gwsavev6" type="button" value="<?=gettext("Save Gateway"); ?>" onclick='hide_add_gatewaysave_v6();' />
- <input id="gwcancelv6" type="button" value="<?=gettext("Cancel"); ?>" onclick='hide_add_gateway_v6();' />
- </div>
- </center>
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
- </table>
- </td>
- </tr>
- <tr style="display:none;" id="dhcp">
- <td colspan="2" style="padding: 0px;">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="dhcp">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("DHCP client configuration &nbsp; &nbsp; " .
- ' <input name="adv_dhcp_config_advanced" type="checkbox" id="adv_dhcp_config_advanced" value="" onclick="show_adv_dhcp_config(this)" /> ' .
- " Advanced &nbsp; &nbsp; " .
- ' <input name="adv_dhcp_config_file_override" type="checkbox" id="adv_dhcp_config_file_override" value="" onclick="show_adv_dhcp_config(this)" /> ' .
- " Config File Override &nbsp; &nbsp; "); ?>
- </td>
- </tr>
- <!-- Uncomment to expose DHCP+ in GUI
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Enable DHCP+"); ?></td>
- <td width="78%" class="vtable">
- <input name="dhcp_plus" type="checkbox" value="yes" <?php if ($pconfig['dhcp_plus'] == true) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable DHCP+L2TP or DHCP+PPTP."); ?></strong>
- <br />
- <?=gettext("Status changes on this interface will trigger reconfiguration (if necessary) of the associated PPTP/L2TP link."); ?>
- </td>
- </tr>
- -->
- <tr style='display:none' id="show_basic_dhcphostname">
- <td width="22%" valign="top" class="vncell"><?=gettext("Hostname"); ?></td>
- <td width="78%" class="vtable">
- <input name="dhcphostname" type="text" class="formfld unknown" id="dhcphostname" size="40" value="<?=htmlspecialchars($pconfig['dhcphostname']);?>" />
- <br />
- <?=gettext("The value in this field is sent as the DHCP client identifier " .
- "and hostname when requesting a DHCP lease. Some ISPs may require " .
- "this (for client identification)."); ?>
- </td>
- </tr>
- <tr style='display:none' id="show_basic_dhcpalias-address">
- <td width="22%" valign="top" class="vncell"><?=gettext("Alias IPv4 address"); ?></td>
- <td width="78%" class="vtable">
- <input name="alias-address" type="text" class="formfld unknown" id="alias-address" size="20" value="<?=htmlspecialchars($pconfig['alias-address']);?>" />
- <select name="alias-subnet" class="formselect" id="alias-subnet">
- <?php
- for ($i = 32; $i > 0; $i--) {
- echo "<option value=\"{$i}\" ";
- if ($i == $pconfig['alias-subnet']) {
- echo "selected=\"selected\"";
- }
- echo ">" . $i . "</option>";
- }
- ?>
- </select>
- <?=gettext("The value in this field is used as a fixed alias IPv4 address by the " .
- "DHCP client."); ?>
- </td>
- </tr>
- <tr style='display:none' id="show_basic_dhcprejectlease">
- <td width="22%" valign="top" class="vncell"><?=gettext("Reject Leases From"); ?></td>
- <td width="78%" class="vtable">
- <input name="dhcprejectfrom" type="text" class="formfld unknown" id="dhcprejectfrom" size="20" value="<?=htmlspecialchars($pconfig['dhcprejectfrom']);?>" />
- <br />
- <?=gettext("If there is a certain upstream DHCP server that should be ignored, place the IP address or subnet of the DHCP server to be ignored here."); ?>
- <?=gettext("This is useful for rejecting leases from cable modems that offer private IPs when they lose upstream sync."); ?>
- </td>
- </tr>
-
- <tr style='display:none' id="show_adv_dhcp_protocol_timing">
- <td width="22%" valign="top" class="vncell"><a target="_blank" href="http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;sektion=5#PROTOCOL_TIMING"><?=gettext("Protocol Timing"); ?></a></td>
- <td width="48%" class="vtable">
- Timeout: <input name="adv_dhcp_pt_timeout" type="text" class="formfld unknown" id="adv_dhcp_pt_timeout" size="2" value="<?=htmlspecialchars($pconfig['adv_dhcp_pt_timeout']);?>" onchange="customdhcpptcheckradiobuton(document.iform.adv_dhcp_pt_values, '');" />
- Retry: <input name="adv_dhcp_pt_retry" type="text" class="formfld unknown" id="adv_dhcp_pt_retry" size="2" value="<?=htmlspecialchars($pconfig['adv_dhcp_pt_retry']);?>" onchange="customdhcpptcheckradiobuton(document.iform.adv_dhcp_pt_values, '');" />
- Select Timeout: <input name="adv_dhcp_pt_select_timeout" type="text" class="formfld unknown" id="adv_dhcp_pt_select_timeout" size="2" value="<?=htmlspecialchars($pconfig['adv_dhcp_pt_select_timeout']);?>" onchange="customdhcpptcheckradiobuton(document.iform.adv_dhcp_pt_values, '');" />
-
- &nbsp; &nbsp; &nbsp; &nbsp;
- Presets: &nbsp;
- <input name="adv_dhcp_pt_values" type="radio" value="DHCP" id="customdhcpptdhcpdefaults" onclick="customdhcpptsetvalues(this, iform);" />FreeBSD Default &nbsp;
- <input name="adv_dhcp_pt_values" type="radio" value="Clear" id="customdhcpptclear" onclick="customdhcpptsetvalues(this, iform);" />Clear
-
- <br />
- Reboot: <input name="adv_dhcp_pt_reboot" type="text" class="formfld unknown" id="adv_dhcp_pt_reboot" size="2" value="<?=htmlspecialchars($pconfig['adv_dhcp_pt_reboot']);?>" onchange="customdhcpptcheckradiobuton(document.iform.adv_dhcp_pt_values, '');" />
- Backoff Cutoff: <input name="adv_dhcp_pt_backoff_cutoff" type="text" class="formfld unknown" id="adv_dhcp_pt_backoff_cutoff" size="2" value="<?=htmlspecialchars($pconfig['adv_dhcp_pt_backoff_cutoff']);?>" onchange="customdhcpptcheckradiobuton(document.iform.adv_dhcp_pt_values, '');" />
- Initial Interval: <input name="adv_dhcp_pt_initial_interval" type="text" class="formfld unknown" id="adv_dhcp_pt_initial_interval" size="2" value="<?=htmlspecialchars($pconfig['adv_dhcp_pt_initial_interval']);?>" onchange="customdhcpptcheckradiobuton(document.iform.adv_dhcp_pt_values, '');" />
-
- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
- <input name="adv_dhcp_pt_values" type="radio" value="pfSense" id="customdhcpptpfsensedefaults" onclick="customdhcpptsetvalues(this, iform);" />pfSense Default &nbsp;
- <input name="adv_dhcp_pt_values" type="radio" value="SavedCfg" checked="checked" id="customdhcpptsavedcfg" onclick="customdhcpptsetvalues(this, iform);" />Saved Cfg
-
- <br />
- <?=gettext("The values in these fields are DHCP protocol timings used when requesting a lease. <br /> "); ?>
-
- <script type="text/javascript">
- //<![CDATA[
- function customdhcpptcheckradiobuton(T, BUTTON) {
- for (var i = 0; i < T.length; i++) {
- T[i].checked = false;
- if (T[i].value == BUTTON) T[i].checked = true;
- }
- T.value = BUTTON;
- }
-
- function customdhcpptsetvalues(T, FORM) {
- // timeout, retry, select-timeout, reboot, backoff-cutoff, initial-interval
- if (T.value == "DHCP") customdhcpptsetvaluesnow(T, FORM, "60", "300", "0", "10", "120", "10");
- if (T.value == "pfSense") customdhcpptsetvaluesnow(T, FORM, "60", "15", "0", "", "", "1");
- if (T.value == "SavedCfg") customdhcpptsetvaluesnow(T, FORM, "<?=htmlspecialchars($pconfig['adv_dhcp_pt_timeout']);?>", "<?=htmlspecialchars($pconfig['adv_dhcp_pt_retry']);?>", "<?=htmlspecialchars($pconfig['adv_dhcp_pt_select_timeout']);?>", "<?=htmlspecialchars($pconfig['adv_dhcp_pt_reboot']);?>", "<?=htmlspecialchars($pconfig['adv_dhcp_pt_backoff_cutoff']);?>", "<?=htmlspecialchars($pconfig['adv_dhcp_pt_initial_interval']);?>");
- if (T.value == "Clear") customdhcpptsetvaluesnow(T, FORM, "", "", "", "", "", "");
- }
-
- function customdhcpptsetvaluesnow(T, FORM, timeout, retry, selecttimeout, reboot, backoffcutoff, initialinterval) {
- FORM.adv_dhcp_pt_timeout.value = timeout;
- FORM.adv_dhcp_pt_retry.value = retry;
- FORM.adv_dhcp_pt_select_timeout.value = selecttimeout;
- FORM.adv_dhcp_pt_reboot.value = reboot;
- FORM.adv_dhcp_pt_backoff_cutoff.value = backoffcutoff;
- FORM.adv_dhcp_pt_initial_interval.value = initialinterval;
-
- FORM.adv_dhcp_pt_values.value = T.value;
- }
-
- <!-- Set the adv_dhcp_pt_values radio button from saved config -->
- var RADIOBUTTON_VALUE = "<?=htmlspecialchars($pconfig['adv_dhcp_pt_values']);?>";
- if (RADIOBUTTON_VALUE == "") RADIOBUTTON_VALUE = "SavedCfg";
- customdhcpptcheckradiobuton(document.iform.adv_dhcp_pt_values, RADIOBUTTON_VALUE);
- //]]>
- </script>
- </td>
- </tr>
-
- <tr style='display:none' id="show_adv_dhcp_lease_requirements_and_requests">
- <td width="22%" valign="top" class="vncell"><?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Lease Requirements and Requests</a>"); ?></td>
- <td width="78%" class="vtable">
- <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Send</a> <a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp-options&amp;sektion=5\">Options</a>"); ?><br />
- <input name="adv_dhcp_send_options" type="text" class="formfld unknown" id="adv_dhcp_send_options" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp_send_options']);?>" />
- <br />
- <?=gettext("The values in this field are DHCP options to be sent when requesting a DHCP lease. [option declaration [, ...]] <br />" .
- "Value Substitutions: {interface}, {hostname}, {mac_addr_asciiCD}, {mac_addr_hexCD} <br />" .
- "Where C is U(pper) or L(ower) Case, and D is \" :-.\" Delimiter (space, colon, hyphen, or period) (omitted for none). <br />" .
- "Some ISPs may require certain options be or not be sent. "); ?>
- <hr/>
- <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Request</a> <a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp-options&amp;sektion=5\">Options</a>"); ?><br />
- <input name="adv_dhcp_request_options" type="text" class="formfld unknown" id="adv_dhcp_request_options" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp_request_options']);?>" />
- <br />
- <?=gettext("The values in this field are DHCP option 55 to be sent when requesting a DHCP lease. [option [, ...]] <br />" .
- "Some ISPs may require certain options be or not be requested. "); ?>
- <hr/>
- <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Require</a> <a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp-options&amp;sektion=5\">Options</a>"); ?><br />
- <input name="adv_dhcp_required_options" type="text" class="formfld unknown" id="adv_dhcp_required_options" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp_required_options']);?>" />
- <br />
- <?=gettext("The values in this field are DHCP options required by the client when requesting a DHCP lease. [option [, ...]] "); ?>
- </td>
- </tr>
-
- <tr style='display:none' id="show_adv_dhcp_option_modifiers">
- <td width="22%" valign="top" class="vncell"><?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp-options&amp;sektion=5\">Option</a> <a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;sektion=5#OPTION_MODIFIERS\">Modifiers</a>"); ?></td>
- <td width="78%" class="vtable">
- <input name="adv_dhcp_option_modifiers" type="text" class="formfld unknown" id="adv_dhcp_option_modifiers" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp_option_modifiers']);?>" />
- <br />
- <?=gettext("The values in this field are DHCP option modifiers applied to obtained DHCP lease. [modifier option declaration [, ...]] <br /> " .
- "modifiers: (default, supersede, prepend, append)"); ?>
- </td>
- </tr>
-
- <tr style='display:none' id="show_adv_dhcp_config_file_override">
- <td width="22%" valign="top" class="vncell"><?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;sektion=5\">Configuration File</a> Override"); ?></td>
- <td width="78%" class="vtable">
- <input name="adv_dhcp_config_file_override_path" type="text" class="formfld unknown" id="adv_dhcp_config_file_override_path" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp_config_file_override_path']);?>" />
- <br />
- <?=gettext("The value in this field is the full absolute path to a DHCP client configuration file. [/[dirname/[.../]]filename[.ext]] <br /> " .
- "Value Substitutions in Config File: {interface}, {hostname}, {mac_addr_asciiCD}, {mac_addr_hexCD} <br />" .
- "Where C is U(pper) or L(ower) Case, and D is \" :-.\" Delimiter (space, colon, hyphen, or period) (omitted for none). <br />" .
- "Some ISPs may require certain options be or not be sent. "); ?>
- </td>
- </tr>
-
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
-
- </table>
-
- <script type="text/javascript">
- //<![CDATA[
- function show_adv_dhcp_config(T) {
-
- if (T.checked) {
- T.value = "Selected";
- } else {
- T.value = "";
- }
-
- if (document.iform.adv_dhcp_config_file_override.checked) {
- show_hide_adv_dhcp('none', 'none', '');
- } else if (document.iform.adv_dhcp_config_advanced.checked) {
- show_hide_adv_dhcp('', '', 'none');
- } else {
- show_hide_adv_dhcp('', 'none', 'none');
- }
- }
-
- function show_hide_adv_dhcp(basic, advanced, override) {
-
- document.getElementById("show_basic_dhcphostname").style.display = basic;
- document.getElementById("show_basic_dhcpalias-address").style.display = basic;
- document.getElementById("show_basic_dhcprejectlease").style.display = basic;
-
- document.getElementById("show_adv_dhcp_protocol_timing").style.display = advanced;
- document.getElementById("show_adv_dhcp_lease_requirements_and_requests").style.display = advanced;
- document.getElementById("show_adv_dhcp_option_modifiers").style.display = advanced;
-
- document.getElementById("show_adv_dhcp_config_file_override").style.display = override;
- }
-
- <!-- Set the adv_dhcp_config_advanced checkbox from saved config -->
- if ("<?=htmlspecialchars($pconfig['adv_dhcp_config_advanced']);?>" == "Selected") {
- document.iform.adv_dhcp_config_advanced.checked = true;
- }
- show_adv_dhcp_config(document.iform.adv_dhcp_config_advanced);
-
- <!-- Set the adv_dhcp_config_file_override checkbox from saved config -->
- if ("<?=htmlspecialchars($pconfig['adv_dhcp_config_file_override']);?>" == "Selected") {
- document.iform.adv_dhcp_config_file_override.checked = true;
- }
- show_adv_dhcp_config(document.iform.adv_dhcp_config_file_override);
- //]]>
- </script>
-
- </td>
- </tr>
- <tr style="display:none;" id="dhcp6">
- <td colspan="2" style="padding: 0px;">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="dhcp6">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("DHCP6 client configuration &nbsp; &nbsp; " .
- ' <input name="adv_dhcp6_config_advanced" type="checkbox" id="adv_dhcp6_config_advanced" value="" onclick="show_adv_dhcp6_config(this)" /> ' .
- " Advanced &nbsp; &nbsp; " .
- ' <input name="adv_dhcp6_config_file_override" type="checkbox" id="adv_dhcp6_config_file_override" value="" onclick="show_adv_dhcp6_config(this)" /> ' .
- " Config File Override &nbsp; &nbsp; "); ?>
- </td>
- </tr>
- <!--- Leave commented out for now
- <tr style='display:none' id="basicdhcp6_show_dhcp6_duid">
- <td width="22%" valign="top" class="vncell"><?=gettext("DHCPv6 Unique Identifier (DUID)"); ?></td>
- <td width="78%" class="vtable">
- <input name="dhcp6-duid" type="text" class="formfld unknown" id="dhcp6-duid" size="40" value="<?=htmlspecialchars($pconfig['dhcp6-duid']);?>" />
- <br />
- <?=gettext("The value in this field is sent as the DHCPv6 client identifier " .
- "when requesting a DHCPv6 lease."); ?><br />
- <?php if (is_readable("/var/db/dhcp6c_duid")) {
- // $current_duid = file_get_contents("/var/db/dhcp6c_duid");
- }
- printf(gettext("The current DUID is: '%s'"), $current_duid);
- // hexdump -e '"%07.7_ax " 1/2 "%04x" " " 14/1 "%02x:" "\n"'
- ?>
- </td>
- </tr>
- -->
- <tr style='display:none' id="basicdhcp6_use_pppoeinterface">
- <td width="22%" valign="top" class="vncell"><?=gettext("Use IPv4 connectivity as parent interface"); ?></td>
- <td width="78%" class="vtable">
- <input name="dhcp6usev4iface" type="checkbox" id="dhcp6usev4iface" value="yes" <?php if ($pconfig['dhcp6usev4iface'] == true) echo "checked=\"checked\""; ?> />
- <?=gettext("Request a IPv6 prefix/information through the IPv4 connectivity link"); ?>
- </td>
- </tr>
- <tr style='display:none' id="basicdhcp6_show_dhcp6_prefix_only">
- <td width="22%" valign="top" class="vncell"><?=gettext("Request only an IPv6 prefix"); ?></td>
- <td width="78%" class="vtable">
- <input name="dhcp6prefixonly" type="checkbox" id="dhcp6prefixonly" value="yes" <?php if ($pconfig['dhcp6prefixonly'] == true) echo "checked=\"checked\""; ?> />
- <?=gettext("Only request an IPv6 prefix, do not request an IPv6 address"); ?>
- </td>
- </tr>
- <tr style='display:none' id="basicdhcp6_show_dhcp6_prefix_delegation_size">
- <td width="22%" valign="top" class="vncell"><?=gettext("DHCPv6 Prefix Delegation size"); ?></td>
- <td width="78%" class="vtable">
- <select name="dhcp6-ia-pd-len" class="formselect" id="dhcp6-ia-pd-len">
- <?php
- $sizes = array("none" => "None", 16 => "48", 12 => "52", 8 => "56", 4 => "60", 3 => "61", 2 => "62", 1 => "63", 0 => "64");
- foreach ($sizes as $bits => $length) {
- echo "<option value=\"{$bits}\" ";
- if (is_numeric($pconfig['dhcp6-ia-pd-len']) && ($bits == $pconfig['dhcp6-ia-pd-len'])) {
- echo "selected=\"selected\"";
- }
- echo ">" . $length . "</option>";
- }
- ?>
- </select>
- <br />
- <?=gettext("The value in this field is the delegated prefix length provided by the DHCPv6 server. Normally specified by the ISP."); ?>
- </td>
- </tr>
- <tr style='display:none' id="basicdhcp6_show_dhcp6_prefix_send_hint">
- <td width="22%" valign="top" class="vncell"><?=gettext("Send IPv6 prefix hint"); ?></td>
- <td width="78%" class="vtable">
- <input name="dhcp6-ia-pd-send-hint" type="checkbox" id="dhcp6-ia-pd-send-hint" value="yes" <?php if ($pconfig['dhcp6-ia-pd-send-hint'] == true) echo "checked=\"checked\""; ?> />
- <?=gettext("Send an IPv6 prefix hint to indicate the desired prefix size for delegation"); ?>
- </td>
- </tr>
-
- <tr style='display:none' id="show_adv_dhcp6_interface_statement">
- <td width="22%" valign="top" class="vncell">
- <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD+10.1-RELEASE+and+Ports#Interface_statement\">Interface Statement</a>"); ?>
- <br /><br />
- <input name="adv_dhcp6_interface_statement_information_only_enable" type="checkbox" id="adv_dhcp6_interface_statement_information_only_enable" value="" onclick="show_adv_dhcp6_config(this)" />
- <?=gettext("Information Only"); ?>
- </td>
- <td width="78%" class="vtable">
- <?=gettext("Send Options"); ?><br />
- <input name="adv_dhcp6_interface_statement_send_options" type="text" class="formfld unknown" id="adv_dhcp6_interface_statement_send_options" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp6_interface_statement_send_options']);?>" />
- <br />
- <?=gettext("The values in this field are DHCP send options to be sent when requesting a DHCP lease. [option declaration [, ...]] <br />" .
- "Value Substitutions: {interface}, {hostname}, {mac_addr_asciiCD}, {mac_addr_hexCD} <br />" .
- "Where C is U(pper) or L(ower) Case, and D is \" :-.\" Delimiter (space, colon, hyphen, or period) (omitted for none). <br />" .
- "Some DHCP services may require certain options be or not be sent. "); ?>
- <br />
- <br />
- <?=gettext("Request Options"); ?><br />
- <input name="adv_dhcp6_interface_statement_request_options" type="text" class="formfld unknown" id="adv_dhcp6_interface_statement_request_options" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp6_interface_statement_request_options']);?>" />
- <br />
- <?=gettext("The values in this field are DHCP request options to be sent when requesting a DHCP lease. [option [, ...]] <br />" .
- "Some DHCP services may require certain options be or not be requested. "); ?>
- <br />
- <br />
- <?=gettext("Script"); ?><br />
- <input name="adv_dhcp6_interface_statement_script" type="text" class="formfld unknown" id="adv_dhcp6_interface_statement_script" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp6_interface_statement_script']);?>" />
- <br />
- <?=gettext("The value in this field is the absolute path to a script invoked on certain conditions including when a reply message is received. <br />" .
- "[/[dirname/[.../]]filename[.ext]] "); ?>
- </td>
- </tr>
-
- <tr style='display:none' id="show_adv_dhcp6_id_assoc_statement">
- <td width="22%" valign="top" class="vncell">
- <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD+10.1-RELEASE+and+Ports#Identity_association_statement\">Identity Association Statement</a>"); ?>
- </td>
- <td width="78%" class="vtable">
-
- <input name="adv_dhcp6_id_assoc_statement_address_enable" type="checkbox" id="adv_dhcp6_id_assoc_statement_address_enable" value="" onclick="show_adv_dhcp6_config(this);" />
- <?=gettext("Non-Temporary Address Allocation"); ?>
- <div style='display:none' id="show_adv_dhcp6_id_assoc_statement_address">
- <?=gettext("id-assoc na"); ?>
- <?=gettext("<i>ID</i>"); ?>
- <input name="adv_dhcp6_id_assoc_statement_address_id" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_address_id" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_address_id']);?>" />
- <br />
- <?=gettext("Address"); ?>
- <?=gettext("<i>ipv6-address</i>"); ?>
- <input name="adv_dhcp6_id_assoc_statement_address" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_address" size="34" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_address']);?>" />
- <?=gettext("<i>pltime</i>"); ?>
- <input name="adv_dhcp6_id_assoc_statement_address_pltime" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_address_pltime" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_address_pltime']);?>" />
- <?=gettext("<i>vltime</i>"); ?>
- <input name="adv_dhcp6_id_assoc_statement_address_vltime" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_address_vltime" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_address_vltime']);?>" />
- </div>
- <hr/>
-
- <input name="adv_dhcp6_id_assoc_statement_prefix_enable" type="checkbox" id="adv_dhcp6_id_assoc_statement_prefix_enable" value="" onclick="show_adv_dhcp6_config(this)" />
- <?=gettext("Prefix Delegation"); ?>
- <div style='display:none' id="show_adv_dhcp6_id_assoc_statement_prefix">
- <?=gettext("id-assoc pd"); ?>
- <?=gettext("<i>ID</i>"); ?>
- <input name="adv_dhcp6_id_assoc_statement_prefix_id" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_prefix_id" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_prefix_id']);?>" />
- <br />
- <?=gettext("Prefix"); ?>
- <?=gettext("<i>ipv6-prefix</i>"); ?>
- <input name="adv_dhcp6_id_assoc_statement_prefix" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_prefix" size="37" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_prefix']);?>" />
- <?=gettext("<i>pltime</i>"); ?>
- <input name="adv_dhcp6_id_assoc_statement_prefix_pltime" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_prefix_pltime" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_prefix_pltime']);?>" />
- <?=gettext("<i>vltime</i>"); ?>
- <input name="adv_dhcp6_id_assoc_statement_prefix_vltime" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_prefix_vltime" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_prefix_vltime']);?>" />
- </div>
- </td>
- </tr>
-
- <tr style='display:none' id="show_adv_dhcp6_prefix_interface_statement">
- <td width="22%" valign="top" class="vncell">
- <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD+10.1-RELEASE+and+Ports#Prefix_interface_statement\">Prefix Interface Statement</a>"); ?>
- </td>
- <td width="78%" class="vtable">
- <?=gettext("Prefix Interface "); ?>
- <?=gettext("<i>sla-id</i>"); ?>
- <input name="adv_dhcp6_prefix_interface_statement_sla_id" type="text" class="formfld unknown" id="adv_dhcp6_prefix_interface_statement_sla_id" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_prefix_interface_statement_sla_id']);?>" />
- <?=gettext("<i>sla-len</i>"); ?>
- <input name="adv_dhcp6_prefix_interface_statement_sla_len" type="text" class="formfld unknown" id="adv_dhcp6_prefix_interface_statement_sla_len" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_prefix_interface_statement_sla_len']);?>" />
- </td>
- </tr>
-
- <tr style='display:none' id="show_adv_dhcp6_authentication_statement">
- <td width="22%" valign="top" class="vncell">
- <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD+10.1-RELEASE+and+Ports#Authentication_statement\">Authentication Statement</a>"); ?>
- </td>
- <td width="78%" class="vtable">
- <?=gettext("<i>authname</i>"); ?>
- <input name="adv_dhcp6_authentication_statement_authname" type="text" class="formfld unknown" id="adv_dhcp6_authentication_statement_authname" size="10" value="<?=htmlspecialchars($pconfig['adv_dhcp6_authentication_statement_authname']);?>" />
- <?=gettext("<i>protocol</i>"); ?>
- <input name="adv_dhcp6_authentication_statement_protocol" type="text" class="formfld unknown" id="adv_dhcp6_authentication_statement_protocol" size="6" value="<?=htmlspecialchars($pconfig['adv_dhcp6_authentication_statement_protocol']);?>" />
- <?=gettext("<i>algorithm</i>"); ?>
- <input name="adv_dhcp6_authentication_statement_algorithm" type="text" class="formfld unknown" id="adv_dhcp6_authentication_statement_algorithm" size="8" value="<?=htmlspecialchars($pconfig['adv_dhcp6_authentication_statement_algorithm']);?>" />
- <?=gettext("<i>rdm</i>"); ?>
- <input name="adv_dhcp6_authentication_statement_rdm" type="text" class="formfld unknown" id="adv_dhcp6_authentication_statement_rdm" size="9" value="<?=htmlspecialchars($pconfig['adv_dhcp6_authentication_statement_rdm']);?>" />
- </td>
- </tr>
-
- <tr style='display:none' id="show_adv_dhcp6_key_info_statement">
- <td width="22%" valign="top" class="vncell">
- <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD+10.1-RELEASE+and+Ports#Keyinfo_statement\">Keyinfo Statement</a>"); ?>
- </td>
- <td width="78%" class="vtable">
- <?=gettext("<i>keyname</i>"); ?>
- <input name="adv_dhcp6_key_info_statement_keyname" type="text" class="formfld unknown" id="adv_dhcp6_key_info_statement_keyname" size="27" value="<?=htmlspecialchars($pconfig['adv_dhcp6_key_info_statement_keyname']);?>" />
- <?=gettext("<i>realm</i>"); ?>
- <input name="adv_dhcp6_key_info_statement_realm" type="text" class="formfld unknown" id="adv_dhcp6_key_info_statement_realm" size="37" value="<?=htmlspecialchars($pconfig['adv_dhcp6_key_info_statement_realm']);?>" />
- <br />
- <?=gettext("<i>keyid</i>"); ?>
- <input name="adv_dhcp6_key_info_statement_keyid" type="text" class="formfld unknown" id="adv_dhcp6_key_info_statement_keyid" size="2" value="<?=htmlspecialchars($pconfig['adv_dhcp6_key_info_statement_keyid']);?>" />
- <?=gettext("<i>secret</i>"); ?>
- <input name="adv_dhcp6_key_info_statement_secret" type="text" class="formfld unknown" id="adv_dhcp6_key_info_statement_secret" size="36" value="<?=htmlspecialchars($pconfig['adv_dhcp6_key_info_statement_secret']);?>" />
- <?=gettext("<i>expire</i>"); ?>
- <input name="adv_dhcp6_key_info_statement_expire" type="text" class="formfld unknown" id="adv_dhcp6_key_info_statement_expire" size="15" value="<?=htmlspecialchars($pconfig['adv_dhcp6_key_info_statement_expire']);?>" />
- </td>
- </tr>
-
- <tr style='display:none' id="show_adv_dhcp6_config_file_override">
- <td width="22%" valign="top" class="vncell">
- <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD+10.1-RELEASE+and+Ports\">Configuration File</a> Override"); ?>
- </td>
- <td width="78%" class="vtable">
- <input name="adv_dhcp6_config_file_override_path" type="text" class="formfld unknown" id="adv_dhcp6_config_file_override_path" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp6_config_file_override_path']);?>" />
- <br />
- <?=gettext("The value in this field is the full absolute path to a DHCP client configuration file. [/[dirname/[.../]]filename[.ext]] <br /> " .
- "Value Substitutions in Config File: {interface}, {hostname}, {mac_addr_asciiCD}, {mac_addr_hexCD} <br />" .
- "Where C is U(pper) or L(ower) Case, and D is \" :-.\" Delimiter (space, colon, hyphen, or period) (omitted for none). <br />" .
- "Some ISPs may require certain options be or not be sent. "); ?>
- </td>
- </tr>
-
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
-
- </table>
-
- <script type="text/javascript">
- //<![CDATA[
- function show_adv_dhcp6_config(T) {
-
- if (T.checked) {
- T.value = "Selected";
- } else {
- T.value = "";
- }
-
- if (document.iform.adv_dhcp6_config_file_override.checked) {
- show_hide_adv_dhcp6('none', 'none', '');
- } else if (document.iform.adv_dhcp6_config_advanced.checked) {
- show_hide_adv_dhcp6('none', '', 'none');
- } else {
- show_hide_adv_dhcp6('', 'none', 'none');
- }
- }
-
- function show_hide_adv_dhcp6(basic, advanced, override) {
-
- document.getElementById("basicdhcp6_use_pppoeinterface").style.display = basic;
- document.getElementById("basicdhcp6_show_dhcp6_prefix_delegation_size").style.display = basic;
- document.getElementById("basicdhcp6_show_dhcp6_prefix_send_hint").style.display = basic;
- document.getElementById("basicdhcp6_show_dhcp6_prefix_only").style.display = basic;
-
- document.getElementById("show_adv_dhcp6_interface_statement").style.display = advanced;
- document.getElementById("show_adv_dhcp6_id_assoc_statement").style.display = advanced;
-
- document.getElementById("show_adv_dhcp6_id_assoc_statement_address").style.display = 'none';
- if (document.iform.adv_dhcp6_id_assoc_statement_address_enable.checked) {
- document.getElementById("show_adv_dhcp6_id_assoc_statement_address").style.display = advanced;
- }
-
- document.getElementById("show_adv_dhcp6_id_assoc_statement_prefix").style.display = 'none';
- document.getElementById("show_adv_dhcp6_prefix_interface_statement").style.display = 'none';
- if (document.iform.adv_dhcp6_id_assoc_statement_prefix_enable.checked) {
- document.getElementById("show_adv_dhcp6_id_assoc_statement_prefix").style.display = advanced;
- document.getElementById("show_adv_dhcp6_prefix_interface_statement").style.display = advanced;
- }
-
- document.getElementById("show_adv_dhcp6_authentication_statement").style.display = advanced;
- document.getElementById("show_adv_dhcp6_key_info_statement").style.display = advanced;
-
- document.getElementById("show_adv_dhcp6_config_file_override").style.display = override;
- }
-
- <!-- Set the adv_dhcp6_config_advanced checkbox from saved config -->
- if ("<?=htmlspecialchars($pconfig['adv_dhcp6_config_advanced']);?>" == "Selected") {
- document.iform.adv_dhcp6_config_advanced.checked = true;
- }
- show_adv_dhcp6_config(document.iform.adv_dhcp6_config_advanced);
-
- <!-- Set the adv_dhcp6_config_file_override checkbox from saved config -->
- if ("<?=htmlspecialchars($pconfig['adv_dhcp6_config_file_override']);?>" == "Selected") {
- document.iform.adv_dhcp6_config_file_override.checked = true;
- }
- show_adv_dhcp6_config(document.iform.adv_dhcp6_config_file_override);
-
- <!-- Set the adv_dhcp6_interface_statement_information_only_enable checkbox from saved config -->
- if ("<?=htmlspecialchars($pconfig['adv_dhcp6_interface_statement_information_only_enable']);?>" == "Selected") {
- document.iform.adv_dhcp6_interface_statement_information_only_enable.checked = true;
- }
- show_adv_dhcp6_config(document.iform.adv_dhcp6_interface_statement_information_only_enable);
-
- <!-- Set the adv_dhcp6_id_assoc_statement_address_enable checkbox from saved config -->
- if ("<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_address_enable']);?>" == "Selected") {
- document.iform.adv_dhcp6_id_assoc_statement_address_enable.checked = true;
- }
- show_adv_dhcp6_config(document.iform.adv_dhcp6_id_assoc_statement_address_enable);
-
- <!-- Set the adv_dhcp6_id_assoc_statement_prefix_enable checkbox from saved config -->
- if ("<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_prefix_enable']);?>" == "Selected") {
- document.iform.adv_dhcp6_id_assoc_statement_prefix_enable.checked = true;
- }
- show_adv_dhcp6_config(document.iform.adv_dhcp6_id_assoc_statement_prefix_enable);
- //]]>
- </script>
-
- </td>
- </tr>
- <tr style="display:none;" id="_6rd">
- <td colspan="2" style="padding: 0px;">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="6rd">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("6RD Configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("6RD prefix"); ?></td>
- <td width="78%" class="vtable">
- <input name="prefix-6rd" type="text" class="formfld unknown" id="prefix-6rd" size="40" value="<?=htmlspecialchars($pconfig['prefix-6rd']);?>" />
- <br />
- <?=gettext("The value in this field is the 6RD IPv6 prefix assigned by your ISP. e.g. '2001:db8::/32'") ?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("6RD Border Relay"); ?></td>
- <td width="78%" class="vtable">
- <input name="gateway-6rd" type="text" class="formfld unknown" id="gateway-6rd" size="40" value="<?=htmlspecialchars($pconfig['gateway-6rd']);?>" />
- <br />
- <?=gettext("The value in this field is 6RD IPv4 gateway address assigned by your ISP") ?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("6RD IPv4 Prefix length"); ?></td>
- <td width="78%" class="vtable">
- <select name="prefix-6rd-v4plen" class="formselect" id="prefix-6rd-v4plen">
- <?php
- for ($i = 0; $i < 32; $i++) {
- echo "<option value=\"{$i}\" ";
- if (is_numeric($pconfig['prefix-6rd-v4plen']) && ($i == $pconfig['prefix-6rd-v4plen'])) {
- echo "selected=\"selected\"";
- }
- echo ">" . $i . " bits</option>";
- }
- ?>
- </select>
- <br />
- <?=gettext("The value in this field is the 6RD IPv4 prefix length. Normally specified by the ISP. A value of 0 means we embed the entire IPv4 address in the 6RD prefix."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
- </table>
- </td>
- </tr>
- <tr style="display:none;" id="track6">
- <td colspan="2" style="padding: 0px;">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="track6">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Track IPv6 Interface"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Interface"); ?></td>
- <td width="78%" class="vtable">
- <select name="track6-interface" id='track6-interface' class='formselect' onchange="update_track6_prefix();">
- <?php
- $interfaces = get_configured_interface_with_descr(false, true);
- $dynv6ifs = array();
- foreach ($interfaces as $iface => $ifacename) {
- switch ($config['interfaces'][$iface]['ipaddrv6']) {
- case "6to4":
- case "6rd":
- case "dhcp6":
- $dynv6ifs[$iface] = array(
- 'name' => $ifacename,
- 'ipv6_num_prefix_ids' => pow(2, calculate_ipv6_delegation_length($iface)) - 1
- );
- break;
- default:
- continue;
- }
- }
- $rowIndex = 0;
- foreach ($dynv6ifs as $iface => $ifacedata) {
- $rowIndex++;
- echo "<option value=\"{$iface}\"";
- if ($iface == $pconfig['track6-interface']) {
- echo " selected=\"selected\"";
- }
- echo ">" . htmlspecialchars($ifacedata['name']) . "</option>";
- }
- if ($rowIndex == 0) {
- echo "<option></option>";
- }
- ?>
- </select> <br />
- <?php
- foreach ($dynv6ifs as $iface => $ifacedata) {
- echo "<input type=\"hidden\" name=\"ipv6-num-prefix-ids-{$iface}\" id=\"ipv6-num-prefix-ids-{$iface}\" value=\"{$ifacedata['ipv6_num_prefix_ids']}\">\n";
- }
- ?>
- <br />
- <?=gettext("This selects the dynamic IPv6 WAN interface to track for configuration") ?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Prefix ID"); ?></td>
- <td width="78%" class="vtable">
- <?php
- if ($pconfig['track6-prefix-id'] == "") {
- $pconfig['track6-prefix-id'] = 0;
- }
- $track6_prefix_id_hex = sprintf("%x", $pconfig['track6-prefix-id']);
- ?>
- <input name="track6-prefix-id--hex" type="text" class="formfld unknown" id="track6-prefix-id--hex" size="8" value="<?= $track6_prefix_id_hex ?>" />
- <span id="track6-prefix-id-range"></span>
- <input type="hidden" id="track6-prefix-id-max" value="0"></input>
- <br />
- <?= gettext("The value in this field is the (Delegated) IPv6 prefix ID. This determines the configurable network ID based on the dynamic IPv6 connection"); ?>
- <br />
- <?= gettext("default value is 0."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
- </table>
- </td>
- </tr>
- <tr style="display:none;" id="ppp">
- <td colspan="2" style="padding: 0px;">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="ppp">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("PPP configuration"); ?></td>
- </tr>
- <tr id="ppp_provider">
- <td width="22%" valign="top" class="vncell"><?=gettext("Service Provider"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="0" cellspacing="0" summary="service provider">
- <tr id="trcountry">
- <td><?=gettext("Country:"); ?> &nbsp;&nbsp;</td>
- <td>
- <select class="formselect" name="country" id="country" onchange="providers_list()">
- <option></option>
- </select>
- </td>
- </tr>
- <tr id="trprovider" style="display:none">
- <td><?=gettext("Provider:"); ?> &nbsp;&nbsp;</td>
- <td>
- <select class="formselect" name="provider_list" id="provider_list" onchange="providerplan_list()">
- <option></option>
- </select>
- </td>
- </tr>
- <tr id="trproviderplan" style="display:none">
- <td><?=gettext("Plan:"); ?> &nbsp;&nbsp;</td>
- <td>
- <select class="formselect" name="providerplan" id="providerplan" onchange="prefill_provider()">
- <option></option>
- </select>
- </td>
- </tr>
- </table>
- <br /><span class="vexpl"><?=gettext("Select to fill in data for your service provider."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Username"); ?></td>
- <td width="78%" class="vtable">
- <input name="ppp_username" type="text" class="formfld user" id="ppp_username" size="20" value="<?=htmlspecialchars($pconfig['ppp_username']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Password"); ?></td>
- <td width="78%" class="vtable">
- <input name="ppp_password" type="password" class="formfld pwd" id="ppp_password" size="20" value="<?=htmlspecialchars($pconfig['ppp_password']);?>" />
- </td>
- </tr>
- <tr id="phone_num">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Phone Number"); ?></td>
- <td width="78%" class="vtable">
- <input name="phone" type="text" class="formfld unknown" id="phone" size="12" value="<?=htmlspecialchars($pconfig['phone']);?>" />
- </td>
- </tr>
- <tr id="apn_">
- <td width="22%" valign="top" class="vncell"><?=gettext("Access Point Name (APN)"); ?></td>
- <td width="78%" class="vtable">
- <input name="apn" type="text" class="formfld unknown" id="apn" size="40" value="<?=htmlspecialchars($pconfig['apn']);?>" />
- </td>
- </tr>
- <tr id="interface" >
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Modem Port"); ?></td>
- <td width="78%" class="vtable">
- <select name="port" id="port" class="formselect">
- <?php
- $portlist = glob("/dev/cua*");
- $modems = glob("/dev/modem*");
- $portlist = array_merge($portlist, $modems);
- $rowIndex = 0;
- foreach ($portlist as $port) {
- if (preg_match("/\.(lock|init)$/", $port)) {
- continue;
- }
- $rowIndex++;
- echo "<option value=\"".trim($port)."\"";
- if ($pconfig['port'] == $port) {
- echo " selected=\"selected\"";
- }
- echo ">{$port}</option>";
- }
- if ($rowIndex == 0) {
- echo "<option></option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Advanced PPP"); ?></td>
- <?php if (isset($pconfig['pppid'])): ?>
- <td width="78%" class="vtable">
- <a href="/interfaces_ppps_edit.php?id=<?=htmlspecialchars($pconfig['pppid']);?>" class="navlnk"><?=gettext("Click here"); ?> </a>
- <?=gettext("to edit PPP configuration."); ?>
- </td>
- <?php else: ?>
- <td width="78%" class="vtable">
- <a href="/interfaces_ppps_edit.php" class="navlnk"><?=gettext("Click here"); ?> </a>
- <?=gettext("to create a PPP configuration."); ?>
- </td>
- <?php endif; ?>
- </tr>
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
- </table>
- </td>
- </tr>
- <tr style="display:none;" id="pppoe">
- <td colspan="2" style="padding:0px;">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="pppoe">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("PPPoE configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Username"); ?></td>
- <td width="78%" class="vtable">
- <input name="pppoe_username" type="text" class="formfld user" id="pppoe_username" size="20" value="<?=htmlspecialchars($pconfig['pppoe_username']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Password"); ?></td>
- <td width="78%" class="vtable">
- <input name="pppoe_password" type="password" class="formfld pwd" id="pppoe_password" size="20" value="<?=htmlspecialchars($pconfig['pppoe_password']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Service name"); ?></td>
- <td width="78%" class="vtable"><input name="provider" type="text" class="formfld unknown" id="provider" size="20" value="<?=htmlspecialchars($pconfig['provider']);?>" />
- <br /> <span class="vexpl"><?=gettext("Hint: this field can usually be left empty"); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Dial on demand"); ?></td>
- <td width="78%" class="vtable">
- <input name="pppoe_dialondemand" type="checkbox" id="pppoe_dialondemand" value="enable" <?php if ($pconfig['pppoe_dialondemand']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable Dial-On-Demand mode"); ?></strong><br />
- <?=gettext("This option causes the interface to operate in dial-on-demand mode, allowing you to have a "); ?><i><?=gettext("virtual full time"); ?></i> <?=gettext("connection. The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Idle timeout"); ?></td>
- <td width="78%" class="vtable">
- <input name="pppoe_idletimeout" type="text" class="formfld unknown" id="pppoe_idletimeout" size="8" value="<?=htmlspecialchars($pconfig['pppoe_idletimeout']);?>" /> <?=gettext("seconds"); ?><br /><?=gettext("If no qualifying outgoing packets are transmitted for the specified number of seconds, the connection is brought down. An idle timeout of zero disables this feature."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Periodic reset");?></td>
- <td width="78%" class="vtable">
- <table id="presetwrap" cellspacing="0" cellpadding="0" width="100%" summary="periodic reset">
- <tr>
- <td align="left" valign="top">
- <p style="margin: 4px; padding: 4px 0 4px 0; width: 94%;">
- <select style="vertical-align:top" id="reset_type" name="pppoe-reset-type" class="formselect" onchange="show_reset_settings(this.value);">
- <option value=""><?=gettext("Disabled"); ?></option>
- <option value="custom" <?php if ($pconfig['pppoe-reset-type'] == "custom") echo "selected=\"selected\""; ?>><?=gettext("Custom"); ?></option>
- <option value="preset" <?php if ($pconfig['pppoe-reset-type'] == "preset") echo "selected=\"selected\""; ?>><?=gettext("Pre-Set"); ?></option>
- </select> <?=gettext("Select a reset timing type"); ?>
- </p>
- <?php if ($pconfig['pppoe_pr_custom']): ?>
- <p style="margin: 2px; padding: 4px; width: 94%;" id="pppoecustomwrap">
- <?php else: ?>
- <p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoecustomwrap">
- <?php endif; ?>
- <input type="text" name="pppoe_resethour" class="fd_incremental_inp_range_0_23 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resethour" value="<?= htmlspecialchars($pconfig['pppoe_resethour']); ?>" size="3" />
- <?=gettext("hour (0-23)"); ?><br />
- <input type="text" name="pppoe_resetminute" class="fd_incremental_inp_range_0_59 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resetminute" value="<?= htmlspecialchars($pconfig['pppoe_resetminute']); ?>" size="3" />
- <?=gettext("minute (0-59)"); ?><br />
- <input name="pppoe_resetdate" type="text" class="w8em format-m-d-y highlight-days-67" id="pppoe_resetdate" maxlength="10" size="10" value="<?=htmlspecialchars($pconfig['pppoe_resetdate']);?>" />
- <?=gettext("reset at a specific date (mm/dd/yyyy)"); ?>
- <br />&nbsp;<br />
- <span class="red"><strong><?=gettext("Note:"); ?> </strong></span>
- <?=gettext("If you leave the date field empty, the reset will be executed each day at the time you did specify using the minutes and hour field."); ?>
- </p>
- <?php if ($pconfig['pppoe_pr_preset']): ?>
- <p style="margin: 2px; padding: 4px; width: 94%;" id="pppoepresetwrap">
- <?php else: ?>
- <p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoepresetwrap">
- <?php endif; ?>
- <input name="pppoe_pr_preset_val" type="radio" id="pppoe_monthly" value="monthly" <?php if ($pconfig['pppoe_monthly']) echo "checked=\"checked\""; ?> />
- <?=gettext("reset at each month ('0 0 1 * *')"); ?>
- <br />
- <input name="pppoe_pr_preset_val" type="radio" id="pppoe_weekly" value="weekly" <?php if ($pconfig['pppoe_weekly']) echo "checked=\"checked\""; ?> />
- <?=gettext("reset at each week ('0 0 * * 0')"); ?>
- <br />
- <input name="pppoe_pr_preset_val" type="radio" id="pppoe_daily" value="daily" <?php if ($pconfig['pppoe_daily']) echo "checked=\"checked\""; ?> />
- <?=gettext("reset at each day ('0 0 * * *')"); ?>
- <br />
- <input name="pppoe_pr_preset_val" type="radio" id="pppoe_hourly" value="hourly" <?php if ($pconfig['pppoe_hourly']) echo "checked=\"checked\""; ?> />
- <?=gettext("reset at each hour ('0 * * * *')"); ?>
- </p>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Advanced and MLPPP"); ?></td>
- <?php if (isset($pconfig['pppid'])): ?>
- <td width="78%" class="vtable">
- <a href="/interfaces_ppps_edit.php?id=<?=htmlspecialchars($pconfig['pppid']);?>" class="navlnk"><?=gettext("Click here"); ?> </a>
- <?=gettext("for additional PPPoE configuration options. Save first if you made changes."); ?>
- </td>
- <?php else: ?>
- <td width="78%" class="vtable">
- <a href="/interfaces_ppps_edit.php" class="navlnk"><?=gettext("Click here"); ?> </a>
- <?=gettext("for advanced PPPoE configuration options and MLPPP configuration."); ?>
- </td>
- <?php endif; ?>
- </tr>
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
- </table>
- </td>
- </tr>
- <tr style="display:none;" id="pptp">
- <td colspan="2" style="padding:0px;">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="pptp">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("PPTP/L2TP configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Username"); ?></td>
- <td width="78%" class="vtable">
- <input name="pptp_username" type="text" class="formfld user" id="pptp_username" size="20" value="<?=htmlspecialchars($pconfig['pptp_username']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Password"); ?></td>
- <td width="78%" class="vtable">
- <input name="pptp_password" type="password" class="formfld pwd" id="pptp_password" size="20" value="<?=htmlspecialchars($pconfig['pptp_password']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Local IP address"); ?></td>
- <td width="78%" class="vtable">
- <input name="pptp_local" type="text" class="formfld unknown" id="pptp_local" size="20" value="<?=htmlspecialchars($pconfig['pptp_local'][0]);?>" />
- /
- <select name="pptp_subnet" class="formselect" id="pptp_subnet">
- <?php for ($i = 31; $i > 0; $i--): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['pptp_subnet'][0]) echo "selected=\"selected\""; ?>>
- <?=$i;?>
- </option>
- <?php endfor; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Remote IP address"); ?></td>
- <td width="78%" class="vtable">
- <input name="pptp_remote" type="text" class="formfld unknown" id="pptp_remote" size="20" value="<?=htmlspecialchars($pconfig['pptp_remote'][0]);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Dial on demand"); ?></td>
- <td width="78%" class="vtable">
- <input name="pptp_dialondemand" type="checkbox" id="pptp_dialondemand" value="enable" <?php if ($pconfig['pptp_dialondemand']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable Dial-On-Demand mode"); ?></strong><br />
- <?=gettext("This option causes the interface to operate in dial-on-demand mode, allowing you to have a"); ?> <i><?=gettext("virtual full time"); ?></i> <?=gettext("connection. The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Idle timeout"); ?></td>
- <td width="78%" class="vtable">
- <input name="pptp_idletimeout" type="text" class="formfld unknown" id="pptp_idletimeout" size="8" value="<?=htmlspecialchars($pconfig['pptp_idletimeout']);?>" /> <?=gettext("seconds"); ?><br /><?=gettext("If no qualifying outgoing packets are transmitted for the specified number of seconds, the connection is brought down. An idle timeout of zero disables this feature."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Advanced"); ?></td>
- <?php if (isset($pconfig['pppid'])): ?>
- <td width="78%" class="vtable">
- <a href="/interfaces_ppps_edit.php?id=<?=htmlspecialchars($pconfig['pppid']);?>" class="navlnk"><?=gettext("Click here");?></a>
- <?=gettext("for additional PPTP and L2TP configuration options. Save first if you made changes.");?>
- </td>
- <?php else: ?>
- <td width="78%" class="vtable">
- <a href="/interfaces_ppps_edit.php" class="navlnk"><?=gettext("Click here");?></a>
- <?=gettext("for advanced PPTP and L2TP configuration options");?>.
- </td>
- <?php endif; ?>
- </tr>
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
- </table>
- </td>
- </tr>
- <?php
- /* Wireless interface? */
- if (isset($wancfg['wireless'])):
- ?>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Common wireless configuration - Settings apply to all wireless networks on"); ?> <?=$wlanbaseif;?>.</td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Persist common settings");?></td>
- <td class="vtable">
- <input name="persistcommonwireless" type="checkbox" value="yes" class="formfld" id="persistcommonwireless" <?php if ($pconfig['persistcommonwireless']) echo "checked=\"checked\"";?> />
- <br /><?=gettext("Enabling this preserves the common wireless configuration through interface deletions and reassignments.");?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Standard"); ?></td>
- <td class="vtable">
- <select name="standard" class="formselect" id="standard">
- <?php
- $rowIndex = 0;
- echo "<option ";
- if ($pconfig['standard'] == "auto") {
- echo "selected=\"selected\" ";
- }
- echo "value=\"auto\">auto</option>\n";
- foreach ($wl_modes as $wl_standard => $wl_channels) {
- $rowIndex++;
- echo "<option ";
- if ($pconfig['standard'] == "$wl_standard") {
- echo "selected=\"selected\" ";
- }
- if ($pconfig['standard'] == "") {
- if ($wl_standard == "11ng") {
- echo "selected=\"selected\" ";
- }
- }
- echo "value=\"$wl_standard\">802.$wl_standard</option>\n";
- }
- if ($rowIndex == 0) {
- echo "<option></option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <?php if (isset($wl_modes['11g'])): ?>
- <tr>
- <td valign="top" class="vncellreq">802.11g OFDM <?=gettext("Protection Mode"); ?></td>
- <td class="vtable">
- <select name="protmode" class="formselect" id="protmode">
- <option <?php if ($pconfig['protmode'] == 'off') echo "selected=\"selected\"";?> value="off"><?=gettext("Protection mode off"); ?></option>
- <option <?php if ($pconfig['protmode'] == 'cts') echo "selected=\"selected\"";?> value="cts"><?=gettext("Protection mode CTS to self"); ?></option>
- <option <?php if ($pconfig['protmode'] == 'rtscts') echo "selected=\"selected\"";?> value="rtscts"><?=gettext("Protection mode RTS and CTS"); ?></option>
- </select>
- <br />
- <?=gettext("For IEEE 802.11g, use the specified technique for protecting OFDM frames in a mixed 11b/11g network."); ?>
- <br />
- </td>
- </tr>
- <?php else: ?>
- <input name="protmode" type="hidden" id="protmode" value="off" />
- <?php endif; ?>
- <?php /* txpower is disabled because of issues with it.
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Transmit power"); ?></td>
- <td class="vtable">
- <select name="txpower" class="formselect" id="txpower">
- <?
- for ($x = 99; $x > 0; $x--) {
- if ($pconfig["txpower"] == $x) {
- $SELECTED = " selected=\"selected\"";
- } else {
- $SELECTED = "";
- }
- echo "<option {$SELECTED}>{$x}</option>\n";
- }
- ?>
- </select><br />
- <?=gettext("Note: Typically only a few discreet power settings are available and the driver will use the setting closest to the specified value. Not all adapters support changing the transmit power setting."); ?>
- </td>
- </tr>*/
- ?>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Channel"); ?></td>
- <td class="vtable">
- <select name="channel" class="formselect" id="channel">
- <option <?php if ($pconfig['channel'] == 0) echo "selected=\"selected\""; ?> value="0"><?=gettext("Auto"); ?></option>
- <?php
- foreach ($wl_modes as $wl_standard => $wl_channels) {
- if ($wl_standard == "11g") {
- $wl_standard = "11b/g";
- } else if ($wl_standard == "11ng") {
- $wl_standard = "11b/g/n";
- } else if ($wl_standard == "11na") {
- $wl_standard = "11a/n";
- }
- foreach ($wl_channels as $wl_channel) {
- echo "<option ";
- if ($pconfig['channel'] == "$wl_channel") {
- echo "selected=\"selected\" ";
- }
- echo "value=\"$wl_channel\">$wl_standard - $wl_channel";
- if (isset($wl_chaninfo[$wl_channel])) {
- echo " ({$wl_chaninfo[$wl_channel][1]} @ {$wl_chaninfo[$wl_channel][2]} / {$wl_chaninfo[$wl_channel][3]})";
- }
- echo "</option>\n";
- }
- }
- ?>
- </select>
- <br />
- <?=gettext("Legend: wireless standards - channel # (frequency @ max TX power / TX power allowed in reg. domain)"); ?>
- <br />
- <?=gettext("Note: Not all channels may be supported by your card. Auto may override the wireless standard selected above."); ?>
- </td>
- </tr>
- <?php if (isset($wl_sysctl["{$wl_sysctl_prefix}.diversity"]) || isset($wl_sysctl["{$wl_sysctl_prefix}.txantenna"]) || isset($wl_sysctl["{$wl_sysctl_prefix}.rxantenna"])): ?>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Antenna settings"); ?></td>
- <td class="vtable">
- <table border="0" cellpadding="0" cellspacing="0" summary="antenna settings">
- <tr>
- <?php if (isset($wl_sysctl["{$wl_sysctl_prefix}.diversity"])): ?>
- <td>
- <?=gettext("Diversity"); ?><br />
- <select name="diversity" class="formselect" id="diversity">
- <option <?php if (!isset($pconfig['diversity'])) echo "selected=\"selected\""; ?> value=""><?=gettext("Default"); ?></option>
- <option <?php if ($pconfig['diversity'] === '0') echo "selected=\"selected\""; ?> value="0"><?=gettext("Off"); ?></option>
- <option <?php if ($pconfig['diversity'] === '1') echo "selected=\"selected\""; ?> value="1"><?=gettext("On"); ?></option>
- </select>
- </td>
- <td>&nbsp;&nbsp;</td>
- <?php endif; ?>
- <?php if (isset($wl_sysctl["{$wl_sysctl_prefix}.txantenna"])): ?>
- <td>
- <?=gettext("Transmit antenna"); ?><br />
- <select name="txantenna" class="formselect" id="txantenna">
- <option <?php if (!isset($pconfig['txantenna'])) echo "selected=\"selected\""; ?> value=""><?=gettext("Default"); ?></option>
- <option <?php if ($pconfig['txantenna'] === '0') echo "selected=\"selected\""; ?> value="0"><?=gettext("Auto"); ?></option>
- <option <?php if ($pconfig['txantenna'] === '1') echo "selected=\"selected\""; ?> value="1"><?=gettext("#1"); ?></option>
- <option <?php if ($pconfig['txantenna'] === '2') echo "selected=\"selected\""; ?> value="2"><?=gettext("#2"); ?></option>
- </select>
- </td>
- <td>&nbsp;&nbsp;</td>
- <?php endif; ?>
- <?php if (isset($wl_sysctl["{$wl_sysctl_prefix}.rxantenna"])): ?>
- <td>
- <?=gettext("Receive antenna"); ?><br />
- <select name="rxantenna" class="formselect" id="rxantenna">
- <option <?php if (!isset($pconfig['rxantenna'])) echo "selected=\"selected\""; ?> value=""><?=gettext("Default"); ?></option>
- <option <?php if ($pconfig['rxantenna'] === '0') echo "selected=\"selected\""; ?> value="0"><?=gettext("Auto"); ?></option>
- <option <?php if ($pconfig['rxantenna'] === '1') echo "selected=\"selected\""; ?> value="1"><?=gettext("#1"); ?></option>
- <option <?php if ($pconfig['rxantenna'] === '2') echo "selected=\"selected\""; ?> value="2"><?=gettext("#2"); ?></option>
- </select>
- </td>
- <?php endif; ?>
- </tr>
- </table>
- <br />
- <?=gettext("Note: The antenna numbers do not always match up with the labels on the card."); ?>
- </td>
- </tr>
- <?php endif; ?>
- <?php if (isset($wl_sysctl["{$wl_sysctl_prefix}.slottime"]) && isset($wl_sysctl["{$wl_sysctl_prefix}.acktimeout"]) && isset($wl_sysctl["{$wl_sysctl_prefix}.ctstimeout"])): ?>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Distance setting"); ?></td>
- <td class="vtable">
- <input name="distance" type="text" class="formfld unknown" id="distance" size="5" value="<?=htmlspecialchars($pconfig['distance']);?>" />
- <br />
- <?=gettext("Note: This field can be used to tune ACK/CTS timers to fit the distance between AP and Client"); ?><br />
- <?=gettext("(measured in meters)"); ?>
- </td>
- </tr>
- <?php endif; ?>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Regulatory settings"); ?></td>
- <td class="vtable">
- <?=gettext("Regulatory domain"); ?><br />
- <select name="regdomain" class="formselect" id="regdomain">
- <option <?php if (empty($pconfig['regdomain'])) echo "selected=\"selected\""; ?> value=""><?=gettext("Default"); ?></option>
- <?php
- foreach ($wl_regdomains as $wl_regdomain_key => $wl_regdomain) {
- echo "<option ";
- if ($pconfig['regdomain'] == $wl_regdomains_attr[$wl_regdomain_key]['ID']) {
- echo "selected=\"selected\" ";
- }
- echo "value=\"{$wl_regdomains_attr[$wl_regdomain_key]['ID']}\">{$wl_regdomain['name']}</option>\n";
- }
- ?>
- </select>
- <br />
- <?=gettext("Note: Some cards have a default that is not recognized and require changing the regulatory domain to one in this list for the changes to other regulatory settings to work."); ?>
- <br /><br />
- <?=gettext("Country (listed with country code and regulatory domain)"); ?><br />
- <select name="regcountry" class="formselect" id="regcountry">
- <option <?php if (empty($pconfig['regcountry'])) echo "selected=\"selected\""; ?> value=""><?=gettext("Default"); ?></option>
- <?php
- foreach ($wl_countries as $wl_country_key => $wl_country) {
- echo "<option ";
- if ($pconfig['regcountry'] == $wl_countries_attr[$wl_country_key]['ID']) {
- echo "selected=\"selected\" ";
- }
- echo "value=\"{$wl_countries_attr[$wl_country_key]['ID']}\">{$wl_country['name']} -- ({$wl_countries_attr[$wl_country_key]['ID']}, " . strtoupper($wl_countries_attr[$wl_country_key]['rd'][0]['REF']) . ")</option>\n";
- }
- ?>
- </select>
- <br />
- <?=gettext("Note: Any country setting other than \"Default\" will override the regulatory domain setting"); ?>.
- <br /><br />
- <?=gettext("Location"); ?><br />
- <select name="reglocation" class="formselect" id="reglocation">
- <option <?php if (empty($pconfig['reglocation'])) echo "selected=\"selected\""; ?> value=""><?=gettext("Default"); ?></option>
- <option <?php if ($pconfig['reglocation'] == 'indoor') echo "selected=\"selected\""; ?> value="indoor"><?=gettext("Indoor"); ?></option>
- <option <?php if ($pconfig['reglocation'] == 'outdoor') echo "selected=\"selected\""; ?> value="outdoor"><?=gettext("Outdoor"); ?></option>
- <option <?php if ($pconfig['reglocation'] == 'anywhere') echo "selected=\"selected\""; ?> value="anywhere"><?=gettext("Anywhere"); ?></option>
- </select>
- <br /><br />
- <?=gettext("These settings may affect which channels are available and the maximum transmit power allowed on those channels. Using the correct settings to comply with local regulatory requirements is recommended."); ?>
- <br />
- <?=gettext("Note: All wireless networks on this interface will be temporarily brought down when changing regulatory settings. Some of the regulatory domains or country codes may not be allowed by some cards. These settings may not be able to add additional channels that are not already supported."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Network-specific wireless configuration");?></td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Mode"); ?></td>
- <td class="vtable">
- <select name="mode" class="formselect" id="mode">
- <option <?php if ($pconfig['mode'] == 'bss') echo "selected=\"selected\"";?> value="bss"><?=gettext("Infrastructure (BSS)"); ?></option>
- <option <?php if ($pconfig['mode'] == 'adhoc') echo "selected=\"selected\"";?> value="adhoc"><?=gettext("Ad-hoc (IBSS)"); ?></option>
- <option <?php if ($pconfig['mode'] == 'hostap') echo "selected=\"selected\"";?> value="hostap"><?=gettext("Access Point"); ?></option>
- </select>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("SSID"); ?></td>
- <td class="vtable">
- <input name="ssid" type="text" class="formfld unknown" id="ssid" size="20" value="<?=htmlspecialchars($pconfig['ssid']); ?>" />
- <br />
- <?=gettext("Note: Only required in Access Point mode. If left blank in Ad-hoc or Infrastructure mode, this interface will connect to any available SSID"); ?>
- </td>
- </tr>
- <?php if (isset($wl_modes['11ng']) || isset($wl_modes['11na'])): ?>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Minimum wireless standard"); ?></td>
- <td class="vtable">
- <select name="puremode" class="formselect" id="puremode">
- <option <?php if ($pconfig['puremode'] == 'any') echo "selected=\"selected\"";?> value="any"><?=gettext("Any"); ?></option>
- <?php if (isset($wl_modes['11g'])): ?>
- <option <?php if ($pconfig['puremode'] == '11g') echo "selected=\"selected\"";?> value="11g"><?=gettext("802.11g"); ?></option>
- <?php endif; ?>
- <option <?php if ($pconfig['puremode'] == '11n') echo "selected=\"selected\"";?> value="11n"><?=gettext("802.11n"); ?></option>
- </select>
- <br />
- <?=gettext("When operating as an access point, allow only stations capable of the selected wireless standard to associate (stations not capable are not permitted to associate)."); ?>
- </td>
- </tr>
- <?php elseif (isset($wl_modes['11g'])): ?>
- <tr>
- <td valign="top" class="vncell"><?=gettext("802.11g only"); ?></td>
- <td class="vtable">
- <input name="puremode" type="checkbox" value="11g" class="formfld" id="puremode" <?php if ($pconfig['puremode'] == '11g') echo "checked=\"checked\"";?> />
- <br /><?=gettext("When operating as an access point in 802.11g mode, allow only 11g-capable stations to associate (11b-only stations are not permitted to associate)."); ?>
- </td>
- </tr>
- <?php endif; ?>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Allow intra-BSS communication"); ?></td>
- <td class="vtable">
- <input name="apbridge_enable" type="checkbox" value="yes" class="formfld" id="apbridge_enable" <?php if ($pconfig['apbridge_enable']) echo "checked=\"checked\"";?> />
- <br />
- <?=gettext("When operating as an access point, enable this if you want to pass packets between wireless clients directly."); ?>
- <br />
- <?=gettext("Disabling the internal bridging is useful when traffic is to be processed with packet filtering."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Enable WME"); ?></td>
- <td class="vtable">
- <input name="wme_enable" type="checkbox" class="formfld" id="wme_enable" value="yes" <?php if ($pconfig['wme_enable']) echo "checked=\"checked\"";?> />
- <br /><?=gettext("Setting this option will force the card to use WME (wireless QoS)."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Enable Hide SSID"); ?></td>
- <td class="vtable">
- <input name="hidessid_enable" type="checkbox" class="formfld" id="hidessid_enable" value="yes" <?php if ($pconfig['hidessid_enable']) echo "checked=\"checked\"";?> />
- <br />
- <?=gettext("Setting this option will force the card to NOT broadcast its SSID"); ?>
- <br />
- <?=gettext("(this might create problems for some clients)."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("WEP"); ?></td>
- <td class="vtable">
- <input name="wep_enable" type="checkbox" id="wep_enable" value="yes" <?php if ($pconfig['wep_enable']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable WEP"); ?></strong>
- <table border="0" cellspacing="0" cellpadding="0" summary="wep">
- <tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td>&nbsp;<?=gettext("TX key"); ?>&nbsp;</td>
- </tr>
- <tr>
- <td><?=gettext("Key 1:"); ?>&nbsp;&nbsp;</td>
- <td>
- <input name="key1" type="text" class="formfld unknown" id="key1" size="30" value="<?=htmlspecialchars($pconfig['key1']);?>" />
- </td>
- <td align="center">
- <input name="txkey" type="radio" value="1" <?php if ($pconfig['txkey'] == 1) echo "checked=\"checked\"";?> />
- </td>
- </tr>
- <tr>
- <td><?=gettext("Key 2:"); ?>&nbsp;&nbsp;</td>
- <td>
- <input name="key2" type="text" class="formfld unknown" id="key2" size="30" value="<?=htmlspecialchars($pconfig['key2']);?>" />
- </td>
- <td align="center">
- <input name="txkey" type="radio" value="2" <?php if ($pconfig['txkey'] == 2) echo "checked=\"checked\"";?> />
- </td>
- </tr>
- <tr>
- <td><?=gettext("Key 3:"); ?>&nbsp;&nbsp;</td>
- <td>
- <input name="key3" type="text" class="formfld unknown" id="key3" size="30" value="<?=htmlspecialchars($pconfig['key3']);?>" />
- </td>
- <td align="center">
- <input name="txkey" type="radio" value="3" <?php if ($pconfig['txkey'] == 3) echo "checked=\"checked\"";?> />
- </td>
- </tr>
- <tr>
- <td><?=gettext("Key 4:"); ?>&nbsp;&nbsp;</td>
- <td>
- <input name="key4" type="text" class="formfld unknown" id="key4" size="30" value="<?=htmlspecialchars($pconfig['key4']);?>" />
- </td>
- <td align="center">
- <input name="txkey" type="radio" value="4" <?php if ($pconfig['txkey'] == 4) echo "checked=\"checked\"";?> />
- </td>
- </tr>
- </table>
- <br />
- <?=gettext("40 (64) bit keys may be entered as 5 ASCII characters or 10 hex digits preceded by '0x'."); ?><br />
- <?=gettext("104 (128) bit keys may be entered as 13 ASCII characters or 26 hex digits preceded by '0x'."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("WPA"); ?></td>
- <td class="vtable">
- <input name="wpa_enable" type="checkbox" class="formfld" id="wpa_enable" value="yes" <?php if ($pconfig['wpa_enable']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable WPA"); ?></strong>
- <br /><br />
- <table border="0" cellspacing="0" cellpadding="0" summary="wpa">
- <tr>
- <td>&nbsp;</td>
- <td>&nbsp;<?=gettext("WPA Pre-Shared Key"); ?>&nbsp;</td>
- </tr>
- <tr>
- <td><?=gettext("PSK:"); ?>&nbsp;&nbsp;</td>
- <td>
- <input name="passphrase" type="text" class="formfld unknown" id="passphrase" size="66" value="<?=htmlspecialchars($pconfig['passphrase']);?>" />
- </td>
- </tr>
- </table>
- <br /><?=gettext("WPA Passphrase must be between 8 and 63 characters long."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("WPA Mode"); ?></td>
- <td class="vtable">
- <select name="wpa_mode" class="formselect" id="wpa_mode">
- <option <?php if ($pconfig['wpa_mode'] == '1') echo "selected=\"selected\"";?> value="1"><?=gettext("WPA"); ?></option>
- <option <?php if ($pconfig['wpa_mode'] == '2' || !isset($pconfig['wpa_mode'])) echo "selected=\"selected\"";?> value="2"><?=gettext("WPA2"); ?></option>
- <option <?php if ($pconfig['wpa_mode'] == '3') echo "selected=\"selected\"";?> value="3"><?=gettext("Both"); ?></option>
- </select>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("WPA Key Management Mode"); ?></td>
- <td class="vtable">
- <select name="wpa_key_mgmt" class="formselect" id="wpa_key_mgmt">
- <option <?php if ($pconfig['wpa_key_mgmt'] == 'WPA-PSK') echo "selected=\"selected\"";?> value="WPA-PSK"><?=gettext("Pre-Shared Key"); ?></option>
- <option <?php if ($pconfig['wpa_key_mgmt'] == 'WPA-EAP') echo "selected=\"selected\"";?> value="WPA-EAP"><?=gettext("Extensible Authentication Protocol"); ?></option>
- <option <?php if ($pconfig['wpa_key_mgmt'] == 'WPA-PSK WPA-EAP') echo "selected=\"selected\"";?> value="WPA-PSK WPA-EAP"><?=gettext("Both"); ?></option>
- </select>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Authentication"); ?></td>
- <td class="vtable">
- <select name="auth_algs" class="formselect" id="auth_algs">
- <option <?php if ($pconfig['auth_algs'] == '1') echo "selected=\"selected\"";?> value="1"><?=gettext("Open System Authentication"); ?></option>
- <option <?php if ($pconfig['auth_algs'] == '2') echo "selected=\"selected\"";?> value="2"><?=gettext("Shared Key Authentication"); ?></option>
- <option <?php if ($pconfig['auth_algs'] == '3') echo "selected=\"selected\"";?> value="3"><?=gettext("Both"); ?></option>
- </select>
- <br /><?=gettext("Note: Shared Key Authentication requires WEP."); ?><br />
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("WPA Pairwise"); ?></td>
- <td class="vtable">
- <select name="wpa_pairwise" class="formselect" id="wpa_pairwise">
- <option <?php if ($pconfig['wpa_pairwise'] == 'CCMP TKIP') echo "selected=\"selected\"";?> value="CCMP TKIP"><?=gettext("Both"); ?></option>
- <option <?php if ($pconfig['wpa_pairwise'] == 'CCMP' || !isset($pconfig['wpa_pairwise'])) echo "selected=\"selected\"";?> value="CCMP"><?=gettext("AES (recommended)"); ?></option>
- <option <?php if ($pconfig['wpa_pairwise'] == 'TKIP') echo "selected=\"selected\"";?> value="TKIP"><?=gettext("TKIP"); ?></option>
- </select>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Key Rotation"); ?></td>
- <td class="vtable">
- <input name="wpa_group_rekey" type="text" class="formfld unknown" id="wpa_group_rekey" size="30" value="<?php echo htmlspecialchars($pconfig['wpa_group_rekey']) ? $pconfig['wpa_group_rekey'] : "60";?>" />
- <br /><?=gettext("Specified in seconds. Allowed values are 1-9999. Must be shorter than Master Key Regeneration time."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Master Key Regeneration"); ?></td>
- <td class="vtable">
- <input name="wpa_gmk_rekey" type="text" class="formfld" id="wpa_gmk_rekey" size="30" value="<?php echo htmlspecialchars($pconfig['wpa_gmk_rekey']) ? $pconfig['wpa_gmk_rekey'] : "3600";?>" />
- <br /><?=gettext("Specified in seconds. Allowed values are 1-9999. Must be longer than Key Rotation time."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Strict Key Regeneration"); ?></td>
- <td class="vtable">
- <input name="wpa_strict_rekey" type="checkbox" value="yes" class="formfld" id="wpa_strict_rekey" <?php if ($pconfig['wpa_strict_rekey']) echo "checked=\"checked\""; ?> />
- <br /><?=gettext("Setting this option will force the AP to rekey whenever a client disassociates."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Enable IEEE802.1X Authentication"); ?></td>
- <td class="vtable">
- <input name="ieee8021x" type="checkbox" value="yes" class="formfld" id="ieee8021x" <?php if ($pconfig['ieee8021x']) echo "checked=\"checked\"";?> />
- <br /><?=gettext("Setting this option will enable 802.1X authentication."); ?>
- <br /><span class="red"><strong><?=gettext("NOTE"); ?>:</strong></span> <?=gettext("this option requires checking the \"Enable WPA box\"."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("802.1X Authentication Server IP Address"); ?></td>
- <td class="vtable">
- <input name="auth_server_addr" id="auth_server_addr" type="text" class="formfld unknown" size="66" value="<?=htmlspecialchars($pconfig['auth_server_addr']);?>" />
- <br /><?=gettext("Enter the IP address of the 802.1X Authentication Server. This is commonly a Radius server (FreeRadius, Internet Authentication Services, etc.)"); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("802.1X Authentication Server Port"); ?></td>
- <td class="vtable">
- <input name="auth_server_port" id="auth_server_port" type="text" class="formfld unknown" size="66" value="<?=htmlspecialchars($pconfig['auth_server_port']);?>" />
- <br /><?=gettext("Leave blank for the default port 1812."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("802.1X Authentication Server Shared Secret"); ?></td>
- <td class="vtable">
- <input name="auth_server_shared_secret" id="auth_server_shared_secret" type="text" class="formfld unknown" size="66" value="<?=htmlspecialchars($pconfig['auth_server_shared_secret']);?>" />
- <br />
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Secondary 802.1X Authentication Server IP Address"); ?></td>
- <td class="vtable">
- <input name="auth_server_addr2" id="auth_server_addr2" type="text" class="formfld unknown" size="66" value="<?=htmlspecialchars($pconfig['auth_server_addr2']);?>" />
- <br /><?=gettext("Enter the IP address of the 802.1X Authentication Server. This is commonly a Radius server (FreeRadius, Internet Authentication Services, etc.)"); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Secondary 802.1X Authentication Server Port"); ?></td>
- <td class="vtable">
- <input name="auth_server_port2" id="auth_server_port2" type="text" class="formfld unknown" size="66" value="<?=htmlspecialchars($pconfig['auth_server_port2']);?>" />
- <br /><?=gettext("Leave blank for the default port 1812."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Secondary 802.1X Authentication Server Shared Secret"); ?></td>
- <td class="vtable">
- <input name="auth_server_shared_secret2" id="auth_server_shared_secret2" type="text" class="formfld unknown" size="66" value="<?=htmlspecialchars($pconfig['auth_server_shared_secret2']);?>" />
- <br />
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell">802.1X <?=gettext("Authentication Roaming Preauth"); ?></td>
- <td class="vtable">
- <input name="rsn_preauth" id="rsn_preauth" type="checkbox" class="formfld unknown" size="66" value="yes" <?php if ($pconfig['rsn_preauth']) echo "checked=\"checked\""; ?> />
- <br />
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" height="16"></td>
- </tr>
- <?php endif; ?>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Private networks"); ?></td>
- </tr>
- <tr>
- <td valign="middle" class="vncell">&nbsp;</td>
- <td class="vtable">
- <a name="rfc1918"></a>
- <input name="blockpriv" type="checkbox" id="blockpriv" value="yes" <?php if ($pconfig['blockpriv']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Block private networks"); ?></strong><br />
- <?=gettext("When set, this option blocks traffic from IP addresses that are reserved " .
- "for private networks as per RFC 1918 (10/8, 172.16/12, 192.168/16) as"); ?>
- <?=gettext("well as loopback addresses (127/8)."); ?>&nbsp;&nbsp; <?=gettext("You should generally " .
- "leave this option turned on, unless your WAN network lies in such " .
- "a private address space, too."); ?>
- </td>
- </tr>
- <tr>
- <td valign="middle" class="vncell">&nbsp;</td>
- <td class="vtable">
- <input name="blockbogons" type="checkbox" id="blockbogons" value="yes" <?php if ($pconfig['blockbogons']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Block bogon networks"); ?></strong><br />
- <?=gettext("When set, this option blocks traffic from IP addresses that are reserved " .
- "(but not RFC 1918) or not yet assigned by IANA."); ?>&nbsp;&nbsp;
- <?=gettext("Bogons are prefixes that should never appear in the Internet routing table, " .
- "and obviously should not appear as the source address in any packets you receive."); ?>
- <br /><br />
- <?=gettext("Note: The update frequency can be changed under System->Advanced Firewall/NAT settings.")?>
- </td>
- </tr>
- </table> <!-- End "allcfg" table -->
- </div> <!-- End "allcfg" div -->
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="buttons">
- <tr>
- <td width="22%" valign="top">
- &nbsp;
- </td>
- <td width="78%">
- <br />
- <input id="save" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input id="cancel" type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <input name="if" type="hidden" id="if" value="<?=htmlspecialchars($if);?>" />
- <?php if ($wancfg['if'] == $a_ppps[$pppid]['if']) : ?>
- <input name="ppp_port" type="hidden" value="<?=htmlspecialchars($pconfig['port']);?>" />
- <?php endif; ?>
- <input name="ptpid" type="hidden" value="<?=htmlspecialchars($pconfig['ptpid']);?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
- </form>
- <script type="text/javascript">
- //<![CDATA[
- var gatewayip;
- var name;
- var gatewayipv6;
- var namev6;
- function show_add_gateway() {
- document.getElementById("addgateway").style.display = '';
- document.getElementById("addgwbox").style.display = 'none';
- document.getElementById("gateway").style.display = 'none';
- document.getElementById("save").style.display = 'none';
- document.getElementById("cancel").style.display = 'none';
- document.getElementById("gwsave").style.display = '';
- document.getElementById("gwcancel").style.display = '';
- jQuery('#notebox').html("");
- }
- function show_add_gateway_v6() {
- document.getElementById("addgatewayv6").style.display = '';
- document.getElementById("addgwboxv6").style.display = 'none';
- document.getElementById("gatewayv6").style.display = 'none';
- document.getElementById("save").style.display = 'none';
- document.getElementById("cancel").style.display = 'none';
- document.getElementById("gwsave").style.display = '';
- document.getElementById("gwcancel").style.display = '';
- jQuery('#noteboxv6').html("");
- }
- function hide_add_gateway() {
- document.getElementById("addgateway").style.display = 'none';
- document.getElementById("addgwbox").style.display = '';
- document.getElementById("gateway").style.display = '';
- document.getElementById("save").style.display = '';
- document.getElementById("cancel").style.display = '';
- document.getElementById("gwsave").style.display = '';
- document.getElementById("gwcancel").style.display = '';
- jQuery('#status').html('');
- }
- function hide_add_gateway_v6() {
- document.getElementById("addgatewayv6").style.display = 'none';
- document.getElementById("addgwboxv6").style.display = '';
- document.getElementById("gatewayv6").style.display = '';
- document.getElementById("save").style.display = '';
- document.getElementById("cancel").style.display = '';
- document.getElementById("gwsave").style.display = '';
- document.getElementById("gwcancel").style.display = '';
- jQuery('#statusv6').html('');
- }
- function hide_add_gatewaysave() {
- document.getElementById("addgateway").style.display = 'none';
- jQuery('#status').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" /> One moment please...');
- var iface = jQuery('#if').val();
- name = jQuery('#name').val();
- var descr = jQuery('#gatewaydescr').val();
- gatewayip = jQuery('#gatewayip').val();
-
- var defaultgw = '';
- if (jQuery('#defaultgw').is(':checked')) {
- defaultgw = '&defaultgw=on';
- }
- var url = "system_gateways_edit.php";
- var pars = 'isAjax=true&ipprotocol=inet' + defaultgw + '&interface=' + escape(iface) + '&name=' + escape(name) + '&descr=' + escape(descr) + '&gateway=' + escape(gatewayip);
- jQuery.ajax(
- url,
- {
- type: 'post',
- data: pars,
- error: report_failure,
- success: save_callback
- });
- }
- function hide_add_gatewaysave_v6() {
- document.getElementById("addgatewayv6").style.display = 'none';
- jQuery('#statusv6').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" /> One moment please...');
- var iface = jQuery('#if').val();
- name = jQuery('#namev6').val();
- var descr = jQuery('#gatewaydescrv6').val();
- gatewayip = jQuery('#gatewayipv6').val();
- var defaultgw = '';
- if (jQuery('#defaultgwv6').is(':checked')) {
- defaultgw = '&defaultgw=on';
- }
- var url_v6 = "system_gateways_edit.php";
- var pars_v6 = 'isAjax=true&ipprotocol=inet6' + defaultgw + '&interface=' + escape(iface) + '&name=' + escape(name) + '&descr=' + escape(descr) + '&gateway=' + escape(gatewayip);
- jQuery.ajax(
- url_v6,
- {
- type: 'post',
- data: pars_v6,
- error: report_failure_v6,
- success: save_callback_v6
- });
- }
- function addOption(selectbox, text, value)
- {
- var optn = document.createElement("OPTION");
- optn.text = text;
- optn.value = value;
- selectbox.append(optn);
- selectbox.prop('selectedIndex', selectbox.children().length - 1);
- jQuery('#notebox').html("<p><strong><?=gettext("NOTE:"); ?><\/strong> <?=gettext("You can manage Gateways"); ?> <a target='_blank' href='system_gateways.php'><?=gettext("here"); ?><\/a>.<\/p>");
- }
- function addOption_v6(selectbox, text, value)
- {
- var optn = document.createElement("OPTION");
- optn.text = text;
- optn.value = value;
- selectbox.append(optn);
- selectbox.prop('selectedIndex', selectbox.children().length - 1);
- jQuery('#noteboxv6').html("<p><strong><?=gettext("NOTE:"); ?><\/strong> <?=gettext("You can manage Gateways"); ?> <a target='_blank' href='system_gateways.php'><?=gettext("here"); ?><\/a>.<\/p>");
- }
- function report_failure(request, textStatus, errorThrown) {
- if (textStatus === "error" && request.getResponseHeader("Content-Type") === "text/plain") {
- alert(request.responseText);
- } else {
- alert("Sorry, we could not create your IPv4 gateway at this time.");
- }
- hide_add_gateway();
- }
- function report_failure_v6(request, textStatus, errorThrown) {
- if (textStatus === "error" && request.getResponseHeader("Content-Type") === "text/plain") {
- alert(request.responseText);
- } else {
- alert("Sorry, we could not create your IPv6 gateway at this time.");
- }
- hide_add_gateway_v6();
- }
- function save_callback(response) {
- if (response) {
- document.getElementById("addgateway").style.display = 'none';
- hide_add_gateway();
- var gwtext = escape(name) + " - " + gatewayip;
- addOption(jQuery('#gateway'), gwtext, name);
- // Auto submit form?
- //document.iform.submit();
- //jQuery('#status').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader /">');
- } else {
- report_failure();
- }
- }
- function show_advanced_media() {
- document.getElementById("showadvmediabox").innerHTML='';
- aodiv = document.getElementById('showmediaadv');
- aodiv.style.display = "block";
- }
- function save_callback_v6(response_v6) {
- if (response_v6) {
- document.getElementById("addgatewayv6").style.display = 'none';
- hide_add_gateway_v6();
- var gwtext_v6 = escape(name) + " - " + gatewayip;
- addOption_v6(jQuery('#gatewayv6'), gwtext_v6, name);
- // Auto submit form?
- //document.iform.submit();
- //jQuery('#statusv6').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" />');
- } else {
- report_failure_v6();
- }
- }
- <?php
- echo "show_allcfg(document.iform.enable);";
- echo "updateType('{$pconfig['type']}');\n";
- echo "updateTypeSix('{$pconfig['type6']}');\n";
- ?>
- //]]>
- </script>
- <?php include("fend.inc"); ?>
- </body>
-</html>
diff --git a/usr/local/www/interfaces_assign.php b/usr/local/www/interfaces_assign.php
deleted file mode 100644
index 03fe582..0000000
--- a/usr/local/www/interfaces_assign.php
+++ /dev/null
@@ -1,597 +0,0 @@
-<?php
-/*
- interfaces_assign.php
- part of m0n0wall (http://m0n0.ch/wall)
- Written by Jim McBeath based on existing m0n0wall files
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /bin/rm
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-assignnetworkports
-##|*NAME=Interfaces: Assign network ports page
-##|*DESCR=Allow access to the 'Interfaces: Assign network ports' page.
-##|*MATCH=interfaces_assign.php*
-##|-PRIV
-
-$pgtitle = array(gettext("Interfaces"), gettext("Assign network ports"));
-$shortcut_section = "interfaces";
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("ipsec.inc");
-require("vpn.inc");
-require("captiveportal.inc");
-require_once("rrd.inc");
-
-function interface_assign_description($portinfo, $portname) {
- global $ovpn_descrs;
- if ($portinfo['isvlan']) {
- $descr = sprintf(gettext('VLAN %1$s on %2$s'), $portinfo['tag'], $portinfo['if']);
- if ($portinfo['descr']) {
- $descr .= " (" . $portinfo['descr'] . ")";
- }
- } elseif ($portinfo['iswlclone']) {
- $descr = $portinfo['cloneif'];
- if ($portinfo['descr']) {
- $descr .= " (" . $portinfo['descr'] . ")";
- }
- } elseif ($portinfo['isppp']) {
- $descr = $portinfo['descr'];
- } elseif ($portinfo['isbridge']) {
- $descr = strtoupper($portinfo['bridgeif']);
- if ($portinfo['descr']) {
- $descr .= " (" . $portinfo['descr'] . ")";
- }
- } elseif ($portinfo['isgre']) {
- $descr = "GRE {$portinfo['remote-addr']}";
- if ($portinfo['descr']) {
- $descr .= " (" . $portinfo['descr'] . ")";
- }
- } elseif ($portinfo['isgif']) {
- $descr = "GIF {$portinfo['remote-addr']}";
- if ($portinfo['descr']) {
- $descr .= " (" . $portinfo['descr'] . ")";
- }
- } elseif ($portinfo['islagg']) {
- $descr = strtoupper($portinfo['laggif']);
- if ($portinfo['descr']) {
- $descr .= " (" . $portinfo['descr'] . ")";
- }
- } elseif ($portinfo['isqinq']) {
- $descr = $portinfo['descr'];
- } elseif (substr($portname, 0, 4) == 'ovpn') {
- $descr = $portname . " (" . $ovpn_descrs[substr($portname, 5)] . ")";
- } else {
- $descr = $portname . " (" . $portinfo['mac'] . ")";
- }
-
- return htmlspecialchars($descr);
-}
-
-/*
- In this file, "port" refers to the physical port name,
- while "interface" refers to LAN, WAN, or OPTn.
-*/
-
-/* get list without VLAN interfaces */
-$portlist = get_interface_list();
-
-/* add wireless clone interfaces */
-if (is_array($config['wireless']['clone']) && count($config['wireless']['clone'])) {
- foreach ($config['wireless']['clone'] as $clone) {
- $portlist[$clone['cloneif']] = $clone;
- $portlist[$clone['cloneif']]['iswlclone'] = true;
- }
-}
-
-/* add VLAN interfaces */
-if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) {
- foreach ($config['vlans']['vlan'] as $vlan) {
- $portlist[$vlan['vlanif']] = $vlan;
- $portlist[$vlan['vlanif']]['isvlan'] = true;
- }
-}
-
-/* add Bridge interfaces */
-if (is_array($config['bridges']['bridged']) && count($config['bridges']['bridged'])) {
- foreach ($config['bridges']['bridged'] as $bridge) {
- $portlist[$bridge['bridgeif']] = $bridge;
- $portlist[$bridge['bridgeif']]['isbridge'] = true;
- }
-}
-
-/* add GIF interfaces */
-if (is_array($config['gifs']['gif']) && count($config['gifs']['gif'])) {
- foreach ($config['gifs']['gif'] as $gif) {
- $portlist[$gif['gifif']] = $gif;
- $portlist[$gif['gifif']]['isgif'] = true;
- }
-}
-
-/* add GRE interfaces */
-if (is_array($config['gres']['gre']) && count($config['gres']['gre'])) {
- foreach ($config['gres']['gre'] as $gre) {
- $portlist[$gre['greif']] = $gre;
- $portlist[$gre['greif']]['isgre'] = true;
- }
-}
-
-/* add LAGG interfaces */
-if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) {
- foreach ($config['laggs']['lagg'] as $lagg) {
- $portlist[$lagg['laggif']] = $lagg;
- $portlist[$lagg['laggif']]['islagg'] = true;
- /* LAGG members cannot be assigned */
- $lagifs = explode(',', $lagg['members']);
- foreach ($lagifs as $lagif) {
- if (isset($portlist[$lagif])) {
- unset($portlist[$lagif]);
- }
- }
- }
-}
-
-/* add QinQ interfaces */
-if (is_array($config['qinqs']['qinqentry']) && count($config['qinqs']['qinqentry'])) {
- foreach ($config['qinqs']['qinqentry'] as $qinq) {
- $portlist["vlan{$qinq['tag']}"]['descr'] = "VLAN {$qinq['tag']}";
- $portlist["vlan{$qinq['tag']}"]['isqinq'] = true;
- /* QinQ members */
- $qinqifs = explode(' ', $qinq['members']);
- foreach ($qinqifs as $qinqif) {
- $portlist["vlan{$qinq['tag']}_{$qinqif}"]['descr'] = "QinQ {$qinqif}";
- $portlist["vlan{$qinq['tag']}_{$qinqif}"]['isqinq'] = true;
- }
- }
-}
-
-/* add PPP interfaces */
-if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) {
- foreach ($config['ppps']['ppp'] as $pppid => $ppp) {
- $portname = $ppp['if'];
- $portlist[$portname] = $ppp;
- $portlist[$portname]['isppp'] = true;
- $ports_base = basename($ppp['ports']);
- if (isset($ppp['descr'])) {
- $portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base}) - {$ppp['descr']}";
- } else if (isset($ppp['username'])) {
- $portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base}) - {$ppp['username']}";
- } else {
- $portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base})";
- }
- }
-}
-
-$ovpn_descrs = array();
-if (is_array($config['openvpn'])) {
- if (is_array($config['openvpn']['openvpn-server'])) {
- foreach ($config['openvpn']['openvpn-server'] as $s) {
- $ovpn_descrs[$s['vpnid']] = $s['description'];
- }
- }
- if (is_array($config['openvpn']['openvpn-client'])) {
- foreach ($config['openvpn']['openvpn-client'] as $c) {
- $ovpn_descrs[$c['vpnid']] = $c['description'];
- }
- }
-}
-
-if (isset($_POST['add_x']) && isset($_POST['if_add'])) {
- /* Be sure this port is not being used */
- $portused = false;
- foreach ($config['interfaces'] as $ifname => $ifdata) {
- if ($ifdata['if'] == $_POST['if_add']) {
- $portused = true;
- break;
- }
- }
-
- if ($portused === false) {
- /* find next free optional interface number */
- if (!$config['interfaces']['lan']) {
- $newifname = gettext("lan");
- $descr = gettext("LAN");
- } else {
- for ($i = 1; $i <= count($config['interfaces']); $i++) {
- if (!$config['interfaces']["opt{$i}"]) {
- break;
- }
- }
- $newifname = 'opt' . $i;
- $descr = "OPT" . $i;
- }
-
- $config['interfaces'][$newifname] = array();
- $config['interfaces'][$newifname]['descr'] = $descr;
- $config['interfaces'][$newifname]['if'] = $_POST['if_add'];
- if (preg_match($g['wireless_regex'], $_POST['if_add'])) {
- $config['interfaces'][$newifname]['wireless'] = array();
- interface_sync_wireless_clones($config['interfaces'][$newifname], false);
- }
-
- uksort($config['interfaces'], "compare_interface_friendly_names");
-
- /* XXX: Do not remove this. */
- unlink_if_exists("{$g['tmp_path']}/config.cache");
-
- write_config();
-
- $savemsg = gettext("Interface has been added.");
- }
-
-} else if (isset($_POST['apply'])) {
- if (file_exists("/var/run/interface_mismatch_reboot_needed")) {
- system_reboot();
- $rebootingnow = true;
- } else {
- write_config();
-
- $retval = filter_configure();
- $savemsg = get_std_save_message($retval);
-
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message($retval);
- } else {
- $savemsg = $retval;
- }
- }
-
-} else if (isset($_POST['Submit'])) {
-
- unset($input_errors);
-
- /* input validation */
-
- /* Build a list of the port names so we can see how the interfaces map */
- $portifmap = array();
- foreach ($portlist as $portname => $portinfo) {
- $portifmap[$portname] = array();
- }
-
- /* Go through the list of ports selected by the user,
- build a list of port-to-interface mappings in portifmap */
- foreach ($_POST as $ifname => $ifport) {
- if (($ifname == 'lan') || ($ifname == 'wan') || (substr($ifname, 0, 3) == 'opt')) {
- $portifmap[$ifport][] = strtoupper($ifname);
- }
- }
-
- /* Deliver error message for any port with more than one assignment */
- foreach ($portifmap as $portname => $ifnames) {
- if (count($ifnames) > 1) {
- $errstr = sprintf(gettext('Port %1$s '.
- ' was assigned to %2$s' .
- ' interfaces:'), $portname, count($ifnames));
-
- foreach ($portifmap[$portname] as $ifn) {
- $errstr .= " " . convert_friendly_interface_to_friendly_descr(strtolower($ifn)) . " (" . $ifn . ")";
- }
-
- $input_errors[] = $errstr;
- } else if (count($ifnames) == 1 && preg_match('/^bridge[0-9]/', $portname) && is_array($config['bridges']['bridged']) && count($config['bridges']['bridged'])) {
- foreach ($config['bridges']['bridged'] as $bridge) {
- if ($bridge['bridgeif'] != $portname) {
- continue;
- }
-
- $members = explode(",", strtoupper($bridge['members']));
- foreach ($members as $member) {
- if ($member == $ifnames[0]) {
- $input_errors[] = sprintf(gettext("You cannot set port %s to interface %s because this interface is a member of %s."), $portname, $member, $portname);
- break;
- }
- }
- }
- }
- }
-
- if (is_array($config['vlans']['vlan'])) {
- foreach ($config['vlans']['vlan'] as $vlan) {
- if (does_interface_exist($vlan['if']) == false) {
- $input_errors[] = "Vlan parent interface {$vlan['if']} does not exist anymore so vlan id {$vlan['tag']} cannot be created please fix the issue before continuing.";
- }
- }
- }
-
- if (!$input_errors) {
- /* No errors detected, so update the config */
- foreach ($_POST as $ifname => $ifport) {
-
- if (($ifname == 'lan') || ($ifname == 'wan') || (substr($ifname, 0, 3) == 'opt')) {
-
- if (!is_array($ifport)) {
- $reloadif = false;
- if (!empty($config['interfaces'][$ifname]['if']) && $config['interfaces'][$ifname]['if'] <> $ifport) {
- interface_bring_down($ifname);
- /* Mark this to be reconfigured in any case. */
- $reloadif = true;
- }
- $config['interfaces'][$ifname]['if'] = $ifport;
- if (isset($portlist[$ifport]['isppp'])) {
- $config['interfaces'][$ifname]['ipaddr'] = $portlist[$ifport]['type'];
- }
-
- if (substr($ifport, 0, 3) == 'gre' || substr($ifport, 0, 3) == 'gif') {
- unset($config['interfaces'][$ifname]['ipaddr']);
- unset($config['interfaces'][$ifname]['subnet']);
- unset($config['interfaces'][$ifname]['ipaddrv6']);
- unset($config['interfaces'][$ifname]['subnetv6']);
- }
-
- /* check for wireless interfaces, set or clear ['wireless'] */
- if (preg_match($g['wireless_regex'], $ifport)) {
- if (!is_array($config['interfaces'][$ifname]['wireless'])) {
- $config['interfaces'][$ifname]['wireless'] = array();
- }
- } else {
- unset($config['interfaces'][$ifname]['wireless']);
- }
-
- /* make sure there is a descr for all interfaces */
- if (!isset($config['interfaces'][$ifname]['descr'])) {
- $config['interfaces'][$ifname]['descr'] = strtoupper($ifname);
- }
-
- if ($reloadif == true) {
- if (preg_match($g['wireless_regex'], $ifport)) {
- interface_sync_wireless_clones($config['interfaces'][$ifname], false);
- }
- /* Reload all for the interface. */
- interface_configure($ifname, true);
- }
- }
- }
- }
-
- write_config();
-
- enable_rrd_graphing();
- }
-} else {
- /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
- unset($delbtn);
- foreach ($_POST as $pn => $pd) {
- if (preg_match("/del_(.+)_x/", $pn, $matches)) {
- $delbtn = $matches[1];
- }
- }
-
- if (isset($delbtn)) {
- $id = $delbtn;
-
- if (link_interface_to_group($id)) {
- $input_errors[] = gettext("The interface is part of a group. Please remove it from the group to continue");
- } else if (link_interface_to_bridge($id)) {
- $input_errors[] = gettext("The interface is part of a bridge. Please remove it from the bridge to continue");
- } else if (link_interface_to_gre($id)) {
- $input_errors[] = gettext("The interface is part of a gre tunnel. Please delete the tunnel to continue");
- } else if (link_interface_to_gif($id)) {
- $input_errors[] = gettext("The interface is part of a gif tunnel. Please delete the tunnel to continue");
- } else {
- unset($config['interfaces'][$id]['enable']);
- $realid = get_real_interface($id);
- interface_bring_down($id); /* down the interface */
-
- unset($config['interfaces'][$id]); /* delete the specified OPTn or LAN*/
-
- if (is_array($config['dhcpd']) && is_array($config['dhcpd'][$id])) {
- unset($config['dhcpd'][$id]);
- services_dhcpd_configure();
- }
-
- if (count($config['filter']['rule']) > 0) {
- foreach ($config['filter']['rule'] as $x => $rule) {
- if ($rule['interface'] == $id) {
- unset($config['filter']['rule'][$x]);
- }
- }
- }
- if (is_array($config['nat']['rule']) && count($config['nat']['rule']) > 0) {
- foreach ($config['nat']['rule'] as $x => $rule) {
- if ($rule['interface'] == $id) {
- unset($config['nat']['rule'][$x]['interface']);
- }
- }
- }
-
- write_config();
-
- /* If we are in firewall/routing mode (not single interface)
- * then ensure that we are not running DHCP on the wan which
- * will make a lot of ISP's unhappy.
- */
- if ($config['interfaces']['lan'] && $config['dhcpd']['wan']) {
- unset($config['dhcpd']['wan']);
- }
-
- link_interface_to_vlans($realid, "update");
-
- $savemsg = gettext("Interface has been deleted.");
- }
- }
-}
-
-/* Create a list of unused ports */
-$unused_portlist = array();
-foreach ($portlist as $portname => $portinfo) {
- $portused = false;
- foreach ($config['interfaces'] as $ifname => $ifdata) {
- if ($ifdata['if'] == $portname) {
- $portused = true;
- break;
- }
- }
- if ($portused === false) {
- $unused_portlist[$portname] = $portinfo;
- }
-}
-
-include("head.inc");
-
-if (file_exists("/var/run/interface_mismatch_reboot_needed")) {
- if ($_POST) {
- if ($rebootingnow) {
- $savemsg = gettext("The system is now rebooting. Please wait.");
- } else {
- $savemsg = gettext("Reboot is needed. Please apply the settings in order to reboot.");
- }
- } else {
- $savemsg = gettext("Interface mismatch detected. Please resolve the mismatch and click 'Apply changes'. The firewall will reboot afterwards.");
- }
-}
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-
-<form action="interfaces_assign.php" method="post" name="iform" id="iform">
-
-<?php
-if (file_exists("/tmp/reload_interfaces")) {
- echo "<p>\n";
- print_info_box_np(gettext("The interface configuration has been changed.<br />You must apply the changes in order for them to take effect."));
- echo "<br /></p>\n";
-} elseif ($savemsg) {
- print_info_box($savemsg);
-}
-
-pfSense_handle_custom_code("/usr/local/pkg/interfaces_assign/pre_input_errors");
-if ($input_errors) {
- print_input_errors($input_errors);
-}
-?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces assign">
- <tr><td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Interface assignments"), true, "interfaces_assign.php");
- $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
- $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
- $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
- $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
- $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
- $tab_array[7] = array(gettext("GRE"), false, "interfaces_gre.php");
- $tab_array[8] = array(gettext("GIF"), false, "interfaces_gif.php");
- $tab_array[9] = array(gettext("Bridges"), false, "interfaces_bridge.php");
- $tab_array[10] = array(gettext("LAGG"), false, "interfaces_lagg.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr><td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td class="listhdrr"><?=gettext("Interface"); ?></td>
- <td class="listhdr"><?=gettext("Network port"); ?></td>
- <td class="list">&nbsp;</td>
- </tr>
-<?php
- foreach ($config['interfaces'] as $ifname => $iface):
- if ($iface['descr']) {
- $ifdescr = $iface['descr'];
- } else {
- $ifdescr = strtoupper($ifname);
- }
-?>
- <tr>
- <td class="listlr" valign="middle"><strong><u><span onclick="location.href='/interfaces.php?if=<?=$ifname;?>'" style="cursor: pointer;"><?=$ifdescr;?></span></u></strong></td>
- <td valign="middle" class="listr">
- <select onchange="javascript:jQuery('#savediv').show();" name="<?=$ifname;?>" id="<?=$ifname;?>">
-<?php
- foreach ($portlist as $portname => $portinfo):
-?>
- <option value="<?=$portname;?>" <?php if ($portname == $iface['if']) echo " selected=\"selected\"";?>>
- <?=interface_assign_description($portinfo, $portname);?>
- </option>
-<?php
- endforeach;
-?>
- </select>
- </td>
- <td valign="middle" class="list">
-<?php
- if ($ifname != 'wan'):
-?>
- <input name="del_<?=$ifname;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif"
- title="<?=gettext("delete interface");?>"
- type="image" style="height:17;width:17;border:0"
- onclick="return confirm('<?=gettext("Do you really want to delete this interface?"); ?>')" />
-<?php
- endif;
-?>
- </td>
- </tr>
-<?php
- endforeach;
- if (count($config['interfaces']) < count($portlist)):
-?>
- <tr>
- <td class="list">
- <strong><?=gettext("Available network ports:");?></strong>
- </td>
- <td class="list">
- <select name="if_add" id="if_add">
-<?php
- foreach ($unused_portlist as $portname => $portinfo):
-?>
- <option value="<?=$portname;?>" <?php if ($portname == $iface['if']) echo " selected=\"selected\"";?>>
- <?=interface_assign_description($portinfo, $portname);?>
- </option>
-<?php
- endforeach;
-?>
- </select>
- </td>
- <td class="list">
- <input name="add" type="image" src="/themes/<?=$g['theme'];?>/images/icons/icon_plus.gif" style="width:17;height:17;border:0" title="<?=gettext("add selected interface");?>" />
- </td>
- </tr>
-<?php
- endif;
-?>
- </table>
- </div>
- <br />
- <div id='savediv' style='display:none'>
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" /><br /><br />
- </div>
- <ul>
- <li><span class="vexpl"><?=gettext("Interfaces that are configured as members of a lagg(4) interface will not be shown."); ?></span></li>
- </ul>
- </td></tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_bridge.php b/usr/local/www/interfaces_bridge.php
deleted file mode 100644
index b7e557f..0000000
--- a/usr/local/www/interfaces_bridge.php
+++ /dev/null
@@ -1,179 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_bridge.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2008 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /bin/rm
- pfSense_MODULE: interfaces_assign
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-bridge
-##|*NAME=Interfaces: Bridge page
-##|*DESCR=Allow access to the 'Interfaces: Bridge' page.
-##|*MATCH=interfaces_bridge.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (!is_array($config['bridges']['bridged'])) {
- $config['bridges']['bridged'] = array();
-}
-
-$a_bridges = &$config['bridges']['bridged'] ;
-
-function bridge_inuse($num) {
- global $config, $a_bridges;
-
- $iflist = get_configured_interface_list(false, true);
- foreach ($iflist as $if) {
- if ($config['interfaces'][$if]['if'] == $a_bridges[$num]['bridgeif']) {
- return true;
- }
- }
-
- return false;
-}
-
-if ($_GET['act'] == "del") {
- if (!isset($_GET['id'])) {
- $input_errors[] = gettext("Wrong parameters supplied");
- } else if (empty($a_bridges[$_GET['id']])) {
- $input_errors[] = gettext("Wrong index supplied");
- /* check if still in use */
- } else if (bridge_inuse($_GET['id'])) {
- $input_errors[] = gettext("This bridge cannot be deleted because it is assigned as an interface.");
- } else {
- if (!does_interface_exist($a_bridges[$_GET['id']]['bridgeif'])) {
- log_error("Bridge interface does not exist, skipping ifconfig destroy.");
- } else {
- mwexec("/sbin/ifconfig " . $a_bridges[$_GET['id']]['bridgeif'] . " destroy");
- }
-
- unset($a_bridges[$_GET['id']]);
-
- write_config();
-
- header("Location: interfaces_bridge.php");
- exit;
- }
-}
-
-
-$pgtitle = array(gettext("Interfaces"), gettext("Bridge"));
-$shortcut_section = "interfaces";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces bridge">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
- $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
- $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
- $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
- $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
- $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
- $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
- $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
- $tab_array[8] = array(gettext("Bridges"), true, "interfaces_bridge.php");
- $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="20%" class="listhdrr"><?=gettext("Interface"); ?></td>
- <td width="20%" class="listhdrr"><?=gettext("Members"); ?></td>
- <td width="50%" class="listhdr"><?=gettext("Description"); ?></td>
- <td width="10%" class="list"></td>
- </tr>
- <?php
- $i = 0;
- $ifdescrs = get_configured_interface_with_descr();
- foreach ($a_bridges as $bridge):
- ?>
- <tr ondblclick="document.location='interfaces_bridge_edit.php?id=<?=$i;?>'">
- <td class="listlr">
- <?=htmlspecialchars(strtoupper($bridge['bridgeif']));?>
- </td>
- <td class="listr">
- <?php
- $members = explode(',', $bridge['members']);
- $j = 0;
- foreach ($members as $member) {
- if (isset($ifdescrs[$member])) {
- echo $ifdescrs[$member];
- $j++;
- }
- if ($j > 0 && $j < count($members)) {
- echo ", ";
- }
- }
- ?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($bridge['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap"> <a href="interfaces_bridge_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
- &nbsp;<a href="interfaces_bridge.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this bridge?"); ?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
- <?php
- $i++;
- endforeach;
- ?>
- <tr>
- <td class="list" colspan="3">&nbsp;</td>
- <td class="list"> <a href="interfaces_bridge_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- <tr>
- <td colspan="3" class="list"><p class="vexpl"><span class="red"><strong>
- <?=gettext("Note:"); ?><br />
- </strong></span>
- <?=gettext("Here you can configure bridging of interfaces."); ?></p>
- </td>
- <td class="list">&nbsp;</td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_bridge_edit.php b/usr/local/www/interfaces_bridge_edit.php
deleted file mode 100644
index 1787ca1..0000000
--- a/usr/local/www/interfaces_bridge_edit.php
+++ /dev/null
@@ -1,708 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_bridge_edit.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2008 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-bridge-edit
-##|*NAME=Interfaces: Bridge edit page
-##|*DESCR=Allow access to the 'Interfaces: Bridge : Edit' page.
-##|*MATCH=interfaces_bridge_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_bridge.php');
-}
-
-if (!is_array($config['bridges']['bridged'])) {
- $config['bridges']['bridged'] = array();
-}
-
-$a_bridges = &$config['bridges']['bridged'];
-
-$ifacelist = get_configured_interface_with_descr();
-foreach ($ifacelist as $bif => $bdescr) {
- if (substr(get_real_interface($bif), 0, 3) == "gre") {
- unset($ifacelist[$bif]);
- }
-}
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_bridges[$id]) {
- $pconfig['enablestp'] = isset($a_bridges[$id]['enablestp']);
- $pconfig['descr'] = $a_bridges[$id]['descr'];
- $pconfig['bridgeif'] = $a_bridges[$id]['bridgeif'];
- $pconfig['members'] = $a_bridges[$id]['members'];
- $pconfig['maxaddr'] = $a_bridges[$id]['maxaddr'];
- $pconfig['timeout'] = $a_bridges[$id]['timeout'];
- if ($a_bridges[$id]['static']) {
- $pconfig['static'] = $a_bridges[$id]['static'];
- }
- if ($a_bridges[$id]['private']) {
- $pconfig['private'] = $a_bridges[$id]['private'];
- }
- if (isset($a_bridges[$id]['stp'])) {
- $pconfig['stp'] = $a_bridges[$id]['stp'];
- }
- $pconfig['maxage'] = $a_bridges[$id]['maxage'];
- $pconfig['fwdelay'] = $a_bridges[$id]['fwdelay'];
- $pconfig['hellotime'] = $a_bridges[$id]['hellotime'];
- $pconfig['priority'] = $a_bridges[$id]['priority'];
- $pconfig['proto'] = $a_bridges[$id]['proto'];
- $pconfig['holdcnt'] = $a_bridges[$id]['holdcnt'];
- if (!empty($a_bridges[$id]['ifpriority'])) {
- $pconfig['ifpriority'] = explode(",", $a_bridges[$id]['ifpriority']);
- $ifpriority = array();
- foreach ($pconfig['ifpriority'] as $cfg) {
- list ($key, $value) = explode(":", $cfg);
- $embprioritycfg[$key] = $value;
- foreach ($embprioritycfg as $key => $value) {
- $ifpriority[$key] = $value;
- }
- }
- $pconfig['ifpriority'] = $ifpriority;
- }
- if (!empty($a_bridges[$id]['ifpathcost'])) {
- $pconfig['ifpathcost'] = explode(",", $a_bridges[$id]['ifpathcost']);
- $ifpathcost = array();
- foreach ($pconfig['ifpathcost'] as $cfg) {
- list ($key, $value) = explode(":", $cfg);
- $embpathcfg[$key] = $value;
- foreach ($embpathcfg as $key => $value) {
- $ifpathcost[$key] = $value;
- }
- }
- $pconfig['ifpathcost'] = $ifpathcost;
- }
- $pconfig['span'] = $a_bridges[$id]['span'];
- if (isset($a_bridges[$id]['edge'])) {
- $pconfig['edge'] = $a_bridges[$id]['edge'];
- }
- if (isset($a_bridges[$id]['autoedge'])) {
- $pconfig['autoedge'] = $a_bridges[$id]['autoedge'];
- }
- if (isset($a_bridges[$id]['ptp'])) {
- $pconfig['ptp'] = $a_bridges[$id]['ptp'];
- }
- if (isset($a_bridges[$id]['autoptp'])) {
- $pconfig['autoptp'] = $a_bridges[$id]['autoptp'];
- }
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "members");
- $reqdfieldsn = array(gettext("Member Interfaces"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if ($_POST['maxage'] && !is_numeric($_POST['maxage'])) {
- $input_errors[] = gettext("Maxage needs to be an integer between 6 and 40.");
- }
- if ($_POST['maxaddr'] && !is_numeric($_POST['maxaddr'])) {
- $input_errors[] = gettext("Maxaddr needs to be an integer.");
- }
- if ($_POST['timeout'] && !is_numeric($_POST['timeout'])) {
- $input_errors[] = gettext("Timeout needs to be an integer.");
- }
- if ($_POST['fwdelay'] && !is_numeric($_POST['fwdelay'])) {
- $input_errors[] = gettext("Forward Delay needs to be an integer between 4 and 30.");
- }
- if ($_POST['hellotime'] && !is_numeric($_POST['hellotime'])) {
- $input_errors[] = gettext("Hello time for STP needs to be an integer between 1 and 2.");
- }
- if ($_POST['priority'] && !is_numeric($_POST['priority'])) {
- $input_errors[] = gettext("Priority for STP needs to be an integer between 0 and 61440.");
- }
- if ($_POST['holdcnt'] && !is_numeric($_POST['holdcnt'])) {
- $input_errors[] = gettext("Transmit Hold Count for STP needs to be an integer between 1 and 10.");
- }
- foreach ($ifacelist as $ifn => $ifdescr) {
- if ($_POST[$ifn] <> "" && !is_numeric($_POST[$ifn])) {
- $input_errors[] = "{$ifdescr} " . gettext("interface priority for STP needs to be an integer between 0 and 240.");
- }
- }
- $i = 0;
- foreach ($ifacelist as $ifn => $ifdescr) {
- if ($_POST["{$ifn}{$i}"] <> "" && !is_numeric($_POST["{$ifn}{$i}"])) {
- $input_errors[] = "{$ifdescr} " . gettext("interface path cost for STP needs to be an integer between 1 and 200000000.");
- }
- $i++;
- }
-
- if (!is_array($_POST['members']) || count($_POST['members']) < 1) {
- $input_errors[] = gettext("You must select at least one member interface for a bridge.");
- }
-
- if (is_array($_POST['members'])) {
- foreach ($_POST['members'] as $ifmembers) {
- if (empty($config['interfaces'][$ifmembers])) {
- $input_errors[] = gettext("A member interface passed does not exist in configuration");
- }
- if (is_array($config['interfaces'][$ifmembers]['wireless']) &&
- $config['interfaces'][$ifmembers]['wireless']['mode'] != "hostap") {
- $input_errors[] = gettext("Bridging a wireless interface is only possible in hostap mode.");
- }
- if ($_POST['span'] != "none" && $_POST['span'] == $ifmembers) {
- $input_errors[] = gettext("Span interface cannot be part of the bridge. Remove the span interface from bridge members to continue.");
- }
- }
- }
-
- if (!$input_errors) {
- $bridge = array();
- $bridge['members'] = implode(',', $_POST['members']);
- $bridge['enablestp'] = $_POST['enablestp'] ? true : false;
- $bridge['descr'] = $_POST['descr'];
- $bridge['maxaddr'] = $_POST['maxaddr'];
- $bridge['timeout'] = $_POST['timeout'];
- if ($_POST['static']) {
- $bridge['static'] = implode(',', $_POST['static']);
- }
- if ($_POST['private']) {
- $bridge['private'] = implode(',', $_POST['private']);
- }
- if (isset($_POST['stp'])) {
- $bridge['stp'] = implode(',', $_POST['stp']);
- }
- $bridge['maxage'] = $_POST['maxage'];
- $bridge['fwdelay'] = $_POST['fwdelay'];
- $bridge['hellotime'] = $_POST['hellotime'];
- $bridge['priority'] = $_POST['priority'];
- $bridge['proto'] = $_POST['proto'];
- $bridge['holdcnt'] = $_POST['holdcnt'];
- $i = 0;
- $ifpriority = "";
- $ifpathcost = "";
- foreach ($ifacelist as $ifn => $ifdescr) {
- if ($_POST[$ifn] <> "") {
- if ($i > 0) {
- $ifpriority .= ",";
- }
- $ifpriority .= $ifn.":".$_POST[$ifn];
- }
- if ($_POST["{$ifn}0"] <> "") {
- if ($i > 0) {
- $ifpathcost .= ",";
- }
- $ifpathcost .= $ifn.":".$_POST["{$ifn}0"];
- }
- $i++;
- }
- $bridge['ifpriority'] = $ifpriority;
- $bridge['ifpathcost'] = $ifpathcost;
-
- if ($_POST['span'] != "none") {
- $bridge['span'] = $_POST['span'];
- } else {
- unset($bridge['span']);
- }
- if (isset($_POST['edge'])) {
- $bridge['edge'] = implode(',', $_POST['edge']);
- }
- if (isset($_POST['autoedge'])) {
- $bridge['autoedge'] = implode(',', $_POST['autoedge']);
- }
- if (isset($_POST['ptp'])) {
- $bridge['ptp'] = implode(',', $_POST['ptp']);
- }
- if (isset($_POST['autoptp'])) {
- $bridge['autoptp'] = implode(',', $_POST['autoptp']);
- }
-
- $bridge['bridgeif'] = $_POST['bridgeif'];
- interface_bridge_configure($bridge);
- if ($bridge['bridgeif'] == "" || !stristr($bridge['bridgeif'], "bridge")) {
- $input_errors[] = gettext("Error occurred creating interface, please retry.");
- } else {
- if (isset($id) && $a_bridges[$id]) {
- $a_bridges[$id] = $bridge;
- } else {
- $a_bridges[] = $bridge;
- }
-
- write_config();
-
- $confif = convert_real_interface_to_friendly_interface_name($bridge['bridgeif']);
- if ($confif <> "") {
- interface_configure($confif);
- }
-
- header("Location: interfaces_bridge.php");
- exit;
- }
- }
-}
-
-$pgtitle = array(gettext("Interfaces"), gettext("Bridge"), gettext("Edit"));
-$shortcut_section = "interfaces";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script type="text/javascript">
-//<![CDATA[
-function show_source_port_range() {
- document.getElementById("sprtable").style.display = 'none';
- document.getElementById("sprtable1").style.display = '';
- document.getElementById("sprtable2").style.display = '';
- document.getElementById("sprtable3").style.display = '';
- document.getElementById("sprtable4").style.display = '';
- document.getElementById("sprtable5").style.display = '';
- document.getElementById("sprtable6").style.display = '';
- document.getElementById("sprtable7").style.display = '';
- document.getElementById("sprtable8").style.display = '';
- document.getElementById("sprtable9").style.display = '';
- document.getElementById("sprtable10").style.display = '';
-}
-//]]>
-</script>
-
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php $size=count($ifacelist); ?>
-<form action="interfaces_bridge_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces bridge edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Bridge configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Member interfaces"); ?></td>
- <td width="78%" class="vtable">
- <select name="members[]" multiple="multiple" class="formselect" size="<?php echo $size; ?>">
- <?php
- $members_array = explode(',', $pconfig['members']);
- foreach ($ifacelist as $ifn => $ifinfo) {
- echo "<option value=\"{$ifn}\"";
- if (in_array($ifn, $members_array)) {
- echo " selected=\"selected\"";
- }
- echo ">{$ifinfo}</option>";
- }
- unset($members_array);
- ?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Interfaces participating in the bridge."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input type="text" name="descr" id="descr" class="formfld unknown" size="50" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- </td>
- </tr>
- <tr id="sprtable">
- <td></td>
- <td>
- <p><input type="button" onclick="show_source_port_range()" value="<?=gettext("Show advanced options"); ?>" /></p>
- </td>
- </tr>
- <tr style="display:none" id="sprtable1">
- <td valign="top" class="vncell" align="center"><?=gettext("RSTP/STP"); ?> </td>
- <td class="vtable">
- <input type="checkbox" name="enablestp" id="enablestp" <?php if ($pconfig['enablestp']) echo "checked=\"checked\"";?> />
- <span class="vexpl"><strong><?=gettext("Enable spanning tree options for this bridge."); ?> </strong></span>
- <br /><br />
- <table id="stpoptions" border="0" cellpadding="6" cellspacing="0" summary="protocol">
- <tr>
- <td valign="top" class="vncell" width="20%"><?=gettext("Protocol"); ?></td>
- <td class="vtable" width="80%">
- <select name="proto" id="proto">
- <?php
- foreach (array("rstp", "stp") as $proto) {
- echo "<option value=\"{$proto}\"";
- if ($pconfig['proto'] == $proto) {
- echo " selected=\"selected\"";
- }
- echo ">".strtoupper($proto)."</option>";
- }
- ?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Protocol used for spanning tree."); ?> </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell" width="20%"><?=gettext("STP interfaces"); ?></td>
- <td class="vtable" width="80%">
- <select name="stp[]" class="formselect" multiple="multiple" size="3">
- <?php
- foreach ($ifacelist as $ifn => $ifdescr) {
- echo "<option value=\"{$ifn}\"";
- if (stristr($pconfig['stp'], $ifn)) {
- echo " selected=\"selected\"";
- }
- echo ">{$ifdescr}</option>";
- }
- ?>
- </select>
- <br />
- <span class="vexpl" >
- <?=gettext("Enable Spanning Tree Protocol on interface. The if_bridge(4) " .
- "driver has support for the IEEE 802.1D Spanning Tree Protocol " .
- "(STP). STP is used to detect and remove loops in a " .
- "network topology."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell" width="20%"><?=gettext("Valid time"); ?></td>
- <td class="vtable" width="80%">
- <input name="maxage" type="text" class="formfld unknown" id="maxage" size="8" value="<?=htmlspecialchars($pconfig['maxage']);?>" /> <?=gettext("seconds"); ?>
- <br />
- <span class="vexpl">
- <?=gettext("Set the time that a Spanning Tree Protocol configuration is " .
- "valid. The default is 20 seconds. The minimum is 6 seconds and " .
- "the maximum is 40 seconds."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell" width="20%"><?=gettext("Forward time"); ?> </td>
- <td class="vtable" width="80%">
- <input name="fwdelay" type="text" class="formfld unknown" id="fwdelay" size="8" value="<?=htmlspecialchars($pconfig['fwdelay']);?>" /> <?=gettext("seconds"); ?>
- <br />
- <span class="vexpl">
- <?=gettext("Set the time that must pass before an interface begins forwarding " .
- "packets when Spanning Tree is enabled. The default is 15 seconds. The minimum is 4 seconds and the maximum is 30 seconds."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell" width="20%"><?=gettext("Hello time"); ?></td>
- <td class="vtable" width="80%">
- <input name="hellotime" type="text" class="formfld unknown" size="8" id="hellotime" value="<?=htmlspecialchars($pconfig['hellotime']);?>" /> <?=gettext("seconds"); ?>
- <br />
- <span class="vexpl">
- <?=gettext("Set the time between broadcasting of Spanning Tree Protocol configuration messages. The hello time may only be changed when " .
- "operating in legacy STP mode. The default is 2 seconds. The minimum is 1 second and the maximum is 2 seconds."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell" width="20%"><?=gettext("Priority"); ?></td>
- <td class="vtable" width="80%">
- <input name="priority" type="text" class="formfld unknown" id="priority" value="<?=htmlspecialchars($pconfig['priority']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Set the bridge priority for Spanning Tree. The default is 32768. " .
- "The minimum is 0 and the maximum is 61440."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell" width="20%"><?=gettext("Hold count"); ?></td>
- <td class="vtable" width="80%">
- <input name="holdcnt" type="text" class="formfld unknown" id="holdcnt" value="<?=htmlspecialchars($pconfig['holdcnt']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Set the transmit hold count for Spanning Tree. This is the number" .
- " of packets transmitted before being rate limited. The " .
- "default is 6. The minimum is 1 and the maximum is 10."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell" width="20%"><?=gettext("Priority"); ?></td>
- <td class="vtable" width="80%">
- <table summary="priority">
- <?php
- foreach ($ifacelist as $ifn => $ifdescr) {
- echo "<tr><td>{$ifdescr}</td><td><input size=\"5\" name=\"{$ifn}\" type=\"text\" class=\"formfld unknown\" id=\"{$ifn}\" value=\"{$ifpriority[$ifn]}\" /></td></tr>";
- }
- ?>
- <tr>
- <td></td>
- </tr>
- </table>
- <br />
- <span class="vexpl" >
- <?=gettext("Set the Spanning Tree priority of interface to value. The " .
- "default is 128. The minimum is 0 and the maximum is 240. Increments of 16."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell" width="20%"><?=gettext("Path cost"); ?></td>
- <td class="vtable" width="80%">
- <table summary="path cost">
- <?php
- $i = 0;
- foreach ($ifacelist as $ifn => $ifdescr) {
- echo "<tr><td>{$ifdescr}</td><td><input size=\"8\" name=\"{$ifn}{$i}\" type=\"text\" class=\"formfld unknown\" id=\"{$ifn}{$i}\" value=\"{$ifpathcost[$ifn]}\" /></td></tr>";
- }
- ?>
- <tr>
- <td></td>
- </tr>
- </table>
- <br />
- <span class="vexpl" >
- <?=gettext("Set the Spanning Tree path cost of interface to value. The " .
- "default is calculated from the link speed. To change a previously selected path cost back to automatic, set the cost to 0. ".
- "The minimum is 1 and the maximum is 200000000."); ?>
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr style="display:none" id="sprtable2">
- <td valign="top" class="vncell"><?=gettext("Cache size"); ?></td>
- <td class="vtable">
- <input name="maxaddr" size="10" type="text" class="formfld unknown" id="maxaddr" value="<?=htmlspecialchars($pconfig['maxaddr']);?>" /> <?=gettext("entries"); ?>
- <br />
- <span class="vexpl">
- <?=gettext("Set the size of the bridge address cache to size. The default is " .
- ".100 entries."); ?>
- </span>
- </td>
- </tr>
- <tr style="display:none" id="sprtable3">
- <td valign="top" class="vncell"><?=gettext("Cache entry expire time"); ?></td>
- <td>
- <input name="timeout" type="text" class="formfld unknown" id="timeout" size="10" value="<?=htmlspecialchars($pconfig['timeout']);?>" /> <?=gettext("seconds"); ?>
- <br />
- <span class="vexpl">
- <?=gettext("Set the timeout of address cache entries to this number of seconds. If " .
- "seconds is zero, then address cache entries will not be expired. " .
- "The default is 240 seconds."); ?>
- </span>
- </td>
- </tr>
- <tr style="display:none" id="sprtable4">
- <td valign="top" class="vncell"><?=gettext("Span port"); ?></td>
- <td class="vtable">
- <select name="span" class="formselect" id="span">
- <option value="none" selected="selected"><?=gettext("None"); ?></option>
- <?php
- foreach ($ifacelist as $ifn => $ifdescr) {
- echo "<option value=\"{$ifn}\"";
- if ($ifn == $pconfig['span']) {
- echo " selected=\"selected\"";
- }
- echo ">{$ifdescr}</option>";
- }
- ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Add the interface named by interface as a span port on the " .
- "bridge. Span ports transmit a copy of every frame received by " .
- "the bridge. This is most useful for snooping a bridged network " .
- "passively on another host connected to one of the span ports of " .
- "the bridge."); ?>
- </span>
- <p class="vexpl">
- <span class="red"><strong>
- <?=gettext("Note:"); ?><br />
- </strong></span>
- <?=gettext("The span interface cannot be part of the bridge member interfaces."); ?>
- </p>
- </td>
- </tr>
- <tr style="display:none" id="sprtable5">
- <td valign="top" class="vncell"><?=gettext("Edge ports"); ?></td>
- <td class="vtable">
- <select name="edge[]" class="formselect" multiple="multiple" size="3">
- <?php
- foreach ($ifacelist as $ifn => $ifdescr) {
- echo "<option value=\"{$ifn}\"";
- if (stristr($pconfig['edge'], $ifn)) {
- echo " selected=\"selected\"";
- }
- echo ">{$ifdescr}</option>";
- }
- ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Set interface as an edge port. An edge port connects directly to " .
- "end stations and cannot create bridging loops in the network; this " .
- "allows it to transition straight to forwarding."); ?>
- </span>
- </td>
- </tr>
- <tr style="display:none" id="sprtable6">
- <td valign="top" class="vncell"><?=gettext("Auto Edge ports"); ?></td>
- <td class="vtable">
- <select name="autoedge[]" class="formselect" multiple="multiple" size="3">
- <?php
- foreach ($ifacelist as $ifn => $ifdescr) {
- echo "<option value=\"{$ifn}\"";
- if (stristr($pconfig['autoedge'], $ifn)) {
- echo " selected=\"selected\"";
- }
- echo ">{$ifdescr}</option>";
- }
- ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Allow interface to automatically detect edge status. This is the " .
- "default for all interfaces added to a bridge."); ?>
- </span>
- <p class="vexpl">
- <span class="red"><strong>
- <?=gettext("Note:"); ?><br />
- </strong></span>
- <?=gettext("This will disable the autoedge status of interfaces."); ?>
- </p>
- </td>
- </tr>
- <tr style="display:none" id="sprtable7">
- <td valign="top" class="vncell"><?=gettext("PTP ports"); ?></td>
- <td class="vtable">
- <select name="ptp[]" class="formselect" multiple="multiple" size="3">
- <?php
- foreach ($ifacelist as $ifn => $ifdescr) {
- echo "<option value=\"{$ifn}\"";
- if (stristr($pconfig['ptp'], $ifn)) {
- echo " selected=\"selected\"";
- }
- echo ">{$ifdescr}</option>";
- }
- ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Set the interface as a point-to-point link. This is required for " .
- "straight transitions to forwarding and should be enabled on a " .
- "direct link to another RSTP-capable switch."); ?>
- </span>
- </td>
- </tr>
- <tr style="display:none" id="sprtable8">
- <td valign="top" class="vncell"><?=gettext("Auto PTP ports"); ?></td>
- <td class="vtable">
- <select name="autoptp[]" class="formselect" multiple="multiple" size="3">
- <?php
- foreach ($ifacelist as $ifn => $ifdescr) {
- echo "<option value=\"{$ifn}\"";
- if (stristr($pconfig['autoptp'], $ifn)) {
- echo " selected=\"selected\"";
- }
- echo ">{$ifdescr}</option>";
- }
- ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Automatically detect the point-to-point status on interface by " .
- "checking the full duplex link status. This is the default for " .
- "interfaces added to the bridge."); ?>
- </span>
- <p class="vexpl">
- <span class="red"><strong>
- <?=gettext("Note:"); ?><br />
- </strong></span>
- <?=gettext("The interfaces selected here will be removed from default autoedge status."); ?>
- </p>
- </td>
- </tr>
- <tr style="display:none" id="sprtable9">
- <td valign="top" class="vncell"><?=gettext("Sticky ports"); ?></td>
- <td class="vtable">
- <select name="static[]" class="formselect" multiple="multiple" size="3">
- <?php
- foreach ($ifacelist as $ifn => $ifdescr) {
- echo "<option value=\"{$ifn}\"";
- if (stristr($pconfig['static'], $ifn)) {
- echo " selected=\"selected\"";
- }
- echo ">{$ifdescr}</option>";
- }
- ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Mark an interface as a \"sticky\" interface. Dynamically learned " .
- "address entries are treated as static once entered into the " .
- "cache. Sticky entries are never aged out of the cache or " .
- "replaced, even if the address is seen on a different interface."); ?>
- </span>
- </td>
- </tr>
- <tr style="display:none" id="sprtable10">
- <td valign="top" class="vncell"><?=gettext("Private ports"); ?></td>
- <td class="vtable">
- <select name="private[]" class="formselect" multiple="multiple" size="3">
- <?php
- foreach ($ifacelist as $ifn => $ifdescr) {
- echo "<option value=\"{$ifn}\"";
- if (stristr($pconfig['private'], $ifn)) {
- echo " selected=\"selected\"";
- }
- echo ">{$ifdescr}</option>";
- }
- ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Mark an interface as a \"private\" interface. A private interface does not forward any traffic to any other port that is also " .
- "a private interface."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input type="hidden" name="bridgeif" value="<?=htmlspecialchars($pconfig['bridgeif']); ?>" />
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_bridges[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_gif.php b/usr/local/www/interfaces_gif.php
deleted file mode 100644
index 0730090..0000000
--- a/usr/local/www/interfaces_gif.php
+++ /dev/null
@@ -1,162 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_gif.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2008 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ifconfig
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-gif
-##|*NAME=Interfaces: GIF page
-##|*DESCR=Allow access to the 'Interfaces: GIF' page.
-##|*MATCH=interfaces_gif.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (!is_array($config['gifs']['gif'])) {
- $config['gifs']['gif'] = array();
-}
-
-$a_gifs = &$config['gifs']['gif'] ;
-
-function gif_inuse($num) {
- global $config, $a_gifs;
-
- $iflist = get_configured_interface_list(false, true);
- foreach ($iflist as $if) {
- if ($config['interfaces'][$if]['if'] == $a_gifs[$num]['gifif']) {
- return true;
- }
- }
-
- return false;
-}
-
-if ($_GET['act'] == "del") {
- if (!isset($_GET['id'])) {
- $input_errors[] = gettext("Wrong parameters supplied");
- } else if (empty($a_gifs[$_GET['id']])) {
- $input_errors[] = gettext("Wrong index supplied");
- /* check if still in use */
- } else if (gif_inuse($_GET['id'])) {
- $input_errors[] = gettext("This gif TUNNEL cannot be deleted because it is still being used as an interface.");
- } else {
- mwexec("/sbin/ifconfig " . $a_gifs[$_GET['id']]['gifif'] . " destroy");
- unset($a_gifs[$_GET['id']]);
-
- write_config();
-
- header("Location: interfaces_gif.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Interfaces"), gettext("GIF"));
-$shortcut_section = "interfaces";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces gif">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
- $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
- $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
- $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
- $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
- $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
- $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
- $tab_array[7] = array(gettext("GIF"), true, "interfaces_gif.php");
- $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
- $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="20%" class="listhdrr"><?=gettext("Interface"); ?></td>
- <td width="20%" class="listhdrr"><?=gettext("Tunnel to..."); ?></td>
- <td width="50%" class="listhdr"><?=gettext("Description"); ?></td>
- <td width="10%" class="list"></td>
- </tr>
- <?php
- $i = 0;
- foreach ($a_gifs as $gif):
- ?>
- <tr ondblclick="document.location='interfaces_gif_edit.php?id=<?=$i;?>'">
- <td class="listlr">
- <?=htmlspecialchars(convert_friendly_interface_to_friendly_descr($gif['if']));?>
- </td>
- <td class="listr">
- <?=htmlspecialchars($gif['remote-addr']);?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($gif['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap"> <a href="interfaces_gif_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
- &nbsp;<a href="interfaces_gif.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this gif tunnel?"); ?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
- <?php
- $i++;
- endforeach;
- ?>
- <tr>
- <td class="list" colspan="3">&nbsp;</td>
- <td class="list"> <a href="interfaces_gif_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- <tr>
- <td colspan="3" class="list"><p class="vexpl"><span class="red"><strong>
- <?=gettext("Note:"); ?><br />
- </strong></span>
- <?=gettext("GIF tunnels are configured here."); ?>
- <br /><br />
- <?php echo gettext("If you are using a GIF tunnel to connect to a Hurricane Electric (he.net) Tunnel Broker on a WAN with a dynamic IP, you may want to add a"); ?> <a href="services_dyndns.php"><?php echo gettext("HE.net Tunnelbroker type DynDNS Entry"); ?></a> <?php echo gettext("to keep your tunnel functional when your IP changes."); ?></p>
- </td>
- <td class="list">&nbsp;</td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_gif_edit.php b/usr/local/www/interfaces_gif_edit.php
deleted file mode 100644
index 2870c79..0000000
--- a/usr/local/www/interfaces_gif_edit.php
+++ /dev/null
@@ -1,272 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_gif_edit.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2008 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-gif-edit
-##|*NAME=Interfaces: GIF: Edit page
-##|*DESCR=Allow access to the 'Interfaces: GIF: Edit' page.
-##|*MATCH=interfaces_gif_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_gif.php');
-}
-
-if (!is_array($config['gifs']['gif'])) {
- $config['gifs']['gif'] = array();
-}
-
-$a_gifs = &$config['gifs']['gif'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_gifs[$id]) {
- $pconfig['if'] = $a_gifs[$id]['if'];
- if (!empty($a_gifs[$id]['ipaddr'])) {
- $pconfig['if'] = $pconfig['if'] . '|' . $a_gifs[$id]['ipaddr'];
- }
- $pconfig['gifif'] = $a_gifs[$id]['gifif'];
- $pconfig['remote-addr'] = $a_gifs[$id]['remote-addr'];
- $pconfig['tunnel-remote-net'] = $a_gifs[$id]['tunnel-remote-net'];
- $pconfig['tunnel-local-addr'] = $a_gifs[$id]['tunnel-local-addr'];
- $pconfig['tunnel-remote-addr'] = $a_gifs[$id]['tunnel-remote-addr'];
- $pconfig['link1'] = isset($a_gifs[$id]['link1']);
- $pconfig['link0'] = isset($a_gifs[$id]['link0']);
- $pconfig['descr'] = $a_gifs[$id]['descr'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "if remote-addr tunnel-local-addr tunnel-remote-addr tunnel-remote-net");
- $reqdfieldsn = array(gettext("Parent interface"), gettext("gif remote address"), gettext("gif tunnel local address"), gettext("gif tunnel remote address"), gettext("gif tunnel remote netmask"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if ((!is_ipaddr($_POST['tunnel-local-addr'])) ||
- (!is_ipaddr($_POST['tunnel-remote-addr'])) ||
- (!is_ipaddr($_POST['remote-addr']))) {
- $input_errors[] = gettext("The tunnel local and tunnel remote fields must have valid IP addresses.");
- }
-
- $alias = strstr($_POST['if'], '|');
- if ((is_ipaddrv4($alias) && !is_ipaddrv4($_POST['remote-addr'])) ||
- (is_ipaddrv6($alias) && !is_ipaddrv6($_POST['remote-addr']))) {
- $input_errors[] = gettext("The alias IP address family has to match the family of the remote peer address.");
- }
-
- foreach ($a_gifs as $gif) {
- if (isset($id) && ($a_gifs[$id]) && ($a_gifs[$id] === $gif)) {
- continue;
- }
-
- /* FIXME: needs to perform proper subnet checks in the future */
- if (($gif['if'] == $interface) && ($gif['tunnel-remote-addr'] == $_POST['tunnel-remote-addr'])) {
- $input_errors[] = sprintf(gettext("A gif with the network %s is already defined."), $gif['tunnel-remote-addr']);
- break;
- }
- }
-
- if (!$input_errors) {
- $gif = array();
- list($gif['if'], $gif['ipaddr']) = explode("|", $_POST['if']);
- $gif['tunnel-local-addr'] = $_POST['tunnel-local-addr'];
- $gif['tunnel-remote-addr'] = $_POST['tunnel-remote-addr'];
- $gif['tunnel-remote-net'] = $_POST['tunnel-remote-net'];
- $gif['remote-addr'] = $_POST['remote-addr'];
- $gif['descr'] = $_POST['descr'];
- $gif['link1'] = isset($_POST['link1']);
- $gif['link0'] = isset($_POST['link0']);
- $gif['gifif'] = $_POST['gifif'];
-
- $gif['gifif'] = interface_gif_configure($gif);
- if ($gif['gifif'] == "" || !stristr($gif['gifif'], "gif")) {
- $input_errors[] = gettext("Error occurred creating interface, please retry.");
- } else {
- if (isset($id) && $a_gifs[$id]) {
- $a_gifs[$id] = $gif;
- } else {
- $a_gifs[] = $gif;
- }
-
- write_config();
-
- $confif = convert_real_interface_to_friendly_interface_name($gif['gifif']);
- if ($confif <> "") {
- interface_configure($confif);
- }
-
- header("Location: interfaces_gif.php");
- exit;
- }
- }
-}
-
-$pgtitle = array(gettext("Interfaces"), gettext("GIF"), gettext("Edit"));
-$shortcut_section = "interfaces";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="interfaces_gif_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces gif edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("GIF configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Parent interface"); ?></td>
- <td width="78%" class="vtable">
- <select name="if" class="formselect">
- <?php
- $portlist = get_possible_listen_ips();
- foreach ($portlist as $ifn => $ifinfo) {
- echo "<option value=\"{$ifn}\"";
- if ($ifn == $pconfig['if']) {
- echo " selected=\"selected\"";
- }
- echo ">" . htmlspecialchars($ifinfo) . "</option>\n";
- }
- ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("The interface here serves as the local address to be used for the gif tunnel."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("gif remote address"); ?></td>
- <td class="vtable">
- <input name="remote-addr" type="text" class="formfld unknown" id="remote-addr" size="24" value="<?=htmlspecialchars($pconfig['remote-addr']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Peer address where encapsulated gif packets will be sent. "); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("gif tunnel local address"); ?></td>
- <td class="vtable">
- <input name="tunnel-local-addr" type="text" class="formfld unknown" id="tunnel-local-addr" size="24" value="<?=htmlspecialchars($pconfig['tunnel-local-addr']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Local gif tunnel endpoint"); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("gif tunnel remote address "); ?></td>
- <td class="vtable">
- <input name="tunnel-remote-addr" type="text" class="formfld unknown ipv4v6" id="tunnel-remote-addr" size="24" value="<?=htmlspecialchars($pconfig['tunnel-remote-addr']);?>" />
- <select name="tunnel-remote-net" class="formselect ipv4v6" id="tunnel-remote-net">
- <?php
- for ($i = 128; $i > 0; $i--) {
- echo "<option value=\"{$i}\"";
- if ($i == $pconfig['tunnel-remote-net']) {
- echo " selected=\"selected\"";
- }
- echo ">" . $i . "</option>";
- }
- ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Remote gif address endpoint. The subnet part is used for determining the network that is tunnelled."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Route caching "); ?></td>
- <td class="vtable">
- <input name="link0" type="checkbox" id="link0" <?if ($pconfig['link0']) echo "checked=\"checked\"";?> />
- <br />
- <span class="vexpl">
- <?=gettext("Specify if route caching can be enabled. Be careful with these settings on dynamic networks. "); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("ECN friendly behavior"); ?></td>
- <td class="vtable">
- <input name="link1" type="checkbox" id="link1" <?if ($pconfig['link1']) echo "checked=\"checked\"";?> />
- <br />
- <span class="vexpl">
- <?=gettext("Note that the ECN friendly behavior violates RFC2893. This should be " .
- "used in mutual agreement with the peer."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed)."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input type="hidden" name="gifif" value="<?=htmlspecialchars($pconfig['gifif']); ?>" />
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_gifs[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_gre.php b/usr/local/www/interfaces_gre.php
deleted file mode 100644
index 3431987..0000000
--- a/usr/local/www/interfaces_gre.php
+++ /dev/null
@@ -1,158 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_gre.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2008 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ifconfig
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-gre
-##|*NAME=Interfaces: GRE page
-##|*DESCR=Allow access to the 'Interfaces: GRE' page.
-##|*MATCH=interfaces_gre.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-
-if (!is_array($config['gres']['gre'])) {
- $config['gres']['gre'] = array();
-}
-
-$a_gres = &$config['gres']['gre'] ;
-
-function gre_inuse($num) {
- global $config, $a_gres;
-
- $iflist = get_configured_interface_list(false, true);
- foreach ($iflist as $if) {
- if ($config['interfaces'][$if]['if'] == $a_gres[$num]['greif']) {
- return true;
- }
- }
-
- return false;
-}
-
-if ($_GET['act'] == "del") {
- if (!isset($_GET['id'])) {
- $input_errors[] = gettext("Wrong parameters supplied");
- } else if (empty($a_gres[$_GET['id']])) {
- $input_errors[] = gettext("Wrong index supplied");
- /* check if still in use */
- } else if (gre_inuse($_GET['id'])) {
- $input_errors[] = gettext("This GRE tunnel cannot be deleted because it is still being used as an interface.");
- } else {
- mwexec("/sbin/ifconfig " . $a_gres[$_GET['id']]['greif'] . " destroy");
- unset($a_gres[$_GET['id']]);
-
- write_config();
-
- header("Location: interfaces_gre.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Interfaces"), gettext("GRE"));
-$shortcut_section = "interfaces";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces gre">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
- $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
- $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
- $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
- $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
- $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
- $tab_array[6] = array(gettext("GRE"), true, "interfaces_gre.php");
- $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
- $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
- $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="20%" class="listhdrr"><?=gettext("Interface");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Tunnel to...");?></td>
- <td width="50%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list"></td>
- </tr>
- <?php
- $i = 0;
- foreach ($a_gres as $gre):
- ?>
- <tr ondblclick="document.location='interfaces_gre_edit.php?id=<?=$i;?>'">
- <td class="listlr">
- <?=htmlspecialchars(convert_friendly_interface_to_friendly_descr($gre['if']));?>
- </td>
- <td class="listr">
- <?=htmlspecialchars($gre['remote-addr']);?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($gre['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap"> <a href="interfaces_gre_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
- &nbsp;<a href="interfaces_gre.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this GRE tunnel?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
- <?php
- $i++;
- endforeach;
- ?>
- <tr>
- <td class="list" colspan="3">&nbsp;</td>
- <td class="list"> <a href="interfaces_gre_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- <tr>
- <td class="tabcont" colspan="3">
- <p><span class="vexpl"><span class="red"><strong><?=gettext("Note:");?><br /></strong></span><?=gettext("Here you can configure Generic Routing Encapsulation (GRE - RFC 2784) tunnels.");?></span></p>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_gre_edit.php b/usr/local/www/interfaces_gre_edit.php
deleted file mode 100644
index a6cde04..0000000
--- a/usr/local/www/interfaces_gre_edit.php
+++ /dev/null
@@ -1,262 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_gre_edit.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2008 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-gre-edit
-##|*NAME=Interfaces: GRE: Edit page
-##|*DESCR=Allow access to the 'Interfaces: GRE: Edit' page.
-##|*MATCH=interfaces_gre_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_gre.php');
-}
-
-if (!is_array($config['gres']['gre'])) {
- $config['gres']['gre'] = array();
-}
-
-$a_gres = &$config['gres']['gre'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_gres[$id]) {
- $pconfig['if'] = $a_gres[$id]['if'];
- $pconfig['greif'] = $a_gres[$id]['greif'];
- $pconfig['remote-addr'] = $a_gres[$id]['remote-addr'];
- $pconfig['tunnel-remote-net'] = $a_gres[$id]['tunnel-remote-net'];
- $pconfig['tunnel-local-addr'] = $a_gres[$id]['tunnel-local-addr'];
- $pconfig['tunnel-remote-addr'] = $a_gres[$id]['tunnel-remote-addr'];
- $pconfig['link1'] = isset($a_gres[$id]['link1']);
- $pconfig['link2'] = isset($a_gres[$id]['link2']);
- $pconfig['link0'] = isset($a_gres[$id]['link0']);
- $pconfig['descr'] = $a_gres[$id]['descr'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "if remote-addr tunnel-local-addr tunnel-remote-addr tunnel-remote-net");
- $reqdfieldsn = array(gettext("Parent interface"), gettext("Remote tunnel endpoint IP address"), gettext("Local tunnel IP address"), gettext("Remote tunnel IP address"), gettext("Remote tunnel network"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if ((!is_ipaddr($_POST['tunnel-local-addr'])) ||
- (!is_ipaddr($_POST['tunnel-remote-addr'])) ||
- (!is_ipaddr($_POST['remote-addr']))) {
- $input_errors[] = gettext("The tunnel local and tunnel remote fields must have valid IP addresses.");
- }
-
- foreach ($a_gres as $gre) {
- if (isset($id) && ($a_gres[$id]) && ($a_gres[$id] === $gre)) {
- continue;
- }
-
- if (($gre['if'] == $_POST['if']) && ($gre['tunnel-remote-addr'] == $_POST['tunnel-remote-addr'])) {
- $input_errors[] = sprintf(gettext("A GRE tunnel with the network %s is already defined."), $gre['remote-network']);
- break;
- }
- }
-
- if (!$input_errors) {
- $gre = array();
- $gre['if'] = $_POST['if'];
- $gre['tunnel-local-addr'] = $_POST['tunnel-local-addr'];
- $gre['tunnel-remote-addr'] = $_POST['tunnel-remote-addr'];
- $gre['tunnel-remote-net'] = $_POST['tunnel-remote-net'];
- $gre['remote-addr'] = $_POST['remote-addr'];
- $gre['descr'] = $_POST['descr'];
- $gre['link1'] = isset($_POST['link1']);
- $gre['link2'] = isset($_POST['link2']);
- $gre['link0'] = isset($_POST['link0']);
- $gre['greif'] = $_POST['greif'];
-
- $gre['greif'] = interface_gre_configure($gre);
- if ($gre['greif'] == "" || !stristr($gre['greif'], "gre")) {
- $input_errors[] = gettext("Error occurred creating interface, please retry.");
- } else {
- if (isset($id) && $a_gres[$id]) {
- $a_gres[$id] = $gre;
- } else {
- $a_gres[] = $gre;
- }
-
- write_config();
-
- $confif = convert_real_interface_to_friendly_interface_name($gre['greif']);
- if ($confif <> "") {
- interface_configure($confif);
- }
-
- header("Location: interfaces_gre.php");
- exit;
- }
- }
-}
-
-$pgtitle = array(gettext("Interfaces"), gettext("GRE"), gettext("Edit"));
-$shortcut_section = "interfaces";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="interfaces_gre_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces gre edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("GRE configuration");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Parent interface");?></td>
- <td width="78%" class="vtable">
- <select name="if" class="formselect">
- <?php
- $portlist = get_possible_listen_ips();
- foreach ($portlist as $ifn => $ifinfo) {
- echo "<option value=\"{$ifn}\"";
- if ($ifn == $pconfig['if']) {
- echo " selected=\"selected\"";
- }
- echo ">" . htmlspecialchars($ifinfo) . "</option>\n";
- }
- ?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("The interface here serves as the local address to be used for the GRE tunnel.");?></span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Remote tunnel endpoint IP address");?></td>
- <td class="vtable">
- <input name="remote-addr" type="text" class="formfld unknown" id="remote-addr" size="16" value="<?=htmlspecialchars($pconfig['remote-addr']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Peer address where encapsulated GRE packets will be sent ");?></span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Local tunnel IP address ");?></td>
- <td class="vtable">
- <input name="tunnel-local-addr" type="text" class="formfld unknown" id="tunnel-local-addr" size="16" value="<?=htmlspecialchars($pconfig['tunnel-local-addr']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Local IP address assigned inside this tunnel");?></span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Remote tunnel IP address ");?></td>
- <td class="vtable">
- <input name="tunnel-remote-addr" type="text" class="formfld unknown ipv4v6" id="tunnel-remote-addr" size="16" value="<?=htmlspecialchars($pconfig['tunnel-remote-addr']);?>" />
- <select name="tunnel-remote-net" class="formselect ipv4v6" id="tunnel-remote-net">
- <?php
- for ($i = 128; $i > 0; $i--) {
- echo "<option value=\"{$i}\"";
- if ($i == $pconfig['tunnel-remote-net']) {
- echo " selected=\"selected\"";
- }
- echo ">" . $i . "</option>";
- }
- ?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("IP address inside this tunnel on the remote end. The subnet part is used for the determining the network that is tunneled.");?></span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Mobile encapsulation");?></td>
- <td class="vtable">
- <input name="link0" type="checkbox" id="link0" <?if ($pconfig['link0']) echo "checked=\"checked\"";?> />
- <br />
- <span class="vexpl"><?=gettext("Check this box to use mobile encapsulation (IP protocol 55, RFC 2004). When unchecked, uses GRE encapsulation (IP protocol 47, RFCs 1701, 1702).");?></span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Route search type");?></td>
- <td class="vtable">
- <input name="link1" type="checkbox" id="link1" <?if ($pconfig['link1']) echo "checked=\"checked\"";?> />
- <br />
- <span class="vexpl">
- <?=gettext("For correct operation, the GRE device needs a route to the destination".
- " that is less specific than the one over the tunnel. (Basically, there".
- " needs to be a route to the decapsulating host that does not run over the".
- " tunnel, as this would be a loop.");?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("WCCP version");?></td>
- <td class="vtable">
- <input name="link2" type="checkbox" id="link2" <?if ($pconfig['link2']) echo "checked=\"checked\"";?> />
- <br />
- <span class="vexpl"><?=gettext("Check this box for WCCP encapsulation version 2, or leave unchecked for version 1.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br /> <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input type="hidden" name="greif" value="<?=htmlspecialchars($pconfig['greif']); ?>" />
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_gres[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_groups.php b/usr/local/www/interfaces_groups.php
deleted file mode 100644
index 6342bcf..0000000
--- a/usr/local/www/interfaces_groups.php
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-/*
- interfaces_groups.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2009 Ermal Luçi
- Copyright (C) 2004 Scott Ullrich
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ifconfig
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-groups
-##|*NAME=Interfaces: Groups page
-##|*DESCR=Create interface groups
-##|*MATCH=interfaces_groups.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-
-if (!is_array($config['ifgroups']['ifgroupentry'])) {
- $config['ifgroups']['ifgroupentry'] = array();
-}
-
-$a_ifgroups = &$config['ifgroups']['ifgroupentry'];
-
-if ($_GET['act'] == "del") {
- if ($a_ifgroups[$_GET['id']]) {
- $members = explode(" ", $a_ifgroups[$_GET['id']]['members']);
- foreach ($members as $ifs) {
- $realif = get_real_interface($ifs);
- if ($realif) {
- mwexec("/sbin/ifconfig {$realif} -group " . $a_ifgroups[$_GET['id']]['ifname']);
- }
- }
- unset($a_ifgroups[$_GET['id']]);
- write_config();
- header("Location: interfaces_groups.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Interfaces"), gettext("Groups"));
-$shortcut_section = "interfaces";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces groups">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
- $tab_array[1] = array(gettext("Interface Groups"), true, "interfaces_groups.php");
- $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
- $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
- $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
- $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
- $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
- $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
- $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
- $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="15%" class="listhdrr"><?=gettext("Name");?></td>
- <td width="35%" class="listhdrr"><?=gettext("Members");?></td>
- <td width="25%" class="listhdr"><?=gettext("Description");?></td>
- <td width="5%" class="list"></td>
- </tr>
-<?php
- if (count ($a_ifgroups)):
- $i = 0;
- foreach ($a_ifgroups as $ifgroupentry):
-?>
- <tr>
- <td class="listlr" ondblclick="document.location='interfaces_groups_edit.php?id=<?=$i;?>';">
- <a href="/firewall_rules.php?if=<?=htmlspecialchars($ifgroupentry['ifname']);?>"><?=htmlspecialchars($ifgroupentry['ifname']);?></a>
- </td>
- <td class="listr" ondblclick="document.location='interfaces_groups_edit.php?id=<?=$i;?>';">
-<?php
- $members_arr = explode(" ", $ifgroupentry['members']);
- $iflist = get_configured_interface_with_descr(false, true);
- $memberses_arr = array();
- foreach ($members_arr as $memb) {
- $memberses_arr[] = $iflist[$memb] ? $iflist[$memb] : $memb;
- }
- unset($iflist);
- $memberses = implode(", ", $memberses_arr);
- echo $memberses;
- if (count($members_arr) < 10) {
- echo " ";
- } else {
- echo "...";
- }
-?>
- </td>
- <td class="listbg" ondblclick="document.location='interfaces_groups_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($ifgroupentry['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle"><a href="interfaces_groups_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit group");?>" alt="edit" /></a></td>
- <td><a href="interfaces_groups.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this group? All elements that still use it will become invalid (e.g. filter rules)!");?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete ifgroupentry");?>" alt="delete" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
- endif;
-?>
- <tr>
- <td class="list" colspan="3"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td valign="middle" width="17">&nbsp;</td>
- <td valign="middle"><a href="interfaces_groups_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new group");?>" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td class="tabcont" colspan="3">
- <p><span class="vexpl"><span class="red"><strong><?=gettext("Note:");?><br /></strong></span><?=gettext("Interface Groups allow you to create rules that apply to multiple interfaces without duplicating the rules. If you remove members from an interface group, the group rules no longer apply to that interface.");?></span></p>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_groups_edit.php b/usr/local/www/interfaces_groups_edit.php
deleted file mode 100644
index 22b8567..0000000
--- a/usr/local/www/interfaces_groups_edit.php
+++ /dev/null
@@ -1,378 +0,0 @@
-<?php
-/*
- interfaces_groups_edit.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2009 Ermal Luçi
- Copyright (C) 2004 Scott Ullrich
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ifconfig
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-groups-edit
-##|*NAME=Interfaces: Groups: Edit page
-##|*DESCR=Allow access to the 'Interfaces: Groups: Edit' page.
-##|*MATCH=interfaces_groups_edit.php*
-##|-PRIV
-
-
-require("guiconfig.inc");
-require_once("functions.inc");
-
-$pgtitle = array(gettext("Interfaces"), gettext("Groups"), gettext("Edit"));
-$shortcut_section = "interfaces";
-
-if (!is_array($config['ifgroups']['ifgroupentry'])) {
- $config['ifgroups']['ifgroupentry'] = array();
-}
-
-$a_ifgroups = &$config['ifgroups']['ifgroupentry'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_ifgroups[$id]) {
- $pconfig['ifname'] = $a_ifgroups[$id]['ifname'];
- $pconfig['members'] = $a_ifgroups[$id]['members'];
- $pconfig['descr'] = html_entity_decode($a_ifgroups[$id]['descr']);
-}
-
-$iflist = get_configured_interface_with_descr();
-$iflist_disabled = get_configured_interface_with_descr(false, true);
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- if (!isset($id)) {
- foreach ($a_ifgroups as $groupentry) {
- if ($groupentry['ifname'] == $_POST['ifname']) {
- $input_errors[] = gettext("Group name already exists!");
- }
- }
- }
- if (preg_match("/([^a-zA-Z])+/", $_POST['ifname'], $match)) {
- $input_errors[] = gettext("Only letters A-Z are allowed as the group name.");
- }
-
- foreach ($iflist as $gif => $gdescr) {
- if ($gdescr == $_POST['ifname'] || $gif == $_POST['ifname']) {
- $input_errors[] = "The specified group name is already used by an interface. Please choose another name.";
- }
- }
- $members = "";
- $isfirst = 0;
- /* item is a normal ifgroupentry type */
- for ($x = 0; $x < 9999; $x++) {
- if ($_POST["members{$x}"] <> "") {
- if ($isfirst > 0) {
- $members .= " ";
- }
- $members .= $_POST["members{$x}"];
- $isfirst++;
- }
- }
-
- if (!$input_errors) {
- $ifgroupentry = array();
- $ifgroupentry['members'] = $members;
- $ifgroupentry['descr'] = $_POST['descr'];
-
- if (isset($id) && $a_ifgroups[$id] && $_POST['ifname'] != $a_ifgroups[$id]['ifname']) {
- if (!empty($config['filter']) && is_array($config['filter']['rule'])) {
- foreach ($config['filter']['rule'] as $ridx => $rule) {
- if (isset($rule['floating'])) {
- $rule_ifs = explode(",", $rule['interface']);
- $rule_changed = false;
- foreach ($rule_ifs as $rule_if_id => $rule_if) {
- if ($rule_if == $a_ifgroups[$id]['ifname']) {
- $rule_ifs[$rule_if_id] = $_POST['ifname'];
- $rule_changed = true;
- }
- }
- if ($rule_changed) {
- $config['filter']['rule'][$ridx]['interface'] = implode(",", $rule_ifs);
- }
- } else {
- if ($rule['interface'] == $a_ifgroups[$id]['ifname']) {
- $config['filter']['rule'][$ridx]['interface'] = $_POST['ifname'];
- }
- }
- }
- }
- if (!empty($config['nat']) && is_array($config['nat']['rule'])) {
- foreach ($config['nat']['rule'] as $ridx => $rule) {
- if ($rule['interface'] == $a_ifgroups[$id]['ifname']) {
- $config['nat']['rule'][$ridx]['interface'] = $_POST['ifname'];
- }
- }
- }
- $omembers = explode(" ", $a_ifgroups[$id]['members']);
- if (count($omembers) > 0) {
- foreach ($omembers as $ifs) {
- $realif = get_real_interface($ifs);
- if ($realif) {
- mwexec("/sbin/ifconfig {$realif} -group " . $a_ifgroups[$id]['ifname']);
- }
- }
- }
- $ifgroupentry['ifname'] = $_POST['ifname'];
- $a_ifgroups[$id] = $ifgroupentry;
- } else if (isset($id) && $a_ifgroups[$id]) {
- $omembers = explode(" ", $a_ifgroups[$id]['members']);
- $nmembers = explode(" ", $members);
- $delmembers = array_diff($omembers, $nmembers);
- if (count($delmembers) > 0) {
- foreach ($delmembers as $ifs) {
- $realif = get_real_interface($ifs);
- if ($realif) {
- mwexec("/sbin/ifconfig {$realif} -group " . $a_ifgroups[$id]['ifname']);
- }
- }
- }
- $ifgroupentry['ifname'] = $_POST['ifname'];
- $a_ifgroups[$id] = $ifgroupentry;
- } else {
- $ifgroupentry['ifname'] = $_POST['ifname'];
- $a_ifgroups[] = $ifgroupentry;
- }
-
- write_config();
-
- interface_group_setup($ifgroupentry);
-
- header("Location: interfaces_groups.php");
- exit;
- } else {
- $pconfig['descr'] = $_POST['descr'];
- $pconfig['members'] = $members;
- }
-}
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
-// Global Variables
-var rowname = new Array(9999);
-var rowtype = new Array(9999);
-var newrow = new Array(9999);
-var rowsize = new Array(9999);
-
-for (i = 0; i < 9999; i++) {
- rowname[i] = '';
- rowtype[i] = 'select';
- newrow[i] = '';
- rowsize[i] = '30';
-}
-
-var field_counter_js = 0;
-var loaded = 0;
-var is_streaming_progress_bar = 0;
-var temp_streaming_text = "";
-
-var addRowTo = (function() {
- return (function (tableId) {
- var d, tbody, tr, td, bgc, i, ii, j;
- d = document;
- tbody = d.getElementById(tableId).getElementsByTagName("tbody").item(0);
- tr = d.createElement("tr");
- for (i = 0; i < field_counter_js; i++) {
- td = d.createElement("td");
- <?php
- $innerHTML="\"<input type='hidden' value='\" + totalrows +\"' name='\" + rowname[i] + \"_row-\" + totalrows + \"' /><select size='1' name='\" + rowname[i] + totalrows + \"'>\" +\"";
-
- foreach ($iflist as $ifnam => $ifdescr) {
- $innerHTML .= "<option value='{$ifnam}'>{$ifdescr}<\/option>";
- }
- $innerHTML .= "<\/select>\";";
- ?>
- td.innerHTML=<?=$innerHTML;?>
- tr.appendChild(td);
- }
- td = d.createElement("td");
- td.rowSpan = "1";
-
- td.innerHTML = '<a onclick="removeRow(this);return false;" href="#"><img border="0" src="/themes/' + theme + '/images/icons/icon_x.gif" alt="remove" /><\/a>';
- tr.appendChild(td);
- tbody.appendChild(tr);
- totalrows++;
- });
-})();
-
-function removeRow(el) {
- var cel;
- while (el && el.nodeName.toLowerCase() != "tr") {
- el = el.parentNode;
- }
-
- if (el && el.parentNode) {
- cel = el.getElementsByTagName("td").item(0);
- el.parentNode.removeChild(el);
- }
-}
-
- rowname[0] = "members";
- rowtype[0] = "textbox";
- rowsize[0] = "30";
-
- rowname[2] = "detail";
- rowtype[2] = "textbox";
- rowsize[2] = "50";
-//]]>
-</script>
-<input type='hidden' name='members_type' value='textbox' class="formfld unknown" />
-
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<div id="inputerrors"></div>
-
-<form action="interfaces_groups_edit.php" method="post" name="iform" id="iform">
-<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces groups edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Interface Groups Edit");?></td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Group Name");?></td>
- <td class="vtable">
- <input class="formfld unknown" name="ifname" id="ifname" maxlength="15" value="<?=htmlspecialchars($pconfig['ifname']);?>" />
- <br />
- <?=gettext("No numbers or spaces are allowed. Only characters in a-zA-Z");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed).");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><div id="membersnetworkport"><?=gettext("Member (s)");?></div></td>
- <td width="78%" class="vtable">
- <table id="maintable" summary="main table">
- <tbody>
- <tr>
- <td>
- <div id="onecolumn"><?=gettext("Interface");?></div>
- </td>
- </tr>
-<?php
- $counter = 0;
- $members = $pconfig['members'];
- if ($members <> "") {
- $item = explode(" ", $members);
- foreach ($item as $ww) {
- $members = $item[$counter];
- $tracker = $counter;
-?>
- <tr>
- <td class="vtable">
- <select name="members<?php echo $tracker; ?>" class="formselect" id="members<?php echo $tracker; ?>">
-<?php
- $found = false;
- foreach ($iflist as $ifnam => $ifdescr) {
- echo "<option value=\"{$ifnam}\"";
- if ($ifnam == $members) {
- $found = true;
- echo " selected=\"selected\"";
- }
- echo ">{$ifdescr}</option>";
- }
-
- if ($found === false) {
- foreach ($iflist_disabled as $ifnam => $ifdescr) {
- if ($ifnam == $members) {
- echo "<option value=\"{$ifnam}\" selected=\"selected\">{$ifdescr}</option>";
- }
- }
- }
-?>
- </select>
- </td>
- <td>
- <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="remove" /></a>
- </td>
- </tr>
-<?php
- $counter++;
- } // end foreach
- } // end if
-?>
- </tbody>
- </table>
- <a onclick="javascript:addRowTo('maintable'); return false;" href="#">
- <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
- </a>
- <br /><br />
- <strong><?php echo gettext("NOTE:");?></strong>
- <?php echo gettext("Rules for WAN type interfaces in groups do not contain the reply-to mechanism upon which Multi-WAN typically relies.");?>
- <a href="https://doc.pfsense.org/index.php/Interface_Groups"><?PHP echo gettext("More Information");?></a>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <a href="interfaces_groups.php"><input id="cancelbutton" name="cancelbutton" type="button" class="formbtn" value="<?=gettext("Cancel");?>" /></a>
- <?php if (isset($id) && $a_ifgroups[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
-</table>
-</form>
-
-<script type="text/javascript">
-//<![CDATA[
- field_counter_js = 1;
- rows = 1;
- totalrows = <?php echo $counter; ?>;
- loaded = <?php echo $counter; ?>;
-//]]>
-</script>
-
-<?php
- unset($iflist);
- unset($iflist_disabled);
- include("fend.inc");
-?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_lagg.php b/usr/local/www/interfaces_lagg.php
deleted file mode 100644
index 32b2a21..0000000
--- a/usr/local/www/interfaces_lagg.php
+++ /dev/null
@@ -1,169 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_lagg.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2008 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ifconfig
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-lagg
-##|*NAME=Interfaces: LAGG: page
-##|*DESCR=Allow access to the 'Interfaces: LAGG' page.
-##|*MATCH=interfaces_lagg.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (!is_array($config['laggs']['lagg'])) {
- $config['laggs']['lagg'] = array();
-}
-
-$a_laggs = &$config['laggs']['lagg'] ;
-
-function lagg_inuse($num) {
- global $config, $a_laggs;
-
- $iflist = get_configured_interface_list(false, true);
- foreach ($iflist as $if) {
- if ($config['interfaces'][$if]['if'] == $a_laggs[$num]['laggif']) {
- return true;
- }
- }
-
- if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) {
- foreach ($config['vlans']['vlan'] as $vlan) {
- if ($vlan['if'] == $a_laggs[$num]['laggif']) {
- return true;
- }
- }
- }
- return false;
-}
-
-if ($_GET['act'] == "del") {
- if (!isset($_GET['id'])) {
- $input_errors[] = gettext("Wrong parameters supplied");
- } else if (empty($a_laggs[$_GET['id']])) {
- $input_errors[] = gettext("Wrong index supplied");
- /* check if still in use */
- } else if (lagg_inuse($_GET['id'])) {
- $input_errors[] = gettext("This LAGG interface cannot be deleted because it is still being used.");
- } else {
- mwexec_bg("/sbin/ifconfig " . $a_laggs[$_GET['id']]['laggif'] . " destroy");
- unset($a_laggs[$_GET['id']]);
-
- write_config();
-
- header("Location: interfaces_lagg.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Interfaces"), gettext("LAGG"));
-$shortcut_section = "interfaces";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces lagg">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
- $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
- $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
- $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
- $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
- $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
- $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
- $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
- $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
- $tab_array[9] = array(gettext("LAGG"), true, "interfaces_lagg.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="20%" class="listhdrr"><?=gettext("Interface"); ?></td>
- <td width="20%" class="listhdrr"><?=gettext("Members"); ?></td>
- <td width="50%" class="listhdr"><?=gettext("Description"); ?></td>
- <td width="10%" class="list"></td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_laggs as $lagg):
-?>
- <tr ondblclick="document.location='interfaces_lagg_edit.php?id=<?=$i;?>'">
- <td class="listlr">
- <?=htmlspecialchars(strtoupper($lagg['laggif']));?>
- </td>
- <td class="listr">
- <?=htmlspecialchars($lagg['members']);?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($lagg['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap"> <a href="interfaces_lagg_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
- &nbsp;<a href="interfaces_lagg.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('Do you really want to delete this LAGG interface?')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a></td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="3">&nbsp;</td>
- <td class="list"> <a href="interfaces_lagg_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- <tr>
- <td colspan="3" class="list">
- <p class="vexpl">
- <span class="red"><strong>
- <?=gettext("Note:"); ?><br />
- </strong></span>
- <?=gettext("LAGG allows for link aggregation, bonding and fault tolerance. Only unassigned interfaces can be added to LAGG."); ?>
- </p>
- </td>
- <td class="list">&nbsp;</td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_lagg_edit.php b/usr/local/www/interfaces_lagg_edit.php
deleted file mode 100644
index d548160..0000000
--- a/usr/local/www/interfaces_lagg_edit.php
+++ /dev/null
@@ -1,278 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_lagg_edit.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2008 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-lagg-edit
-##|*NAME=Interfaces: LAGG: Edit page
-##|*DESCR=Allow access to the 'Interfaces: LAGG: Edit' page.
-##|*MATCH=interfaces_lagg_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_lagg.php');
-}
-
-if (!is_array($config['laggs']['lagg'])) {
- $config['laggs']['lagg'] = array();
-}
-
-$a_laggs = &$config['laggs']['lagg'];
-
-$portlist = get_interface_list();
-
-$realifchecklist = array();
-/* add LAGG interfaces */
-if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) {
- foreach ($config['laggs']['lagg'] as $lagg) {
- unset($portlist[$lagg['laggif']]);
- $laggiflist = explode(",", $lagg['members']);
- foreach ($laggiflist as $tmpif) {
- $realifchecklist[get_real_interface($tmpif)] = $tmpif;
- }
- }
-}
-
-$checklist = get_configured_interface_list(false, true);
-foreach ($checklist as $tmpif) {
- $realifchecklist[get_real_interface($tmpif)] = $tmpif;
-}
-
-$laggprotos = array("none", "lacp", "failover", "fec", "loadbalance", "roundrobin");
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_laggs[$id]) {
- $pconfig['laggif'] = $a_laggs[$id]['laggif'];
- $pconfig['members'] = $a_laggs[$id]['members'];
- $laggiflist = explode(",", $a_laggs[$id]['members']);
- foreach ($laggiflist as $tmpif) {
- unset($realifchecklist[get_real_interface($tmpif)]);
- }
- $pconfig['proto'] = $a_laggs[$id]['proto'];
- $pconfig['descr'] = $a_laggs[$id]['descr'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "members proto");
- $reqdfieldsn = array(gettext("Member interfaces"), gettext("Lagg protocol"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (is_array($_POST['members'])) {
- foreach ($_POST['members'] as $member) {
- if (!does_interface_exist($member)) {
- $input_errors[] = gettext("Interface supplied as member is invalid");
- }
- }
- } else if (!does_interface_exist($_POST['members'])) {
- $input_errors[] = gettext("Interface supplied as member is invalid");
- }
-
- if (!in_array($_POST['proto'], $laggprotos)) {
- $input_errors[] = gettext("Protocol supplied is invalid");
- }
-
- if (!$input_errors) {
- $lagg = array();
- $lagg['members'] = implode(',', $_POST['members']);
- $lagg['descr'] = $_POST['descr'];
- $lagg['laggif'] = $_POST['laggif'];
- $lagg['proto'] = $_POST['proto'];
- if (isset($id) && $a_laggs[$id]) {
- $lagg['laggif'] = $a_laggs[$id]['laggif'];
- }
-
- $lagg['laggif'] = interface_lagg_configure($lagg);
- if ($lagg['laggif'] == "" || !stristr($lagg['laggif'], "lagg")) {
- $input_errors[] = gettext("Error occurred creating interface, please retry.");
- } else {
- if (isset($id) && $a_laggs[$id]) {
- $a_laggs[$id] = $lagg;
- } else {
- $a_laggs[] = $lagg;
- }
-
- write_config();
-
- $confif = convert_real_interface_to_friendly_interface_name($lagg['laggif']);
- if ($confif <> "") {
- interface_configure($confif);
- }
-
- header("Location: interfaces_lagg.php");
- exit;
- }
- }
-}
-
-$pgtitle = array(gettext("Interfaces"), gettext("LAGG"), gettext("Edit"));
-$shortcut_section = "interfaces";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="interfaces_lagg_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces lagg edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("LAGG configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Parent interface"); ?></td>
- <td width="78%" class="vtable">
- <select name="members[]" multiple="multiple" size="4" class="formselect">
-<?php
- foreach ($portlist as $ifn => $ifinfo) {
- if (array_key_exists($ifn, $realifchecklist)) {
- continue;
- }
- echo "<option value=\"{$ifn}\"";
- if (stristr($pconfig['members'], $ifn)) {
- echo " selected=\"selected\"";
- }
- echo ">". $ifn ."(".$ifinfo['mac'] .")</option>";
- }
-?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Choose the members that will be used for the link aggregation"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Lag proto"); ?></td>
- <td class="vtable">
- <select name="proto" class="formselect" id="proto">
-<?php
- foreach ($laggprotos as $proto) {
- echo "<option value=\"{$proto}\"";
- if ($proto == $pconfig['proto']) {
- echo " selected=\"selected\"";
- }
- echo ">".strtoupper($proto)."</option>";
- }
-?>
- </select>
- <br />
- <ul class="vexpl">
- <li>
- <b><?=gettext("failover"); ?></b><br />
- <?=gettext("Sends and receives traffic only through the master port. If " .
- "the master port becomes unavailable, the next active port is " .
- "used. The first interface added is the master port; any " .
- "interfaces added after that are used as failover devices."); ?>
- </li>
- <li>
- <b><?=gettext("fec"); ?></b><br />
- <?=gettext("Supports Cisco EtherChannel. This is a static setup and " .
- "does not negotiate aggregation with the peer or exchange " .
- "frames to monitor the link."); ?>
- </li>
- <li>
- <b><?=gettext("lacp"); ?></b><br />
- <?=gettext("Supports the IEEE 802.3ad Link Aggregation Control Protocol " .
- "(LACP) and the Marker Protocol. LACP will negotiate a set " .
- "of aggregable links with the peer in to one or more Link " .
- "Aggregated Groups. Each LAG is composed of ports of the " .
- "same speed, set to full-duplex operation. The traffic will " .
- "be balanced across the ports in the LAG with the greatest " .
- "total speed, in most cases there will only be one LAG which " .
- "contains all ports. In the event of changes in physical " .
- "connectivity, Link Aggregation will quickly converge to a " .
- "new configuration."); ?>
- </li>
- <li>
- <b><?=gettext("loadbalance"); ?></b><br />
- <?=gettext("Balances outgoing traffic across the active ports based on " .
- "hashed protocol header information and accepts incoming " .
- "traffic from any active port. This is a static setup and " .
- "does not negotiate aggregation with the peer or exchange " .
- "frames to monitor the link. The hash includes the Ethernet " .
- "source and destination address, and, if available, the VLAN " .
- "tag, and the IP source and destination address") ?>.
- </li>
- <li>
- <b><?=gettext("roundrobin"); ?></b><br />
- <?=gettext("Distributes outgoing traffic using a round-robin scheduler " .
- "through all active ports and accepts incoming traffic from " .
- "any active port"); ?>.
- </li>
- <li>
- <b><?=gettext("none"); ?></b><br />
- <?=gettext("This protocol is intended to do nothing: it disables any " .
- "traffic without disabling the lagg interface itself"); ?>.
- </li>
- </ul>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input type="hidden" name="laggif" value="<?=htmlspecialchars($pconfig['laggif']); ?>" />
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_laggs[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_ppps.php b/usr/local/www/interfaces_ppps.php
deleted file mode 100644
index 85b5181..0000000
--- a/usr/local/www/interfaces_ppps.php
+++ /dev/null
@@ -1,159 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_ppps.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ifconfig
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-ppps
-##|*NAME=Interfaces: ppps page
-##|*DESCR=Allow access to the 'Interfaces: ppps' page.
-##|*MATCH=interfaces_ppps.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-
-function ppp_inuse($num) {
- global $config, $g;
- $iflist = get_configured_interface_list(false, true);
- if (!is_array($config['ppps']['ppp'])) {
- return false;
- }
-
- foreach ($iflist as $if) {
- if ($config['interfaces'][$if]['if'] == $config['ppps']['ppp'][$num]['if']) {
- return true;
- }
- }
- return false;
-}
-
-if ($_GET['act'] == "del") {
- /* check if still in use */
- if (ppp_inuse($_GET['id'])) {
- $input_errors[] = gettext("This point-to-point link cannot be deleted because it is still being used as an interface.");
- } elseif (is_array($config['ppps']['ppp']) && is_array($config['ppps']['ppp'][$_GET['id']])) {
-
- unset($config['ppps']['ppp'][$_GET['id']]['pppoe-reset-type']);
- handle_pppoe_reset($config['ppps']['ppp'][$_GET['id']]);
- unset($config['ppps']['ppp'][$_GET['id']]);
- write_config();
- header("Location: interfaces_ppps.php");
- exit;
- }
-}
-
-if (!is_array($config['ppps']['ppp'])) {
- $config['ppps']['ppp'] = array();
-}
-$a_ppps = $config['ppps']['ppp'];
-
-$pgtitle = gettext("Interfaces: PPPs");
-$shortcut_section = "interfaces";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces ppps">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
- $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
- $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
- $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
- $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
- $tab_array[5] = array(gettext("PPPs"), true, "interfaces_ppps.php");
- $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
- $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
- $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
- $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="20%" class="listhdrr"><?=gettext("Interface");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Interface(s)/Port(s)");?></td>
- <td width="40%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list"></td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_ppps as $id => $ppp):
-?>
- <tr ondblclick="document.location='interfaces_ppps_edit.php?id=<?=$i;?>'">
- <td class="listr">
- <?=htmlspecialchars($ppp['if']);?>
- </td>
- <td class="listr">
-<?php
- $portlist = explode(",", $ppp['ports']);
- foreach ($portlist as $portid => $port) {
- if ($port != get_real_interface($port) && $ppp['type'] != "ppp") {
- $portlist[$portid] = convert_friendly_interface_to_friendly_descr($port);
- }
- }
- echo htmlspecialchars(implode(",", $portlist));
-?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($ppp['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap"> <a href="interfaces_ppps_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
- &nbsp;<a href="interfaces_ppps.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this PPP interface?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="remove" /></a>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="3">&nbsp;</td>
- <td class="list"> <a href="interfaces_ppps_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_ppps_edit.php b/usr/local/www/interfaces_ppps_edit.php
deleted file mode 100644
index 2a7eaf9..0000000
--- a/usr/local/www/interfaces_ppps_edit.php
+++ /dev/null
@@ -1,903 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_ppps_edit.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
- Copyright (C) 2010 Gabriel B. <gnoahb@gmail.com>.
- All rights reserved.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-ppps-edit
-##|*NAME=Interfaces: PPPs: Edit page
-##|*DESCR=Allow access to the 'Interfaces: PPPs: Edit' page.
-##|*MATCH=interfaces_ppps_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_ppps.php');
-}
-
-define("CRON_MONTHLY_PATTERN", "0 0 1 * *");
-define("CRON_WEEKLY_PATTERN", "0 0 * * 0");
-define("CRON_DAILY_PATTERN", "0 0 * * *");
-define("CRON_HOURLY_PATTERN", "0 * * * *");
-
-if (!is_array($config['ppps']['ppp'])) {
- $config['ppps']['ppp'] = array();
-}
-
-$a_ppps = &$config['ppps']['ppp'];
-
-$iflist = get_configured_interface_with_descr();
-$portlist = get_interface_list();
-$portlist = array_merge($portlist, $iflist);
-
-if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) {
- foreach ($config['vlans']['vlan'] as $vlan) {
- $portlist[$vlan['vlanif']] = $vlan;
- }
-}
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_ppps[$id]) {
- $pconfig['ptpid'] = $a_ppps[$id]['ptpid'];
- $pconfig['type'] = $a_ppps[$id]['type'];
- //$pconfig['if'] = $a_ppps[$id]['if'];
- $pconfig['interfaces'] = $a_ppps[$id]['ports'];
- $pconfig['username'] = $a_ppps[$id]['username'];
- $pconfig['password'] = base64_decode($a_ppps[$id]['password']);
- if (isset($a_ppps[$id]['ondemand'])) {
- $pconfig['ondemand'] = true;
- }
- $pconfig['idletimeout'] = $a_ppps[$id]['idletimeout'];
- $pconfig['uptime'] = $a_ppps[$id]['uptime'];
- $pconfig['descr'] = $a_ppps[$id]['descr'];
- $pconfig['bandwidth'] = explode(",", $a_ppps[$id]['bandwidth']);
- $pconfig['mtu'] = explode(",", $a_ppps[$id]['mtu']);
- $pconfig['mru'] = explode(",", $a_ppps[$id]['mru']);
- $pconfig['mrru'] = explode(",", $a_ppps[$id]['mrru']);
- if (isset($a_ppps[$id]['shortseq'])) {
- $pconfig['shortseq'] = true;
- }
- if (isset($a_ppps[$id]['acfcomp'])) {
- $pconfig['acfcomp'] = true;
- }
- if (isset($a_ppps[$id]['protocomp'])) {
- $pconfig['protocomp'] = true;
- }
- if (isset($a_ppps[$id]['vjcomp'])) {
- $pconfig['vjcomp'] = true;
- }
- if (isset($a_ppps[$id]['tcpmssfix'])) {
- $pconfig['tcpmssfix'] = true;
- }
- switch ($a_ppps[$id]['type']) {
- case "ppp":
- $pconfig['initstr'] = base64_decode($a_ppps[$id]['initstr']);
- $pconfig['simpin'] = $a_ppps[$id]['simpin'];
- $pconfig['pin-wait'] = $a_ppps[$id]['pin-wait'];
- $pconfig['apn'] = $a_ppps[$id]['apn'];
- $pconfig['apnum'] = $a_ppps[$id]['apnum'];
- $pconfig['phone'] = $a_ppps[$id]['phone'];
- $pconfig['connect-timeout'] = $a_ppps[$id]['connect-timeout'];
- $pconfig['localip'] = explode(",", $a_ppps[$id]['localip']);
- $pconfig['gateway'] = explode(",", $a_ppps[$id]['gateway']);
- break;
- case "l2tp":
- case "pptp":
- $pconfig['localip'] = explode(",", $a_ppps[$id]['localip']);
- $pconfig['subnet'] = explode(",", $a_ppps[$id]['subnet']);
- $pconfig['gateway'] = explode(",", $a_ppps[$id]['gateway']);
- case "pppoe":
- $pconfig['provider'] = $a_ppps[$id]['provider'];
- if (isset($a_ppps[$id]['provider']) and empty($a_ppps[$id]['provider'])) {
- $pconfig['null_service'] = true;
- }
- /* ================================================ */
- /* = force a connection reset at a specific time? = */
- /* ================================================ */
-
- if (isset($a_ppps[$id]['pppoe-reset-type'])) {
- $pconfig['pppoe-reset-type'] = $a_ppps[$id]['pppoe-reset-type'];
- $itemhash = getMPDCRONSettings($a_ppps[$id]['if']);
- $cronitem = $itemhash['ITEM'];
- if (isset($cronitem)) {
- $resetTime = "{$cronitem['minute']} {$cronitem['hour']} {$cronitem['mday']} {$cronitem['month']} {$cronitem['wday']}";
- } else {
- $resetTime = NULL;
- }
-
- if ($a_ppps[$id]['pppoe-reset-type'] == "custom") {
- $resetTime_a = explode(" ", $resetTime);
- $pconfig['pppoe_pr_custom'] = true;
- $pconfig['pppoe_resetminute'] = $resetTime_a[0];
- $pconfig['pppoe_resethour'] = $resetTime_a[1];
- /* just initialize $pconfig['pppoe_resetdate'] if the
- * corresponding item contains appropriate numeric values.
- */
- if ($resetTime_a[2] <> "*" && $resetTime_a[3] <> "*") {
- $pconfig['pppoe_resetdate'] = "{$resetTime_a[3]}/{$resetTime_a[2]}/" . date("Y");
- }
- } else if ($a_ppps[$id]['pppoe-reset-type'] == "preset") {
- $pconfig['pppoe_pr_preset'] = true;
- switch ($resetTime) {
- case CRON_MONTHLY_PATTERN:
- $pconfig['pppoe_monthly'] = true;
- break;
- case CRON_WEEKLY_PATTERN:
- $pconfig['pppoe_weekly'] = true;
- break;
- case CRON_DAILY_PATTERN:
- $pconfig['pppoe_daily'] = true;
- break;
- case CRON_HOURLY_PATTERN:
- $pconfig['pppoe_hourly'] = true;
- break;
- }
- }
- }
- break;
- }
-
-} else {
- $pconfig['ptpid'] = interfaces_ptpid_next();
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* okay first of all, cause we are just hiding the PPPoE HTML
- * fields related to PPPoE resets, we are going to unset $_POST
- * vars, if the reset feature should not be used. Otherwise the
- * data validation procedure below, may trigger a false error
- * message.
- */
- if (empty($_POST['pppoe-reset-type'])) {
- unset($_POST['pppoe_resethour']);
- unset($_POST['pppoe_resetminute']);
- unset($_POST['pppoe_resetdate']);
- unset($_POST['pppoe_pr_preset_val']);
- }
-
- /* input validation */
- switch ($_POST['type']) {
- case "ppp":
- $reqdfields = explode(" ", "interfaces phone");
- $reqdfieldsn = array(gettext("Link Interface(s)"), gettext("Phone Number"));
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- break;
- case "pppoe":
- if ($_POST['ondemand']) {
- $reqdfields = explode(" ", "interfaces username passwordfld ondemand idletimeout");
- $reqdfieldsn = array(gettext("Link Interface(s)"), gettext("Username"), gettext("Password"), gettext("Dial on demand"), gettext("Idle timeout value"));
- } else {
- $reqdfields = explode(" ", "interfaces username passwordfld");
- $reqdfieldsn = array(gettext("Link Interface(s)"), gettext("Username"), gettext("Password"));
- }
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- break;
- case "l2tp":
- case "pptp":
- if ($_POST['ondemand']) {
- $reqdfields = explode(" ", "interfaces username passwordfld localip subnet gateway ondemand idletimeout");
- $reqdfieldsn = array(gettext("Link Interface(s)"), gettext("Username"), gettext("Password"), gettext("Local IP address"), gettext("Subnet"), gettext("Remote IP address"), gettext("Dial on demand"), gettext("Idle timeout value"));
- } else {
- $reqdfields = explode(" ", "interfaces username passwordfld localip subnet gateway");
- $reqdfieldsn = array(gettext("Link Interface(s)"), gettext("Username"), gettext("Password"), gettext("Local IP address"), gettext("Subnet"), gettext("Remote IP address"));
- }
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- break;
- default:
- $input_errors[] = gettext("Please choose a Link Type.");
- break;
- }
- if ($_POST['type'] == "ppp" && count($_POST['interfaces']) > 1) {
- $input_errors[] = gettext("Multilink connections (MLPPP) using the PPP link type is not currently supported. Please select only one Link Interface.");
- }
- if ($_POST['provider'] && !is_domain($_POST['provider'])) {
- $input_errors[] = gettext("The Service name contains invalid characters.");
- }
- if ($_POST['provider'] && $_POST['null_service']) {
- $input_errors[] = gettext("Do not specify both a Service name and a NULL Service name.");
- }
- if (($_POST['idletimeout'] != "") && !is_numericint($_POST['idletimeout'])) {
- $input_errors[] = gettext("The idle timeout value must be an integer.");
- }
- if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resethour'] <> "" && !is_numericint($_POST['pppoe_resethour']) &&
- $_POST['pppoe_resethour'] >= 0 && $_POST['pppoe_resethour'] <=23) {
- $input_errors[] = gettext("A valid PPPoE reset hour must be specified (0-23).");
- }
- if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resetminute'] <> "" && !is_numericint($_POST['pppoe_resetminute']) &&
- $_POST['pppoe_resetminute'] >= 0 && $_POST['pppoe_resetminute'] <=59) {
- $input_errors[] = gettext("A valid PPPoE reset minute must be specified (0-59).");
- }
- if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resetdate'] <> "" && !is_numeric(str_replace("/", "", $_POST['pppoe_resetdate']))) {
- $input_errors[] = gettext("A valid PPPoE reset date must be specified (mm/dd/yyyy).");
- }
- if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resetdate'] <> "" && is_numeric(str_replace("/", "", $_POST['pppoe_resetdate']))) {
- $date_nums = explode("/", $_POST['pppoe_resetdate']);
- if ($date_nums[0] < 1 || $date_nums[0] > 12) {
- $input_errors[] = gettext("A valid PPPoE reset month must be specified (1-12) in the Custom PPPoE Periodic reset fields.");
- }
- if ($date_nums[1] < 1 || $date_nums[1] > 31) {
- $input_errors[] = gettext("A valid PPPoE reset day of month must be specified (1-31) in the Custom PPPoE Periodic reset fields. No checks are done on valid # of days per month");
- }
- if ($date_nums[2] < date("Y")) {
- $input_errors[] = gettext("A valid PPPoE reset year must be specified. Don't select a year in the past!");
- }
- }
-
- if (is_array($_POST['interfaces'])) {
- foreach ($_POST['interfaces'] as $iface) {
- if ($_POST['localip'][$iface] && !is_ipaddr($_POST['localip'][$iface])) {
- $input_errors[] = sprintf(gettext("A valid local IP address must be specified for %s."), $iface);
- }
- if ($_POST['gateway'][$iface] && !is_ipaddr($_POST['gateway'][$iface]) && !is_hostname($_POST['gateway'][$iface])) {
- $input_errors[] = sprintf(gettext("A valid gateway IP address OR hostname must be specified for %s."), $iface);
- }
- if ($_POST['bandwidth'][$iface] && !is_numericint($_POST['bandwidth'][$iface])) {
- $input_errors[] = sprintf(gettext("The bandwidth value for %s must be an integer."), $iface);
- }
- if ($_POST['mtu'][$iface] && ($_POST['mtu'][$iface] < 576)) {
- $input_errors[] = sprintf(gettext("The MTU for %s must be greater than 576 bytes."), $iface);
- }
- if ($_POST['mru'][$iface] && ($_POST['mru'][$iface] < 576)) {
- $input_errors[] = sprintf(gettext("The MRU for %s must be greater than 576 bytes."), $iface);
- }
- }
- }
-
-/*
- foreach ($a_ppps as $ppp) {
- if (isset($id) && ($a_ppps[$id]) && ($a_ppps[$id] === $ppp)) {
- continue;
- }
-
- if ($ppp['serialport'] == $_POST['serialport']) {
- $input_errors[] = "Serial port is in use";
- break;
- }
- }
-*/
-
- if (!$input_errors) {
- $ppp = array();
- $ppp['ptpid'] = $_POST['ptpid'];
- $ppp['type'] = $_POST['type'];
- $ppp['if'] = $ppp['type'].$ppp['ptpid'];
- $ppp['ports'] = implode(',', $_POST['interfaces']);
- $ppp['username'] = $_POST['username'];
- $ppp['password'] = base64_encode($_POST['passwordfld']);
- $ppp['ondemand'] = $_POST['ondemand'] ? true : false;
- if (!empty($_POST['idletimeout'])) {
- $ppp['idletimeout'] = $_POST['idletimeout'];
- } else {
- unset($ppp['idletimeout']);
- }
- $ppp['uptime'] = $_POST['uptime'] ? true : false;
- if (!empty($_POST['descr'])) {
- $ppp['descr'] = $_POST['descr'];
- } else {
- unset($ppp['descr']);
- }
-
- // Loop through fields associated with an individual link/port and make an array of the data
- $port_fields = array("localip", "gateway", "subnet", "bandwidth", "mtu", "mru", "mrru");
- foreach ($_POST['interfaces'] as $iface) {
- foreach ($port_fields as $field_label) {
- if (isset($_POST[$field_label][$iface])) {
- $port_data[$field_label][] = $_POST[$field_label][$iface];
- }
- }
- }
-
- switch ($_POST['type']) {
- case "ppp":
- if (!empty($_POST['initstr'])) {
- $ppp['initstr'] = base64_encode($_POST['initstr']);
- } else {
- unset($ppp['initstr']);
- }
- if (!empty($_POST['simpin'])) {
- $ppp['simpin'] = $_POST['simpin'];
- $ppp['pin-wait'] = $_POST['pin-wait'];
- } else {
- unset($ppp['simpin']);
- unset($ppp['pin-wait']);
- }
-
- if (!empty($_POST['apn'])) {
- $ppp['apn'] = $_POST['apn'];
- $ppp['apnum'] = $_POST['apnum'];
- } else {
- unset($ppp['apn']);
- unset($ppp['apnum']);
- }
- $ppp['phone'] = $_POST['phone'];
- $ppp['localip'] = implode(',', $port_data['localip']);
- $ppp['gateway'] = implode(',', $port_data['gateway']);
- if (!empty($_POST['connect-timeout'])) {
- $ppp['connect-timeout'] = $_POST['connect-timeout'];
- } else {
- unset($ppp['connect-timeout']);
- }
- break;
- case "pppoe":
- if (!empty($_POST['provider'])) {
- $ppp['provider'] = $_POST['provider'];
- } else {
- unset($ppp['provider']);
- $ppp['provider'] = $_POST['null_service'] ? true : false;
- }
- if (!empty($_POST['pppoe-reset-type'])) {
- $ppp['pppoe-reset-type'] = $_POST['pppoe-reset-type'];
- } else {
- unset($ppp['pppoe-reset-type']);
- }
-
- break;
- case "pptp":
- case "l2tp":
- $ppp['localip'] = implode(',', $port_data['localip']);
- $ppp['subnet'] = implode(',', $port_data['subnet']);
- $ppp['gateway'] = implode(',', $port_data['gateway']);
- break;
- default:
- break;
-
- }
-
- $ppp['shortseq'] = $_POST['shortseq'] ? true : false;
- $ppp['acfcomp'] = $_POST['acfcomp'] ? true : false;
- $ppp['protocomp'] = $_POST['protocomp'] ? true : false;
- $ppp['vjcomp'] = $_POST['vjcomp'] ? true : false;
- $ppp['tcpmssfix'] = $_POST['tcpmssfix'] ? true : false;
- $ppp['bandwidth'] = implode(',', $port_data['bandwidth']);
- if (is_array($port_data['mtu'])) {
- $ppp['mtu'] = implode(',', $port_data['mtu']);
- }
- if (is_array($port_data['mru'])) {
- $ppp['mru'] = implode(',', $port_data['mru']);
- }
- if (is_array($port_data['mrru'])) {
- $ppp['mrru'] = implode(',', $port_data['mrru']);
- }
-
- /* handle_pppoe_reset is called here because if user changes Link Type from PPPoE to another type we
- must be able to clear the config data in the <cron> section of config.xml if it exists
- */
- handle_pppoe_reset($_POST);
-
- if (isset($id) && $a_ppps[$id]) {
- $a_ppps[$id] = $ppp;
- } else {
- $a_ppps[] = $ppp;
- }
-
- write_config();
- configure_cron();
-
- foreach ($iflist as $pppif => $ifdescr) {
- if ($config['interfaces'][$pppif]['if'] == $ppp['if']) {
- interface_ppps_configure($pppif);
- }
- }
- header("Location: interfaces_ppps.php");
- exit;
- }
-} // end if ($_POST)
-
-$closehead = false;
-$pgtitle = array(gettext("Interfaces"), gettext("PPPs"), gettext("Edit"));
-$shortcut_section = "interfaces";
-include("head.inc");
-
-$types = array("select" => gettext("Select"), "ppp" => "PPP", "pppoe" => "PPPoE", "pptp" => "PPTP", "l2tp" => "L2TP"/*, "tcp" => "TCP", "udp" => "UDP"*/);
-
-?>
- <script type="text/javascript" src="/javascript/numericupdown/js/numericupdown.js"></script>
- <link href="/javascript/numericupdown/css/numericupdown.css" rel="stylesheet" type="text/css" />
- <script type="text/javascript" src="/javascript/datepicker/js/datepicker.js"></script>
- <link href="/javascript/datepicker/css/datepicker.css" rel="stylesheet" type="text/css"/>
- <script type="text/javascript">
- //<![CDATA[
- jQuery(document).ready(function() { updateType(<?php echo "'{$pconfig['type']}'";?>); });
- //]]>
- </script>
-</head>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" >
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="interfaces_ppps_edit.php" method="post" name="iform" id="iform">
- <table id="interfacetable" width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces ppps edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?= gettext("PPPs configuration"); ?></td>
- </tr>
- <tr>
- <td valign="middle" class="vncell"><strong><?= gettext("Link Type"); ?></strong></td>
- <td class="vtable">
- <select name="type" onchange="updateType(this.value);" class="formselect" id="type">
- <?php
- foreach ($types as $key => $opt) {
- echo "<option onclick=\"updateType('{$key}');\"";
- if ($key == $pconfig['type']) {
- echo " selected=\"selected\"";
- }
- echo " value=\"{$key}\" >" . htmlspecialchars($opt) . "</option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr name="interface" id="interface" >
- <td width="22%" valign="top" class="vncellreq"><?= gettext("Link interface(s)"); ?></td>
- <td width="78%" class="vtable">
- <select style="vertical-align:top" name="interfaces[]" multiple="multiple" class="formselect" size="4" onchange="show_hide_linkfields(this.options);">
- <option></option>
- </select>
- <br />
- <span class="vexpl"><?= gettext("Select at least two interfaces for Multilink (MLPPP) connections."); ?></span>
- </td>
- </tr>
- <tr style="display:none" name="portlists" id="portlists">
- <td id="serialports">
- <?php
- $selected_ports = explode(',', $pconfig['interfaces']);
- if (!is_dir("/var/spool/lock")) {
- mwexec("/bin/mkdir -p /var/spool/lock");
- }
- // $serialports = pfSense_get_modem_devices();
- // Match files in /dev starting with "cua" then:
- // [a-zA-Z] = any single alpha character e.g. like "cuau"
- // [0-9] = a digit from 0 to 9
- // stuff in {} = the various possible digit and dot combinations to allow an optional 2nd digit, dot, followed by 1 or 2 optional digits
- // This supports up to 100 device numbers (0 to 99), e.g. cuau0 cuau1 ... cuau10 cuau11 ... cuau99 and also possibilities like cuau1.1 cuau1.11 cuau11.1 cuau11.11
- $serialports = glob("/dev/cua[a-zA-Z][0-9]{,.[0-9],.[0-9][0-9],[0-9],[0-9].[0-9],[0-9].[0-9][0-9]}", GLOB_BRACE);
- $serport_count = 0;
- foreach ($serialports as $port) {
- $serport_count++;
- echo $port . "," . trim($port);
- if (in_array($port, $selected_ports)) {
- echo ",1|";
- } else {
- echo ",|";
- }
- }
- echo $serport_count;
- ?>
- </td>
- <td id="ports">
- <?php
- $port_count = 0;
- foreach ($portlist as $ifn => $ifinfo) {
- $port_count++;
- $string = "";
- if (is_array($ifinfo)) {
- $string .= $ifn;
- if ($ifinfo['mac']) {
- $string .= " ({$ifinfo['mac']})";
- }
- } else {
- $string .= $ifinfo;
- }
- $string .= ",{$ifn}";
- echo htmlspecialchars($string);
- if (in_array($ifn, $selected_ports)) {
- echo ",1|";
- } else {
- echo ",|";
- }
- }
- echo $port_count;
- if ($serport_count > $port_count) {
- $port_count = $serport_count;
- }
- ?>
- </td>
- <td style="display:none" name="port_count" id="port_count"><?=htmlspecialchars($port_count);?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?= gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl"><?= gettext("You may enter a description here for your reference. Description will appear in the \"Interfaces Assign\" select lists."); ?></span>
- </td>
- </tr>
- <tr style="display:none" name="select" id="select"><td style="display:none"></td></tr>
- <?php
- $k = 0;
- ?>
- <tr style="display:none" name="ppp_provider" id="ppp_provider">
- <td width="22%" valign="top" class="vncell">
- <?= gettext("Service Provider"); ?>
- </td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="0" cellspacing="0" summary="service provider">
- <tr id="trcountry" style="display:none">
- <td><?= gettext("Country:"); ?> &nbsp;&nbsp;</td>
- <td>
- <select class="formselect" name="country" id="country" onchange="providers_list()">
- <option></option>
- </select>
- </td>
- </tr>
- <tr id="trprovider" style="display:none">
- <td><?= gettext("Provider:"); ?> &nbsp;&nbsp;</td>
- <td>
- <select class="formselect" name="provider" id="provider" onchange="providerplan_list()">
- <option></option>
- </select>
- </td>
- </tr>
- <tr id="trproviderplan" style="display:none">
- <td><?= gettext("Plan:"); ?> &nbsp;&nbsp;</td>
- <td>
- <select class="formselect" name="providerplan" id="providerplan" onchange="prefill_provider()">
- <option></option>
- </select>
- </td>
- </tr>
- </table>
- <br /><span class="vexpl"><?= gettext("Select to fill in data for your service provider."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?= gettext("Username"); ?></td>
- <td width="78%" class="vtable">
- <input name="username" type="text" class="formfld user" id="username" size="20" value="<?=htmlspecialchars($pconfig['username']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?= gettext("Password"); ?></td>
- <td width="78%" class="vtable">
- <input name="passwordfld" type="password" class="formfld pwd" id="passwordfld" size="20" value="<?=htmlspecialchars($pconfig['password']);?>" />
- </td>
- </tr>
-
- <tr style="display:none" name="phone_num" id="phone_num">
- <td width="22%" valign="top" class="vncellreq"><?= gettext("Phone Number"); ?></td>
- <td width="78%" class="vtable">
- <input name="phone" type="text" class="formfld unknown" id="phone" size="40" value="<?=htmlspecialchars($pconfig['phone']);?>" />
- <br />
- <span class="vexpl"><?= gettext("Note: Typically *99# for GSM networks and #777 for CDMA networks"); ?></span>
- </td>
- </tr>
- <tr style="display:none" name="apn_" id="apn_">
- <td width="22%" valign="top" class="vncell"><?= gettext("Access Point Name (APN)"); ?></td>
- <td width="78%" class="vtable">
- <input name="apn" type="text" class="formfld unknown" id="apn" size="40" value="<?=htmlspecialchars($pconfig['apn']);?>" />
- </td>
- </tr>
-
- <tr style="display:none" name="ppp" id="ppp">
- <td colspan="2" style="padding:0px;">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="advanced">
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td width="22%" valign="top" class="vncell"><?= gettext("APN number (optional)"); ?></td>
- <td width="78%" class="vtable">
- <input name="apnum" type="text" class="formfld unknown" id="apnum" size="2" value="<?=htmlspecialchars($pconfig['apnum']);?>" />
- <br />
- <span class="vexpl"><?= gettext("Note: Defaults to 1 if you set APN above. Ignored if you set no APN above."); ?></span>
- </td>
- </tr>
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td width="22%" valign="top" class="vncell"><?= gettext("SIM PIN"); ?></td>
- <td width="78%" class="vtable">
- <input name="simpin" type="text" class="formfld unknown" id="simpin" size="12" value="<?=htmlspecialchars($pconfig['simpin']);?>" />
- </td>
- </tr>
-
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td width="22%" valign="top" class="vncell"><?= gettext("SIM PIN wait"); ?></td>
- <td width="78%" class="vtable">
- <input name="pin-wait" type="text" class="formfld unknown" id="pin-wait" size="2" value="<?=htmlspecialchars($pconfig['pin-wait']);?>" />
- <br />
- <span class="vexpl"><?= gettext("Note: Time to wait for SIM to discover network after PIN is sent to SIM (seconds)."); ?></span>
- </td>
- </tr>
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td width="22%" valign="top" class="vncell"><?= gettext("Init String"); ?></td>
- <td width="78%" class="vtable">
- <input type="text" size="40" class="formfld unknown" id="initstr" name="initstr" value="<?=htmlspecialchars($pconfig['initstr']);?>" />
- <br />
- <span class="vexpl"><?= gettext("Note: Enter the modem initialization string here. Do NOT include the \"AT\"" .
- " string at the beginning of the command. Many modern USB 3G modems don't need an initialization string."); ?></span>
- </td>
- </tr>
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td width="22%" valign="top" class="vncell"><?= gettext("Connection Timeout"); ?></td>
- <td width="78%" class="vtable">
- <input name="connect-timeout" type="text" class="formfld unknown" id="connect-timeout" size="2" value="<?=htmlspecialchars($pconfig['connect-timeout']);?>" />
- <br />
- <span class="vexpl"><?= gettext("Note: Enter timeout in seconds for connection to be established (sec.) Default is 45 sec."); ?></span>
- </td>
- </tr>
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td valign="top" class="vncell"><?= gettext("Uptime Logging"); ?></td>
- <td class="vtable">
- <input type="checkbox" value="on" id="uptime" name="uptime" <?php if (isset($pconfig['uptime'])) echo "checked=\"checked\""; ?> /> <?= gettext("Enable persistent logging of connection uptime."); ?>
- <br />
- <span class="vexpl"><?= gettext("This option causes cumulative uptime to be recorded and displayed on the Status Interfaces page."); ?></span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr style="display:none" name="pppoe" id="pppoe">
- <td colspan="2" style="padding:0px;">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="service name">
- <tr>
- <td width="22%" valign="top" class="vncell"><?= gettext("Service name"); ?></td>
- <td width="78%" class="vtable"><input name="provider" type="text" class="formfld unknown" id="provider" size="20" value="<?=htmlspecialchars($pconfig['provider']);?>" />&nbsp;&nbsp;
- <input type="checkbox" value="on" id="null_service" name="null_service" <?php if (isset($pconfig['null_service'])) echo "checked=\"checked\""; ?> /> <?= gettext("Configure a NULL Service name"); ?>
- <br />
- <span class="vexpl"><?= gettext("Hint: this field can usually be left empty. Service name will not be configured if this field is empty. Check the \"Configure NULL\" box to configure a blank Service name."); ?></span>
- </td>
- </tr>
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td width="22%" valign="top" class="vncell"><?=gettext("Periodic reset");?></td>
- <td width="78%" class="vtable">
- <table id="presetwrap" cellspacing="0" cellpadding="0" width="100%" summary="periodic reset">
- <tr>
- <td align="left" valign="top">
- <p style="margin: 4px; padding: 4px 0 4px 0; width: 94%;">
- <select style="vertical-align:top" id="reset_type" name="pppoe-reset-type" class="formselect" onchange="show_reset_settings(this.value);">
- <option value = ""><?= gettext("Disabled"); ?></option>
- <option value="custom" <?php if ($pconfig['pppoe-reset-type'] == "custom") echo "selected=\"selected\""; ?>><?= gettext("Custom"); ?></option>
- <option value="preset" <?php if ($pconfig['pppoe-reset-type'] == "preset") echo "selected=\"selected\""; ?>><?= gettext("Pre-Set"); ?></option>
- </select> <?= gettext("Select a reset timing type"); ?>
- </p>
- <?php if ($pconfig['pppoe_pr_custom']): ?>
- <p style="margin: 2px; padding: 4px; width: 94%;" id="pppoecustomwrap">
- <?php else: ?>
- <p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoecustomwrap">
- <?php endif; ?>
- <input type="text" name="pppoe_resethour" class="fd_incremental_inp_range_0_23 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resethour" value="<?= htmlspecialchars($pconfig['pppoe_resethour']); ?>" size="3" />
- <?= gettext("hour (0-23)"); ?><br />
- <input type="text" name="pppoe_resetminute" class="fd_incremental_inp_range_0_59 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resetminute" value="<?= htmlspecialchars($pconfig['pppoe_resetminute']); ?>" size="3" />
- <?= gettext("minute (0-59)"); ?><br />
- <input name="pppoe_resetdate" type="text" class="w8em format-m-d-y highlight-days-67" id="pppoe_resetdate" maxlength="10" size="10" value="<?=htmlspecialchars($pconfig['pppoe_resetdate']);?>" />
- <?= gettext("reset at a specific date (mm/dd/yyyy)"); ?>
- <br />&nbsp;<br />
- <span class="red"><strong><?=gettext("Note:");?></strong></span>
- <?= gettext("If you leave the date field empty, the reset will be executed each day at the time you did specify using the minutes and hour field."); ?>
- </p>
- <?php if ($pconfig['pppoe_pr_preset']): ?>
- <p style="margin: 2px; padding: 4px; width: 94%;" id="pppoepresetwrap">
- <?php else: ?>
- <p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoepresetwrap">
- <?php endif; ?>
- <input name="pppoe_pr_preset_val" type="radio" id="pppoe_monthly" value="monthly" <?php if ($pconfig['pppoe_monthly']) echo "checked=\"checked\""; ?> />
- <?= gettext("reset at each month ('0 0 1 * *')"); ?>
- <br />
- <input name="pppoe_pr_preset_val" type="radio" id="pppoe_weekly" value="weekly" <?php if ($pconfig['pppoe_weekly']) echo "checked=\"checked\""; ?> />
- <?= gettext("reset at each week ('0 0 * * 0')"); ?>
- <br />
- <input name="pppoe_pr_preset_val" type="radio" id="pppoe_daily" value="daily" <?php if ($pconfig['pppoe_daily']) echo "checked=\"checked\""; ?> />
- <?= gettext("reset at each day ('0 0 * * *')"); ?>
- <br />
- <input name="pppoe_pr_preset_val" type="radio" id="pppoe_hourly" value="hourly" <?php if ($pconfig['pppoe_hourly']) echo "checked=\"checked\""; ?> />
- <?= gettext("reset at each hour ('0 * * * *')"); ?>
- </p>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
-<?php
- for ($j = 0; $j < $port_count; $j++) :
-?>
-
- <tr style="display:none" id="gw_fields<?=$j;?>">
- <td width="22%" id="localiplabel<?=$j;?>" valign="top" class="vncell"><?= gettext("Local IP"); ?></td>
- <td width="78%" class="vtable">
- <input name="localip[]" type="text" class="formfld unknown" id="localip<?=$j;?>" size="20" value="<?=htmlspecialchars($pconfig['localip'][$j]);?>" />
- /
- <select name="subnet[]" class="formselect" id="subnet<?=$j;?>" disabled="disabled">
- <?php for ($i = 31; $i > 0; $i--): ?>
- <option value="<?=$i;?>"<?php if ($i == $pconfig['subnet'][$j]) echo " selected=\"selected\""; ?>><?=$i;?></option>
- <?php endfor; ?>
- </select> <?= gettext("IP Address"); ?>
- </td>
- </tr>
- <tr style="display:none" id="ip_fields<?=$j;?>">
- <td width="22%" id="gatewaylabel<?=$j;?>" valign="top" class="vncell"></td>
- <td width="78%" class="vtable">
- <input name="gateway[]" type="text" class="formfld unknown" id="gateway<?=$j;?>" size="20" value="<?=htmlspecialchars($pconfig['gateway'][$j]);?>" /><?= gettext("IP Address OR Hostname"); ?>
- </td>
- </tr>
-<?php
- endfor;
-?>
-
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td colspan="2" valign="top" height="16"></td>
- </tr>
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td colspan="2" valign="top" class="listtopic"><?= gettext("Advanced Options"); ?></td>
- </tr>
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td valign="top" class="vncell"><?= gettext("Dial On Demand"); ?></td>
- <td class="vtable">
- <input type="checkbox" value="on" id="ondemand" name="ondemand" <?php if (isset($pconfig['ondemand'])) echo "checked=\"checked\""; ?> /> <?= gettext("Enable Dial-on-Demand mode"); ?>
- <br />
- <span class="vexpl"><?= gettext("This option causes the interface to operate in dial-on-demand mode. Do NOT enable if you want your link to be always up. " .
- "The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected."); ?> </span>
- </td>
- </tr>
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td valign="top" class="vncell"><?= gettext("Idle Timeout"); ?></td>
- <td class="vtable">
- <input name="idletimeout" type="text" class="formfld unknown" id="idletimeout" size="12" value="<?=htmlspecialchars($pconfig['idletimeout']);?>" /> <?= gettext("(seconds) Default is 0, which disables the timeout feature."); ?>
- <br />
- <span class="vexpl"><?= gettext("If no incoming or outgoing packets are transmitted for the entered number of seconds the connection is brought down.");?>
- <br />
- <?=gettext("When the idle timeout occurs, if the dial-on-demand option is enabled, mpd goes back into dial-on-demand mode. Otherwise, the interface is brought down and all associated routes removed."); ?></span>
- </td>
- </tr>
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td width="22%" valign="top" class="vncell"><?= gettext("Compression"); ?></td>
- <td width="78%" class="vtable">
- <input type="checkbox" value="on" id="vjcomp" name="vjcomp" <?php if (isset($pconfig['vjcomp'])) echo "checked=\"checked\""; ?> />&nbsp;<?= gettext("Disable vjcomp(compression) (auto-negotiated by default)."); ?>
- <br />
- <span class="vexpl"><?=gettext("This option enables Van Jacobson TCP header compression, which saves several bytes per TCP data packet. " .
- "You almost always want this option. This compression ineffective for TCP connections with enabled modern extensions like time " .
- "stamping or SACK, which modify TCP options between sequential packets.");?></span>
- </td>
- </tr>
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td width="22%" valign="top" class="vncell"><?= gettext("TCPmssFix"); ?></td>
- <td width="78%" class="vtable">
- <input type="checkbox" value="on" id="tcpmssfix" name="tcpmssfix" <?php if (isset($pconfig['tcpmssfix'])) echo "checked=\"checked\""; ?> />&nbsp;<?= gettext("Disable tcpmssfix (enabled by default)."); ?>
- <br />
- <span class="vexpl"><?=gettext("This option causes mpd to adjust incoming and outgoing TCP SYN segments so that the requested maximum segment size is not greater than the amount ".
- "allowed by the interface MTU. This is necessary in many setups to avoid problems caused by routers that drop ICMP Datagram Too Big messages. Without these messages, ".
- "the originating machine sends data, it passes the rogue router then hits a machine that has an MTU that is not big enough for the data. Because the IP Don't Fragment option is set, ".
- "this machine sends an ICMP Datagram Too Big message back to the originator and drops the packet. The rogue router drops the ICMP message and the originator never ".
- "gets to discover that it must reduce the fragment size or drop the IP Don't Fragment option from its outgoing data.");?></span>
- </td>
- </tr>
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td width="22%" valign="top" class="vncell"><?=gettext("ShortSeq");?></td>
- <td width="78%" class="vtable">
- <input type="checkbox" value="on" id="shortseq" name="shortseq" <?php if (isset($pconfig['shortseq'])) echo "checked=\"checked\""; ?> />&nbsp;<?= gettext("Disable shortseq (auto-negotiated by default)."); ?>
- <br />
- <span class="vexpl"><?= gettext("This option is only meaningful if multi-link PPP is negotiated. It proscribes shorter multi-link fragment headers, saving two bytes on every frame. " .
- "It is not necessary to disable this for connections that are not multi-link."); ?></span>
- </td>
- </tr>
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td width="22%" valign="top" class="vncell"><?=gettext("ACFComp"); ?></td>
- <td width="78%" class="vtable">
- <input type="checkbox" value="on" id="acfcomp" name="acfcomp" <?php if (isset($pconfig['acfcomp'])) echo "checked=\"checked\""; ?> />&nbsp;<?= gettext("Disable acfcomp (compression) (auto-negotiated by default)."); ?>
- <br />
- <span class="vexpl"><?= gettext("Address and control field compression. This option only applies to asynchronous link types. It saves two bytes per frame."); ?></span>
- </td>
- </tr>
- <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
- <td width="22%" valign="top" class="vncell"><?=gettext("ProtoComp"); ?></td>
- <td width="78%" class="vtable">
- <input type="checkbox" value="on" id="protocomp" name="protocomp" <?php if (isset($pconfig['protocomp'])) echo "checked=\"checked\""; ?> />&nbsp;<?= gettext("Disable protocomp (compression) (auto-negotiated by default)."); ?>
- <br />
- <span class="vexpl"><?= gettext("Protocol field compression. This option saves one byte per frame for most frames."); ?></span>
- </td>
- </tr>
- <tr id="advanced_" name="advanced_">
- <td>&nbsp;</td>
- <td>
- <p><input type="button" onclick="show_advanced(1)" value="<?=gettext("Show advanced options"); ?>" /></p>
- </td>
- <td style="display:none" id="adv_rows" name="adv_rows"><?=$k;?></td>
- <td style="display:none" id="adv_show" name="adv_show">0</td>
- </tr>
-<?php
- for ($i = 0; $i < $port_count; $i++) :
-?>
- <tr style="display:none" id="link<?=$i;?>">
- <td width="22%" valign="top" id="linklabel<?=$i;?>" class="vncell"> <?=gettext("Link Parameters");?></td>
- <td class="vtable">
- <table name="link_parameters" border="0" cellpadding="6" cellspacing="0" summary="link parameters">
- <tr>
- <td width="22%" id="bwlabel<?=$i;?>" valign="top"class="vncell"> <?=gettext("Bandwidth");?></td>
- <td width="78%" class="vtable">
- <br />
- <input name="bandwidth[]" id="bandwidth<?=$i;?>" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['bandwidth'][$i]);?>" />
- <br />
- <span class="vexpl"><?=gettext("Set ONLY for MLPPP connections and ONLY when links have different bandwidths.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" id="mtulabel<?=$i;?>" valign="top" class="vncell"> <?=gettext("MTU"); ?></td>
- <td width="78%" class="vtable">
- <input name="mtu[]" id="mtu<?=$i;?>" type="text" class="formfld unknown" size="6" value="<?=htmlspecialchars($pconfig['mtu'][$i]);?>" />
- <br />
- <span class="vexpl"><?=gettext("MTU will default to 1492.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" id="mrulabel<?=$i;?>" valign="top" class="vncell"> <?=gettext("MRU"); ?></td>
- <td width="78%" class="vtable">
- <input name="mru[]" id="mru<?=$i;?>" type="text" class="formfld unknown" size="6" value="<?=htmlspecialchars($pconfig['mru'][$i]);?>" />
- <br />
- <span class="vexpl">MRU <?=gettext("will be auto-negotiated by default.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" id="mrrulabel<?=$i;?>" valign="top" class="vncell"> <?=gettext("MRRU"); ?></td>
- <td width="78%" class="vtable">
- <input name="mrru[]" id="mrru<?=$i;?>" type="text" class="formfld unknown" size="6" value="<?=htmlspecialchars($pconfig['mrru'][$i]);?>" />
- <br />
- <span class="vexpl"><?=gettext("Set ONLY for MLPPP connections.");?> MRRU <?=gettext("will be auto-negotiated by default.");?></span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- endfor;
-?>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <input name="ptpid" type="hidden" value="<?=htmlspecialchars($pconfig['ptpid']);?>" />
- <?php if (isset($id) && $a_ppps[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_qinq.php b/usr/local/www/interfaces_qinq.php
deleted file mode 100644
index dac5801..0000000
--- a/usr/local/www/interfaces_qinq.php
+++ /dev/null
@@ -1,181 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_qinq.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2009 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/sbin/ngctl
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-qinq
-##|*NAME=Interfaces: QinQ page
-##|*DESCR=Allow access to the 'Interfaces: QinQ' page.
-##|*MATCH=interfaces_qinq.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-
-if (!is_array($config['qinqs']['qinqentry'])) {
- $config['qinqs']['qinqentry'] = array();
-}
-
-$a_qinqs = &$config['qinqs']['qinqentry'];
-
-function qinq_inuse($num) {
- global $config, $a_qinqs;
-
- $iflist = get_configured_interface_list(false, true);
- foreach ($iflist as $if) {
- if ($config['interfaces'][$if]['if'] == $a_qinqs[$num]['qinqif']) {
- return true;
- }
- }
-
- return false;
-}
-
-if ($_GET['act'] == "del") {
- $id = $_GET['id'];
-
- /* check if still in use */
- if (qinq_inuse($id)) {
- $input_errors[] = gettext("This QinQ cannot be deleted because it is still being used as an interface.");
- } else {
- $qinq =& $a_qinqs[$id];
-
- $delmembers = explode(" ", $qinq['members']);
- if (count($delmembers) > 0) {
- foreach ($delmembers as $tag) {
- mwexec("/usr/sbin/ngctl shutdown {$qinq['vlanif']}h{$tag}:");
- }
- }
- mwexec("/usr/sbin/ngctl shutdown {$qinq['vlanif']}qinq:");
- mwexec("/usr/sbin/ngctl shutdown {$qinq['vlanif']}:");
- mwexec("/sbin/ifconfig {$qinq['vlanif']} destroy");
- unset($a_qinqs[$id]);
-
- write_config();
-
- header("Location: interfaces_qinq.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Interfaces"), gettext("QinQ"));
-$shortcut_section = "interfaces";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces qinqs">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
- $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
- $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
- $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
- $tab_array[4] = array(gettext("QinQs"), true, "interfaces_qinq.php");
- $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
- $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
- $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
- $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
- $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="15%" class="listhdrr"><?=gettext("Interface");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Tag");?></td>
- <td width="20%" class="listhdrr"><?=gettext("QinQ members");?></td>
- <td width="45%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list"></td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_qinqs as $qinq):
-?>
- <tr ondblclick="document.location='interfaces_qinq_edit.php?id=<?=$i;?>'">
- <td class="listlr">
- <?=htmlspecialchars($qinq['if']);?>
- </td>
- <td class="listlr">
- <?=htmlspecialchars($qinq['tag']);?>
- </td>
- <td class="listr">
- <?php
- if (strlen($qinq['members']) > 20) {
- echo substr(htmlspecialchars($qinq['members']), 0, 20) . "...";
- } else {
- echo htmlspecialchars($qinq['members']);
- }
- ?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($qinq['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap"> <a href="interfaces_qinq_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
- &nbsp;<a href="interfaces_qinq.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this QinQ?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="remove" /></a>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="4">&nbsp;</td>
- <td class="list"> <a href="interfaces_qinq_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- <tr>
- <td colspan="4" class="list">
- <p class="vexpl">
- <span class="red"><strong>
- <?=gettext("Note:");?><br />
- </strong></span>
- <?php printf(gettext("Not all drivers/NICs support 802.1Q QinQ tagging properly. On cards that do not explicitly support it, QinQ tagging will still work, but the reduced MTU may cause problems. See the %s handbook for information on supported cards."), $g['product_name']);?>
- </p>
- </td>
- <td class="list">&nbsp;</td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_qinq_edit.php b/usr/local/www/interfaces_qinq_edit.php
deleted file mode 100644
index 93048a9..0000000
--- a/usr/local/www/interfaces_qinq_edit.php
+++ /dev/null
@@ -1,444 +0,0 @@
-<?php
-/*
- interfaces_qinq_edit.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2009 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/sbin/ngctl
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-qinq-edit
-##|*NAME=Interfaces: QinQ: Edit page
-##|*DESCR=Allow access to 'Interfaces: QinQ: Edit' page
-##|*MATCH=interfaces_qinq_edit.php*
-##|-PRIV
-
-$pgtitle = array(gettext("Interfaces"), gettext("QinQ"), gettext("Edit"));
-$shortcut_section = "interfaces";
-
-require("guiconfig.inc");
-
-if (!is_array($config['qinqs']['qinqentry'])) {
- $config['qinqs']['qinqentry'] = array();
-}
-
-$a_qinqs = &$config['qinqs']['qinqentry'];
-
-$portlist = get_interface_list();
-
-/* add LAGG interfaces */
-if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) {
- foreach ($config['laggs']['lagg'] as $lagg) {
- $portlist[$lagg['laggif']] = $lagg;
- }
-}
-
-if (count($portlist) < 1) {
- header("Location: interfaces_qinq.php");
- exit;
-}
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_qinqs[$id]) {
- $pconfig['if'] = $a_qinqs[$id]['if'];
- $pconfig['tag'] = $a_qinqs[$id]['tag'];
- $pconfig['members'] = $a_qinqs[$id]['members'];
- $pconfig['descr'] = html_entity_decode($a_qinqs[$id]['descr']);
-/*
- $pconfig['autoassign'] = isset($a_qinqs[$id]['autoassign']);
- $pconfig['autoenable'] = isset($a_qinqs[$id]['autoenable']);
-*/
- $pconfig['autogroup'] = isset($a_qinqs[$id]['autogroup']);
- $pconfig['autoadjustmtu'] = isset($a_qinqs[$id]['autoadjustmtu']);
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- if (empty($_POST['tag'])) {
- $input_errors[] = gettext("First level tag cannot be empty.");
- }
- if (isset($id) && $a_qinqs[$id]['tag'] != $_POST['tag']) {
- $input_errors[] = gettext("You are editing an existing entry and modifying the first level tag is not allowed.");
- }
- if (isset($id) && $a_qinqs[$id]['if'] != $_POST['if']) {
- $input_errors[] = gettext("You are editing an existing entry and modifying the interface is not allowed.");
- }
- if (!isset($id)) {
- foreach ($a_qinqs as $qinqentry) {
- if ($qinqentry['tag'] == $_POST['tag'] && $qinqentry['if'] == $_POST['if']) {
- $input_errors[] = gettext("QinQ level already exists for this interface, edit it!");
- }
- }
- if (is_array($config['vlans']['vlan'])) {
- foreach ($config['vlans']['vlan'] as $vlan) {
- if ($vlan['tag'] == $_POST['tag'] && $vlan['if'] == $_POST['if']) {
- $input_errors[] = gettext("A normal VLAN exists with this tag please remove it to use this tag for QinQ first level.");
- }
- }
- }
- }
-
- $qinqentry = array();
- $qinqentry['if'] = $_POST['if'];
- $qinqentry['tag'] = $_POST['tag'];
-/*
- if ($_POST['autoassign'] == "yes") { {
- $qinqentry['autoassign'] = true;
- }
- if ($_POST['autoenable'] == "yes") {
- $qinqentry['autoenable'] = true;
- }
- if ($_POST['autoadjust'] == "yes") {
- $qinqentry['autoadjustmtu'] = true;
- }
-*/
- if ($_POST['autogroup'] == "yes") {
- $qinqentry['autogroup'] = true;
- }
-
- $members = "";
- $isfirst = 0;
- /* item is a normal qinqentry type */
- for ($x = 0; $x < 9999; $x++) {
- if ($_POST["members{$x}"] <> "") {
- $member = explode("-", $_POST["members{$x}"]);
- if (count($member) > 1) {
- if (preg_match("/([^0-9])+/", $member[0], $match) ||
- preg_match("/([^0-9])+/", $member[1], $match)) {
- $input_errors[] = gettext("Tags can contain only numbers or a range in format #-#.");
- }
-
- for ($i = $member[0]; $i <= $member[1]; $i++) {
- if ($isfirst > 0) {
- $members .= " ";
- }
- $members .= $i;
- $isfirst++;
- }
- } else {
- if (preg_match("/([^0-9])+/", $_POST["members{$x}"], $match)) {
- $input_errors[] = gettext("Tags can contain only numbers or a range in format #-#.");
- }
-
- if ($isfirst > 0) {
- $members .= " ";
- }
- $members .= $_POST["members{$x}"];
- $isfirst++;
- }
- }
- }
-
- if (!$input_errors) {
- $qinqentry['members'] = $members;
- $qinqentry['descr'] = $_POST['descr'];
- $qinqentry['vlanif'] = "{$_POST['if']}_{$_POST['tag']}";
- $nmembers = explode(" ", $members);
-
- if (isset($id) && $a_qinqs[$id]) {
- $omembers = explode(" ", $a_qinqs[$id]['members']);
- $delmembers = array_diff($omembers, $nmembers);
- $addmembers = array_diff($nmembers, $omembers);
-
- if ((count($delmembers) > 0) || (count($addmembers) > 0)) {
- $fd = fopen("{$g['tmp_path']}/netgraphcmd", "w");
- foreach ($delmembers as $tag) {
- fwrite($fd, "shutdown {$qinqentry['vlanif']}h{$tag}:\n");
- fwrite($fd, "msg {$qinqentry['vlanif']}qinq: delfilter \\\"{$qinqentry['vlanif']}{$tag}\\\"\n");
- }
-
- foreach ($addmembers as $member) {
- $qinq = array();
- $qinq['if'] = $qinqentry['vlanif'];
- $qinq['tag'] = $member;
- $macaddr = get_interface_mac($qinqentry['vlanif']);
- interface_qinq2_configure($qinq, $fd, $macaddr);
- }
-
- fclose($fd);
- mwexec("/usr/sbin/ngctl -f {$g['tmp_path']}/netgraphcmd");
- }
- $a_qinqs[$id] = $qinqentry;
- } else {
- interface_qinq_configure($qinqentry);
- $a_qinqs[] = $qinqentry;
- }
- if ($_POST['autogroup'] == "yes") {
- if (!is_array($config['ifgroups']['ifgroupentry'])) {
- $config['ifgroups']['ifgroupentry'] = array();
- }
- foreach ($config['ifgroups']['ifgroupentry'] as $gid => $group) {
- if ($group['ifname'] == "QinQ") {
- $found = true;
- break;
- }
- }
- $additions = "";
- foreach ($nmembers as $qtag) {
- $additions .= "{$qinqentry['vlanif']}_{$qtag} ";
- }
- $additions .= "{$qinqentry['vlanif']}";
- if ($found == true) {
- $config['ifgroups']['ifgroupentry'][$gid]['members'] .= " {$additions}";
- } else {
- $gentry = array();
- $gentry['ifname'] = "QinQ";
- $gentry['members'] = "{$additions}";
- $gentry['descr'] = gettext("QinQ VLANs group");
- $config['ifgroups']['ifgroupentry'][] = $gentry;
- }
- }
-
- write_config();
-
- header("Location: interfaces_qinq.php");
- exit;
- } else {
- $pconfig['descr'] = $_POST['descr'];
- $pconfig['tag'] = $_POST['tag'];
- $pconfig['members'] = $members;
- }
-}
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
-// Global Variables
-var rowname = new Array(9999);
-var rowtype = new Array(9999);
-var newrow = new Array(9999);
-var rowsize = new Array(9999);
-
-for (i = 0; i < 9999; i++) {
- rowname[i] = 'members';
- rowtype[i] = 'select';
- newrow[i] = '';
- rowsize[i] = '30';
-}
-
-var field_counter_js = 0;
-var loaded = 0;
-var is_streaming_progress_bar = 0;
-var temp_streaming_text = "";
-
-var addRowTo = (function() {
- return (function (tableId) {
- var d, tbody, tr, td, bgc, i, ii, j;
- d = document;
- tbody = d.getElementById(tableId).getElementsByTagName("tbody").item(0);
- tr = d.createElement("tr");
- for (i = 0; i < field_counter_js; i++) {
- td = d.createElement("td");
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input size='" + rowsize[i] + "' class='formfld unknown' name='" + rowname[i] + totalrows + "' /> ";
- tr.appendChild(td);
- }
- td = d.createElement("td");
- td.rowSpan = "1";
-
- td.innerHTML = '<a onclick="removeRow(this);return false;" href="#"><img border="0" src="/themes/' + theme + '/images/icons/icon_x.gif" alt="remove" /><\/a>';
- tr.appendChild(td);
- tbody.appendChild(tr);
- totalrows++;
- });
-})();
-
-function removeRow(el) {
- var cel;
- while (el && el.nodeName.toLowerCase() != "tr") {
- el = el.parentNode;
- }
-
- if (el && el.parentNode) {
- cel = el.getElementsByTagName("td").item(0);
- el.parentNode.removeChild(el);
- }
-}
-
- rowname[0] = <?=gettext("members");?>;
- rowtype[0] = "textbox";
- rowsize[0] = "30";
-
- rowname[2] = <?=gettext("detail");?>;
- rowtype[2] = "textbox";
- rowsize[2] = "50";
-//]]>
-</script>
-<input type='hidden' name='members_type' value='textbox' class="formfld unknown" />
-
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<div id="inputerrors"></div>
-
-<form action="interfaces_qinq_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces qinq edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Interface QinQ Edit");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Parent interface");?></td>
- <td width="78%" class="vtable">
- <select name="if" id="if" class="formselect">
- <?php
- foreach ($portlist as $ifn => $ifinfo) {
- if (is_jumbo_capable($ifn)) {
- echo "<option value=\"{$ifn}\"";
- if ($ifn == $pconfig['if']) {
- echo " selected=\"selected\"";
- }
- echo ">";
- echo htmlspecialchars($ifn . " (" . $ifinfo['mac'] . ")");
- echo "</option>";
- }
- }
- ?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Only QinQ capable interfaces will be shown.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("First level tag");?></td>
- <td width="78%" class="vtable">
- <input name="tag" type="text" class="formfld unknown" id="tag" size="10" value="<?=htmlspecialchars($pconfig['tag']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("This is the first level VLAN tag. On top of this are stacked the member VLANs defined below.");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Options");?></td>
- <td width="78%" class="vtable">
-<?php /* ?>
- <br />
- <input type="checkbox" value="yes" name="autoassign" id="autoassign" <?php if ($pconfig['autoassign']) echo "checked=\"checked\""; ?> />
- <span class="vexpl"> Auto assign interface so it can be configured with ip etc...</span>
- <br />
- <input type="checkbox" value="yes" name="autoenable" id="autoenable" <?php if ($pconfig['autoenable']) echo "checked=\"checked\""; ?> />
- <span class="vexpl"> Auto enable interface so it can be used on filter rules.</span>
- <br />
- <input type="checkbox" value="yes" name="autoadjustmtu" id="autoadjustmtu" <?php if ($pconfig['autoadjustmtu']) echo "checked=\"checked\""; ?> />
- <span class="vexpl"> Allows to keep clients mtu unchanged(1500). <br />NOTE: if you are using jumbo frames this option is not needed and may produce incorrect results!</span>
-<?php */ ?>
- <br />
- <input name="autogroup" type="checkbox" value="yes" id="autogroup" <?php if ($pconfig['autogroup']) echo "checked=\"checked\""; ?> />
- <span class="vexpl"><?=gettext("Adds interface to QinQ interface groups so you can write filter rules easily.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed).");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><div id="membersnetworkport"><?=gettext("Member (s)");?></div></td>
- <td width="78%" class="vtable">
- <span class="vexpl">
- <?=gettext("You can specify ranges in the input below. The format is pretty simple i.e 9-100 or 10.20...");?>
- </span>
- <br />
- <table id="maintable" summary="main table">
- <tbody>
- <tr>
- <td><div id="onecolumn"><?=gettext("Tag");?></div></td>
- </tr>
-
-<?php
- $counter = 0;
- $members = $pconfig['members'];
- if ($members <> "") {
- $item = explode(" ", $members);
- foreach ($item as $ww) {
- $member = $item[$counter];
-?>
- <tr>
- <td class="vtable">
- <input name="members<?php echo $counter; ?>" class="formselect" id="members<?php echo $counter; ?>" value="<?php echo htmlspecialchars($member);?>" />
- </td>
- <td>
- <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="remove" /></a>
- </td>
- </tr>
-<?php
- $counter++;
-
- } // end foreach
- } // end if
-?>
- </tbody>
- </table>
- <a onclick="javascript:addRowTo('maintable'); return false;" href="#">
- <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
- </a>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <a href="interfaces_qinq.php"><input id="cancelbutton" name="cancelbutton" type="button" class="formbtn" value="<?=gettext("Cancel");?>" /></a>
- <?php if (isset($id) && $a_qinqs[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-
-<script type="text/javascript">
-//<![CDATA[
- field_counter_js = 1;
- rows = 1;
- totalrows = <?php echo $counter; ?>;
- loaded = <?php echo $counter; ?>;
-//]]>
-</script>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_vlan.php b/usr/local/www/interfaces_vlan.php
deleted file mode 100644
index 20453b4..0000000
--- a/usr/local/www/interfaces_vlan.php
+++ /dev/null
@@ -1,165 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_vlan.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ifconfig
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-vlan
-##|*NAME=Interfaces: VLAN page
-##|*DESCR=Allow access to the 'Interfaces: VLAN' page.
-##|*MATCH=interfaces_vlan.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (!is_array($config['vlans']['vlan'])) {
- $config['vlans']['vlan'] = array();
-}
-
-$a_vlans = &$config['vlans']['vlan'] ;
-
-function vlan_inuse($num) {
- global $config, $a_vlans;
-
- $iflist = get_configured_interface_list(false, true);
- foreach ($iflist as $if) {
- if ($config['interfaces'][$if]['if'] == $a_vlans[$num]['vlanif']) {
- return true;
- }
- }
-
- return false;
-}
-
-if ($_GET['act'] == "del") {
- if (!isset($_GET['id'])) {
- $input_errors[] = gettext("Wrong parameters supplied");
- } else if (empty($a_vlans[$_GET['id']])) {
- $input_errors[] = gettext("Wrong index supplied");
- /* check if still in use */
- } else if (vlan_inuse($_GET['id'])) {
- $input_errors[] = gettext("This VLAN cannot be deleted because it is still being used as an interface.");
- } else {
- if (does_interface_exist($a_vlans[$_GET['id']]['vlanif'])) {
- pfSense_interface_destroy($a_vlans[$_GET['id']]['vlanif']);
- }
- unset($a_vlans[$_GET['id']]);
-
- write_config();
-
- header("Location: interfaces_vlan.php");
- exit;
- }
-}
-
-
-$pgtitle = array(gettext("Interfaces"), gettext("VLAN"));
-$shortcut_section = "interfaces";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces vlan">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
- $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
- $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
- $tab_array[3] = array(gettext("VLANs"), true, "interfaces_vlan.php");
- $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
- $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
- $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
- $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
- $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
- $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="20%" class="listhdrr"><?=gettext("Interface");?></td>
- <td width="20%" class="listhdrr"><?=gettext("VLAN tag");?></td>
- <td width="50%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list"></td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_vlans as $vlan):
-?>
- <tr ondblclick="document.location='interfaces_vlan_edit.php?id=<?=$i;?>'">
- <td class="listlr">
- <?=htmlspecialchars($vlan['if']);?>
- </td>
- <td class="listr">
- <?=htmlspecialchars($vlan['tag']);?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($vlan['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap"> <a href="interfaces_vlan_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
- &nbsp;<a href="interfaces_vlan.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this VLAN?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="3">&nbsp;</td>
- <td class="list"> <a href="interfaces_vlan_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- <tr>
- <td colspan="3" class="list"><p class="vexpl">
- <span class="red"><strong>
- <?=gettext("Note:");?><br />
- </strong></span>
- <?php printf(gettext("Not all drivers/NICs support 802.1Q VLAN tagging properly. On cards that do not explicitly support it, VLAN tagging will still work, but the reduced MTU may cause problems. See the %s handbook for information on supported cards."), $g['product_name']);?> </p>
- </td>
- <td class="list">&nbsp;</td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_vlan_edit.php b/usr/local/www/interfaces_vlan_edit.php
deleted file mode 100644
index dd9f1a7..0000000
--- a/usr/local/www/interfaces_vlan_edit.php
+++ /dev/null
@@ -1,236 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_vlan_edit.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-vlan-edit
-##|*NAME=Interfaces: VLAN: Edit page
-##|*DESCR=Allow access to the 'Interfaces: VLAN: Edit' page.
-##|*MATCH=interfaces_vlan_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_vlan.php');
-}
-
-if (!is_array($config['vlans']['vlan'])) {
- $config['vlans']['vlan'] = array();
-}
-
-$a_vlans = &$config['vlans']['vlan'];
-
-$portlist = get_interface_list();
-
-/* add LAGG interfaces */
-if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) {
- foreach ($config['laggs']['lagg'] as $lagg) {
- $portlist[$lagg['laggif']] = $lagg;
- }
-}
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_vlans[$id]) {
- $pconfig['if'] = $a_vlans[$id]['if'];
- $pconfig['vlanif'] = $a_vlans[$id]['vlanif'];
- $pconfig['tag'] = $a_vlans[$id]['tag'];
- $pconfig['descr'] = $a_vlans[$id]['descr'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "if tag");
- $reqdfieldsn = array(gettext("Parent interface"), gettext("VLAN tag"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (isset($_POST['tag']) && (!is_numericint($_POST['tag']) || ($_POST['tag'] < '1') || ($_POST['tag'] > '4094'))) {
- $input_errors[] = gettext("The VLAN tag must be an integer between 1 and 4094.");
- }
-
- if (!does_interface_exist($_POST['if'])) {
- $input_errors[] = gettext("Interface supplied as parent is invalid");
- }
-
- if (isset($id)) {
- if ($_POST['tag'] && $_POST['tag'] != $a_vlans[$id]['tag']) {
- if (!empty($a_vlans[$id]['vlanif']) && convert_real_interface_to_friendly_interface_name($a_vlans[$id]['vlanif']) != NULL) {
- $input_errors[] = gettext("Interface is assigned and you cannot change the VLAN tag while assigned.");
- }
- }
- }
- foreach ($a_vlans as $vlan) {
- if (isset($id) && ($a_vlans[$id]) && ($a_vlans[$id] === $vlan)) {
- continue;
- }
-
- if (($vlan['if'] == $_POST['if']) && ($vlan['tag'] == $_POST['tag'])) {
- $input_errors[] = sprintf(gettext("A VLAN with the tag %s is already defined on this interface."), $vlan['tag']);
- break;
- }
- }
- if (is_array($config['qinqs']['qinqentry'])) {
- foreach ($config['qinqs']['qinqentry'] as $qinq) {
- if ($qinq['tag'] == $_POST['tag'] && $qinq['if'] == $_POST['if']) {
- $input_errors[] = gettext("A QinQ VLAN exists with this tag please remove it to use this tag with.");
- }
- }
- }
-
- if (!$input_errors) {
- if (isset($id) && $a_vlans[$id]) {
- if (($a_vlans[$id]['if'] != $_POST['if']) || ($a_vlans[$id]['tag'] != $_POST['tag'])) {
- if (!empty($a_vlans[$id]['vlanif'])) {
- $confif = convert_real_interface_to_friendly_interface_name($vlan['vlanif']);
- // Destroy previous vlan
- pfSense_interface_destroy($a_vlans[$id]['vlanif']);
- } else {
- pfSense_interface_destroy("{$a_vlans[$id]['if']}_vlan{$a_vlans[$id]['tag']}");
- $confif = convert_real_interface_to_friendly_interface_name("{$a_vlans[$id]['if']}_vlan{$a_vlans[$id]['tag']}");
- }
- if ($confif <> "") {
- $config['interfaces'][$confif]['if'] = "{$_POST['if']}_vlan{$_POST['tag']}";
- }
- }
- }
- $vlan = array();
- $vlan['if'] = $_POST['if'];
- $vlan['tag'] = $_POST['tag'];
- $vlan['descr'] = $_POST['descr'];
- $vlan['vlanif'] = "{$_POST['if']}_vlan{$_POST['tag']}";
-
- $vlan['vlanif'] = interface_vlan_configure($vlan);
- if ($vlan['vlanif'] == "" || !stristr($vlan['vlanif'], "vlan")) {
- $input_errors[] = gettext("Error occurred creating interface, please retry.");
- } else {
- if (isset($id) && $a_vlans[$id]) {
- $a_vlans[$id] = $vlan;
- } else {
- $a_vlans[] = $vlan;
- }
-
- write_config();
-
- if ($confif <> "") {
- interface_configure($confif);
- }
-
- header("Location: interfaces_vlan.php");
- exit;
- }
- }
-}
-
-$pgtitle = array(gettext("Interfaces"), gettext("VLAN"), gettext("Edit"));
-$shortcut_section = "interfaces";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="interfaces_vlan_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces vlan edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("VLAN configuration");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Parent interface");?></td>
- <td width="78%" class="vtable">
- <select name="if" class="formselect">
- <?php
- foreach ($portlist as $ifn => $ifinfo) {
- if (is_jumbo_capable($ifn)) {
- echo "<option value=\"{$ifn}\"";
- if ($ifn == $pconfig['if']) {
- echo " selected=\"selected\"";
- }
- echo ">";
- echo htmlspecialchars($ifn . " (" . $ifinfo['mac'] . ")");
- echo "</option>";
- }
- }
- ?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Only VLAN capable interfaces will be shown.");?></span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("VLAN tag ");?></td>
- <td class="vtable">
- <input name="tag" type="text" class="formfld unknown" id="tag" size="6" value="<?=htmlspecialchars($pconfig['tag']);?>" />
- <br />
- <span class="vexpl"><?=gettext("802.1Q VLAN tag (between 1 and 4094) ");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input type="hidden" name="vlanif" value="<?=htmlspecialchars($pconfig['vlanif']); ?>" />
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_vlans[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_wireless.php b/usr/local/www/interfaces_wireless.php
deleted file mode 100644
index 86fc077..0000000
--- a/usr/local/www/interfaces_wireless.php
+++ /dev/null
@@ -1,160 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_wireless.php
-
- Copyright (C) 2010 Erik Fonnesbeck
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: interfaces_assign
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-wireless
-##|*NAME=Interfaces: Wireless page
-##|*DESCR=Allow access to the 'Interfaces: Wireless' page.
-##|*MATCH=interfaces_wireless.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (!is_array($config['wireless'])) {
- $config['wireless'] = array();
-}
-if (!is_array($config['wireless']['clone'])) {
- $config['wireless']['clone'] = array();
-}
-
-$a_clones = &$config['wireless']['clone'];
-
-function clone_inuse($num) {
- global $config, $a_clones;
-
- $iflist = get_configured_interface_list(false, true);
- foreach ($iflist as $if) {
- if ($config['interfaces'][$if]['if'] == $a_clones[$num]['cloneif']) {
- return true;
- }
- }
-
- return false;
-}
-
-if ($_GET['act'] == "del") {
- /* check if still in use */
- if (clone_inuse($_GET['id'])) {
- $input_errors[] = gettext("This wireless clone cannot be deleted because it is assigned as an interface.");
- } else {
- mwexec("/sbin/ifconfig " . $a_clones[$_GET['id']]['cloneif'] . " destroy");
- unset($a_clones[$_GET['id']]);
-
- write_config();
-
- header("Location: interfaces_wireless.php");
- exit;
- }
-}
-
-
-$pgtitle = array(gettext("Interfaces"), gettext("Wireless"));
-$shortcut_section = "wireless";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces wireless">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
- $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
- $tab_array[2] = array(gettext("Wireless"), true, "interfaces_wireless.php");
- $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
- $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
- $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
- $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
- $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
- $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
- $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main table">
- <tr>
- <td width="20%" class="listhdrr"><?=gettext("Interface");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Mode");?></td>
- <td width="50%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list"></td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_clones as $clone):
-?>
- <tr ondblclick="document.location='interfaces_wireless_edit.php?id=<?=$i;?>'">
- <td class="listlr">
- <?=htmlspecialchars($clone['cloneif']);?>
- </td>
- <td class="listr">
- <?= $wlan_modes[$clone['mode']]; ?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($clone['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap"> <a href="interfaces_wireless_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" ></a>
- &nbsp;<a href="interfaces_wireless.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this wireless clone?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="3">&nbsp;</td>
- <td class="list"> <a href="interfaces_wireless_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="edit" /></a></td>
- </tr>
- <tr>
- <td colspan="3" class="list"><p class="vexpl">
- <span class="red"><strong>
- <?=gettext("Note");?>:<br />
- </strong></span>
- <?=gettext("Here you can configure clones of wireless interfaces, which can be assigned as separate independent interfaces. Only available on wireless chipsets that support this, with limitations on the number that can be created in each mode.");?></p>
- </td>
- <td class="list">&nbsp;</td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/interfaces_wireless_edit.php b/usr/local/www/interfaces_wireless_edit.php
deleted file mode 100644
index 6ccce5c..0000000
--- a/usr/local/www/interfaces_wireless_edit.php
+++ /dev/null
@@ -1,230 +0,0 @@
-<?php
-/* $Id$ */
-/*
- interfaces_wireless_edit.php
-
- Copyright (C) 2010 Erik Fonnesbeck
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-interfaces-wireless-edit
-##|*NAME=Interfaces: Wireless edit page
-##|*DESCR=Allow access to the 'Interfaces: Wireless : Edit' page.
-##|*MATCH=interfaces_wireless_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_wireless.php');
-}
-
-if (!is_array($config['wireless'])) {
- $config['wireless'] = array();
-}
-if (!is_array($config['wireless']['clone'])) {
- $config['wireless']['clone'] = array();
-}
-
-$a_clones = &$config['wireless']['clone'];
-
-function clone_inuse($num) {
- global $config, $a_clones;
-
- $iflist = get_configured_interface_list(false, true);
- foreach ($iflist as $if) {
- if ($config['interfaces'][$if]['if'] == $a_clones[$num]['cloneif']) {
- return true;
- }
- }
-
- return false;
-}
-
-function clone_compare($a, $b) {
- return strnatcmp($a['cloneif'], $b['cloneif']);
-}
-
-$portlist = get_interface_list();
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_clones[$id]) {
- $pconfig['if'] = $a_clones[$id]['if'];
- $pconfig['cloneif'] = $a_clones[$id]['cloneif'];
- $pconfig['mode'] = $a_clones[$id]['mode'];
- $pconfig['descr'] = $a_clones[$id]['descr'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "if mode");
- $reqdfieldsn = array(gettext("Parent interface"), gettext("Mode"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (!$input_errors) {
- $clone = array();
- $clone['if'] = $_POST['if'];
- $clone['mode'] = $_POST['mode'];
- $clone['descr'] = $_POST['descr'];
-
- if (isset($id) && $a_clones[$id]) {
- if ($clone['if'] == $a_clones[$id]['if']) {
- $clone['cloneif'] = $a_clones[$id]['cloneif'];
- }
- }
- if (!$clone['cloneif']) {
- $clone_id = 1;
- do {
- $clone_exists = false;
- $clone['cloneif'] = "{$_POST['if']}_wlan{$clone_id}";
- foreach ($a_clones as $existing) {
- if ($clone['cloneif'] == $existing['cloneif']) {
- $clone_exists = true;
- $clone_id++;
- break;
- }
- }
- } while ($clone_exists);
- }
-
- if (isset($id) && $a_clones[$id]) {
- if (clone_inuse($id)) {
- if ($clone['if'] != $a_clones[$id]['if']) {
- $input_errors[] = gettext("This wireless clone cannot be modified because it is still assigned as an interface.");
- } else if ($clone['mode'] != $a_clones[$id]['mode']) {
- $input_errors[] = gettext("Use the configuration page for the assigned interface to change the mode.");
- }
- }
- }
- if (!$input_errors) {
- if (!interface_wireless_clone($clone['cloneif'], $clone)) {
- $input_errors[] = sprintf(gettext('Error creating interface with mode %1$s. The %2$s interface may not support creating more clones with the selected mode.'), $wlan_modes[$clone['mode']], $clone['if']);
- } else {
- if (isset($id) && $a_clones[$id]) {
- if ($clone['if'] != $a_clones[$id]['if']) {
- mwexec("/sbin/ifconfig " . $a_clones[$id]['cloneif'] . " destroy");
- }
- $input_errors[] = sprintf(gettext("Created with id %s"), $id);
- $a_clones[$id] = $clone;
- } else {
- $input_errors[] = gettext("Created without id");
- $a_clones[] = $clone;
- }
-
- usort($a_clones, "clone_compare");
- write_config();
-
- header("Location: interfaces_wireless.php");
- exit;
- }
- }
- }
-}
-
-$pgtitle = array(gettext("Interfaces"), gettext("Wireless"), gettext("Edit"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="interfaces_wireless_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces wireless edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Wireless clone configuration");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Parent interface");?></td>
- <td width="78%" class="vtable">
- <select name="if" class="formselect">
- <?php
- foreach ($portlist as $ifn => $ifinfo) {
- if (preg_match($g['wireless_regex'], $ifn)) {
- echo "<option value=\"{$ifn}\"";
- if ($ifn == $pconfig['if']) {
- echo " selected=\"selected\"";
- }
- echo ">";
- echo htmlspecialchars($ifn . " (" . $ifinfo['mac'] . ")");
- echo "</option>";
- }
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Mode");?></td>
- <td class="vtable">
- <select name="mode" class="formselect">
- <option <?php if ($pconfig['mode'] == 'bss') echo "selected=\"selected\"";?> value="bss"><?=gettext("Infrastructure (BSS)");?></option>
- <option <?php if ($pconfig['mode'] == 'adhoc') echo "selected=\"selected\"";?> value="adhoc"><?=gettext("Ad-hoc (IBSS)");?></option>
- <option <?php if ($pconfig['mode'] == 'hostap') echo "selected=\"selected\"";?> value="hostap"><?=gettext("Access Point");?></option>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input type="hidden" name="cloneif" value="<?=htmlspecialchars($pconfig['cloneif']); ?>" />
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_clones[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/javascript/autosuggest.js b/usr/local/www/javascript/autosuggest.js
deleted file mode 100644
index d9b5ac0..0000000
--- a/usr/local/www/javascript/autosuggest.js
+++ /dev/null
@@ -1,337 +0,0 @@
-
-/**
- * An autosuggest textbox control.
- * @class
- * @scope public
- */
-function AutoSuggestControl(oTextbox /*:HTMLInputElement*/,
- oProvider /*:SuggestionProvider*/) {
-
- /**
- * The currently selected suggestions.
- * @scope private
- */
- this.cur /*:int*/ = -1;
-
- /**
- * The dropdown list layer.
- * @scope private
- */
- this.layer = null;
-
- /**
- * Suggestion provider for the autosuggest feature.
- * @scope private.
- */
- this.provider /*:SuggestionProvider*/ = oProvider;
-
- /**
- * The textbox to capture.
- * @scope private
- */
- this.textbox /*:HTMLInputElement*/ = oTextbox;
-
- //initialize the control
- this.init();
-
-}
-
-/**
- * Autosuggests one or more suggestions for what the user has typed.
- * If no suggestions are passed in, then no autosuggest occurs.
- * @scope private
- * @param aSuggestions An array of suggestion strings.
- * @param bTypeAhead If the control should provide a type ahead suggestion.
- */
-AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/,
- bTypeAhead /*:boolean*/) {
-
- //make sure there's at least one suggestion
- if (aSuggestions.length > 0) {
- if (bTypeAhead) {
- this.typeAhead(aSuggestions[0]);
- }
-
- this.showSuggestions(aSuggestions);
- } else {
- this.hideSuggestions();
- }
-};
-
-/**
- * Creates the dropdown layer to display multiple suggestions.
- * @scope private
- */
-AutoSuggestControl.prototype.createDropDown = function () {
-
- var oThis = this;
-
- //create the layer and assign styles
- this.layer = document.createElement("div");
- this.layer.className = "suggestions";
- this.layer.style.visibility = "hidden";
- this.layer.style.width = this.textbox.offsetWidth;
-
- //when the user clicks on the a suggestion, get the text (innerHTML)
- //and place it into a textbox
- this.layer.onmousedown =
- this.layer.onmouseup =
- this.layer.onmouseover = function (oEvent) {
- oEvent = oEvent || window.event;
- oTarget = oEvent.target || oEvent.srcElement;
-
- if (oEvent.type == "mousedown") {
- oThis.textbox.value = oTarget.firstChild.nodeValue;
- oThis.hideSuggestions();
- } else if (oEvent.type == "mouseover") {
- oThis.highlightSuggestion(oTarget);
- } else {
- oThis.textbox.focus();
- }
- };
-
-
- document.body.appendChild(this.layer);
-};
-
-/**
- * Gets the left coordinate of the textbox.
- * @scope private
- * @return The left coordinate of the textbox in pixels.
- */
-AutoSuggestControl.prototype.getLeft = function () /*:int*/ {
-
- var oNode = this.textbox;
- var iLeft = 0;
-
- while(oNode.tagName != "BODY") {
- iLeft += oNode.offsetLeft;
- oNode = oNode.offsetParent;
- }
-
- return iLeft;
-};
-
-/**
- * Gets the top coordinate of the textbox.
- * @scope private
- * @return The top coordinate of the textbox in pixels.
- */
-AutoSuggestControl.prototype.getTop = function () /*:int*/ {
-
- var oNode = this.textbox;
- var iTop = 0;
-
- while(oNode.tagName != "BODY") {
- iTop += oNode.offsetTop;
- oNode = oNode.offsetParent;
- }
-
- return iTop;
-};
-
-/**
- * Handles three keydown events.
- * @scope private
- * @param oEvent The event object for the keydown event.
- */
-AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) {
-
- switch(oEvent.keyCode) {
- case 38: //up arrow
- this.previousSuggestion();
- break;
- case 40: //down arrow
- this.nextSuggestion();
- break;
- case 13: //enter
- this.hideSuggestions();
- break;
- }
-
-};
-
-/**
- * Handles keyup events.
- * @scope private
- * @param oEvent The event object for the keyup event.
- */
-AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) {
-
- var iKeyCode = oEvent.keyCode;
-
- //for backspace (8) and delete (46), shows suggestions without typeahead
- if (iKeyCode == 8 || iKeyCode == 46) {
- this.provider.requestSuggestions(this, false);
-
- //make sure not to interfere with non-character keys
- } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
- //ignore
- } else {
- //request suggestions from the suggestion provider with typeahead
- this.provider.requestSuggestions(this, true);
- }
-};
-
-/**
- * Hides the suggestion dropdown.
- * @scope private
- */
-AutoSuggestControl.prototype.hideSuggestions = function () {
- this.layer.style.visibility = "hidden";
-};
-
-/**
- * Highlights the given node in the suggestions dropdown.
- * @scope private
- * @param oSuggestionNode The node representing a suggestion in the dropdown.
- */
-AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) {
-
- for (var i=0; i < this.layer.childNodes.length; i++) {
- var oNode = this.layer.childNodes[i];
- if (oNode == oSuggestionNode) {
- oNode.className = "current";
- } else if (oNode.className == "current") {
- oNode.className = "";
- }
- }
-};
-
-/**
- * Initializes the textbox with event handlers for
- * auto suggest functionality.
- * @scope private
- */
-AutoSuggestControl.prototype.init = function () {
-
- //save a reference to this object
- var oThis = this;
-
- //assign the onkeyup event handler
- this.textbox.onkeyup = function (oEvent) {
-
- //check for the proper location of the event object
- if (!oEvent) {
- oEvent = window.event;
- }
-
- //call the handleKeyUp() method with the event object
- oThis.handleKeyUp(oEvent);
- };
-
- //assign onkeydown event handler
- this.textbox.onkeydown = function (oEvent) {
-
- //check for the proper location of the event object
- if (!oEvent) {
- oEvent = window.event;
- }
-
- //call the handleKeyDown() method with the event object
- oThis.handleKeyDown(oEvent);
- };
-
- //assign onblur event handler (hides suggestions)
- this.textbox.onblur = function () {
- oThis.hideSuggestions();
- };
-
- //create the suggestions dropdown
- this.createDropDown();
-};
-
-/**
- * Highlights the next suggestion in the dropdown and
- * places the suggestion into the textbox.
- * @scope private
- */
-AutoSuggestControl.prototype.nextSuggestion = function () {
- var cSuggestionNodes = this.layer.childNodes;
-
- if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) {
- var oNode = cSuggestionNodes[++this.cur];
- this.highlightSuggestion(oNode);
- this.textbox.value = oNode.firstChild.nodeValue;
- }
-};
-
-/**
- * Highlights the previous suggestion in the dropdown and
- * places the suggestion into the textbox.
- * @scope private
- */
-AutoSuggestControl.prototype.previousSuggestion = function () {
- var cSuggestionNodes = this.layer.childNodes;
-
- if (cSuggestionNodes.length > 0 && this.cur > 0) {
- var oNode = cSuggestionNodes[--this.cur];
- this.highlightSuggestion(oNode);
- this.textbox.value = oNode.firstChild.nodeValue;
- }
-};
-
-/**
- * Selects a range of text in the textbox.
- * @scope public
- * @param iStart The start index (base 0) of the selection.
- * @param iLength The number of characters to select.
- */
-AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) {
-
- //use text ranges for Internet Explorer
- if (this.textbox.createTextRange) {
- var oRange = this.textbox.createTextRange();
- oRange.moveStart("character", iStart);
- oRange.moveEnd("character", iLength - this.textbox.value.length);
- oRange.select();
-
- //use setSelectionRange() for Mozilla
- } else if (this.textbox.setSelectionRange) {
- this.textbox.setSelectionRange(iStart, iLength);
- }
-
- //set focus back to the textbox
- this.textbox.focus();
-};
-
-/**
- * Builds the suggestion layer contents, moves it into position,
- * and displays the layer.
- * @scope private
- * @param aSuggestions An array of suggestions for the control.
- */
-AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) {
-
- var oDiv = null;
- this.layer.innerHTML = ""; //clear contents of the layer
-
- for (var i=0; i < aSuggestions.length; i++) {
- oDiv = document.createElement("div");
- oDiv.appendChild(document.createTextNode(aSuggestions[i]));
- this.layer.appendChild(oDiv);
- }
-
- this.layer.style.left = this.getLeft() + "px";
- this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px";
- this.layer.style.width = this.textbox.offsetWidth + "px";
- this.layer.style.visibility = "visible";
-
-};
-
-/**
- * Inserts a suggestion into the textbox, highlighting the
- * suggested part of the text.
- * @scope private
- * @param sSuggestion The suggestion for the textbox.
- */
-AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) {
-
- //check for support of typeahead functionality
- if (this.textbox.createTextRange || this.textbox.setSelectionRange){
- var iLen = this.textbox.value.length;
- this.textbox.value = sSuggestion;
- this.selectRange(iLen, sSuggestion.length);
- }
-};
-
diff --git a/usr/local/www/javascript/base64.js b/usr/local/www/javascript/base64.js
deleted file mode 100644
index 48d5f33..0000000
--- a/usr/local/www/javascript/base64.js
+++ /dev/null
@@ -1,142 +0,0 @@
-/**
- *
- * Base64 encode / decode
- * http://www.webtoolkit.info/
- * http://www.webtoolkit.info/licence
- **/
-
-var Base64 = {
-
- // private property
- _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
-
- // public method for encoding
- encode : function (input) {
- var output = "";
- var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
- var i = 0;
-
- input = Base64._utf8_encode(input);
-
- while (i < input.length) {
-
- chr1 = input.charCodeAt(i++);
- chr2 = input.charCodeAt(i++);
- chr3 = input.charCodeAt(i++);
-
- enc1 = chr1 >> 2;
- enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
- enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
- enc4 = chr3 & 63;
-
- if (isNaN(chr2)) {
- enc3 = enc4 = 64;
- } else if (isNaN(chr3)) {
- enc4 = 64;
- }
-
- output = output +
- this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
- this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
-
- }
-
- return output;
- },
-
- // public method for decoding
- decode : function (input) {
- var output = "";
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0;
-
- input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
-
- while (i < input.length) {
-
- enc1 = this._keyStr.indexOf(input.charAt(i++));
- enc2 = this._keyStr.indexOf(input.charAt(i++));
- enc3 = this._keyStr.indexOf(input.charAt(i++));
- enc4 = this._keyStr.indexOf(input.charAt(i++));
-
- chr1 = (enc1 << 2) | (enc2 >> 4);
- chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
- chr3 = ((enc3 & 3) << 6) | enc4;
-
- output = output + String.fromCharCode(chr1);
-
- if (enc3 != 64) {
- output = output + String.fromCharCode(chr2);
- }
- if (enc4 != 64) {
- output = output + String.fromCharCode(chr3);
- }
-
- }
-
- output = Base64._utf8_decode(output);
-
- return output;
-
- },
-
- // private method for UTF-8 encoding
- _utf8_encode : function (string) {
- string = string.replace(/\r\n/g,"\n");
- var utftext = "";
-
- for (var n = 0; n < string.length; n++) {
-
- var c = string.charCodeAt(n);
-
- if (c < 128) {
- utftext += String.fromCharCode(c);
- }
- else if((c > 127) && (c < 2048)) {
- utftext += String.fromCharCode((c >> 6) | 192);
- utftext += String.fromCharCode((c & 63) | 128);
- }
- else {
- utftext += String.fromCharCode((c >> 12) | 224);
- utftext += String.fromCharCode(((c >> 6) & 63) | 128);
- utftext += String.fromCharCode((c & 63) | 128);
- }
-
- }
-
- return utftext;
- },
-
- // private method for UTF-8 decoding
- _utf8_decode : function (utftext) {
- var string = "";
- var i = 0;
- var c = c1 = c2 = 0;
-
- while ( i < utftext.length ) {
-
- c = utftext.charCodeAt(i);
-
- if (c < 128) {
- string += String.fromCharCode(c);
- i++;
- }
- else if((c > 191) && (c < 224)) {
- c2 = utftext.charCodeAt(i+1);
- string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
- i += 2;
- }
- else {
- c2 = utftext.charCodeAt(i+1);
- c3 = utftext.charCodeAt(i+2);
- string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
- i += 3;
- }
-
- }
-
- return string;
- }
-
-}; \ No newline at end of file
diff --git a/usr/local/www/javascript/carp_status/carp_status.js b/usr/local/www/javascript/carp_status/carp_status.js
deleted file mode 100644
index c14201d..0000000
--- a/usr/local/www/javascript/carp_status/carp_status.js
+++ /dev/null
@@ -1,5 +0,0 @@
-
-window.onLoad = function () {
- NiftyCheck();
- Rounded("div#mainlevel","all","#FFF","#eeeeee","smooth");
-};
diff --git a/usr/local/www/javascript/chosen/chosen-sprite.png b/usr/local/www/javascript/chosen/chosen-sprite.png
deleted file mode 100644
index 6ec9bbf..0000000
--- a/usr/local/www/javascript/chosen/chosen-sprite.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/chosen/chosen.css b/usr/local/www/javascript/chosen/chosen.css
deleted file mode 100644
index d2b1eb4..0000000
--- a/usr/local/www/javascript/chosen/chosen.css
+++ /dev/null
@@ -1,317 +0,0 @@
-div.chzn-container {
- font-size: 13px;
- position: relative;
-}
-
-div.chzn-container input {
- background: #fff;
- background: -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
- background: -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
- background: -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
- border: 1px solid #aaa;
- font-family: sans-serif;
- font-size: 1em;
- margin: 0px;
- padding: 4px 5px;
- outline: none;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- -o-border-radius: 3px;
- -ms-border-radius: 3px;
- -khtml-border-radius: 3px;
- border-radius: 3px;
-}
-div.chzn-container textarea:focus {
- border-color: #058cf5;
- -moz-box-shadow: 0px 0px 3px #aaa;
- -webkit-box-shadow: 0px 0px 3px #aaa;
- box-shadow: 0px 0px 3px #aaa;
-}
-
-
-div.chzn-container div.chzn-drop {
- background: #FFF;
- border: 1px solid #aaa;
- border-width: 0 1px 1px;
- left: 0;
- position: absolute;
- top: 29px;
- -webkit-box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.15);
- -moz-box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.15);
- box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15);
- z-index: 20;
-}
-div.chzn-container-single div.chzn-drop {
- -moz-border-radius: 0 0 4px 4px;
- -webkit-border-radius: 0 0 4px 4px;
- -o-border-radius: 0 0 4px 4px;
- -ms-border-radius: 0 0 4px 4px;
- -khtml-border-radius: 0 0 4px 4px;
- border-radius: 0 0 4px 4px;
-}
-
-
-/* SINGLE */
-div.chzn-container a.chzn-single {
- background: #FFF;
- background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.5, white));
- background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 50%);
- background-image: -o-linear-gradient(bottom, #eeeeee 0%, white 50%);
- border: 1px solid #aaa;
- display: block;
- overflow: hidden;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- -o-border-radius: 4px;
- -ms-border-radius: 4px;
- -khtml-border-radius: 4px;
- border-radius: 4px;
- height: 25px;
- color: #444;
- line-height: 26px;
- padding: 0px 0px 0px 8px;
- position: relative;
- text-decoration: none;
- z-index: 19;
- white-space: nowrap;
-}
-div.chzn-container a.chzn-single span {
- display: block;
- margin-right: 26px;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-div.chzn-container a.chzn-single div {
- -moz-border-radius-topright: 4px;
- -webkit-border-top-right-radius: 4px;
- -o-border-top-right-radius: 4px;
- -ms-border-top-right-radius: 4px;
- -khtml-border-top-right-radius: 4px;
- border-top-right-radius: 4px;
- -moz-border-radius-bottomright: 4px;
- -webkit-border-bottom-right-radius: 4px;
- -o-border-bottom-right-radius: 4px;
- -ms-border-bottom-right-radius: 4px;
- -khtml-border-bottom-right-radius: 4px;
- border-bottom-right-radius: 4px;
- background: #ccc;
- background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
- background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
- background-image: -o-linear-gradient(bottom, #ccc 0%, #eee 60%);
- border-left: 1px solid #aaa;
- display: block;
- height: 100%;
- position: absolute;
- right: 0;
- top: 0;
- width: 18px;
-}
-div.chzn-container a.chzn-single div b {
- background: url('chosen-sprite.png') no-repeat 0 1px;
- display: block;
- width: 100%;
- height: 100%;
-}
-div.chzn-container div.chzn-search {
- padding: 3px 4px;
- margin: 0px;
- white-space: nowrap;
-}
-div.chzn-container div.chzn-search input {
- background: url('chosen-sprite.png') no-repeat 97% -35px, #ffffff;
- background: url('chosen-sprite.png') no-repeat 97% -35px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
- background: url('chosen-sprite.png') no-repeat 97% -35px, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
- background: url('chosen-sprite.png') no-repeat 97% -35px, -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
- -moz-border-radius: 0px;
- -webkit-border-radius: 0px;
- -o-border-radius: 0px;
- -ms-border-radius: 0px;
- -khtml-border-radius: 0px;
- border-radius: 0px;
- margin: 1px 0;
- outline: 0;
-}
-
-
-/* Multi */
-div.chzn-container ul.chzn-choices {
- background: #fff;
- background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
- background-image: -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
- background-image: -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
- margin: 0;
- cursor: text;
- border: 1px solid #aaa;
- overflow: hidden;
- height: auto !important;
- height: 1%;
- padding: 0;
- position: relative;
-}
-div.chzn-container ul.chzn-choices:focus {
- border-color: #058cf5;
- -moz-box-shadow: 0px 0px 5px #999;
- -webkit-box-shadow: 0px 0px 5px #999;
- box-shadow: 0px 0px 5px #999;
-}
-div.chzn-container ul.chzn-choices li {
- float: left;
- list-style-type: none;
- margin: 0px;
-}
-div.chzn-container ul.chzn-choices li.search-field {
- margin: 0px;
- white-space: nowrap;
- padding: 0px;
-}
-div.chzn-container ul.chzn-choices li.search-field input {
- color: #666;
- background: transparent !important;
- border: 0px !important;
- padding: 5px;
- margin: 1px 0;
- outline: 0;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
-}
-div.chzn-container ul.chzn-choices li.search-field input.default {
- color: #999;
-}
-div.chzn-container ul.chzn-choices li.search-choice {
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- background: #e4e4e4;
- background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #e4e4e4), color-stop(0.7, #eeeeee));
- background-image: -moz-linear-gradient(center bottom, #e4e4e4 0%, #eeeeee 70%);
- background-image: -o-linear-gradient(bottom, #e4e4e4 0%, #eeeeee 70%);
- color: #333;
- border: 1px solid #b4b4b4;
- line-height: 13px;
- padding: 3px 19px 3px 6px;
- position: relative;
- margin: 3px 0px 3px 5px;
-}
-div.chzn-container ul.chzn-choices li.search-choice span {
- cursor: default;
-}
-div.chzn-container ul.chzn-choices li.search-choice.search-choice-focus {
- background: #d4d4d4;
-}
-div.chzn-container ul.chzn-choices li.search-choice a.search-choice-close {
- position: absolute;
- right: 5px;
- top: 6px;
- display: block;
- width: 8px;
- height: 9px;
- font-size: 1px;
- background: url(chosen-sprite.png) right top no-repeat;
-}
-div.chzn-container ul.chzn-choices li.search-choice a.search-choice-close:hover {
- background-position: right -9px;
-}
-div.chzn-container ul.chzn-choices li.search-choice.search-choice-focus a.search-choice-close {
- background-position: right -9px;
-}
-
-
-/* Results */
-div.chzn-container ul.chzn-results {
- margin: 0 4px 4px 0;
- max-height: 190px;
- padding: 0 0 0 4px;
- position: relative;
- overflow-x: hidden;
- overflow-y: auto;
- z-index: 20;
-}
-div.chzn-container-multi ul.chzn-results {
- margin: -1px 0 0;
- padding: 0;
-}
-div.chzn-container-multi ul.chzn-results li {
- border-left: 0px !important;
- border-right: 0px !important;
-}
-div.chzn-container ul.chzn-results li {
- line-height: 80%;
- padding: 7px 7px 8px;
- z-index: 22;
- margin: 0;
- list-style-type: none;
-}
-div.chzn-container ul.chzn-results li.active-result {
- cursor: pointer;
-}
-div.chzn-container ul.chzn-results li em {
- font-style: normal;
- background: #FEFFDC;
-}
-div.chzn-container ul.chzn-results li.highlighted {
- background: #3875d7;
- color: #fff;
-}
-div.chzn-container ul.chzn-results li.highlighted em {
- background: transparent;
-}
-div.chzn-container ul.chzn-results li.no-results {
- background: #F4F4F4;
-}
-div.chzn-container ul.chzn-results li.group-result {
- cursor: default;
- color: #999;
- font-weight: bold;
-}
-div.chzn-container ul.chzn-results li.group-option {
- padding-left: 20px;
-}
-
-div.chzn-container-multi div.chzn-drop li.result-selected {
- display: none;
-}
-
-
-
-/* Active */
-div.chzn-container-active a.chzn-single {
- -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);
- -moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);
- box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);
- border: 1px solid #5897fb;
-}
-div.chzn-container-active a.chzn-single-with-drop {
- border: 1px solid #aaa;
- border-width: 1px 1px 1px;
- -moz-box-shadow: 0px 1px 0px #FFF inset;
- -webkit-box-shadow: 0px 1px 0px #FFF inset;
- box-shadow: 0px 1px 0px #FFF inset;
- background: #EEE;
- background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, white), color-stop(0.5, #eeeeee));
- background-image: -moz-linear-gradient(center bottom, white 0%, #eeeeee 50%);
- background-image: -o-linear-gradient(bottom, white 0%, #eeeeee 50%);
- -webkit-border-bottom-left-radius: 0px;
- -webkit-border-bottom-right-radius: 0px;
- -moz-border-radius-bottomleft: 0px;
- -moz-border-radius-bottomright: 0px;
- border-bottom-left-radius: 0px;
- border-bottom-right-radius: 0px;
-}
-div.chzn-container-active a.chzn-single-with-drop div {
- background: transparent;
- border-left: none;
-}
-div.chzn-container-active a.chzn-single-with-drop div b {
- background-position: -18px 1px;
-}
-div.chzn-container-active ul.chzn-choices {
- z-index: 21;
- -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);
- -moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);
- box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);
- border: 1px solid #5897fb;
-}
-div.chzn-container-active ul.chzn-choices input {
- color: #111 !important;
-}
diff --git a/usr/local/www/javascript/chosen/chosen.jquery.js b/usr/local/www/javascript/chosen/chosen.jquery.js
deleted file mode 100644
index 21e822a..0000000
--- a/usr/local/www/javascript/chosen/chosen.jquery.js
+++ /dev/null
@@ -1,755 +0,0 @@
-(function() {
- /*
- Chosen, a Select Box Enhancer for jQuery and Protoype
- by Patrick Filler for Harvest, http://getharvest.com
-
- Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License
-
- Copyright (c) 2011 by Harvest
- */ var $, Chosen, SelectParser, get_side_border_padding, root;
- var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
- root = typeof exports !== "undefined" && exports !== null ? exports : this;
- $ = jQuery;
- $.fn.extend({
- chosen: function(data, options) {
- return $(this).each(function(input_field) {
- if (!($(this)).hasClass("chzn-done")) {
- return new Chosen(this, data, options);
- }
- });
- }
- });
- Chosen = (function() {
- function Chosen(elmn) {
- this.set_default_values();
- this.form_field = elmn;
- this.form_field_jq = $(this.form_field);
- this.is_multiple = this.form_field.multiple;
- this.default_text_default = this.form_field.multiple ? "Select Some Options" : "Select an Option";
- this.set_up_html();
- this.register_observers();
- this.form_field_jq.addClass("chzn-done");
- }
- Chosen.prototype.set_default_values = function() {
- this.click_test_action = __bind(function(evt) {
- return this.test_active_click(evt);
- }, this);
- this.active_field = false;
- this.mouse_on_container = false;
- this.results_showing = false;
- this.result_highlighted = null;
- this.result_single_selected = null;
- return this.choices = 0;
- };
- Chosen.prototype.set_up_html = function() {
- var container_div, dd_top, dd_width, sf_width;
- this.container_id = this.form_field.id + "_chzn";
- this.f_width = this.form_field_jq.width();
- this.default_text = this.form_field_jq.attr('title') ? this.form_field_jq.attr('title') : this.default_text_default;
- container_div = $("<div />", {
- id: this.container_id,
- "class": 'chzn-container',
- style: 'width: ' + this.f_width + 'px;'
- });
- if (this.is_multiple) {
- container_div.html('<ul class="chzn-choices"><li class="search-field"><input type="text" value="' + this.default_text + '" class="default" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>');
- } else {
- container_div.html('<a href="javascript:void(0)" class="chzn-single"><span>' + this.default_text + '</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" /></div><ul class="chzn-results"></ul></div>');
- }
- this.form_field_jq.hide().after(container_div);
- this.container = $('#' + this.container_id);
- this.container.addClass("chzn-container-" + (this.is_multiple ? "multi" : "single"));
- this.dropdown = this.container.find('div.chzn-drop').first();
- dd_top = this.container.height();
- dd_width = this.f_width - get_side_border_padding(this.dropdown);
- this.dropdown.css({
- "width": dd_width + "px",
- "top": dd_top + "px"
- });
- this.search_field = this.container.find('input').first();
- this.search_results = this.container.find('ul.chzn-results').first();
- this.search_field_scale();
- this.search_no_results = this.container.find('li.no-results').first();
- if (this.is_multiple) {
- this.search_choices = this.container.find('ul.chzn-choices').first();
- this.search_container = this.container.find('li.search-field').first();
- } else {
- this.search_container = this.container.find('div.chzn-search').first();
- this.selected_item = this.container.find('.chzn-single').first();
- sf_width = dd_width - get_side_border_padding(this.search_container) - get_side_border_padding(this.search_field);
- this.search_field.css({
- "width": sf_width + "px"
- });
- }
- this.results_build();
- return this.set_tab_index();
- };
- Chosen.prototype.register_observers = function() {
- this.container.click(__bind(function(evt) {
- return this.container_click(evt);
- }, this));
- this.container.mouseenter(__bind(function(evt) {
- return this.mouse_enter(evt);
- }, this));
- this.container.mouseleave(__bind(function(evt) {
- return this.mouse_leave(evt);
- }, this));
- this.search_results.click(__bind(function(evt) {
- return this.search_results_click(evt);
- }, this));
- this.search_results.mouseover(__bind(function(evt) {
- return this.search_results_mouseover(evt);
- }, this));
- this.search_results.mouseout(__bind(function(evt) {
- return this.search_results_mouseout(evt);
- }, this));
- this.form_field_jq.bind("liszt:updated", __bind(function(evt) {
- return this.results_update_field(evt);
- }, this));
- this.search_field.blur(__bind(function(evt) {
- return this.input_blur(evt);
- }, this));
- this.search_field.keyup(__bind(function(evt) {
- return this.keyup_checker(evt);
- }, this));
- this.search_field.keydown(__bind(function(evt) {
- return this.keydown_checker(evt);
- }, this));
- if (this.is_multiple) {
- this.search_choices.click(__bind(function(evt) {
- return this.choices_click(evt);
- }, this));
- return this.search_field.focus(__bind(function(evt) {
- return this.input_focus(evt);
- }, this));
- } else {
- return this.selected_item.focus(__bind(function(evt) {
- return this.activate_field(evt);
- }, this));
- }
- };
- Chosen.prototype.container_click = function(evt) {
- if (evt && evt.type === "click") {
- evt.stopPropagation();
- }
- if (!this.pending_destroy_click) {
- if (!this.active_field) {
- if (this.is_multiple) {
- this.search_field.val("");
- }
- $(document).click(this.click_test_action);
- this.results_show();
- } else if (!this.is_multiple && evt && ($(evt.target) === this.selected_item || $(evt.target).parents("a.chzn-single").length)) {
- evt.preventDefault();
- this.results_toggle();
- }
- return this.activate_field();
- } else {
- return this.pending_destroy_click = false;
- }
- };
- Chosen.prototype.mouse_enter = function() {
- return this.mouse_on_container = true;
- };
- Chosen.prototype.mouse_leave = function() {
- return this.mouse_on_container = false;
- };
- Chosen.prototype.input_focus = function(evt) {
- if (!this.active_field) {
- return setTimeout((__bind(function() {
- return this.container_click();
- }, this)), 50);
- }
- };
- Chosen.prototype.input_blur = function(evt) {
- if (!this.mouse_on_container) {
- this.active_field = false;
- return setTimeout((__bind(function() {
- return this.blur_test();
- }, this)), 100);
- }
- };
- Chosen.prototype.blur_test = function(evt) {
- if (!this.active_field && this.container.hasClass("chzn-container-active")) {
- return this.close_field();
- }
- };
- Chosen.prototype.close_field = function() {
- $(document).unbind("click", this.click_test_action);
- if (!this.is_multiple) {
- this.selected_item.attr("tabindex", this.search_field.attr("tabindex"));
- this.search_field.attr("tabindex", -1);
- }
- this.active_field = false;
- this.results_hide();
- this.container.removeClass("chzn-container-active");
- this.winnow_results_clear();
- this.clear_backstroke();
- this.show_search_field_default();
- return this.search_field_scale();
- };
- Chosen.prototype.activate_field = function() {
- if (!this.is_multiple && !this.active_field) {
- this.search_field.attr("tabindex", this.selected_item.attr("tabindex"));
- this.selected_item.attr("tabindex", -1);
- }
- this.container.addClass("chzn-container-active");
- this.active_field = true;
- this.search_field.val(this.search_field.val());
- return this.search_field.focus();
- };
- Chosen.prototype.test_active_click = function(evt) {
- if ($(evt.target).parents('#' + this.container.id).length) {
- return this.active_field = true;
- } else {
- return this.close_field();
- }
- };
- Chosen.prototype.results_build = function() {
- var content, data, startTime, _i, _len, _ref;
- startTime = new Date();
- this.parsing = true;
- this.results_data = SelectParser.select_to_array(this.form_field);
- if (this.is_multiple && this.choices > 0) {
- this.search_choices.find("li.search-choice").remove();
- this.choices = 0;
- } else if (!this.is_multiple) {
- this.selected_item.find("span").text(this.default_text);
- }
- content = '';
- _ref = this.results_data;
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- data = _ref[_i];
- if (data.group) {
- content += this.result_add_group(data);
- } else if (!data.empty) {
- content += this.result_add_option(data);
- if (data.selected && this.is_multiple) {
- this.choice_build(data);
- } else if (data.selected && !this.is_multiple) {
- this.selected_item.find("span").text(data.text);
- }
- }
- }
- this.show_search_field_default();
- this.search_field_scale();
- this.search_results.html(content);
- return this.parsing = false;
- };
- Chosen.prototype.result_add_group = function(group) {
- if (!group.disabled) {
- group.dom_id = this.form_field.id + "chzn_g_" + group.array_index;
- return '<li id="' + group.dom_id + '" class="group-result">' + $("<div />").text(group.label).html() + '</li>';
- } else {
- return "";
- }
- };
- Chosen.prototype.result_add_option = function(option) {
- var classes;
- if (!option.disabled) {
- option.dom_id = this.form_field.id + "chzn_o_" + option.array_index;
- classes = option.selected && this.is_multiple ? [] : ["active-result"];
- if (option.selected) {
- classes.push("result-selected");
- }
- if (option.group_array_index != null) {
- classes.push("group-option");
- }
- return '<li id="' + option.dom_id + '" class="' + classes.join(' ') + '">' + $("<div />").text(option.text).html() + '</li>';
- } else {
- return "";
- }
- };
- Chosen.prototype.results_update_field = function() {
- this.result_clear_highlight();
- this.result_single_selected = null;
- return this.results_build();
- };
- Chosen.prototype.result_do_highlight = function(el) {
- var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
- if (el.length) {
- this.result_clear_highlight();
- this.result_highlight = el;
- this.result_highlight.addClass("highlighted");
- maxHeight = parseInt(this.search_results.css("maxHeight"), 10);
- visible_top = this.search_results.scrollTop();
- visible_bottom = maxHeight + visible_top;
- high_top = this.result_highlight.position().top + this.search_results.scrollTop();
- high_bottom = high_top + this.result_highlight.outerHeight();
- if (high_bottom >= visible_bottom) {
- return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);
- } else if (high_top < visible_top) {
- return this.search_results.scrollTop(high_top);
- }
- }
- };
- Chosen.prototype.result_clear_highlight = function() {
- if (this.result_highlight) {
- this.result_highlight.removeClass("highlighted");
- }
- return this.result_highlight = null;
- };
- Chosen.prototype.results_toggle = function() {
- if (this.results_showing) {
- return this.results_hide();
- } else {
- return this.results_show();
- }
- };
- Chosen.prototype.results_show = function() {
- var dd_top;
- if (!this.is_multiple) {
- this.selected_item.addClass("chzn-single-with-drop");
- if (this.result_single_selected) {
- this.result_do_highlight(this.result_single_selected);
- }
- }
- dd_top = this.is_multiple ? this.container.height() : this.container.height() - 1;
- this.dropdown.css({
- "top": dd_top + "px",
- "left": 0
- });
- this.results_showing = true;
- this.search_field.focus();
- this.search_field.val(this.search_field.val());
- return this.winnow_results();
- };
- Chosen.prototype.results_hide = function() {
- if (!this.is_multiple) {
- this.selected_item.removeClass("chzn-single-with-drop");
- }
- this.result_clear_highlight();
- this.dropdown.css({
- "left": "-9000px"
- });
- return this.results_showing = false;
- };
- Chosen.prototype.set_tab_index = function(el) {
- var ti;
- if (this.form_field_jq.attr("tabindex")) {
- ti = this.form_field_jq.attr("tabindex");
- this.form_field_jq.attr("tabindex", -1);
- if (this.is_multiple) {
- return this.search_field.attr("tabindex", ti);
- } else {
- this.selected_item.attr("tabindex", ti);
- return this.search_field.attr("tabindex", -1);
- }
- }
- };
- Chosen.prototype.show_search_field_default = function() {
- if (this.is_multiple && this.choices < 1 && !this.active_field) {
- this.search_field.val(this.default_text);
- return this.search_field.addClass("default");
- } else {
- this.search_field.val("");
- return this.search_field.removeClass("default");
- }
- };
- Chosen.prototype.search_results_click = function(evt) {
- var target;
- target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
- if (target.length) {
- this.result_highlight = target;
- return this.result_select();
- }
- };
- Chosen.prototype.search_results_mouseover = function(evt) {
- var target;
- target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
- if (target) {
- return this.result_do_highlight(target);
- }
- };
- Chosen.prototype.search_results_mouseout = function(evt) {
- if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) {
- return this.result_clear_highlight();
- }
- };
- Chosen.prototype.choices_click = function(evt) {
- evt.preventDefault();
- if (this.active_field && !($(evt.target).hasClass("search-choice" || $(evt.target).parents('.search-choice').first)) && !this.results_showing) {
- return this.results_show();
- }
- };
- Chosen.prototype.choice_build = function(item) {
- var choice_id, link;
- choice_id = this.form_field.id + "_chzn_c_" + item.array_index;
- this.choices += 1;
- this.search_container.before('<li class="search-choice" id="' + choice_id + '"><span>' + item.text + '</span><a href="javascript:void(0)" class="search-choice-close" rel="' + item.array_index + '"></a></li>');
- link = $('#' + choice_id).find("a").first();
- return link.click(__bind(function(evt) {
- return this.choice_destroy_link_click(evt);
- }, this));
- };
- Chosen.prototype.choice_destroy_link_click = function(evt) {
- evt.preventDefault();
- this.pending_destroy_click = true;
- return this.choice_destroy($(evt.target));
- };
- Chosen.prototype.choice_destroy = function(link) {
- this.choices -= 1;
- this.show_search_field_default();
- if (this.is_multiple && this.choices > 0 && this.search_field.val().length < 1) {
- this.results_hide();
- }
- this.result_deselect(link.attr("rel"));
- return link.parents('li').first().remove();
- };
- Chosen.prototype.result_select = function() {
- var high, high_id, item, position;
- if (this.result_highlight) {
- high = this.result_highlight;
- high_id = high.attr("id");
- this.result_clear_highlight();
- high.addClass("result-selected");
- if (this.is_multiple) {
- this.result_deactivate(high);
- } else {
- this.result_single_selected = high;
- }
- position = high_id.substr(high_id.lastIndexOf("_") + 1);
- item = this.results_data[position];
- item.selected = true;
- this.form_field.options[item.options_index].selected = true;
- if (this.is_multiple) {
- this.choice_build(item);
- } else {
- this.selected_item.find("span").first().text(item.text);
- }
- this.results_hide();
- this.search_field.val("");
- this.form_field_jq.trigger("change");
- return this.search_field_scale();
- }
- };
- Chosen.prototype.result_activate = function(el) {
- return el.addClass("active-result").show();
- };
- Chosen.prototype.result_deactivate = function(el) {
- return el.removeClass("active-result").hide();
- };
- Chosen.prototype.result_deselect = function(pos) {
- var result, result_data;
- result_data = this.results_data[pos];
- result_data.selected = false;
- this.form_field.options[result_data.options_index].selected = false;
- result = $("#" + this.form_field.id + "chzn_o_" + pos);
- result.removeClass("result-selected").addClass("active-result").show();
- this.result_clear_highlight();
- this.winnow_results();
- this.form_field_jq.trigger("change");
- return this.search_field_scale();
- };
- Chosen.prototype.results_search = function(evt) {
- if (this.results_showing) {
- return this.winnow_results();
- } else {
- return this.results_show();
- }
- };
- Chosen.prototype.winnow_results = function() {
- var found, option, part, parts, regex, result_id, results, searchText, startTime, startpos, text, zregex, _i, _j, _len, _len2, _ref;
- startTime = new Date();
- this.no_results_clear();
- results = 0;
- searchText = this.search_field.val() === this.default_text ? "" : $.trim(this.search_field.val());
- regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i');
- zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i');
- _ref = this.results_data;
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- option = _ref[_i];
- if (!option.disabled && !option.empty) {
- if (option.group) {
- $('#' + option.dom_id).hide();
- } else if (!(this.is_multiple && option.selected)) {
- found = false;
- result_id = option.dom_id;
- if (regex.test(option.text)) {
- found = true;
- results += 1;
- } else if (option.text.indexOf(" ") >= 0 || option.text.indexOf("[") === 0) {
- parts = option.text.replace(/\[|\]/g, "").split(" ");
- if (parts.length) {
- for (_j = 0, _len2 = parts.length; _j < _len2; _j++) {
- part = parts[_j];
- if (regex.test(part)) {
- found = true;
- results += 1;
- }
- }
- }
- }
- if (found) {
- if (searchText.length) {
- startpos = option.text.search(zregex);
- text = option.text.substr(0, startpos + searchText.length) + '</em>' + option.text.substr(startpos + searchText.length);
- text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
- } else {
- text = option.text;
- }
- if ($("#" + result_id).html !== text) {
- $("#" + result_id).html(text);
- }
- this.result_activate($("#" + result_id));
- if (option.group_array_index != null) {
- $("#" + this.results_data[option.group_array_index].dom_id).show();
- }
- } else {
- if (this.result_highlight && result_id === this.result_highlight.attr('id')) {
- this.result_clear_highlight();
- }
- this.result_deactivate($("#" + result_id));
- }
- }
- }
- }
- if (results < 1 && searchText.length) {
- return this.no_results(searchText);
- } else {
- return this.winnow_results_set_highlight();
- }
- };
- Chosen.prototype.winnow_results_clear = function() {
- var li, lis, _i, _len, _results;
- this.search_field.val("");
- lis = this.search_results.find("li");
- _results = [];
- for (_i = 0, _len = lis.length; _i < _len; _i++) {
- li = lis[_i];
- li = $(li);
- _results.push(li.hasClass("group-result") ? li.show() : !this.is_multiple || !li.hasClass("result-selected") ? this.result_activate(li) : void 0);
- }
- return _results;
- };
- Chosen.prototype.winnow_results_set_highlight = function() {
- var do_high;
- if (!this.result_highlight) {
- do_high = this.search_results.find(".active-result").first();
- if (do_high) {
- return this.result_do_highlight(do_high);
- }
- }
- };
- Chosen.prototype.no_results = function(terms) {
- var no_results_html;
- no_results_html = $('<li class="no-results">No results match "<span></span>"</li>');
- no_results_html.find("span").first().text(terms);
- return this.search_results.append(no_results_html);
- };
- Chosen.prototype.no_results_clear = function() {
- return this.search_results.find(".no-results").remove();
- };
- Chosen.prototype.keydown_arrow = function() {
- var first_active, next_sib;
- if (!this.result_highlight) {
- first_active = this.search_results.find("li.active-result").first();
- if (first_active) {
- this.result_do_highlight($(first_active));
- }
- } else if (this.results_showing) {
- next_sib = this.result_highlight.nextAll("li.active-result").first();
- if (next_sib) {
- this.result_do_highlight(next_sib);
- }
- }
- if (!this.results_showing) {
- return this.results_show();
- }
- };
- Chosen.prototype.keyup_arrow = function() {
- var prev_sibs;
- if (!this.results_showing && !this.is_multiple) {
- return this.results_show();
- } else if (this.result_highlight) {
- prev_sibs = this.result_highlight.prevAll("li.active-result");
- if (prev_sibs.length) {
- return this.result_do_highlight(prev_sibs.first());
- } else {
- if (this.choices > 0) {
- this.results_hide();
- }
- return this.result_clear_highlight();
- }
- }
- };
- Chosen.prototype.keydown_backstroke = function() {
- if (this.pending_backstroke) {
- this.choice_destroy(this.pending_backstroke.find("a").first());
- return this.clear_backstroke();
- } else {
- this.pending_backstroke = this.search_container.siblings("li.search-choice").last();
- return this.pending_backstroke.addClass("search-choice-focus");
- }
- };
- Chosen.prototype.clear_backstroke = function() {
- if (this.pending_backstroke) {
- this.pending_backstroke.removeClass("search-choice-focus");
- }
- return this.pending_backstroke = null;
- };
- Chosen.prototype.keyup_checker = function(evt) {
- var stroke, _ref;
- stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
- this.search_field_scale();
- switch (stroke) {
- case 8:
- if (this.is_multiple && this.backstroke_length < 1 && this.choices > 0) {
- return this.keydown_backstroke();
- } else if (!this.pending_backstroke) {
- this.result_clear_highlight();
- return this.results_search();
- }
- break;
- case 13:
- evt.preventDefault();
- if (this.results_showing) {
- return this.result_select();
- }
- break;
- case 27:
- if (this.results_showing) {
- return this.results_hide();
- }
- break;
- case 9:
- case 38:
- case 40:
- case 16:
- break;
- default:
- return this.results_search();
- }
- };
- Chosen.prototype.keydown_checker = function(evt) {
- var stroke, _ref;
- stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
- this.search_field_scale();
- if (stroke !== 8 && this.pending_backstroke) {
- this.clear_backstroke();
- }
- switch (stroke) {
- case 8:
- this.backstroke_length = this.search_field.val().length;
- break;
- case 9:
- this.mouse_on_container = false;
- break;
- case 13:
- evt.preventDefault();
- break;
- case 38:
- evt.preventDefault();
- this.keyup_arrow();
- break;
- case 40:
- this.keydown_arrow();
- break;
- }
- };
- Chosen.prototype.search_field_scale = function() {
- var dd_top, div, h, style, style_block, styles, w, _i, _len;
- if (this.is_multiple) {
- h = 0;
- w = 0;
- style_block = "position:absolute; left: -1000px; top: -1000px; display:none;";
- styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];
- for (_i = 0, _len = styles.length; _i < _len; _i++) {
- style = styles[_i];
- style_block += style + ":" + this.search_field.css(style) + ";";
- }
- div = $('<div />', {
- 'style': style_block
- });
- div.text(this.search_field.val());
- $('body').append(div);
- w = div.width() + 25;
- div.remove();
- if (w > this.f_width - 10) {
- w = this.f_width - 10;
- }
- this.search_field.css({
- 'width': w + 'px'
- });
- dd_top = this.container.height();
- return this.dropdown.css({
- "top": dd_top + "px"
- });
- }
- };
- return Chosen;
- })();
- get_side_border_padding = function(elmt) {
- var side_border_padding;
- return side_border_padding = elmt.outerWidth() - elmt.width();
- };
- root.get_side_border_padding = get_side_border_padding;
- SelectParser = (function() {
- function SelectParser() {
- this.options_index = 0;
- this.parsed = [];
- }
- SelectParser.prototype.add_node = function(child) {
- if (child.nodeName === "OPTGROUP") {
- return this.add_group(child);
- } else {
- return this.add_option(child);
- }
- };
- SelectParser.prototype.add_group = function(group) {
- var group_position, option, _i, _len, _ref, _results;
- group_position = this.parsed.length;
- this.parsed.push({
- array_index: group_position,
- group: true,
- label: group.label,
- children: 0,
- disabled: group.disabled
- });
- _ref = group.childNodes;
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- option = _ref[_i];
- _results.push(this.add_option(option, group_position, group.disabled));
- }
- return _results;
- };
- SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
- if (option.nodeName === "OPTION") {
- if (option.text !== "") {
- if (group_position != null) {
- this.parsed[group_position].children += 1;
- }
- this.parsed.push({
- array_index: this.parsed.length,
- options_index: this.options_index,
- value: option.value,
- text: option.text,
- selected: option.selected,
- disabled: group_disabled === true ? group_disabled : option.disabled,
- group_array_index: group_position
- });
- } else {
- this.parsed.push({
- array_index: this.parsed.length,
- options_index: this.options_index,
- empty: true
- });
- }
- return this.options_index += 1;
- }
- };
- return SelectParser;
- })();
- SelectParser.select_to_array = function(select) {
- var child, parser, _i, _len, _ref;
- parser = new SelectParser();
- _ref = select.childNodes;
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- child = _ref[_i];
- parser.add_node(child);
- }
- return parser.parsed;
- };
- root.SelectParser = SelectParser;
-}).call(this);
diff --git a/usr/local/www/javascript/chosen/chosen.jquery.min.js b/usr/local/www/javascript/chosen/chosen.jquery.min.js
deleted file mode 100644
index ae69f22..0000000
--- a/usr/local/www/javascript/chosen/chosen.jquery.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
-Chosen, a Select Box Enhancer for jQuery and Protoype
-by Patrick Filler for Harvest, http://getharvest.com
-
-Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License
-
-Copyright (c) 2011 by Harvest
-*/
-(function(){var $,Chosen,SelectParser,get_side_border_padding,root;var __bind=function(fn,me){return function(){return fn.apply(me,arguments);};};root=typeof exports!=="undefined"&&exports!==null?exports:this;$=jQuery;$.fn.extend({chosen:function(data,options){return $(this).each(function(input_field){if(!($(this)).hasClass("chzn-done")){return new Chosen(this,data,options);}});}});Chosen=(function(){function Chosen(elmn){this.set_default_values();this.form_field=elmn;this.form_field_jq=$(this.form_field);this.is_multiple=this.form_field.multiple;this.default_text_default=this.form_field.multiple?"Select Some Options":"Select an Option";this.set_up_html();this.register_observers();this.form_field_jq.addClass("chzn-done");}Chosen.prototype.set_default_values=function(){this.click_test_action=__bind(function(evt){return this.test_active_click(evt);},this);this.active_field=false;this.mouse_on_container=false;this.results_showing=false;this.result_highlighted=null;this.result_single_selected=null;return this.choices=0;};Chosen.prototype.set_up_html=function(){var container_div,dd_top,dd_width,sf_width;this.container_id=this.form_field.id+"_chzn";this.f_width=this.form_field_jq.width();this.default_text=this.form_field_jq.attr("title")?this.form_field_jq.attr("title"):this.default_text_default;container_div=$("<div />",{id:this.container_id,"class":"chzn-container",style:"width: "+this.f_width+"px;"});if(this.is_multiple){container_div.html('<ul class="chzn-choices"><li class="search-field"><input type="text" value="'+this.default_text+'" class="default" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>');}else{container_div.html('<a href="javascript:void(0)" class="chzn-single"><span>'+this.default_text+'</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" /></div><ul class="chzn-results"></ul></div>');}this.form_field_jq.hide().after(container_div);this.container=$("#"+this.container_id);this.container.addClass("chzn-container-"+(this.is_multiple?"multi":"single"));this.dropdown=this.container.find("div.chzn-drop").first();dd_top=this.container.height();dd_width=this.f_width-get_side_border_padding(this.dropdown);this.dropdown.css({width:dd_width+"px",top:dd_top+"px"});this.search_field=this.container.find("input").first();this.search_results=this.container.find("ul.chzn-results").first();this.search_field_scale();this.search_no_results=this.container.find("li.no-results").first();if(this.is_multiple){this.search_choices=this.container.find("ul.chzn-choices").first();this.search_container=this.container.find("li.search-field").first();}else{this.search_container=this.container.find("div.chzn-search").first();this.selected_item=this.container.find(".chzn-single").first();sf_width=dd_width-get_side_border_padding(this.search_container)-get_side_border_padding(this.search_field);this.search_field.css({width:sf_width+"px"});}this.results_build();return this.set_tab_index();};Chosen.prototype.register_observers=function(){this.container.click(__bind(function(evt){return this.container_click(evt);},this));this.container.mouseenter(__bind(function(evt){return this.mouse_enter(evt);},this));this.container.mouseleave(__bind(function(evt){return this.mouse_leave(evt);},this));this.search_results.click(__bind(function(evt){return this.search_results_click(evt);},this));this.search_results.mouseover(__bind(function(evt){return this.search_results_mouseover(evt);},this));this.search_results.mouseout(__bind(function(evt){return this.search_results_mouseout(evt);},this));this.form_field_jq.bind("liszt:updated",__bind(function(evt){return this.results_update_field(evt);},this));this.search_field.blur(__bind(function(evt){return this.input_blur(evt);},this));this.search_field.keyup(__bind(function(evt){return this.keyup_checker(evt);},this));this.search_field.keydown(__bind(function(evt){return this.keydown_checker(evt);},this));if(this.is_multiple){this.search_choices.click(__bind(function(evt){return this.choices_click(evt);},this));return this.search_field.focus(__bind(function(evt){return this.input_focus(evt);},this));}else{return this.selected_item.focus(__bind(function(evt){return this.activate_field(evt);},this));}};Chosen.prototype.container_click=function(evt){if(evt&&evt.type==="click"){evt.stopPropagation();}if(!this.pending_destroy_click){if(!this.active_field){if(this.is_multiple){this.search_field.val("");}$(document).click(this.click_test_action);this.results_show();}else{if(!this.is_multiple&&evt&&($(evt.target)===this.selected_item||$(evt.target).parents("a.chzn-single").length)){evt.preventDefault();this.results_toggle();}}return this.activate_field();}else{return this.pending_destroy_click=false;}};Chosen.prototype.mouse_enter=function(){return this.mouse_on_container=true;};Chosen.prototype.mouse_leave=function(){return this.mouse_on_container=false;};Chosen.prototype.input_focus=function(evt){if(!this.active_field){return setTimeout((__bind(function(){return this.container_click();},this)),50);}};Chosen.prototype.input_blur=function(evt){if(!this.mouse_on_container){this.active_field=false;return setTimeout((__bind(function(){return this.blur_test();},this)),100);}};Chosen.prototype.blur_test=function(evt){if(!this.active_field&&this.container.hasClass("chzn-container-active")){return this.close_field();}};Chosen.prototype.close_field=function(){$(document).unbind("click",this.click_test_action);if(!this.is_multiple){this.selected_item.attr("tabindex",this.search_field.attr("tabindex"));this.search_field.attr("tabindex",-1);}this.active_field=false;this.results_hide();this.container.removeClass("chzn-container-active");this.winnow_results_clear();this.clear_backstroke();this.show_search_field_default();return this.search_field_scale();};Chosen.prototype.activate_field=function(){if(!this.is_multiple&&!this.active_field){this.search_field.attr("tabindex",this.selected_item.attr("tabindex"));this.selected_item.attr("tabindex",-1);}this.container.addClass("chzn-container-active");this.active_field=true;this.search_field.val(this.search_field.val());return this.search_field.focus();};Chosen.prototype.test_active_click=function(evt){if($(evt.target).parents("#"+this.container.id).length){return this.active_field=true;}else{return this.close_field();}};Chosen.prototype.results_build=function(){var content,data,startTime,_i,_len,_ref;startTime=new Date();this.parsing=true;this.results_data=SelectParser.select_to_array(this.form_field);if(this.is_multiple&&this.choices>0){this.search_choices.find("li.search-choice").remove();this.choices=0;}else{if(!this.is_multiple){this.selected_item.find("span").text(this.default_text);}}content="";_ref=this.results_data;for(_i=0,_len=_ref.length;_i<_len;_i++){data=_ref[_i];if(data.group){content+=this.result_add_group(data);}else{if(!data.empty){content+=this.result_add_option(data);if(data.selected&&this.is_multiple){this.choice_build(data);}else{if(data.selected&&!this.is_multiple){this.selected_item.find("span").text(data.text);}}}}}this.show_search_field_default();this.search_field_scale();this.search_results.html(content);return this.parsing=false;};Chosen.prototype.result_add_group=function(group){if(!group.disabled){group.dom_id=this.form_field.id+"chzn_g_"+group.array_index;return'<li id="'+group.dom_id+'" class="group-result">'+$("<div />").text(group.label).html()+"</li>";}else{return"";}};Chosen.prototype.result_add_option=function(option){var classes;if(!option.disabled){option.dom_id=this.form_field.id+"chzn_o_"+option.array_index;classes=option.selected&&this.is_multiple?[]:["active-result"];if(option.selected){classes.push("result-selected");}if(option.group_array_index!=null){classes.push("group-option");}return'<li id="'+option.dom_id+'" class="'+classes.join(" ")+'">'+$("<div />").text(option.text).html()+"</li>";}else{return"";}};Chosen.prototype.results_update_field=function(){this.result_clear_highlight();this.result_single_selected=null;return this.results_build();};Chosen.prototype.result_do_highlight=function(el){var high_bottom,high_top,maxHeight,visible_bottom,visible_top;if(el.length){this.result_clear_highlight();this.result_highlight=el;this.result_highlight.addClass("highlighted");maxHeight=parseInt(this.search_results.css("maxHeight"),10);visible_top=this.search_results.scrollTop();visible_bottom=maxHeight+visible_top;high_top=this.result_highlight.position().top+this.search_results.scrollTop();high_bottom=high_top+this.result_highlight.outerHeight();if(high_bottom>=visible_bottom){return this.search_results.scrollTop((high_bottom-maxHeight)>0?high_bottom-maxHeight:0);}else{if(high_top<visible_top){return this.search_results.scrollTop(high_top);}}}};Chosen.prototype.result_clear_highlight=function(){if(this.result_highlight){this.result_highlight.removeClass("highlighted");}return this.result_highlight=null;};Chosen.prototype.results_toggle=function(){if(this.results_showing){return this.results_hide();}else{return this.results_show();}};Chosen.prototype.results_show=function(){var dd_top;if(!this.is_multiple){this.selected_item.addClass("chzn-single-with-drop");if(this.result_single_selected){this.result_do_highlight(this.result_single_selected);}}dd_top=this.is_multiple?this.container.height():this.container.height()-1;this.dropdown.css({top:dd_top+"px",left:0});this.results_showing=true;this.search_field.focus();this.search_field.val(this.search_field.val());return this.winnow_results();};Chosen.prototype.results_hide=function(){if(!this.is_multiple){this.selected_item.removeClass("chzn-single-with-drop");}this.result_clear_highlight();this.dropdown.css({left:"-9000px"});return this.results_showing=false;};Chosen.prototype.set_tab_index=function(el){var ti;if(this.form_field_jq.attr("tabindex")){ti=this.form_field_jq.attr("tabindex");this.form_field_jq.attr("tabindex",-1);if(this.is_multiple){return this.search_field.attr("tabindex",ti);}else{this.selected_item.attr("tabindex",ti);return this.search_field.attr("tabindex",-1);}}};Chosen.prototype.show_search_field_default=function(){if(this.is_multiple&&this.choices<1&&!this.active_field){this.search_field.val(this.default_text);return this.search_field.addClass("default");}else{this.search_field.val("");return this.search_field.removeClass("default");}};Chosen.prototype.search_results_click=function(evt){var target;target=$(evt.target).hasClass("active-result")?$(evt.target):$(evt.target).parents(".active-result").first();if(target.length){this.result_highlight=target;return this.result_select();}};Chosen.prototype.search_results_mouseover=function(evt){var target;target=$(evt.target).hasClass("active-result")?$(evt.target):$(evt.target).parents(".active-result").first();if(target){return this.result_do_highlight(target);}};Chosen.prototype.search_results_mouseout=function(evt){if($(evt.target).hasClass("active-result"||$(evt.target).parents(".active-result").first())){return this.result_clear_highlight();}};Chosen.prototype.choices_click=function(evt){evt.preventDefault();if(this.active_field&&!($(evt.target).hasClass("search-choice"||$(evt.target).parents(".search-choice").first))&&!this.results_showing){return this.results_show();}};Chosen.prototype.choice_build=function(item){var choice_id,link;choice_id=this.form_field.id+"_chzn_c_"+item.array_index;this.choices+=1;this.search_container.before('<li class="search-choice" id="'+choice_id+'"><span>'+item.text+'</span><a href="javascript:void(0)" class="search-choice-close" rel="'+item.array_index+'"></a></li>');link=$("#"+choice_id).find("a").first();return link.click(__bind(function(evt){return this.choice_destroy_link_click(evt);},this));};Chosen.prototype.choice_destroy_link_click=function(evt){evt.preventDefault();this.pending_destroy_click=true;return this.choice_destroy($(evt.target));};Chosen.prototype.choice_destroy=function(link){this.choices-=1;this.show_search_field_default();if(this.is_multiple&&this.choices>0&&this.search_field.val().length<1){this.results_hide();}this.result_deselect(link.attr("rel"));return link.parents("li").first().remove();};Chosen.prototype.result_select=function(){var high,high_id,item,position;if(this.result_highlight){high=this.result_highlight;high_id=high.attr("id");this.result_clear_highlight();high.addClass("result-selected");if(this.is_multiple){this.result_deactivate(high);}else{this.result_single_selected=high;}position=high_id.substr(high_id.lastIndexOf("_")+1);item=this.results_data[position];item.selected=true;this.form_field.options[item.options_index].selected=true;if(this.is_multiple){this.choice_build(item);}else{this.selected_item.find("span").first().text(item.text);}this.results_hide();this.search_field.val("");this.form_field_jq.trigger("change");return this.search_field_scale();}};Chosen.prototype.result_activate=function(el){return el.addClass("active-result").show();};Chosen.prototype.result_deactivate=function(el){return el.removeClass("active-result").hide();};Chosen.prototype.result_deselect=function(pos){var result,result_data;result_data=this.results_data[pos];result_data.selected=false;this.form_field.options[result_data.options_index].selected=false;result=$("#"+this.form_field.id+"chzn_o_"+pos);result.removeClass("result-selected").addClass("active-result").show();this.result_clear_highlight();this.winnow_results();this.form_field_jq.trigger("change");return this.search_field_scale();};Chosen.prototype.results_search=function(evt){if(this.results_showing){return this.winnow_results();}else{return this.results_show();}};Chosen.prototype.winnow_results=function(){var found,option,part,parts,regex,result_id,results,searchText,startTime,startpos,text,zregex,_i,_j,_len,_len2,_ref;startTime=new Date();this.no_results_clear();results=0;searchText=this.search_field.val()===this.default_text?"":$.trim(this.search_field.val());regex=new RegExp("^"+searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");zregex=new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");_ref=this.results_data;for(_i=0,_len=_ref.length;_i<_len;_i++){option=_ref[_i];if(!option.disabled&&!option.empty){if(option.group){$("#"+option.dom_id).hide();}else{if(!(this.is_multiple&&option.selected)){found=false;result_id=option.dom_id;if(regex.test(option.text)){found=true;results+=1;}else{if(option.text.indexOf(" ")>=0||option.text.indexOf("[")===0){parts=option.text.replace(/\[|\]/g,"").split(" ");if(parts.length){for(_j=0,_len2=parts.length;_j<_len2;_j++){part=parts[_j];if(regex.test(part)){found=true;results+=1;}}}}}if(found){if(searchText.length){startpos=option.text.search(zregex);text=option.text.substr(0,startpos+searchText.length)+"</em>"+option.text.substr(startpos+searchText.length);text=text.substr(0,startpos)+"<em>"+text.substr(startpos);}else{text=option.text;}if($("#"+result_id).html!==text){$("#"+result_id).html(text);}this.result_activate($("#"+result_id));if(option.group_array_index!=null){$("#"+this.results_data[option.group_array_index].dom_id).show();}}else{if(this.result_highlight&&result_id===this.result_highlight.attr("id")){this.result_clear_highlight();}this.result_deactivate($("#"+result_id));}}}}}if(results<1&&searchText.length){return this.no_results(searchText);}else{return this.winnow_results_set_highlight();}};Chosen.prototype.winnow_results_clear=function(){var li,lis,_i,_len,_results;this.search_field.val("");lis=this.search_results.find("li");_results=[];for(_i=0,_len=lis.length;_i<_len;_i++){li=lis[_i];li=$(li);_results.push(li.hasClass("group-result")?li.show():!this.is_multiple||!li.hasClass("result-selected")?this.result_activate(li):void 0);}return _results;};Chosen.prototype.winnow_results_set_highlight=function(){var do_high;if(!this.result_highlight){do_high=this.search_results.find(".active-result").first();if(do_high){return this.result_do_highlight(do_high);}}};Chosen.prototype.no_results=function(terms){var no_results_html;no_results_html=$('<li class="no-results">No results match "<span></span>"</li>');no_results_html.find("span").first().text(terms);return this.search_results.append(no_results_html);};Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove();};Chosen.prototype.keydown_arrow=function(){var first_active,next_sib;if(!this.result_highlight){first_active=this.search_results.find("li.active-result").first();if(first_active){this.result_do_highlight($(first_active));}}else{if(this.results_showing){next_sib=this.result_highlight.nextAll("li.active-result").first();if(next_sib){this.result_do_highlight(next_sib);}}}if(!this.results_showing){return this.results_show();}};Chosen.prototype.keyup_arrow=function(){var prev_sibs;if(!this.results_showing&&!this.is_multiple){return this.results_show();}else{if(this.result_highlight){prev_sibs=this.result_highlight.prevAll("li.active-result");if(prev_sibs.length){return this.result_do_highlight(prev_sibs.first());}else{if(this.choices>0){this.results_hide();}return this.result_clear_highlight();}}}};Chosen.prototype.keydown_backstroke=function(){if(this.pending_backstroke){this.choice_destroy(this.pending_backstroke.find("a").first());return this.clear_backstroke();}else{this.pending_backstroke=this.search_container.siblings("li.search-choice").last();return this.pending_backstroke.addClass("search-choice-focus");}};Chosen.prototype.clear_backstroke=function(){if(this.pending_backstroke){this.pending_backstroke.removeClass("search-choice-focus");}return this.pending_backstroke=null;};Chosen.prototype.keyup_checker=function(evt){var stroke,_ref;stroke=(_ref=evt.which)!=null?_ref:evt.keyCode;this.search_field_scale();switch(stroke){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0){return this.keydown_backstroke();}else{if(!this.pending_backstroke){this.result_clear_highlight();return this.results_search();}}break;case 13:evt.preventDefault();if(this.results_showing){return this.result_select();}break;case 27:if(this.results_showing){return this.results_hide();}break;case 9:case 38:case 40:case 16:break;default:return this.results_search();}};Chosen.prototype.keydown_checker=function(evt){var stroke,_ref;stroke=(_ref=evt.which)!=null?_ref:evt.keyCode;this.search_field_scale();if(stroke!==8&&this.pending_backstroke){this.clear_backstroke();}switch(stroke){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.mouse_on_container=false;break;case 13:evt.preventDefault();break;case 38:evt.preventDefault();this.keyup_arrow();break;case 40:this.keydown_arrow();break;}};Chosen.prototype.search_field_scale=function(){var dd_top,div,h,style,style_block,styles,w,_i,_len;if(this.is_multiple){h=0;w=0;style_block="position:absolute; left: -1000px; top: -1000px; display:none;";styles=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(_i=0,_len=styles.length;_i<_len;_i++){style=styles[_i];style_block+=style+":"+this.search_field.css(style)+";";}div=$("<div />",{style:style_block});div.text(this.search_field.val());$("body").append(div);w=div.width()+25;div.remove();if(w>this.f_width-10){w=this.f_width-10;}this.search_field.css({width:w+"px"});dd_top=this.container.height();return this.dropdown.css({top:dd_top+"px"});}};return Chosen;})();get_side_border_padding=function(elmt){var side_border_padding;return side_border_padding=elmt.outerWidth()-elmt.width();};root.get_side_border_padding=get_side_border_padding;SelectParser=(function(){function SelectParser(){this.options_index=0;this.parsed=[];}SelectParser.prototype.add_node=function(child){if(child.nodeName==="OPTGROUP"){return this.add_group(child);}else{return this.add_option(child);}};SelectParser.prototype.add_group=function(group){var group_position,option,_i,_len,_ref,_results;group_position=this.parsed.length;this.parsed.push({array_index:group_position,group:true,label:group.label,children:0,disabled:group.disabled});_ref=group.childNodes;_results=[];for(_i=0,_len=_ref.length;_i<_len;_i++){option=_ref[_i];_results.push(this.add_option(option,group_position,group.disabled));}return _results;};SelectParser.prototype.add_option=function(option,group_position,group_disabled){if(option.nodeName==="OPTION"){if(option.text!==""){if(group_position!=null){this.parsed[group_position].children+=1;}this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:option.value,text:option.text,selected:option.selected,disabled:group_disabled===true?group_disabled:option.disabled,group_array_index:group_position});}else{this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:true});}return this.options_index+=1;}};return SelectParser;})();SelectParser.select_to_array=function(select){var child,parser,_i,_len,_ref;parser=new SelectParser();_ref=select.childNodes;for(_i=0,_len=_ref.length;_i<_len;_i++){child=_ref[_i];parser.add_node(child);}return parser.parsed;};root.SelectParser=SelectParser;}).call(this); \ No newline at end of file
diff --git a/usr/local/www/javascript/chosen/chosen.proto.js b/usr/local/www/javascript/chosen/chosen.proto.js
deleted file mode 100644
index e3c0fbd..0000000
--- a/usr/local/www/javascript/chosen/chosen.proto.js
+++ /dev/null
@@ -1,765 +0,0 @@
-(function() {
- /*
- Chosen, a Select Box Enhancer for jQuery and Protoype
- by Patrick Filler for Harvest, http://getharvest.com
-
- Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License
-
- Copyright (c) 2011 by Harvest
- */ var Chosen, SelectParser, get_side_border_padding, root;
- var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
- root = typeof exports !== "undefined" && exports !== null ? exports : this;
- Chosen = (function() {
- function Chosen(elmn) {
- this.set_default_values();
- this.form_field = elmn;
- this.is_multiple = this.form_field.multiple;
- this.default_text_default = this.form_field.multiple ? "Select Some Options" : "Select an Option";
- this.set_up_html();
- this.register_observers();
- }
- Chosen.prototype.set_default_values = function() {
- this.click_test_action = __bind(function(evt) {
- return this.test_active_click(evt);
- }, this);
- this.active_field = false;
- this.mouse_on_container = false;
- this.results_showing = false;
- this.result_highlighted = null;
- this.result_single_selected = null;
- this.choices = 0;
- this.single_temp = new Template('<a href="javascript:void(0)" class="chzn-single"><span>#{default}</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" /></div><ul class="chzn-results"></ul></div>');
- this.multi_temp = new Template('<ul class="chzn-choices"><li class="search-field"><input type="text" value="#{default}" class="default" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>');
- this.choice_temp = new Template('<li class="search-choice" id="#{id}"><span>#{choice}</span><a href="javascript:void(0)" class="search-choice-close" rel="#{position}"></a></li>');
- return this.no_results_temp = new Template('<li class="no-results">No results match "<span>#{terms}</span>"</li>');
- };
- Chosen.prototype.set_up_html = function() {
- var base_template, container_props, dd_top, dd_width, sf_width;
- this.container_id = this.form_field.id + "_chzn";
- this.f_width = this.form_field.getStyle("width") ? parseInt(this.form_field.getStyle("width"), 10) : this.form_field.getWidth();
- container_props = {
- 'id': this.container_id,
- 'class': 'chzn-container',
- 'style': 'width: ' + this.f_width + 'px'
- };
- this.default_text = this.form_field.readAttribute('title') ? this.form_field.readAttribute('title') : this.default_text_default;
- base_template = this.is_multiple ? new Element('div', container_props).update(this.multi_temp.evaluate({
- "default": this.default_text
- })) : new Element('div', container_props).update(this.single_temp.evaluate({
- "default": this.default_text
- }));
- this.form_field.hide().insert({
- after: base_template
- });
- this.container = $(this.container_id);
- this.container.addClassName("chzn-container-" + (this.is_multiple ? "multi" : "single"));
- this.dropdown = this.container.down('div.chzn-drop');
- dd_top = this.container.getHeight();
- dd_width = this.f_width - get_side_border_padding(this.dropdown);
- this.dropdown.setStyle({
- "width": dd_width + "px",
- "top": dd_top + "px"
- });
- this.search_field = this.container.down('input');
- this.search_results = this.container.down('ul.chzn-results');
- this.search_field_scale();
- this.search_no_results = this.container.down('li.no-results');
- if (this.is_multiple) {
- this.search_choices = this.container.down('ul.chzn-choices');
- this.search_container = this.container.down('li.search-field');
- } else {
- this.search_container = this.container.down('div.chzn-search');
- this.selected_item = this.container.down('.chzn-single');
- sf_width = dd_width - get_side_border_padding(this.search_container) - get_side_border_padding(this.search_field);
- this.search_field.setStyle({
- "width": sf_width + "px"
- });
- }
- this.results_build();
- return this.set_tab_index();
- };
- Chosen.prototype.register_observers = function() {
- this.container.observe("click", __bind(function(evt) {
- return this.container_click(evt);
- }, this));
- this.container.observe("mouseenter", __bind(function(evt) {
- return this.mouse_enter(evt);
- }, this));
- this.container.observe("mouseleave", __bind(function(evt) {
- return this.mouse_leave(evt);
- }, this));
- this.search_results.observe("click", __bind(function(evt) {
- return this.search_results_click(evt);
- }, this));
- this.search_results.observe("mouseover", __bind(function(evt) {
- return this.search_results_mouseover(evt);
- }, this));
- this.search_results.observe("mouseout", __bind(function(evt) {
- return this.search_results_mouseout(evt);
- }, this));
- this.form_field.observe("liszt:updated", __bind(function(evt) {
- return this.results_update_field(evt);
- }, this));
- this.search_field.observe("blur", __bind(function(evt) {
- return this.input_blur(evt);
- }, this));
- this.search_field.observe("keyup", __bind(function(evt) {
- return this.keyup_checker(evt);
- }, this));
- this.search_field.observe("keydown", __bind(function(evt) {
- return this.keydown_checker(evt);
- }, this));
- if (this.is_multiple) {
- this.search_choices.observe("click", __bind(function(evt) {
- return this.choices_click(evt);
- }, this));
- return this.search_field.observe("focus", __bind(function(evt) {
- return this.input_focus(evt);
- }, this));
- } else {
- return this.selected_item.observe("focus", __bind(function(evt) {
- return this.activate_field(evt);
- }, this));
- }
- };
- Chosen.prototype.container_click = function(evt) {
- if (evt && evt.type === "click") {
- evt.stop();
- }
- if (!this.pending_destroy_click) {
- if (!this.active_field) {
- if (this.is_multiple) {
- this.search_field.clear();
- }
- document.observe("click", this.click_test_action);
- this.results_show();
- } else if (!this.is_multiple && evt && (evt.target === this.selected_item || evt.target.up("a.chzn-single"))) {
- this.results_toggle();
- }
- return this.activate_field();
- } else {
- return this.pending_destroy_click = false;
- }
- };
- Chosen.prototype.mouse_enter = function() {
- return this.mouse_on_container = true;
- };
- Chosen.prototype.mouse_leave = function() {
- return this.mouse_on_container = false;
- };
- Chosen.prototype.input_focus = function(evt) {
- if (!this.active_field) {
- return setTimeout(this.container_click.bind(this), 50);
- }
- };
- Chosen.prototype.input_blur = function(evt) {
- if (!this.mouse_on_container) {
- this.active_field = false;
- return setTimeout(this.blur_test.bind(this), 100);
- }
- };
- Chosen.prototype.blur_test = function(evt) {
- if (!this.active_field && this.container.hasClassName("chzn-container-active")) {
- return this.close_field();
- }
- };
- Chosen.prototype.close_field = function() {
- document.stopObserving("click", this.click_test_action);
- if (!this.is_multiple) {
- this.selected_item.tabIndex = this.search_field.tabIndex;
- this.search_field.tabIndex = -1;
- }
- this.active_field = false;
- this.results_hide();
- this.container.removeClassName("chzn-container-active");
- this.winnow_results_clear();
- this.clear_backstroke();
- this.show_search_field_default();
- return this.search_field_scale();
- };
- Chosen.prototype.activate_field = function() {
- if (!this.is_multiple && !this.active_field) {
- this.search_field.tabIndex = this.selected_item.tabIndex;
- this.selected_item.tabIndex = -1;
- }
- this.container.addClassName("chzn-container-active");
- this.active_field = true;
- this.search_field.value = this.search_field.value;
- return this.search_field.focus();
- };
- Chosen.prototype.test_active_click = function(evt) {
- if (evt.target.up('#' + this.container.id)) {
- return this.active_field = true;
- } else {
- return this.close_field();
- }
- };
- Chosen.prototype.results_build = function() {
- var content, data, startTime, _i, _len, _ref;
- startTime = new Date();
- this.parsing = true;
- this.results_data = SelectParser.select_to_array(this.form_field);
- if (this.is_multiple && this.choices > 0) {
- this.search_choices.select("li.search-choice").invoke("remove");
- this.choices = 0;
- } else if (!this.is_multiple) {
- this.selected_item.down("span").update(this.default_text);
- }
- content = '';
- _ref = this.results_data;
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- data = _ref[_i];
- if (data.group) {
- content += this.result_add_group(data);
- } else if (!data.empty) {
- content += this.result_add_option(data);
- if (data.selected && this.is_multiple) {
- this.choice_build(data);
- } else if (data.selected && !this.is_multiple) {
- this.selected_item.down("span").update(data.text);
- }
- }
- }
- this.show_search_field_default();
- this.search_field_scale();
- this.search_results.update(content);
- return this.parsing = false;
- };
- Chosen.prototype.result_add_group = function(group) {
- if (!group.disabled) {
- group.dom_id = this.form_field.id + "chzn_g_" + group.array_index;
- return '<li id="' + group.dom_id + '" class="group-result">' + group.label.escapeHTML() + '</li>';
- } else {
- return "";
- }
- };
- Chosen.prototype.result_add_option = function(option) {
- var classes;
- if (!option.disabled) {
- option.dom_id = this.form_field.id + "chzn_o_" + option.array_index;
- classes = option.selected && this.is_multiple ? [] : ["active-result"];
- if (option.selected) {
- classes.push("result-selected");
- }
- if (option.group_array_index != null) {
- classes.push("group-option");
- }
- return '<li id="' + option.dom_id + '" class="' + classes.join(' ') + '">' + option.text.escapeHTML() + '</li>';
- } else {
- return "";
- }
- };
- Chosen.prototype.results_update_field = function() {
- this.result_clear_highlight();
- this.result_single_selected = null;
- return this.results_build();
- };
- Chosen.prototype.result_do_highlight = function(el) {
- var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
- this.result_clear_highlight();
- this.result_highlight = el;
- this.result_highlight.addClassName("highlighted");
- maxHeight = parseInt(this.search_results.getStyle('maxHeight'), 10);
- visible_top = this.search_results.scrollTop;
- visible_bottom = maxHeight + visible_top;
- high_top = this.result_highlight.positionedOffset().top;
- high_bottom = high_top + this.result_highlight.getHeight();
- if (high_bottom >= visible_bottom) {
- return this.search_results.scrollTop = (high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0;
- } else if (high_top < visible_top) {
- return this.search_results.scrollTop = high_top;
- }
- };
- Chosen.prototype.result_clear_highlight = function() {
- if (this.result_highlight) {
- this.result_highlight.removeClassName('highlighted');
- }
- return this.result_highlight = null;
- };
- Chosen.prototype.results_toggle = function() {
- if (this.results_showing) {
- return this.results_hide();
- } else {
- return this.results_show();
- }
- };
- Chosen.prototype.results_show = function() {
- var dd_top;
- if (!this.is_multiple) {
- this.selected_item.addClassName('chzn-single-with-drop');
- if (this.result_single_selected) {
- this.result_do_highlight(this.result_single_selected);
- }
- }
- dd_top = this.is_multiple ? this.container.getHeight() : this.container.getHeight() - 1;
- this.dropdown.setStyle({
- "top": dd_top + "px",
- "left": 0
- });
- this.results_showing = true;
- this.search_field.focus();
- this.search_field.value = this.search_field.value;
- return this.winnow_results();
- };
- Chosen.prototype.results_hide = function() {
- if (!this.is_multiple) {
- this.selected_item.removeClassName('chzn-single-with-drop');
- }
- this.result_clear_highlight();
- this.dropdown.setStyle({
- "left": "-9000px"
- });
- return this.results_showing = false;
- };
- Chosen.prototype.set_tab_index = function(el) {
- var ti;
- if (this.form_field.tabIndex) {
- ti = this.form_field.tabIndex;
- this.form_field.tabIndex = -1;
- if (this.is_multiple) {
- return this.search_field.tabIndex = ti;
- } else {
- this.selected_item.tabIndex = ti;
- return this.search_field.tabIndex = -1;
- }
- }
- };
- Chosen.prototype.show_search_field_default = function() {
- if (this.is_multiple && this.choices < 1 && !this.active_field) {
- this.search_field.value = this.default_text;
- return this.search_field.addClassName("default");
- } else {
- this.search_field.value = "";
- return this.search_field.removeClassName("default");
- }
- };
- Chosen.prototype.search_results_click = function(evt) {
- var target;
- target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result");
- if (target) {
- this.result_highlight = target;
- return this.result_select();
- }
- };
- Chosen.prototype.search_results_mouseover = function(evt) {
- var target;
- target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result");
- if (target) {
- return this.result_do_highlight(target);
- }
- };
- Chosen.prototype.search_results_mouseout = function(evt) {
- if (evt.target.hasClassName('active-result') || evt.target.up('.active-result')) {
- return this.result_clear_highlight();
- }
- };
- Chosen.prototype.choices_click = function(evt) {
- evt.preventDefault();
- if (this.active_field && !(evt.target.hasClassName('search-choice') || evt.target.up('.search-choice')) && !this.results_showing) {
- return this.results_show();
- }
- };
- Chosen.prototype.choice_build = function(item) {
- var choice_id, link;
- choice_id = this.form_field.id + "_chzn_c_" + item.array_index;
- this.choices += 1;
- this.search_container.insert({
- before: this.choice_temp.evaluate({
- "id": choice_id,
- "choice": item.text,
- "position": item.array_index
- })
- });
- link = $(choice_id).down('a');
- return link.observe("click", __bind(function(evt) {
- return this.choice_destroy_link_click(evt);
- }, this));
- };
- Chosen.prototype.choice_destroy_link_click = function(evt) {
- evt.preventDefault();
- this.pending_destroy_click = true;
- return this.choice_destroy(evt.target);
- };
- Chosen.prototype.choice_destroy = function(link) {
- this.choices -= 1;
- this.show_search_field_default();
- if (this.is_multiple && this.choices > 0 && this.search_field.value.length < 1) {
- this.results_hide();
- }
- this.result_deselect(link.readAttribute("rel"));
- return link.up('li').remove();
- };
- Chosen.prototype.result_select = function() {
- var high, item, position;
- if (this.result_highlight) {
- high = this.result_highlight;
- this.result_clear_highlight();
- high.addClassName("result-selected");
- if (this.is_multiple) {
- this.result_deactivate(high);
- } else {
- this.result_single_selected = high;
- }
- position = high.id.substr(high.id.lastIndexOf("_") + 1);
- item = this.results_data[position];
- item.selected = true;
- this.form_field.options[item.options_index].selected = true;
- if (this.is_multiple) {
- this.choice_build(item);
- } else {
- this.selected_item.down("span").update(item.text);
- }
- this.results_hide();
- this.search_field.value = "";
- if (typeof Event.simulate === 'function') {
- this.form_field.simulate("change");
- }
- return this.search_field_scale();
- }
- };
- Chosen.prototype.result_activate = function(el) {
- return el.addClassName("active-result").show();
- };
- Chosen.prototype.result_deactivate = function(el) {
- return el.removeClassName("active-result").hide();
- };
- Chosen.prototype.result_deselect = function(pos) {
- var result, result_data;
- result_data = this.results_data[pos];
- result_data.selected = false;
- this.form_field.options[result_data.options_index].selected = false;
- result = $(this.form_field.id + "chzn_o_" + pos);
- result.removeClassName("result-selected").addClassName("active-result").show();
- this.result_clear_highlight();
- this.winnow_results();
- if (typeof Event.simulate === 'function') {
- this.form_field.simulate("change");
- }
- return this.search_field_scale();
- };
- Chosen.prototype.results_search = function(evt) {
- if (this.results_showing) {
- return this.winnow_results();
- } else {
- return this.results_show();
- }
- };
- Chosen.prototype.winnow_results = function() {
- var found, option, part, parts, regex, result_id, results, searchText, startTime, startpos, text, zregex, _i, _j, _len, _len2, _ref;
- startTime = new Date();
- this.no_results_clear();
- results = 0;
- searchText = this.search_field.value === this.default_text ? "" : this.search_field.value.strip();
- regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i');
- zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i');
- _ref = this.results_data;
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- option = _ref[_i];
- if (!option.disabled && !option.empty) {
- if (option.group) {
- $(option.dom_id).hide();
- } else if (!(this.is_multiple && option.selected)) {
- found = false;
- result_id = option.dom_id;
- if (regex.test(option.text)) {
- found = true;
- results += 1;
- } else if (option.text.indexOf(" ") >= 0 || option.text.indexOf("[") === 0) {
- parts = option.text.replace(/\[|\]/g, "").split(" ");
- if (parts.length) {
- for (_j = 0, _len2 = parts.length; _j < _len2; _j++) {
- part = parts[_j];
- if (regex.test(part)) {
- found = true;
- results += 1;
- }
- }
- }
- }
- if (found) {
- if (searchText.length) {
- startpos = option.text.search(zregex);
- text = option.text.substr(0, startpos + searchText.length) + '</em>' + option.text.substr(startpos + searchText.length);
- text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
- } else {
- text = option.text;
- }
- if ($(result_id).innerHTML !== text) {
- $(result_id).update(text);
- }
- this.result_activate($(result_id));
- if (option.group_array_index != null) {
- $(this.results_data[option.group_array_index].dom_id).show();
- }
- } else {
- if ($(result_id) === this.result_highlight) {
- this.result_clear_highlight();
- }
- this.result_deactivate($(result_id));
- }
- }
- }
- }
- if (results < 1 && searchText.length) {
- return this.no_results(searchText);
- } else {
- return this.winnow_results_set_highlight();
- }
- };
- Chosen.prototype.winnow_results_clear = function() {
- var li, lis, _i, _len, _results;
- this.search_field.clear();
- lis = this.search_results.select("li");
- _results = [];
- for (_i = 0, _len = lis.length; _i < _len; _i++) {
- li = lis[_i];
- _results.push(li.hasClassName("group-result") ? li.show() : !this.is_multiple || !li.hasClassName("result-selected") ? this.result_activate(li) : void 0);
- }
- return _results;
- };
- Chosen.prototype.winnow_results_set_highlight = function() {
- var do_high;
- if (!this.result_highlight) {
- do_high = this.search_results.down(".active-result");
- if (do_high) {
- return this.result_do_highlight(do_high);
- }
- }
- };
- Chosen.prototype.no_results = function(terms) {
- return this.search_results.insert(this.no_results_temp.evaluate({
- "terms": terms.escapeHTML()
- }));
- };
- Chosen.prototype.no_results_clear = function() {
- var nr, _results;
- nr = null;
- _results = [];
- while (nr = this.search_results.down(".no-results")) {
- _results.push(nr.remove());
- }
- return _results;
- };
- Chosen.prototype.keydown_arrow = function() {
- var actives, nexts, sibs;
- actives = this.search_results.select("li.active-result");
- if (actives.length) {
- if (!this.result_highlight) {
- this.result_do_highlight(actives.first());
- } else if (this.results_showing) {
- sibs = this.result_highlight.nextSiblings();
- nexts = sibs.intersect(actives);
- if (nexts.length) {
- this.result_do_highlight(nexts.first());
- }
- }
- if (!this.results_showing) {
- return this.results_show();
- }
- }
- };
- Chosen.prototype.keyup_arrow = function() {
- var actives, prevs, sibs;
- if (!this.results_showing && !this.is_multiple) {
- return this.results_show();
- } else if (this.result_highlight) {
- sibs = this.result_highlight.previousSiblings();
- actives = this.search_results.select("li.active-result");
- prevs = sibs.intersect(actives);
- if (prevs.length) {
- return this.result_do_highlight(prevs.first());
- } else {
- if (this.choices > 0) {
- this.results_hide();
- }
- return this.result_clear_highlight();
- }
- }
- };
- Chosen.prototype.keydown_backstroke = function() {
- if (this.pending_backstroke) {
- this.choice_destroy(this.pending_backstroke.down("a"));
- return this.clear_backstroke();
- } else {
- this.pending_backstroke = this.search_container.siblings("li.search-choice").last();
- return this.pending_backstroke.addClassName("search-choice-focus");
- }
- };
- Chosen.prototype.clear_backstroke = function() {
- if (this.pending_backstroke) {
- this.pending_backstroke.removeClassName("search-choice-focus");
- }
- return this.pending_backstroke = null;
- };
- Chosen.prototype.keyup_checker = function(evt) {
- var stroke, _ref;
- stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
- this.search_field_scale();
- switch (stroke) {
- case 8:
- if (this.is_multiple && this.backstroke_length < 1 && this.choices > 0) {
- return this.keydown_backstroke();
- } else if (!this.pending_backstroke) {
- this.result_clear_highlight();
- return this.results_search();
- }
- break;
- case 13:
- evt.preventDefault();
- if (this.results_showing) {
- return this.result_select();
- }
- break;
- case 27:
- if (this.results_showing) {
- return this.results_hide();
- }
- break;
- case 9:
- case 38:
- case 40:
- case 16:
- break;
- default:
- return this.results_search();
- }
- };
- Chosen.prototype.keydown_checker = function(evt) {
- var stroke, _ref;
- stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
- this.search_field_scale();
- if (stroke !== 8 && this.pending_backstroke) {
- this.clear_backstroke();
- }
- switch (stroke) {
- case 8:
- return this.backstroke_length = this.search_field.value.length;
- case 9:
- return this.mouse_on_container = false;
- case 13:
- return evt.preventDefault();
- case 38:
- evt.preventDefault();
- return this.keyup_arrow();
- case 40:
- return this.keydown_arrow();
- }
- };
- Chosen.prototype.search_field_scale = function() {
- var dd_top, div, h, style, style_block, styles, w, _i, _len;
- if (this.is_multiple) {
- h = 0;
- w = 0;
- style_block = "position:absolute; left: -1000px; top: -1000px; display:none;";
- styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];
- for (_i = 0, _len = styles.length; _i < _len; _i++) {
- style = styles[_i];
- style_block += style + ":" + this.search_field.getStyle(style) + ";";
- }
- div = new Element('div', {
- 'style': style_block
- }).update(this.search_field.value);
- document.body.appendChild(div);
- w = Element.measure(div, 'width') + 25;
- div.remove();
- if (w > this.f_width - 10) {
- w = this.f_width - 10;
- }
- this.search_field.setStyle({
- 'width': w + 'px'
- });
- dd_top = this.container.getHeight();
- return this.dropdown.setStyle({
- "top": dd_top + "px"
- });
- }
- };
- return Chosen;
- })();
- root.Chosen = Chosen;
- document.observe('dom:loaded', function(evt) {
- var select, selects, _i, _len, _results;
- selects = $$(".chzn-select");
- _results = [];
- for (_i = 0, _len = selects.length; _i < _len; _i++) {
- select = selects[_i];
- _results.push(new Chosen(select));
- }
- return _results;
- });
- get_side_border_padding = function(elmt) {
- var layout, side_border_padding;
- layout = new Element.Layout(elmt);
- return side_border_padding = layout.get("border-left") + layout.get("border-right") + layout.get("padding-left") + layout.get("padding-right");
- };
- root.get_side_border_padding = get_side_border_padding;
- root = typeof exports !== "undefined" && exports !== null ? exports : this;
- SelectParser = (function() {
- function SelectParser() {
- this.options_index = 0;
- this.parsed = [];
- }
- SelectParser.prototype.add_node = function(child) {
- if (child.nodeName === "OPTGROUP") {
- return this.add_group(child);
- } else {
- return this.add_option(child);
- }
- };
- SelectParser.prototype.add_group = function(group) {
- var group_position, option, _i, _len, _ref, _results;
- group_position = this.parsed.length;
- this.parsed.push({
- array_index: group_position,
- group: true,
- label: group.label,
- children: 0,
- disabled: group.disabled
- });
- _ref = group.childNodes;
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- option = _ref[_i];
- _results.push(this.add_option(option, group_position, group.disabled));
- }
- return _results;
- };
- SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
- if (option.nodeName === "OPTION") {
- if (option.text !== "") {
- if (group_position != null) {
- this.parsed[group_position].children += 1;
- }
- this.parsed.push({
- array_index: this.parsed.length,
- options_index: this.options_index,
- value: option.value,
- text: option.text,
- selected: option.selected,
- disabled: group_disabled === true ? group_disabled : option.disabled,
- group_array_index: group_position
- });
- } else {
- this.parsed.push({
- array_index: this.parsed.length,
- options_index: this.options_index,
- empty: true
- });
- }
- return this.options_index += 1;
- }
- };
- return SelectParser;
- })();
- SelectParser.select_to_array = function(select) {
- var child, parser, _i, _len, _ref;
- parser = new SelectParser();
- _ref = select.childNodes;
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- child = _ref[_i];
- parser.add_node(child);
- }
- return parser.parsed;
- };
- root.SelectParser = SelectParser;
-}).call(this);
diff --git a/usr/local/www/javascript/chosen/chosen.proto.min.js b/usr/local/www/javascript/chosen/chosen.proto.min.js
deleted file mode 100644
index 79109c5..0000000
--- a/usr/local/www/javascript/chosen/chosen.proto.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
-Chosen, a Select Box Enhancer for jQuery and Protoype
-by Patrick Filler for Harvest, http://getharvest.com
-
-Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License
-
-Copyright (c) 2011 by Harvest
-*/
-(function(){var Chosen,SelectParser,get_side_border_padding,root;var __bind=function(fn,me){return function(){return fn.apply(me,arguments);};};root=typeof exports!=="undefined"&&exports!==null?exports:this;Chosen=(function(){function Chosen(elmn){this.set_default_values();this.form_field=elmn;this.is_multiple=this.form_field.multiple;this.default_text_default=this.form_field.multiple?"Select Some Options":"Select an Option";this.set_up_html();this.register_observers();}Chosen.prototype.set_default_values=function(){this.click_test_action=__bind(function(evt){return this.test_active_click(evt);},this);this.active_field=false;this.mouse_on_container=false;this.results_showing=false;this.result_highlighted=null;this.result_single_selected=null;this.choices=0;this.single_temp=new Template('<a href="javascript:void(0)" class="chzn-single"><span>#{default}</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" /></div><ul class="chzn-results"></ul></div>');this.multi_temp=new Template('<ul class="chzn-choices"><li class="search-field"><input type="text" value="#{default}" class="default" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>');this.choice_temp=new Template('<li class="search-choice" id="#{id}"><span>#{choice}</span><a href="javascript:void(0)" class="search-choice-close" rel="#{position}"></a></li>');return this.no_results_temp=new Template('<li class="no-results">No results match "<span>#{terms}</span>"</li>');};Chosen.prototype.set_up_html=function(){var base_template,container_props,dd_top,dd_width,sf_width;this.container_id=this.form_field.id+"_chzn";this.f_width=this.form_field.getStyle("width")?parseInt(this.form_field.getStyle("width"),10):this.form_field.getWidth();container_props={id:this.container_id,"class":"chzn-container",style:"width: "+this.f_width+"px"};this.default_text=this.form_field.readAttribute("title")?this.form_field.readAttribute("title"):this.default_text_default;base_template=this.is_multiple?new Element("div",container_props).update(this.multi_temp.evaluate({"default":this.default_text})):new Element("div",container_props).update(this.single_temp.evaluate({"default":this.default_text}));this.form_field.hide().insert({after:base_template});this.container=$(this.container_id);this.container.addClassName("chzn-container-"+(this.is_multiple?"multi":"single"));this.dropdown=this.container.down("div.chzn-drop");dd_top=this.container.getHeight();dd_width=this.f_width-get_side_border_padding(this.dropdown);this.dropdown.setStyle({width:dd_width+"px",top:dd_top+"px"});this.search_field=this.container.down("input");this.search_results=this.container.down("ul.chzn-results");this.search_field_scale();this.search_no_results=this.container.down("li.no-results");if(this.is_multiple){this.search_choices=this.container.down("ul.chzn-choices");this.search_container=this.container.down("li.search-field");}else{this.search_container=this.container.down("div.chzn-search");this.selected_item=this.container.down(".chzn-single");sf_width=dd_width-get_side_border_padding(this.search_container)-get_side_border_padding(this.search_field);this.search_field.setStyle({width:sf_width+"px"});}this.results_build();return this.set_tab_index();};Chosen.prototype.register_observers=function(){this.container.observe("click",__bind(function(evt){return this.container_click(evt);},this));this.container.observe("mouseenter",__bind(function(evt){return this.mouse_enter(evt);},this));this.container.observe("mouseleave",__bind(function(evt){return this.mouse_leave(evt);},this));this.search_results.observe("click",__bind(function(evt){return this.search_results_click(evt);},this));this.search_results.observe("mouseover",__bind(function(evt){return this.search_results_mouseover(evt);},this));this.search_results.observe("mouseout",__bind(function(evt){return this.search_results_mouseout(evt);},this));this.form_field.observe("liszt:updated",__bind(function(evt){return this.results_update_field(evt);},this));this.search_field.observe("blur",__bind(function(evt){return this.input_blur(evt);},this));this.search_field.observe("keyup",__bind(function(evt){return this.keyup_checker(evt);},this));this.search_field.observe("keydown",__bind(function(evt){return this.keydown_checker(evt);},this));if(this.is_multiple){this.search_choices.observe("click",__bind(function(evt){return this.choices_click(evt);},this));return this.search_field.observe("focus",__bind(function(evt){return this.input_focus(evt);},this));}else{return this.selected_item.observe("focus",__bind(function(evt){return this.activate_field(evt);},this));}};Chosen.prototype.container_click=function(evt){if(evt&&evt.type==="click"){evt.stop();}if(!this.pending_destroy_click){if(!this.active_field){if(this.is_multiple){this.search_field.clear();}document.observe("click",this.click_test_action);this.results_show();}else{if(!this.is_multiple&&evt&&(evt.target===this.selected_item||evt.target.up("a.chzn-single"))){this.results_toggle();}}return this.activate_field();}else{return this.pending_destroy_click=false;}};Chosen.prototype.mouse_enter=function(){return this.mouse_on_container=true;};Chosen.prototype.mouse_leave=function(){return this.mouse_on_container=false;};Chosen.prototype.input_focus=function(evt){if(!this.active_field){return setTimeout(this.container_click.bind(this),50);}};Chosen.prototype.input_blur=function(evt){if(!this.mouse_on_container){this.active_field=false;return setTimeout(this.blur_test.bind(this),100);}};Chosen.prototype.blur_test=function(evt){if(!this.active_field&&this.container.hasClassName("chzn-container-active")){return this.close_field();}};Chosen.prototype.close_field=function(){document.stopObserving("click",this.click_test_action);if(!this.is_multiple){this.selected_item.tabIndex=this.search_field.tabIndex;this.search_field.tabIndex=-1;}this.active_field=false;this.results_hide();this.container.removeClassName("chzn-container-active");this.winnow_results_clear();this.clear_backstroke();this.show_search_field_default();return this.search_field_scale();};Chosen.prototype.activate_field=function(){if(!this.is_multiple&&!this.active_field){this.search_field.tabIndex=this.selected_item.tabIndex;this.selected_item.tabIndex=-1;}this.container.addClassName("chzn-container-active");this.active_field=true;this.search_field.value=this.search_field.value;return this.search_field.focus();};Chosen.prototype.test_active_click=function(evt){if(evt.target.up("#"+this.container.id)){return this.active_field=true;}else{return this.close_field();}};Chosen.prototype.results_build=function(){var content,data,startTime,_i,_len,_ref;startTime=new Date();this.parsing=true;this.results_data=SelectParser.select_to_array(this.form_field);if(this.is_multiple&&this.choices>0){this.search_choices.select("li.search-choice").invoke("remove");this.choices=0;}else{if(!this.is_multiple){this.selected_item.down("span").update(this.default_text);}}content="";_ref=this.results_data;for(_i=0,_len=_ref.length;_i<_len;_i++){data=_ref[_i];if(data.group){content+=this.result_add_group(data);}else{if(!data.empty){content+=this.result_add_option(data);if(data.selected&&this.is_multiple){this.choice_build(data);}else{if(data.selected&&!this.is_multiple){this.selected_item.down("span").update(data.text);}}}}}this.show_search_field_default();this.search_field_scale();this.search_results.update(content);return this.parsing=false;};Chosen.prototype.result_add_group=function(group){if(!group.disabled){group.dom_id=this.form_field.id+"chzn_g_"+group.array_index;return'<li id="'+group.dom_id+'" class="group-result">'+group.label.escapeHTML()+"</li>";}else{return"";}};Chosen.prototype.result_add_option=function(option){var classes;if(!option.disabled){option.dom_id=this.form_field.id+"chzn_o_"+option.array_index;classes=option.selected&&this.is_multiple?[]:["active-result"];if(option.selected){classes.push("result-selected");}if(option.group_array_index!=null){classes.push("group-option");}return'<li id="'+option.dom_id+'" class="'+classes.join(" ")+'">'+option.text.escapeHTML()+"</li>";}else{return"";}};Chosen.prototype.results_update_field=function(){this.result_clear_highlight();this.result_single_selected=null;return this.results_build();};Chosen.prototype.result_do_highlight=function(el){var high_bottom,high_top,maxHeight,visible_bottom,visible_top;this.result_clear_highlight();this.result_highlight=el;this.result_highlight.addClassName("highlighted");maxHeight=parseInt(this.search_results.getStyle("maxHeight"),10);visible_top=this.search_results.scrollTop;visible_bottom=maxHeight+visible_top;high_top=this.result_highlight.positionedOffset().top;high_bottom=high_top+this.result_highlight.getHeight();if(high_bottom>=visible_bottom){return this.search_results.scrollTop=(high_bottom-maxHeight)>0?high_bottom-maxHeight:0;}else{if(high_top<visible_top){return this.search_results.scrollTop=high_top;}}};Chosen.prototype.result_clear_highlight=function(){if(this.result_highlight){this.result_highlight.removeClassName("highlighted");}return this.result_highlight=null;};Chosen.prototype.results_toggle=function(){if(this.results_showing){return this.results_hide();}else{return this.results_show();}};Chosen.prototype.results_show=function(){var dd_top;if(!this.is_multiple){this.selected_item.addClassName("chzn-single-with-drop");if(this.result_single_selected){this.result_do_highlight(this.result_single_selected);}}dd_top=this.is_multiple?this.container.getHeight():this.container.getHeight()-1;this.dropdown.setStyle({top:dd_top+"px",left:0});this.results_showing=true;this.search_field.focus();this.search_field.value=this.search_field.value;return this.winnow_results();};Chosen.prototype.results_hide=function(){if(!this.is_multiple){this.selected_item.removeClassName("chzn-single-with-drop");}this.result_clear_highlight();this.dropdown.setStyle({left:"-9000px"});return this.results_showing=false;};Chosen.prototype.set_tab_index=function(el){var ti;if(this.form_field.tabIndex){ti=this.form_field.tabIndex;this.form_field.tabIndex=-1;if(this.is_multiple){return this.search_field.tabIndex=ti;}else{this.selected_item.tabIndex=ti;return this.search_field.tabIndex=-1;}}};Chosen.prototype.show_search_field_default=function(){if(this.is_multiple&&this.choices<1&&!this.active_field){this.search_field.value=this.default_text;return this.search_field.addClassName("default");}else{this.search_field.value="";return this.search_field.removeClassName("default");}};Chosen.prototype.search_results_click=function(evt){var target;target=evt.target.hasClassName("active-result")?evt.target:evt.target.up(".active-result");if(target){this.result_highlight=target;return this.result_select();}};Chosen.prototype.search_results_mouseover=function(evt){var target;target=evt.target.hasClassName("active-result")?evt.target:evt.target.up(".active-result");if(target){return this.result_do_highlight(target);}};Chosen.prototype.search_results_mouseout=function(evt){if(evt.target.hasClassName("active-result")||evt.target.up(".active-result")){return this.result_clear_highlight();}};Chosen.prototype.choices_click=function(evt){evt.preventDefault();if(this.active_field&&!(evt.target.hasClassName("search-choice")||evt.target.up(".search-choice"))&&!this.results_showing){return this.results_show();}};Chosen.prototype.choice_build=function(item){var choice_id,link;choice_id=this.form_field.id+"_chzn_c_"+item.array_index;this.choices+=1;this.search_container.insert({before:this.choice_temp.evaluate({id:choice_id,choice:item.text,position:item.array_index})});link=$(choice_id).down("a");return link.observe("click",__bind(function(evt){return this.choice_destroy_link_click(evt);},this));};Chosen.prototype.choice_destroy_link_click=function(evt){evt.preventDefault();this.pending_destroy_click=true;return this.choice_destroy(evt.target);};Chosen.prototype.choice_destroy=function(link){this.choices-=1;this.show_search_field_default();if(this.is_multiple&&this.choices>0&&this.search_field.value.length<1){this.results_hide();}this.result_deselect(link.readAttribute("rel"));return link.up("li").remove();};Chosen.prototype.result_select=function(){var high,item,position;if(this.result_highlight){high=this.result_highlight;this.result_clear_highlight();high.addClassName("result-selected");if(this.is_multiple){this.result_deactivate(high);}else{this.result_single_selected=high;}position=high.id.substr(high.id.lastIndexOf("_")+1);item=this.results_data[position];item.selected=true;this.form_field.options[item.options_index].selected=true;if(this.is_multiple){this.choice_build(item);}else{this.selected_item.down("span").update(item.text);}this.results_hide();this.search_field.value="";if(typeof Event.simulate==="function"){this.form_field.simulate("change");}return this.search_field_scale();}};Chosen.prototype.result_activate=function(el){return el.addClassName("active-result").show();};Chosen.prototype.result_deactivate=function(el){return el.removeClassName("active-result").hide();};Chosen.prototype.result_deselect=function(pos){var result,result_data;result_data=this.results_data[pos];result_data.selected=false;this.form_field.options[result_data.options_index].selected=false;result=$(this.form_field.id+"chzn_o_"+pos);result.removeClassName("result-selected").addClassName("active-result").show();this.result_clear_highlight();this.winnow_results();if(typeof Event.simulate==="function"){this.form_field.simulate("change");}return this.search_field_scale();};Chosen.prototype.results_search=function(evt){if(this.results_showing){return this.winnow_results();}else{return this.results_show();}};Chosen.prototype.winnow_results=function(){var found,option,part,parts,regex,result_id,results,searchText,startTime,startpos,text,zregex,_i,_j,_len,_len2,_ref;startTime=new Date();this.no_results_clear();results=0;searchText=this.search_field.value===this.default_text?"":this.search_field.value.strip();regex=new RegExp("^"+searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");zregex=new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");_ref=this.results_data;for(_i=0,_len=_ref.length;_i<_len;_i++){option=_ref[_i];if(!option.disabled&&!option.empty){if(option.group){$(option.dom_id).hide();}else{if(!(this.is_multiple&&option.selected)){found=false;result_id=option.dom_id;if(regex.test(option.text)){found=true;results+=1;}else{if(option.text.indexOf(" ")>=0||option.text.indexOf("[")===0){parts=option.text.replace(/\[|\]/g,"").split(" ");if(parts.length){for(_j=0,_len2=parts.length;_j<_len2;_j++){part=parts[_j];if(regex.test(part)){found=true;results+=1;}}}}}if(found){if(searchText.length){startpos=option.text.search(zregex);text=option.text.substr(0,startpos+searchText.length)+"</em>"+option.text.substr(startpos+searchText.length);text=text.substr(0,startpos)+"<em>"+text.substr(startpos);}else{text=option.text;}if($(result_id).innerHTML!==text){$(result_id).update(text);}this.result_activate($(result_id));if(option.group_array_index!=null){$(this.results_data[option.group_array_index].dom_id).show();}}else{if($(result_id)===this.result_highlight){this.result_clear_highlight();}this.result_deactivate($(result_id));}}}}}if(results<1&&searchText.length){return this.no_results(searchText);}else{return this.winnow_results_set_highlight();}};Chosen.prototype.winnow_results_clear=function(){var li,lis,_i,_len,_results;this.search_field.clear();lis=this.search_results.select("li");_results=[];for(_i=0,_len=lis.length;_i<_len;_i++){li=lis[_i];_results.push(li.hasClassName("group-result")?li.show():!this.is_multiple||!li.hasClassName("result-selected")?this.result_activate(li):void 0);}return _results;};Chosen.prototype.winnow_results_set_highlight=function(){var do_high;if(!this.result_highlight){do_high=this.search_results.down(".active-result");if(do_high){return this.result_do_highlight(do_high);}}};Chosen.prototype.no_results=function(terms){return this.search_results.insert(this.no_results_temp.evaluate({terms:terms.escapeHTML()}));};Chosen.prototype.no_results_clear=function(){var nr,_results;nr=null;_results=[];while(nr=this.search_results.down(".no-results")){_results.push(nr.remove());}return _results;};Chosen.prototype.keydown_arrow=function(){var actives,nexts,sibs;actives=this.search_results.select("li.active-result");if(actives.length){if(!this.result_highlight){this.result_do_highlight(actives.first());}else{if(this.results_showing){sibs=this.result_highlight.nextSiblings();nexts=sibs.intersect(actives);if(nexts.length){this.result_do_highlight(nexts.first());}}}if(!this.results_showing){return this.results_show();}}};Chosen.prototype.keyup_arrow=function(){var actives,prevs,sibs;if(!this.results_showing&&!this.is_multiple){return this.results_show();}else{if(this.result_highlight){sibs=this.result_highlight.previousSiblings();actives=this.search_results.select("li.active-result");prevs=sibs.intersect(actives);if(prevs.length){return this.result_do_highlight(prevs.first());}else{if(this.choices>0){this.results_hide();}return this.result_clear_highlight();}}}};Chosen.prototype.keydown_backstroke=function(){if(this.pending_backstroke){this.choice_destroy(this.pending_backstroke.down("a"));return this.clear_backstroke();}else{this.pending_backstroke=this.search_container.siblings("li.search-choice").last();return this.pending_backstroke.addClassName("search-choice-focus");}};Chosen.prototype.clear_backstroke=function(){if(this.pending_backstroke){this.pending_backstroke.removeClassName("search-choice-focus");}return this.pending_backstroke=null;};Chosen.prototype.keyup_checker=function(evt){var stroke,_ref;stroke=(_ref=evt.which)!=null?_ref:evt.keyCode;this.search_field_scale();switch(stroke){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0){return this.keydown_backstroke();}else{if(!this.pending_backstroke){this.result_clear_highlight();return this.results_search();}}break;case 13:evt.preventDefault();if(this.results_showing){return this.result_select();}break;case 27:if(this.results_showing){return this.results_hide();}break;case 9:case 38:case 40:case 16:break;default:return this.results_search();}};Chosen.prototype.keydown_checker=function(evt){var stroke,_ref;stroke=(_ref=evt.which)!=null?_ref:evt.keyCode;this.search_field_scale();if(stroke!==8&&this.pending_backstroke){this.clear_backstroke();}switch(stroke){case 8:return this.backstroke_length=this.search_field.value.length;case 9:return this.mouse_on_container=false;case 13:return evt.preventDefault();case 38:evt.preventDefault();return this.keyup_arrow();case 40:return this.keydown_arrow();}};Chosen.prototype.search_field_scale=function(){var dd_top,div,h,style,style_block,styles,w,_i,_len;if(this.is_multiple){h=0;w=0;style_block="position:absolute; left: -1000px; top: -1000px; display:none;";styles=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(_i=0,_len=styles.length;_i<_len;_i++){style=styles[_i];style_block+=style+":"+this.search_field.getStyle(style)+";";}div=new Element("div",{style:style_block}).update(this.search_field.value);document.body.appendChild(div);w=Element.measure(div,"width")+25;div.remove();if(w>this.f_width-10){w=this.f_width-10;}this.search_field.setStyle({width:w+"px"});dd_top=this.container.getHeight();return this.dropdown.setStyle({top:dd_top+"px"});}};return Chosen;})();root.Chosen=Chosen;document.observe("dom:loaded",function(evt){var select,selects,_i,_len,_results;selects=$$(".chzn-select");_results=[];for(_i=0,_len=selects.length;_i<_len;_i++){select=selects[_i];_results.push(new Chosen(select));}return _results;});get_side_border_padding=function(elmt){var layout,side_border_padding;layout=new Element.Layout(elmt);return side_border_padding=layout.get("border-left")+layout.get("border-right")+layout.get("padding-left")+layout.get("padding-right");};root.get_side_border_padding=get_side_border_padding;root=typeof exports!=="undefined"&&exports!==null?exports:this;SelectParser=(function(){function SelectParser(){this.options_index=0;this.parsed=[];}SelectParser.prototype.add_node=function(child){if(child.nodeName==="OPTGROUP"){return this.add_group(child);}else{return this.add_option(child);}};SelectParser.prototype.add_group=function(group){var group_position,option,_i,_len,_ref,_results;group_position=this.parsed.length;this.parsed.push({array_index:group_position,group:true,label:group.label,children:0,disabled:group.disabled});_ref=group.childNodes;_results=[];for(_i=0,_len=_ref.length;_i<_len;_i++){option=_ref[_i];_results.push(this.add_option(option,group_position,group.disabled));}return _results;};SelectParser.prototype.add_option=function(option,group_position,group_disabled){if(option.nodeName==="OPTION"){if(option.text!==""){if(group_position!=null){this.parsed[group_position].children+=1;}this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:option.value,text:option.text,selected:option.selected,disabled:group_disabled===true?group_disabled:option.disabled,group_array_index:group_position});}else{this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:true});}return this.options_index+=1;}};return SelectParser;})();SelectParser.select_to_array=function(select){var child,parser,_i,_len,_ref;parser=new SelectParser();_ref=select.childNodes;for(_i=0,_len=_ref.length;_i<_len;_i++){child=_ref[_i];parser.add_node(child);}return parser.parsed;};root.SelectParser=SelectParser;}).call(this); \ No newline at end of file
diff --git a/usr/local/www/javascript/chosen/coffee/chosen.jquery.coffee b/usr/local/www/javascript/chosen/coffee/chosen.jquery.coffee
deleted file mode 100644
index 0d6596a..0000000
--- a/usr/local/www/javascript/chosen/coffee/chosen.jquery.coffee
+++ /dev/null
@@ -1,633 +0,0 @@
-###
-Chosen, a Select Box Enhancer for jQuery and Protoype
-by Patrick Filler for Harvest, http://getharvest.com
-
-Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License
-
-Copyright (c) 2011 by Harvest
-###
-
-root = exports ? this
-$ = jQuery
-
-$.fn.extend({
- chosen: (data, options) ->
- $(this).each((input_field) ->
- new Chosen(this, data, options) unless ($ this).hasClass "chzn-done"
- )
-})
-
-class Chosen
-
- constructor: (elmn) ->
- this.set_default_values()
-
- @form_field = elmn
- @form_field_jq = $ @form_field
- @is_multiple = @form_field.multiple
-
- @default_text_default = if @form_field.multiple then "Select Some Options" else "Select an Option"
-
- this.set_up_html()
- this.register_observers()
- @form_field_jq.addClass "chzn-done"
-
- set_default_values: ->
-
- @click_test_action = (evt) => this.test_active_click(evt)
- @active_field = false
- @mouse_on_container = false
- @results_showing = false
- @result_highlighted = null
- @result_single_selected = null
- @choices = 0
-
- set_up_html: ->
- @container_id = @form_field.id + "_chzn"
-
- @f_width = @form_field_jq.width()
-
- @default_text = if @form_field_jq.attr 'title' then @form_field_jq.attr 'title' else @default_text_default
-
- container_div = ($ "<div />", {
- id: @container_id
- class: 'chzn-container'
- style: 'width: ' + (@f_width) + 'px;' #use parens around @f_width so coffeescript doesn't think + ' px' is a function parameter
- })
-
- if @is_multiple
- container_div.html '<ul class="chzn-choices"><li class="search-field"><input type="text" value="' + @default_text + '" class="default" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>'
- else
- container_div.html '<a href="javascript:void(0)" class="chzn-single"><span>' + @default_text + '</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" /></div><ul class="chzn-results"></ul></div>'
-
- @form_field_jq.hide().after container_div
- @container = ($ '#' + @container_id)
- @container.addClass( "chzn-container-" + (if @is_multiple then "multi" else "single") )
- @dropdown = @container.find('div.chzn-drop').first()
-
- dd_top = @container.height()
- dd_width = (@f_width - get_side_border_padding(@dropdown))
-
- @dropdown.css({"width": dd_width + "px", "top": dd_top + "px"})
-
- @search_field = @container.find('input').first()
- @search_results = @container.find('ul.chzn-results').first()
- this.search_field_scale()
-
- @search_no_results = @container.find('li.no-results').first()
-
- if @is_multiple
- @search_choices = @container.find('ul.chzn-choices').first()
- @search_container = @container.find('li.search-field').first()
- else
- @search_container = @container.find('div.chzn-search').first()
- @selected_item = @container.find('.chzn-single').first()
- sf_width = dd_width - get_side_border_padding(@search_container) - get_side_border_padding(@search_field)
- @search_field.css( {"width" : sf_width + "px"} )
-
- this.results_build()
- this.set_tab_index()
-
-
- register_observers: ->
- @container.click (evt) => this.container_click(evt)
- @container.mouseenter (evt) => this.mouse_enter(evt)
- @container.mouseleave (evt) => this.mouse_leave(evt)
-
- @search_results.click (evt) => this.search_results_click(evt)
- @search_results.mouseover (evt) => this.search_results_mouseover(evt)
- @search_results.mouseout (evt) => this.search_results_mouseout(evt)
-
- @form_field_jq.bind "liszt:updated", (evt) => this.results_update_field(evt)
-
- @search_field.blur (evt) => this.input_blur(evt)
- @search_field.keyup (evt) => this.keyup_checker(evt)
- @search_field.keydown (evt) => this.keydown_checker(evt)
-
- if @is_multiple
- @search_choices.click (evt) => this.choices_click(evt)
- @search_field.focus (evt) => this.input_focus(evt)
- else
- @selected_item.focus (evt) => this.activate_field(evt)
-
- container_click: (evt) ->
- if evt and evt.type is "click"
- evt.stopPropagation()
- if not @pending_destroy_click
- if not @active_field
- @search_field.val "" if @is_multiple
- $(document).click @click_test_action
- this.results_show()
- else if not @is_multiple and evt and ($(evt.target) is @selected_item || $(evt.target).parents("a.chzn-single").length)
- evt.preventDefault()
- this.results_toggle()
-
- this.activate_field()
- else
- @pending_destroy_click = false
-
- mouse_enter: -> @mouse_on_container = true
- mouse_leave: -> @mouse_on_container = false
-
- input_focus: (evt) ->
- setTimeout (=> this.container_click()), 50 unless @active_field
-
- input_blur: (evt) ->
- if not @mouse_on_container
- @active_field = false
- setTimeout (=> this.blur_test()), 100
-
- blur_test: (evt) ->
- this.close_field() if not @active_field and @container.hasClass "chzn-container-active"
-
- close_field: ->
- $(document).unbind "click", @click_test_action
-
- if not @is_multiple
- @selected_item.attr "tabindex", @search_field.attr("tabindex")
- @search_field.attr "tabindex", -1
-
- @active_field = false
- this.results_hide()
-
- @container.removeClass "chzn-container-active"
- this.winnow_results_clear()
- this.clear_backstroke()
-
- this.show_search_field_default()
- this.search_field_scale()
-
- activate_field: ->
- if not @is_multiple and not @active_field
- @search_field.attr "tabindex", (@selected_item.attr "tabindex")
- @selected_item.attr "tabindex", -1
-
- @container.addClass "chzn-container-active"
- @active_field = true
-
- @search_field.val(@search_field.val())
- @search_field.focus()
-
-
- test_active_click: (evt) ->
- if $(evt.target).parents('#' + @container.id).length
- @active_field = true
- else
- this.close_field()
-
- results_build: ->
- startTime = new Date()
- @parsing = true
- @results_data = SelectParser.select_to_array @form_field
-
- if @is_multiple and @choices > 0
- @search_choices.find("li.search-choice").remove()
- @choices = 0
- else if not @is_multiple
- @selected_item.find("span").text @default_text
-
- content = ''
- for data in @results_data
- if data.group
- content += this.result_add_group data
- else if !data.empty
- content += this.result_add_option data
- if data.selected and @is_multiple
- this.choice_build data
- else if data.selected and not @is_multiple
- @selected_item.find("span").text data.text
-
- this.show_search_field_default()
- this.search_field_scale()
-
- @search_results.html content
- @parsing = false
-
-
- result_add_group: (group) ->
- if not group.disabled
- group.dom_id = @form_field.id + "chzn_g_" + group.array_index
- '<li id="' + group.dom_id + '" class="group-result">' + $("<div />").text(group.label).html() + '</li>'
- else
- ""
-
- result_add_option: (option) ->
- if not option.disabled
- option.dom_id = @form_field.id + "chzn_o_" + option.array_index
-
- classes = if option.selected and @is_multiple then [] else ["active-result"]
- classes.push "result-selected" if option.selected
- classes.push "group-option" if option.group_array_index?
-
- '<li id="' + option.dom_id + '" class="' + classes.join(' ') + '">' + $("<div />").text(option.text).html() + '</li>'
- else
- ""
-
- results_update_field: ->
- this.result_clear_highlight()
- @result_single_selected = null
- this.results_build()
-
- result_do_highlight: (el) ->
- if el.length
- this.result_clear_highlight()
-
- @result_highlight = el
- @result_highlight.addClass "highlighted"
-
- maxHeight = parseInt @search_results.css("maxHeight"), 10
- visible_top = @search_results.scrollTop()
- visible_bottom = maxHeight + visible_top
-
- high_top = @result_highlight.position().top + @search_results.scrollTop()
- high_bottom = high_top + @result_highlight.outerHeight()
-
- if high_bottom >= visible_bottom
- @search_results.scrollTop if (high_bottom - maxHeight) > 0 then (high_bottom - maxHeight) else 0
- else if high_top < visible_top
- @search_results.scrollTop high_top
-
- result_clear_highlight: ->
- @result_highlight.removeClass "highlighted" if @result_highlight
- @result_highlight = null
-
- results_toggle: ->
- if @results_showing
- this.results_hide()
- else
- this.results_show()
-
- results_show: ->
- if not @is_multiple
- @selected_item.addClass "chzn-single-with-drop"
- if @result_single_selected
- this.result_do_highlight( @result_single_selected )
-
- dd_top = if @is_multiple then @container.height() else (@container.height() - 1)
- @dropdown.css {"top": dd_top + "px", "left":0}
- @results_showing = true
-
- @search_field.focus()
- @search_field.val @search_field.val()
-
- this.winnow_results()
-
- results_hide: ->
- @selected_item.removeClass "chzn-single-with-drop" unless @is_multiple
- this.result_clear_highlight()
- @dropdown.css {"left":"-9000px"}
- @results_showing = false
-
-
- set_tab_index: (el) ->
- if @form_field_jq.attr "tabindex"
- ti = @form_field_jq.attr "tabindex"
- @form_field_jq.attr "tabindex", -1
-
- if @is_multiple
- @search_field.attr "tabindex", ti
- else
- @selected_item.attr "tabindex", ti
- @search_field.attr "tabindex", -1
-
- show_search_field_default: ->
- if @is_multiple and @choices < 1 and not @active_field
- @search_field.val(@default_text)
- @search_field.addClass "default"
- else
- @search_field.val("")
- @search_field.removeClass "default"
-
- search_results_click: (evt) ->
- target = if $(evt.target).hasClass "active-result" then $(evt.target) else $(evt.target).parents(".active-result").first()
- if target.length
- @result_highlight = target
- this.result_select()
-
- search_results_mouseover: (evt) ->
- target = if $(evt.target).hasClass "active-result" then $(evt.target) else $(evt.target).parents(".active-result").first()
- this.result_do_highlight( target ) if target
-
- search_results_mouseout: (evt) ->
- this.result_clear_highlight() if $(evt.target).hasClass "active-result" or $(evt.target).parents('.active-result').first()
-
-
- choices_click: (evt) ->
- evt.preventDefault()
- if( @active_field and not($(evt.target).hasClass "search-choice" or $(evt.target).parents('.search-choice').first) and not @results_showing )
- this.results_show()
-
- choice_build: (item) ->
- choice_id = @form_field.id + "_chzn_c_" + item.array_index
- @choices += 1
- @search_container.before '<li class="search-choice" id="' + choice_id + '"><span>' + item.text + '</span><a href="javascript:void(0)" class="search-choice-close" rel="' + item.array_index + '"></a></li>'
- link = $('#' + choice_id).find("a").first()
- link.click (evt) => this.choice_destroy_link_click(evt)
-
- choice_destroy_link_click: (evt) ->
- evt.preventDefault()
- @pending_destroy_click = true
- this.choice_destroy $(evt.target)
-
- choice_destroy: (link) ->
- @choices -= 1
- this.show_search_field_default()
-
- this.results_hide() if @is_multiple and @choices > 0 and @search_field.val().length < 1
-
- this.result_deselect (link.attr "rel")
- link.parents('li').first().remove()
-
- result_select: ->
- if @result_highlight
- high = @result_highlight
- high_id = high.attr "id"
-
- this.result_clear_highlight()
-
- high.addClass "result-selected"
-
- if @is_multiple
- this.result_deactivate high
- else
- @result_single_selected = high
-
- position = high_id.substr(high_id.lastIndexOf("_") + 1 )
- item = @results_data[position]
- item.selected = true
-
- @form_field.options[item.options_index].selected = true
-
- if @is_multiple
- this.choice_build item
- else
- @selected_item.find("span").first().text item.text
-
- this.results_hide()
- @search_field.val ""
-
- @form_field_jq.trigger "change"
- this.search_field_scale()
-
- result_activate: (el) ->
- el.addClass("active-result").show()
-
- result_deactivate: (el) ->
- el.removeClass("active-result").hide()
-
- result_deselect: (pos) ->
- result_data = @results_data[pos]
- result_data.selected = false
-
- @form_field.options[result_data.options_index].selected = false
- result = $("#" + @form_field.id + "chzn_o_" + pos)
- result.removeClass("result-selected").addClass("active-result").show()
-
- this.result_clear_highlight()
- this.winnow_results()
-
- @form_field_jq.trigger "change"
- this.search_field_scale()
-
- results_search: (evt) ->
- if @results_showing
- this.winnow_results()
- else
- this.results_show()
-
- winnow_results: ->
- startTime = new Date()
- this.no_results_clear()
-
- results = 0
-
- searchText = if @search_field.val() is @default_text then "" else $.trim @search_field.val()
- regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
- zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
-
- for option in @results_data
- if not option.disabled and not option.empty
- if option.group
- $('#' + option.dom_id).hide()
- else if not (@is_multiple and option.selected)
- found = false
- result_id = option.dom_id
-
- if regex.test option.text
- found = true
- results += 1
- else if option.text.indexOf(" ") >= 0 or option.text.indexOf("[") == 0
- #TODO: replace this substitution of /\[\]/ with a list of characters to skip.
- parts = option.text.replace(/\[|\]/g, "").split(" ")
- if parts.length
- for part in parts
- if regex.test part
- found = true
- results += 1
-
- if found
- if searchText.length
- startpos = option.text.search zregex
- text = option.text.substr(0, startpos + searchText.length) + '</em>' + option.text.substr(startpos + searchText.length)
- text = text.substr(0, startpos) + '<em>' + text.substr(startpos)
- else
- text = option.text
-
- $("#" + result_id).html text if $("#" + result_id).html != text
-
- this.result_activate $("#" + result_id)
-
- $("#" + @results_data[option.group_array_index].dom_id).show() if option.group_array_index?
- else
- this.result_clear_highlight() if @result_highlight and result_id is @result_highlight.attr 'id'
- this.result_deactivate $("#" + result_id)
-
- if results < 1 and searchText.length
- this.no_results searchText
- else
- this.winnow_results_set_highlight()
-
- winnow_results_clear: ->
- @search_field.val ""
- lis = @search_results.find("li")
-
- for li in lis
- li = $(li)
- if li.hasClass "group-result"
- li.show()
- else if not @is_multiple or not li.hasClass "result-selected"
- this.result_activate li
-
- winnow_results_set_highlight: ->
- if not @result_highlight
- do_high = @search_results.find(".active-result").first()
- if(do_high)
- this.result_do_highlight do_high
-
- no_results: (terms) ->
- no_results_html = $('<li class="no-results">No results match "<span></span>"</li>')
- no_results_html.find("span").first().text(terms)
-
- @search_results.append no_results_html
-
- no_results_clear: ->
- @search_results.find(".no-results").remove()
-
- keydown_arrow: ->
- if not @result_highlight
- first_active = @search_results.find("li.active-result").first()
- this.result_do_highlight $(first_active) if first_active
- else if @results_showing
- next_sib = @result_highlight.nextAll("li.active-result").first()
- this.result_do_highlight next_sib if next_sib
- this.results_show() if not @results_showing
-
- keyup_arrow: ->
- if not @results_showing and not @is_multiple
- this.results_show()
- else if @result_highlight
- prev_sibs = @result_highlight.prevAll("li.active-result")
-
- if prev_sibs.length
- this.result_do_highlight prev_sibs.first()
- else
- this.results_hide() if @choices > 0
- this.result_clear_highlight()
-
- keydown_backstroke: ->
- if @pending_backstroke
- this.choice_destroy @pending_backstroke.find("a").first()
- this.clear_backstroke()
- else
- @pending_backstroke = @search_container.siblings("li.search-choice").last()
- @pending_backstroke.addClass "search-choice-focus"
-
- clear_backstroke: ->
- @pending_backstroke.removeClass "search-choice-focus" if @pending_backstroke
- @pending_backstroke = null
-
- keyup_checker: (evt) ->
- stroke = evt.which ? evt.keyCode
- this.search_field_scale()
-
- switch stroke
- when 8
- if @is_multiple and @backstroke_length < 1 and @choices > 0
- this.keydown_backstroke()
- else if not @pending_backstroke
- this.result_clear_highlight()
- this.results_search()
- when 13
- evt.preventDefault()
- this.result_select() if this.results_showing
- when 27
- this.results_hide() if @results_showing
- when 9, 38, 40, 16
- # don't do anything on these keys
- else this.results_search()
-
-
- keydown_checker: (evt) ->
- stroke = evt.which ? evt.keyCode
- this.search_field_scale()
-
- this.clear_backstroke() if stroke != 8 and this.pending_backstroke
-
- switch stroke
- when 8
- @backstroke_length = this.search_field.val().length
- break
- when 9
- @mouse_on_container = false
- break
- when 13
- evt.preventDefault()
- break
- when 38
- evt.preventDefault()
- this.keyup_arrow()
- break
- when 40
- this.keydown_arrow()
- break
-
-
- search_field_scale: ->
- if @is_multiple
- h = 0
- w = 0
-
- style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"
- styles = ['font-size','font-style', 'font-weight', 'font-family','line-height', 'text-transform', 'letter-spacing']
-
- for style in styles
- style_block += style + ":" + @search_field.css(style) + ";"
-
- div = $('<div />', { 'style' : style_block })
- div.text @search_field.val()
- $('body').append div
-
- w = div.width() + 25
- div.remove()
-
- if( w > @f_width-10 )
- w = @f_width - 10
-
- @search_field.css({'width': w + 'px'})
-
- dd_top = @container.height()
- @dropdown.css({"top": dd_top + "px"})
-
-get_side_border_padding = (elmt) ->
- side_border_padding = elmt.outerWidth() - elmt.width()
-
-root.get_side_border_padding = get_side_border_padding
-
-class SelectParser
-
- constructor: ->
- @options_index = 0
- @parsed = []
-
- add_node: (child) ->
- if child.nodeName is "OPTGROUP"
- this.add_group child
- else
- this.add_option child
-
- add_group: (group) ->
- group_position = @parsed.length
- @parsed.push
- array_index: group_position
- group: true
- label: group.label
- children: 0
- disabled: group.disabled
- this.add_option( option, group_position, group.disabled ) for option in group.childNodes
-
- add_option: (option, group_position, group_disabled) ->
- if option.nodeName is "OPTION"
- if option.text != ""
- if group_position?
- @parsed[group_position].children += 1
- @parsed.push
- array_index: @parsed.length
- options_index: @options_index
- value: option.value
- text: option.text
- selected: option.selected
- disabled: if group_disabled is true then group_disabled else option.disabled
- group_array_index: group_position
- else
- @parsed.push
- array_index: @parsed.length
- options_index: @options_index
- empty: true
- @options_index += 1
-
-SelectParser.select_to_array = (select) ->
- parser = new SelectParser()
- parser.add_node( child ) for child in select.childNodes
- parser.parsed
-
-root.SelectParser = SelectParser
diff --git a/usr/local/www/javascript/chosen/coffee/chosen.proto.coffee b/usr/local/www/javascript/chosen/coffee/chosen.proto.coffee
deleted file mode 100644
index 87a22b6..0000000
--- a/usr/local/www/javascript/chosen/coffee/chosen.proto.coffee
+++ /dev/null
@@ -1,629 +0,0 @@
-###
-Chosen, a Select Box Enhancer for jQuery and Protoype
-by Patrick Filler for Harvest, http://getharvest.com
-
-Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License
-
-Copyright (c) 2011 by Harvest
-###
-
-root = exports ? this
-
-class Chosen
-
- constructor: (elmn) ->
- this.set_default_values()
-
- @form_field = elmn
- @is_multiple = @form_field.multiple
-
- @default_text_default = if @form_field.multiple then "Select Some Options" else "Select an Option"
-
- this.set_up_html()
- this.register_observers()
-
-
- set_default_values: ->
-
- @click_test_action = (evt) => this.test_active_click(evt)
- @active_field = false
- @mouse_on_container = false
- @results_showing = false
- @result_highlighted = null
- @result_single_selected = null
- @choices = 0
-
- # HTML Templates
- @single_temp = new Template('<a href="javascript:void(0)" class="chzn-single"><span>#{default}</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" /></div><ul class="chzn-results"></ul></div>')
- @multi_temp = new Template('<ul class="chzn-choices"><li class="search-field"><input type="text" value="#{default}" class="default" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>')
- @choice_temp = new Template('<li class="search-choice" id="#{id}"><span>#{choice}</span><a href="javascript:void(0)" class="search-choice-close" rel="#{position}"></a></li>')
- @no_results_temp = new Template('<li class="no-results">No results match "<span>#{terms}</span>"</li>')
-
-
- set_up_html: ->
- @container_id = @form_field.id + "_chzn"
-
- @f_width = if @form_field.getStyle("width") then parseInt @form_field.getStyle("width"), 10 else @form_field.getWidth()
-
- container_props =
- 'id': @container_id
- 'class': 'chzn-container'
- 'style': 'width: ' + (@f_width) + 'px' #use parens around @f_width so coffeescript doesn't think + ' px' is a function parameter
-
- @default_text = if @form_field.readAttribute 'title' then @form_field.readAttribute 'title' else @default_text_default
-
- base_template = if @is_multiple then new Element('div', container_props).update( @multi_temp.evaluate({ "default": @default_text}) ) else new Element('div', container_props).update( @single_temp.evaluate({ "default":@default_text }) )
-
- @form_field.hide().insert({ after: base_template })
- @container = $(@container_id)
- @container.addClassName( "chzn-container-" + (if @is_multiple then "multi" else "single") )
- @dropdown = @container.down('div.chzn-drop')
-
- dd_top = @container.getHeight()
- dd_width = (@f_width - get_side_border_padding(@dropdown))
-
- @dropdown.setStyle({"width": dd_width + "px", "top": dd_top + "px"})
-
- @search_field = @container.down('input')
- @search_results = @container.down('ul.chzn-results')
- this.search_field_scale()
-
- @search_no_results = @container.down('li.no-results')
-
- if @is_multiple
- @search_choices = @container.down('ul.chzn-choices')
- @search_container = @container.down('li.search-field')
- else
- @search_container = @container.down('div.chzn-search')
- @selected_item = @container.down('.chzn-single')
- sf_width = dd_width - get_side_border_padding(@search_container) - get_side_border_padding(@search_field)
- @search_field.setStyle( {"width" : sf_width + "px"} )
-
- this.results_build()
- this.set_tab_index()
-
-
- register_observers: ->
- @container.observe "click", (evt) => this.container_click(evt)
- @container.observe "mouseenter", (evt) => this.mouse_enter(evt)
- @container.observe "mouseleave", (evt) => this.mouse_leave(evt)
-
- @search_results.observe "click", (evt) => this.search_results_click(evt)
- @search_results.observe "mouseover", (evt) => this.search_results_mouseover(evt)
- @search_results.observe "mouseout", (evt) => this.search_results_mouseout(evt)
-
- @form_field.observe "liszt:updated", (evt) => this.results_update_field(evt)
-
- @search_field.observe "blur", (evt) => this.input_blur(evt)
- @search_field.observe "keyup", (evt) => this.keyup_checker(evt)
- @search_field.observe "keydown", (evt) => this.keydown_checker(evt)
-
- if @is_multiple
- @search_choices.observe "click", (evt) => this.choices_click(evt)
- @search_field.observe "focus", (evt) => this.input_focus(evt)
- else
- @selected_item.observe "focus", (evt) => this.activate_field(evt)
-
-
- container_click: (evt) ->
- if evt and evt.type is "click"
- evt.stop()
- if not @pending_destroy_click
- if not @active_field
- @search_field.clear() if @is_multiple
- document.observe "click", @click_test_action
- this.results_show()
- else if not @is_multiple and evt and (evt.target is @selected_item || evt.target.up("a.chzn-single"))
- this.results_toggle()
-
- this.activate_field()
- else
- @pending_destroy_click = false
-
- mouse_enter: -> @mouse_on_container = true
- mouse_leave: -> @mouse_on_container = false
-
- input_focus: (evt) ->
- setTimeout this.container_click.bind(this), 50 unless @active_field
-
- input_blur: (evt) ->
- if not @mouse_on_container
- @active_field = false
- setTimeout this.blur_test.bind(this), 100
-
- blur_test: (evt) ->
- this.close_field() if not @active_field and @container.hasClassName("chzn-container-active")
-
- close_field: ->
- document.stopObserving "click", @click_test_action
-
- if not @is_multiple
- @selected_item.tabIndex = @search_field.tabIndex
- @search_field.tabIndex = -1
-
- @active_field = false
- this.results_hide()
-
- @container.removeClassName "chzn-container-active"
- this.winnow_results_clear()
- this.clear_backstroke()
-
- this.show_search_field_default()
- this.search_field_scale()
-
- activate_field: ->
- if not @is_multiple and not @active_field
- @search_field.tabIndex = @selected_item.tabIndex
- @selected_item.tabIndex = -1
-
- @container.addClassName "chzn-container-active"
- @active_field = true
-
- @search_field.value = @search_field.value
- @search_field.focus()
-
-
- test_active_click: (evt) ->
- if evt.target.up('#' + @container.id)
- @active_field = true
- else
- this.close_field()
-
- results_build: ->
- startTime = new Date()
- @parsing = true
- @results_data = SelectParser.select_to_array @form_field
-
- if @is_multiple and @choices > 0
- @search_choices.select("li.search-choice").invoke("remove")
- @choices = 0
- else if not @is_multiple
- @selected_item.down("span").update(@default_text)
-
- content = ''
- for data in @results_data
- if data.group
- content += this.result_add_group data
- else if !data.empty
- content += this.result_add_option data
- if data.selected and @is_multiple
- this.choice_build data
- else if data.selected and not @is_multiple
- @selected_item.down("span").update( data.text )
-
- this.show_search_field_default()
- this.search_field_scale()
-
- @search_results.update content
- @parsing = false
-
-
- result_add_group: (group) ->
- if not group.disabled
- group.dom_id = @form_field.id + "chzn_g_" + group.array_index
- '<li id="' + group.dom_id + '" class="group-result">' + group.label.escapeHTML() + '</li>'
- else
- ""
-
- result_add_option: (option) ->
- if not option.disabled
- option.dom_id = @form_field.id + "chzn_o_" + option.array_index
-
- classes = if option.selected and @is_multiple then [] else ["active-result"]
- classes.push "result-selected" if option.selected
- classes.push "group-option" if option.group_array_index?
-
- '<li id="' + option.dom_id + '" class="' + classes.join(' ') + '">' + option.text.escapeHTML() + '</li>'
- else
- ""
-
- results_update_field: ->
- this.result_clear_highlight()
- @result_single_selected = null
- this.results_build()
-
- result_do_highlight: (el) ->
- this.result_clear_highlight()
-
- @result_highlight = el
- @result_highlight.addClassName "highlighted"
-
- maxHeight = parseInt @search_results.getStyle('maxHeight'), 10
- visible_top = @search_results.scrollTop
- visible_bottom = maxHeight + visible_top
-
- high_top = @result_highlight.positionedOffset().top
- high_bottom = high_top + @result_highlight.getHeight()
-
- if high_bottom >= visible_bottom
- @search_results.scrollTop = if (high_bottom - maxHeight) > 0 then (high_bottom - maxHeight) else 0
- else if high_top < visible_top
- @search_results.scrollTop = high_top
-
- result_clear_highlight: ->
- @result_highlight.removeClassName('highlighted') if @result_highlight
- @result_highlight = null
-
- results_toggle: ->
- if @results_showing
- this.results_hide()
- else
- this.results_show()
-
- results_show: ->
- if not @is_multiple
- @selected_item.addClassName('chzn-single-with-drop')
- if @result_single_selected
- this.result_do_highlight( @result_single_selected )
-
- dd_top = if @is_multiple then @container.getHeight() else (@container.getHeight() - 1)
- @dropdown.setStyle {"top": dd_top + "px", "left":0}
- @results_showing = true
-
- @search_field.focus()
- @search_field.value = @search_field.value
-
- this.winnow_results()
-
- results_hide: ->
- @selected_item.removeClassName('chzn-single-with-drop') unless @is_multiple
- this.result_clear_highlight()
- @dropdown.setStyle({"left":"-9000px"})
- @results_showing = false
-
-
- set_tab_index: (el) ->
- if @form_field.tabIndex
- ti = @form_field.tabIndex
- @form_field.tabIndex = -1
-
- if @is_multiple
- @search_field.tabIndex = ti
- else
- @selected_item.tabIndex = ti
- @search_field.tabIndex = -1
-
- show_search_field_default: ->
- if @is_multiple and @choices < 1 and not @active_field
- @search_field.value = @default_text
- @search_field.addClassName "default"
- else
- @search_field.value = ""
- @search_field.removeClassName "default"
-
- search_results_click: (evt) ->
- target = if evt.target.hasClassName("active-result") then evt.target else evt.target.up(".active-result")
- if target
- @result_highlight = target
- this.result_select()
-
- search_results_mouseover: (evt) ->
- target = if evt.target.hasClassName("active-result") then evt.target else evt.target.up(".active-result")
- this.result_do_highlight( target ) if target
-
- search_results_mouseout: (evt) ->
- this.result_clear_highlight() if evt.target.hasClassName('active-result') or evt.target.up('.active-result')
-
-
- choices_click: (evt) ->
- evt.preventDefault()
- if( @active_field and not(evt.target.hasClassName('search-choice') or evt.target.up('.search-choice')) and not @results_showing )
- this.results_show()
-
- choice_build: (item) ->
- choice_id = @form_field.id + "_chzn_c_" + item.array_index
- @choices += 1
- @search_container.insert { before: @choice_temp.evaluate({"id":choice_id, "choice":item.text, "position":item.array_index}) }
- link = $(choice_id).down('a')
- link.observe "click", (evt) => this.choice_destroy_link_click(evt)
-
- choice_destroy_link_click: (evt) ->
- evt.preventDefault()
- @pending_destroy_click = true
- this.choice_destroy evt.target
-
- choice_destroy: (link) ->
- @choices -= 1
- this.show_search_field_default()
-
- this.results_hide() if @is_multiple and @choices > 0 and @search_field.value.length < 1
-
- this.result_deselect link.readAttribute("rel")
- link.up('li').remove()
-
- result_select: ->
- if @result_highlight
- high = @result_highlight
- this.result_clear_highlight()
-
- high.addClassName("result-selected")
-
- if @is_multiple
- this.result_deactivate high
- else
- @result_single_selected = high
-
- position = high.id.substr(high.id.lastIndexOf("_") + 1 )
- item = @results_data[position]
- item.selected = true
-
- @form_field.options[item.options_index].selected = true
-
- if @is_multiple
- this.choice_build item
- else
- @selected_item.down("span").update(item.text)
-
- this.results_hide()
- @search_field.value = ""
-
- @form_field.simulate("change") if typeof Event.simulate is 'function'
- this.search_field_scale()
-
- result_activate: (el) ->
- el.addClassName("active-result").show()
-
- result_deactivate: (el) ->
- el.removeClassName("active-result").hide()
-
- result_deselect: (pos) ->
- result_data = @results_data[pos]
- result_data.selected = false
-
- @form_field.options[result_data.options_index].selected = false
- result = $(@form_field.id + "chzn_o_" + pos)
- result.removeClassName("result-selected").addClassName("active-result").show()
-
- this.result_clear_highlight()
- this.winnow_results()
-
- @form_field.simulate("change") if typeof Event.simulate is 'function'
- this.search_field_scale()
-
- results_search: (evt) ->
- if @results_showing
- this.winnow_results()
- else
- this.results_show()
-
- winnow_results: ->
- startTime = new Date()
- this.no_results_clear()
-
- results = 0
-
- searchText = if @search_field.value is @default_text then "" else @search_field.value.strip()
- regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
- zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
-
- for option in @results_data
- if not option.disabled and not option.empty
- if option.group
- $(option.dom_id).hide()
- else if not (@is_multiple and option.selected)
- found = false
- result_id = option.dom_id
-
- if regex.test option.text
- found = true
- results += 1
- else if option.text.indexOf(" ") >= 0 or option.text.indexOf("[") == 0
- #TODO: replace this substitution of /\[\]/ with a list of characters to skip.
- parts = option.text.replace(/\[|\]/g, "").split(" ")
- if parts.length
- for part in parts
- if regex.test part
- found = true
- results += 1
-
- if found
- if searchText.length
- startpos = option.text.search zregex
- text = option.text.substr(0, startpos + searchText.length) + '</em>' + option.text.substr(startpos + searchText.length)
- text = text.substr(0, startpos) + '<em>' + text.substr(startpos)
- else
- text = option.text
-
- $(result_id).update text if $(result_id).innerHTML != text
-
- this.result_activate $(result_id)
-
- $(@results_data[option.group_array_index].dom_id).show() if option.group_array_index?
- else
- this.result_clear_highlight() if $(result_id) is @result_highlight
- this.result_deactivate $(result_id)
-
- if results < 1 and searchText.length
- this.no_results(searchText)
- else
- this.winnow_results_set_highlight()
-
- winnow_results_clear: ->
- @search_field.clear()
- lis = @search_results.select("li")
-
- for li in lis
- if li.hasClassName("group-result")
- li.show()
- else if not @is_multiple or not li.hasClassName("result-selected")
- this.result_activate li
-
- winnow_results_set_highlight: ->
- if not @result_highlight
- do_high = @search_results.down(".active-result")
- if(do_high)
- this.result_do_highlight do_high
-
- no_results: (terms) ->
- @search_results.insert @no_results_temp.evaluate({"terms":terms.escapeHTML()})
-
- no_results_clear: ->
- nr = null
- nr.remove() while nr = @search_results.down(".no-results")
-
-
- keydown_arrow: ->
- actives = @search_results.select("li.active-result")
- if actives.length
- if not @result_highlight
- this.result_do_highlight actives.first()
- else if @results_showing
- sibs = @result_highlight.nextSiblings()
- nexts = sibs.intersect(actives)
- this.result_do_highlight nexts.first() if nexts.length
- this.results_show() if not @results_showing
-
- keyup_arrow: ->
- if not @results_showing and not @is_multiple
- this.results_show()
- else if @result_highlight
- sibs = @result_highlight.previousSiblings()
- actives = @search_results.select("li.active-result")
- prevs = sibs.intersect(actives)
-
- if prevs.length
- this.result_do_highlight prevs.first()
- else
- this.results_hide() if @choices > 0
- this.result_clear_highlight()
-
- keydown_backstroke: ->
- if @pending_backstroke
- this.choice_destroy @pending_backstroke.down("a")
- this.clear_backstroke()
- else
- @pending_backstroke = @search_container.siblings("li.search-choice").last()
- @pending_backstroke.addClassName("search-choice-focus")
-
- clear_backstroke: ->
- @pending_backstroke.removeClassName("search-choice-focus") if @pending_backstroke
- @pending_backstroke = null
-
- keyup_checker: (evt) ->
- stroke = evt.which ? evt.keyCode
- this.search_field_scale()
-
- switch stroke
- when 8
- if @is_multiple and @backstroke_length < 1 and @choices > 0
- this.keydown_backstroke()
- else if not @pending_backstroke
- this.result_clear_highlight()
- this.results_search()
- when 13
- evt.preventDefault()
- this.result_select() if this.results_showing
- when 27
- this.results_hide() if @results_showing
- when 9, 38, 40, 16
- # don't do anything on these keys
- else this.results_search()
-
-
- keydown_checker: (evt) ->
- stroke = evt.which ? evt.keyCode
- this.search_field_scale()
-
- this.clear_backstroke() if stroke != 8 and this.pending_backstroke
-
- switch stroke
- when 8
- @backstroke_length = this.search_field.value.length
- when 9
- @mouse_on_container = false
- when 13
- evt.preventDefault()
- when 38
- evt.preventDefault()
- this.keyup_arrow()
- when 40
- this.keydown_arrow()
-
-
- search_field_scale: ->
- if @is_multiple
- h = 0
- w = 0
-
- style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"
- styles = ['font-size','font-style', 'font-weight', 'font-family','line-height', 'text-transform', 'letter-spacing']
-
- for style in styles
- style_block += style + ":" + @search_field.getStyle(style) + ";"
-
- div = new Element('div', { 'style' : style_block }).update(@search_field.value)
- document.body.appendChild(div)
-
- w = Element.measure(div, 'width') + 25
- div.remove()
-
- if( w > @f_width-10 )
- w = @f_width - 10
-
- @search_field.setStyle({'width': w + 'px'})
-
- dd_top = @container.getHeight()
- @dropdown.setStyle({"top": dd_top + "px"})
-
-root.Chosen = Chosen
-
-document.observe 'dom:loaded', (evt) ->
- selects = $$(".chzn-select")
- new Chosen select for select in selects
-
-get_side_border_padding = (elmt) ->
- layout = new Element.Layout(elmt)
- side_border_padding = layout.get("border-left") + layout.get("border-right") + layout.get("padding-left") + layout.get("padding-right")
-
-root.get_side_border_padding = get_side_border_padding
-
-root = exports ? this
-
-class SelectParser
-
- constructor: ->
- @options_index = 0
- @parsed = []
-
- add_node: (child) ->
- if child.nodeName is "OPTGROUP"
- this.add_group child
- else
- this.add_option child
-
- add_group: (group) ->
- group_position = @parsed.length
- @parsed.push
- array_index: group_position
- group: true
- label: group.label
- children: 0
- disabled: group.disabled
- this.add_option( option, group_position, group.disabled ) for option in group.childNodes
-
- add_option: (option, group_position, group_disabled) ->
- if option.nodeName is "OPTION"
- if option.text != ""
- if group_position?
- @parsed[group_position].children += 1
- @parsed.push
- array_index: @parsed.length
- options_index: @options_index
- value: option.value
- text: option.text
- selected: option.selected
- disabled: if group_disabled is true then group_disabled else option.disabled
- group_array_index: group_position
- else
- @parsed.push
- array_index: @parsed.length
- options_index: @options_index
- empty: true
- @options_index += 1
-
-SelectParser.select_to_array = (select) ->
- parser = new SelectParser()
- parser.add_node( child ) for child in select.childNodes
- parser.parsed
-
-root.SelectParser = SelectParser
diff --git a/usr/local/www/javascript/datepicker/css/datepicker.css b/usr/local/www/javascript/datepicker/css/datepicker.css
deleted file mode 100644
index 0773fa6..0000000
--- a/usr/local/www/javascript/datepicker/css/datepicker.css
+++ /dev/null
@@ -1,178 +0,0 @@
-/* This is a very basic stylesheet for the date-picker. Feel free to create your own. */
-
-/* The wrapper div */
-.datePicker
- {
- position:absolute;
- min-width:21em;
- width:21em;
- z-index:9999;
- text-align:center;
- font:900 0.8em/0.8em Verdana, Sans-Serif;
- background:transparent;
- }
-/*
- Quirksmode necessity
- --------------------
-
- If your HTML document renders in quirksmode (i.e. has no doctype declaration)
- then uncomment the following CSS rule or the datePicker will be HUGE...
-
-.datePicker th,
-.datePicker td
- {
- font-size:11px;
- }
-*/
-/* The iframe hack to cover selectlists in Internet Explorer <= v6 */
-.iehack
- {
- position:absolute;
- background:#fff;
- z-index:9998;
- padding:0;
- border:0;
- display:none;
- }
-/* The button created beside each input */
-.date-picker-control
- {
- border:0 none;
- padding:0;
- margin-left:4px;
- background:transparent url(../media/cal.gif) no-repeat 0 0;
- width:16px;
- height:16px;
- margin-top:0;
- vertical-align:top;
- cursor:pointer;
- }
-/* The next & previous buttons */
-.datePicker th button
- {
- display:inline;
- padding:0;
- margin:0;
- color:#000;
- height:1em;
- width:0.8em;
- line-height:0.8em;
- border-width:0;
- font-family: georgia, times new roman, palatino, times, bookman, serif;
- background:transparent;
- font-weight:bold;
- cursor:pointer;
- }
-.datePicker th button:active,
-.datePicker th button:focus,
-.date-picker-control:active,
-.date-picker-control:focus
- {
- outline:none;
- }
-.datePicker th button.prev-but
- {
- text-align:left;
- }
-.datePicker th button.next-but
- {
- text-align:right;
- }
-/* The mon, tue, wed etc day buttons */
-.datePicker th button.fd-day-header
- {
- text-align:center;
- margin:0 auto;
- font:900 1em Verdana, Sans-Serif;
- height:auto;
- width:auto;
- text-decoration:none;
- line-height:1.4em;
- }
-/* The table */
-.datePicker table
- {
- position:relative;
- margin:0;
- padding:0;
- border:1px solid #ccc;
- background:#fff url(../media/gradient-e5e5e5-ffffff.gif) repeat-x 0 -20px;
- text-align:center;
- width:100%;
- }
-.datePicker table tfoot td
- {
- background:#fff url(../media/gradient-e5e5e5-ffffff.gif) repeat-x 0 -40px;
- }
-/* Common TD & TH styling */
-.datePicker table td
- {
- border: 1px solid #ccc;
- padding:0.6em 0.5em 0.5em 0.5em;
- /* Opera requires a line-height bigger than 1em in order to redraw properly */
- line-height:1.2em;
- cursor:default;
- background:#fff url(../media/gradient-e5e5e5-ffffff.gif) repeat-x 0 -50px;
- }
-.datePicker table th
- {
- border:0 none;
- padding:0;
- line-height:1em;
- font-weight:bold;
- color:#222;
- text-align:center;
- }
-/* The "mon tue wed etc" day header button styles */
-.datePicker table th.date-picker-day-header
- {
- text-transform:lowercase;
- cursor:help;
- }
-/* The "todays date" style */
-.datePicker table td.date-picker-today
- {
- background:#fff url(../media/bullet2.gif) no-repeat 0 0;
- color:rgb(100,100,100) !important;
- }
-/* The "selected date" style */
-.datePicker table td.date-picker-selected-date
- {
- color:#333 !important;
- border-color:#333 !important;
- }
-/* the "highlight days" style */
-td.date-picker-highlight
- {
- color:#a86666;
- }
-/* The date "out of range" style */
-.datePicker table td.out-of-range
- {
- color:#ccc !important;
- font-style:oblique;
- background:transparent !important;
- cursor:default !important;
- }
-/* The "disabled days" style */
-.datePicker table td.day-disabled
- {
- color:#aaa !important;
- background:transparent !important;
- cursor:default !important;
- }
-/* The "active cursor" style */
-.datePicker table td#date-picker-hover
- {
- background:#fff url(../media/bg_header.jpg) no-repeat 0 0;
- cursor:pointer;
- border-color:rgb(100,130,170);
- color:rgb(100,130,170);
- }
-/* Remove the images for Internet Explorer <= v6 using the "* html" hack */
-* html .datePicker table td.date-picker-selected,
-* html .datePicker table td.date-picker-hover,
-* html .datePicker table td
- {
- background-image:none;
- }
diff --git a/usr/local/www/javascript/datepicker/js/blank.html b/usr/local/www/javascript/datepicker/js/blank.html
deleted file mode 100644
index 53a7f24..0000000
--- a/usr/local/www/javascript/datepicker/js/blank.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<html>
-<head>
-</head>
-<body>
-</body>
-</html>
diff --git a/usr/local/www/javascript/datepicker/js/datepicker.js b/usr/local/www/javascript/datepicker/js/datepicker.js
deleted file mode 100644
index 3d6dbd3..0000000
--- a/usr/local/www/javascript/datepicker/js/datepicker.js
+++ /dev/null
@@ -1,1111 +0,0 @@
-/*
- DatePicker v2.5 by frequency-decoder.com (2006/12/01)
-
- Released under a creative commons Attribution-ShareAlike 2.5 license (http://creativecommons.org/licenses/by-sa/2.5/)
-
- Please credit frequency-decoder in any derivative work - thanks.
-
- You are free:
-
- * to copy, distribute, display, and perform the work
- * to make derivative works
- * to make commercial use of the work
-
- Under the following conditions:
-
- by Attribution.
- --------------
- You must attribute the work in the manner specified by the author or licensor.
-
- sa
- --
- Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one.
-
- * For any reuse or distribution, you must make clear to others the license terms of this work.
- * Any of these conditions can be waived if you get permission from the copyright holder.
-*/
-var datePickerController;
-
-(function() {
-
-datePicker.isSupported = typeof document.createElement != "undefined" &&
- typeof document.documentElement != "undefined" &&
- typeof document.documentElement.offsetWidth == "number";
-
-// Detect the users language
-datePicker.languageinfo = navigator.language ? navigator.language : navigator.userLanguage;
-datePicker.languageinfo = datePicker.languageinfo ? datePicker.languageinfo.toLowerCase().replace(/-[a-z]+$/, "") : 'en';
-
-if(datePicker.languageinfo != 'en') {
- // Load the appropriate language file
- var scriptFiles = document.getElementsByTagName('head')[0].getElementsByTagName('script');
- var loc = "";
-
- for(var i = 0, scriptFile; scriptFile = scriptFiles[i]; i++) {
- if(scriptFile.src && scriptFile.src.match(/datepicker/)) {
- loc = scriptFile.src.replace("datepicker", "lang/" + datePicker.languageinfo);
- break;
- };
- };
-
- if(loc != "") {
- var script = document.createElement('script');
- script.type = "text/javascript";
- script.src = loc;
- // Hopefully this allows a UTF-8 js file to be imported into a non-UTF HTML document
- script.setAttribute("charset", "utf-8");
- document.getElementsByTagName('head')[0].appendChild(script);
- };
-};
-
-// Defaults for the language should the locale file not load
-datePicker.months = [
- "January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December"];
-datePicker.fullDay = [
- "Monday",
- "Tuesday",
- "Wednesday",
- "Thursday",
- "Friday",
- "Saturday",
- "Sunday"];
-datePicker.titles = [
- "Previous month",
- "Next month",
- "Previous year",
- "Next year"];
-datePicker.daysPerMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
-
-datePicker.getDaysPerMonth = function (nMonth, nYear) {
- nMonth = (nMonth + 12) % 12;
- var res = datePicker.daysPerMonth[nMonth];
- if(((0 == (nYear%4)) && ((0 != (nYear%100)) || (0 == (nYear%400)))) && nMonth == 1) {
- res = 29;
- };
- return res;
-};
-
-function datePicker(options) {
-
- this.defaults = {};
-
- for(opt in options) {
- this[opt] = this.defaults[opt] = options[opt];
- };
-
- this.date = new Date();
- this.yearinc = 1;
- this.timer = null;
- this.pause = 1000;
- this.timerSet = false;
- this.opacity = 0;
- this.opacityTo = 0;
- this.fadeTimer = null;
- this.interval = new Date();
- this.firstDayOfWeek = this.defaults.firstDayOfWeek = 0;
- this.dateSet = null;
- this.visible = false;
- this.div;
- this.table;
-
- var o = this;
-
- o.reset = function() {
- for(def in o.defaults) {
- o[def] = o.defaults[def];
- };
- };
- o.setOpacity = function(op) {
- o.div.style.opacity = + op/100;
- o.div.style.filter = 'alpha(opacity=' + op + ')';
- o.opacity = op;
- };
- o.fade = function() {
-
- window.clearTimeout(o.fadeTimer);
- var diff = Math.round(o.opacity + ((o.opacityTo - o.opacity) / 4));
-
- o.setOpacity(diff);
-
- if(Math.abs(o.opacityTo - diff) > 3) {
- o.fadeTimer = window.setTimeout(function () { o.fade(); }, 50);
- } else {
- o.setOpacity(o.opacityTo);
- if(o.opacityTo == 0) o.div.style.display = "none";
- };
- };
- o.killEvent = function(e) {
- if (e == null) e = document.parentWindow.event;
-
- if (e.stopPropagation) {
- e.stopPropagation();
- e.preventDefault();
- }
- /*@cc_on@*/
- /*@if(@_win32)
- e.cancelBubble = true;
- e.returnValue = false;
- /*@end@*/
- return false;
- };
- o.startTimer = function () {
- if (o.timerSet) o.stopTimer();
- o.timer = window.setTimeout(function () { o.onTimer(); }, o.timerInc);
- o.timerSet = true;
- };
- o.stopTimer = function () {
- if (o.timer != null) window.clearTimeout(o.timer);
- o.timerSet = false;
- };
- o.events = {
- onkeydown: function (e) {
-
- if(!o.visible) return false;
-
- if (e == null) e = document.parentWindow.event;
- var kc = e.keyCode ? e.keyCode : e.charCode;
-
- if ( kc == 13 ) {
- // close with update
- o.returnFormattedDate();
- o.hide();
- return o.killEvent(e);
- } else if ( kc == 27 ) {
- // close
- o.hide();
- return o.killEvent(e);
- } else if ( kc == 32 || kc == 0 ) {
- // close
- o.date = new Date( );
- o.updateTable();
- return o.killEvent(e);
- };
-
- // Internet Explorer fires the keydown event faster than the JavaScript engine can
- // update the interface. The following attempts to fix this.
-
- /*@cc_on@*/
- /*@if(@_win32)
- if(new Date().getTime() - o.interval.getTime() < 100) return o.killEvent(e);
- o.interval = new Date();
- /*@end@*/
-
- if ((kc > 49 && kc < 56) || (kc > 97 && kc < 104)) {
- if (kc > 96) kc -= (96-48);
- kc -= 49;
- o.firstDayOfWeek = (o.firstDayOfWeek + kc) % 7;
- o.updateTable();
- return o.killEvent(e);
- };
-
- if ( kc < 37 || kc > 40 ) return true;
-
- var d = new Date( o.date ).valueOf();
-
- if ( kc == 37 ) {
- // ctrl + left = previous month
- if( e.ctrlKey ) {
- d = new Date( o.date );
- d.setDate( Math.min(d.getDate(), datePicker.getDaysPerMonth(d.getMonth() - 1,d.getFullYear())) ); // no need to catch dec -> jan for the year
- d.setMonth( d.getMonth() - 1 );
- } else {
- d -= 24 * 60 * 60 * 1000;
- };
- } else if ( kc == 39 ) {
- // ctrl + right = next month
- if( e.ctrlKey ) {
- d = new Date( o.date );
- d.setDate( Math.min(d.getDate(), datePicker.getDaysPerMonth(d.getMonth() + 1,d.getFullYear())) ); // no need to catch dec -> jan for the year
- d.setMonth( d.getMonth() + 1 );
- } else {
- d += 24 * 60 * 60 * 1000;
- };
- } else if ( kc == 38 ) {
- // ctrl + up = next year
- if( e.ctrlKey ) {
- d = new Date( o.date );
- d.setDate( Math.min(d.getDate(), datePicker.getDaysPerMonth(d.getMonth(),d.getFullYear() + 1)) ); // no need to catch dec -> jan for the year
- d.setFullYear( d.getFullYear() + 1 );
- } else {
- d -= 7 * 24 * 60 * 60 * 1000;
- };
- } else if ( kc == 40 ) {
- // ctrl + down = prev year
- if( e.ctrlKey ) {
- d = new Date( o.date );
- d.setDate( Math.min(d.getDate(), datePicker.getDaysPerMonth(d.getMonth(),d.getFullYear() - 1)) ); // no need to catch dec -> jan for the year
- d.setFullYear( d.getFullYear() - 1 );
- } else {
- d += 7 * 24 * 60 * 60 * 1000;
- };
- };
-
- var tmpDate = new Date( d );
- if(!o.outOfRange(tmpDate)) {
- o.date = tmpDate;
- };
-
- o.updateTable();
-
- return o.killEvent(e);
- },
- onmousedown: function(e) {
- if ( e == null ) e = document.parentWindow.event;
- var el = e.target != null ? e.target : e.srcElement;
-
- var found = false;
-
- while(el.parentNode) {
- if(el.id && (el.id == "fd-"+o.id || el.id == "fd-but-"+o.id)) {
- found = true;
- break;
- }
- try {
- el = el.parentNode;
- } catch(err) {
- break;
- }
- }
- if(found) return true;
- datePickerController.hideAll();
- },
- onmouseover: function(e) {
- if(document.getElementById("date-picker-hover")) {
- document.getElementById("date-picker-hover").id = "";
- };
-
- this.id = "date-picker-hover";
-
- o.date.setDate(this.firstChild.nodeValue);
- },
- onclick: function (e) {
- if(o.opacity != o.opacityTo) return false;
- if ( e == null ) e = document.parentWindow.event;
- var el = e.target != null ? e.target : e.srcElement;
- while ( el.nodeType != 1 ) el = el.parentNode;
-
- var d = new Date( o.date );
- var n = Number( el.firstChild.data );
-
- if(isNaN(n)) { return true; };
-
- d.setDate( n );
- o.date = d;
-
- o.returnFormattedDate();
- o.hide();
- return o.killEvent(e);
- },
- incDec:function(e) {
- if(o.timerSet) {
- o.stopTimer();
- };
-
- datePickerController.addEvent(document, "mouseup", o.events.clearTimer);
-
- o.timerInc = 1000;
- o.dayInc = arguments[1];
- o.yearInc = arguments[2];
- o.monthInc = arguments[3];
- o.onTimer();
- return o.killEvent(e);
- },
- clearTimer:function() {
- o.stopped = true;
- o.timerInc = 1000;
- o.yearInc = 0;
- o.monthInc = 0;
- o.dayInc = 0;
- try {
- datePickerController.removeEvent(document, "mouseup", o.events.clearTimer);
- } catch(e) { };
- o.stopTimer();
- }
- };
- o.onTimer = function() {
- var d = new Date( o.date );
-
- d.setDate( Math.min(d.getDate()+o.dayInc, datePicker.getDaysPerMonth(d.getMonth()+o.monthInc,d.getFullYear()+o.yearInc)) ); // no need to catch dec -> jan for the year
- d.setMonth( d.getMonth() + o.monthInc );
- d.setFullYear( d.getFullYear() + o.yearInc );
-
- o.date = d;
-
- if(o.timerInc > 50) {
- o.timerInc = 50 + Math.round(((o.timerInc - 50) / 1.8));
- };
- o.startTimer();
- o.updateTable();
- };
- o.getElem = function() {
- return document.getElementById(o.id.replace(/^fd-/, '')) || false;
- };
- o.setRangeLow = function(range) {
- if(String(range).search(/^(\d\d?\d\d)(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/) == -1) range = '';
- o.low = o.defaults.low = range;
- };
- o.setRangeHigh = function(range) {
- if(String(range).search(/^(\d\d?\d\d)(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/) == -1) range = '';
- o.high = o.defaults.high = range;
- };
- o.setDisabledDays = function(dayArray) {
- o.disableDays = o.defaults.disableDays = dayArray;
- };
- o.setFirstDayOfWeek = function(e) {
- if ( e == null ) e = document.parentWindow.event;
- var elem = e.target != null ? e.target : e.srcElement;
-
- if(elem.tagName.toLowerCase() != "th") {
- while(elem.tagName.toLowerCase() != "th") elem = elem.parentNode;
- }
-
- var cnt = 0;
-
- while(elem.previousSibling) {
- elem = elem.previousSibling;
- if(elem.tagName.toLowerCase() == "th") cnt++;
- }
-
- o.firstDayOfWeek = (o.firstDayOfWeek + cnt) % 7;
- o.updateTable();
-
- return o.killEvent(e);
- };
- o.trueBody = function() {
- return;
- };
- o.resize = function() {
- if(!o.created || !o.getElem()) return;
-
- o.div.style.visibility = "hidden";
- o.div.style.display = "block";
-
- var osh = o.div.offsetHeight;
- var osw = o.div.offsetWidth;
-
- o.div.style.visibility = "visible";
- o.div.style.display = "none";
-
- var elem = document.getElementById('fd-but-' + o.id);
- var pos = datePickerController.findPosition(elem);
- var trueBody = (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
-
- if ( parseInt(trueBody.clientWidth+trueBody.scrollLeft) < parseInt(osw+pos[0])) {
- o.div.style.left = Math.abs(parseInt((trueBody.clientWidth+trueBody.scrollLeft) - osw)) + "px";
- } else {
- o.div.style.left = pos[0] + "px";
- };
-
- if ( parseInt(trueBody.clientHeight+trueBody.scrollTop) < parseInt(osh+pos[1]+elem.offsetHeight+2)) {
- o.div.style.top = Math.abs(parseInt(pos[1] - (osh + 2))) + "px";
- } else {
- o.div.style.top = Math.abs(parseInt(pos[1] + elem.offsetHeight + 2)) + "px";
- };
- };
- o.equaliseDates = function() {
- var clearDayFound = false;
- var tmpDate;
- for(var i = o.low; i <= o.high; i++) {
- tmpDate = String(i);
- if(!o.disableDays[new Date(tmpDate.substr(4,2) + '/' + tmpDate.substr(6,2) + '/' + tmpDate.substr(0,4)).getDay() - 1]) {
- clearDayFound = true;
- break;
- };
- };
- if(!clearDayFound) o.disableDays = o.defaults.disableDays = [0,0,0,0,0,0,0];
- };
- o.outOfRange = function(tmpDate) {
- if(!o.low && !o.high) return false;
-
- var level = false;
- if(!tmpDate) {
- level = true;
- tmpDate = o.date;
- };
-
- var d = (tmpDate.getDate() < 10) ? "0" + tmpDate.getDate() : tmpDate.getDate();
- var m = ((tmpDate.getMonth() + 1) < 10) ? "0" + (tmpDate.getMonth() + 1) : tmpDate.getMonth() + 1;
- var y = tmpDate.getFullYear();
- var dt = (y+' '+m+' '+d).replace(/ /g,'');
-
- if(o.low) {
- if(parseInt(dt) < parseInt(o.low)) {
- if(!level) return true;
- o.date = new Date( o.low.substr(4,2) + '/' + o.low.substr(6,2) + '/' + o.low.substr(0,4) );
- return false;
- };
- };
- if(o.high) {
- if(parseInt(dt) > parseInt(o.high)) {
- if(!level) return true;
- o.date = new Date( o.high.substr(4,2) + '/' + o.high.substr(6,2) + '/' + o.high.substr(0,4) );
- };
- };
- return false;
- };
- o.create = function() {
-
- /*@cc_on@*/
- /*@if(@_jscript_version <= 5.6)
- if(!document.getElementById("iePopUpHack")) {
- var loc = "./blank.html";
- var scriptFiles = document.getElementsByTagName('head')[0].getElementsByTagName('script');
- for(var i = 0, scriptFile; scriptFile = scriptFiles[i]; i++) {
- if(scriptFile.src && scriptFile.src.match(/datepicker.js$/)) {
- loc = scriptFile.src.replace("datepicker.js", "blank.html");
- break;
- };
- };
-
- o.iePopUp = document.createElement('iframe');
- o.iePopUp.src = loc;
- o.iePopUp.setAttribute('className','iehack');
- o.iePopUp.scrolling="no";
- o.iePopUp.frameBorder="0";
- o.iePopUp.name = o.iePopUp.id = "iePopUpHack";
- document.body.appendChild(o.iePopUp);
- } else {
- o.iePopUp = document.getElementById("iePopUpHack");
- };
- /*@end@*/
-
- if(typeof(fdLocale) == "object" && o.locale) {
- datePicker.titles = fdLocale.titles;
- datePicker.months = fdLocale.months;
- datePicker.fullDay = fdLocale.fullDay;
- // Optional parameters
- if(fdLocale.dayAbbr) datePicker.dayAbbr = fdLocale.dayAbbr;
- if(fdLocale.firstDayOfWeek) o.firstDayOfWeek = o.defaults.firstDayOfWeek = fdLocale.firstDayOfWeek;
- };
-
- o.div = document.createElement('div');
- o.div.style.zIndex = 9999;
- o.div.id = "fd-"+o.id;
- var tableBody = document.createElement('tbody');
- var tableHead = document.createElement('thead');
- var nbsp = String.fromCharCode( 160 );
-
- o.table = document.createElement('table');
- o.div.className = "datePicker";
-
- var tr = document.createElement('tr');
- var th = document.createElement('th');
-
- // previous year
- var tmpelem = document.createElement('button');
- tmpelem.setAttribute("type", "button");
- tmpelem.className = "prev-but";
- tmpelem.appendChild(document.createTextNode('\u00AB'));
- tmpelem.title = datePicker.titles[2];
- tmpelem.onmousedown = function(e) { this.blur(); o.events.incDec(e,0,-1,0); };
- tmpelem.onmouseup = o.events.clearTimer;
- th.appendChild( tmpelem );
-
- // previous month
- var tmpelem = document.createElement('button');
- tmpelem.setAttribute("type", "button");
- tmpelem.className = "prev-but";
- tmpelem.appendChild(document.createTextNode("\u2039"));
- tmpelem.title = datePicker.titles[0];
- tmpelem.onmousedown = function(e) { this.blur(); o.events.incDec(e,0,0,-1); };
- tmpelem.onmouseup = o.events.clearTimer;
- th.appendChild( tmpelem );
- tr.appendChild( th );
-
- // title bar
- o.titleBar = document.createElement('th');
-
- /*@cc_on
- /*@if (@_win32)
- o.titleBar.setAttribute('colSpan','5');
- @else @*/
- o.titleBar.setAttribute('colspan','5');
- /*@end
- @*/
-
- o.titleBar.setAttribute('text-align','center');
- tr.appendChild( o.titleBar );
-
- th = document.createElement('th');
-
- // next month
- var tmpelem = document.createElement('button');
- tmpelem.setAttribute("type", "button");
- tmpelem.className = "next-but";
- tmpelem.appendChild(document.createTextNode('\u203A'));
- tmpelem.title = datePicker.titles[1];
- tmpelem.onmousedown = function(e) { this.blur(); o.events.incDec(e,0,0,1); };
- tmpelem.onmouseup = o.events.clearTimer;
-
- th.appendChild( tmpelem );
-
- // next year
- var tmpelem = document.createElement('button');
- tmpelem.setAttribute("type", "button");
- tmpelem.className = "next-but";
- tmpelem.appendChild(document.createTextNode('\u00BB'));
- tmpelem.title = datePicker.titles[3];
- tmpelem.onmousedown = function(e) { this.blur(); o.events.incDec(e,0,1,0); };
- tmpelem.onmouseup = o.events.clearTimer;
- th.appendChild( tmpelem );
-
- tr.appendChild( th );
-
- tableHead.appendChild(tr);
-
- var row, col;
-
- for(var rows = 0; rows < 7; rows++) {
- row = document.createElement('tr');
- for(var cols = 0; cols < 7; cols++) {
- col = (rows == 0) ? document.createElement('th') : document.createElement('td');
- if(rows != 0) {
- col.appendChild(document.createTextNode(nbsp));
- } else {
- col.className = "date-picker-day-header";
- col.scope = "col";
- };
-
- row.appendChild(col);
- }
- if(rows != 0) tableBody.appendChild(row);
- else tableHead.appendChild(row);
- };
- o.table.appendChild( tableHead );
- o.table.appendChild( tableBody );
-
- o.div.appendChild( o.table );
- o.created = true;
-
- document.getElementsByTagName('body')[0].appendChild( o.div );
- };
- o.setDateFromInput = function() {
- o.dateSet = null;
-
- var elem = o.getElem();
- if(!elem) return;
-
- var date = elem.value;
-
- var d,m,y,dt,dates;
-
- d = o.format.replace(/-/g,'').indexOf('d');
- m = o.format.replace(/-/g,'').indexOf('m');
- y = o.format.replace(/-/g,'').indexOf('y');
-
- if(o.splitDate) {
- dates = [];
-
- dates[m] = document.getElementById(o.id+'-mm').value;
- if(dates[m] < 1 || dates[m] > 12) dates[m] = "";
-
- dates[d] = document.getElementById(o.id+'-dd').value;
- if(dates[d] < 1 || dates[d] > datePicker.daysPerMonth[dates[m]-1]) dates[d] = "";
-
- dates[y] = date;
- } else {
- if(date.match(/^[0-9]{4}$/)) {
- if(date > 1600 && date < 2030) {
- o.date.setFullYear(date);
- return;
- };
- };
-
- dates = date.split(o.divider);
-
- if(dates.length != 3) {
- o.date = new Date();
- return;
- };
- };
-
- var check = new Date( dates[y] + "/" + dates[m] + "/" + dates[d] );
- if(check == 'Invalid Date' /*@cc_on@*/ /*@if(@_win32) || check == 'NaN' /*@end@*/) {
- o.date = new Date();
- return;
- };
-
- o.date.setMonth(dates[m]-1);
- o.date.setFullYear(dates[y]);
- o.date.setDate(dates[d]);
-
- o.dateSet = new Date(o.date);
- };
- o.returnFormattedDate = function() {
- var elem = o.getElem();
- if(!elem) return;
-
- var d = (o.date.getDate() < 10) ? "0" + o.date.getDate() : o.date.getDate();
- var m = ((o.date.getMonth() + 1) < 10) ? "0" + (o.date.getMonth() + 1) : o.date.getMonth() + 1;
- var yyyy = o.date.getFullYear();
-
- var weekDay = ( o.date.getDay() + 6 ) % 7;
-
- if(!(o.disableDays[weekDay])) {
- if(o.splitDate) {
- document.getElementById(o.id+"-dd").value = d;
- document.getElementById(o.id+"-mm").value = m;
- elem.value = yyyy;
-
- document.getElementById(o.id+"-dd").focus();
- if(document.getElementById(o.id+"-dd").onchange) document.getElementById(o.id+"-dd").onchange();
- if(document.getElementById(o.id+"-mm").onchange) document.getElementById(o.id+"-mm").onchange();
- } else {
- elem.value = o.format.replace('y',yyyy).replace('m',m).replace('d',d).replace(/-/g,o.divider);
- elem.focus();
- };
- if(elem.onchange) elem.onchange();
- };
- };
- // Credit where credit's due:
-
- // Most of the logic for this method from the webfx date-picker
- // http://webfx.eae.net/
-
- o.updateTable = function() {
-
- if(document.getElementById("date-picker-hover")) {
- document.getElementById("date-picker-hover").id = "";
- };
-
- var i;
- var str = "";
- var rows = 6;
- var cols = 7;
- var currentWeek = 0;
- var nbsp = String.fromCharCode( 160 );
-
- var cells = new Array( rows );
-
- for ( i = 0; i < rows; i++ ) {
- cells[i] = new Array( cols );
- };
-
- o.outOfRange();
-
- // Set the tmpDate to this month
- var tmpDate = new Date( o.date.getFullYear(), o.date.getMonth(), 1 );
- var today = new Date();
-
- // titleBar
- var titleText = datePicker.months[o.date.getMonth()] + nbsp + o.date.getFullYear();
- while(o.titleBar.firstChild) o.titleBar.removeChild(o.titleBar.firstChild);
- o.titleBar.appendChild(document.createTextNode(titleText));
-
- for ( i = 1; i < 32; i++ ) {
-
- tmpDate.setDate( i );
- var weekDay = ( tmpDate.getDay() + 6 ) % 7;
- var colIndex = ( (weekDay - o.firstDayOfWeek) + 7 ) % 7;
- var cell = { text:"", className:"", id:"" };
-
- if ( tmpDate.getMonth() == o.date.getMonth() ) {
-
- cells[currentWeek][colIndex] = { text:"", className:"", id:"" };
-
- var isToday = tmpDate.getDate() == today.getDate() &&
- tmpDate.getMonth() == today.getMonth() &&
- tmpDate.getFullYear() == today.getFullYear();
-
- if ( o.dateSet != null && o.dateSet.getDate() == tmpDate.getDate() && o.dateSet.getMonth() == tmpDate.getMonth() && o.dateSet.getFullYear() == tmpDate.getFullYear()) {
- cells[currentWeek][colIndex].className = "date-picker-selected-date";
- };
- if ( o.date.getDate() == tmpDate.getDate() && o.date.getFullYear() == tmpDate.getFullYear()) {
- cells[currentWeek][colIndex].id = "date-picker-hover";
- };
-
- if(o.highlightDays[weekDay]) {
- cells[currentWeek][colIndex].className += " date-picker-highlight";
- };
- if ( isToday ) {
- cells[currentWeek][colIndex].className = "date-picker-today";
- };
- if(o.outOfRange(tmpDate)) {
- cells[currentWeek][colIndex].className = "out-of-range";
- } else if(o.disableDays[weekDay]) {
- cells[currentWeek][colIndex].className = "day-disabled";
- };
- cells[currentWeek][colIndex].text = tmpDate.getDate();
- if ( colIndex == 6 ) currentWeek++;
- };
- };
-
- // Table headers
- var lnk, d;
- var ths = o.table.getElementsByTagName('thead')[0].getElementsByTagName('tr')[1].getElementsByTagName('th');
- for ( var y = 0; y < 7; y++ ) {
- d = (o.firstDayOfWeek + y) % 7;
-
- while(ths[y].firstChild) ths[y].removeChild(ths[y].firstChild);
-
- ths[y].title = datePicker.fullDay[d];
-
- // Don't create a button for the first day header
- if(y > 0) {
- but = document.createElement("BUTTON");
- but.className = "fd-day-header";
- but.onclick = but.onkeypress = ths[y].onclick = o.setFirstDayOfWeek;
- but.appendChild(document.createTextNode(datePicker.dayAbbr ? datePicker.dayAbbr[d] : datePicker.fullDay[d].charAt(0)));
- ths[y].appendChild(but);
- but.title = datePicker.fullDay[d];
- } else {
- ths[y].appendChild(document.createTextNode(datePicker.dayAbbr ? datePicker.dayAbbr[d] : datePicker.fullDay[d].charAt(0)));
- ths[y].onclick = null;
- };
- };
-
-
- var trs = o.table.getElementsByTagName('tbody')[0].getElementsByTagName('tr');
-
- var tmpCell;
-
- for ( var y = 0; y < rows; y++ ) {
- var tds = trs[y].getElementsByTagName('td');
- for (var x = 0; x < cols; x++) {
- tmpCell = tds[x];
-
- while(tmpCell.firstChild) tmpCell.removeChild(tmpCell.firstChild);
-
- if ( typeof cells[y][x] != "undefined" ) {
- tmpCell.className = cells[y][x].className;
- tmpCell.id = cells[y][x].id;
-
- tmpCell.appendChild(document.createTextNode(cells[y][x].text));
-
- if(cells[y][x].className != "out-of-range") {
- tmpCell.onmouseover = o.events.onmouseover;
- tmpCell.onclick = cells[y][x].className == "day-disabled" ? o.killEvent : o.events.onclick;
- tmpCell.title = datePicker.months[o.date.getMonth()] + nbsp + cells[y][x].text + "," + nbsp + o.date.getFullYear();
- } else {
- tmpCell.onmouseover = null;
- tmpCell.onclick = o.killEvent;
- tmpCell.title = "";
- };
- } else {
- tmpCell.className = "";
- tmpCell.id = "";
- tmpCell.onmouseover = null;
- tmpCell.onclick = function(e) { return o.killEvent(e); };
- tmpCell.appendChild(document.createTextNode(nbsp));
- tmpCell.title = "";
- };
- };
- };
- };
- o.init = function() {
- if(o.low && o.high && (o.high - o.low < 7)) {
- o.equaliseDates();
- };
- o.resize();
- o.setDateFromInput();
- o.fade();
- o.ieHack(true);
- };
- o.ieHack = function(cleanup) {
- // IE hack
- if(o.iePopUp) {
- o.iePopUp.style.display = "block";
- o.iePopUp.style.top = (o.div.offsetTop + 2) + "px";
- o.iePopUp.style.left = o.div.offsetLeft + "px";
- o.iePopUp.style.width = o.div.clientWidth + "px";
- o.iePopUp.style.height = (o.div.clientHeight - 2) + "px";
- if(cleanup) o.iePopUp.style.display = "none";
- }
- };
- o.show = function() {
- var elem = o.getElem();
- if(!elem || o.visible || elem.disabled) return;
-
- o.reset();
- o.setDateFromInput();
- o.updateTable();
- o.resize();
- o.ieHack(false);
-
- datePickerController.addEvent(document, "mousedown", o.events.onmousedown);
- datePickerController.addEvent(document, "keypress", o.events.onkeydown);
-
- // Internet Explorer requires the keydown event in order to catch arrow keys
-
- /*@cc_on@*/
- /*@if(@_win32)
- datePickerController.removeEvent(document, "keypress", o.events.onkeydown);
- datePickerController.addEvent(document, "keydown", o.events.onkeydown);
- /*@end@*/
-
- o.opacityTo = 90;
- o.div.style.display = "block";
- o.ieHack(false);
- o.fade();
- o.visible = true;
-
- };
- o.hide = function() {
- try {
- datePickerController.removeEvent(document, "mousedown", o.events.onmousedown);
- datePickerController.removeEvent(document, "keypress", o.events.onkeydown);
- datePickerController.removeEvent(document, "keydown", o.events.onkeydown);
- } catch(e) {
-
- };
- if(o.iePopUp) {
- o.iePopUp.style.display = "none";
- };
- o.opacityTo = 0;
- o.fade();
- o.visible = false;
- };
- o.create();
- o.init();
-};
-
-datePickerController = {
- datePickers: {},
- addEvent: function(obj, type, fn, tmp) {
- tmp || (tmp = true);
- if( obj.attachEvent ) {
- obj["e"+type+fn] = fn;
- obj[type+fn] = function(){obj["e"+type+fn]( window.event );};
- obj.attachEvent( "on"+type, obj[type+fn] );
- } else {
- obj.addEventListener( type, fn, true );
- };
- },
- removeEvent: function(obj, type, fn, tmp) {
- tmp || (tmp = true);
- if( obj.detachEvent ) {
- obj.detachEvent( "on"+type, obj[type+fn] );
- obj[type+fn] = null;
- } else {
- obj.removeEventListener( type, fn, true );
- };
- },
- findPosition: function(obj) {
- var curleft = 0;
- var curtop = 0;
- var orig = obj;
-
- if(obj.offsetParent) {
- while(obj.offsetParent) {
- curleft += obj.offsetLeft;
- curtop += obj.offsetTop;
- obj = obj.offsetParent;
- };
- } else if (obj.x) {
- curleft += obj.x;
- curtop += obj.y;
- };
- return [ curleft, curtop ];
- },
- hideAll: function(exception) {
- for(dp in datePickerController.datePickers) {
- if(exception && exception == datePickerController.datePickers[dp].id) continue;
- datePickerController.datePickers[dp].hide();
- };
- },
- cleanUp: function() {
- var dp;
- for(dp in datePickerController.datePickers) {
- if(!document.getElementById(datePickerController.datePickers[dp].id)) {
- dpElem = document.getElementById("fd-"+datePickerController.datePickers[dp].id);
- if(dpElem) {
- dpElem.parentNode.removeChild(dpElem);
- };
- datePickerController.datePickers[dp] = null;
- delete datePickerController.datePickers[dp];
- };
- };
- },
- dateFormat: function(dateIn, favourMDY) {
- var dateTest = [
- { regExp:/^(0[1-9]|[12][0-9]|3[01])([- \/.])(0[1-9]|1[012])([- \/.])(\d\d?\d\d)$/, d:1, m:3, y:5 }, // dmy
- { regExp:/^(0[1-9]|1[012])([- \/.])(0[1-9]|[12][0-9]|3[01])([- \/.])(\d\d?\d\d)$/, d:3, m:1, y:5 }, // mdy
- { regExp:/^(\d\d?\d\d)([- \/.])(0[1-9]|1[012])([- \/.])(0[1-9]|[12][0-9]|3[01])$/, d:5, m:3, y:1 } // ymd
- ];
-
- var start;
- var cnt = 0;
-
- while(cnt < 3) {
- start = (cnt + (favourMDY ? 4 : 3)) % 3;
-
- if(dateIn.match(dateTest[start].regExp)) {
- res = dateIn.match(dateTest[start].regExp);
- y = res[dateTest[start].y];
- m = res[dateTest[start].m];
- d = res[dateTest[start].d];
- if(m.length == 1) m = "0" + m;
- if(d.length == 1) d = "0" + d;
- if(y.length != 4) y = (parseInt(y) < 50) ? '20' + y : '19' + y;
-
- return y+m+d;
- };
-
- cnt++;
- };
-
- return 0;
- },
- create: function() {
- if(!datePicker.isSupported) return;
-
- datePickerController.cleanUp();
-
- var inputs = document.getElementsByTagName('input');
-
- var regExp1 = /disable-days-([1-7]){1,6}/g; // the days to disable
- var regExp3 = /highlight-days-([1-7]){1,7}/g; // the days to highlight in red
- var regExp4 = /range-low-([0-9\-]){10}/g; // the lowest selectable date
- var regExp5 = /range-high-([0-9\-]){10}/g; // the highest selectable date
- var regExp6 = /format-([dmy\-]{5})/g; // the input/output date format
- var regExp7 = /divider-(dot|slash|space|dash)/g; // the character used to divide the date
- var regExp8 = /no-locale/g; // do not attempt to detect the browser language
-
- for(var i=0, inp; inp = inputs[i]; i++) {
- if(inp.className && (inp.className.search(regExp6) != -1 || inp.className.search(/split-date/) != -1) && inp.type == "text" && inp.name) {
-
- if(!inp.id) {
- // Internet explorer requires you to give each input a unique ID attribute.
- if(document.getElementById(inp.name)) continue;
- inp.id = inp.name;
- };
-
- var options = {
- id:inp.id,
- low:"",
- high:"",
- divider:"/",
- format:"d-m-y",
- highlightDays:[0,0,0,0,0,1,1],
- disableDays:[0,0,0,0,0,0,0],
- locale:inp.className.search(regExp8) == -1,
- splitDate:0
- };
-
- // Split the date into three parts ?
- if(inp.className.search(/split-date/) != -1) {
- if(document.getElementById(inp.id+'-dd') && document.getElementById(inp.id+'-mm') && document.getElementById(inp.id+'-dd').tagName.toLowerCase() == "input" && document.getElementById(inp.id+'-mm').tagName.toLowerCase() == "input") {
- options.splitDate = 1;
- };
- };
-
- // Date format(variations of d-m-y)
- if(inp.className.search(regExp6) != -1) {
- options.format = inp.className.match(regExp6)[0].replace('format-','');
- };
-
- // What divider to use, a "/", "-", "." or " "
- if(inp.className.search(regExp7) != -1) {
- var divider = inp.className.match(regExp7)[0].replace('divider-','');
- switch(divider.toLowerCase()) {
- case "dot":
- options.divider = ".";
- break;
- case "space":
- options.divider = " ";
- break;
- case "dash":
- options.divider = "-";
- break;
- default:
- options.divider = "/";
- };
- };
-
- // The days to highlight
- if(inp.className.search(regExp3) != -1) {
- var tmp = inp.className.match(regExp3)[0].replace(/highlight-days-/, '');
- options.highlightDays = [0,0,0,0,0,0,0];
- for(var j = 0; j < tmp.length; j++) {
- options.highlightDays[tmp.charAt(j) - 1] = 1;
- };
- };
-
- // The days to disable
- if(inp.className.search(regExp1) != -1) {
- var tmp = inp.className.match(regExp1)[0].replace(/disable-days-/, '');
- options.disableDays = [0,0,0,0,0,0,0];
- for(var j = 0; j < tmp.length; j++) {
- options.disableDays[tmp.charAt(j) - 1] = 1;
- };
- };
-
- // The lower limit
- if(inp.className.search(regExp4) != -1) {
- options.low = datePickerController.dateFormat(inp.className.match(regExp4)[0].replace(/range-low-/, ''), options.format.charAt(0) == "m");
- if(options.low == 0) {
- options.low = '';
- };
- };
-
- // The higher limit
- if(inp.className.search(regExp5) != -1) {
- options.high = datePickerController.dateFormat(inp.className.match(regExp5)[0].replace(/range-high-/, ''), options.format.charAt(0) == "m");
- if(options.high == 0) {
- options.high = '';
- };
- };
-
- // Datepicker is already created so reset it's defaults
- if(document.getElementById('fd-'+inp.id)) {
- for(var opt in options) {
- datePickerController.datePickers[inp.id].defaults[opt] = options[opt];
- };
- };
-
- // Create the button (if needs be)
- if(!document.getElementById("fd-but-" + inp.id)) {
- var but = document.createElement('button');
- but.setAttribute("type", "button");
- but.className = "date-picker-control";
-
- but.id = "fd-but-" + inp.id;
- but.appendChild(document.createTextNode(String.fromCharCode( 160 )));
-
- if(inp.nextSibling) {
- inp.parentNode.insertBefore(but, inp.nextSibling);
- } else {
- inp.parentNode.appendChild(but);
- };
-
- } else {
- var but = document.getElementById("fd-but-" + inp.id);
- };
-
- // Add button events
- but.onclick = but.onpress = function() {
- var inpId = this.id.replace('fd-but-','');
-
- datePickerController.hideAll(inpId);
- if(inpId in datePickerController.datePickers && !datePickerController.datePickers[inpId].visible) {
- datePickerController.datePickers[inpId].show();
- };
- return false;
- };
-
- // Create the datePicker (if needs be)
- if(!document.getElementById('fd-'+inp.id)) {
- datePickerController.datePickers[inp.id] = new datePicker(options);
- };
- };
- };
- }
-
-};
-
-
-})();
-
-datePickerController.addEvent(window, 'load', datePickerController.create);
-
diff --git a/usr/local/www/javascript/datepicker/media/bg_header.jpg b/usr/local/www/javascript/datepicker/media/bg_header.jpg
deleted file mode 100755
index 10dbd74..0000000
--- a/usr/local/www/javascript/datepicker/media/bg_header.jpg
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/datepicker/media/bullet1.gif b/usr/local/www/javascript/datepicker/media/bullet1.gif
deleted file mode 100755
index ae352c2..0000000
--- a/usr/local/www/javascript/datepicker/media/bullet1.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/datepicker/media/bullet2.gif b/usr/local/www/javascript/datepicker/media/bullet2.gif
deleted file mode 100755
index 04b293d..0000000
--- a/usr/local/www/javascript/datepicker/media/bullet2.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/datepicker/media/cal.gif b/usr/local/www/javascript/datepicker/media/cal.gif
deleted file mode 100755
index 8526cf5..0000000
--- a/usr/local/www/javascript/datepicker/media/cal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/datepicker/media/gradient-e5e5e5-ffffff.gif b/usr/local/www/javascript/datepicker/media/gradient-e5e5e5-ffffff.gif
deleted file mode 100755
index 72a0d3e..0000000
--- a/usr/local/www/javascript/datepicker/media/gradient-e5e5e5-ffffff.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/domTT/LICENSE b/usr/local/www/javascript/domTT/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/usr/local/www/javascript/domTT/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/usr/local/www/javascript/domTT/behaviour.js b/usr/local/www/javascript/domTT/behaviour.js
deleted file mode 100644
index 21b28d7..0000000
--- a/usr/local/www/javascript/domTT/behaviour.js
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- Behaviour v1.1 by Ben Nolan, June 2005. Based largely on the work
- of Simon Willison (see comments by Simon below).
-
- Description:
-
- Uses css selectors to apply javascript behaviours to enable
- unobtrusive javascript in html documents.
-
- Usage:
-
- var myrules = {
- 'b.someclass' : function(element){
- element.onclick = function(){
- alert(this.innerHTML);
- }
- },
- '#someid u' : function(element){
- element.onmouseover = function(){
- this.innerHTML = "BLAH!";
- }
- }
- };
-
- Behaviour.register(myrules);
-
- // Call Behaviour.apply() to re-apply the rules (if you
- // update the dom, etc).
-
- License:
-
- This file is entirely BSD licensed.
-
- More information:
-
- http://ripcord.co.nz/behaviour/
-
-*/
-
-var Behaviour = {
- list : new Array,
-
- register : function(sheet){
- Behaviour.list.push(sheet);
- },
-
- start : function(){
- Behaviour.addLoadEvent(function(){
- Behaviour.apply();
- });
- },
-
- apply : function(){
- for (h=0;sheet=Behaviour.list[h];h++){
- for (selector in sheet){
- list = document.getElementsBySelector(selector);
-
- if (!list){
- continue;
- }
-
- for (i=0;element=list[i];i++){
- sheet[selector](element);
- }
- }
- }
- },
-
- addLoadEvent : function(func){
- var oldonload = window.onload;
-
- if (typeof window.onload != 'function') {
- window.onload = func;
- } else {
- window.onload = function() {
- oldonload();
- func();
- };
- }
- }
-};
-
-Behaviour.start();
-
-/*
- The following code is Copyright (C) Simon Willison 2004.
-
- document.getElementsBySelector(selector)
- - returns an array of element objects from the current document
- matching the CSS selector. Selectors can contain element names,
- class names and ids and can be nested. For example:
-
- elements = document.getElementsBySelect('div#main p a.external')
-
- Will return an array of all 'a' elements with 'external' in their
- class attribute that are contained inside 'p' elements that are
- contained inside the 'div' element which has id="main"
-
- New in version 0.4: Support for CSS2 and CSS3 attribute selectors:
- See http://www.w3.org/TR/css3-selectors/#attribute-selectors
-
- Version 0.4 - Simon Willison, March 25th 2003
- -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows
- -- Opera 7 fails
-*/
-
-function getAllChildren(e) {
- // Returns all children of element. Workaround required for IE5/Windows. Ugh.
- return e.all ? e.all : e.getElementsByTagName('*');
-}
-
-document.getElementsBySelector = function(selector) {
- // Attempt to fail gracefully in lesser browsers
- if (!document.getElementsByTagName) {
- return new Array();
- }
- // Split selector in to tokens
- var tokens = selector.split(' ');
- var currentContext = new Array(document);
- for (var i = 0; i < tokens.length; i++) {
- token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');
- if (token.indexOf('#') > -1) {
- // Token is an ID selector
- var bits = token.split('#');
- var tagName = bits[0];
- var id = bits[1];
- var element = document.getElementById(id);
- if (tagName && element.nodeName.toLowerCase() != tagName) {
- // tag with that ID not found, return false
- return new Array();
- }
- // Set currentContext to contain just this element
- currentContext = new Array(element);
- continue; // Skip to next token
- }
- if (token.indexOf('.') > -1) {
- // Token contains a class selector
- var bits = token.split('.');
- var tagName = bits[0];
- var className = bits[1];
- if (!tagName) {
- tagName = '*';
- }
- // Get elements matching tag, filter them for class selector
- var found = new Array;
- var foundCount = 0;
- for (var h = 0; h < currentContext.length; h++) {
- var elements;
- if (tagName == '*') {
- elements = getAllChildren(currentContext[h]);
- } else {
- elements = currentContext[h].getElementsByTagName(tagName);
- }
- for (var j = 0; j < elements.length; j++) {
- found[foundCount++] = elements[j];
- }
- }
- currentContext = new Array;
- var currentContextIndex = 0;
- for (var k = 0; k < found.length; k++) {
- if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {
- currentContext[currentContextIndex++] = found[k];
- }
- }
- continue; // Skip to next token
- }
- // Code to deal with attribute selectors
- if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {
- var tagName = RegExp.$1;
- var attrName = RegExp.$2;
- var attrOperator = RegExp.$3;
- var attrValue = RegExp.$4;
- if (!tagName) {
- tagName = '*';
- }
- // Grab all of the tagName elements within current context
- var found = new Array;
- var foundCount = 0;
- for (var h = 0; h < currentContext.length; h++) {
- var elements;
- if (tagName == '*') {
- elements = getAllChildren(currentContext[h]);
- } else {
- elements = currentContext[h].getElementsByTagName(tagName);
- }
- for (var j = 0; j < elements.length; j++) {
- found[foundCount++] = elements[j];
- }
- }
- currentContext = new Array;
- var currentContextIndex = 0;
- var checkFunction; // This function will be used to filter the elements
- switch (attrOperator) {
- case '=': // Equality
- checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
- break;
- case '~': // Match one of space separated words
- checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
- break;
- case '|': // Match start with value followed by optional hyphen
- checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
- break;
- case '^': // Match starts with value
- checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
- break;
- case '$': // Match ends with value - fails with "Warning" in Opera 7
- checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
- break;
- case '*': // Match ends with value
- checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
- break;
- default :
- // Just test for existence of attribute
- checkFunction = function(e) { return e.getAttribute(attrName); };
- }
- currentContext = new Array;
- var currentContextIndex = 0;
- for (var k = 0; k < found.length; k++) {
- if (checkFunction(found[k])) {
- currentContext[currentContextIndex++] = found[k];
- }
- }
- // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);
- continue; // Skip to next token
- }
-
- if (!currentContext[0]){
- return;
- }
-
- // If we get here, token is JUST an element (not a class or ID selector)
- tagName = token;
- var found = new Array;
- var foundCount = 0;
- for (var h = 0; h < currentContext.length; h++) {
- var elements = currentContext[h].getElementsByTagName(tagName);
- for (var j = 0; j < elements.length; j++) {
- found[foundCount++] = elements[j];
- }
- }
- currentContext = found;
- }
- return currentContext;
-}
-
-/* That revolting regular expression explained
-/^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/
- \---/ \---/\-------------/ \-------/
- | | | |
- | | | The value
- | | ~,|,^,$,* or =
- | Attribute
- Tag
-*/
diff --git a/usr/local/www/javascript/domTT/domLib.js b/usr/local/www/javascript/domTT/domLib.js
deleted file mode 100644
index 9a51a34..0000000
--- a/usr/local/www/javascript/domTT/domLib.js
+++ /dev/null
@@ -1,706 +0,0 @@
-/** $Id: domLib.js 2321 2006-06-12 06:45:41Z dallen $ */
-// {{{ license
-
-/*
- * Copyright 2002-2005 Dan Allen, Mojavelinux.com (dan.allen@mojavelinux.com)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// }}}
-// {{{ intro
-
-/**
- * Title: DOM Library Core
- * Version: 0.70
- *
- * Summary:
- * A set of commonly used functions that make it easier to create javascript
- * applications that rely on the DOM.
- *
- * Updated: 2005/05/17
- *
- * Maintainer: Dan Allen <dan.allen@mojavelinux.com>
- * Maintainer: Jason Rust <jrust@rustyparts.com>
- *
- * License: Apache 2.0
- */
-
-// }}}
-// {{{ global constants (DO NOT EDIT)
-
-// -- Browser Detection --
-var domLib_userAgent = navigator.userAgent.toLowerCase();
-var domLib_isMac = navigator.appVersion.indexOf('Mac') != -1;
-var domLib_isWin = domLib_userAgent.indexOf('windows') != -1;
-// NOTE: could use window.opera for detecting Opera
-var domLib_isOpera = domLib_userAgent.indexOf('opera') != -1;
-var domLib_isOpera7up = domLib_userAgent.match(/opera.(7|8)/i);
-var domLib_isSafari = domLib_userAgent.indexOf('safari') != -1;
-var domLib_isKonq = domLib_userAgent.indexOf('konqueror') != -1;
-// Both konqueror and safari use the khtml rendering engine
-var domLib_isKHTML = (domLib_isKonq || domLib_isSafari || domLib_userAgent.indexOf('khtml') != -1);
-var domLib_isIE = (!domLib_isKHTML && !domLib_isOpera && (domLib_userAgent.indexOf('msie 5') != -1 || domLib_userAgent.indexOf('msie 6') != -1 || domLib_userAgent.indexOf('msie 7') != -1 || domLib_userAgent.indexOf('msie 8') != -1));
-var domLib_isIE5up = domLib_isIE;
-var domLib_isIE50 = (domLib_isIE && domLib_userAgent.indexOf('msie 5.0') != -1);
-var domLib_isIE55 = (domLib_isIE && domLib_userAgent.indexOf('msie 5.5') != -1);
-var domLib_isIE5 = (domLib_isIE50 || domLib_isIE55);
-// safari and konq may use string "khtml, like gecko", so check for destinctive /
-var domLib_isGecko = domLib_userAgent.indexOf('gecko/') != -1;
-var domLib_isMacIE = (domLib_isIE && domLib_isMac);
-var domLib_isIE55up = domLib_isIE5up && !domLib_isIE50 && !domLib_isMacIE;
-var domLib_isIE6up = domLib_isIE55up && !domLib_isIE55;
-
-// -- Browser Abilities --
-var domLib_standardsMode = (document.compatMode && document.compatMode == 'CSS1Compat');
-var domLib_useLibrary = (domLib_isOpera7up || domLib_isKHTML || domLib_isIE5up || domLib_isGecko || domLib_isMacIE || document.defaultView);
-// fixed in Konq3.2
-var domLib_hasBrokenTimeout = (domLib_isMacIE || (domLib_isKonq && domLib_userAgent.match(/konqueror\/3.([2-9])/) == null));
-var domLib_canFade = (domLib_isGecko || domLib_isIE || domLib_isSafari || domLib_isOpera);
-var domLib_canDrawOverSelect = (domLib_isMac || domLib_isOpera || domLib_isGecko);
-var domLib_canDrawOverFlash = (domLib_isMac || domLib_isWin);
-
-// -- Event Variables --
-var domLib_eventTarget = domLib_isIE ? 'srcElement' : 'currentTarget';
-var domLib_eventButton = domLib_isIE ? 'button' : 'which';
-var domLib_eventTo = domLib_isIE ? 'toElement' : 'relatedTarget';
-var domLib_stylePointer = domLib_isIE ? 'hand' : 'pointer';
-// NOTE: a bug exists in Opera that prevents maxWidth from being set to 'none', so we make it huge
-var domLib_styleNoMaxWidth = domLib_isOpera ? '10000px' : 'none';
-var domLib_hidePosition = '-1000px';
-var domLib_scrollbarWidth = 14;
-var domLib_autoId = 1;
-var domLib_zIndex = 1010;
-
-// -- Detection --
-var domLib_collisionElements;
-var domLib_collisionsCached = false;
-
-var domLib_timeoutStateId = 0;
-var domLib_timeoutStates = new domTT_Hash();
-
-// }}}
-// {{{ DOM enhancements
-
-if (!document.ELEMENT_NODE)
-{
- document.ELEMENT_NODE = 1;
- document.ATTRIBUTE_NODE = 2;
- document.TEXT_NODE = 3;
- document.DOCUMENT_NODE = 9;
- document.DOCUMENT_FRAGMENT_NODE = 11;
-}
-
-function domLib_clone(obj)
-{
- var copy = {};
- for (var i in obj)
- {
- var value = obj[i];
- try
- {
- if (value != null && typeof(value) == 'object' && value != window && !value.nodeType)
- {
- copy[i] = domLib_clone(value);
- }
- else
- {
- copy[i] = value;
- }
- }
- catch(e)
- {
- copy[i] = value;
- }
- }
-
- return copy;
-}
-
-// }}}
-// {{{ class domTT_Hash()
-
-function domTT_Hash()
-{
- this.length = 0;
- this.numericLength = 0;
- this.elementData = [];
- for (var i = 0; i < arguments.length; i += 2)
- {
- if (typeof(arguments[i + 1]) != 'undefined')
- {
- this.elementData[arguments[i]] = arguments[i + 1];
- this.length++;
- if (arguments[i] == parseInt(arguments[i]))
- {
- this.numericLength++;
- }
- }
- }
-}
-
-// using prototype as opposed to inner functions saves on memory
-domTT_Hash.prototype.get = function(in_key)
-{
- if (typeof(this.elementData[in_key]) != 'undefined') {
- return this.elementData[in_key];
- }
-
- return null;
-};
-
-domTT_Hash.prototype.set = function(in_key, in_value)
-{
- if (typeof(in_value) != 'undefined')
- {
- if (typeof(this.elementData[in_key]) == 'undefined')
- {
- this.length++;
- if (in_key == parseInt(in_key))
- {
- this.numericLength++;
- }
- }
-
- return this.elementData[in_key] = in_value;
- }
-
- return false;
-};
-
-domTT_Hash.prototype.remove = function(in_key)
-{
- var tmp_value;
- if (typeof(this.elementData[in_key]) != 'undefined')
- {
- this.length--;
- if (in_key == parseInt(in_key))
- {
- this.numericLength--;
- }
-
- tmp_value = this.elementData[in_key];
- delete this.elementData[in_key];
- }
-
- return tmp_value;
-};
-
-domTT_Hash.prototype.size = function()
-{
- return this.length;
-};
-
-domTT_Hash.prototype.has = function(in_key)
-{
- return typeof(this.elementData[in_key]) != 'undefined';
-};
-
-domTT_Hash.prototype.find = function(in_obj)
-{
- for (var tmp_key in this.elementData)
- {
- if (this.elementData[tmp_key] == in_obj)
- {
- return tmp_key;
- }
- }
-
- return null;
-};
-
-domTT_Hash.prototype.merge = function(in_hash)
-{
- for (var tmp_key in in_hash.elementData)
- {
- if (typeof(this.elementData[tmp_key]) == 'undefined')
- {
- this.length++;
- if (tmp_key == parseInt(tmp_key))
- {
- this.numericLength++;
- }
- }
-
- this.elementData[tmp_key] = in_hash.elementData[tmp_key];
- }
-};
-
-domTT_Hash.prototype.compare = function(in_hash)
-{
- if (this.length != in_hash.length)
- {
- return false;
- }
-
- for (var tmp_key in this.elementData)
- {
- if (this.elementData[tmp_key] != in_hash.elementData[tmp_key])
- {
- return false;
- }
- }
-
- return true;
-};
-
-// }}}
-// {{{ domLib_isDescendantOf()
-
-function domLib_isDescendantOf(in_object, in_ancestor, in_bannedTags)
-{
- if (in_object == null)
- {
- return false;
- }
-
- if (in_object == in_ancestor)
- {
- return true;
- }
-
- if (typeof(in_bannedTags) != 'undefined' &&
- (',' + in_bannedTags.join(',') + ',').indexOf(',' + in_object.tagName + ',') != -1)
- {
- return false;
- }
-
- while (in_object != document.documentElement)
- {
- try
- {
- if ((tmp_object = in_object.offsetParent) && tmp_object == in_ancestor)
- {
- return true;
- }
- else if ((tmp_object = in_object.parentNode) == in_ancestor)
- {
- return true;
- }
- else
- {
- in_object = tmp_object;
- }
- }
- // in case we get some wierd error, assume we left the building
- catch(e)
- {
- return false;
- }
- }
-
- return false;
-}
-
-// }}}
-// {{{ domLib_detectCollisions()
-
-/**
- * For any given target element, determine if elements on the page
- * are colliding with it that do not obey the rules of z-index.
- */
-function domLib_detectCollisions(in_object, in_recover, in_useCache)
-{
- // the reason for the cache is that if the root menu is built before
- // the page is done loading, then it might not find all the elements.
- // so really the only time you don't use cache is when building the
- // menu as part of the page load
- if (!domLib_collisionsCached)
- {
- var tags = [];
-
- if (!domLib_canDrawOverFlash)
- {
- tags[tags.length] = 'object';
- }
-
- if (!domLib_canDrawOverSelect)
- {
- tags[tags.length] = 'select';
- }
-
- domLib_collisionElements = domLib_getElementsByTagNames(tags, true);
- domLib_collisionsCached = in_useCache;
- }
-
- // if we don't have a tip, then unhide selects
- if (in_recover)
- {
- for (var cnt = 0; cnt < domLib_collisionElements.length; cnt++)
- {
- var thisElement = domLib_collisionElements[cnt];
-
- if (!thisElement.hideList)
- {
- thisElement.hideList = new domTT_Hash();
- }
-
- thisElement.hideList.remove(in_object.id);
- if (!thisElement.hideList.length)
- {
- domLib_collisionElements[cnt].style.visibility = 'visible';
- if (domLib_isKonq)
- {
- domLib_collisionElements[cnt].style.display = '';
- }
- }
- }
-
- return;
- }
- else if (domLib_collisionElements.length == 0)
- {
- return;
- }
-
- // okay, we have a tip, so hunt and destroy
- var objectOffsets = domLib_getOffsets(in_object);
-
- for (var cnt = 0; cnt < domLib_collisionElements.length; cnt++)
- {
- var thisElement = domLib_collisionElements[cnt];
-
- // if collision element is in active element, move on
- // WARNING: is this too costly?
- if (domLib_isDescendantOf(thisElement, in_object))
- {
- continue;
- }
-
- // konqueror only has trouble with multirow selects
- if (domLib_isKonq &&
- thisElement.tagName == 'SELECT' &&
- (thisElement.size <= 1 && !thisElement.multiple))
- {
- continue;
- }
-
- if (!thisElement.hideList)
- {
- thisElement.hideList = new domTT_Hash();
- }
-
- var selectOffsets = domLib_getOffsets(thisElement);
- var center2centerDistance = Math.sqrt(Math.pow(selectOffsets.get('leftCenter') - objectOffsets.get('leftCenter'), 2) + Math.pow(selectOffsets.get('topCenter') - objectOffsets.get('topCenter'), 2));
- var radiusSum = selectOffsets.get('radius') + objectOffsets.get('radius');
- // the encompassing circles are overlapping, get in for a closer look
- if (center2centerDistance < radiusSum)
- {
- // tip is left of select
- if ((objectOffsets.get('leftCenter') <= selectOffsets.get('leftCenter') && objectOffsets.get('right') < selectOffsets.get('left')) ||
- // tip is right of select
- (objectOffsets.get('leftCenter') > selectOffsets.get('leftCenter') && objectOffsets.get('left') > selectOffsets.get('right')) ||
- // tip is above select
- (objectOffsets.get('topCenter') <= selectOffsets.get('topCenter') && objectOffsets.get('bottom') < selectOffsets.get('top')) ||
- // tip is below select
- (objectOffsets.get('topCenter') > selectOffsets.get('topCenter') && objectOffsets.get('top') > selectOffsets.get('bottom')))
- {
- thisElement.hideList.remove(in_object.id);
- if (!thisElement.hideList.length)
- {
- thisElement.style.visibility = 'visible';
- if (domLib_isKonq)
- {
- thisElement.style.display = '';
- }
- }
- }
- else
- {
- thisElement.hideList.set(in_object.id, true);
- thisElement.style.visibility = 'hidden';
- if (domLib_isKonq)
- {
- thisElement.style.display = 'none';
- }
- }
- }
- }
-}
-
-// }}}
-// {{{ domLib_getOffsets()
-
-function domLib_getOffsets(in_object, in_preserveScroll)
-{
- if (typeof(in_preserveScroll) == 'undefined') {
- in_preserveScroll = false;
- }
-
- var originalObject = in_object;
- var originalWidth = in_object.offsetWidth;
- var originalHeight = in_object.offsetHeight;
- var offsetLeft = 0;
- var offsetTop = 0;
-
- while (in_object)
- {
- offsetLeft += in_object.offsetLeft;
- offsetTop += in_object.offsetTop;
- in_object = in_object.offsetParent;
- // consider scroll offset of parent elements
- if (in_object && !in_preserveScroll)
- {
- offsetLeft -= in_object.scrollLeft;
- offsetTop -= in_object.scrollTop;
- }
- }
-
- // MacIE misreports the offsets (even with margin: 0 in body{}), still not perfect
- if (domLib_isMacIE) {
- offsetLeft += 10;
- offsetTop += 10;
- }
-
- return new domTT_Hash(
- 'left', offsetLeft,
- 'top', offsetTop,
- 'right', offsetLeft + originalWidth,
- 'bottom', offsetTop + originalHeight,
- 'leftCenter', offsetLeft + originalWidth/2,
- 'topCenter', offsetTop + originalHeight/2,
- 'radius', Math.max(originalWidth, originalHeight)
- );
-}
-
-// }}}
-// {{{ domLib_setTimeout()
-
-function domLib_setTimeout(in_function, in_timeout, in_args)
-{
- if (typeof(in_args) == 'undefined')
- {
- in_args = [];
- }
-
- if (in_timeout == -1)
- {
- // timeout event is disabled
- return 0;
- }
- else if (in_timeout == 0)
- {
- in_function(in_args);
- return 0;
- }
-
- // must make a copy of the arguments so that we release the reference
- var args = domLib_clone(in_args);
-
- if (!domLib_hasBrokenTimeout)
- {
- return setTimeout(function() { in_function(args); }, in_timeout);
- }
- else
- {
- var id = domLib_timeoutStateId++;
- var data = new domTT_Hash();
- data.set('function', in_function);
- data.set('args', args);
- domLib_timeoutStates.set(id, data);
-
- data.set('timeoutId', setTimeout('domLib_timeoutStates.get(' + id + ').get(\'function\')(domLib_timeoutStates.get(' + id + ').get(\'args\')); domLib_timeoutStates.remove(' + id + ');', in_timeout));
- return id;
- }
-}
-
-// }}}
-// {{{ domLib_clearTimeout()
-
-function domLib_clearTimeout(in_id)
-{
- if (!domLib_hasBrokenTimeout)
- {
- if (in_id > 0) {
- clearTimeout(in_id);
- }
- }
- else
- {
- if (domLib_timeoutStates.has(in_id))
- {
- clearTimeout(domLib_timeoutStates.get(in_id).get('timeoutId'));
- domLib_timeoutStates.remove(in_id);
- }
- }
-}
-
-// }}}
-// {{{ domLib_getEventPosition()
-
-function domLib_getEventPosition(in_eventObj)
-{
- var eventPosition = new domTT_Hash('x', 0, 'y', 0, 'scrollX', 0, 'scrollY', 0);
-
- // IE varies depending on standard compliance mode
- if (domLib_isIE)
- {
- var doc = (domLib_standardsMode ? document.documentElement : document.body);
- // NOTE: events may fire before the body has been loaded
- if (doc)
- {
- eventPosition.set('x', in_eventObj.clientX + doc.scrollLeft);
- eventPosition.set('y', in_eventObj.clientY + doc.scrollTop);
- eventPosition.set('scrollX', doc.scrollLeft);
- eventPosition.set('scrollY', doc.scrollTop);
- }
- }
- else
- {
- eventPosition.set('x', in_eventObj.pageX);
- eventPosition.set('y', in_eventObj.pageY);
- eventPosition.set('scrollX', in_eventObj.pageX - in_eventObj.clientX);
- eventPosition.set('scrollY', in_eventObj.pageY - in_eventObj.clientY);
- }
-
- return eventPosition;
-}
-
-// }}}
-// {{{ domLib_cancelBubble()
-
-function domLib_cancelBubble(in_event)
-{
- var eventObj = in_event ? in_event : window.event;
- eventObj.cancelBubble = true;
-}
-
-// }}}
-// {{{ domLib_getIFrameReference()
-
-function domLib_getIFrameReference(in_frame)
-{
- if (domLib_isGecko || domLib_isIE)
- {
- return in_frame.frameElement;
- }
- else
- {
- // we could either do it this way or require an id on the frame
- // equivalent to the name
- var name = in_frame.name;
- if (!name || !in_frame.parent)
- {
- return null;
- }
-
- var candidates = in_frame.parent.document.getElementsByTagName('iframe');
- for (var i = 0; i < candidates.length; i++)
- {
- if (candidates[i].name == name)
- {
- return candidates[i];
- }
- }
-
- return null;
- }
-}
-
-// }}}
-// {{{ domLib_getElementsByClass()
-
-function domLib_getElementsByClass(in_class)
-{
- var elements = domLib_isIE5 ? document.all : document.getElementsByTagName('*');
- var matches = [];
- var cnt = 0;
- for (var i = 0; i < elements.length; i++)
- {
- if ((" " + elements[i].className + " ").indexOf(" " + in_class + " ") != -1)
- {
- matches[cnt++] = elements[i];
- }
- }
-
- return matches;
-}
-
-// }}}
-// {{{ domLib_getElementsByTagNames()
-
-function domLib_getElementsByTagNames(in_list, in_excludeHidden)
-{
- var elements = [];
- for (var i = 0; i < in_list.length; i++)
- {
- var matches = document.getElementsByTagName(in_list[i]);
- for (var j = 0; j < matches.length; j++)
- {
- // skip objects that have nested embeds, or else we get "flashing"
- if (matches[j].tagName == 'OBJECT' && domLib_isGecko)
- {
- var kids = matches[j].childNodes;
- var skip = false;
- for (var k = 0; k < kids.length; k++)
- {
- if (kids[k].tagName == 'EMBED')
- {
- skip = true;
- break;
- }
- }
- if (skip) continue;
- }
-
- if (in_excludeHidden && domLib_getComputedStyle(matches[j], 'visibility') == 'hidden')
- {
- continue;
- }
-
- elements[elements.length] = matches[j];
- }
- }
-
- return elements;
-}
-
-// }}}
-// {{{ domLib_getComputedStyle()
-
-function domLib_getComputedStyle(in_obj, in_property)
-{
- if (domLib_isIE)
- {
- var humpBackProp = in_property.replace(/-(.)/, function (a, b) { return b.toUpperCase(); });
- return eval('in_obj.currentStyle.' + humpBackProp);
- }
- // getComputedStyle() is broken in konqueror, so let's go for the style object
- else if (domLib_isKonq)
- {
- //var humpBackProp = in_property.replace(/-(.)/, function (a, b) { return b.toUpperCase(); });
- return eval('in_obj.style.' + in_property);
- }
- else
- {
- return document.defaultView.getComputedStyle(in_obj, null).getPropertyValue(in_property);
- }
-}
-
-// }}}
-// {{{ makeTrue()
-
-function makeTrue()
-{
- return true;
-}
-
-// }}}
-// {{{ makeFalse()
-
-function makeFalse()
-{
- return false;
-}
-
-// }}}
diff --git a/usr/local/www/javascript/domTT/domTT.js b/usr/local/www/javascript/domTT/domTT.js
deleted file mode 100644
index fc9bf6a..0000000
--- a/usr/local/www/javascript/domTT/domTT.js
+++ /dev/null
@@ -1,1132 +0,0 @@
-/** $Id: domTT.js 2324 2006-06-12 07:06:39Z dallen $ */
-// {{{ license
-
-/*
- * Copyright 2002-2005 Dan Allen, Mojavelinux.com (dan.allen@mojavelinux.com)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// }}}
-// {{{ intro
-
-/**
- * Title: DOM Tooltip Library
- * Version: 0.7.3
- *
- * Summary:
- * Allows developers to add custom tooltips to the webpages. Tooltips are
- * generated using the domTT_activate() function and customized by setting
- * a handful of options.
- *
- * Maintainer: Dan Allen <dan.allen@mojavelinux.com>
- * Contributors:
- * Josh Gross <josh@jportalhome.com>
- * Jason Rust <jason@rustyparts.com>
- *
- * License: Apache 2.0
- * However, if you use this library, you earn the position of official bug
- * reporter :) Please post questions or problem reports to the newsgroup:
- *
- * http://groups-beta.google.com/group/dom-tooltip
- *
- * If you are doing this for commercial work, perhaps you could send me a few
- * Starbucks Coffee gift dollars or PayPal bucks to encourage future
- * developement (NOT REQUIRED). E-mail me for my snail mail address.
-
- *
- * Homepage: http://www.mojavelinux.com/projects/domtooltip/
- *
- * Newsgroup: http://groups-beta.google.com/group/dom-tooltip
- *
- * Freshmeat Project: http://freshmeat.net/projects/domtt/?topic_id=92
- *
- * Updated: 2005/07/16
- *
- * Supported Browsers:
- * Mozilla (Gecko), IE 5.5+, IE on Mac, Safari, Konqueror, Opera 7
- *
- * Usage:
- * Please see the HOWTO documentation.
-**/
-
-// }}}
-// {{{ settings (editable)
-
-// IE mouse events seem to be off by 2 pixels
-var domTT_offsetX = (domLib_isIE ? -2 : 0);
-var domTT_offsetY = (domLib_isIE ? 4 : 2);
-var domTT_direction = 'southeast';
-var domTT_mouseHeight = domLib_isIE ? 13 : 19;
-var domTT_closeLink = 'X';
-var domTT_closeAction = 'hide';
-var domTT_activateDelay = 500;
-var domTT_maxWidth = false;
-var domTT_styleClass = 'domTT';
-var domTT_fade = 'neither';
-var domTT_lifetime = 0;
-var domTT_grid = 0;
-var domTT_trailDelay = 200;
-var domTT_useGlobalMousePosition = true;
-var domTT_postponeActivation = false;
-var domTT_tooltipIdPrefix = '[domTT]';
-var domTT_screenEdgeDetection = true;
-var domTT_screenEdgePadding = 4;
-var domTT_oneOnly = false;
-var domTT_cloneNodes = false;
-var domTT_detectCollisions = true;
-var domTT_bannedTags = ['OPTION'];
-var domTT_draggable = false;
-if (typeof(domTT_dragEnabled) == 'undefined')
-{
- domTT_dragEnabled = false;
-}
-
-// }}}
-// {{{ globals (DO NOT EDIT)
-
-var domTT_predefined = new domTT_Hash();
-// tooltips are keyed on both the tip id and the owner id,
-// since events can originate on either object
-var domTT_tooltips = new domTT_Hash();
-var domTT_lastOpened = 0;
-var domTT_documentLoaded = false;
-var domTT_mousePosition = null;
-
-// }}}
-// {{{ document.onmousemove
-
-if (domLib_useLibrary && domTT_useGlobalMousePosition)
-{
- document.onmousemove = function(in_event)
- {
- if (typeof(in_event) == 'undefined') { in_event = window.event; }
-
- domTT_mousePosition = domLib_getEventPosition(in_event);
- if (domTT_dragEnabled && domTT_dragMouseDown)
- {
- domTT_dragUpdate(in_event);
- }
- };
-}
-
-// }}}
-// {{{ domTT_activate()
-
-function domTT_activate(in_this, in_event)
-{
- if (!domLib_useLibrary || (domTT_postponeActivation && !domTT_documentLoaded)) { return false; }
-
- // make sure in_event is set (for IE, some cases we have to use window.event)
- if (typeof(in_event) == 'undefined') { in_event = window.event; }
-
- // don't allow tooltips on banned tags (such as OPTION)
- if (in_event != null) {
- var target = in_event.srcElement ? in_event.srcElement : in_event.target;
- if (target != null && (',' + domTT_bannedTags.join(',') + ',').indexOf(',' + target.tagName + ',') != -1)
- {
- return false;
- }
- }
-
- var owner = document.body;
- // we have an active event so get the owner
- if (in_event != null && in_event.type.match(/key|mouse|click|contextmenu/i))
- {
- // make sure we have nothing higher than the body element
- if (in_this.nodeType && in_this.nodeType != document.DOCUMENT_NODE)
- {
- owner = in_this;
- }
- }
- // non active event (make sure we were passed a string id)
- else
- {
- if (typeof(in_this) != 'object' && !(owner = domTT_tooltips.get(in_this)))
- {
- // NOTE: two steps to avoid "flashing" in gecko
- var embryo = document.createElement('div');
- owner = document.body.appendChild(embryo);
- owner.style.display = 'none';
- owner.id = in_this;
- }
- }
-
- // make sure the owner has a unique id
- if (!owner.id)
- {
- owner.id = '__autoId' + domLib_autoId++;
- }
-
- // see if we should only be opening one tip at a time
- // NOTE: this is not "perfect" yet since it really steps on any other
- // tip working on fade out or delayed close, but it get's the job done
- if (domTT_oneOnly && domTT_lastOpened)
- {
- domTT_deactivate(domTT_lastOpened);
- }
-
- domTT_lastOpened = owner.id;
-
- var tooltip = domTT_tooltips.get(owner.id);
- if (tooltip)
- {
- if (tooltip.get('eventType') != in_event.type)
- {
- if (tooltip.get('type') == 'greasy')
- {
- tooltip.set('closeAction', 'destroy');
- domTT_deactivate(owner.id);
- }
- else if (tooltip.get('status') != 'inactive')
- {
- return owner.id;
- }
- }
- else
- {
- if (tooltip.get('status') == 'inactive')
- {
- tooltip.set('status', 'pending');
- tooltip.set('activateTimeout', domLib_setTimeout(domTT_runShow, tooltip.get('delay'), [owner.id, in_event]));
-
- return owner.id;
- }
- // either pending or active, let it be
- else
- {
- return owner.id;
- }
- }
- }
-
- // setup the default options hash
- var options = new domTT_Hash(
- 'caption', '',
- 'content', '',
- 'clearMouse', true,
- 'closeAction', domTT_closeAction,
- 'closeLink', domTT_closeLink,
- 'delay', domTT_activateDelay,
- 'direction', domTT_direction,
- 'draggable', domTT_draggable,
- 'fade', domTT_fade,
- 'fadeMax', 100,
- 'grid', domTT_grid,
- 'id', domTT_tooltipIdPrefix + owner.id,
- 'inframe', false,
- 'lifetime', domTT_lifetime,
- 'offsetX', domTT_offsetX,
- 'offsetY', domTT_offsetY,
- 'parent', document.body,
- 'position', 'absolute',
- 'styleClass', domTT_styleClass,
- 'type', 'greasy',
- 'trail', false,
- 'lazy', false
- );
-
- // load in the options from the function call
- for (var i = 2; i < arguments.length; i += 2)
- {
- // load in predefined
- if (arguments[i] == 'predefined')
- {
- var predefinedOptions = domTT_predefined.get(arguments[i + 1]);
- for (var j in predefinedOptions.elementData)
- {
- options.set(j, predefinedOptions.get(j));
- }
- }
- // set option
- else
- {
- options.set(arguments[i], arguments[i + 1]);
- }
- }
-
- options.set('eventType', in_event != null ? in_event.type : null);
-
- // immediately set the status text if provided
- if (options.has('statusText'))
- {
- try { window.status = options.get('statusText'); } catch(e) {}
- }
-
- // if we didn't give content...assume we just wanted to change the status and return
- if (!options.has('content') || options.get('content') == '' || options.get('content') == null)
- {
- if (typeof(owner.onmouseout) != 'function')
- {
- owner.onmouseout = function(in_event) { domTT_mouseout(this, in_event); };
- }
-
- return owner.id;
- }
-
- options.set('owner', owner);
-
- domTT_create(options);
-
- // determine the show delay
- options.set('delay', (in_event != null && in_event.type.match(/click|mousedown|contextmenu/i)) ? 0 : parseInt(options.get('delay')));
- domTT_tooltips.set(owner.id, options);
- domTT_tooltips.set(options.get('id'), options);
- options.set('status', 'pending');
- options.set('activateTimeout', domLib_setTimeout(domTT_runShow, options.get('delay'), [owner.id, in_event]));
-
- return owner.id;
-}
-
-// }}}
-// {{{ domTT_create()
-
-function domTT_create(in_options)
-{
- var tipOwner = in_options.get('owner');
- var parentObj = in_options.get('parent');
- var parentDoc = parentObj.ownerDocument || parentObj.document;
-
- // create the tooltip and hide it
- // NOTE: two steps to avoid "flashing" in gecko
- var embryo = parentDoc.createElement('div');
- var tipObj = parentObj.appendChild(embryo);
- tipObj.style.position = 'absolute';
- tipObj.style.left = '0px';
- tipObj.style.top = '0px';
- tipObj.style.visibility = 'hidden';
- tipObj.id = in_options.get('id');
- tipObj.className = in_options.get('styleClass');
-
- var contentBlock;
- var tableLayout = false;
-
- if (in_options.get('caption') || (in_options.get('type') == 'sticky' && in_options.get('caption') !== false))
- {
- tableLayout = true;
- // layout the tip with a hidden formatting table
- var tipLayoutTable = tipObj.appendChild(parentDoc.createElement('table'));
- tipLayoutTable.style.borderCollapse = 'collapse';
- if (domLib_isKHTML)
- {
- tipLayoutTable.cellSpacing = 0;
- }
-
- var tipLayoutTbody = tipLayoutTable.appendChild(parentDoc.createElement('tbody'));
-
- var numCaptionCells = 0;
- var captionRow = tipLayoutTbody.appendChild(parentDoc.createElement('tr'));
- var captionCell = captionRow.appendChild(parentDoc.createElement('td'));
- captionCell.style.padding = '0px';
- var caption = captionCell.appendChild(parentDoc.createElement('div'));
- caption.className = 'caption';
- if (domLib_isIE50)
- {
- caption.style.height = '100%';
- }
-
- if (in_options.get('caption').nodeType)
- {
- caption.appendChild(domTT_cloneNodes ? in_options.get('caption').cloneNode(1) : in_options.get('caption'));
- }
- else
- {
- caption.innerHTML = in_options.get('caption');
- }
-
- if (in_options.get('type') == 'sticky')
- {
- var numCaptionCells = 2;
- var closeLinkCell = captionRow.appendChild(parentDoc.createElement('td'));
- closeLinkCell.style.padding = '0px';
- var closeLink = closeLinkCell.appendChild(parentDoc.createElement('div'));
- closeLink.className = 'caption';
- if (domLib_isIE50)
- {
- closeLink.style.height = '100%';
- }
-
- closeLink.style.textAlign = 'right';
- closeLink.style.cursor = domLib_stylePointer;
- // merge the styles of the two cells
- closeLink.style.borderLeftWidth = caption.style.borderRightWidth = '0px';
- closeLink.style.paddingLeft = caption.style.paddingRight = '0px';
- closeLink.style.marginLeft = caption.style.marginRight = '0px';
- if (in_options.get('closeLink').nodeType)
- {
- closeLink.appendChild(in_options.get('closeLink').cloneNode(1));
- }
- else
- {
- closeLink.innerHTML = in_options.get('closeLink');
- }
-
- closeLink.onclick = function()
- {
- domTT_deactivate(tipOwner.id);
- };
- closeLink.onmousedown = function(in_event)
- {
- if (typeof(in_event) == 'undefined') { in_event = window.event; }
- in_event.cancelBubble = true;
- };
- // MacIE has to have a newline at the end and must be made with createTextNode()
- if (domLib_isMacIE)
- {
- closeLinkCell.appendChild(parentDoc.createTextNode("\n"));
- }
- }
-
- // MacIE has to have a newline at the end and must be made with createTextNode()
- if (domLib_isMacIE)
- {
- captionCell.appendChild(parentDoc.createTextNode("\n"));
- }
-
- var contentRow = tipLayoutTbody.appendChild(parentDoc.createElement('tr'));
- var contentCell = contentRow.appendChild(parentDoc.createElement('td'));
- contentCell.style.padding = '0px';
- if (numCaptionCells)
- {
- if (domLib_isIE || domLib_isOpera)
- {
- contentCell.colSpan = numCaptionCells;
- }
- else
- {
- contentCell.setAttribute('colspan', numCaptionCells);
- }
- }
-
- contentBlock = contentCell.appendChild(parentDoc.createElement('div'));
- if (domLib_isIE50)
- {
- contentBlock.style.height = '100%';
- }
- }
- else
- {
- contentBlock = tipObj.appendChild(parentDoc.createElement('div'));
- }
-
- contentBlock.className = 'contents';
-
- var content = in_options.get('content');
- // allow content has a function to return the actual content
- if (typeof(content) == 'function') {
- content = content(in_options.get('id'));
- }
-
- if (content != null && content.nodeType)
- {
- contentBlock.appendChild(domTT_cloneNodes ? content.cloneNode(1) : content);
- }
- else
- {
- contentBlock.innerHTML = content;
- }
-
- // adjust the width if specified
- if (in_options.has('width'))
- {
- tipObj.style.width = parseInt(in_options.get('width')) + 'px';
- }
-
- // check if we are overridding the maxWidth
- // if the browser supports maxWidth, the global setting will be ignored (assume stylesheet)
- var maxWidth = domTT_maxWidth;
- if (in_options.has('maxWidth'))
- {
- if ((maxWidth = in_options.get('maxWidth')) === false)
- {
- tipObj.style.maxWidth = domLib_styleNoMaxWidth;
- }
- else
- {
- maxWidth = parseInt(in_options.get('maxWidth'));
- tipObj.style.maxWidth = maxWidth + 'px';
- }
- }
-
- // HACK: fix lack of maxWidth in CSS for KHTML and IE
- if (maxWidth !== false && (domLib_isIE || domLib_isKHTML) && tipObj.offsetWidth > maxWidth)
- {
- tipObj.style.width = maxWidth + 'px';
- }
-
- in_options.set('offsetWidth', tipObj.offsetWidth);
- in_options.set('offsetHeight', tipObj.offsetHeight);
-
- // konqueror miscalcuates the width of the containing div when using the layout table based on the
- // border size of the containing div
- if (domLib_isKonq && tableLayout && !tipObj.style.width)
- {
- var left = document.defaultView.getComputedStyle(tipObj, '').getPropertyValue('border-left-width');
- var right = document.defaultView.getComputedStyle(tipObj, '').getPropertyValue('border-right-width');
-
- left = left.substring(left.indexOf(':') + 2, left.indexOf(';'));
- right = right.substring(right.indexOf(':') + 2, right.indexOf(';'));
- var correction = 2 * ((left ? parseInt(left) : 0) + (right ? parseInt(right) : 0));
- tipObj.style.width = (tipObj.offsetWidth - correction) + 'px';
- }
-
- // if a width is not set on an absolutely positioned object, both IE and Opera
- // will attempt to wrap when it spills outside of body...we cannot have that
- if (domLib_isIE || domLib_isOpera)
- {
- if (!tipObj.style.width)
- {
- // HACK: the correction here is for a border
- tipObj.style.width = (tipObj.offsetWidth - 2) + 'px';
- }
-
- // HACK: the correction here is for a border
- tipObj.style.height = (tipObj.offsetHeight - 2) + 'px';
- }
-
- // store placement offsets from event position
- var offsetX, offsetY;
-
- // tooltip floats
- if (in_options.get('position') == 'absolute' && !(in_options.has('x') && in_options.has('y')))
- {
- // determine the offset relative to the pointer
- switch (in_options.get('direction'))
- {
- case 'northeast':
- offsetX = in_options.get('offsetX');
- offsetY = 0 - tipObj.offsetHeight - in_options.get('offsetY');
- break;
- case 'northwest':
- offsetX = 0 - tipObj.offsetWidth - in_options.get('offsetX');
- offsetY = 0 - tipObj.offsetHeight - in_options.get('offsetY');
- break;
- case 'north':
- offsetX = 0 - parseInt(tipObj.offsetWidth/2);
- offsetY = 0 - tipObj.offsetHeight - in_options.get('offsetY');
- break;
- case 'southwest':
- offsetX = 0 - tipObj.offsetWidth - in_options.get('offsetX');
- offsetY = in_options.get('offsetY');
- break;
- case 'southeast':
- offsetX = in_options.get('offsetX');
- offsetY = in_options.get('offsetY');
- break;
- case 'south':
- offsetX = 0 - parseInt(tipObj.offsetWidth/2);
- offsetY = in_options.get('offsetY');
- break;
- }
-
- // if we are in an iframe, get the offsets of the iframe in the parent document
- if (in_options.get('inframe'))
- {
- var iframeObj = domLib_getIFrameReference(window);
- if (iframeObj)
- {
- var frameOffsets = domLib_getOffsets(iframeObj);
- offsetX += frameOffsets.get('left');
- offsetY += frameOffsets.get('top');
- }
- }
- }
- // tooltip is fixed
- else
- {
- offsetX = 0;
- offsetY = 0;
- in_options.set('trail', false);
- }
-
- // set the direction-specific offsetX/Y
- in_options.set('offsetX', offsetX);
- in_options.set('offsetY', offsetY);
- if (in_options.get('clearMouse') && in_options.get('direction').indexOf('south') != -1)
- {
- in_options.set('mouseOffset', domTT_mouseHeight);
- }
- else
- {
- in_options.set('mouseOffset', 0);
- }
-
- if (domLib_canFade && typeof(Fadomatic) == 'function')
- {
- if (in_options.get('fade') != 'neither')
- {
- var fadeHandler = new Fadomatic(tipObj, 10, 0, 0, in_options.get('fadeMax'));
- in_options.set('fadeHandler', fadeHandler);
- }
- }
- else
- {
- in_options.set('fade', 'neither');
- }
-
- // setup mouse events
- if (in_options.get('trail') && typeof(tipOwner.onmousemove) != 'function')
- {
- tipOwner.onmousemove = function(in_event) { domTT_mousemove(this, in_event); };
- }
-
- if (typeof(tipOwner.onmouseout) != 'function')
- {
- tipOwner.onmouseout = function(in_event) { domTT_mouseout(this, in_event); };
- }
-
- if (in_options.get('type') == 'sticky')
- {
- if (in_options.get('position') == 'absolute' && domTT_dragEnabled && in_options.get('draggable'))
- {
- if (domLib_isIE)
- {
- captionRow.onselectstart = function() { return false; };
- }
-
- // setup drag
- captionRow.onmousedown = function(in_event) { domTT_dragStart(tipObj, in_event); };
- captionRow.onmousemove = function(in_event) { domTT_dragUpdate(in_event); };
- captionRow.onmouseup = function() { domTT_dragStop(); };
- }
- }
- else if (in_options.get('type') == 'velcro')
- {
- /* can use once we have deactivateDelay
- tipObj.onmouseover = function(in_event)
- {
- if (typeof(in_event) == 'undefined') { in_event = window.event; }
- var tooltip = domTT_tooltips.get(tipObj.id);
- if (in_options.get('lifetime')) {
- domLib_clearTimeout(in_options.get('lifetimeTimeout');
- }
- };
- */
- tipObj.onmouseout = function(in_event)
- {
- if (typeof(in_event) == 'undefined') { in_event = window.event; }
- if (!domLib_isDescendantOf(in_event[domLib_eventTo], tipObj, domTT_bannedTags)) {
- domTT_deactivate(tipOwner.id);
- }
- };
- // NOTE: this might interfere with links in the tip
- tipObj.onclick = function(in_event)
- {
- domTT_deactivate(tipOwner.id);
- };
- }
-
- if (in_options.get('position') == 'relative')
- {
- tipObj.style.position = 'relative';
- }
-
- in_options.set('node', tipObj);
- in_options.set('status', 'inactive');
-}
-
-// }}}
-// {{{ domTT_show()
-
-// in_id is either tip id or the owner id
-function domTT_show(in_id, in_event)
-{
-
- // should always find one since this call would be cancelled if tip was killed
- var tooltip = domTT_tooltips.get(in_id);
- var status = tooltip.get('status');
- var tipObj = tooltip.get('node');
-
- if (tooltip.get('position') == 'absolute')
- {
- var mouseX, mouseY;
-
- if (tooltip.has('x') && tooltip.has('y'))
- {
- mouseX = tooltip.get('x');
- mouseY = tooltip.get('y');
- }
- else if (!domTT_useGlobalMousePosition || domTT_mousePosition == null || status == 'active' || tooltip.get('delay') == 0)
- {
- var eventPosition = domLib_getEventPosition(in_event);
- var eventX = eventPosition.get('x');
- var eventY = eventPosition.get('y');
- if (tooltip.get('inframe'))
- {
- eventX -= eventPosition.get('scrollX');
- eventY -= eventPosition.get('scrollY');
- }
-
- // only move tip along requested trail axis when updating position
- if (status == 'active' && tooltip.get('trail') !== true)
- {
- var trail = tooltip.get('trail');
- if (trail == 'x')
- {
- mouseX = eventX;
- mouseY = tooltip.get('mouseY');
- }
- else if (trail == 'y')
- {
- mouseX = tooltip.get('mouseX');
- mouseY = eventY;
- }
- }
- else
- {
- mouseX = eventX;
- mouseY = eventY;
- }
- }
- else
- {
- mouseX = domTT_mousePosition.get('x');
- mouseY = domTT_mousePosition.get('y');
- if (tooltip.get('inframe'))
- {
- mouseX -= domTT_mousePosition.get('scrollX');
- mouseY -= domTT_mousePosition.get('scrollY');
- }
- }
-
- // we are using a grid for updates
- if (tooltip.get('grid'))
- {
- // if this is not a mousemove event or it is a mousemove event on an active tip and
- // the movement is bigger than the grid
- if (in_event.type != 'mousemove' || (status == 'active' && (Math.abs(tooltip.get('lastX') - mouseX) > tooltip.get('grid') || Math.abs(tooltip.get('lastY') - mouseY) > tooltip.get('grid'))))
- {
- tooltip.set('lastX', mouseX);
- tooltip.set('lastY', mouseY);
- }
- // did not satisfy the grid movement requirement
- else
- {
- return false;
- }
- }
-
- // mouseX and mouseY store the last acknowleged mouse position,
- // good for trailing on one axis
- tooltip.set('mouseX', mouseX);
- tooltip.set('mouseY', mouseY);
-
- var coordinates;
- if (domTT_screenEdgeDetection)
- {
- coordinates = domTT_correctEdgeBleed(
- tooltip.get('offsetWidth'),
- tooltip.get('offsetHeight'),
- mouseX,
- mouseY,
- tooltip.get('offsetX'),
- tooltip.get('offsetY'),
- tooltip.get('mouseOffset'),
- tooltip.get('inframe') ? window.parent : window
- );
- }
- else
- {
- coordinates = {
- 'x' : mouseX + tooltip.get('offsetX'),
- 'y' : mouseY + tooltip.get('offsetY') + tooltip.get('mouseOffset')
- };
- }
-
- // update the position
- tipObj.style.left = coordinates.x + 'px';
- tipObj.style.top = coordinates.y + 'px';
-
- // increase the tip zIndex so it goes over previously shown tips
- tipObj.style.zIndex = domLib_zIndex++;
- }
-
- // if tip is not active, active it now and check for a fade in
- if (status == 'pending')
- {
- // unhide the tooltip
- tooltip.set('status', 'active');
- tipObj.style.display = '';
- tipObj.style.visibility = 'visible';
-
- var fade = tooltip.get('fade');
- if (fade != 'neither')
- {
- var fadeHandler = tooltip.get('fadeHandler');
- if (fade == 'out' || fade == 'both')
- {
- fadeHandler.haltFade();
- if (fade == 'out')
- {
- fadeHandler.halt();
- }
- }
-
- if (fade == 'in' || fade == 'both')
- {
- fadeHandler.fadeIn();
- }
- }
-
- if (tooltip.get('type') == 'greasy' && tooltip.get('lifetime') != 0)
- {
- tooltip.set('lifetimeTimeout', domLib_setTimeout(domTT_runDeactivate, tooltip.get('lifetime'), [tipObj.id]));
- }
- }
-
- if (tooltip.get('position') == 'absolute' && domTT_detectCollisions)
- {
- // utilize original collision element cache
- domLib_detectCollisions(tipObj, false, true);
- }
-}
-
-// }}}
-// {{{ domTT_close()
-
-// in_handle can either be an child object of the tip, the tip id or the owner id
-function domTT_close(in_handle)
-{
- var id;
- if (typeof(in_handle) == 'object' && in_handle.nodeType)
- {
- var obj = in_handle;
- while (!obj.id || !domTT_tooltips.get(obj.id))
- {
- obj = obj.parentNode;
-
- if (obj.nodeType != document.ELEMENT_NODE) { return; }
- }
-
- id = obj.id;
- }
- else
- {
- id = in_handle;
- }
-
- domTT_deactivate(id);
-}
-
-// }}}
-// {{{ domTT_closeAll()
-
-// run through the tooltips and close them all
-function domTT_closeAll()
-{
- // NOTE: this will iterate 2x # of tooltips
- for (var id in domTT_tooltips.elementData) {
- domTT_close(id);
- }
-}
-
-// }}}
-// {{{ domTT_deactivate()
-
-// in_id is either the tip id or the owner id
-function domTT_deactivate(in_id)
-{
- var tooltip = domTT_tooltips.get(in_id);
- if (tooltip)
- {
- var status = tooltip.get('status');
- if (status == 'pending')
- {
- // cancel the creation of this tip if it is still pending
- domLib_clearTimeout(tooltip.get('activateTimeout'));
- tooltip.set('status', 'inactive');
- }
- else if (status == 'active')
- {
- if (tooltip.get('lifetime'))
- {
- domLib_clearTimeout(tooltip.get('lifetimeTimeout'));
- }
-
- var tipObj = tooltip.get('node');
- if (tooltip.get('closeAction') == 'hide')
- {
- var fade = tooltip.get('fade');
- if (fade != 'neither')
- {
- var fadeHandler = tooltip.get('fadeHandler');
- if (fade == 'out' || fade == 'both')
- {
- fadeHandler.fadeOut();
- }
- else
- {
- fadeHandler.hide();
- }
- }
- else
- {
- tipObj.style.display = 'none';
- }
- }
- else
- {
- tooltip.get('parent').removeChild(tipObj);
- domTT_tooltips.remove(tooltip.get('owner').id);
- domTT_tooltips.remove(tooltip.get('id'));
- }
-
- tooltip.set('status', 'inactive');
- if (domTT_detectCollisions) {
- // unhide all of the selects that are owned by this object
- // utilize original collision element cache
- domLib_detectCollisions(tipObj, true, true);
- }
- }
- }
-}
-
-// }}}
-// {{{ domTT_mouseout()
-
-function domTT_mouseout(in_owner, in_event)
-{
- if (!domLib_useLibrary) { return false; }
-
- if (typeof(in_event) == 'undefined') { in_event = window.event; }
-
- var toChild = domLib_isDescendantOf(in_event[domLib_eventTo], in_owner, domTT_bannedTags);
- var tooltip = domTT_tooltips.get(in_owner.id);
- if (tooltip && (tooltip.get('type') == 'greasy' || tooltip.get('status') != 'active'))
- {
- // deactivate tip if exists and we moved away from the owner
- if (!toChild)
- {
- domTT_deactivate(in_owner.id);
- try { window.status = window.defaultStatus; } catch(e) {}
- }
- }
- else if (!toChild)
- {
- try { window.status = window.defaultStatus; } catch(e) {}
- }
-}
-
-// }}}
-// {{{ domTT_mousemove()
-
-function domTT_mousemove(in_owner, in_event)
-{
- if (!domLib_useLibrary) { return false; }
-
- if (typeof(in_event) == 'undefined') { in_event = window.event; }
-
- var tooltip = domTT_tooltips.get(in_owner.id);
- if (tooltip && tooltip.get('trail') && tooltip.get('status') == 'active')
- {
- // see if we are trailing lazy
- if (tooltip.get('lazy'))
- {
- domLib_setTimeout(domTT_runShow, domTT_trailDelay, [in_owner.id, in_event]);
- }
- else
- {
- domTT_show(in_owner.id, in_event);
- }
- }
-}
-
-// }}}
-// {{{ domTT_addPredefined()
-
-function domTT_addPredefined(in_id)
-{
- var options = new domTT_Hash();
- for (var i = 1; i < arguments.length; i += 2)
- {
- options.set(arguments[i], arguments[i + 1]);
- }
-
- domTT_predefined.set(in_id, options);
-}
-
-// }}}
-// {{{ domTT_correctEdgeBleed()
-
-function domTT_correctEdgeBleed(in_width, in_height, in_x, in_y, in_offsetX, in_offsetY, in_mouseOffset, in_window)
-{
- var win, doc;
- var bleedRight, bleedBottom;
- var pageHeight, pageWidth, pageYOffset, pageXOffset;
-
- var x = in_x + in_offsetX;
- var y = in_y + in_offsetY + in_mouseOffset;
-
- win = (typeof(in_window) == 'undefined' ? window : in_window);
-
- // Gecko and IE swaps values of clientHeight, clientWidth properties when
- // in standards compliance mode from documentElement to document.body
- doc = ((domLib_standardsMode && (domLib_isIE || domLib_isGecko)) ? win.document.documentElement : win.document.body);
-
- // for IE in compliance mode
- if (domLib_isIE)
- {
- pageHeight = doc.clientHeight;
- pageWidth = doc.clientWidth;
- pageYOffset = doc.scrollTop;
- pageXOffset = doc.scrollLeft;
- }
- else
- {
- pageHeight = doc.clientHeight;
- pageWidth = doc.clientWidth;
-
- if (domLib_isKHTML)
- {
- pageHeight = win.innerHeight;
- }
-
- pageYOffset = win.pageYOffset;
- pageXOffset = win.pageXOffset;
- }
-
- // we are bleeding off the right, move tip over to stay on page
- // logic: take x position, add width and subtract from effective page width
- if ((bleedRight = (x - pageXOffset) + in_width - (pageWidth - domTT_screenEdgePadding)) > 0)
- {
- x -= bleedRight;
- }
-
- // we are bleeding to the left, move tip over to stay on page
- // if tip doesn't fit, we will go back to bleeding off the right
- // logic: take x position and check if less than edge padding
- if ((x - pageXOffset) < domTT_screenEdgePadding)
- {
- x = domTT_screenEdgePadding + pageXOffset;
- }
-
- // if we are bleeding off the bottom, flip to north
- // logic: take y position, add height and subtract from effective page height
- if ((bleedBottom = (y - pageYOffset) + in_height - (pageHeight - domTT_screenEdgePadding)) > 0)
- {
- y = in_y - in_height - in_offsetY;
- }
-
- // if we are bleeding off the top, flip to south
- // if tip doesn't fit, we will go back to bleeding off the bottom
- // logic: take y position and check if less than edge padding
- if ((y - pageYOffset) < domTT_screenEdgePadding)
- {
- y = in_y + domTT_mouseHeight + in_offsetY;
- }
-
- return {'x' : x, 'y' : y};
-}
-
-// }}}
-// {{{ domTT_isActive()
-
-// in_id is either the tip id or the owner id
-function domTT_isActive(in_id)
-{
- var tooltip = domTT_tooltips.get(in_id);
- if (!tooltip || tooltip.get('status') != 'active')
- {
- return false;
- }
- else
- {
- return true;
- }
-}
-
-// }}}
-// {{{ domTT_runXXX()
-
-// All of these domMenu_runXXX() methods are used by the event handling sections to
-// avoid the circular memory leaks caused by inner functions
-function domTT_runDeactivate(args) { domTT_deactivate(args[0]); }
-function domTT_runShow(args) { domTT_show(args[0], args[1]); }
-
-// }}}
-// {{{ domTT_replaceTitles()
-
-function domTT_replaceTitles(in_decorator)
-{
- var elements = domLib_getElementsByClass('tooltip');
- for (var i = 0; i < elements.length; i++)
- {
- if (elements[i].title)
- {
- var content;
- if (typeof(in_decorator) == 'function')
- {
- content = in_decorator(elements[i]);
- }
- else
- {
- content = elements[i].title;
- }
-
- content = content.replace(new RegExp('\'', 'g'), '\\\'');
- elements[i].onmouseover = new Function('in_event', "domTT_activate(this, in_event, 'content', '" + content + "')");
- elements[i].title = '';
- }
- }
-}
-
-// }}}
-// {{{ domTT_update()
-
-// Allow authors to update the contents of existing tips using the DOM
-// Unfortunately, the tip must already exist, or else no work is done.
-// TODO: make getting at content or caption cleaner
-function domTT_update(handle, content, type)
-{
- // type defaults to 'content', can also be 'caption'
- if (typeof(type) == 'undefined')
- {
- type = 'content';
- }
-
- var tip = domTT_tooltips.get(handle);
- if (!tip)
- {
- return;
- }
-
- var tipObj = tip.get('node');
- var updateNode;
- if (type == 'content')
- {
- // <div class="contents">...
- updateNode = tipObj.firstChild;
- if (updateNode.className != 'contents')
- {
- // <table><tbody><tr>...</tr><tr><td><div class="contents">...
- updateNode = updateNode.firstChild.firstChild.nextSibling.firstChild.firstChild;
- }
- }
- else
- {
- updateNode = tipObj.firstChild;
- if (updateNode.className == 'contents')
- {
- // missing caption
- return;
- }
-
- // <table><tbody><tr><td><div class="caption">...
- updateNode = updateNode.firstChild.firstChild.firstChild.firstChild;
- }
-
- // TODO: allow for a DOM node as content
- updateNode.innerHTML = content;
-}
-
-// }}}
diff --git a/usr/local/www/javascript/domTT/fadomatic.js b/usr/local/www/javascript/domTT/fadomatic.js
deleted file mode 100644
index 2c67d0b..0000000
--- a/usr/local/www/javascript/domTT/fadomatic.js
+++ /dev/null
@@ -1,180 +0,0 @@
-/** $Id$ */
-// Title: Fadomatic
-// Version: 1.2
-// Homepage: http://chimpen.com/fadomatic
-// Author: Philip McCarthy <fadomatic@chimpen.com>
-
-// Fade interval in milliseconds
-// Make this larger if you experience performance issues
-Fadomatic.INTERVAL_MILLIS = 50;
-
-// Creates a fader
-// element - The element to fade
-// speed - The speed to fade at, from 0.0 to 100.0
-// initialOpacity (optional, default 100) - element's starting opacity, 0 to 100
-// minOpacity (optional, default 0) - element's minimum opacity, 0 to 100
-// maxOpacity (optional, default 0) - element's minimum opacity, 0 to 100
-function Fadomatic (element, rate, initialOpacity, minOpacity, maxOpacity) {
- this._element = element;
- this._intervalId = null;
- this._rate = rate;
- this._isFadeOut = true;
-
- // Set initial opacity and bounds
- // NB use 99 instead of 100 to avoid flicker at start of fade
- this._minOpacity = 0;
- this._maxOpacity = 99;
- this._opacity = 99;
-
- if (typeof minOpacity != 'undefined') {
- if (minOpacity < 0) {
- this._minOpacity = 0;
- } else if (minOpacity > 99) {
- this._minOpacity = 99;
- } else {
- this._minOpacity = minOpacity;
- }
- }
-
- if (typeof maxOpacity != 'undefined') {
- if (maxOpacity < 0) {
- this._maxOpacity = 0;
- } else if (maxOpacity > 99) {
- this._maxOpacity = 99;
- } else {
- this._maxOpacity = maxOpacity;
- }
-
- if (this._maxOpacity < this._minOpacity) {
- this._maxOpacity = this._minOpacity;
- }
- }
-
- if (typeof initialOpacity != 'undefined') {
- if (initialOpacity > this._maxOpacity) {
- this._opacity = this._maxOpacity;
- } else if (initialOpacity < this._minOpacity) {
- this._opacity = this._minOpacity;
- } else {
- this._opacity = initialOpacity;
- }
- }
-
- // See if we're using W3C opacity, MSIE filter, or just
- // toggling visiblity
- if(typeof element.style.opacity != 'undefined') {
-
- this._updateOpacity = this._updateOpacityW3c;
-
- } else if(typeof element.style.filter != 'undefined') {
-
- // If there's not an alpha filter on the element already,
- // add one
- if (element.style.filter.indexOf("alpha") == -1) {
-
- // Attempt to preserve existing filters
- var existingFilters="";
- if (element.style.filter) {
- existingFilters = element.style.filter+" ";
- }
- element.style.filter = existingFilters+"alpha(opacity="+this._opacity+")";
- }
-
- this._updateOpacity = this._updateOpacityMSIE;
-
- } else {
-
- this._updateOpacity = this._updateVisibility;
- }
-
- this._updateOpacity();
-}
-
-// Initiates a fade out
-Fadomatic.prototype.fadeOut = function () {
- this._isFadeOut = true;
- this._beginFade();
-};
-
-// Initiates a fade in
-Fadomatic.prototype.fadeIn = function () {
- this._isFadeOut = false;
- this._beginFade();
-};
-
-// Makes the element completely opaque, stops any fade in progress
-Fadomatic.prototype.show = function () {
- this.haltFade();
- this._opacity = this._maxOpacity;
- this._updateOpacity();
-};
-
-// Makes the element completely transparent, stops any fade in progress
-Fadomatic.prototype.hide = function () {
- this.haltFade();
- this._opacity = 0;
- this._updateOpacity();
-};
-
-// Halts any fade in progress
-Fadomatic.prototype.haltFade = function () {
-
- clearInterval(this._intervalId);
-};
-
-// Resumes a fade where it was halted
-Fadomatic.prototype.resumeFade = function () {
-
- this._beginFade();
-};
-
-// Pseudo-private members
-
-Fadomatic.prototype._beginFade = function () {
-
- this.haltFade();
- var objref = this;
- this._intervalId = setInterval(function() { objref._tickFade(); },Fadomatic.INTERVAL_MILLIS);
-};
-
-Fadomatic.prototype._tickFade = function () {
-
- if (this._isFadeOut) {
- this._opacity -= this._rate;
- if (this._opacity < this._minOpacity) {
- this._opacity = this._minOpacity;
- this.haltFade();
- }
- } else {
- this._opacity += this._rate;
- if (this._opacity > this._maxOpacity ) {
- this._opacity = this._maxOpacity;
- this.haltFade();
- }
- }
-
- this._updateOpacity();
-};
-
-Fadomatic.prototype._updateVisibility = function () {
-
- if (this._opacity > 0) {
- this._element.style.visibility = 'visible';
- } else {
- this._element.style.visibility = 'hidden';
- }
-};
-
-Fadomatic.prototype._updateOpacityW3c = function () {
-
- this._element.style.opacity = this._opacity/100;
- this._updateVisibility();
-};
-
-Fadomatic.prototype._updateOpacityMSIE = function () {
-
- this._element.filters.alpha.opacity = this._opacity;
- this._updateVisibility();
-};
-
-Fadomatic.prototype._updateOpacity = null;
diff --git a/usr/local/www/javascript/filter_log.js b/usr/local/www/javascript/filter_log.js
deleted file mode 100644
index 66a7309..0000000
--- a/usr/local/www/javascript/filter_log.js
+++ /dev/null
@@ -1,168 +0,0 @@
-if (typeof getURL == 'undefined') {
- getURL = function(url, callback) {
- if (!url)
- throw 'No URL for getURL';
- try {
- if (typeof callback.operationComplete == 'function')
- callback = callback.operationComplete;
- } catch (e) {}
- if (typeof callback != 'function')
- throw 'No callback function for getURL';
- var http_request = null;
- if (typeof XMLHttpRequest != 'undefined') {
- http_request = new XMLHttpRequest();
- }
- else if (typeof ActiveXObject != 'undefined') {
- try {
- http_request = new ActiveXObject('Msxml2.XMLHTTP');
- } catch (e) {
- try {
- http_request = new ActiveXObject('Microsoft.XMLHTTP');
- } catch (e) {}
- }
- }
- if (!http_request)
- throw 'Both getURL and XMLHttpRequest are undefined';
- http_request.onreadystatechange = function() {
- if (http_request.readyState == 4) {
- callback( { success : true,
- content : http_request.responseText,
- contentType : http_request.getResponseHeader("Content-Type") } );
- }
- };
- http_request.open('GET', url, true);
- http_request.send(null);
- };
-}
-
-function outputrule(req) {
- alert(req.content);
-}
-function fetch_new_rules() {
- if(isPaused)
- return;
- if(isBusy)
- return;
- isBusy = true;
- getURL('diag_logs_filter_dynamic.php?lastsawtime=' + lastsawtime, fetch_new_rules_callback);
-}
-function fetch_new_rules_callback(callback_data) {
- if(isPaused)
- return;
-
- var data_split;
- var new_data_to_add = Array();
- var data = callback_data.content;
-
- data_split = data.split("\n");
-
- for(var x=0; x<data_split.length-1; x++) {
- /* loop through rows */
- row_split = data_split[x].split("||");
- lastsawtime = row_split[9];
-
- var tmp = format_log_line(row_split);
- if ( !(tmp) ) continue;
-
- new_data_to_add[new_data_to_add.length] = tmp;
- }
- update_table_rows(new_data_to_add);
- isBusy = false;
-}
-
-function in_arrayi(needle, haystack) {
- var i = haystack.length;
- while (i--) {
- if (haystack[i].toLowerCase() === needle.toLowerCase()) {
- return true;
- }
- }
- return false;
-}
-
-function update_table_rows(data) {
- if(isPaused)
- return;
-
- var isIE = navigator.appName.indexOf('Microsoft') != -1;
- var isSafari = navigator.userAgent.indexOf('Safari') != -1;
- var isOpera = navigator.userAgent.indexOf('Opera') != -1;
- var showanim = 1;
- if (isIE) {
- showanim = 0;
- }
-
- var startat = data.length - nentries;
- if (startat < 0) {
- startat = 0;
- }
- data = data.slice(startat, data.length);
-
- var rows = jQuery('#filter-log-entries>tr');
-
- // Number of rows to move by
- var move = rows.length + data.length - nentries;
- if (move < 0)
- move = 0;
-
- if (isReverse == false) {
- for (var i = move; i < rows.length; i++) {
- jQuery(rows[i - move]).html(jQuery(rows[i]).html());
- }
-
- var tbody = jQuery('#filter-log-entries');
- for (var i = 0; i < data.length; i++) {
- var rowIndex = rows.length - move + i;
- if (rowIndex < rows.length) {
- jQuery(rows[rowIndex]).html(data[i]);
- } else {
- jQuery(tbody).append('<tr>' + data[i] + '</tr>');
- }
- }
- } else {
- for (var i = rows.length - 1; i >= move; i--) {
- jQuery(rows[i]).html(jQuery(rows[i - move]).html());
- }
-
- var tbody = jQuery('#filter-log-entries');
- for (var i = 0; i < data.length; i++) {
- var rowIndex = move - 1 - i;
- if (rowIndex >= 0) {
- jQuery(rows[rowIndex]).html(data[i]);
- } else {
- jQuery(tbody).prepend('<tr>' + data[i] + '</tr>');
- }
- }
- }
-
- // Much easier to go through each of the rows once they've all be added.
- rows = jQuery('#filter-log-entries>tr');
- for (var i = 0; i < rows.length; i++) {
- rows[i].className = i % 2 == 0 ? 'listMRodd' : 'listMReven';
- }
-}
-
-function toggle_pause() {
- if(isPaused) {
- isPaused = false;
- fetch_new_rules();
- } else {
- isPaused = true;
- }
-}
-/* start local AJAX engine */
-if (typeof updateDelay != 'undefined') {
- timer = setInterval('fetch_new_rules()', updateDelay);
-}
-
-function toggleListDescriptions(){
- var ss = document.styleSheets;
- for (var i=0; i<ss.length; i++) {
- var rules = ss[i].cssRules || ss[i].rules;
- for (var j=0; j<rules.length; j++) {
- if (rules[j].selectorText === ".listMRDescriptionL" || rules[j].selectorText === ".listMRDescriptionR") {
- rules[j].style.display = rules[j].style.display === "none" ? "table-cell" : "none";
- }
- }
- }
-}
diff --git a/usr/local/www/javascript/firebug-lite.js b/usr/local/www/javascript/firebug-lite.js
deleted file mode 100644
index 135b9e6..0000000
--- a/usr/local/www/javascript/firebug-lite.js
+++ /dev/null
@@ -1,1000 +0,0 @@
-/**
- * firebug lite <http://www.getfirebug.com/lite.html>
- * v1.0
- * 04.11.2008, 8:25 PM ~
- * v1.0a
- * 03.27.2008, 5:44 AM ~ 04.01.2008, 21:32 PM
- * Azer Koçulu <http://azer.kodfabrik.com>
- */
-
-var firebug = {
- env:{ "cache":{}, "ctmp":[], "dIndex":"console", "init":false, "ml":false, "objCn":[] },
- init:function(){
- firebug.el = {}; // elements
- firebug.el.content = {};
- with(firebug){
-
- document.documentElement.childNodes[0].appendChild(
- new pi.element("link").attribute.set("rel","stylesheet").attribute.set("href","http://firebuglite.appspot.com/firebug-lite.css").environment.getElement()
- );
-
- /*
- * main interface
- */
- el.main = new pi.element("DIV").attribute.set("id","Firebug").environment.addStyle({ "width":pi.util.GetWindowSize().width+"px" }).insert(document.body);
- el.header = new pi.element("DIV").attribute.addClass("Header").insert(el.main);
- el.left = {};
- el.left.container = new pi.element("DIV").attribute.addClass("Left").insert(el.main);
- el.right = {};
- el.right.container = new pi.element("DIV").attribute.addClass("Right").insert(el.main);
- el.main.child.add(new pi.element("DIV").environment.addStyle({ "clear":"both" }));
-
- /*
- * buttons
- */
- el.button = {};
- el.button.container = new pi.element("DIV").attribute.addClass("ButtonContainer").insert(el.header);
- el.button.logo = new pi.element("A").attribute.set("title","Firebug Lite").attribute.set("target","_blank").attribute.set("href","http://getfirebug.com/lite.html").update("&nbsp;").attribute.addClass("Button Logo").insert(el.button.container);
- el.button.inspect = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.inspector.toggle).update("Inspect").insert(el.button.container);
- el.button.maximize = new pi.element("A").attribute.addClass("Button Maximize").event.addListener("click",win.maximize).insert(el.button.container);
- el.button.minimize = new pi.element("A").attribute.addClass("Button Minimize").event.addListener("click",win.minimize).insert(el.button.container);
- el.button.close = new pi.element("A").attribute.addClass("Button Close").event.addListener("click",win.close).insert(el.button.container);
-
- if(pi.env.ie||pi.env.webkit){
- el.button.container.environment.addStyle({ "paddingTop":"12px" });
- }
-
- /*
- * navigation
- */
- el.nav = {};
- el.nav.container = new pi.element("DIV").attribute.addClass("Nav").insert(el.left.container);
- el.nav.console = new pi.element("A").attribute.addClass("Tab Selected").event.addListener("click",d.navigate.curry(window,"console")).update("Console").insert(el.nav.container);
- el.nav.html = new pi.element("A").attribute.addClass("Tab").update("HTML").event.addListener("click",d.navigate.curry(window,"html")).insert(el.nav.container);
- el.nav.css = new pi.element("A").attribute.addClass("Tab").update("CSS").event.addListener("click",d.navigate.curry(window,"css")).insert(el.nav.container);
- el.nav.scripts = new pi.element("A").attribute.addClass("Tab").update("Script").event.addListener("click",d.navigate.curry(window,"scripts")).insert(el.nav.container);
- el.nav.dom = new pi.element("A").attribute.addClass("Tab").update("DOM").event.addListener("click",d.navigate.curry(window,"dom")).insert(el.nav.container);
- el.nav.xhr = new pi.element("A").attribute.addClass("Tab").update("XHR").event.addListener("click",d.navigate.curry(window,"xhr")).insert(el.nav.container);
-
- /*
- * inspector
- */
-
- el.borderInspector = new pi.element("DIV").attribute.set("id","FirebugBorderInspector").event.addListener("click",listen.inspector).insert(document.body);
- el.bgInspector = new pi.element("DIV").attribute.set("id","FirebugBGInspector").insert(document.body);
-
- /*
- * console
- */
- el.left.console = {};
- el.left.console.container = new pi.element("DIV").attribute.addClass("Console").insert(el.left.container);
- el.left.console.mlButton = new pi.element("A").attribute.addClass("MLButton").event.addListener("click",d.console.toggleML).insert(el.left.console.container);
- el.left.console.monitor = new pi.element("DIV").insert(
- new pi.element("DIV").attribute.addClass("Monitor").insert(el.left.console.container)
- );
- el.left.console.container.child.add(
- new pi.element("DIV").attribute.addClass("InputArrow").update(">>>")
- );
- el.left.console.input = new pi.element("INPUT").attribute.set("type","text").attribute.addClass("Input").event.addListener("keydown",listen.consoleTextbox).insert(
- new pi.element("DIV").attribute.addClass("InputContainer").insert(el.left.console.container)
- );
-
- el.right.console = {};
- el.right.console.container = new pi.element("DIV").attribute.addClass("Console Container").insert(el.right.container);
- el.right.console.mlButton = new pi.element("A").attribute.addClass("MLButton CloseML").event.addListener("click",d.console.toggleML).insert(el.right.console.container);
- el.right.console.input = new pi.element("TEXTAREA").attribute.addClass("Input").insert(el.right.console.container);
- el.right.console.run = new pi.element("A").attribute.addClass("Button").event.addListener("click",listen.runMultiline).update("Run").insert(el.right.console.container);
-
- el.right.console.clear = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.clean.curry(window,el.right.console.input)).update("Clear").insert(el.right.console.container);
-
- el.button.console = {};
- el.button.console.container = new pi.element("DIV").attribute.addClass("ButtonSet").insert(el.button.container);
- el.button.console.clear = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.clean.curry(window,el.left.console.monitor)).update("Clear").insert(el.button.console.container);
-
- /*
- * html
- */
-
- el.left.html = {};
- el.left.html.container = new pi.element("DIV").attribute.addClass("HTML").insert(el.left.container);
-
- el.right.html = {};
- el.right.html.container = new pi.element("DIV").attribute.addClass("HTML Container").insert(el.right.container);
-
- el.right.html.nav = {};
- el.right.html.nav.container = new pi.element("DIV").attribute.addClass("Nav").insert(el.right.html.container);
- el.right.html.nav.computedStyle = new pi.element("A").attribute.addClass("Tab Selected").event.addListener("click",d.html.navigate.curry(firebug,"computedStyle")).update("Computed Style").insert(el.right.html.nav.container);
- if(!pi.env.ie6)
- el.right.html.nav.dom = new pi.element("A").attribute.addClass("Tab").event.addListener("click",d.html.navigate.curry(firebug,"dom")).update("DOM").insert(el.right.html.nav.container);
-
- el.right.html.content = new pi.element("DIV").attribute.addClass("Content").insert(el.right.html.container);
-
- el.button.html = {};
- el.button.html.container = new pi.element("DIV").attribute.addClass("ButtonSet HTML").insert(el.button.container);
-
- /*
- * css
- */
-
- el.left.css = {};
- el.left.css.container = new pi.element("DIV").attribute.addClass("CSS").insert(el.left.container);
-
- el.right.css = {};
- el.right.css.container = new pi.element("DIV").attribute.addClass("CSS Container").insert(el.right.container);
-
- el.right.css.nav = {};
- el.right.css.nav.container = new pi.element("DIV").attribute.addClass("Nav").insert(el.right.css.container);
- el.right.css.nav.runCSS = new pi.element("A").attribute.addClass("Tab Selected").update("Run CSS").insert(el.right.css.nav.container);
-
- el.right.css.mlButton = new pi.element("A").attribute.addClass("MLButton CloseML").event.addListener("click",d.console.toggleML).insert(el.right.css.container);
- el.right.css.input = new pi.element("TEXTAREA").attribute.addClass("Input").insert(el.right.css.container);
- el.right.css.run = new pi.element("A").attribute.addClass("Button").event.addListener("click",listen.runCSS).update("Run").insert(el.right.css.container);
- el.right.css.clear = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.clean.curry(window,el.right.css.input)).update("Clear").insert(el.right.css.container);
-
- el.button.css = {};
- el.button.css.container = new pi.element("DIV").attribute.addClass("ButtonSet CSS").insert(el.button.container);
- el.button.css.selectbox = new pi.element("SELECT").event.addListener("change",listen.cssSelectbox).insert(el.button.css.container);
-
- /*
- * scripts
- */
-
- el.left.scripts = {};
- el.left.scripts.container = new pi.element("DIV").attribute.addClass("Scripts").insert(el.left.container);
-
- el.right.scripts = {};
- el.right.scripts.container = new pi.element("DIV").attribute.addClass("Scripts Container").insert(el.right.container);
-
- el.button.scripts = {};
- el.button.scripts.container = new pi.element("DIV").attribute.addClass("ButtonSet Scripts").insert(el.button.container);
- el.button.scripts.selectbox = new pi.element("SELECT").event.addListener("change",listen.scriptsSelectbox).insert(el.button.scripts.container);
- el.button.scripts.lineNumbers = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.scripts.toggleLineNumbers).update("Show Line Numbers").insert(el.button.scripts.container);
-
- /*
- * dom
- */
-
- el.left.dom = {};
- el.left.dom.container = new pi.element("DIV").attribute.addClass("DOM").insert(el.left.container);
-
- el.right.dom = {};
- el.right.dom.container = new pi.element("DIV").attribute.addClass("DOM Container").insert(el.right.container);
-
- el.button.dom = {};
- el.button.dom.container = new pi.element("DIV").attribute.addClass("ButtonSet DOM").insert(el.button.container);
- el.button.dom.label = new pi.element("LABEL").update("Object Path:").insert(el.button.dom.container);
- el.button.dom.textbox = new pi.element("INPUT").event.addListener("keydown",listen.domTextbox).update("window").insert(el.button.dom.container);
-
- /*
- * str
- */
-
- el.left.str = {};
- el.left.str.container = new pi.element("DIV").attribute.addClass("STR").insert(el.left.container);
-
- el.right.str = {};
- el.right.str.container = new pi.element("DIV").attribute.addClass("STR").insert(el.left.container);
-
- el.button.str = {};
- el.button.str.container = new pi.element("DIV").attribute.addClass("ButtonSet XHR").insert(el.button.container);
- el.button.str.watch = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.navigate.curry(window,"xhr")).update("Back").insert(el.button.str.container);
-
- /*
- * xhr
- */
-
- el.left.xhr = {};
- el.left.xhr.container = new pi.element("DIV").attribute.addClass("XHR").insert(el.left.container);
-
- el.right.xhr = {};
- el.right.xhr.container = new pi.element("DIV").attribute.addClass("XHR").insert(el.left.container);
-
-
- el.button.xhr = {};
- el.button.xhr.container = new pi.element("DIV").attribute.addClass("ButtonSet XHR").insert(el.button.container);
- el.button.xhr.label = new pi.element("LABEL").update("XHR Path:").insert(el.button.xhr.container);
- el.button.xhr.textbox = new pi.element("INPUT").event.addListener("keydown",listen.xhrTextbox).insert(el.button.xhr.container);
- el.button.xhr.watch = new pi.element("A").attribute.addClass("Button").event.addListener("click",listen.addXhrObject).update("Watch").insert(el.button.xhr.container);
-
- // fix ie6 a:hover bug
- if(pi.env.ie6)
- {
- var buttons = [
- el.button.inspect,
- el.button.close,
- el.button.inspect,
- el.button.console.clear,
- el.right.console.run,
- el.right.console.clear,
- el.right.css.run,
- el.right.css.clear
- ];
- for(var i=0; i<buttons.length; i++)
- buttons[i].attribute.set("href","#");
- }
- //
-
- env.init = true;
-
- for(var i=0; i<env.ctmp.length; i++)
- {
- d.console.log.apply(window,env.ctmp[i]);
- }
- }
- },
- win:{
- close:function(){
- with(firebug){
- el.main.update("");
- el.main.remove();
- }
- },
- minimize:function(){
- with(firebug){
- el.main.environment.addStyle({ "height":"35px" });
- el.button.maximize.environment.addStyle({ "display":"block" });
- el.button.minimize.environment.addStyle({ "display":"none" });
- d.refreshSize();
- }
- },
- maximize:function(){
- with(firebug){
- el.main.environment.addStyle({ "height":"295px" });
- el.button.minimize.environment.addStyle({ "display":"block" });
- el.button.maximize.environment.addStyle({ "display":"none" });
- d.refreshSize();
- }
- }
- },
- watchXHR:function(){
- with(firebug){
- d.xhr.addObject.apply(window,arguments);
- if(env.dIndex!="xhr"){
- d.navigate("xhr");
- }
- }
- },
- d: {
- clean:function(_element){
- with(firebug){
- _element.update("");
- }
- },
- console:{
- dir:function(_value){
- with(firebug){
- d.console.addLine().attribute.addClass("Arrow").update(">>> console.dir("+_value+")");
- d.dom.open(_value,d.console.addLine());
- }
- },
- addLine:function(){
- with (firebug) {
- return new pi.element("DIV").attribute.addClass("Row").insert(el.left.console.monitor);
- }
- },
- openObject:function(_index){
- with (firebug) {
- d.dom.open(env.objCn[_index], el.left.dom.container, pi.env.ie);
- d.navigate("dom");
- }
- },
- historyIndex:0,
- history:[],
- log:function(_values){
- with (firebug) {
- if(env.init==false){
- env.ctmp.push(arguments);
- return;
- }
-
- var value = "";
- for(var i=0; i<arguments.length; i++){
- value += (i>0?" ":"")+d.highlight(arguments[i],false,false,true);
- }
-
- d.console.addLine().update(value);
- d.console.scroll();
-
- }
- },
- print: function(_cmd,_text){
- with (firebug){
- d.console.addLine().attribute.addClass("Arrow").update(">>> "+_cmd);
- d.console.addLine().update(d.highlight(_text,false,false,true));
- d.console.scroll();
- d.console.historyIndex = d.console.history.push(_cmd);
- }
- },
- run:function(cmd){
- with(firebug){
- if(cmd.length==0)return;
- el.left.console.input.environment.getElement().value = "";
- try {
- var result = eval.call(window,cmd);
- d.console.print(cmd,result);
- } catch(e){
- d.console.addLine().attribute.addClass("Arrow").update(">>> "+cmd);
- if(!pi.env.ff){
- d.console.scroll();
- return d.console.addLine().attribute.addClass("Error").update("<strong>Error: </strong>"+(e.description||e),true);
- }
- if(e.fileName==null){
- d.console.addLine().attribute.addClass("Error").update("<strong>Error: </strong>"+e.message,true);
- }
- var fileName = e.fileName.split("\/").getLastItem();
- d.console.addLine().attribute.addClass("Error").update("<strong>Error: </strong>"+e.message+" (<em>"+fileName+"</em>,"+e.lineNumber+")",true);
- d.console.scroll();
- }
- d.console.scroll();
- }
- },
- scroll:function(){
- with(firebug){
- el.left.console.monitor.environment.getElement().parentNode.scrollTop = Math.abs(el.left.console.monitor.environment.getSize().offsetHeight-200);
- }
- },
- toggleML:function(){
- with(firebug){
- var open = !env.ml;
- env.ml = !env.ml;
- d.navigateRightColumn("console",open);
- el[open?"left":"right"].console.mlButton.environment.addStyle({ display:"none" });
- el[!open?"left":"right"].console.mlButton.environment.addStyle({ display:"block" });
- el.left.console.monitor.environment.addStyle({ "height":(open?233:210)+"px" });
- el.left.console.mlButton.attribute[(open?"add":"remove")+"Class"]("CloseML");
- }
- }
- },
- css:{
- index:-1,
- open:function(_index){
- with (firebug) {
- var item = document.styleSheets[_index];
- var uri = item.href;
- if(uri.indexOf("http:\/\/")>-1&&getDomain(uri)!=document.domain){
- el.left.css.container.update("<em>Access to restricted URI denied</em>");
- return;
- }
- var rules = item[pi.env.ie ? "rules" : "cssRules"];
- var str = "";
- for (var i=0; i<rules.length; i++) {
- var item = rules[i];
- var selector = item.selectorText;
- var cssText = pi.env.ie?item.style.cssText:item.cssText.match(/\{(.*)\}/)[1];
- str+=d.css.printRule(selector, cssText.split(";"), el.left.css.container);
- }
- el.left.css.container.update(str);
- }
- },
- printRule:function(_selector,_css,_layer){
- with(firebug){
- var str = "<div class='Selector'>"+_selector+" {</div>";
- for(var i=0; i<_css.length; i++){
- var item = _css[i];
- str += "<div class='CSSText'>"+item.replace(/(.+\:)(.+)/,"<span class='CSSProperty'>$1</span><span class='CSSValue'>$2;</span>")+"</div>";
- }
- str+="<div class='Selector'>}</div>";
- return str;
- }
- },
- refresh:function(){
- with(firebug){
- el.button.css.selectbox.update("");
- var collection = document.styleSheets;
- for(var i=0; i<collection.length; i++){
- var uri = collection[i].href;
- d.css.index=d.css.index<0?i:d.css.index;
- el.button.css.selectbox.child.add(
- new pi.element("OPTION").attribute.set("value",i).update(uri)
- );
- };
- d.css.open(d.css.index);
- }
- }
- },
- dom: {
- open: function(_object,_layer){
- with (firebug) {
- _layer.clean();
- var container = new pi.element("DIV").attribute.addClass("DOMContent").insert(_layer);
- d.dom.print(_object, container);
- }
- },
- print:function(_object,_parent, _inTree){
- with (firebug) {
- var obj = _object || window, parentElement = _parent;
- parentElement.update("");
-
- if(parentElement.opened&&parentElement!=el.left.dom.container){
- parentElement.environment.getParent().pi.child.get()[0].pi.child.get()[0].pi.attribute.removeClass("Opened");
- parentElement.opened = false;
- parentElement.environment.addStyle({ "display":"none" });
- return;
- }
- if(_inTree)
- parentElement.environment.getParent().pi.child.get()[0].pi.child.get()[0].pi.attribute.addClass("Opened");
- parentElement.opened = true;
-
- for (var key in obj) {
- try {
-
- var value = obj[key], property = key, container = new pi.element("DIV").attribute.addClass("DOMRow").insert(parentElement),
- left = new pi.element("DIV").attribute.addClass("DOMRowLeft").insert(container), right = new pi.element("DIV").attribute.addClass("DOMRowRight").insert(container);
-
- container.child.add(
- new pi.element("DIV").environment.addStyle({ "clear":"both" })
- );
-
- var link = new pi.element("A").attribute.addClass(
- typeof value=="object"&&Boolean(value)?"Property Object":"Property"
- ).update(property).insert(left);
-
- right.update(
- d.highlight(value,false,true)
- );
-
- var subContainer = new pi.element("DIV").attribute.addClass("DOMRowSubContainer").insert(container);
-
- if(typeof value!="object"||Boolean(value)==false)
- continue;
-
- link.event.addListener("click",d.dom.print.curry(window,value, subContainer, true));
- }catch(e){
- }
- }
- parentElement.environment.addStyle({ "display":"block" });
- }
- }
- },
- highlight:function(_value,_inObject,_inArray,_link){
- with(firebug){
- var isArray = false, isElement = false;
- try {
- isArray = pi.util.IsArray(_value);
- isElement = _value!=undefined&&Boolean(_value.nodeName)&&Boolean(_value.nodeType);
- }catch(e){};
-
- // number, string, boolean, null, function
- if(_value==null||["boolean","function","number","string"].indexOf(typeof _value)>-1){
- // NULL
- if(_value==null){
- return "<span class='Null'>null</span>";
- }
-
- // BOOLEAN & NUMBER
- if (["boolean", "number"].indexOf(typeof _value) > -1) {
- return "<span class='DarkBlue'>" + _value + "</span>";
- }
-
- // FUNCTION
- if(typeof _value=="function"){
- return "<span class='"+(_inObject?"Italic Gray":"Green")+"'>function()</span>";
- }
-
- // STRING
- return "<span class='Red'>\""+( !_inObject&&!_inArray?_value : _value.substring(0,35) ).replace(/\n/g,"\\n").replace(/\s/g,"&nbsp;").replace(/>/g,"&#62;").replace(/</g,"&#60;")+"\"</span>";
- }
- // element
- else if(isElement){
- if(_value.nodeType==3)return d.highlight(_value.nodeValue);
-
- if(_inArray||_inObject){
- var result = "<span class='Blue'>"+_value.nodeName.toLowerCase();
- if(_value.getAttribute&&_value.getAttribute("id"))result += "<span class='DarkBlue'>#"+_value.getAttribute("id")+"</span>";
- var elClass = _value.getAttribute?_value.getAttribute(pi.env.ie?"className":"class"):"";
- if(elClass)result += "<span class='Red'>."+elClass.split(" ")[0]+"</span>";
- return result+"</span>";
- }
-
- var result = "<span class='Blue'>&#60;"+_value.nodeName.toLowerCase()+"";
- if(_value.attributes)
- for(var i=0; i<_value.attributes.length; i++){
- var item = _value.attributes[i];
- if(pi.env.ie&&Boolean(item.nodeValue)==false)continue;
- result += " <span class='DarkBlue'>"+item.nodeName+"=\"<span class='Red'>"+item.nodeValue+"</span>\"</span>";
- }
- result += "&#62;</span>";
- return result;
- }
- // array & object
- else if(isArray||["object","array"].indexOf(typeof _value)>-1){
- var result = "";
- if(isArray||_value instanceof Array){
- if(_inObject)return "<span class='Gray Italic'>["+_value.length+"]</span>";
- result += "<span class='Strong'>[ ";
-
- for(var i=0; i<_value.length; i++){
- if((_inObject||_inArray)&&pi.env.ie&&i>3)break;
- result += (i > 0 ? ", " : "") + d.highlight(_value[i], false, true, true);
- }
- result += " ]</span>";
- return result;
- }
- if(_inObject)return "<span class='Gray Italic'>Object</span>";
- result += "<span class='Strong Green"+ ( !_link?"'":" ObjectLink' onmouseover='this.className=this.className.replace(\"ObjectLink\",\"ObjectLinkHover\")' onmouseout='this.className=this.className.replace(\"ObjectLinkHover\",\"ObjectLink\")' onclick='firebug.d.console.openObject(" +( env.objCn.push( _value ) -1 )+")'" ) + ">Object";
- var i=0;
- for(var key in _value){
- var value = _value[key];
- if((_inObject||_inArray)&&pi.env.ie&&i>3)
- break;
- result += " "+key+"="+d.highlight(value,true);
- i++;
- };
- result += "</span>";
- return result;
- } else {
- if(_inObject)
- return "<span class='Gray Italic'>"+_value+"</span>";
- return _value;
- }
-
- }
- },
- html:{
- nIndex:"computedStyle",
- current:null,
- highlight:function(_element,_clear,_event){
- with(firebug){
- if(_clear){
- el.bgInspector.environment.addStyle({ "display":"none" });
- return;
- }
- d.inspector.inspect(_element,true);
- }
- },
- inspect:function(_element){
- var el = _element, map = [], parent = _element;
- while(parent){
- map.push(parent);
- if(parent==document.body)break;
- parent = parent.parentNode;
- }
- map = map.reverse();
- with(firebug){
- d.inspector.toggle();
- var parentLayer = el.left.html.container.child.get()[1].childNodes[1].pi;
- for(var t=0; map[t];){
- if(t==map.length-1){
-
- var link = parentLayer.environment.getElement().previousSibling.pi;
- link.attribute.addClass("Selected");
-
- if(d.html.current)d.html.current[1].attribute.removeClass("Selected");
-
- d.html.current = [_element,link];
-
- return t;
- }
- parentLayer = d.html.openHtmlTree(map[t],parentLayer,map[t+1]);
- t++;
- }
- }
- },
- navigate:function(_index,_element){
- with(firebug){
- el.right.html.nav[d.html.nIndex].attribute.removeClass("Selected");
- el.right.html.nav[_index].attribute.addClass("Selected");
- d.html.nIndex = _index;
- d.html.openProperties();
-
- }
- },
- openHtmlTree:function(_element,_parent,_returnParentElementByElement,_event){
- with(firebug){
- var element = _element || document.documentElement,
- parent = _parent || el.left.html.container,
- returnParentEl = _returnParentElementByElement || null,
- returnParentVal = null;
-
- if(parent!=el.left.html.container){
- var nodeLink = parent.environment.getParent().pi.child.get()[0].pi;
- if(d.html.current)d.html.current[1].attribute.removeClass("Selected");
- nodeLink.attribute.addClass("Selected");
-
- d.html.current = [_element,nodeLink];
- d.html.openProperties();
- }
-
- if(element.childNodes&&(element.childNodes.length==0||(element.childNodes.length==1&&element.childNodes[0].nodeType==3)))return;
- parent.clean();
-
- if(parent.opened&&Boolean(_returnParentElementByElement)==false){
- parent.opened = false;
- parent.environment.getParent().pi.child.get()[0].pi.attribute.removeClass("Open");
- return;
- }
- if (parent != el.left.html.container) {
- parent.environment.getParent().pi.child.get()[0].pi.attribute.addClass("Open");
- parent.opened = true;
-
- }
-
- for(var i=0; i<element.childNodes.length; i++){
- var item = element.childNodes[i];
-
- if(item.nodeType==3)continue;
- var container = new pi.element().attribute.addClass("Block").insert(parent);
- var link = new pi.element("A").attribute.addClass("Link").update(d.highlight(item)).insert(container);
- var subContainer = new pi.element("DIV").attribute.addClass("SubContainer").insert(container);
- link.event.addListener("click",d.html.openHtmlTree.curry(window,item,subContainer,false));
- link.event.addListener("mouseover",d.html.highlight.curry(window,item, false));
- link.event.addListener("mouseout",d.html.highlight.curry(window,item,true));
-
- returnParentVal = returnParentEl==item?subContainer:returnParentVal;
-
- if(d.html.current==null&&item==document.body){
- link.attribute.addClass("Selected");
- d.html.current = [item,link];
- d.html.openHtmlTree(item,subContainer);
- }
-
- if(item.childNodes&&item.childNodes.length==1&&item.childNodes[0].nodeType==3){
- link.child.get()[0].appendChild(document.createTextNode(item.childNodes[0].nodeValue.substring(0,100)));
- link.child.get()[0].appendChild(document.createTextNode("</"));
- link.child.get()[0].appendChild(new pi.element("span").attribute.addClass("Blue").update(item.nodeName.toLowerCase()).environment.getElement());
- link.child.get()[0].appendChild(document.createTextNode(">"));
- continue;
- }
- else if(item.childNodes&&item.childNodes.length==0)continue;
- link.attribute.addClass("ParentLink");
-
- }
- return returnParentVal;
- }
- },
- openProperties:function(){
- with(firebug){
-
- var index = d.html.nIndex;
- var node = d.html.current[0];
- d.clean(el.right.html.content);
- var str = "";
- switch(index){
- case "computedStyle":
- var property = ["opacity","filter","azimuth","background","backgroundAttachment","backgroundColor","backgroundImage","backgroundPosition","backgroundRepeat","border","borderCollapse","borderColor","borderSpacing","borderStyle","borderTop","borderRight","borderBottom","borderLeft","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderWidth","bottom","captionSide","clear","clip","color","content","counterIncrement","counterReset","cue","cueAfter","cueBefore","cursor","direction","display","elevation","emptyCells","cssFloat","font","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","height","left","letterSpacing","lineHeight","listStyle","listStyleImage","listStylePosition","listStyleType","margin","marginTop","marginRight","marginBottom","marginLeft","markerOffset","marks","maxHeight","maxWidth","minHeight","minWidth","orphans","outline","outlineColor","outlineStyle","outlineWidth","overflow","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","page","pageBreakAfter","pageBreakBefore","pageBreakInside","pause","pauseAfter","pauseBefore","pitch","pitchRange","playDuring","position","quotes","richness","right","size","speak","speakHeader","speakNumeral","speakPunctuation","speechRate","stress","tableLayout","textAlign","textDecoration","textIndent","textShadow","textTransform","top","unicodeBidi","verticalAlign","visibility","voiceFamily","volume","whiteSpace","widows","width","wordSpacing","zIndex"].sort();
- var view = document.defaultView?document.defaultView.getComputedStyle(node,null):node.currentStyle;
- for(var i=0; i<property.length; i++){
- var item = property[i];
- if(!view[item])continue;
- str+="<div class='CSSItem'><div class='CSSProperty'>"+item+"</div><div class='CSSValue'>"+d.highlight(view[item])+"</div></div>";
- }
- el.right.html.content.update(str);
- break;
- case "dom":
- d.dom.open(node,el.right.html.content,pi.env.ie);
- break;
- }
- }
- }
- },
- inspector:{
- enabled:false,
- el:null,
- inspect:function(_element,_bgInspector){
- var el = _element, top = el.offsetTop, left = el.offsetLeft, parent = _element.offsetParent;
- while(Boolean(parent)&&parent!=document.firstChild){
- top += parent.offsetTop;
- left += parent.offsetLeft;
- parent = parent.offsetParent;
- if(parent==document.body)break;
- };
-
- with(firebug){
- el[_bgInspector?"bgInspector":"borderInspector"].environment.addStyle({
- "width":_element.offsetWidth+"px", "height":_element.offsetHeight+"px",
- "top":top-(_bgInspector?0:2)+"px", "left":left-(_bgInspector?0:2)+"px",
- "display":"block"
- });
-
- if(!_bgInspector){
- d.inspector.el = _element;
- }
- };
- },
- toggle:function(){
- with (firebug) {
- d.inspector.enabled = !d.inspector.enabled;
- el.button.inspect.attribute[(d.inspector.enabled ? "add" : "remove") + "Class"]("Enabled");
- if(d.inspector.enabled==false){
- el.borderInspector.environment.addStyle({ "display":"none" });
- d.inspector.el = null;
- } else if(pi.env.dIndex!="html") {
- d.navigate("html");
- }
- }
- }
- },
- scripts:{
- index:-1,
- lineNumbers:false,
- open:function(_index){
- with(firebug){
- d.scripts.index = _index;
- el.left.scripts.container.update("");
- var script = document.getElementsByTagName("script")[_index],uri = script.src||document.location.href,source;
-
- if(uri.indexOf("http:\/\/")>-1&&getDomain(uri)!=document.domain){
- el.left.scripts.container.update("<em>Access to restricted URI denied</em>");
- return;
- }
-
- if(uri!=document.location.href){
- source = env.cache[uri]||pi.xhr.get(uri).responseText;
- env.cache[uri] = source;
- } else
- source = script.innerHTML;
- source = source.replace(/\n|\t|<|>/g,function(_ch){
- return ({"<":"&#60;",">":"&#62;","\t":"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;","\n":"<br />"})[_ch];
- });
-
- if (!d.scripts.lineNumbers)
- el.left.scripts.container.child.add(
- new pi.element("DIV").attribute.addClass("CodeContainer").update(source)
- );
- else {
- source = source.split("<br />");
- for (var i = 0; i < source.length; i++) {
- el.left.scripts.container.child.add(new pi.element("DIV").child.add(new pi.element("DIV").attribute.addClass("LineNumber").update(i + 1), new pi.element("DIV").attribute.addClass("Code").update("&nbsp;" + source[i]), new pi.element("DIV").environment.addStyle({
- "clear": "both"
- })));
- };
- };
- }
- },
- toggleLineNumbers:function(){
- with(firebug){
- d.scripts.lineNumbers = !d.scripts.lineNumbers;
- el.button.scripts.lineNumbers.attribute[(d.scripts.lineNumbers ? "add" : "remove") + "Class"]("Enabled");
- d.scripts.open( d.scripts.index );
-
- }
- },
- refresh:function(){
- with(firebug){
- el.button.scripts.selectbox.clean();
- var collection = document.getElementsByTagName("script");
- for(var i=0; i<collection.length; i++){
- var item = collection[i];
- d.scripts.index=d.scripts.index<0?i:d.scripts.index;
- el.button.scripts.selectbox.child.add(
- new pi.element("OPTION").attribute.set("value",i).update(item.src||item.baseURI||"..")
- );
- }
- d.scripts.open( d.scripts.index );
- }
- }
- },
- str: {
- open:function(_str){
- with(firebug){
- d.navigate("str");
- el.left.str.container.update(_str.replace(/\n/g,"<br />"))
- }
- }
- },
- xhr:{
- objects:[],
- addObject:function(){
- with(firebug){
- for(var i=0; i<arguments.length; i++){
- try {
- var item = arguments[i];
- var val = eval(item);
- d.xhr.objects.push([
- item, val
- ]);
- } catch(e){
- continue;
- }
- }
- }
- },
- open:function(){
- with(firebug){
- el.left.xhr.container.update("");
- el.left.xhr.name = new pi.element("DIV").attribute.addClass("BlockContent").insert(new pi.element("DIV").attribute.addClass("Block").environment.addStyle({ "width":"20%" }).insert(el.left.xhr.container));
- el.left.xhr.nameTitle = new pi.element("STRONG").update("Object Name:").insert(el.left.xhr.name);
- el.left.xhr.nameContent = new pi.element("DIV").insert(el.left.xhr.name);
- el.left.xhr.status = new pi.element("DIV").attribute.addClass("BlockContent").insert(new pi.element("DIV").attribute.addClass("Block").environment.addStyle({ "width":"10%" }).insert(el.left.xhr.container));
- el.left.xhr.statusTitle = new pi.element("STRONG").update("Status:").insert(el.left.xhr.status);
- el.left.xhr.statusContent = new pi.element("DIV").insert(el.left.xhr.status);
- el.left.xhr.readystate = new pi.element("DIV").attribute.addClass("BlockContent").insert(new pi.element("DIV").environment.addStyle({ "width":"15%" }).attribute.addClass("Block").insert(el.left.xhr.container));
- el.left.xhr.readystateTitle =el.left.xhr.nameTitle = new pi.element("STRONG").update("Ready State:").insert(el.left.xhr.readystate);
- el.left.xhr.readystateContent = new pi.element("DIV").insert(el.left.xhr.readystate);
- el.left.xhr.response = new pi.element("DIV").attribute.addClass("BlockContent").insert(new pi.element("DIV").environment.addStyle({ "width":(pi.env.ie?"50":"55")+"%" }).attribute.addClass("Block").insert(el.left.xhr.container));
- el.left.xhr.responseTitle = new pi.element("STRONG").update("Response:").insert(el.left.xhr.response);
- el.left.xhr.responseContent = new pi.element("DIV").insert(el.left.xhr.response);
- setTimeout(d.xhr.refresh,500);
- }
- },
- refresh:function(){
- with(firebug){
- el.left.xhr.nameContent.update("");
- el.left.xhr.statusContent.update("");
- el.left.xhr.readystateContent.update("");
- el.left.xhr.responseContent.update("");
- for(var i=0; i<d.xhr.objects.length; i++){
- var item = d.xhr.objects[i];
- var response = item[1].responseText;
- if(Boolean(item[1])==false)continue;
- el.left.xhr.nameContent.child.add(new pi.element("span").update(item[0]));
- try { 
- el.left.xhr.statusContent.child.add(new pi.element("span").update(item[1].status));
- } catch(e){ el.left.xhr.statusContent.child.add(new pi.element("span").update("&nbsp;")); }
- el.left.xhr.readystateContent.child.add(new pi.element("span").update(item[1].readyState));
-
- el.left.xhr.responseContent.child.add(new pi.element("span").child.add(
- new pi.element("A").event.addListener("click",d.str.open.curry(window,response)).update("&nbsp;"+response.substring(0,50))
- ));
- };
- if(env.dIndex=="xhr")
- setTimeout(d.xhr.refresh,500);
- }
- }
- },
- navigateRightColumn:function(_index,_open){
- with(firebug){
- el.left.container.environment.addStyle({ "width":_open?"70%":"100%" });
- el.right.container.environment.addStyle({ "display":_open?"block":"none" });
- }
- },
- navigate:function(_index){
- with(firebug){
-
- var open = _index, close = env.dIndex;
- env.dIndex = open;
-
- el.button[close].container.environment.addStyle({ "display":"none" });
- el.left[close].container.environment.addStyle({ "display":"none" });
- el.right[close].container.environment.addStyle({ "display":"none" });
-
- el.button[open].container.environment.addStyle({ "display":"inline" });
- el.left[open].container.environment.addStyle({ "display":"block" });
- el.right[open].container.environment.addStyle({ "display":"block" });
-
- if(el.nav[close])
- el.nav[close].attribute.removeClass("Selected");
- if(el.nav[open])
- el.nav[open].attribute.addClass("Selected");
-
- switch(open){
- case "console":
- d.navigateRightColumn(_index);
- break;
- case "html":
- d.navigateRightColumn(_index,true);
- d.html.openHtmlTree();
- break;
- case "css":
- d.navigateRightColumn(_index,true);
- d.css.refresh();
- break;
- case "scripts":
- d.navigateRightColumn(_index);
- d.scripts.refresh();
- break;
- case "dom":
- d.navigateRightColumn(_index);
- if(el.left.dom.container.environment.getElement().innerHTML=="")
- d.dom.open(eval(el.button.dom.textbox.environment.getElement().value),el.left.dom.container);
- break;
- case "xhr":
- d.navigateRightColumn(_index);
- d.xhr.open();
- break;
- }
-
- }
- },
- refreshSize:function(){
- with(firebug){
- el.main.environment.addStyle({ "width":pi.util.GetWindowSize().width+"px"});
- if(pi.env.ie6)
- el.main.environment.addStyle({ "top":pi.util.GetWindowSize().height-el.main.environment.getSize().offsetHeight+"px" });
- }
- }
- },
- getDomain:function(_url){
- return _url.match(/http:\/\/(www.)?([\.\w]+)/)[2];
- },
- listen: {
- addXhrObject:function(){
- with(firebug){
- d.xhr.addObject.apply(window, el.button.xhr.textbox.environment.getElement().value.split(","));
- }
- },
- consoleTextbox:function(_event){
- with(firebug){
- if(_event.keyCode==13&&(env.multilinemode==false||_event.shiftKey==false)){
- d.console.historyIndex = d.console.history.length;
- d.console.run(el.left.console.input.environment.getElement().value);
- return false;
- }
- if([13,38,40].indexOf(_event.keyCode)==-1)
- return;
- d.console.historyIndex+=_event.keyCode!=40?0:d.console.historyIndex==d.console.history.length?0:1;
- d.console.historyIndex-=_event.keyCode!=38?0:d.console.historyIndex==0?0:1;
- el.left.console.input.update(
- d.console.history.length > d.console.historyIndex ?
- d.console.history[d.console.historyIndex] :
- ""
- );
- }
- },
- cssSelectbox:function(){
- with(firebug){
- d.css.open(el.button.css.selectbox.environment.getElement().selectedIndex);
- }
- },
- domTextbox:function(_event){
- with(firebug){
- if(_event.keyCode==13){
- d.dom.open(eval(el.button.dom.textbox.environment.getElement().value),el.left.dom.container);
- }
- }
- },
- inspector:function(){
- with(firebug){
- d.html.inspect(d.inspector.el);
- }
- },
- keyboard:function(_event){
- with(firebug){
- if(_event.keyCode==27&&d.inspector.enabled)
- d.inspector.toggle();
- }
- },
- mouse:function(_event){
- with(firebug){
- var target = _event[pi.env.ie?"srcElement":"target"];
- if(
- d.inspector.enabled&&
- target!=document.body&&
- target!=document.firstChild&&
- target!=document.childNodes[1]&&
- target!=el.borderInspector.environment.getElement()&&
- target!=el.main.environment.getElement()&&
- target.offsetParent!=el.main.environment.getElement()
- )
- d.inspector.inspect(target);
- }
- },
- runMultiline:function(){
- with(firebug){
- d.console.run.call(window,el.right.console.input.environment.getElement().value);
- }
- },
- runCSS:function(){
- with(firebug){
- var source = el.right.css.input.environment.getElement().value.replace(/\n|\t/g,"").split("}");
- for(var i=0; i<source.length; i++){
- var item = source[i]+"}", rule = !pi.env.ie?item:item.split(/{|}/), collection = document.getElementsByTagName("style"),
- style = collection.length>0?collection[0]:document.body.appendChild( document.createElement("style") );
- if(!item.match(/.+\{.+\}/))continue;
- if(pi.env.ie)
- style.styleSheet.addRule(rule[0],rule[1]);
- else
- style.sheet.insertRule( rule, style.sheet.cssRules.length );
- }
- }
- },
- scriptsSelectbox:function(){
- with(firebug){
- d.scripts.open(parseInt(el.button.scripts.selectbox.environment.getElement().value));
- }
- },
- xhrTextbox:function(_event){
- with(firebug){
- if(_event.keyCode==13){
- d.xhr.addObject.apply(window, el.button.xhr.textbox.environment.getElement().value.split(","));
- }
- }
- }
- }
-};
-
-window.console = firebug.d.console;
-pi.util.AddEvent(window,"resize",firebug.d.refreshSize);
-pi.util.AddEvent(document,"mousemove",firebug.listen.mouse);
-pi.util.AddEvent(document,"keydown",firebug.listen.keyboard);
-pi.util.DOMContentLoaded.push(firebug.init); \ No newline at end of file
diff --git a/usr/local/www/javascript/firewall_nat_edit/autosuggest.js b/usr/local/www/javascript/firewall_nat_edit/autosuggest.js
deleted file mode 100644
index d9b5ac0..0000000
--- a/usr/local/www/javascript/firewall_nat_edit/autosuggest.js
+++ /dev/null
@@ -1,337 +0,0 @@
-
-/**
- * An autosuggest textbox control.
- * @class
- * @scope public
- */
-function AutoSuggestControl(oTextbox /*:HTMLInputElement*/,
- oProvider /*:SuggestionProvider*/) {
-
- /**
- * The currently selected suggestions.
- * @scope private
- */
- this.cur /*:int*/ = -1;
-
- /**
- * The dropdown list layer.
- * @scope private
- */
- this.layer = null;
-
- /**
- * Suggestion provider for the autosuggest feature.
- * @scope private.
- */
- this.provider /*:SuggestionProvider*/ = oProvider;
-
- /**
- * The textbox to capture.
- * @scope private
- */
- this.textbox /*:HTMLInputElement*/ = oTextbox;
-
- //initialize the control
- this.init();
-
-}
-
-/**
- * Autosuggests one or more suggestions for what the user has typed.
- * If no suggestions are passed in, then no autosuggest occurs.
- * @scope private
- * @param aSuggestions An array of suggestion strings.
- * @param bTypeAhead If the control should provide a type ahead suggestion.
- */
-AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/,
- bTypeAhead /*:boolean*/) {
-
- //make sure there's at least one suggestion
- if (aSuggestions.length > 0) {
- if (bTypeAhead) {
- this.typeAhead(aSuggestions[0]);
- }
-
- this.showSuggestions(aSuggestions);
- } else {
- this.hideSuggestions();
- }
-};
-
-/**
- * Creates the dropdown layer to display multiple suggestions.
- * @scope private
- */
-AutoSuggestControl.prototype.createDropDown = function () {
-
- var oThis = this;
-
- //create the layer and assign styles
- this.layer = document.createElement("div");
- this.layer.className = "suggestions";
- this.layer.style.visibility = "hidden";
- this.layer.style.width = this.textbox.offsetWidth;
-
- //when the user clicks on the a suggestion, get the text (innerHTML)
- //and place it into a textbox
- this.layer.onmousedown =
- this.layer.onmouseup =
- this.layer.onmouseover = function (oEvent) {
- oEvent = oEvent || window.event;
- oTarget = oEvent.target || oEvent.srcElement;
-
- if (oEvent.type == "mousedown") {
- oThis.textbox.value = oTarget.firstChild.nodeValue;
- oThis.hideSuggestions();
- } else if (oEvent.type == "mouseover") {
- oThis.highlightSuggestion(oTarget);
- } else {
- oThis.textbox.focus();
- }
- };
-
-
- document.body.appendChild(this.layer);
-};
-
-/**
- * Gets the left coordinate of the textbox.
- * @scope private
- * @return The left coordinate of the textbox in pixels.
- */
-AutoSuggestControl.prototype.getLeft = function () /*:int*/ {
-
- var oNode = this.textbox;
- var iLeft = 0;
-
- while(oNode.tagName != "BODY") {
- iLeft += oNode.offsetLeft;
- oNode = oNode.offsetParent;
- }
-
- return iLeft;
-};
-
-/**
- * Gets the top coordinate of the textbox.
- * @scope private
- * @return The top coordinate of the textbox in pixels.
- */
-AutoSuggestControl.prototype.getTop = function () /*:int*/ {
-
- var oNode = this.textbox;
- var iTop = 0;
-
- while(oNode.tagName != "BODY") {
- iTop += oNode.offsetTop;
- oNode = oNode.offsetParent;
- }
-
- return iTop;
-};
-
-/**
- * Handles three keydown events.
- * @scope private
- * @param oEvent The event object for the keydown event.
- */
-AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) {
-
- switch(oEvent.keyCode) {
- case 38: //up arrow
- this.previousSuggestion();
- break;
- case 40: //down arrow
- this.nextSuggestion();
- break;
- case 13: //enter
- this.hideSuggestions();
- break;
- }
-
-};
-
-/**
- * Handles keyup events.
- * @scope private
- * @param oEvent The event object for the keyup event.
- */
-AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) {
-
- var iKeyCode = oEvent.keyCode;
-
- //for backspace (8) and delete (46), shows suggestions without typeahead
- if (iKeyCode == 8 || iKeyCode == 46) {
- this.provider.requestSuggestions(this, false);
-
- //make sure not to interfere with non-character keys
- } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
- //ignore
- } else {
- //request suggestions from the suggestion provider with typeahead
- this.provider.requestSuggestions(this, true);
- }
-};
-
-/**
- * Hides the suggestion dropdown.
- * @scope private
- */
-AutoSuggestControl.prototype.hideSuggestions = function () {
- this.layer.style.visibility = "hidden";
-};
-
-/**
- * Highlights the given node in the suggestions dropdown.
- * @scope private
- * @param oSuggestionNode The node representing a suggestion in the dropdown.
- */
-AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) {
-
- for (var i=0; i < this.layer.childNodes.length; i++) {
- var oNode = this.layer.childNodes[i];
- if (oNode == oSuggestionNode) {
- oNode.className = "current";
- } else if (oNode.className == "current") {
- oNode.className = "";
- }
- }
-};
-
-/**
- * Initializes the textbox with event handlers for
- * auto suggest functionality.
- * @scope private
- */
-AutoSuggestControl.prototype.init = function () {
-
- //save a reference to this object
- var oThis = this;
-
- //assign the onkeyup event handler
- this.textbox.onkeyup = function (oEvent) {
-
- //check for the proper location of the event object
- if (!oEvent) {
- oEvent = window.event;
- }
-
- //call the handleKeyUp() method with the event object
- oThis.handleKeyUp(oEvent);
- };
-
- //assign onkeydown event handler
- this.textbox.onkeydown = function (oEvent) {
-
- //check for the proper location of the event object
- if (!oEvent) {
- oEvent = window.event;
- }
-
- //call the handleKeyDown() method with the event object
- oThis.handleKeyDown(oEvent);
- };
-
- //assign onblur event handler (hides suggestions)
- this.textbox.onblur = function () {
- oThis.hideSuggestions();
- };
-
- //create the suggestions dropdown
- this.createDropDown();
-};
-
-/**
- * Highlights the next suggestion in the dropdown and
- * places the suggestion into the textbox.
- * @scope private
- */
-AutoSuggestControl.prototype.nextSuggestion = function () {
- var cSuggestionNodes = this.layer.childNodes;
-
- if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) {
- var oNode = cSuggestionNodes[++this.cur];
- this.highlightSuggestion(oNode);
- this.textbox.value = oNode.firstChild.nodeValue;
- }
-};
-
-/**
- * Highlights the previous suggestion in the dropdown and
- * places the suggestion into the textbox.
- * @scope private
- */
-AutoSuggestControl.prototype.previousSuggestion = function () {
- var cSuggestionNodes = this.layer.childNodes;
-
- if (cSuggestionNodes.length > 0 && this.cur > 0) {
- var oNode = cSuggestionNodes[--this.cur];
- this.highlightSuggestion(oNode);
- this.textbox.value = oNode.firstChild.nodeValue;
- }
-};
-
-/**
- * Selects a range of text in the textbox.
- * @scope public
- * @param iStart The start index (base 0) of the selection.
- * @param iLength The number of characters to select.
- */
-AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) {
-
- //use text ranges for Internet Explorer
- if (this.textbox.createTextRange) {
- var oRange = this.textbox.createTextRange();
- oRange.moveStart("character", iStart);
- oRange.moveEnd("character", iLength - this.textbox.value.length);
- oRange.select();
-
- //use setSelectionRange() for Mozilla
- } else if (this.textbox.setSelectionRange) {
- this.textbox.setSelectionRange(iStart, iLength);
- }
-
- //set focus back to the textbox
- this.textbox.focus();
-};
-
-/**
- * Builds the suggestion layer contents, moves it into position,
- * and displays the layer.
- * @scope private
- * @param aSuggestions An array of suggestions for the control.
- */
-AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) {
-
- var oDiv = null;
- this.layer.innerHTML = ""; //clear contents of the layer
-
- for (var i=0; i < aSuggestions.length; i++) {
- oDiv = document.createElement("div");
- oDiv.appendChild(document.createTextNode(aSuggestions[i]));
- this.layer.appendChild(oDiv);
- }
-
- this.layer.style.left = this.getLeft() + "px";
- this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px";
- this.layer.style.width = this.textbox.offsetWidth + "px";
- this.layer.style.visibility = "visible";
-
-};
-
-/**
- * Inserts a suggestion into the textbox, highlighting the
- * suggested part of the text.
- * @scope private
- * @param sSuggestion The suggestion for the textbox.
- */
-AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) {
-
- //check for support of typeahead functionality
- if (this.textbox.createTextRange || this.textbox.setSelectionRange){
- var iLen = this.textbox.value.length;
- this.textbox.value = sSuggestion;
- this.selectRange(iLen, sSuggestion.length);
- }
-};
-
diff --git a/usr/local/www/javascript/firewall_nat_edit/disablekeys.js b/usr/local/www/javascript/firewall_nat_edit/disablekeys.js
deleted file mode 100644
index 5d6c87a..0000000
--- a/usr/local/www/javascript/firewall_nat_edit/disablekeys.js
+++ /dev/null
@@ -1,6 +0,0 @@
-function kH(e) {
- var pK = document.all? window.event.keyCode:e.which;
- return pK != 13;
-}
-document.onkeypress = kH;
-if (document.layers) document.captureEvents(Event.KEYPRESS); \ No newline at end of file
diff --git a/usr/local/www/javascript/firewall_nat_edit/firewall_nat_edit.js b/usr/local/www/javascript/firewall_nat_edit/firewall_nat_edit.js
deleted file mode 100644
index 7007b40..0000000
--- a/usr/local/www/javascript/firewall_nat_edit/firewall_nat_edit.js
+++ /dev/null
@@ -1,203 +0,0 @@
-//<![CDATA[
-var portsenabled = 1;
-var dstenabled = 1;
-var showsource = 0;
-
-function ext_change() {
- if ((document.iform.srcbeginport.selectedIndex == 0) && portsenabled) {
- document.iform.srcbeginport_cust.disabled = 0;
- } else {
- document.iform.srcbeginport_cust.value = "";
- document.iform.srcbeginport_cust.disabled = 1;
- }
- if ((document.iform.srcendport.selectedIndex == 0) && portsenabled) {
- document.iform.srcendport_cust.disabled = 0;
- } else {
- document.iform.srcendport_cust.value = "";
- document.iform.srcendport_cust.disabled = 1;
- }
- if ((document.iform.dstbeginport.selectedIndex == 0) && portsenabled && dstenabled) {
- document.iform.dstbeginport_cust.disabled = 0;
- } else {
- document.iform.dstbeginport_cust.value = "";
- document.iform.dstbeginport_cust.disabled = 1;
- }
- if ((document.iform.dstendport.selectedIndex == 0) && portsenabled && dstenabled) {
- document.iform.dstendport_cust.disabled = 0;
- } else {
- document.iform.dstendport_cust.value = "";
- document.iform.dstendport_cust.disabled = 1;
- }
-
- if ((document.iform.localbeginport.selectedIndex == 0) && portsenabled) {
- document.iform.localbeginport_cust.disabled = 0;
- } else {
- document.iform.localbeginport_cust.value = "";
- document.iform.localbeginport_cust.disabled = 1;
- }
-
- if (!portsenabled) {
- document.iform.srcbeginport.disabled = 1;
- document.iform.srcendport.disabled = 1;
- document.iform.dstbeginport.disabled = 1;
- document.iform.dstendport.disabled = 1;
- document.iform.localbeginport_cust.disabled = 1;
- } else {
- document.iform.srcbeginport.disabled = 0;
- document.iform.srcendport.disabled = 0;
- document.iform.localbeginport_cust.disabled = 0;
- if( dstenabled ) {
- document.iform.dstbeginport.disabled = 0;
- document.iform.dstendport.disabled = 0;
- }
- }
-}
-
-function nordr_change() {
- if (document.iform.nordr.checked) {
- document.getElementById("localiptable").style.display = 'none';
- document.getElementById("lprtr").style.display = 'none';
- document.getElementById("assoctable").style.display = 'none';
- } else {
- document.getElementById("localiptable").style.display = '';
- document.getElementById("lprtr").style.display = portsenabled ? '' : 'none';
- document.getElementById("assoctable").style.display = '';
- }
-}
-
-function show_source() {
- if(portsenabled)
- document.getElementById("sprtable").style.display = '';
-
- document.getElementById("srctable").style.display = '';
- document.getElementById("showadvancedboxsrc").style.display = 'none';
- showsource = 1;
-}
-
-function check_for_aliases() {
- /* if External port range is an alias, then disallow
- * entry of Local port
- */
- for(i=0; i<customarray.length; i++) {
- if(document.iform.dstbeginport_cust.value == customarray[i]) {
- document.iform.dstendport_cust.value = customarray[i];
- document.iform.localbeginport_cust.value = customarray[i];
- document.iform.dstendport_cust.disabled = 1;
- document.iform.localbeginport.disabled = 1;
- document.iform.localbeginport_cust.disabled = 1;
- document.iform.dstendport_cust.disabled = 0;
- document.iform.localbeginport.disabled = 0;
- document.iform.localbeginport_cust.disabled = 0;
- }
- if(document.iform.dstbeginport.value == customarray[i]) {
- document.iform.dstendport_cust.value = customarray[i];
- document.iform.localbeginport_cust.value = customarray[i];
- document.iform.dstendport_cust.disabled = 1;
- document.iform.localbeginport.disabled = 1;
- document.iform.localbeginport_cust.disabled = 1;
- document.iform.dstendport_cust.disabled = 0;
- document.iform.localbeginport.disabled = 0;
- document.iform.localbeginport_cust.disabled = 0;
- }
- if(document.iform.dstendport_cust.value == customarray[i]) {
- document.iform.dstendport_cust.value = customarray[i];
- document.iform.localbeginport_cust.value = customarray[i];
- document.iform.dstendport_cust.disabled = 1;
- document.iform.localbeginport.disabled = 1;
- document.iform.localbeginport_cust.disabled = 1;
- document.iform.dstendport_cust.disabled = 0;
- document.iform.localbeginport.disabled = 0;
- document.iform.localbeginport_cust.disabled = 0;
- }
- if(document.iform.dstendport.value == customarray[i]) {
- document.iform.dstendport_cust.value = customarray[i];
- document.iform.localbeginport_cust.value = customarray[i];
- document.iform.dstendport_cust.disabled = 1;
- document.iform.localbeginport.disabled = 1;
- document.iform.localbeginport_cust.disabled = 1;
- document.iform.dstendport_cust.disabled = 0;
- document.iform.localbeginport.disabled = 0;
- document.iform.localbeginport_cust.disabled = 0;
- }
-
- }
-}
-
-function proto_change() {
- if (document.iform.proto.selectedIndex >= 0 && document.iform.proto.selectedIndex <= 2) {
- portsenabled = 1;
- } else {
- portsenabled = 0;
- }
-
- if (portsenabled) {
- document.getElementById("sprtable").style.display = showsource == 1 ? '':'none';
- document.getElementById("dprtr").style.display = '';
- document.getElementById("lprtr").style.display = document.iform.nordr.checked ? 'none' : '';
- } else {
- document.getElementById("sprtable").style.display = 'none';
- document.getElementById("dprtr").style.display = 'none';
- document.getElementById("lprtr").style.display = 'none';
- document.getElementById("dstbeginport").selectedIndex = 0;
- document.getElementById("dstbeginport_cust").value = "";
- document.getElementById("dstendport").selectedIndex = 0;
- document.getElementById("dstendport_cust").value = "";
- document.getElementById("localbeginport").selectedIndex = 0;
- document.getElementById("localbeginport_cust").value = "";
- }
-}
-
-function typesel_change() {
- switch (document.iform.srctype.selectedIndex) {
- case 1: /* single */
- document.iform.src.disabled = 0;
- document.iform.srcmask.value = "";
- document.iform.srcmask.disabled = 1;
- break;
- case 2: /* network */
- document.iform.src.disabled = 0;
- document.iform.srcmask.disabled = 0;
- break;
- default:
- document.iform.src.value = "";
- document.iform.src.disabled = 1;
- document.iform.srcmask.value = "";
- document.iform.srcmask.disabled = 1;
- break;
- }
- if( dstenabled )
- {
- switch (document.iform.dsttype.selectedIndex) {
- case 1: /* single */
- document.iform.dst.disabled = 0;
- document.iform.dstmask.value = "";
- document.iform.dstmask.disabled = 1;
- break;
- case 2: /* network */
- document.iform.dst.disabled = 0;
- document.iform.dstmask.disabled = 0;
- break;
- default:
- document.iform.dst.value = "";
- document.iform.dst.disabled = 1;
- document.iform.dstmask.value = "";
- document.iform.dstmask.disabled = 1;
- break;
- }
- }
-}
-
-function src_rep_change() {
- document.iform.srcendport.selectedIndex = document.iform.srcbeginport.selectedIndex;
-}
-
-function dst_rep_change() {
- document.iform.dstendport.selectedIndex = document.iform.dstbeginport.selectedIndex;
-}
-
-function dst_change( iface, old_iface, old_dst ) {
- if ( ( old_dst == "" ) || ( old_iface.concat("ip") == old_dst ) ) {
- document.iform.dsttype.value = iface.concat("ip");
- }
-}
-//]]>
diff --git a/usr/local/www/javascript/firewall_nat_edit/suggestions.js b/usr/local/www/javascript/firewall_nat_edit/suggestions.js
deleted file mode 100644
index 4d1e127..0000000
--- a/usr/local/www/javascript/firewall_nat_edit/suggestions.js
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/**
- * Provides suggestions for state names (USA).
- * @class
- * @scope public
- */
-function StateSuggestions(text) {
- this.states = text;
-}
-
-/**
- * Request suggestions for the given autosuggest control.
- * @scope protected
- * @param oAutoSuggestControl The autosuggest control to provide suggestions for.
- */
-StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,
- bTypeAhead /*:boolean*/) {
- var aSuggestions = [];
- var sTextboxValue = oAutoSuggestControl.textbox.value;
-
- if (sTextboxValue.length > 0){
-
- //search for matching states
- for (var i=0; i < this.states.length; i++) {
- if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) {
- aSuggestions.push(this.states[i]);
- }
- }
- }
-
- //provide suggestions to the control
- oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
-};
diff --git a/usr/local/www/javascript/firewall_rules_edit/autosuggest.js b/usr/local/www/javascript/firewall_rules_edit/autosuggest.js
deleted file mode 100644
index d9b5ac0..0000000
--- a/usr/local/www/javascript/firewall_rules_edit/autosuggest.js
+++ /dev/null
@@ -1,337 +0,0 @@
-
-/**
- * An autosuggest textbox control.
- * @class
- * @scope public
- */
-function AutoSuggestControl(oTextbox /*:HTMLInputElement*/,
- oProvider /*:SuggestionProvider*/) {
-
- /**
- * The currently selected suggestions.
- * @scope private
- */
- this.cur /*:int*/ = -1;
-
- /**
- * The dropdown list layer.
- * @scope private
- */
- this.layer = null;
-
- /**
- * Suggestion provider for the autosuggest feature.
- * @scope private.
- */
- this.provider /*:SuggestionProvider*/ = oProvider;
-
- /**
- * The textbox to capture.
- * @scope private
- */
- this.textbox /*:HTMLInputElement*/ = oTextbox;
-
- //initialize the control
- this.init();
-
-}
-
-/**
- * Autosuggests one or more suggestions for what the user has typed.
- * If no suggestions are passed in, then no autosuggest occurs.
- * @scope private
- * @param aSuggestions An array of suggestion strings.
- * @param bTypeAhead If the control should provide a type ahead suggestion.
- */
-AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/,
- bTypeAhead /*:boolean*/) {
-
- //make sure there's at least one suggestion
- if (aSuggestions.length > 0) {
- if (bTypeAhead) {
- this.typeAhead(aSuggestions[0]);
- }
-
- this.showSuggestions(aSuggestions);
- } else {
- this.hideSuggestions();
- }
-};
-
-/**
- * Creates the dropdown layer to display multiple suggestions.
- * @scope private
- */
-AutoSuggestControl.prototype.createDropDown = function () {
-
- var oThis = this;
-
- //create the layer and assign styles
- this.layer = document.createElement("div");
- this.layer.className = "suggestions";
- this.layer.style.visibility = "hidden";
- this.layer.style.width = this.textbox.offsetWidth;
-
- //when the user clicks on the a suggestion, get the text (innerHTML)
- //and place it into a textbox
- this.layer.onmousedown =
- this.layer.onmouseup =
- this.layer.onmouseover = function (oEvent) {
- oEvent = oEvent || window.event;
- oTarget = oEvent.target || oEvent.srcElement;
-
- if (oEvent.type == "mousedown") {
- oThis.textbox.value = oTarget.firstChild.nodeValue;
- oThis.hideSuggestions();
- } else if (oEvent.type == "mouseover") {
- oThis.highlightSuggestion(oTarget);
- } else {
- oThis.textbox.focus();
- }
- };
-
-
- document.body.appendChild(this.layer);
-};
-
-/**
- * Gets the left coordinate of the textbox.
- * @scope private
- * @return The left coordinate of the textbox in pixels.
- */
-AutoSuggestControl.prototype.getLeft = function () /*:int*/ {
-
- var oNode = this.textbox;
- var iLeft = 0;
-
- while(oNode.tagName != "BODY") {
- iLeft += oNode.offsetLeft;
- oNode = oNode.offsetParent;
- }
-
- return iLeft;
-};
-
-/**
- * Gets the top coordinate of the textbox.
- * @scope private
- * @return The top coordinate of the textbox in pixels.
- */
-AutoSuggestControl.prototype.getTop = function () /*:int*/ {
-
- var oNode = this.textbox;
- var iTop = 0;
-
- while(oNode.tagName != "BODY") {
- iTop += oNode.offsetTop;
- oNode = oNode.offsetParent;
- }
-
- return iTop;
-};
-
-/**
- * Handles three keydown events.
- * @scope private
- * @param oEvent The event object for the keydown event.
- */
-AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) {
-
- switch(oEvent.keyCode) {
- case 38: //up arrow
- this.previousSuggestion();
- break;
- case 40: //down arrow
- this.nextSuggestion();
- break;
- case 13: //enter
- this.hideSuggestions();
- break;
- }
-
-};
-
-/**
- * Handles keyup events.
- * @scope private
- * @param oEvent The event object for the keyup event.
- */
-AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) {
-
- var iKeyCode = oEvent.keyCode;
-
- //for backspace (8) and delete (46), shows suggestions without typeahead
- if (iKeyCode == 8 || iKeyCode == 46) {
- this.provider.requestSuggestions(this, false);
-
- //make sure not to interfere with non-character keys
- } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
- //ignore
- } else {
- //request suggestions from the suggestion provider with typeahead
- this.provider.requestSuggestions(this, true);
- }
-};
-
-/**
- * Hides the suggestion dropdown.
- * @scope private
- */
-AutoSuggestControl.prototype.hideSuggestions = function () {
- this.layer.style.visibility = "hidden";
-};
-
-/**
- * Highlights the given node in the suggestions dropdown.
- * @scope private
- * @param oSuggestionNode The node representing a suggestion in the dropdown.
- */
-AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) {
-
- for (var i=0; i < this.layer.childNodes.length; i++) {
- var oNode = this.layer.childNodes[i];
- if (oNode == oSuggestionNode) {
- oNode.className = "current";
- } else if (oNode.className == "current") {
- oNode.className = "";
- }
- }
-};
-
-/**
- * Initializes the textbox with event handlers for
- * auto suggest functionality.
- * @scope private
- */
-AutoSuggestControl.prototype.init = function () {
-
- //save a reference to this object
- var oThis = this;
-
- //assign the onkeyup event handler
- this.textbox.onkeyup = function (oEvent) {
-
- //check for the proper location of the event object
- if (!oEvent) {
- oEvent = window.event;
- }
-
- //call the handleKeyUp() method with the event object
- oThis.handleKeyUp(oEvent);
- };
-
- //assign onkeydown event handler
- this.textbox.onkeydown = function (oEvent) {
-
- //check for the proper location of the event object
- if (!oEvent) {
- oEvent = window.event;
- }
-
- //call the handleKeyDown() method with the event object
- oThis.handleKeyDown(oEvent);
- };
-
- //assign onblur event handler (hides suggestions)
- this.textbox.onblur = function () {
- oThis.hideSuggestions();
- };
-
- //create the suggestions dropdown
- this.createDropDown();
-};
-
-/**
- * Highlights the next suggestion in the dropdown and
- * places the suggestion into the textbox.
- * @scope private
- */
-AutoSuggestControl.prototype.nextSuggestion = function () {
- var cSuggestionNodes = this.layer.childNodes;
-
- if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) {
- var oNode = cSuggestionNodes[++this.cur];
- this.highlightSuggestion(oNode);
- this.textbox.value = oNode.firstChild.nodeValue;
- }
-};
-
-/**
- * Highlights the previous suggestion in the dropdown and
- * places the suggestion into the textbox.
- * @scope private
- */
-AutoSuggestControl.prototype.previousSuggestion = function () {
- var cSuggestionNodes = this.layer.childNodes;
-
- if (cSuggestionNodes.length > 0 && this.cur > 0) {
- var oNode = cSuggestionNodes[--this.cur];
- this.highlightSuggestion(oNode);
- this.textbox.value = oNode.firstChild.nodeValue;
- }
-};
-
-/**
- * Selects a range of text in the textbox.
- * @scope public
- * @param iStart The start index (base 0) of the selection.
- * @param iLength The number of characters to select.
- */
-AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) {
-
- //use text ranges for Internet Explorer
- if (this.textbox.createTextRange) {
- var oRange = this.textbox.createTextRange();
- oRange.moveStart("character", iStart);
- oRange.moveEnd("character", iLength - this.textbox.value.length);
- oRange.select();
-
- //use setSelectionRange() for Mozilla
- } else if (this.textbox.setSelectionRange) {
- this.textbox.setSelectionRange(iStart, iLength);
- }
-
- //set focus back to the textbox
- this.textbox.focus();
-};
-
-/**
- * Builds the suggestion layer contents, moves it into position,
- * and displays the layer.
- * @scope private
- * @param aSuggestions An array of suggestions for the control.
- */
-AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) {
-
- var oDiv = null;
- this.layer.innerHTML = ""; //clear contents of the layer
-
- for (var i=0; i < aSuggestions.length; i++) {
- oDiv = document.createElement("div");
- oDiv.appendChild(document.createTextNode(aSuggestions[i]));
- this.layer.appendChild(oDiv);
- }
-
- this.layer.style.left = this.getLeft() + "px";
- this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px";
- this.layer.style.width = this.textbox.offsetWidth + "px";
- this.layer.style.visibility = "visible";
-
-};
-
-/**
- * Inserts a suggestion into the textbox, highlighting the
- * suggested part of the text.
- * @scope private
- * @param sSuggestion The suggestion for the textbox.
- */
-AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) {
-
- //check for support of typeahead functionality
- if (this.textbox.createTextRange || this.textbox.setSelectionRange){
- var iLen = this.textbox.value.length;
- this.textbox.value = sSuggestion;
- this.selectRange(iLen, sSuggestion.length);
- }
-};
-
diff --git a/usr/local/www/javascript/firewall_rules_edit/disablekeys.js b/usr/local/www/javascript/firewall_rules_edit/disablekeys.js
deleted file mode 100644
index 5d6c87a..0000000
--- a/usr/local/www/javascript/firewall_rules_edit/disablekeys.js
+++ /dev/null
@@ -1,6 +0,0 @@
-function kH(e) {
- var pK = document.all? window.event.keyCode:e.which;
- return pK != 13;
-}
-document.onkeypress = kH;
-if (document.layers) document.captureEvents(Event.KEYPRESS); \ No newline at end of file
diff --git a/usr/local/www/javascript/firewall_rules_edit/firewall_rules_edit.js b/usr/local/www/javascript/firewall_rules_edit/firewall_rules_edit.js
deleted file mode 100644
index de1ff0c..0000000
--- a/usr/local/www/javascript/firewall_rules_edit/firewall_rules_edit.js
+++ /dev/null
@@ -1,237 +0,0 @@
-//<![CDATA[
-var portsenabled = 1;
-var editenabled = 1;
-
-function ext_change() {
- if ((document.iform.srcbeginport.selectedIndex == 0) && portsenabled && editenabled) {
- document.iform.srcbeginport_cust.disabled = 0;
- } else {
- if (editenabled)
- document.iform.srcbeginport_cust.value = "";
- document.iform.srcbeginport_cust.disabled = 1;
- }
- if ((document.iform.srcendport.selectedIndex == 0) && portsenabled && editenabled) {
- document.iform.srcendport_cust.disabled = 0;
- } else {
- if (editenabled)
- document.iform.srcendport_cust.value = "";
- document.iform.srcendport_cust.disabled = 1;
- }
- if ((document.iform.dstbeginport.selectedIndex == 0) && portsenabled && editenabled) {
- document.iform.dstbeginport_cust.disabled = 0;
- } else {
- if (editenabled)
- document.iform.dstbeginport_cust.value = "";
- document.iform.dstbeginport_cust.disabled = 1;
- }
- if ((document.iform.dstendport.selectedIndex == 0) && portsenabled && editenabled) {
- document.iform.dstendport_cust.disabled = 0;
- } else {
- if (editenabled)
- document.iform.dstendport_cust.value = "";
- document.iform.dstendport_cust.disabled = 1;
- }
-
- if (!portsenabled) {
- document.iform.srcbeginport.disabled = 1;
- document.iform.srcendport.disabled = 1;
- document.iform.dstbeginport.disabled = 1;
- document.iform.dstendport.disabled = 1;
- } else {
- if( editenabled ) {
- document.iform.srcbeginport.disabled = 0;
- document.iform.srcendport.disabled = 0;
- document.iform.dstbeginport.disabled = 0;
- document.iform.dstendport.disabled = 0;
- }
- }
-}
-
-function show_source_port_range() {
- if (portsenabled) {
- document.getElementById("sprtable").style.display = '';
- document.getElementById("showadvancedboxspr").style.display = 'none';
- }
-}
-
-function typesel_change() {
- if( editenabled ) {
- switch (document.iform.srctype.selectedIndex) {
- case 1: /* single */
- document.iform.src.disabled = 0;
- document.iform.srcmask.value = "";
- document.iform.srcmask.disabled = 1;
- break;
- case 2: /* network */
- document.iform.src.disabled = 0;
- document.iform.srcmask.disabled = 0;
- break;
- default:
- document.iform.src.value = "";
- document.iform.src.disabled = 1;
- document.iform.srcmask.value = "";
- document.iform.srcmask.disabled = 1;
- break;
- }
- switch (document.iform.dsttype.selectedIndex) {
- case 1: /* single */
- document.iform.dst.disabled = 0;
- document.iform.dstmask.value = "";
- document.iform.dstmask.disabled = 1;
- break;
- case 2: /* network */
- document.iform.dst.disabled = 0;
- document.iform.dstmask.disabled = 0;
- break;
- default:
- document.iform.dst.value = "";
- document.iform.dst.disabled = 1;
- document.iform.dstmask.value = "";
- document.iform.dstmask.disabled = 1;
- break;
- }
- }
-}
-
-function proto_change() {
- if (document.iform.proto.selectedIndex < 3) {
- portsenabled = 1;
- document.getElementById("tcpflags").style.display = '';
- } else {
- portsenabled = 0;
- document.getElementById("tcpflags").style.display = 'none';
- }
-
- /* Disable OS knob if the proto is not TCP. */
- if (document.iform.proto.selectedIndex < 1) {
- document.forms[0].os.disabled = 0;
- } else {
- document.forms[0].os.disabled = 1;
- }
-
- if (document.iform.proto.selectedIndex == 3) {
- document.iform.icmptype.disabled = 0;
- document.iform.icmp6type.disabled = 0;
- } else {
- document.iform.icmptype.disabled = 1;
- document.iform.icmp6type.disabled = 1;
- }
-
- ext_change();
-
- if(document.iform.proto.selectedIndex == 3 || document.iform.proto.selectedIndex == 4) {
- if(document.iform.ipprotocol.selectedIndex == 0) { // IPv4
- document.getElementById("icmpbox").style.display = '';
- document.getElementById("icmp6box").style.display = 'none';
- } else if(document.iform.ipprotocol.selectedIndex == 1) { // IPv6
- document.getElementById("icmpbox").style.display = 'none';
- document.getElementById("icmp6box").style.display = '';
- } else { // IPv4 + IPv6
- document.getElementById("icmpbox").style.display = 'none';
- document.getElementById("icmp6box").style.display = 'none';
- }
- } else {
- document.getElementById("icmpbox").style.display = 'none';
- document.getElementById("icmp6box").style.display = 'none';
- }
-
- if(document.iform.proto.selectedIndex >= 0 && document.iform.proto.selectedIndex <= 2) {
- document.getElementById("dprtr").style.display = '';
- if (editenabled) {
- document.getElementById("showadvancedboxspr").style.display = 'table-row';
- }
- } else {
- document.getElementById("sprtable").style.display = 'none';
- document.getElementById("dprtr").style.display = 'none';
- document.getElementById("showadvancedboxspr").style.display = 'none';
- }
-}
-
-function show_aodiv() {
- document.getElementById("aoadv").innerHTML='';
- aodiv = document.getElementById('aodivmain');
- aodiv.style.display = "block";
-}
-
-function show_dsdiv() {
- document.getElementById("dsadv").innerHTML='';
- dsdiv = document.getElementById('dsdivmain');
- dsdiv.style.display = "block";
-}
-
-function show_advanced_noxmlrpc() {
- document.getElementById("showadvnoxmlrpcsyncbox").innerHTML='';
- aodiv = document.getElementById('shownoxmlrpcadv');
- aodiv.style.display = "block";
-}
-
-function show_advanced_vlanprio() {
- document.getElementById("showadvvlanpriobox").innerHTML='';
- aodiv = document.getElementById('showvlanprioadv');
- aodiv.style.display = "block";
-}
-
-function show_advanced_schedule() {
- document.getElementById("showadvschedulebox").innerHTML='';
- aodiv = document.getElementById('showscheduleadv');
- aodiv.style.display = "block";
-}
-
-function show_advanced_gateway() {
- document.getElementById("showadvgatewaybox").innerHTML='';
- aodiv = document.getElementById('showgatewayadv');
- aodiv.style.display = "block";
-}
-
-function show_advanced_sourceos() {
- document.getElementById("showadvsourceosbox").innerHTML='';
- aodiv = document.getElementById('showsourceosadv');
- aodiv.style.display = "block";
-}
-
-function show_advanced_ackqueue() {
- document.getElementById("showadvackqueuebox").innerHTML='';
- aodiv = document.getElementById('showackqueueadv');
- aodiv.style.display = "block";
-}
-
-function show_advanced_inout() {
- document.getElementById("showadvinoutbox").innerHTML='';
- aodiv = document.getElementById('showinoutadv');
- aodiv.style.display = "block";
-}
-
-function show_advanced_state() {
- document.getElementById("showadvstatebox").innerHTML='';
- aodiv = document.getElementById('showstateadv');
- aodiv.style.display = "block";
-}
-
-function show_advanced_tcpflags() {
- document.getElementById("showtcpflagsbox").innerHTML='';
- aodiv = document.getElementById('showtcpflagsadv');
- aodiv.style.display = "block";
-}
-
-function show_advanced_layer7() {
- document.getElementById("showadvlayer7box").innerHTML='';
- aodiv = document.getElementById('showlayer7adv');
- aodiv.style.display = "block";
-}
-
-function src_rep_change() {
- document.iform.srcendport.selectedIndex = document.iform.srcbeginport.selectedIndex;
-}
-
-function dst_rep_change() {
- document.iform.dstendport.selectedIndex = document.iform.dstbeginport.selectedIndex;
-}
-
-function tcpflags_anyclick(obj) {
- if (obj.checked) {
- document.getElementById('tcpheader').style.display= 'none';
- } else {
- document.getElementById('tcpheader').style.display= "";
- }
-}
-//]]>
diff --git a/usr/local/www/javascript/firewall_rules_edit/suggestions.js b/usr/local/www/javascript/firewall_rules_edit/suggestions.js
deleted file mode 100644
index 4d1e127..0000000
--- a/usr/local/www/javascript/firewall_rules_edit/suggestions.js
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/**
- * Provides suggestions for state names (USA).
- * @class
- * @scope public
- */
-function StateSuggestions(text) {
- this.states = text;
-}
-
-/**
- * Request suggestions for the given autosuggest control.
- * @scope protected
- * @param oAutoSuggestControl The autosuggest control to provide suggestions for.
- */
-StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,
- bTypeAhead /*:boolean*/) {
- var aSuggestions = [];
- var sTextboxValue = oAutoSuggestControl.textbox.value;
-
- if (sTextboxValue.length > 0){
-
- //search for matching states
- for (var i=0; i < this.states.length; i++) {
- if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) {
- aSuggestions.push(this.states[i]);
- }
- }
- }
-
- //provide suggestions to the control
- oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
-};
diff --git a/usr/local/www/javascript/firewall_shaper_edit/autosuggest.js b/usr/local/www/javascript/firewall_shaper_edit/autosuggest.js
deleted file mode 100644
index d9b5ac0..0000000
--- a/usr/local/www/javascript/firewall_shaper_edit/autosuggest.js
+++ /dev/null
@@ -1,337 +0,0 @@
-
-/**
- * An autosuggest textbox control.
- * @class
- * @scope public
- */
-function AutoSuggestControl(oTextbox /*:HTMLInputElement*/,
- oProvider /*:SuggestionProvider*/) {
-
- /**
- * The currently selected suggestions.
- * @scope private
- */
- this.cur /*:int*/ = -1;
-
- /**
- * The dropdown list layer.
- * @scope private
- */
- this.layer = null;
-
- /**
- * Suggestion provider for the autosuggest feature.
- * @scope private.
- */
- this.provider /*:SuggestionProvider*/ = oProvider;
-
- /**
- * The textbox to capture.
- * @scope private
- */
- this.textbox /*:HTMLInputElement*/ = oTextbox;
-
- //initialize the control
- this.init();
-
-}
-
-/**
- * Autosuggests one or more suggestions for what the user has typed.
- * If no suggestions are passed in, then no autosuggest occurs.
- * @scope private
- * @param aSuggestions An array of suggestion strings.
- * @param bTypeAhead If the control should provide a type ahead suggestion.
- */
-AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/,
- bTypeAhead /*:boolean*/) {
-
- //make sure there's at least one suggestion
- if (aSuggestions.length > 0) {
- if (bTypeAhead) {
- this.typeAhead(aSuggestions[0]);
- }
-
- this.showSuggestions(aSuggestions);
- } else {
- this.hideSuggestions();
- }
-};
-
-/**
- * Creates the dropdown layer to display multiple suggestions.
- * @scope private
- */
-AutoSuggestControl.prototype.createDropDown = function () {
-
- var oThis = this;
-
- //create the layer and assign styles
- this.layer = document.createElement("div");
- this.layer.className = "suggestions";
- this.layer.style.visibility = "hidden";
- this.layer.style.width = this.textbox.offsetWidth;
-
- //when the user clicks on the a suggestion, get the text (innerHTML)
- //and place it into a textbox
- this.layer.onmousedown =
- this.layer.onmouseup =
- this.layer.onmouseover = function (oEvent) {
- oEvent = oEvent || window.event;
- oTarget = oEvent.target || oEvent.srcElement;
-
- if (oEvent.type == "mousedown") {
- oThis.textbox.value = oTarget.firstChild.nodeValue;
- oThis.hideSuggestions();
- } else if (oEvent.type == "mouseover") {
- oThis.highlightSuggestion(oTarget);
- } else {
- oThis.textbox.focus();
- }
- };
-
-
- document.body.appendChild(this.layer);
-};
-
-/**
- * Gets the left coordinate of the textbox.
- * @scope private
- * @return The left coordinate of the textbox in pixels.
- */
-AutoSuggestControl.prototype.getLeft = function () /*:int*/ {
-
- var oNode = this.textbox;
- var iLeft = 0;
-
- while(oNode.tagName != "BODY") {
- iLeft += oNode.offsetLeft;
- oNode = oNode.offsetParent;
- }
-
- return iLeft;
-};
-
-/**
- * Gets the top coordinate of the textbox.
- * @scope private
- * @return The top coordinate of the textbox in pixels.
- */
-AutoSuggestControl.prototype.getTop = function () /*:int*/ {
-
- var oNode = this.textbox;
- var iTop = 0;
-
- while(oNode.tagName != "BODY") {
- iTop += oNode.offsetTop;
- oNode = oNode.offsetParent;
- }
-
- return iTop;
-};
-
-/**
- * Handles three keydown events.
- * @scope private
- * @param oEvent The event object for the keydown event.
- */
-AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) {
-
- switch(oEvent.keyCode) {
- case 38: //up arrow
- this.previousSuggestion();
- break;
- case 40: //down arrow
- this.nextSuggestion();
- break;
- case 13: //enter
- this.hideSuggestions();
- break;
- }
-
-};
-
-/**
- * Handles keyup events.
- * @scope private
- * @param oEvent The event object for the keyup event.
- */
-AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) {
-
- var iKeyCode = oEvent.keyCode;
-
- //for backspace (8) and delete (46), shows suggestions without typeahead
- if (iKeyCode == 8 || iKeyCode == 46) {
- this.provider.requestSuggestions(this, false);
-
- //make sure not to interfere with non-character keys
- } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
- //ignore
- } else {
- //request suggestions from the suggestion provider with typeahead
- this.provider.requestSuggestions(this, true);
- }
-};
-
-/**
- * Hides the suggestion dropdown.
- * @scope private
- */
-AutoSuggestControl.prototype.hideSuggestions = function () {
- this.layer.style.visibility = "hidden";
-};
-
-/**
- * Highlights the given node in the suggestions dropdown.
- * @scope private
- * @param oSuggestionNode The node representing a suggestion in the dropdown.
- */
-AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) {
-
- for (var i=0; i < this.layer.childNodes.length; i++) {
- var oNode = this.layer.childNodes[i];
- if (oNode == oSuggestionNode) {
- oNode.className = "current";
- } else if (oNode.className == "current") {
- oNode.className = "";
- }
- }
-};
-
-/**
- * Initializes the textbox with event handlers for
- * auto suggest functionality.
- * @scope private
- */
-AutoSuggestControl.prototype.init = function () {
-
- //save a reference to this object
- var oThis = this;
-
- //assign the onkeyup event handler
- this.textbox.onkeyup = function (oEvent) {
-
- //check for the proper location of the event object
- if (!oEvent) {
- oEvent = window.event;
- }
-
- //call the handleKeyUp() method with the event object
- oThis.handleKeyUp(oEvent);
- };
-
- //assign onkeydown event handler
- this.textbox.onkeydown = function (oEvent) {
-
- //check for the proper location of the event object
- if (!oEvent) {
- oEvent = window.event;
- }
-
- //call the handleKeyDown() method with the event object
- oThis.handleKeyDown(oEvent);
- };
-
- //assign onblur event handler (hides suggestions)
- this.textbox.onblur = function () {
- oThis.hideSuggestions();
- };
-
- //create the suggestions dropdown
- this.createDropDown();
-};
-
-/**
- * Highlights the next suggestion in the dropdown and
- * places the suggestion into the textbox.
- * @scope private
- */
-AutoSuggestControl.prototype.nextSuggestion = function () {
- var cSuggestionNodes = this.layer.childNodes;
-
- if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) {
- var oNode = cSuggestionNodes[++this.cur];
- this.highlightSuggestion(oNode);
- this.textbox.value = oNode.firstChild.nodeValue;
- }
-};
-
-/**
- * Highlights the previous suggestion in the dropdown and
- * places the suggestion into the textbox.
- * @scope private
- */
-AutoSuggestControl.prototype.previousSuggestion = function () {
- var cSuggestionNodes = this.layer.childNodes;
-
- if (cSuggestionNodes.length > 0 && this.cur > 0) {
- var oNode = cSuggestionNodes[--this.cur];
- this.highlightSuggestion(oNode);
- this.textbox.value = oNode.firstChild.nodeValue;
- }
-};
-
-/**
- * Selects a range of text in the textbox.
- * @scope public
- * @param iStart The start index (base 0) of the selection.
- * @param iLength The number of characters to select.
- */
-AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) {
-
- //use text ranges for Internet Explorer
- if (this.textbox.createTextRange) {
- var oRange = this.textbox.createTextRange();
- oRange.moveStart("character", iStart);
- oRange.moveEnd("character", iLength - this.textbox.value.length);
- oRange.select();
-
- //use setSelectionRange() for Mozilla
- } else if (this.textbox.setSelectionRange) {
- this.textbox.setSelectionRange(iStart, iLength);
- }
-
- //set focus back to the textbox
- this.textbox.focus();
-};
-
-/**
- * Builds the suggestion layer contents, moves it into position,
- * and displays the layer.
- * @scope private
- * @param aSuggestions An array of suggestions for the control.
- */
-AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) {
-
- var oDiv = null;
- this.layer.innerHTML = ""; //clear contents of the layer
-
- for (var i=0; i < aSuggestions.length; i++) {
- oDiv = document.createElement("div");
- oDiv.appendChild(document.createTextNode(aSuggestions[i]));
- this.layer.appendChild(oDiv);
- }
-
- this.layer.style.left = this.getLeft() + "px";
- this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px";
- this.layer.style.width = this.textbox.offsetWidth + "px";
- this.layer.style.visibility = "visible";
-
-};
-
-/**
- * Inserts a suggestion into the textbox, highlighting the
- * suggested part of the text.
- * @scope private
- * @param sSuggestion The suggestion for the textbox.
- */
-AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) {
-
- //check for support of typeahead functionality
- if (this.textbox.createTextRange || this.textbox.setSelectionRange){
- var iLen = this.textbox.value.length;
- this.textbox.value = sSuggestion;
- this.selectRange(iLen, sSuggestion.length);
- }
-};
-
diff --git a/usr/local/www/javascript/firewall_shaper_edit/disablekeys.js b/usr/local/www/javascript/firewall_shaper_edit/disablekeys.js
deleted file mode 100644
index 5d6c87a..0000000
--- a/usr/local/www/javascript/firewall_shaper_edit/disablekeys.js
+++ /dev/null
@@ -1,6 +0,0 @@
-function kH(e) {
- var pK = document.all? window.event.keyCode:e.which;
- return pK != 13;
-}
-document.onkeypress = kH;
-if (document.layers) document.captureEvents(Event.KEYPRESS); \ No newline at end of file
diff --git a/usr/local/www/javascript/firewall_shaper_edit/firewall_shaper_edit.js b/usr/local/www/javascript/firewall_shaper_edit/firewall_shaper_edit.js
deleted file mode 100644
index b1b8df0..0000000
--- a/usr/local/www/javascript/firewall_shaper_edit/firewall_shaper_edit.js
+++ /dev/null
@@ -1,37 +0,0 @@
-//<![CDATA[
-function ext_change() {
- if (document.iform.beginport.selectedIndex == 0) {
- document.iform.beginport_cust.disabled = 0;
- } else {
- document.iform.beginport_cust.value = "";
- document.iform.beginport_cust.disabled = 1;
- }
- if (document.iform.endport.selectedIndex == 0) {
- document.iform.endport_cust.disabled = 0;
- } else {
- document.iform.endport_cust.value = "";
- document.iform.endport_cust.disabled = 1;
- }
- if (document.iform.localbeginport.selectedIndex == 0) {
- document.iform.localbeginport_cust.disabled = 0;
- } else {
- document.iform.localbeginport_cust.value = "";
- document.iform.localbeginport_cust.disabled = 1;
- }
-};
-function ext_rep_change() {
- document.iform.endport.selectedIndex = document.iform.beginport.selectedIndex;
- document.iform.localbeginport.selectedIndex = document.iform.beginport.selectedIndex;
-}
-
-
-window.onload = function () {
- var oTextbox1 = new AutoSuggestControl(document.getElementById("src"), new StateSuggestions(addressarray));
- var oTextbox2 = new AutoSuggestControl(document.getElementById("srcbeginport_cust"), new StateSuggestions(customarray));
- var oTextbox3 = new AutoSuggestControl(document.getElementById("srcendport_cust"), new StateSuggestions(customarray));
- var oTextbox1 = new AutoSuggestControl(document.getElementById("dst"), new StateSuggestions(addressarray));
- var oTextbox2 = new AutoSuggestControl(document.getElementById("dstbeginport_cust"), new StateSuggestions(customarray));
- var oTextbox3 = new AutoSuggestControl(document.getElementById("dstendport_cust"), new StateSuggestions(customarray));
-};
-
-//]]> \ No newline at end of file
diff --git a/usr/local/www/javascript/firewall_shaper_edit/suggestions.js b/usr/local/www/javascript/firewall_shaper_edit/suggestions.js
deleted file mode 100644
index 4d1e127..0000000
--- a/usr/local/www/javascript/firewall_shaper_edit/suggestions.js
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/**
- * Provides suggestions for state names (USA).
- * @class
- * @scope public
- */
-function StateSuggestions(text) {
- this.states = text;
-}
-
-/**
- * Request suggestions for the given autosuggest control.
- * @scope protected
- * @param oAutoSuggestControl The autosuggest control to provide suggestions for.
- */
-StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,
- bTypeAhead /*:boolean*/) {
- var aSuggestions = [];
- var sTextboxValue = oAutoSuggestControl.textbox.value;
-
- if (sTextboxValue.length > 0){
-
- //search for matching states
- for (var i=0; i < this.states.length; i++) {
- if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) {
- aSuggestions.push(this.states[i]);
- }
- }
- }
-
- //provide suggestions to the control
- oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
-};
diff --git a/usr/local/www/javascript/global.js b/usr/local/www/javascript/global.js
deleted file mode 100644
index 0b67f58..0000000
--- a/usr/local/www/javascript/global.js
+++ /dev/null
@@ -1,43 +0,0 @@
-var AjaxQueue = {
- batchSize: 1, //No.of simultaneous AJAX requests allowed, Default : 1
- urlQueue: [], //Request URLs will be pushed into this array
- elementsQueue: [], //Element IDs of elements to be updated on completion of a request
- optionsQueue: [], //Request options will be pushed into this array
- currentRequest: null,
- setBatchSize: function(bSize){ //Method to set a different batch size. Recommended: Set batchSize before making requests
- this.batchSize = bSize;
- },
- push: function(url, options, elementID){ //Push the request in the queue. elementID is optional and required only for Ajax requests that updates the element
- this.urlQueue.push(url);
- this.optionsQueue.push(options);
- if(elementID!=null){
- this.elementsQueue.push(elementID);
- } else {
- this.elementsQueue.push("NOTSPECIFIED");
- }
-
- this._processNext();
- },
- _processNext: function() { // Method for processing the requests in the queue. Private method. Don't call it explicitly
- if(this.currentRequest == null && this.urlQueue.length > 0) // Check if the currently processing request count is less than batch size
- {
- // Call jQuery.ajax on the first item in the queue and remove it from the queue
- AjaxQueue.currentRequest = jQuery.ajax(AjaxQueue.urlQueue.shift(), AjaxQueue.optionsQueue.shift());
- AjaxQueue.currentRequest.complete( function() {
- //Call AjaxQueue._processNext on completion ( success / failure) of this AJAX request.
- AjaxQueue.currentRequest = null;
- AjaxQueue._processNext();
- });
- if(this.elementsQueue[0]=="NOTSPECIFIED") { //Check if an elementID was specified
- // If no ElementID was specified remove the first item from the queue
- var junk = AjaxQueue.elementsQueue.shift();
- } else {
- // If ElementID was specified update the first item in the queue and remove it from the queue
- AjaxQueue.currentRequest.success( function(data) {
- jQuery(AjaxQueue.elementsQueue.shift()).html(data);
- });
- }
- }
- }
-};
-
diff --git a/usr/local/www/javascript/index/ajax.js b/usr/local/www/javascript/index/ajax.js
deleted file mode 100644
index 274b8c0..0000000
--- a/usr/local/www/javascript/index/ajax.js
+++ /dev/null
@@ -1,196 +0,0 @@
-/* Most widgets update their backend data every 10 seconds. 11 seconds
- * will ensure that we update the GUI right after the stats are updated.
- * Seconds * 1000 = value
- */
-var Seconds = 11;
-var update_interval = (Math.abs(Math.ceil(Seconds))-1)*1000 + 990;
-
-function updateMeters() {
- url = '/getstats.php';
-
- jQuery.ajax(url, {
- type: 'get',
- success: function(data) {
- response = data || "";
- if (response != "")
- stats(data);
- }
- });
- setTimer();
-}
-
-function setTimer() {
- timeout = window.setTimeout('updateMeters()', update_interval);
-}
-
-function stats(x) {
- var values = x.split("|");
- if (jQuery.each(values,function(key,value){
- if (value == 'undefined' || value == null)
- return true;
- else
- return false;
- }))
-
- updateUptime(values[2]);
- updateDateTime(values[5]);
- updateCPU(values[0]);
- updateMemory(values[1]);
- updateState(values[3]);
- updateTemp(values[4]);
- updateInterfaceStats(values[6]);
- updateInterfaces(values[7]);
- updateGatewayStats(values[8]);
- updateCpuFreq(values[9]);
- updateLoadAverage(values[10]);
- updateMbuf(values[11]);
- updateMbufMeter(values[12]);
- updateStateMeter(values[13]);
-}
-
-function updateMemory(x) {
- if(jQuery('#memusagemeter'))
- jQuery("#memusagemeter").html(x + '%');
- if(jQuery('#memUsagePB'))
- jQuery('#memUsagePB').progressbar( { value: parseInt(x) } );
-}
-
-function updateMbuf(x) {
- if(jQuery('#mbuf'))
- jQuery("#mbuf").html(x);
-}
-
-function updateMbufMeter(x) {
- if(jQuery('#mbufusagemeter'))
- jQuery("#mbufusagemeter").html(x + '%');
- if(jQuery('#mbufPB'))
- jQuery('#mbufPB').progressbar( { value: parseInt(x) } );
-}
-
-function updateCPU(x) {
- if(jQuery('#cpumeter'))
- jQuery("#cpumeter").html(x + '%');
- if(jQuery('#cpuPB'))
- jQuery('#cpuPB').progressbar( { value: parseInt(x) } );
- /* Load CPU Graph widget if enabled */
- if(widgetActive('cpu_graphs')) {
- GraphValue(graph[0], x);
- }
-}
-
-function updateTemp(x) {
- if(jQuery("#tempmeter"))
- jQuery("#tempmeter").html(x + '\u00B0' + 'C');
- if(jQuery('#tempPB'))
- jQuery("#tempPB").progressbar( { value: parseInt(x) } );
-}
-
-function updateDateTime(x) {
- if(jQuery('#datetime'))
- jQuery("#datetime").html(x);
-}
-
-function updateUptime(x) {
- if(jQuery('#uptime'))
- jQuery("#uptime").html(x);
-}
-
-function updateState(x) {
- if(jQuery('#pfstate'))
- jQuery("#pfstate").html(x);
-}
-
-function updateStateMeter(x) {
- if(jQuery('#pfstateusagemeter'))
- jQuery("#pfstateusagemeter").html(x + '%');
- if(jQuery('#statePB'))
- jQuery('#statePB').progressbar( { value: parseInt(x) } );
-}
-
-function updateGatewayStats(x){
- if (widgetActive("gateways")){
- gateways_split = x.split(",");
- for (var y=0; y<gateways_split.length; y++){
- gateways_field_split = gateways_split[y].split("^");
- if(jQuery('#gateway' + (y + 1))) {
- jQuery('#gateway' + (y + 1)).html(gateways_field_split[0]);
- if(gateways_field_split[1]) {
- jQuery('#gateway' + (y + 1)).css('background-color',gateways_field_split[1]);
- }
- }
- }
- }
-}
-
-function updateCpuFreq(x) {
- if(jQuery('#cpufreq'))
- jQuery("#cpufreq").html(x);
-}
-
-function updateLoadAverage(x) {
- if(jQuery('#load_average'))
- jQuery("#load_average").html(x);
-}
-
-function updateInterfaceStats(x){
- if (widgetActive("interface_statistics")){
- statistics_split = x.split(",");
- var counter = 1;
- for (var y=0; y<statistics_split.length-1; y++){
- if(jQuery('#stat' + counter)) {
- jQuery('#stat' + counter).html(statistics_split[y]);
- counter++;
- }
- }
- }
-}
-
-function updateInterfaces(x){
- if (widgetActive("interfaces")){
- interfaces_split = x.split("~");
- interfaces_split.each(function(iface){
- details = iface.split("^");
- if (details[2] == '')
- ipv4_details = '';
- else
- ipv4_details = details[2] + '<br />';
- switch(details[1]) {
- case "up":
- jQuery('#' + details[0] + '-up').css("display","inline");
- jQuery('#' + details[0] + '-down').css("display","none");
- jQuery('#' + details[0] + '-block').css("display","none");
- jQuery('#' + details[0] + '-ip').html(ipv4_details);
- jQuery('#' + details[0] + '-ipv6').html(details[3]);
- jQuery('#' + details[0] + '-media').html(details[4]);
- break;
- case "down":
- jQuery('#' + details[0] + '-down').css("display","inline");
- jQuery('#' + details[0] + '-up').css("display","none");
- jQuery('#' + details[0] + '-block').css("display","none");
- jQuery('#' + details[0] + '-ip').html(ipv4_details);
- jQuery('#' + details[0] + '-ipv6').html(details[3]);
- jQuery('#' + details[0] + '-media').html(details[4]);
- break;
- case "block":
- jQuery('#' + details[0] + '-block').css("display","inline");
- jQuery('#' + details[0] + '-down').css("display","none");
- jQuery('#' + details[0] + '-up').css("display","none");
- break;
- }
- });
- }
-}
-
-function widgetActive(x) {
- var widget = jQuery('#' + x + '-container');
- if ((widget != null) && (widget.css('display') != null) && (widget.css('display') != "none"))
- return true;
- else
- return false;
-}
-
-/* start updater */
-jQuery(document).ready(function(){
- setTimer();
-});
-
diff --git a/usr/local/www/javascript/interfaces_ppps_edit/ppps_edit.js b/usr/local/www/javascript/interfaces_ppps_edit/ppps_edit.js
deleted file mode 100644
index 45b529b..0000000
--- a/usr/local/www/javascript/interfaces_ppps_edit/ppps_edit.js
+++ /dev/null
@@ -1,253 +0,0 @@
-/*jslint white: true, sloppy: true, vars: true, eqeq: true */
-/*jslint browser: true, devel: true */
-/*global show_hide_linkfields, jQuery, country_list */
-
-function update_select_list(new_options, select_list){
- var option_array = new_options.split("|");
- var i = 0;
- var j;
- select_list.length = 0;
- for(j=0; j < option_array.length-1; j++){
- var option = option_array[j].split(",");
- var selected = Boolean(parseInt(option[2], 10));
- select_list[j] = new Option(option[0], option[1], false, selected);
- //for testing and debugging
- //select_list.options[option_array.length-1+j] = new Option(option[2].toString() +" "+ selected.toString());
- //select_list.options[option_array.length-1+j] = new Option("Link Label: " + linklabel + " Label Text:" + label_text);
- }
- show_hide_linkfields(select_list);
-}
-
-function show_advanced(hide){
- var select_list = document.iform["interfaces[]"].options;
- var adv_rows = parseInt(jQuery('#adv_rows').html(), 10);
- var adv_show = Boolean(parseInt(jQuery('#adv_show').html(), 10));
- var status = Boolean(parseInt(hide, 10));
- var j, advanced;
- if (status){
- jQuery('#advanced_').hide();
- for(j=0; j < adv_rows; j++){
- advanced = "#advanced_" + j.toString();
- jQuery(advanced).show();
- }
- jQuery('#adv_show').html("1");
- show_hide_linkfields(select_list);
- } else {
- jQuery('#advanced_').show();
- for(j=0; j < adv_rows; j++){
- advanced = "#advanced_" + j.toString();
- jQuery(advanced).hide();
- }
- jQuery('#adv_show').html("0");
- show_hide_linkfields(select_list);
- }
-}
-
-function show_hide_linkfields(options){
- var i = 0;
- var port_count = parseInt(jQuery('#port_count').html(), 10);
- var adv_show = Boolean(parseInt(jQuery('#adv_show').html(), 10));
- var j, count, type, link, lnklabel, bw, bwlabel, mtu, mru, mrru, ipfields, gwfields, localip,
- localiplabel, subnet, gateway, gatewaylabel;
- for(j=0; j < port_count; j++){
- count = j.toString();
- type = jQuery('#type').val();
- link = "#link" + count;
- lnklabel = "#linklabel" + count;
- bw = "#bandwidth" + count;
- bwlabel = "#bwlabel" + count;
- mtu = "#mtu" + count;
- mru = "#mru" + count;
- mrru = "#mrru" + count;
- ipfields = "#ip_fields" + count;
- gwfields = "#gw_fields" + count;
- localip = "#localip" + count;
- localiplabel = "#localiplabel" + count;
- subnet = "#subnet" + count;
- gateway = "#gateway" + count;
- gatewaylabel = "#gatewaylabel" + count;
-
- jQuery(ipfields + ',' + gwfields + ',' + link).hide();
- jQuery(subnet).prop('disabled',true);
-
- jQuery(bw).attr("name","bandwidth[]");
- jQuery(mtu).attr("name","mtu[]");
- jQuery(mru).attr("name","mru[]");
- jQuery(mrru).attr("name","mrru[]");
- jQuery(localip).attr("name","localip[]");
- jQuery(subnet).attr("name","subnet[]");
- jQuery(gateway).attr("name","gateway[]");
-
- while(i < options.length){
- if (options[i].selected ){
- jQuery(lnklabel).html("Link Parameters (" + options[i].value + ")");
- jQuery(bwlabel).html("Bandwidth (" + options[i].value + ")");
- jQuery(bw).attr("name","bandwidth[" + options[i].value + "]");
- jQuery(mtu).attr("name","mtu[" + options[i].value + "]");
- jQuery(mru).attr("name","mru[" + options[i].value + "]");
- jQuery(mrru).attr("name","mrru[" + options[i].value + "]");
- jQuery(localiplabel).html("Local IP (" + options[i].value + ")");
- jQuery(gatewaylabel).html("Gateway (" + options[i].value + ")");
- jQuery(localip).attr("name","localip[" + options[i].value + "]");
- jQuery(subnet).attr("name","subnet[" + options[i].value + "]");
- jQuery(gateway).attr("name","gateway[" + options[i].value + "]");
- if (type == 'ppp' && adv_show){
- jQuery(ipfields + ',' + gwfields).show();
- }
- if (type == 'pptp' || type == 'l2tp'){
- jQuery(subnet).prop("disabled",false);
- jQuery(ipfields + ',' + gwfields).show();
- }
- if (adv_show){
- jQuery(link).show();
- }
- i++;
- break;
- }
- i++;
- }
- }
-}
-
-
-function updateType(t){
- var serialports = jQuery('#serialports').html();
- var ports = jQuery('#ports').html();
- var select_list = document.iform["interfaces[]"].options;
- jQuery('#adv_show').html("0");
- show_advanced('0');
- jQuery("#select").show();
- switch(t) {
- case "select":
- jQuery('#ppp,#pppoe,#ppp_provider,#phone_num,#apn_').hide();
- select_list.length = 0;
- select_list[0] = new Option("Select Link Type First","");
- break;
- case "ppp":
- update_select_list(serialports, select_list);
- jQuery('#select,#pppoe').hide();
- jQuery('#ppp_provider,#phone_num,#apn_').show();
- country_list();
- break;
- case "pppoe":
- update_select_list(ports, select_list);
- jQuery('#select,#ppp,#ppp_provider,#phone_num,#apn_').hide();
- break;
- case "l2tp":
- case "pptp":
- update_select_list(ports, select_list);
- jQuery('#select,#ppp,#pppoe,#ppp_provider,#phone_num,#apn_').hide();
- break;
- default:
- select_list.length = 0;
- select_list[0] = new Option("Select Link Type First","");
- break;
- }
- if (t == "pppoe" || t == "ppp"){
- jQuery("#" + t).show();
- }
-}
-
-function show_reset_settings(reset_type) {
- if (reset_type == 'preset') {
- jQuery('#pppoepresetwrap').show(0);
- jQuery('#pppoecustomwrap').hide(0);
- }
- else if (reset_type == 'custom') {
- jQuery('#pppoecustomwrap').show(0);
- jQuery('#pppoepresetwrap').hide(0);
- } else {
- jQuery('#pppoecustomwrap').hide(0);
- jQuery('#pppoepresetwrap').hide(0);
- }
-}
-
-function country_list() {
- jQuery('#country option').remove();
- jQuery('#provider option').remove();
- jQuery('#providerplan option').remove();
- jQuery('#country').append(new Option('', ''));
- jQuery.ajax("getserviceproviders.php",{
- success: function(responseText) {
- var responseTextArr = responseText.split("\n");
- var value, i, country;
- responseTextArr.sort();
- for (i = 0; i < responseTextArr.length; i += 1) {
- value = responseTextArr[i];
- if (/\S/.test(value)) {
- country = value.split(":");
- jQuery('#country').append(new Option(country[0],country[1]));
- }
- }
- }
- });
- jQuery('#trcountry').css("display","table-row");
-}
-
-function providers_list() {
- jQuery('#provider option').remove();
- jQuery('#providerplan option').remove();
- jQuery('#provider').append(new Option('', ''));
- jQuery.ajax("getserviceproviders.php",{
- type: 'POST',
- data: {country : jQuery('#country').val()},
- success: function(responseText) {
- var responseTextArr = responseText.split("\n");
- var value, i;
- responseTextArr.sort();
- for (i = 0; i < responseTextArr.length; i += 1) {
- value = responseTextArr[i];
- if (/\S/.test(value)) {
- jQuery('#provider').append(new Option(value, value));
- }
- }
- }
- });
- jQuery('#trprovider').css("display","table-row");
- jQuery('#trproviderplan').css("display","none");
-}
-
-function providerplan_list() {
- jQuery('#providerplan option').remove();
- jQuery('#providerplan').append( new Option('','') );
- jQuery.ajax("getserviceproviders.php",{
- type: 'POST',
- data: {country : jQuery('#country').val(), provider : jQuery('#provider').val()},
- success: function(responseText) {
- var responseTextArr = responseText.split("\n");
- var value, providerplan, i;
- responseTextArr.sort();
- for (i = 0; i < responseTextArr.length; i += 1) {
- value = responseTextArr[i];
- if (/\S/.test(value)) {
- providerplan = value.split(":");
- jQuery('#providerplan').append(new Option(providerplan[0] + " - " + providerplan[1],
- providerplan[1]));
- }
- }
- }
- });
- jQuery('#trproviderplan').css("display","table-row");
-}
-
-function prefill_provider() {
- jQuery.ajax("getserviceproviders.php",{
- type: "POST",
- data: {country : jQuery('#country').val(), provider : jQuery('#provider').val(), plan : jQuery('#providerplan').val()},
- success: function(responseXML) {
- var xmldoc = responseXML;
- var provider = xmldoc.getElementsByTagName('connection')[0];
- jQuery('#username').val('');
- jQuery('#password').val('');
- if(provider.getElementsByTagName('apn')[0].firstChild.data == "CDMA") {
- jQuery('#phone').val('#777');
- jQuery('#apn').val('');
- } else {
- jQuery('#phone').val('*99#');
- jQuery('#apn').val(provider.getElementsByTagName('apn')[0].firstChild.data);
- }
- jQuery('#username').val(provider.getElementsByTagName('username')[0].firstChild.data);
- jQuery('#password').val(provider.getElementsByTagName('password')[0].firstChild.data);
- }
- });
-}
diff --git a/usr/local/www/javascript/jquery-1.11.1.min.js b/usr/local/www/javascript/jquery-1.11.1.min.js
deleted file mode 100644
index ab28a24..0000000
--- a/usr/local/www/javascript/jquery-1.11.1.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;
-if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")
-},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/usr/local/www/javascript/jquery-migrate-1.2.1.min.js b/usr/local/www/javascript/jquery-migrate-1.2.1.min.js
deleted file mode 100644
index 62149c2..0000000
--- a/usr/local/www/javascript/jquery-migrate-1.2.1.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! jQuery Migrate v1.2.1 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */
-jQuery.migrateMute===void 0&&(jQuery.migrateMute=!0),function(e,t,n){function r(n){var r=t.console;i[n]||(i[n]=!0,e.migrateWarnings.push(n),r&&r.warn&&!e.migrateMute&&(r.warn("JQMIGRATE: "+n),e.migrateTrace&&r.trace&&r.trace()))}function a(t,a,i,o){if(Object.defineProperty)try{return Object.defineProperty(t,a,{configurable:!0,enumerable:!0,get:function(){return r(o),i},set:function(e){r(o),i=e}}),n}catch(s){}e._definePropertyBroken=!0,t[a]=i}var i={};e.migrateWarnings=[],!e.migrateMute&&t.console&&t.console.log&&t.console.log("JQMIGRATE: Logging is active"),e.migrateTrace===n&&(e.migrateTrace=!0),e.migrateReset=function(){i={},e.migrateWarnings.length=0},"BackCompat"===document.compatMode&&r("jQuery is not compatible with Quirks Mode");var o=e("<input/>",{size:1}).attr("size")&&e.attrFn,s=e.attr,u=e.attrHooks.value&&e.attrHooks.value.get||function(){return null},c=e.attrHooks.value&&e.attrHooks.value.set||function(){return n},l=/^(?:input|button)$/i,d=/^[238]$/,p=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,f=/^(?:checked|selected)$/i;a(e,"attrFn",o||{},"jQuery.attrFn is deprecated"),e.attr=function(t,a,i,u){var c=a.toLowerCase(),g=t&&t.nodeType;return u&&(4>s.length&&r("jQuery.fn.attr( props, pass ) is deprecated"),t&&!d.test(g)&&(o?a in o:e.isFunction(e.fn[a])))?e(t)[a](i):("type"===a&&i!==n&&l.test(t.nodeName)&&t.parentNode&&r("Can't change the 'type' of an input or button in IE 6/7/8"),!e.attrHooks[c]&&p.test(c)&&(e.attrHooks[c]={get:function(t,r){var a,i=e.prop(t,r);return i===!0||"boolean"!=typeof i&&(a=t.getAttributeNode(r))&&a.nodeValue!==!1?r.toLowerCase():n},set:function(t,n,r){var a;return n===!1?e.removeAttr(t,r):(a=e.propFix[r]||r,a in t&&(t[a]=!0),t.setAttribute(r,r.toLowerCase())),r}},f.test(c)&&r("jQuery.fn.attr('"+c+"') may use property instead of attribute")),s.call(e,t,a,i))},e.attrHooks.value={get:function(e,t){var n=(e.nodeName||"").toLowerCase();return"button"===n?u.apply(this,arguments):("input"!==n&&"option"!==n&&r("jQuery.fn.attr('value') no longer gets properties"),t in e?e.value:null)},set:function(e,t){var a=(e.nodeName||"").toLowerCase();return"button"===a?c.apply(this,arguments):("input"!==a&&"option"!==a&&r("jQuery.fn.attr('value', val) no longer sets properties"),e.value=t,n)}};var g,h,v=e.fn.init,m=e.parseJSON,y=/^([^<]*)(<[\w\W]+>)([^>]*)$/;e.fn.init=function(t,n,a){var i;return t&&"string"==typeof t&&!e.isPlainObject(n)&&(i=y.exec(e.trim(t)))&&i[0]&&("<"!==t.charAt(0)&&r("$(html) HTML strings must start with '<' character"),i[3]&&r("$(html) HTML text after last tag is ignored"),"#"===i[0].charAt(0)&&(r("HTML string cannot start with a '#' character"),e.error("JQMIGRATE: Invalid selector string (XSS)")),n&&n.context&&(n=n.context),e.parseHTML)?v.call(this,e.parseHTML(i[2],n,!0),n,a):v.apply(this,arguments)},e.fn.init.prototype=e.fn,e.parseJSON=function(e){return e||null===e?m.apply(this,arguments):(r("jQuery.parseJSON requires a valid JSON string"),null)},e.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||0>e.indexOf("compatible")&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e.browser||(g=e.uaMatch(navigator.userAgent),h={},g.browser&&(h[g.browser]=!0,h.version=g.version),h.chrome?h.webkit=!0:h.webkit&&(h.safari=!0),e.browser=h),a(e,"browser",e.browser,"jQuery.browser is deprecated"),e.sub=function(){function t(e,n){return new t.fn.init(e,n)}e.extend(!0,t,this),t.superclass=this,t.fn=t.prototype=this(),t.fn.constructor=t,t.sub=this.sub,t.fn.init=function(r,a){return a&&a instanceof e&&!(a instanceof t)&&(a=t(a)),e.fn.init.call(this,r,a,n)},t.fn.init.prototype=t.fn;var n=t(document);return r("jQuery.sub() is deprecated"),t},e.ajaxSetup({converters:{"text json":e.parseJSON}});var b=e.fn.data;e.fn.data=function(t){var a,i,o=this[0];return!o||"events"!==t||1!==arguments.length||(a=e.data(o,t),i=e._data(o,t),a!==n&&a!==i||i===n)?b.apply(this,arguments):(r("Use of jQuery.fn.data('events') is deprecated"),i)};var j=/\/(java|ecma)script/i,w=e.fn.andSelf||e.fn.addBack;e.fn.andSelf=function(){return r("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),w.apply(this,arguments)},e.clean||(e.clean=function(t,a,i,o){a=a||document,a=!a.nodeType&&a[0]||a,a=a.ownerDocument||a,r("jQuery.clean() is deprecated");var s,u,c,l,d=[];if(e.merge(d,e.buildFragment(t,a).childNodes),i)for(c=function(e){return!e.type||j.test(e.type)?o?o.push(e.parentNode?e.parentNode.removeChild(e):e):i.appendChild(e):n},s=0;null!=(u=d[s]);s++)e.nodeName(u,"script")&&c(u)||(i.appendChild(u),u.getElementsByTagName!==n&&(l=e.grep(e.merge([],u.getElementsByTagName("script")),c),d.splice.apply(d,[s+1,0].concat(l)),s+=l.length));return d});var Q=e.event.add,x=e.event.remove,k=e.event.trigger,N=e.fn.toggle,T=e.fn.live,M=e.fn.die,S="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",C=RegExp("\\b(?:"+S+")\\b"),H=/(?:^|\s)hover(\.\S+|)\b/,A=function(t){return"string"!=typeof t||e.event.special.hover?t:(H.test(t)&&r("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),t&&t.replace(H,"mouseenter$1 mouseleave$1"))};e.event.props&&"attrChange"!==e.event.props[0]&&e.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),e.event.dispatch&&a(e.event,"handle",e.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),e.event.add=function(e,t,n,a,i){e!==document&&C.test(t)&&r("AJAX events should be attached to document: "+t),Q.call(this,e,A(t||""),n,a,i)},e.event.remove=function(e,t,n,r,a){x.call(this,e,A(t)||"",n,r,a)},e.fn.error=function(){var e=Array.prototype.slice.call(arguments,0);return r("jQuery.fn.error() is deprecated"),e.splice(0,0,"error"),arguments.length?this.bind.apply(this,e):(this.triggerHandler.apply(this,e),this)},e.fn.toggle=function(t,n){if(!e.isFunction(t)||!e.isFunction(n))return N.apply(this,arguments);r("jQuery.fn.toggle(handler, handler...) is deprecated");var a=arguments,i=t.guid||e.guid++,o=0,s=function(n){var r=(e._data(this,"lastToggle"+t.guid)||0)%o;return e._data(this,"lastToggle"+t.guid,r+1),n.preventDefault(),a[r].apply(this,arguments)||!1};for(s.guid=i;a.length>o;)a[o++].guid=i;return this.click(s)},e.fn.live=function(t,n,a){return r("jQuery.fn.live() is deprecated"),T?T.apply(this,arguments):(e(this.context).on(t,this.selector,n,a),this)},e.fn.die=function(t,n){return r("jQuery.fn.die() is deprecated"),M?M.apply(this,arguments):(e(this.context).off(t,this.selector||"**",n),this)},e.event.trigger=function(e,t,n,a){return n||C.test(e)||r("Global events are undocumented and deprecated"),k.call(this,e,t,n||document,a)},e.each(S.split("|"),function(t,n){e.event.special[n]={setup:function(){var t=this;return t!==document&&(e.event.add(document,n+"."+e.guid,function(){e.event.trigger(n,null,t,!0)}),e._data(this,n,e.guid++)),!1},teardown:function(){return this!==document&&e.event.remove(document,n+"."+e._data(this,n)),!1}}})}(jQuery,window); \ No newline at end of file
diff --git a/usr/local/www/javascript/jquery-ui-timepicker-addon/css/jquery-ui-timepicker-addon.css b/usr/local/www/javascript/jquery-ui-timepicker-addon/css/jquery-ui-timepicker-addon.css
deleted file mode 100644
index 1af3008..0000000
--- a/usr/local/www/javascript/jquery-ui-timepicker-addon/css/jquery-ui-timepicker-addon.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/* css for timepicker */
-.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }
-.ui-timepicker-div dl { text-align: left; }
-.ui-timepicker-div dl dt { height: 25px; margin-bottom: -25px; }
-.ui-timepicker-div dl dd { margin: 0 10px 10px 65px; }
-.ui-timepicker-div td { font-size: 90%; }
-.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }
diff --git a/usr/local/www/javascript/jquery-ui-timepicker-addon/js/jquery-ui-timepicker-addon.js b/usr/local/www/javascript/jquery-ui-timepicker-addon/js/jquery-ui-timepicker-addon.js
deleted file mode 100644
index 33cd3ae..0000000
--- a/usr/local/www/javascript/jquery-ui-timepicker-addon/js/jquery-ui-timepicker-addon.js
+++ /dev/null
@@ -1,1326 +0,0 @@
-/*
-* jQuery timepicker addon
-* By: Trent Richardson [http://trentrichardson.com]
-* Version 0.9.9
-* Last Modified: 02/05/2012
-*
-* Copyright 2012 Trent Richardson
-* Dual licensed under the MIT and GPL licenses.
-* http://trentrichardson.com/Impromptu/GPL-LICENSE.txt
-* http://trentrichardson.com/Impromptu/MIT-LICENSE.txt
-*
-* HERES THE CSS:
-* .ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }
-* .ui-timepicker-div dl { text-align: left; }
-* .ui-timepicker-div dl dt { height: 25px; margin-bottom: -25px; }
-* .ui-timepicker-div dl dd { margin: 0 10px 10px 65px; }
-* .ui-timepicker-div td { font-size: 90%; }
-* .ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }
-*/
-
-(function($) {
-
-$.extend($.ui, { timepicker: { version: "0.9.9" } });
-
-/* Time picker manager.
- Use the singleton instance of this class, $.timepicker, to interact with the time picker.
- Settings for (groups of) time pickers are maintained in an instance object,
- allowing multiple different settings on the same page. */
-
-function Timepicker() {
- this.regional = []; // Available regional settings, indexed by language code
- this.regional[''] = { // Default regional settings
- currentText: 'Now',
- closeText: 'Done',
- ampm: false,
- amNames: ['AM', 'A'],
- pmNames: ['PM', 'P'],
- timeFormat: 'hh:mm tt',
- timeSuffix: '',
- timeOnlyTitle: 'Choose Time',
- timeText: 'Time',
- hourText: 'Hour',
- minuteText: 'Minute',
- secondText: 'Second',
- millisecText: 'Millisecond',
- timezoneText: 'Time Zone'
- };
- this._defaults = { // Global defaults for all the datetime picker instances
- showButtonPanel: true,
- timeOnly: false,
- showHour: true,
- showMinute: true,
- showSecond: false,
- showMillisec: false,
- showTimezone: false,
- showTime: true,
- stepHour: 1,
- stepMinute: 1,
- stepSecond: 1,
- stepMillisec: 1,
- hour: 0,
- minute: 0,
- second: 0,
- millisec: 0,
- timezone: '+0000',
- hourMin: 0,
- minuteMin: 0,
- secondMin: 0,
- millisecMin: 0,
- hourMax: 23,
- minuteMax: 59,
- secondMax: 59,
- millisecMax: 999,
- minDateTime: null,
- maxDateTime: null,
- onSelect: null,
- hourGrid: 0,
- minuteGrid: 0,
- secondGrid: 0,
- millisecGrid: 0,
- alwaysSetTime: true,
- separator: ' ',
- altFieldTimeOnly: true,
- showTimepicker: true,
- timezoneIso8609: false,
- timezoneList: null,
- addSliderAccess: false,
- sliderAccessArgs: null
- };
- $.extend(this._defaults, this.regional['']);
-};
-
-$.extend(Timepicker.prototype, {
- $input: null,
- $altInput: null,
- $timeObj: null,
- inst: null,
- hour_slider: null,
- minute_slider: null,
- second_slider: null,
- millisec_slider: null,
- timezone_select: null,
- hour: 0,
- minute: 0,
- second: 0,
- millisec: 0,
- timezone: '+0000',
- hourMinOriginal: null,
- minuteMinOriginal: null,
- secondMinOriginal: null,
- millisecMinOriginal: null,
- hourMaxOriginal: null,
- minuteMaxOriginal: null,
- secondMaxOriginal: null,
- millisecMaxOriginal: null,
- ampm: '',
- formattedDate: '',
- formattedTime: '',
- formattedDateTime: '',
- timezoneList: null,
-
- /* Override the default settings for all instances of the time picker.
- @param settings object - the new settings to use as defaults (anonymous object)
- @return the manager object */
- setDefaults: function(settings) {
- extendRemove(this._defaults, settings || {});
- return this;
- },
-
- //########################################################################
- // Create a new Timepicker instance
- //########################################################################
- _newInst: function($input, o) {
- var tp_inst = new Timepicker(),
- inlineSettings = {};
-
- for (var attrName in this._defaults) {
- var attrValue = $input.attr('time:' + attrName);
- if (attrValue) {
- try {
- inlineSettings[attrName] = eval(attrValue);
- } catch (err) {
- inlineSettings[attrName] = attrValue;
- }
- }
- }
- tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, o, {
- beforeShow: function(input, dp_inst) {
- if ($.isFunction(o.beforeShow))
- return o.beforeShow(input, dp_inst, tp_inst);
- },
- onChangeMonthYear: function(year, month, dp_inst) {
- // Update the time as well : this prevents the time from disappearing from the $input field.
- tp_inst._updateDateTime(dp_inst);
- if ($.isFunction(o.onChangeMonthYear))
- o.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst);
- },
- onClose: function(dateText, dp_inst) {
- if (tp_inst.timeDefined === true && $input.val() != '')
- tp_inst._updateDateTime(dp_inst);
- if ($.isFunction(o.onClose))
- o.onClose.call($input[0], dateText, dp_inst, tp_inst);
- },
- timepicker: tp_inst // add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');
- });
- tp_inst.amNames = $.map(tp_inst._defaults.amNames, function(val) { return val.toUpperCase() ;});
- tp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function(val) { return val.toUpperCase() ;});
-
- if (tp_inst._defaults.timezoneList === null) {
- var timezoneList = [];
- for (var i = -11; i <= 12; i++)
- timezoneList.push((i >= 0 ? '+' : '-') + ('0' + Math.abs(i).toString()).slice(-2) + '00');
- if (tp_inst._defaults.timezoneIso8609)
- timezoneList = $.map(timezoneList, function(val) {
- return val == '+0000' ? 'Z' : (val.substring(0, 3) + ':' + val.substring(3));
- });
- tp_inst._defaults.timezoneList = timezoneList;
- }
-
- tp_inst.hour = tp_inst._defaults.hour;
- tp_inst.minute = tp_inst._defaults.minute;
- tp_inst.second = tp_inst._defaults.second;
- tp_inst.millisec = tp_inst._defaults.millisec;
- tp_inst.ampm = '';
- tp_inst.$input = $input;
-
- if (o.altField)
- tp_inst.$altInput = $(o.altField)
- .css({ cursor: 'pointer' })
- .focus(function(){ $input.trigger("focus"); });
-
- if(tp_inst._defaults.minDate==0 || tp_inst._defaults.minDateTime==0)
- {
- tp_inst._defaults.minDate=new Date();
- }
- if(tp_inst._defaults.maxDate==0 || tp_inst._defaults.maxDateTime==0)
- {
- tp_inst._defaults.maxDate=new Date();
- }
-
- // datepicker needs minDate/maxDate, timepicker needs minDateTime/maxDateTime..
- if(tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date)
- tp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime());
- if(tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date)
- tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime());
- if(tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date)
- tp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime());
- if(tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date)
- tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime());
- return tp_inst;
- },
-
- //########################################################################
- // add our sliders to the calendar
- //########################################################################
- _addTimePicker: function(dp_inst) {
- var currDT = (this.$altInput && this._defaults.altFieldTimeOnly) ?
- this.$input.val() + ' ' + this.$altInput.val() :
- this.$input.val();
-
- this.timeDefined = this._parseTime(currDT);
- this._limitMinMaxDateTime(dp_inst, false);
- this._injectTimePicker();
- },
-
- //########################################################################
- // parse the time string from input value or _setTime
- //########################################################################
- _parseTime: function(timeString, withDate) {
- var regstr = this._defaults.timeFormat.toString()
- .replace(/h{1,2}/ig, '(\\d?\\d)')
- .replace(/m{1,2}/ig, '(\\d?\\d)')
- .replace(/s{1,2}/ig, '(\\d?\\d)')
- .replace(/l{1}/ig, '(\\d?\\d?\\d)')
- .replace(/t{1,2}/ig, this._getPatternAmpm())
- .replace(/z{1}/ig, '(z|[-+]\\d\\d:?\\d\\d)?')
- .replace(/\s/g, '\\s?') + this._defaults.timeSuffix + '$',
- order = this._getFormatPositions(),
- ampm = '',
- treg;
-
- if (!this.inst) this.inst = $.datepicker._getInst(this.$input[0]);
-
- if (withDate || !this._defaults.timeOnly) {
- // the time should come after x number of characters and a space.
- // x = at least the length of text specified by the date format
- var dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat');
- // escape special regex characters in the separator
- var specials = new RegExp("[.*+?|()\\[\\]{}\\\\]", "g");
- regstr = '^.{' + dp_dateFormat.length + ',}?' + this._defaults.separator.replace(specials, "\\$&") + regstr;
- }
-
- treg = timeString.match(new RegExp(regstr, 'i'));
-
- if (treg) {
- if (order.t !== -1) {
- if (treg[order.t] === undefined || treg[order.t].length === 0) {
- ampm = '';
- this.ampm = '';
- } else {
- ampm = $.inArray(treg[order.t].toUpperCase(), this.amNames) !== -1 ? 'AM' : 'PM';
- this.ampm = this._defaults[ampm == 'AM' ? 'amNames' : 'pmNames'][0];
- }
- }
-
- if (order.h !== -1) {
- if (ampm == 'AM' && treg[order.h] == '12')
- this.hour = 0; // 12am = 0 hour
- else if (ampm == 'PM' && treg[order.h] != '12')
- this.hour = (parseFloat(treg[order.h]) + 12).toFixed(0); // 12pm = 12 hour, any other pm = hour + 12
- else this.hour = Number(treg[order.h]);
- }
-
- if (order.m !== -1) this.minute = Number(treg[order.m]);
- if (order.s !== -1) this.second = Number(treg[order.s]);
- if (order.l !== -1) this.millisec = Number(treg[order.l]);
- if (order.z !== -1 && treg[order.z] !== undefined) {
- var tz = treg[order.z].toUpperCase();
- switch (tz.length) {
- case 1: // Z
- tz = this._defaults.timezoneIso8609 ? 'Z' : '+0000';
- break;
- case 5: // +hhmm
- if (this._defaults.timezoneIso8609)
- tz = tz.substring(1) == '0000'
- ? 'Z'
- : tz.substring(0, 3) + ':' + tz.substring(3);
- break;
- case 6: // +hh:mm
- if (!this._defaults.timezoneIso8609)
- tz = tz == 'Z' || tz.substring(1) == '00:00'
- ? '+0000'
- : tz.replace(/:/, '');
- else if (tz.substring(1) == '00:00')
- tz = 'Z';
- break;
- }
- this.timezone = tz;
- }
-
- return true;
-
- }
- return false;
- },
-
- //########################################################################
- // pattern for standard and localized AM/PM markers
- //########################################################################
- _getPatternAmpm: function() {
- var markers = [];
- o = this._defaults;
- if (o.amNames)
- $.merge(markers, o.amNames);
- if (o.pmNames)
- $.merge(markers, o.pmNames);
- markers = $.map(markers, function(val) { return val.replace(/[.*+?|()\[\]{}\\]/g, '\\$&') });
- return '(' + markers.join('|') + ')?';
- },
-
- //########################################################################
- // figure out position of time elements.. cause js cant do named captures
- //########################################################################
- _getFormatPositions: function() {
- var finds = this._defaults.timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|t{1,2}|z)/g),
- orders = { h: -1, m: -1, s: -1, l: -1, t: -1, z: -1 };
-
- if (finds)
- for (var i = 0; i < finds.length; i++)
- if (orders[finds[i].toString().charAt(0)] == -1)
- orders[finds[i].toString().charAt(0)] = i + 1;
-
- return orders;
- },
-
- //########################################################################
- // generate and inject html for timepicker into ui datepicker
- //########################################################################
- _injectTimePicker: function() {
- var $dp = this.inst.dpDiv,
- o = this._defaults,
- tp_inst = this,
- // Added by Peter Medeiros:
- // - Figure out what the hour/minute/second max should be based on the step values.
- // - Example: if stepMinute is 15, then minMax is 45.
- hourMax = parseInt((o.hourMax - ((o.hourMax - o.hourMin) % o.stepHour)) ,10),
- minMax = parseInt((o.minuteMax - ((o.minuteMax - o.minuteMin) % o.stepMinute)) ,10),
- secMax = parseInt((o.secondMax - ((o.secondMax - o.secondMin) % o.stepSecond)) ,10),
- millisecMax = parseInt((o.millisecMax - ((o.millisecMax - o.millisecMin) % o.stepMillisec)) ,10),
- dp_id = this.inst.id.toString().replace(/([^A-Za-z0-9_])/g, '');
-
- // Prevent displaying twice
- //if ($dp.find("div#ui-timepicker-div-"+ dp_id).length === 0) {
- if ($dp.find("div#ui-timepicker-div-"+ dp_id).length === 0 && o.showTimepicker) {
- var noDisplay = ' style="display:none;"',
- html = '<div class="ui-timepicker-div" id="ui-timepicker-div-' + dp_id + '"><dl>' +
- '<dt class="ui_tpicker_time_label" id="ui_tpicker_time_label_' + dp_id + '"' +
- ((o.showTime) ? '' : noDisplay) + '>' + o.timeText + '</dt>' +
- '<dd class="ui_tpicker_time" id="ui_tpicker_time_' + dp_id + '"' +
- ((o.showTime) ? '' : noDisplay) + '></dd>' +
- '<dt class="ui_tpicker_hour_label" id="ui_tpicker_hour_label_' + dp_id + '"' +
- ((o.showHour) ? '' : noDisplay) + '>' + o.hourText + '</dt>',
- hourGridSize = 0,
- minuteGridSize = 0,
- secondGridSize = 0,
- millisecGridSize = 0,
- size;
-
- // Hours
- html += '<dd class="ui_tpicker_hour"><div id="ui_tpicker_hour_' + dp_id + '"' +
- ((o.showHour) ? '' : noDisplay) + '></div>';
- if (o.showHour && o.hourGrid > 0) {
- html += '<div style="padding-left: 1px"><table class="ui-tpicker-grid-label"><tr>';
-
- for (var h = o.hourMin; h <= hourMax; h += parseInt(o.hourGrid,10)) {
- hourGridSize++;
- var tmph = (o.ampm && h > 12) ? h-12 : h;
- if (tmph < 10) tmph = '0' + tmph;
- if (o.ampm) {
- if (h == 0) tmph = 12 +'a';
- else if (h < 12) tmph += 'a';
- else tmph += 'p';
- }
- html += '<td>' + tmph + '</td>';
- }
-
- html += '</tr></table></div>';
- }
- html += '</dd>';
-
- // Minutes
- html += '<dt class="ui_tpicker_minute_label" id="ui_tpicker_minute_label_' + dp_id + '"' +
- ((o.showMinute) ? '' : noDisplay) + '>' + o.minuteText + '</dt>'+
- '<dd class="ui_tpicker_minute"><div id="ui_tpicker_minute_' + dp_id + '"' +
- ((o.showMinute) ? '' : noDisplay) + '></div>';
-
- if (o.showMinute && o.minuteGrid > 0) {
- html += '<div style="padding-left: 1px"><table class="ui-tpicker-grid-label"><tr>';
-
- for (var m = o.minuteMin; m <= minMax; m += parseInt(o.minuteGrid,10)) {
- minuteGridSize++;
- html += '<td>' + ((m < 10) ? '0' : '') + m + '</td>';
- }
-
- html += '</tr></table></div>';
- }
- html += '</dd>';
-
- // Seconds
- html += '<dt class="ui_tpicker_second_label" id="ui_tpicker_second_label_' + dp_id + '"' +
- ((o.showSecond) ? '' : noDisplay) + '>' + o.secondText + '</dt>'+
- '<dd class="ui_tpicker_second"><div id="ui_tpicker_second_' + dp_id + '"'+
- ((o.showSecond) ? '' : noDisplay) + '></div>';
-
- if (o.showSecond && o.secondGrid > 0) {
- html += '<div style="padding-left: 1px"><table><tr>';
-
- for (var s = o.secondMin; s <= secMax; s += parseInt(o.secondGrid,10)) {
- secondGridSize++;
- html += '<td>' + ((s < 10) ? '0' : '') + s + '</td>';
- }
-
- html += '</tr></table></div>';
- }
- html += '</dd>';
-
- // Milliseconds
- html += '<dt class="ui_tpicker_millisec_label" id="ui_tpicker_millisec_label_' + dp_id + '"' +
- ((o.showMillisec) ? '' : noDisplay) + '>' + o.millisecText + '</dt>'+
- '<dd class="ui_tpicker_millisec"><div id="ui_tpicker_millisec_' + dp_id + '"'+
- ((o.showMillisec) ? '' : noDisplay) + '></div>';
-
- if (o.showMillisec && o.millisecGrid > 0) {
- html += '<div style="padding-left: 1px"><table><tr>';
-
- for (var l = o.millisecMin; l <= millisecMax; l += parseInt(o.millisecGrid,10)) {
- millisecGridSize++;
- html += '<td>' + ((l < 10) ? '0' : '') + l + '</td>';
- }
-
- html += '</tr></table></div>';
- }
- html += '</dd>';
-
- // Timezone
- html += '<dt class="ui_tpicker_timezone_label" id="ui_tpicker_timezone_label_' + dp_id + '"' +
- ((o.showTimezone) ? '' : noDisplay) + '>' + o.timezoneText + '</dt>';
- html += '<dd class="ui_tpicker_timezone" id="ui_tpicker_timezone_' + dp_id + '"' +
- ((o.showTimezone) ? '' : noDisplay) + '></dd>';
-
- html += '</dl></div>';
- $tp = $(html);
-
- // if we only want time picker...
- if (o.timeOnly === true) {
- $tp.prepend(
- '<div class="ui-widget-header ui-helper-clearfix ui-corner-all">' +
- '<div class="ui-datepicker-title">' + o.timeOnlyTitle + '</div>' +
- '</div>');
- $dp.find('.ui-datepicker-header, .ui-datepicker-calendar').hide();
- }
-
- this.hour_slider = $tp.find('#ui_tpicker_hour_'+ dp_id).slider({
- orientation: "horizontal",
- value: this.hour,
- min: o.hourMin,
- max: hourMax,
- step: o.stepHour,
- slide: function(event, ui) {
- tp_inst.hour_slider.slider( "option", "value", ui.value);
- tp_inst._onTimeChange();
- }
- });
-
-
- // Updated by Peter Medeiros:
- // - Pass in Event and UI instance into slide function
- this.minute_slider = $tp.find('#ui_tpicker_minute_'+ dp_id).slider({
- orientation: "horizontal",
- value: this.minute,
- min: o.minuteMin,
- max: minMax,
- step: o.stepMinute,
- slide: function(event, ui) {
- tp_inst.minute_slider.slider( "option", "value", ui.value);
- tp_inst._onTimeChange();
- }
- });
-
- this.second_slider = $tp.find('#ui_tpicker_second_'+ dp_id).slider({
- orientation: "horizontal",
- value: this.second,
- min: o.secondMin,
- max: secMax,
- step: o.stepSecond,
- slide: function(event, ui) {
- tp_inst.second_slider.slider( "option", "value", ui.value);
- tp_inst._onTimeChange();
- }
- });
-
- this.millisec_slider = $tp.find('#ui_tpicker_millisec_'+ dp_id).slider({
- orientation: "horizontal",
- value: this.millisec,
- min: o.millisecMin,
- max: millisecMax,
- step: o.stepMillisec,
- slide: function(event, ui) {
- tp_inst.millisec_slider.slider( "option", "value", ui.value);
- tp_inst._onTimeChange();
- }
- });
-
- this.timezone_select = $tp.find('#ui_tpicker_timezone_'+ dp_id).append('<select></select>').find("select");
- $.fn.append.apply(this.timezone_select,
- $.map(o.timezoneList, function(val, idx) {
- return $("<option />")
- .val(typeof val == "object" ? val.value : val)
- .text(typeof val == "object" ? val.label : val);
- })
- );
- this.timezone_select.val((typeof this.timezone != "undefined" && this.timezone != null && this.timezone != "") ? this.timezone : o.timezone);
- this.timezone_select.change(function() {
- tp_inst._onTimeChange();
- });
-
- // Add grid functionality
- if (o.showHour && o.hourGrid > 0) {
- size = 100 * hourGridSize * o.hourGrid / (hourMax - o.hourMin);
-
- $tp.find(".ui_tpicker_hour table").css({
- width: size + "%",
- marginLeft: (size / (-2 * hourGridSize)) + "%",
- borderCollapse: 'collapse'
- }).find("td").each( function(index) {
- $(this).click(function() {
- var h = $(this).html();
- if(o.ampm) {
- var ap = h.substring(2).toLowerCase(),
- aph = parseInt(h.substring(0,2), 10);
- if (ap == 'a') {
- if (aph == 12) h = 0;
- else h = aph;
- } else if (aph == 12) h = 12;
- else h = aph + 12;
- }
- tp_inst.hour_slider.slider("option", "value", h);
- tp_inst._onTimeChange();
- tp_inst._onSelectHandler();
- }).css({
- cursor: 'pointer',
- width: (100 / hourGridSize) + '%',
- textAlign: 'center',
- overflow: 'hidden'
- });
- });
- }
-
- if (o.showMinute && o.minuteGrid > 0) {
- size = 100 * minuteGridSize * o.minuteGrid / (minMax - o.minuteMin);
- $tp.find(".ui_tpicker_minute table").css({
- width: size + "%",
- marginLeft: (size / (-2 * minuteGridSize)) + "%",
- borderCollapse: 'collapse'
- }).find("td").each(function(index) {
- $(this).click(function() {
- tp_inst.minute_slider.slider("option", "value", $(this).html());
- tp_inst._onTimeChange();
- tp_inst._onSelectHandler();
- }).css({
- cursor: 'pointer',
- width: (100 / minuteGridSize) + '%',
- textAlign: 'center',
- overflow: 'hidden'
- });
- });
- }
-
- if (o.showSecond && o.secondGrid > 0) {
- $tp.find(".ui_tpicker_second table").css({
- width: size + "%",
- marginLeft: (size / (-2 * secondGridSize)) + "%",
- borderCollapse: 'collapse'
- }).find("td").each(function(index) {
- $(this).click(function() {
- tp_inst.second_slider.slider("option", "value", $(this).html());
- tp_inst._onTimeChange();
- tp_inst._onSelectHandler();
- }).css({
- cursor: 'pointer',
- width: (100 / secondGridSize) + '%',
- textAlign: 'center',
- overflow: 'hidden'
- });
- });
- }
-
- if (o.showMillisec && o.millisecGrid > 0) {
- $tp.find(".ui_tpicker_millisec table").css({
- width: size + "%",
- marginLeft: (size / (-2 * millisecGridSize)) + "%",
- borderCollapse: 'collapse'
- }).find("td").each(function(index) {
- $(this).click(function() {
- tp_inst.millisec_slider.slider("option", "value", $(this).html());
- tp_inst._onTimeChange();
- tp_inst._onSelectHandler();
- }).css({
- cursor: 'pointer',
- width: (100 / millisecGridSize) + '%',
- textAlign: 'center',
- overflow: 'hidden'
- });
- });
- }
-
- var $buttonPanel = $dp.find('.ui-datepicker-buttonpane');
- if ($buttonPanel.length) $buttonPanel.before($tp);
- else $dp.append($tp);
-
- this.$timeObj = $tp.find('#ui_tpicker_time_'+ dp_id);
-
- if (this.inst !== null) {
- var timeDefined = this.timeDefined;
- this._onTimeChange();
- this.timeDefined = timeDefined;
- }
-
- //Emulate datepicker onSelect behavior. Call on slidestop.
- var onSelectDelegate = function() {
- tp_inst._onSelectHandler();
- };
- this.hour_slider.bind('slidestop',onSelectDelegate);
- this.minute_slider.bind('slidestop',onSelectDelegate);
- this.second_slider.bind('slidestop',onSelectDelegate);
- this.millisec_slider.bind('slidestop',onSelectDelegate);
-
- // slideAccess integration: http://trentrichardson.com/2011/11/11/jquery-ui-sliders-and-touch-accessibility/
- if (this._defaults.addSliderAccess){
- var sliderAccessArgs = this._defaults.sliderAccessArgs;
- setTimeout(function(){ // fix for inline mode
- if($tp.find('.ui-slider-access').length == 0){
- $tp.find('.ui-slider:visible').sliderAccess(sliderAccessArgs);
-
- // fix any grids since sliders are shorter
- var sliderAccessWidth = $tp.find('.ui-slider-access:eq(0)').outerWidth(true);
- if(sliderAccessWidth){
- $tp.find('table:visible').each(function(){
- var $g = $(this),
- oldWidth = $g.outerWidth(),
- oldMarginLeft = $g.css('marginLeft').toString().replace('%',''),
- newWidth = oldWidth - sliderAccessWidth,
- newMarginLeft = ((oldMarginLeft * newWidth)/oldWidth) + '%';
-
- $g.css({ width: newWidth, marginLeft: newMarginLeft });
- });
- }
- }
- },0);
- }
- // end slideAccess integration
-
- }
- },
-
- //########################################################################
- // This function tries to limit the ability to go outside the
- // min/max date range
- //########################################################################
- _limitMinMaxDateTime: function(dp_inst, adjustSliders){
- var o = this._defaults,
- dp_date = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay);
-
- if(!this._defaults.showTimepicker) return; // No time so nothing to check here
-
- if($.datepicker._get(dp_inst, 'minDateTime') !== null && $.datepicker._get(dp_inst, 'minDateTime') !== undefined && dp_date){
- var minDateTime = $.datepicker._get(dp_inst, 'minDateTime'),
- minDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);
-
- if(this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null){
- this.hourMinOriginal = o.hourMin;
- this.minuteMinOriginal = o.minuteMin;
- this.secondMinOriginal = o.secondMin;
- this.millisecMinOriginal = o.millisecMin;
- }
-
- if(dp_inst.settings.timeOnly || minDateTimeDate.getTime() == dp_date.getTime()) {
- this._defaults.hourMin = minDateTime.getHours();
- if (this.hour <= this._defaults.hourMin) {
- this.hour = this._defaults.hourMin;
- this._defaults.minuteMin = minDateTime.getMinutes();
- if (this.minute <= this._defaults.minuteMin) {
- this.minute = this._defaults.minuteMin;
- this._defaults.secondMin = minDateTime.getSeconds();
- } else if (this.second <= this._defaults.secondMin){
- this.second = this._defaults.secondMin;
- this._defaults.millisecMin = minDateTime.getMilliseconds();
- } else {
- if(this.millisec < this._defaults.millisecMin)
- this.millisec = this._defaults.millisecMin;
- this._defaults.millisecMin = this.millisecMinOriginal;
- }
- } else {
- this._defaults.minuteMin = this.minuteMinOriginal;
- this._defaults.secondMin = this.secondMinOriginal;
- this._defaults.millisecMin = this.millisecMinOriginal;
- }
- }else{
- this._defaults.hourMin = this.hourMinOriginal;
- this._defaults.minuteMin = this.minuteMinOriginal;
- this._defaults.secondMin = this.secondMinOriginal;
- this._defaults.millisecMin = this.millisecMinOriginal;
- }
- }
-
- if($.datepicker._get(dp_inst, 'maxDateTime') !== null && $.datepicker._get(dp_inst, 'maxDateTime') !== undefined && dp_date){
- var maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'),
- maxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);
-
- if(this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null){
- this.hourMaxOriginal = o.hourMax;
- this.minuteMaxOriginal = o.minuteMax;
- this.secondMaxOriginal = o.secondMax;
- this.millisecMaxOriginal = o.millisecMax;
- }
-
- if(dp_inst.settings.timeOnly || maxDateTimeDate.getTime() == dp_date.getTime()){
- this._defaults.hourMax = maxDateTime.getHours();
- if (this.hour >= this._defaults.hourMax) {
- this.hour = this._defaults.hourMax;
- this._defaults.minuteMax = maxDateTime.getMinutes();
- if (this.minute >= this._defaults.minuteMax) {
- this.minute = this._defaults.minuteMax;
- this._defaults.secondMax = maxDateTime.getSeconds();
- } else if (this.second >= this._defaults.secondMax) {
- this.second = this._defaults.secondMax;
- this._defaults.millisecMax = maxDateTime.getMilliseconds();
- } else {
- if(this.millisec > this._defaults.millisecMax) this.millisec = this._defaults.millisecMax;
- this._defaults.millisecMax = this.millisecMaxOriginal;
- }
- } else {
- this._defaults.minuteMax = this.minuteMaxOriginal;
- this._defaults.secondMax = this.secondMaxOriginal;
- this._defaults.millisecMax = this.millisecMaxOriginal;
- }
- }else{
- this._defaults.hourMax = this.hourMaxOriginal;
- this._defaults.minuteMax = this.minuteMaxOriginal;
- this._defaults.secondMax = this.secondMaxOriginal;
- this._defaults.millisecMax = this.millisecMaxOriginal;
- }
- }
-
- if(adjustSliders !== undefined && adjustSliders === true){
- var hourMax = parseInt((this._defaults.hourMax - ((this._defaults.hourMax - this._defaults.hourMin) % this._defaults.stepHour)) ,10),
- minMax = parseInt((this._defaults.minuteMax - ((this._defaults.minuteMax - this._defaults.minuteMin) % this._defaults.stepMinute)) ,10),
- secMax = parseInt((this._defaults.secondMax - ((this._defaults.secondMax - this._defaults.secondMin) % this._defaults.stepSecond)) ,10),
- millisecMax = parseInt((this._defaults.millisecMax - ((this._defaults.millisecMax - this._defaults.millisecMin) % this._defaults.stepMillisec)) ,10);
-
- if(this.hour_slider)
- this.hour_slider.slider("option", { min: this._defaults.hourMin, max: hourMax }).slider('value', this.hour);
- if(this.minute_slider)
- this.minute_slider.slider("option", { min: this._defaults.minuteMin, max: minMax }).slider('value', this.minute);
- if(this.second_slider)
- this.second_slider.slider("option", { min: this._defaults.secondMin, max: secMax }).slider('value', this.second);
- if(this.millisec_slider)
- this.millisec_slider.slider("option", { min: this._defaults.millisecMin, max: millisecMax }).slider('value', this.millisec);
- }
-
- },
-
-
- //########################################################################
- // when a slider moves, set the internal time...
- // on time change is also called when the time is updated in the text field
- //########################################################################
- _onTimeChange: function() {
- var hour = (this.hour_slider) ? this.hour_slider.slider('value') : false,
- minute = (this.minute_slider) ? this.minute_slider.slider('value') : false,
- second = (this.second_slider) ? this.second_slider.slider('value') : false,
- millisec = (this.millisec_slider) ? this.millisec_slider.slider('value') : false,
- timezone = (this.timezone_select) ? this.timezone_select.val() : false,
- o = this._defaults;
-
- if (typeof(hour) == 'object') hour = false;
- if (typeof(minute) == 'object') minute = false;
- if (typeof(second) == 'object') second = false;
- if (typeof(millisec) == 'object') millisec = false;
- if (typeof(timezone) == 'object') timezone = false;
-
- if (hour !== false) hour = parseInt(hour,10);
- if (minute !== false) minute = parseInt(minute,10);
- if (second !== false) second = parseInt(second,10);
- if (millisec !== false) millisec = parseInt(millisec,10);
-
- var ampm = o[hour < 12 ? 'amNames' : 'pmNames'][0];
-
- // If the update was done in the input field, the input field should not be updated.
- // If the update was done using the sliders, update the input field.
- var hasChanged = (hour != this.hour || minute != this.minute
- || second != this.second || millisec != this.millisec
- || (this.ampm.length > 0
- && (hour < 12) != ($.inArray(this.ampm.toUpperCase(), this.amNames) !== -1))
- || timezone != this.timezone);
-
- if (hasChanged) {
-
- if (hour !== false)this.hour = hour;
- if (minute !== false) this.minute = minute;
- if (second !== false) this.second = second;
- if (millisec !== false) this.millisec = millisec;
- if (timezone !== false) this.timezone = timezone;
-
- if (!this.inst) this.inst = $.datepicker._getInst(this.$input[0]);
-
- this._limitMinMaxDateTime(this.inst, true);
- }
- if (o.ampm) this.ampm = ampm;
-
- //this._formatTime();
- this.formattedTime = $.datepicker.formatTime(this._defaults.timeFormat, this, this._defaults);
- if (this.$timeObj) this.$timeObj.text(this.formattedTime + o.timeSuffix);
- this.timeDefined = true;
- if (hasChanged) this._updateDateTime();
- },
-
- //########################################################################
- // call custom onSelect.
- // bind to sliders slidestop, and grid click.
- //########################################################################
- _onSelectHandler: function() {
- var onSelect = this._defaults.onSelect;
- var inputEl = this.$input ? this.$input[0] : null;
- if (onSelect && inputEl) {
- onSelect.apply(inputEl, [this.formattedDateTime, this]);
- }
- },
-
- //########################################################################
- // left for any backwards compatibility
- //########################################################################
- _formatTime: function(time, format) {
- time = time || { hour: this.hour, minute: this.minute, second: this.second, millisec: this.millisec, ampm: this.ampm, timezone: this.timezone };
- var tmptime = (format || this._defaults.timeFormat).toString();
-
- tmptime = $.datepicker.formatTime(tmptime, time, this._defaults);
-
- if (arguments.length) return tmptime;
- else this.formattedTime = tmptime;
- },
-
- //########################################################################
- // update our input with the new date time..
- //########################################################################
- _updateDateTime: function(dp_inst) {
- dp_inst = this.inst || dp_inst;
- var dt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),
- dateFmt = $.datepicker._get(dp_inst, 'dateFormat'),
- formatCfg = $.datepicker._getFormatConfig(dp_inst),
- timeAvailable = dt !== null && this.timeDefined;
- this.formattedDate = $.datepicker.formatDate(dateFmt, (dt === null ? new Date() : dt), formatCfg);
- var formattedDateTime = this.formattedDate;
- if (dp_inst.lastVal !== undefined && (dp_inst.lastVal.length > 0 && this.$input.val().length === 0))
- return;
-
- if (this._defaults.timeOnly === true) {
- formattedDateTime = this.formattedTime;
- } else if (this._defaults.timeOnly !== true && (this._defaults.alwaysSetTime || timeAvailable)) {
- formattedDateTime += this._defaults.separator + this.formattedTime + this._defaults.timeSuffix;
- }
-
- this.formattedDateTime = formattedDateTime;
-
- if(!this._defaults.showTimepicker) {
- this.$input.val(this.formattedDate);
- } else if (this.$altInput && this._defaults.altFieldTimeOnly === true) {
- this.$altInput.val(this.formattedTime);
- this.$input.val(this.formattedDate);
- } else if(this.$altInput) {
- this.$altInput.val(formattedDateTime);
- this.$input.val(formattedDateTime);
- } else {
- this.$input.val(formattedDateTime);
- }
-
- this.$input.trigger("change");
- }
-
-});
-
-$.fn.extend({
- //########################################################################
- // shorthand just to use timepicker..
- //########################################################################
- timepicker: function(o) {
- o = o || {};
- var tmp_args = arguments;
-
- if (typeof o == 'object') tmp_args[0] = $.extend(o, { timeOnly: true });
-
- return $(this).each(function() {
- $.fn.datetimepicker.apply($(this), tmp_args);
- });
- },
-
- //########################################################################
- // extend timepicker to datepicker
- //########################################################################
- datetimepicker: function(o) {
- o = o || {};
- var $input = this,
- tmp_args = arguments;
-
- if (typeof(o) == 'string'){
- if(o == 'getDate')
- return $.fn.datepicker.apply($(this[0]), tmp_args);
- else
- return this.each(function() {
- var $t = $(this);
- $t.datepicker.apply($t, tmp_args);
- });
- }
- else
- return this.each(function() {
- var $t = $(this);
- $t.datepicker($.timepicker._newInst($t, o)._defaults);
- });
- }
-});
-
-//########################################################################
-// format the time all pretty...
-// format = string format of the time
-// time = a {}, not a Date() for timezones
-// options = essentially the regional[].. amNames, pmNames, ampm
-//########################################################################
-$.datepicker.formatTime = function(format, time, options) {
- options = options || {};
- options = $.extend($.timepicker._defaults, options);
- time = $.extend({hour:0, minute:0, second:0, millisec:0, timezone:'+0000'}, time);
-
- var tmptime = format;
- var ampmName = options['amNames'][0];
-
- var hour = parseInt(time.hour, 10);
- if (options.ampm) {
- if (hour > 11){
- ampmName = options['pmNames'][0];
- if(hour > 12)
- hour = hour % 12;
- }
- if (hour === 0)
- hour = 12;
- }
- tmptime = tmptime.replace(/(?:hh?|mm?|ss?|[tT]{1,2}|[lz])/g, function(match) {
- switch (match.toLowerCase()) {
- case 'hh': return ('0' + hour).slice(-2);
- case 'h': return hour;
- case 'mm': return ('0' + time.minute).slice(-2);
- case 'm': return time.minute;
- case 'ss': return ('0' + time.second).slice(-2);
- case 's': return time.second;
- case 'l': return ('00' + time.millisec).slice(-3);
- case 'z': return time.timezone;
- case 't': case 'tt':
- if (options.ampm) {
- if (match.length == 1)
- ampmName = ampmName.charAt(0);
- return match.charAt(0) == 'T' ? ampmName.toUpperCase() : ampmName.toLowerCase();
- }
- return '';
- }
- });
-
- tmptime = $.trim(tmptime);
- return tmptime;
-};
-
-//########################################################################
-// the bad hack :/ override datepicker so it doesnt close on select
-// inspired: http://stackoverflow.com/questions/1252512/jquery-datepicker-prevent-closing-picker-when-clicking-a-date/1762378#1762378
-//########################################################################
-$.datepicker._base_selectDate = $.datepicker._selectDate;
-$.datepicker._selectDate = function (id, dateStr) {
- var inst = this._getInst($(id)[0]),
- tp_inst = this._get(inst, 'timepicker');
-
- if (tp_inst) {
- tp_inst._limitMinMaxDateTime(inst, true);
- inst.inline = inst.stay_open = true;
- //This way the onSelect handler called from calendarpicker get the full dateTime
- this._base_selectDate(id, dateStr);
- inst.inline = inst.stay_open = false;
- this._notifyChange(inst);
- this._updateDatepicker(inst);
- }
- else this._base_selectDate(id, dateStr);
-};
-
-//#############################################################################################
-// second bad hack :/ override datepicker so it triggers an event when changing the input field
-// and does not redraw the datepicker on every selectDate event
-//#############################################################################################
-$.datepicker._base_updateDatepicker = $.datepicker._updateDatepicker;
-$.datepicker._updateDatepicker = function(inst) {
-
- // don't popup the datepicker if there is another instance already opened
- var input = inst.input[0];
- if($.datepicker._curInst &&
- $.datepicker._curInst != inst &&
- $.datepicker._datepickerShowing &&
- $.datepicker._lastInput != input) {
- return;
- }
-
- if (typeof(inst.stay_open) !== 'boolean' || inst.stay_open === false) {
-
- this._base_updateDatepicker(inst);
-
- // Reload the time control when changing something in the input text field.
- var tp_inst = this._get(inst, 'timepicker');
- if(tp_inst) tp_inst._addTimePicker(inst);
- }
-};
-
-//#######################################################################################
-// third bad hack :/ override datepicker so it allows spaces and colon in the input field
-//#######################################################################################
-$.datepicker._base_doKeyPress = $.datepicker._doKeyPress;
-$.datepicker._doKeyPress = function(event) {
- var inst = $.datepicker._getInst(event.target),
- tp_inst = $.datepicker._get(inst, 'timepicker');
-
- if (tp_inst) {
- if ($.datepicker._get(inst, 'constrainInput')) {
- var ampm = tp_inst._defaults.ampm,
- dateChars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')),
- datetimeChars = tp_inst._defaults.timeFormat.toString()
- .replace(/[hms]/g, '')
- .replace(/TT/g, ampm ? 'APM' : '')
- .replace(/Tt/g, ampm ? 'AaPpMm' : '')
- .replace(/tT/g, ampm ? 'AaPpMm' : '')
- .replace(/T/g, ampm ? 'AP' : '')
- .replace(/tt/g, ampm ? 'apm' : '')
- .replace(/t/g, ampm ? 'ap' : '') +
- " " +
- tp_inst._defaults.separator +
- tp_inst._defaults.timeSuffix +
- (tp_inst._defaults.showTimezone ? tp_inst._defaults.timezoneList.join('') : '') +
- (tp_inst._defaults.amNames.join('')) +
- (tp_inst._defaults.pmNames.join('')) +
- dateChars,
- chr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);
- return event.ctrlKey || (chr < ' ' || !dateChars || datetimeChars.indexOf(chr) > -1);
- }
- }
-
- return $.datepicker._base_doKeyPress(event);
-};
-
-//#######################################################################################
-// Override key up event to sync manual input changes.
-//#######################################################################################
-$.datepicker._base_doKeyUp = $.datepicker._doKeyUp;
-$.datepicker._doKeyUp = function (event) {
- var inst = $.datepicker._getInst(event.target),
- tp_inst = $.datepicker._get(inst, 'timepicker');
-
- if (tp_inst) {
- if (tp_inst._defaults.timeOnly && (inst.input.val() != inst.lastVal)) {
- try {
- $.datepicker._updateDatepicker(inst);
- }
- catch (err) {
- $.datepicker.log(err);
- }
- }
- }
-
- return $.datepicker._base_doKeyUp(event);
-};
-
-//#######################################################################################
-// override "Today" button to also grab the time.
-//#######################################################################################
-$.datepicker._base_gotoToday = $.datepicker._gotoToday;
-$.datepicker._gotoToday = function(id) {
- var inst = this._getInst($(id)[0]),
- $dp = inst.dpDiv;
- this._base_gotoToday(id);
- var now = new Date();
- var tp_inst = this._get(inst, 'timepicker');
- if (tp_inst && tp_inst._defaults.showTimezone && tp_inst.timezone_select) {
- var tzoffset = now.getTimezoneOffset(); // If +0100, returns -60
- var tzsign = tzoffset > 0 ? '-' : '+';
- tzoffset = Math.abs(tzoffset);
- var tzmin = tzoffset % 60;
- tzoffset = tzsign + ('0' + (tzoffset - tzmin) / 60).slice(-2) + ('0' + tzmin).slice(-2);
- if (tp_inst._defaults.timezoneIso8609)
- tzoffset = tzoffset.substring(0, 3) + ':' + tzoffset.substring(3);
- tp_inst.timezone_select.val(tzoffset);
- }
- this._setTime(inst, now);
- $( '.ui-datepicker-today', $dp).click();
-};
-
-//#######################################################################################
-// Disable & enable the Time in the datetimepicker
-//#######################################################################################
-$.datepicker._disableTimepickerDatepicker = function(target, date, withDate) {
- var inst = this._getInst(target),
- tp_inst = this._get(inst, 'timepicker');
- $(target).datepicker('getDate'); // Init selected[Year|Month|Day]
- if (tp_inst) {
- tp_inst._defaults.showTimepicker = false;
- tp_inst._updateDateTime(inst);
- }
-};
-
-$.datepicker._enableTimepickerDatepicker = function(target, date, withDate) {
- var inst = this._getInst(target),
- tp_inst = this._get(inst, 'timepicker');
- $(target).datepicker('getDate'); // Init selected[Year|Month|Day]
- if (tp_inst) {
- tp_inst._defaults.showTimepicker = true;
- tp_inst._addTimePicker(inst); // Could be disabled on page load
- tp_inst._updateDateTime(inst);
- }
-};
-
-//#######################################################################################
-// Create our own set time function
-//#######################################################################################
-$.datepicker._setTime = function(inst, date) {
- var tp_inst = this._get(inst, 'timepicker');
- if (tp_inst) {
- var defaults = tp_inst._defaults,
- // calling _setTime with no date sets time to defaults
- hour = date ? date.getHours() : defaults.hour,
- minute = date ? date.getMinutes() : defaults.minute,
- second = date ? date.getSeconds() : defaults.second,
- millisec = date ? date.getMilliseconds() : defaults.millisec;
-
- //check if within min/max times..
- if ((hour < defaults.hourMin || hour > defaults.hourMax) || (minute < defaults.minuteMin || minute > defaults.minuteMax) || (second < defaults.secondMin || second > defaults.secondMax) || (millisec < defaults.millisecMin || millisec > defaults.millisecMax)) {
- hour = defaults.hourMin;
- minute = defaults.minuteMin;
- second = defaults.secondMin;
- millisec = defaults.millisecMin;
- }
-
- tp_inst.hour = hour;
- tp_inst.minute = minute;
- tp_inst.second = second;
- tp_inst.millisec = millisec;
-
- if (tp_inst.hour_slider) tp_inst.hour_slider.slider('value', hour);
- if (tp_inst.minute_slider) tp_inst.minute_slider.slider('value', minute);
- if (tp_inst.second_slider) tp_inst.second_slider.slider('value', second);
- if (tp_inst.millisec_slider) tp_inst.millisec_slider.slider('value', millisec);
-
- tp_inst._onTimeChange();
- tp_inst._updateDateTime(inst);
- }
-};
-
-//#######################################################################################
-// Create new public method to set only time, callable as $().datepicker('setTime', date)
-//#######################################################################################
-$.datepicker._setTimeDatepicker = function(target, date, withDate) {
- var inst = this._getInst(target),
- tp_inst = this._get(inst, 'timepicker');
-
- if (tp_inst) {
- this._setDateFromField(inst);
- var tp_date;
- if (date) {
- if (typeof date == "string") {
- tp_inst._parseTime(date, withDate);
- tp_date = new Date();
- tp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);
- }
- else tp_date = new Date(date.getTime());
- if (tp_date.toString() == 'Invalid Date') tp_date = undefined;
- this._setTime(inst, tp_date);
- }
- }
-
-};
-
-//#######################################################################################
-// override setDate() to allow setting time too within Date object
-//#######################################################################################
-$.datepicker._base_setDateDatepicker = $.datepicker._setDateDatepicker;
-$.datepicker._setDateDatepicker = function(target, date) {
- var inst = this._getInst(target),
- tp_date = (date instanceof Date) ? new Date(date.getTime()) : date;
-
- this._updateDatepicker(inst);
- this._base_setDateDatepicker.apply(this, arguments);
- this._setTimeDatepicker(target, tp_date, true);
-};
-
-//#######################################################################################
-// override getDate() to allow getting time too within Date object
-//#######################################################################################
-$.datepicker._base_getDateDatepicker = $.datepicker._getDateDatepicker;
-$.datepicker._getDateDatepicker = function(target, noDefault) {
- var inst = this._getInst(target),
- tp_inst = this._get(inst, 'timepicker');
-
- if (tp_inst) {
- this._setDateFromField(inst, noDefault);
- var date = this._getDate(inst);
- if (date && tp_inst._parseTime($(target).val(), tp_inst.timeOnly)) date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);
- return date;
- }
- return this._base_getDateDatepicker(target, noDefault);
-};
-
-//#######################################################################################
-// override parseDate() because UI 1.8.14 throws an error about "Extra characters"
-// An option in datapicker to ignore extra format characters would be nicer.
-//#######################################################################################
-$.datepicker._base_parseDate = $.datepicker.parseDate;
-$.datepicker.parseDate = function(format, value, settings) {
- var date;
- try {
- date = this._base_parseDate(format, value, settings);
- } catch (err) {
- if (err.indexOf(":") >= 0) {
- // Hack! The error message ends with a colon, a space, and
- // the "extra" characters. We rely on that instead of
- // attempting to perfectly reproduce the parsing algorithm.
- date = this._base_parseDate(format, value.substring(0,value.length-(err.length-err.indexOf(':')-2)), settings);
- } else {
- // The underlying error was not related to the time
- throw err;
- }
- }
- return date;
-};
-
-//#######################################################################################
-// override formatDate to set date with time to the input
-//#######################################################################################
-$.datepicker._base_formatDate=$.datepicker._formatDate;
-$.datepicker._formatDate = function(inst, day, month, year){
- var tp_inst = this._get(inst, 'timepicker');
- if(tp_inst)
- {
- if(day)
- var b = this._base_formatDate(inst, day, month, year);
- tp_inst._updateDateTime(inst);
- return tp_inst.$input.val();
- }
- return this._base_formatDate(inst);
-};
-
-//#######################################################################################
-// override options setter to add time to maxDate(Time) and minDate(Time). MaxDate
-//#######################################################################################
-$.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker;
-$.datepicker._optionDatepicker = function(target, name, value) {
- var inst = this._getInst(target),
- tp_inst = this._get(inst, 'timepicker');
- if (tp_inst) {
- var min,max,onselect;
- if (typeof name == 'string') { // if min/max was set with the string
- if (name==='minDate' || name==='minDateTime' )
- min = value;
- else if (name==='maxDate' || name==='maxDateTime')
- max = value;
- else if (name==='onSelect')
- onselect=value;
- } else if (typeof name == 'object') { //if min/max was set with the JSON
- if(name.minDate)
- min = name.minDate;
- else if (name.minDateTime)
- min = name.minDateTime;
- else if (name.maxDate)
- max = name.maxDate;
- else if (name.maxDateTime)
- max = name.maxDateTime;
- }
- if(min){ //if min was set
- if(min==0)
- min=new Date();
- else
- min= new Date(min);
-
- tp_inst._defaults.minDate = min;
- tp_inst._defaults.minDateTime = min;
- } else if (max){ //if max was set
- if(max==0)
- max=new Date();
- else
- max= new Date(max);
- tp_inst._defaults.maxDate = max;
- tp_inst._defaults.maxDateTime = max;
- }
- else if (onselect)
- tp_inst._defaults.onSelect=onselect;
- }
- if (value === undefined)
- return this._base_optionDatepicker(target, name);
- return this._base_optionDatepicker(target, name, value);
-};
-
-//#######################################################################################
-// jQuery extend now ignores nulls!
-//#######################################################################################
-function extendRemove(target, props) {
- $.extend(target, props);
- for (var name in props)
- if (props[name] === null || props[name] === undefined)
- target[name] = props[name];
- return target;
-};
-
-$.timepicker = new Timepicker(); // singleton instance
-$.timepicker.version = "0.9.9";
-
-})(jQuery);
-
diff --git a/usr/local/www/javascript/jquery.ipv4v6ify.js b/usr/local/www/javascript/jquery.ipv4v6ify.js
deleted file mode 100755
index 93a513a..0000000
--- a/usr/local/www/javascript/jquery.ipv4v6ify.js
+++ /dev/null
@@ -1,140 +0,0 @@
-/*jslint browser: true, eqeqeq: true, undef: true */
-/*global jQuery */
-/******************************************************************************
-Lines above are for jslint, the JavaScript verifier. http://www.jslint.com/
-******************************************************************************/
-
-/* MIT-licensed code from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some */
-/* (C) 2007 Mozilla Developer Network and/or Jeff Walden */
-if (!Array.prototype.some) {
- Array.prototype.some = function(fun /*, thisp */) {
- "use strict";
- if (!this) {
- throw new TypeError();
- }
- var t = Object(this);
- var len = t.length >>> 0;
- if (typeof fun !== "function") {
- throw new TypeError();
- }
- var thisp = arguments[1];
- for (var i = 0; i < len; i++) {
- if (i in t && fun.call(thisp, t[i], i, t)) {
- return true;
- }
- }
- return false;
- };
-}
-
-(function ($) {
- // --------------------------------------------------------------------
- // find pairs of <input class='ipv4v6'> (textbox for IPv4 or IPv6 addr)
- // and <select class='ipv4v6'> (dropdown for # bits in CIDR) and
- // activate behavior that restricts options in the <select> when an
- // ipv4 address is typed in the <input>.
- // --------------------------------------------------------------------
- var _ipv4v6ify = function (input1, input2) {
- var options = Array.prototype.slice.call(input2.options, 0);
- var has_128 = options.some(function (x) { return parseInt(x.value, 10) === 128; });
- var has_0 = options.some(function (x) { return parseInt(x.value, 10) === 0; });
- var max_ipv6 = has_128 ? 128 : 127;
- var min_ipv6 = has_0 ? 0 : 1;
- var max_ipv4 = has_128 ? 32 : 31;
- var min_ipv4 = has_0 ? 0 : 1;
- var was_ipv4 = undefined;
- var is_ipv4 = undefined;
- var restrict_bits_to_ipv4 = function () {
- input2.options.length = 0;
- for (var i = 0; i < options.length; i += 1) {
- var val = parseInt(options[i].value, 10);
- if (val >= min_ipv4 && val <= max_ipv4) {
- input2.options.add(options[i]);
- }
- }
- };
- var unrestrict_bits = function () {
- input2.options.length = 0;
- for (var i = 0; i < options.length; i += 1) {
- input2.options.add(options[i]);
- }
- };
- var onchange_handler = function () {
- was_ipv4 = is_ipv4;
- is_ipv4 = /\./.test(input1.value) && !/\:/.test(input1.value);
- // handle state transitions to gracefully change the
- // value in the dropdown.
- var bits = parseInt($(input2).val(), 10);
- if (was_ipv4 === false && is_ipv4 === true) {
- restrict_bits_to_ipv4();
- /* min_ipv4 -> min_ipv4 */
- /* ... -> ... */
- /* max_ipv4 -> max_ipv4 */
- /* ... -> ... */
- /* max_ipv6 -> max_ipv4 */
- if (bits < min_ipv4) {
- $(input2).val(min_ipv4);
- }
- else if (bits < max_ipv4) {
- $(input2).val(bits);
- }
- else {
- $(input2).val(max_ipv4);
- }
- }
- else if (was_ipv4 === true && is_ipv4 === false) {
- unrestrict_bits();
- /* min_ipv4 -> min_ipv4 */
- /* ... -> ... */
- /* max_ipv4 -> max_ipv4 */
- if (bits < min_ipv4) {
- $(input2).val(min_ipv6);
- }
- else if (bits < max_ipv4) {
- $(input2).val(bits);
- }
- else {
- $(input2).val(max_ipv6);
- }
- }
- else if (was_ipv4 === undefined && is_ipv4 === true) {
- // initial value is an ipv4 address
- restrict_bits_to_ipv4();
- /* min_ipv4 -> min_ipv4 */
- /* ... -> ... */
- /* max_ipv4 -> max_ipv4 */
- /* ... -> ... */
- /* max_ipv6 -> max_ipv4 */
- if (bits < min_ipv4) {
- $(input2).val(min_ipv4);
- }
- else if (bits < max_ipv4) {
- $(input2).val(bits);
- }
- else {
- $(input2).val(max_ipv4);
- }
- }
- };
- $(input1).unbind("change").bind("change", onchange_handler).trigger("change");
- };
- $.fn.extend({
- "ipv4v6ify": function () {
- return this.each(function () {
- var inputs, i, input1, input2;
- inputs = $(this).find(":input.ipv4v6").toArray();
- for (i = 0; i < inputs.length - 1; i += 1) {
- input1 = inputs[i];
- input2 = inputs[i + 1];
- if (input1.type === "text" && input2.type === "select-one") {
- _ipv4v6ify(input1, input2);
- }
- }
- });
- }
- });
- $(function () {
- $(document).ipv4v6ify();
- });
-})(jQuery);
-
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_18_b81900_40x40.png
deleted file mode 100755
index 954e22d..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_20_666666_40x40.png b/usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_20_666666_40x40.png
deleted file mode 100755
index 64ece57..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_20_666666_40x40.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png b/usr/local/www/javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png
deleted file mode 100755
index 5b5dab2..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png b/usr/local/www/javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png
deleted file mode 100755
index e44f861..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_flat_10_000000_40x100.png b/usr/local/www/javascript/jquery/images/ui-bg_flat_10_000000_40x100.png
deleted file mode 100755
index abdc010..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_flat_10_000000_40x100.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png b/usr/local/www/javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png
deleted file mode 100755
index b8c9bb1..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png b/usr/local/www/javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png
deleted file mode 100755
index e44f861..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_glass_100_f6f6f6_1x400.png b/usr/local/www/javascript/jquery/images/ui-bg_glass_100_f6f6f6_1x400.png
deleted file mode 100755
index 9b383f4..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_glass_100_f6f6f6_1x400.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png b/usr/local/www/javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png
deleted file mode 100755
index cd79e9f..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_glass_100_fdf5ce_1x400.png b/usr/local/www/javascript/jquery/images/ui-bg_glass_100_fdf5ce_1x400.png
deleted file mode 100755
index a23baad..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_glass_100_fdf5ce_1x400.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png b/usr/local/www/javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png
deleted file mode 100755
index 3550f06..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png b/usr/local/www/javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png
deleted file mode 100755
index 8ad921a..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_glass_65_ffffff_1x400.png b/usr/local/www/javascript/jquery/images/ui-bg_glass_65_ffffff_1x400.png
deleted file mode 100755
index 42ccba2..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_glass_65_ffffff_1x400.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/usr/local/www/javascript/jquery/images/ui-bg_gloss-wave_35_f6a828_500x100.png
deleted file mode 100755
index 39d5824..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
deleted file mode 100755
index f127367..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
deleted file mode 100755
index 359397a..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png b/usr/local/www/javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png
deleted file mode 100755
index 89b88d8..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png b/usr/local/www/javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png
deleted file mode 100755
index a265c62..0000000
--- a/usr/local/www/javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-icons_222222_256x240.png b/usr/local/www/javascript/jquery/images/ui-icons_222222_256x240.png
deleted file mode 100755
index b273ff1..0000000
--- a/usr/local/www/javascript/jquery/images/ui-icons_222222_256x240.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-icons_228ef1_256x240.png b/usr/local/www/javascript/jquery/images/ui-icons_228ef1_256x240.png
deleted file mode 100755
index a641a37..0000000
--- a/usr/local/www/javascript/jquery/images/ui-icons_228ef1_256x240.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-icons_3383bb_256x240.png b/usr/local/www/javascript/jquery/images/ui-icons_3383bb_256x240.png
deleted file mode 100755
index 905274f..0000000
--- a/usr/local/www/javascript/jquery/images/ui-icons_3383bb_256x240.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-icons_454545_256x240.png b/usr/local/www/javascript/jquery/images/ui-icons_454545_256x240.png
deleted file mode 100755
index 59bd45b..0000000
--- a/usr/local/www/javascript/jquery/images/ui-icons_454545_256x240.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-icons_70b2e1_256x240.png b/usr/local/www/javascript/jquery/images/ui-icons_70b2e1_256x240.png
deleted file mode 100755
index ed8543e..0000000
--- a/usr/local/www/javascript/jquery/images/ui-icons_70b2e1_256x240.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-icons_999999_256x240.png b/usr/local/www/javascript/jquery/images/ui-icons_999999_256x240.png
deleted file mode 100755
index 50ff803..0000000
--- a/usr/local/www/javascript/jquery/images/ui-icons_999999_256x240.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-icons_ef8c08_256x240.png b/usr/local/www/javascript/jquery/images/ui-icons_ef8c08_256x240.png
deleted file mode 100755
index 85e63e9..0000000
--- a/usr/local/www/javascript/jquery/images/ui-icons_ef8c08_256x240.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-icons_fbc856_256x240.png b/usr/local/www/javascript/jquery/images/ui-icons_fbc856_256x240.png
deleted file mode 100755
index 18e65a1..0000000
--- a/usr/local/www/javascript/jquery/images/ui-icons_fbc856_256x240.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-icons_ffd27a_256x240.png b/usr/local/www/javascript/jquery/images/ui-icons_ffd27a_256x240.png
deleted file mode 100755
index e117eff..0000000
--- a/usr/local/www/javascript/jquery/images/ui-icons_ffd27a_256x240.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/images/ui-icons_ffffff_256x240.png b/usr/local/www/javascript/jquery/images/ui-icons_ffffff_256x240.png
deleted file mode 100755
index 42f8f99..0000000
--- a/usr/local/www/javascript/jquery/images/ui-icons_ffffff_256x240.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/jquery/jquery-ui-1.11.1.min.js b/usr/local/www/javascript/jquery/jquery-ui-1.11.1.min.js
deleted file mode 100644
index 6a4e1d1..0000000
--- a/usr/local/www/javascript/jquery/jquery-ui-1.11.1.min.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*! jQuery UI - v1.11.1 - 2014-09-21
-* http://jqueryui.com
-* Includes: core.js, widget.js, mouse.js, position.js, draggable.js, droppable.js, resizable.js, selectable.js, sortable.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, menu.js, progressbar.js, selectmenu.js, slider.js, spinner.js, tabs.js, tooltip.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.1",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return n=!a&&o.length?e.widget.extend.apply(null,[n].concat(o)):n,a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))}),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.1",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):t.which?this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted):this._mouseUp(t)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.outerWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||"flip").split(" "),T={};return b=s(_),_[0].preventDefault&&(n.at="left top"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each(["my","at"],function(){var e,t,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):u.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=u.test(i[1])?i[1]:"center",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===n.at[0]?y.left+=m:"center"===n.at[0]&&(y.left+=m/2),"bottom"===n.at[1]?y.top+=g:"center"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,"marginLeft"),b=i(this,"marginTop"),D=d+f+i(this,"marginRight")+w.width,S=c+b+i(this,"marginBottom")+w.height,M=e.extend({},y),N=t(T.my,u.outerWidth(),u.outerHeight());"right"===n.my[0]?M.left-=d:"center"===n.my[0]&&(M.left-=d/2),"bottom"===n.my[1]?M.top-=c:"center"===n.my[1]&&(M.top-=c/2),M.left+=N[0],M.top+=N[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each(["left","top"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+N[0],p[1]+N[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,e.top+p+f+m>u&&(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,e.top+p+f+m>d&&(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.document[0],s=this.options;try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(n){}return this.helper||s.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(s.iframeFix===!0?"iframe":s.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}
-},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=s.options,a=e.extend({},i,{item:s.element});s.sortables=[],e(n.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});e.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,n))})},drag:function(t,i,s){var n=this;e.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",t),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",t),s.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left,l=h+s.snapElements[c].width,u=s.snapElements[c].top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top-s.margins.top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top-s.margins.top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left-s.margins.left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left-s.margins.left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top-s.margins.top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top-s.margins.top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left-s.margins.left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left-s.margins.left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.droppable",{version:"1.11.1",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left,o=(t.positionAbs||t.position.absolute).top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=this.element.children(this.handles[i]).first().show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=u-t.height,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.selectable",e.ui.mouse,{version:"1.11.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;
-this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===e.axis||this._isFloating(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-e(document).scrollTop()<o.scrollSensitivity?r=e(document).scrollTop(e(document).scrollTop()-o.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<o.scrollSensitivity&&(r=e(document).scrollTop(e(document).scrollTop()+o.scrollSpeed)),t.pageX-e(document).scrollLeft()<o.scrollSensitivity?r=e(document).scrollLeft(e(document).scrollLeft()-o.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<o.scrollSensitivity&&(r=e(document).scrollLeft(e(document).scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?t.currentItem.children().each(function(){e("<td>&#160;</td>",t.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,e("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(e("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!t){for(this._trigger("beforeStop",e,this._uiHash()),s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!1}if(t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.accordion",{version:"1.11.1",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");
-t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true",tabIndex:0,"aria-expanded":"true"})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.length&&(!t.length||e.index()<t.index()),l=this.options.animate||{},u=h&&l.down||l,d=function(){o._toggleComplete(i)};return"number"==typeof u&&(a=u),"string"==typeof u&&(n=u),n=n||u.easing||l.easing,a=a||u.duration||l.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:d,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?r+=i.now:"content"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,d):e.animate(this.showProps,a,n,d)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}}),e.widget("ui.menu",{version:"1.11.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){var i=e(t.currentTarget);i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){function i(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,h=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:h=!1,n=this.previousFilter||"",a=String.fromCharCode(t.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.find(this.options.items).filter(function(){return r.test(e(this).text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(t.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.find(this.options.items).filter(function(){return r.test(e(this).text())})),s.length?(this.focus(t,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("<span>").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)}}),e.widget("ui.autocomplete",{version:"1.11.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("<div>").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p="ui-button ui-widget ui-state-default ui-corner-all",f="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",m=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.1",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,m),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var t=this,i=this.options,s="checkbox"===this.type||"radio"===this.type,n=s?"":"ui-state-active";null===i.label&&(i.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(p).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){i.disabled||this===c&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind("click"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass("ui-state-focus")},blur:function(){this.buttonElement.removeClass("ui-state-focus")}}),s&&this.element.bind("change"+this.eventNamespace,function(){t.refresh()}),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return i.disabled?!1:void 0}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass("ui-state-active"),t.buttonElement.attr("aria-pressed","true");var s=t.element[0];g(s).not(s).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass("ui-state-active"),c=this,t.document.one("mouseup",function(){c=null}),void 0)}).bind("mouseup"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass("ui-state-active"),void 0)}).bind("keydown"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active"),void 0)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(p+" ui-state-active "+f).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){return this._super(e,t),"disabled"===e?(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),t&&("checkbox"===this.type||"radio"===this.type?this.buttonElement.removeClass("ui-state-focus"):this.buttonElement.removeClass("ui-state-focus ui-state-active")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),"radio"===this.type?g(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(f),i=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(i)))):a.push("ui-button-text-only"),t.addClass(a.join(" "))}}),e.widget("ui.buttonset",{version:"1.11.1",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){"disabled"===e&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t="rtl"===this.element.css("direction"),i=this.element.find(this.options.items),s=i.filter(":ui-button");i.not(":ui-button").button(),s.button("refresh"),this.buttons=i.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:"1.11.1"}});var v;e.extend(n.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return r(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n="div"===s||"span"===s,t.id||(this.uuid+=1,t.id="dp"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),"input"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,"datepicker",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),o&&(i.append=e("<span class='"+this._appendClass+"'>"+o+"</span>"),t[r?"before":"after"](i.append)),t.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&t.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=e(this._get(i,"buttonImageOnly")?e("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e("<button type='button'></button>").addClass(this._triggerClass).html(a?e("<img/>").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=e("<input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())
-},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|="fixed"===e(this).css("position"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":o?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n="y"===e?s:1,a=RegExp("^\\d{"+n+","+s+"}"),o=i.substring(h).match(a);if(!o)throw"Missing number at position "+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,N,C,A,I,P,z,H,F,E,j,O,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(e,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(e,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+o+"</button>":"")+(Y?"":h)+"</div>":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="<div class='ui-datepicker-group",K[1]>1)switch(T){case 0:M+=" ui-datepicker-group-first",S=" ui-corner-"+(Y?"right":"left");break;case K[1]-1:M+=" ui-datepicker-group-last",S=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",S=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+S+"'>"+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",N=d?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",x=0;7>x;x++)C=(x+u)%7,N+="<th scope='col'"+((x+u+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+c[C]+"'>"+p[C]+"</span></th>";for(M+=N+"</tr></thead><tbody>",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),I=(this._getFirstDayOfMonth(et,Z)-u+7)%7,P=Math.ceil((I+A)/7),z=Q?this.maxRows>P?this.maxRows:P:P,this.maxRows=z,H=this._daylightSavingAdjust(new Date(et,Z,1-I)),F=0;z>F;F++){for(M+="<tr>",E=d?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)j=g?g.apply(e.input?e.input[0]:null,[H]):[!0,""],O=H.getMonth()!==Z,W=O&&!y||!j[0]||X&&X>H||$&&H>$,E+="<td class='"+((x+u+6)%7>=5?" ui-datepicker-week-end":"")+(O?" ui-datepicker-other-month":"")+(H.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===H.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(W?" "+this._unselectableClass+" ui-state-disabled":"")+(O&&!v?"":" "+j[1]+(H.getTime()===G.getTime()?" "+this._currentClass:"")+(H.getTime()===R.getTime()?" ui-datepicker-today":""))+"'"+(O&&!v||!j[2]?"":" title='"+j[2].replace(/'/g,"&#39;")+"'")+(W?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(O&&!v?"&#xa0;":W?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===R.getTime()?" ui-state-highlight":"")+(H.getTime()===G.getTime()?" ui-state-active":"")+(O?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=E+"</tr>"}Z++,Z>11&&(Z=0,et++),M+="</tbody></table>"+(Q?"</div>"+(K[0]>0&&T===K[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",_="";if(a||!g)_+="<span class='ui-datepicker-month'>"+o[t]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+="<option value='"+u+"'"+(u===t?" selected='selected'":"")+">"+r[u]+"</option>");_+="</select>"}if(y||(b+=_+(!a&&g&&v?"":"&#xa0;")),!e.yearshtml)if(e.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)e.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";e.yearshtml+="</select>",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":"&#xa0;")+_),b+="</div>"},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.1",e.datepicker,e.widget("ui.dialog",{version:"1.11.1",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;
-e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("<button type='button'></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html("&#160;"),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("<button></button>",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.progressbar",{version:"1.11.1",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectmenu",{version:"1.11.1",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this,i=this.element.attr("tabindex");this.label=e("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:i||this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),e("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=e("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=e("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(e,i){e.preventDefault(),t._select(i.item.data("ui-selectmenu-item"),e)},focus:function(e,i){var s=i.item.data("ui-selectmenu-item");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger("focus",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr("aria-activedescendant",t.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find("option");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this._off(this.document),this._trigger("close",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n="";e.each(i,function(i,a){a.optgroup!==n&&(e("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(a.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-selectmenu-item",t)},_renderItem:function(t,i){var s=e("<li>");return i.disabled&&s.addClass("ui-state-disabled"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html("&#160;")},_move:function(e,t){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=":not(.ui-state-disabled)"),s="first"===e||"last"===e?i["first"===e?"prevAll":"nextAll"](n).eq(-1):i[e+"All"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?"close":"open"](e)},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(e){e.preventDefault()},click:"_toggle",keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move("prev",t);break;case e.ui.keyCode.RIGHT:this._move("next",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move("first",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass("ui-state-disabled")||this._select(t.data("ui-selectmenu-item"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger("select",t,{item:e}),e.index!==i&&this._trigger("change",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(e,t){"icons"===e&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),"appendTo"===e&&this.menuWrap.appendTo(this._appendTo()),"disabled"===e&&(this.menuInstance.option("disabled",t),this.button.toggleClass("ui-state-disabled",t).attr("aria-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent("optgroup");i.push({element:n,index:t,value:n.attr("value"),label:n.text(),optgroup:a.attr("label")||"",disabled:a.prop("disabled")||n.prop("disabled")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),e.widget("ui.slider",e.ui.mouse,{version:"1.11.1",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!i),this._super(t,i),t){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue(),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass("ui-state-active"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}}),e.widget("ui.spinner",{version:"1.11.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;
-return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.1",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){o.html(e),s._trigger("load",i,r)},1)}).complete(function(e,t){setTimeout(function(){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.1",options:{content:function(){var t=e(this).attr("title")||"";return e("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){e.data("ui-tooltip-open")&&n._delay(function(){t&&(t.type=a),this._open(t,e,i)})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){l.of=e,a.is(":hidden")||a.position(l)}var a,o,r,h,l=e.extend({},this.options.position);if(s){if(a=this._find(i),a.length)return a.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(h=s.clone(),h.removeAttr("id").find("[id]").removeAttr("id")):h=s,e("<div>").html(h).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):a.position(e.extend({of:i},this.options.position)),this.hiding=!1,this.closing=!1,a.hide(),this._show(a,this.options.show),this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},e.fx.interval)),this._trigger("open",t,{tooltip:a}),o={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}},i[0]!==this.element[0]&&(o.remove=function(){this._removeTooltip(a)}),t&&"mouseover"!==t.type||(o.mouseleave="close"),t&&"focusin"!==t.type||(o.focusout="close"),this._on(!0,i,o)}},close:function(t){var i=this,s=e(t?t.currentTarget:this.element),n=this._find(s);this.closing||(clearInterval(this.delayedShow),s.data("ui-tooltip-title")&&!s.attr("title")&&s.attr("title",s.data("ui-tooltip-title")),this._removeDescribedBy(s),this.hiding=!0,n.stop(!0),this._hide(n,this.options.hide,function(){i._removeTooltip(e(this)),this.hiding=!1,this.closing=!1}),s.removeData("ui-tooltip-open"),this._off(s,"mouseleave focusout keyup"),s[0]!==this.element[0]&&this._off(s,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,s){e(s.element).attr("title",s.title),delete i.parents[t]}),this.closing=!0,this._trigger("close",t,{tooltip:n}),this.hiding||(this.closing=!1))},_tooltip:function(t){var i=e("<div>").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("<div>").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]=t,i},_find:function(t){var i=t.data("ui-tooltip-id");return i?e("#"+i):e()},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s[0],t.close(n,!0),e("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title")||s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}});var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("<p>")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.1",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)
-},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})}}); \ No newline at end of file
diff --git a/usr/local/www/javascript/load_balancer_pool_edit/pool.js b/usr/local/www/javascript/load_balancer_pool_edit/pool.js
deleted file mode 100644
index 98e317c..0000000
--- a/usr/local/www/javascript/load_balancer_pool_edit/pool.js
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- pool.js
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2005-2008 Bill Marquette <bill.marquette@gmail.com>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/* Add server to virtual server pool
- * operates on whatever form is passed to it
- */
-function AddServerToPool(form) {
- var ServerPort = form.ipaddr.value;
- form['servers[]'].options[form['servers[]'].options.length] = new Option(ServerPort,ServerPort);
-}
-
-
-function AllServers(id, selectAll) {
- var opts = document.getElementById(id).getElementsByTagName('option');
- for (i = 0; i < opts.length; i++)
- {
- opts[i].selected = selectAll;
- }
-}
-
-
-function RemoveServerFromPool(form, field)
-{
- var theSel = form[field];
- var selIndex = theSel.selectedIndex;
- if (selIndex != -1) {
- for(i=theSel.length-1; i>=0; i--)
- {
- if(theSel.options[i].selected)
- {
- theSel.options[i] = null;
- }
- }
- if (theSel.length > 0) {
- theSel.selectedIndex = selIndex == 0 ? 0 : selIndex - 1;
- }
- }
-}
-
-function addOption(theSel, theText, theValue)
-{
- var newOpt = new Option(theText, theValue);
- var selLength = theSel.length;
- theSel.options[selLength] = newOpt;
-}
-
-function deleteOption(theSel, theIndex)
-{
- var selLength = theSel.length;
- if(selLength>0)
- {
- theSel.options[theIndex] = null;
- }
-}
-
-function moveOptions(theSelFrom, theSelTo)
-{
- var selLength = theSelFrom.length;
- var selectedText = new Array();
- var selectedValues = new Array();
- var selectedCount = 0;
-
- var i;
-
- // Find the selected Options in reverse order
- // and delete them from the 'from' Select.
- for(i=selLength-1; i>=0; i--)
- {
- if(theSelFrom.options[i].selected)
- {
- selectedText[selectedCount] = theSelFrom.options[i].text;
- selectedValues[selectedCount] = theSelFrom.options[i].value;
- deleteOption(theSelFrom, i);
- selectedCount++;
- }
- }
-
- // Add the selected text/values in reverse order.
- // This will add the Options to the 'to' Select
- // in the same order as they were in the 'from' Select.
- for(i=selectedCount-1; i>=0; i--)
- {
- addOption(theSelTo, selectedText[i], selectedValues[i]);
- }
-}
-
-function checkPoolControls() {
- var active = document.iform.serversSelect;
- var inactive = document.iform.serversDisabledSelect;
- if (jQuery("#mode").val() == "failover") {
- if (jQuery("#serversSelect option").length > 0) {
- jQuery("#moveToEnabled").prop("disabled",true);
- } else {
- jQuery("#moveToEnabled").prop("disabled",false);
- }
- } else {
- jQuery("#moveToEnabled").prop("disabled",false);
- }
-}
-
-function enforceFailover() {
- if (jQuery("#mode").val() != "failover") {
- return;
- }
- var active = document.iform.serversSelect;
- var inactive = document.iform.serversDisabledSelect;
- var count = 0;
- var moveText = new Array();
- var moveVals = new Array();
- var i;
- if (active.length > 1) {
- // Move all but one entry to the disabled list
- for (i=active.length-1; i>0; i--) {
- moveText[count] = active.options[i].text;
- moveVals[count] = active.options[i].value;
- deleteOption(active, i);
- count++;
- }
- for (i=count-1; i>=0; i--) {
- addOption(inactive, moveText[i], moveVals[i]);
- }
- }
-}
-
-// functions up() and down() modified from http://www.babailiica.com/js/sorter/
-
-function up(obj) {
- var sel = new Array();
- for (var i=0; i<obj.length; i++) {
- if (obj[i].selected == true) {
- sel[sel.length] = i;
- }
- }
- for (i in sel) {
- if (sel[i] != 0 && !obj[sel[i]-1].selected) {
- var tmp = new Array(obj[sel[i]-1].text, obj[sel[i]-1].value);
- obj[sel[i]-1].text = obj[sel[i]].text;
- obj[sel[i]-1].value = obj[sel[i]].value;
- obj[sel[i]].text = tmp[0];
- obj[sel[i]].value = tmp[1];
- obj[sel[i]-1].selected = true;
- obj[sel[i]].selected = false;
- }
- }
-}
-
-function down(obj) {
- var sel = new Array();
- for (var i=obj.length-1; i>-1; i--) {
- if (obj[i].selected == true) {
- sel[sel.length] = i;
- }
- }
- for (i in sel) {
- if (sel[i] != obj.length-1 && !obj[sel[i]+1].selected) {
- var tmp = new Array(obj[sel[i]+1].text, obj[sel[i]+1].value);
- obj[sel[i]+1].text = obj[sel[i]].text;
- obj[sel[i]+1].value = obj[sel[i]].value;
- obj[sel[i]].text = tmp[0];
- obj[sel[i]].value = tmp[1];
- obj[sel[i]+1].selected = true;
- obj[sel[i]].selected = false;
- }
- }
-}
diff --git a/usr/local/www/javascript/load_balancer_relay_protocol_edit/load_balancer_relay_protocol_edit.js b/usr/local/www/javascript/load_balancer_relay_protocol_edit/load_balancer_relay_protocol_edit.js
deleted file mode 100644
index 6c44272..0000000
--- a/usr/local/www/javascript/load_balancer_relay_protocol_edit/load_balancer_relay_protocol_edit.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- pool.js
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2005-2008 Bill Marquette <bill.marquette@gmail.com>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- * This code makes use of prototype shortcuts and will not work
- * without prototype being loaded prior to it.
- */
-
-function copyOption(theSrc, theDst)
-{
- var selOption = theSrc[theSrc.selectedIndex];
- theDst.options[theDst.length] = new Option(selOption.text, selOption.value);
-}
-
-function deleteOption(theSel)
-{
- var theIndex = theSel.selectedIndex;
- var selLength = theSel.length;
- if(selLength>0)
- {
- theSel.options[theIndex] = null;
- }
-}
-
-function AllOptions(el, selectAll) {
- el.select('option').each(function(opt) {
- opt.selected = selectAll;
- });
-}
-
diff --git a/usr/local/www/javascript/niftyjsCode.js b/usr/local/www/javascript/niftyjsCode.js
deleted file mode 100644
index 75ef8b0..0000000
--- a/usr/local/www/javascript/niftyjsCode.js
+++ /dev/null
@@ -1,174 +0,0 @@
-function NiftyCheck(){
-if(!document.getElementById || !document.createElement)
- return(false);
-isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
-if(Array.prototype.push==null){Array.prototype.push=function(){
- this[this.length]=arguments[0]; return(this.length);};}
-return(true);
-}
-
-function Rounded(selector,wich,bk,color,opt){
-var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
-
-if(color=="transparent"){
- cn=cn+"x";
- ecolor=bk;
- bk="transparent";
- }
-else if(opt && opt.indexOf("border")>=0){
- var optar=opt.split(" ");
- for(i=0;i<optar.length;i++)
- if(optar[i].indexOf("#")>=0) ecolor=optar[i];
- if(ecolor=="") ecolor="#666";
- cn+="e";
- edges=true;
- }
-else if(opt && opt.indexOf("smooth")>=0){
- cn+="a";
- ecolor=Mix(bk,color);
- }
-if(opt && opt.indexOf("small")>=0) cn+="s";
-prefixt=cn;
-prefixb=cn;
-if(wich.indexOf("all")>=0){t=true;b=true;}
-else if(wich.indexOf("top")>=0) t="true";
-else if(wich.indexOf("tl")>=0){
- t="true";
- if(wich.indexOf("tr")<0) prefixt+="l";
- }
-else if(wich.indexOf("tr")>=0){
- t="true";
- prefixt+="r";
- }
-if(wich.indexOf("bottom")>=0) b=true;
-else if(wich.indexOf("bl")>=0){
- b="true";
- if(wich.indexOf("br")<0) prefixb+="l";
- }
-else if(wich.indexOf("br")>=0){
- b="true";
- prefixb+="r";
- }
-var v=getElementsBySelector(selector);
-var l=v.length;
-for(i=0;i<l;i++){
- if(edges) AddBorder(v[i],ecolor);
- if(t) AddTop(v[i],bk,color,ecolor,prefixt);
- if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
- }
-}
-
-function AddBorder(el,bc){
-var i;
-if(!el.passed){
- if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
- var t=el.firstChild.nodeValue;
- el.removeChild(el.lastChild);
- var d=CreateEl("span");
- d.style.display="block";
- d.appendChild(document.createTextNode(t));
- el.appendChild(d);
- }
- for(i=0;i<el.childNodes.length;i++){
- if(el.childNodes[i].nodeType==1){
- el.childNodes[i].style.borderLeft="1px solid "+bc;
- el.childNodes[i].style.borderRight="1px solid "+bc;
- }
- }
- }
-el.passed=true;
-}
-
-function AddTop(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=1;i<=lim;i++){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingTop=0;
-el.insertBefore(d,el.firstChild);
-}
-
-function AddBottom(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=lim;i>0;i--){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingBottom=0;
-el.appendChild(d);
-}
-
-function CreateEl(x){
-if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
-else return(document.createElement(x));
-}
-
-function getElementsBySelector(selector){
-var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
-
-if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
- s=selector.split(" ");
- var fs=s[0].split("#");
- if(fs.length==1) return(objlist);
- f=document.getElementById(fs[1]);
- if(f) return(f.getElementsByTagName(s[1]));
- return(objlist);
- }
-if(selector.indexOf("#")>0){ //id selector like "tag#id"
- s=selector.split("#");
- tag=s[0];
- selid=s[1];
- }
-if(selid!=""){
- f=document.getElementById(selid);
- if(f) objlist.push(f);
- return(objlist);
- }
-if(selector.indexOf(".")>0){ //class selector like "tag.class"
- s=selector.split(".");
- tag=s[0];
- selclass=s[1];
- }
-var v=document.getElementsByTagName(tag); // tag selector like "tag"
-if(selclass=="")
- return(v);
-for(i=0;i<v.length;i++){
- if(v[i].className.indexOf(selclass)>=0){
- objlist.push(v[i]);
- }
- }
-return(objlist);
-}
-
-function Mix(c1,c2){
-var i,step1,step2,x,y,r=new Array(3);
-if(c1.length==4)step1=1;
-else step1=2;
-if(c2.length==4) step2=1;
-else step2=2;
-for(i=0;i<3;i++){
- x=parseInt(c1.substr(1+step1*i,step1),16);
- if(step1==1) x=16*x+x;
- y=parseInt(c2.substr(1+step2*i,step2),16);
- if(step2==1) y=16*y+y;
- r[i]=Math.floor((x*50+y*50)/100);
- }
-return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
-} \ No newline at end of file
diff --git a/usr/local/www/javascript/numericupdown/css/numericupdown.css b/usr/local/www/javascript/numericupdown/css/numericupdown.css
deleted file mode 100644
index 429619b..0000000
--- a/usr/local/www/javascript/numericupdown/css/numericupdown.css
+++ /dev/null
@@ -1,40 +0,0 @@
-.buttonInc,
-.buttonDec
- {
- margin:0;
- padding:0;
- width:11px;
- height:8px;
- vertical-align:top;
- background-color:#ccc;
- text-indent:-999px;
- overflow:hidden;
- background:#ccc url(../images/up.gif) no-repeat 50% 50%;
- border-top:1px solid #eee;
- border-left:1px solid #eee;
- border-bottom:1px solid #777;
- border-right:1px solid #777;
- voice-family: inherit;
- height:9px;
- }
-html>body .buttonInc,
-html>body .buttonDec
- {
- height:9px;
- }
-.buttonDec
- {
- margin:9px 0 0 -11px;
- background:#ccc url(../images/down.gif) no-repeat 50% 50%;
- voice-family: inherit;
- margin:10px 0 0 -11px;
- }
-html>body .buttonDec
- {
- margin:10px 0 0 -11px;
- }
-button
- {
- font-family:monospace;
- line-height:1em;
- }
diff --git a/usr/local/www/javascript/numericupdown/images/down.gif b/usr/local/www/javascript/numericupdown/images/down.gif
deleted file mode 100755
index 278664a..0000000
--- a/usr/local/www/javascript/numericupdown/images/down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/numericupdown/images/up.gif b/usr/local/www/javascript/numericupdown/images/up.gif
deleted file mode 100755
index ad33679..0000000
--- a/usr/local/www/javascript/numericupdown/images/up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/javascript/numericupdown/js/numericupdown.js b/usr/local/www/javascript/numericupdown/js/numericupdown.js
deleted file mode 100644
index a6af0d4..0000000
--- a/usr/local/www/javascript/numericupdown/js/numericupdown.js
+++ /dev/null
@@ -1,287 +0,0 @@
-// As usual, we keep the generic functions out of the namespace
-function addEvent(obj, evType, fn, useCapture){
- if (obj.addEventListener){
- obj.addEventListener(evType, fn, useCapture);
- return true;
- } else if (obj.attachEvent){
- var r = obj.attachEvent("on"+evType, fn);
- return r;
- }
- return false;
-}
-
-function removeEvent(obj, evType, fn, useCapture){
- if (obj.removeEventListener){
- obj.removeEventListener(evType, fn, useCapture);
- return true;
- } else if (obj.detachEvent){
- var r = obj.detachEvent("on"+evType, fn);
- return r;
- }
- return false;
-}
-
-if(!String.prototype.trim) String.prototype.trim = function() { return this.replace(/^\s*/,'').replace(/\s*$/, ''); };
-
-var incrementalInputController;
-
-// Encapsulate the Timer and incrementalInput objects
-(function() {
-
-// WEBFX Timer : http://www.webfx.com/
-function Timer(nPauseTime) {
- this._pauseTime = typeof nPauseTime == "undefined" ? 1000 : nPauseTime;
- this._timer = null;
- this._isStarted = false;
-}
-
-Timer.prototype.start = function () {
- if (this.isStarted())
- this.stop();
- var oThis = this;
- this._timer = window.setTimeout(function () {
- if (typeof oThis.ontimer == "function")
- oThis.ontimer();
- }, this._pauseTime);
- this._isStarted = false;
-};
-
-Timer.prototype.stop = function () {
- if (this._timer != null)
- window.clearTimeout(this._timer);
- this._isStarted = false;
-};
-
-Timer.prototype.isStarted = function () {
- return this._isStarted;
-};
-
-Timer.prototype.getPauseTime = function () {
- return this._pauseTime;
-};
-
-Timer.prototype.setPauseTime = function (nPauseTime) {
- this._pauseTime = nPauseTime;
-};
-
-function incrementalInput(inp, range, increment, classInc, classDec) {
- if(!inp || !range) return;
-
- this._inp = inp;
- this._buttonInc;
- this._buttonDec;
- this._value;
- this._classInc = classInc;
- this._classDec = classDec;
- this._minv = Number(range[0]);
- this._maxv = Number(range[1]);
- this._incBase = Number(increment) || 1;
- this._precision = 0;
- if(increment.indexOf('.') != -1) {
- this._precision = increment.substr(increment.indexOf('.')+1, increment.length);
- this._precision = this._precision.length;
- }
-
- this._increment;
- this._timerInc = 1000;
- this._timer = new Timer(1000);
- this._stop = false;
- this._key = false;
-
- this._events = {
-
- dec: function(e) {
- self._increment = -self._incBase;
- self.updateValue();
- return false;
- },
- inc: function(e) {
- self._increment = self._incBase;
- self.updateValue();
- return false;
- },
- keydec: function(e) {
- var kc;
- if (!e) var e = window.event;
-
- if (e.keyCode) kc = e.keyCode;
- else if (e.charCode) kc = e.charCode;
-
- if ( kc != 13 || self._key ) return true;
-
- self._key = true;
- self._increment = -self._incBase;
- self._timerInc = 1000;
- self.updateValue();
- return false;
- },
- keyinc: function(e) {
- var kc;
- if (!e) var e = window.event;
-
- if (e.keyCode) kc = e.keyCode;
- else if (e.charCode) kc = e.charCode;
-
- if ( kc != 13 || self._key ) return true;
-
- self._key = true;
- self._increment = self._incBase;
- self._timerInc = 1000;
- self.updateValue();
- return false;
- },
- clearTimer: function(e) {
- self._key = false;
- self._events.stopTimer();
- },
- stopTimer: function(e) {
- self._timer.stop();
- self._timerInc = 1000;
- self._timer.setPauseTime(self._timerInc);
- },
- onchange: function(e){
- var value = Number(parseFloat(self._inp.value).toFixed(self._precision));
-
- if( Number(value % self._incBase).toFixed(self._precision) != self._incBase ) {
- value -= Number(parseFloat(value % self._incBase)).toFixed(self._precision);
- };
- if(value < self._minv) value = self._minv;
- else if(value > self._maxv) value = self._maxv;
- self._inp.value = parseFloat(value).toFixed(self._precision);
- }
- };
-
- this.updateValue = function() {
- if(self._inp.disabled) {
- stopTimer();
- return;
- }
-
-
- var value = Number(parseFloat(self._inp.value).toFixed(self._precision));
- var stop = self._timerInc == 0 ? true : false;
-
- if( Math.abs(Number(value % self._incBase).toFixed(self._precision)) != self._incBase ) {
- value -= Number(parseFloat(value % self._incBase)).toFixed(self._precision);
- }
-
- value += Number(parseFloat(self._increment).toFixed(self._precision));
-
- if(value < self._minv) {
- value = self._minv;
- stop = true;
- } else if(value > self._maxv) {
- value = self._maxv;
- stop = true;
- }
-
- self._inp.value = parseFloat(value).toFixed(self._precision);
-
- if(self._timerInc > 50) {
- self._timerInc = 50 + Math.round(((self._timerInc - 50) / 1.8));
- }
-
- self._timer.setPauseTime(self._timerInc);
- if(!stop) self._timer.start();
- };
-
- this.construct = function() {
- var h = self._inp.offsetHeight;
-
- self._inp.onchange = self._events.onchange;
-
- self._buttonInc = document.createElement('button');
- self._buttonDec = document.createElement('button');
-
- if(self._classDec) self._buttonDec.className = self._classDec;
- if(self._classInc) self._buttonInc.className = self._classInc;
-
- self._buttonDec.setAttribute('type','button');
- self._buttonInc.setAttribute('type','button');
-
- self._buttonDec.appendChild(document.createTextNode('-'));
- self._buttonInc.appendChild(document.createTextNode('+'));
-
- self._buttonDec.onmousedown = self._events.dec;
- self._buttonInc.onmousedown = self._events.inc;
-
- addEvent(self._buttonDec, "keypress", self._events.keydec, true);
- addEvent(self._buttonDec, "keyup", self._events.clearTimer, true);
- addEvent(self._buttonInc, "keypress", self._events.keyinc, true);
- addEvent(self._buttonInc, "keyup", self._events.clearTimer, true);
-
- self._buttonInc.onmouseout = self._events.stopTimer;
- self._buttonDec.onmouseout = self._events.stopTimer;
-
- addEvent(document, 'mouseup', self._events.stopTimer, false);
-
- if(self._inp.nextSibling) {
- self._inp.parentNode.insertBefore( self._buttonDec, self._inp.nextSibling );
- self._inp.parentNode.insertBefore( self._buttonInc, self._inp.nextSibling );
- } else {
- self._inp.parentNode.appendChild( self._buttonInc );
- self._inp.parentNode.appendChild( self._buttonDec );
- };
- };
-
- var self = this;
-
- self._timer.ontimer = function() { self.updateValue(); };
- self.construct();
-}
-
-incremetalInputController = {
- inputCollection: [],
- constructor: function() {
-
- if(!document.getElementById || !document.createElement) return;
-
- // TODO : cut the regExps down to readable levels - they are hideous at present...
- var regExp_1 = /fd_incremental_inp_range_([-]{0,1}[0-9]+(f[0-9]+){0,1}){1}_([-]{0,1}[0-9]+(f[0-9]+){0,1}){1}/ig;
- var regExp_2 = /fd_increment_([0-9]+(f[0-9]+){0,1}){1}/ig;
- var regExp_3 = /fd_classname_inc_([\-_0-9a-zA-Z]+){1}/ig;
- var regExp_4 = /fd_classname_dec_([\-_0-9a-zA-Z]+){1}/ig;
-
- var inputCollection = document.getElementsByTagName('input');
- var obj, range, classname, classes, classInc, classDec, increment;
-
- for(var i = 0, inp; inp = inputCollection[i]; i++) {
- if(inp.type == 'text' && inp.className && inp.className.search(regExp_1) != -1) {
- classes = inp.className.split(' ');
- increment = 1;
- range = [0,0];
- classInc = "";
- classDec = "";
-
- for(var z = 0, classname; classname = classes[z]; z++) {
- if(classname.search(regExp_1) != -1) {
- range = classname.trim();
- range = range.replace(/fd_incremental_inp_range_/ig, '');
- range = range.replace(/f/g,'.');
- range = range.split('_');
- } else if(classname.search(regExp_2) != -1) {
- increment = classname.trim();
- increment = increment.replace(/fd_increment_/ig, '');
- increment = increment.replace('f','.');
- } else if(classname.search(regExp_3) != -1) {
- classInc = classname.trim();
- classInc = classInc.replace(/fd_classname_inc_/ig, '');
- } else if(classname.search(regExp_4) != -1) {
- classDec = classname.trim();
- classDec = classDec.replace(/fd_classname_dec_/ig, '');
- }
- }
-
- if (inp.value.length == 0 || isNaN(inp.value) == true) { inp.value = 0; }
-
- obj = new incrementalInput(inp, range, increment, classInc, classDec);
- incremetalInputController.inputCollection.push(obj);
- }
- }
- }
-};
-
-// Close and call anonymous function
-})();
-
-addEvent(window, 'load', incremetalInputController.constructor, true); \ No newline at end of file
diff --git a/usr/local/www/javascript/pi.js b/usr/local/www/javascript/pi.js
deleted file mode 100644
index 8a3a3c3..0000000
--- a/usr/local/www/javascript/pi.js
+++ /dev/null
@@ -1,682 +0,0 @@
-(function(_scope){
-
- /*
- * pi.js
- * 1.0
- * Azer Koçulu <http://azer.kodfabrik.com>
- * http://pi-js.googlecode.com
- */
-
- _scope.pi = Object(3.14159265358979323846);
- var pi = _scope.pi;
- pi.version = 1.0;
-
- pi.env = {
- ie: /MSIE/i.test(navigator.userAgent),
- ie6: /MSIE 6/i.test(navigator.userAgent),
- ie7: /MSIE 7/i.test(navigator.userAgent),
- ie8: /MSIE 8/i.test(navigator.userAgent),
- firefox: /Firefox/i.test(navigator.userAgent),
- opera: /Opera/i.test(navigator.userAgent),
- webkit: /Webkit/i.test(navigator.userAgent)
- };
-
- pi.util = {
- IsArray:function(_object){
- return _object && _object != window && ( _object instanceof Array || ( typeof _object.length == "number" && typeof _object.item =="function" ) );
- },
- IsHash:function(_object){
- return _object && typeof _object=="object"&&(_object==window||_object instanceof Object)&&!_object.nodeName&&!pi.util.IsArray(_object);
- },
- DOMContentLoaded:[],
- AddEvent: function(_element,_eventName,_fn,_useCapture){
- _element[pi.env.ie.toggle("attachEvent","addEventListener")](pi.env.ie.toggle("on","")+_eventName,_fn,_useCapture||false);
- return pi.util.AddEvent.curry(this,_element);
- },
- RemoveEvent: function(_element,_eventName,_fn,_useCapture){
- return _element[pi.env.ie.toggle("detachEvent","removeEventListener")](pi.env.ie.toggle("on","")+_eventName,_fn,_useCapture||false);
- },
- GetWindowSize:function(){
- return {
- height:pi.env.ie?Math.max(document.documentElement.clientHeight,document.body.clientHeight):window.innerHeight,
- width:pi.env.ie?Math.max(document.documentElement.clientWidth,document.body.clientWidth):window.innerWidth
- };
- },
- Include:function(_url,_callback){
- var script = new pi.element("script").attribute.set("src",_url), callback = _callback||new Function, done = false, head = pi.get.byTag("head")[0];
- script.environment.getElement().onload = script.environment.getElement().onreadystatechange = function(){
- if(!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")){
- callback.call(this);
- done = true;
- head.removeChild(script.environment.getElement());
- }
- };
- script.insert(head);
- },
- Element:{
- addClass:function(_element,_class){
- if( !pi.util.Element.hasClass(_element,_class) )
- pi.util.Element.setClass(_element, pi.util.Element.getClass(_element) + " " + _class );
- },
- getClass:function(_element){
- return _element.getAttribute(pi.env.ie.toggle("className","class"))||"";
- },
- hasClass:function(_element,_class){
- return pi.util.Element.getClass(_element).split(" ").indexOf(_class)>-1;
- },
- removeClass:function(_element,_class){
- if( pi.util.Element.hasClass(_element,_class) )
- pi.util.Element.setClass(
- _element,
- pi.util.Element.getClass(_element,_class).split(" ").removeValue(_class).join(" ")
- );
- },
- setClass:function(_element,_value){
- _element.setAttribute( pi.env.ie.toggle("className","class"), _value );
- },
- toggleClass:function(){
- if(pi.util.Element.hasClass.apply(this,arguments))
- pi.util.Element.removeClass.apply(this,arguments);
- else
- pi.util.Element.addClass.apply(this,arguments);
- },
- getOpacity:function(_styleObject){
- var styleObject = _styleObject;
- if(!pi.env.ie)
- return styleObject["opacity"];
-
- var alpha = styleObject["filter"].match(/opacity\=(\d+)/i);
- return alpha?alpha[1]/100:1;
- },
- setOpacity:function(_element,_value){
- if(!pi.env.ie)
- return pi.util.Element.addStyle(_element,{ "opacity":_value });
- _value*=100;
- pi.util.Element.addStyle(_element,{ "filter":"alpha(opacity="+_value+")" });
- return this._parent_;
- },
- getPosition:function(_element){
- var parent = _element,offsetLeft = 0, offsetTop = 0, view = pi.util.Element.getView(_element);
- while(parent&&parent!=document.body&&parent!=document.firstChild){
- offsetLeft +=parseInt(parent.offsetLeft);
- offsetTop += parseInt(parent.offsetTop);
- parent = parent.offsetParent;
- };
- return {
- "bottom":view["bottom"],
- "left":view["left"],
- "marginTop":view["marginTop"],
- "marginLeft":view["marginLeft"],
- "offsetLeft":offsetLeft,
- "offsetTop":offsetTop,
- "position":view["position"],
- "right":view["right"],
- "top":view["top"],
- "z-index":view["zIndex"]
- };
- },
- getSize:function(_element){
- var view = pi.util.Element.getView(_element);
- return {
- "height":view["height"],
- "offsetHeight":_element.offsetHeight,
- "offsetWidth":_element.offsetWidth,
- "width":view["width"]
- };
- },
- addStyle:function(_element,_style){
- for(var key in _style){
- key = key=="float"?pi.env.ie.toggle("styleFloat","cssFloat"):key;
- if (key == "opacity" && pi.env.ie) {
- pi.util.Element.setOpacity(_element,_style[key]);
- continue;
- }
- _element.style[key] = _style[key];
- }
- },
- getStyle:function(_element,_property){
- _property = _property=="float"?pi.env.ie.toggle("styleFloat","cssFloat"):_property;
- if(_property=="opacity"&&pi.env.ie)
- return pi.util.Element.getOpacity(_element.style);
- return typeof _property=="string"?_element.style[_property]:_element.style;
- },
- getView:function(_element,_property){
- var view = document.defaultView?document.defaultView.getComputedStyle(_element,null):_element.currentStyle;
- _property = _property=="float"?pi.env.ie.toggle("styleFloat","cssFloat"):_property;
- if(_property=="opacity"&&pi.env.ie)
- return pi.util.Element.getOpacity(_element,view);
- return typeof _property=="string"?view[_property]:view;
- }
- },
- CloneObject:function(_object,_fn){
- var tmp = {};
- for(var key in _object)
- {
- if( pi.util.IsArray( _object[key] ) ){
- tmp[key] = Array.prototype.clone.apply( _object[key] );
- } else
- if( pi.util.IsHash( _object[key] ) ){
- tmp[ key ] = pi.util.CloneObject(_object[key]);
- if(_fn)_fn.call(tmp,key,_object);
- } else
- tmp[key] = _object[key];
- }
- return tmp;
- },
- MergeObjects:function(_object,_source){
- for(var key in _source){
- var value = _source[key];
- if (pi.util.IsArray(_source[key])) {
- if(pi.util.IsArray( _object[key] )){
- Array.prototype.push.apply( _source[key], _object[key] );
- }
- else
- value = _source[key].clone();
- }
- else
- if (pi.util.IsHash(_source[key])) {
- if (pi.util.IsHash(_object[key])) {
- value = pi.util.MergeObjects(_object[key], _source[key]);
- } else {
- value = pi.util.CloneObject( _source[key] );
- }
- }
- _object[key] = value;
- };
- return _object;
- }
- };
-
- pi.get = function(){
- return document.getElementById(arguments[0]);
- };
- pi.get.byTag = function(){
- return document.getElementsByTagName(arguments[0]);
- };
- pi.get.byClass = function(){ return document.getElementsByClassName.apply(document,arguments); };
-
- pi.base = function(){
- this.body = {};
- this.constructor = null;
-
- this.build = function(_skipClonning){
- var base = this, skipClonning = _skipClonning||false, _private = {},
- fn = function(){
- var _p = pi.util.CloneObject(_private);
- if(!skipClonning){
- for(var key in this){
-
- if(pi.util.IsArray( this[ key ] ) ){
- this[key] = Array.prototype.clone.apply( this[key] );
- } else
- if( pi.util.IsHash(this[key]) ){
- this[key] = pi.util.CloneObject(
- this[ key ],
- function(_key,_object){
- this[ _key ]._parent_ = this;
- }
- );
- this[key]._parent_ = this;
- }
- }
- };
- base.createAccessors( _p, this );
- if(base.constructor)
- return base.constructor.apply(this,arguments);
- return this;
- };
- this.movePrivateMembers(this.body,_private);
- if(this.constructor){
- fn["$Constructor"] = this.constructor;
- }
- fn.prototype = this.body;
- return fn;
- };
-
- this.createAccessors = function(_p, _branch){
- var getter = function(_property){ return this[_property]; },
- setter = function(_property,_value){ this[_property] = _value; return _branch._parent_||_branch; };
-
- for (var name in _p) {
- var isPrivate = name.substring(0, 1) == "_", title = name.substring(1, 2).toUpperCase() + name.substring(2);
- if (isPrivate) {
- _branch["get" + title] = getter.curry(_p,name);
- _branch["set" + title] = setter.curry(_p,name);
- }
- else
- if (pi.util.IsHash(_p[name])){
- if(!_branch[name])
- _branch[name] = {};
- this.createAccessors(_p[name], _branch[name]);
- }
- };
- };
-
- this.movePrivateMembers = function(_object, _branch){
- for (var name in _object) {
- var isPrivate = name.substring(0, 1) == "_";
-
- if (isPrivate) {
- _branch[name] = _object[name];
- delete _object[name];
- }
- else
- if (pi.util.IsHash(_object[name])){
- _branch[name] = {};
- this.movePrivateMembers(_object[name], _branch[name]);
- }
- };
- };
- };
-
- Function.prototype.extend = function(_prototype,_skipClonning){
- var object = new pi.base, superClass = this;
- if(_prototype["$Constructor"]){
- object.constructor = _prototype["$Constructor"];
- delete _prototype["$Constructor"];
- };
-
- object.body = superClass==pi.base?_prototype:pi.util.MergeObjects(_prototype,superClass.prototype,2);
- object.constructor=object.constructor||function(){
- if(superClass!=pi.base)
- superClass.apply(this,arguments);
- };
-
- return object.build(_skipClonning);
- };
-
- Function.prototype.curry = function(_scope){
- var fn = this, scope = _scope||window, args = Array.prototype.slice.call(arguments,1);
- return function(){
- return fn.apply(scope,args.concat( Array.prototype.slice.call(arguments,0) ));
- };
- };
-
- pi.element = pi.base.extend({
- "$Constructor":function(_tag){
- this.environment.setElement(document.createElement(_tag||"DIV"));
- this.environment.getElement().pi = this;
- return this;
- },
- "clean":function(){
- var childs = this.child.get();
- while(childs.length){
- childs[0].parentNode.removeChild(childs[0]);
- }
- },
- "clone":function(_deep){
- return this.environment.getElement().cloneNode(_deep);
- },
- "insert":function(_element){
- _element = _element.environment?_element.environment.getElement():_element;
- _element.appendChild(this.environment.getElement());
- return this;
- },
- "insertAfter":function(_referenceElement){
- _referenceElement = _referenceElement.environment?_referenceElement.environment.getElement():_referenceElement;
- _referenceElement.nextSibling?this.insertBefore(_referenceElement.nextSibling):this.insert(_referenceElement.parentNode);
- return this;
- },
- "insertBefore":function(_referenceElement){
- _referenceElement = _referenceElement.environment?_referenceElement.environment.getElement():_referenceElement;
- _referenceElement.parentNode.insertBefore(this.environment.getElement(),_referenceElement);
- return this;
- },
- "query":function(_expression,_resultType,namespaceResolver,_result){
- return pi.xpath(_expression,_resultType||"ORDERED_NODE_SNAPSHOT_TYPE",this.environment.getElement(),_namespaceResolver,_result);
- },
- "remove":function(){
- this.environment.getParent().removeChild(
- this.environment.getElement()
- );
- },
- "update":function(_value){
- ["textarea","input"].indexOf(this.environment.getName())>-1?
- (this.environment.getElement().value = _value):
- (this.environment.getElement().innerHTML = _value);
- return this;
- },
- "attribute":{
- "getAll":function(_name){
- return this._parent_.environment.getElement().attributes;
- },
- "clear":function(_name){
- this.set(_name,"");
- return this._parent_;
- },
- "get":function(_name){
- return this._parent_.environment.getElement().getAttribute(_name);
- },
- "has":function(_name){
- return pi.env.ie?(this.get(_name)!=null):this._parent_.environment.getElement().hasAttribute(_name);
- },
- "remove":function(_name){
- this._parent_.environment.getElement().removeAttribute(_name);
- return this._parent_;
- },
- "set":function(_name,_value){
- this._parent_.environment.getElement().setAttribute(_name,_value);
- return this._parent_;
- },
- "addClass":function(_classes){
- for (var i = 0; i < arguments.length; i++) {
- pi.util.Element.addClass(this._parent_.environment.getElement(),arguments[i]);
- };
- return this._parent_;
- },
- "clearClass":function(){
- this.setClass("");
- this._parent_;
- },
- "getClass":function(){
- return pi.util.Element.getClass( this._parent_.environment.getElement() );
- },
- "hasClass":function(_class){
- return pi.util.Element.hasClass( this._parent_.environment.getElement(), _class );
- },
- "setClass":function(_value){
- return pi.util.Element.setClass( this._parent_.environment.getElement(), _value );
- },
- "removeClass":function(_class){
- pi.util.Element.removeClass( this._parent_.environment.getElement(), _class );
- return this._parent_;
- },
- "toggleClass":function(_class){
- pi.util.Element.toggleClass( this._parent_.environment.getElement(), _class );
- }
- },
- "child":{
- "get":function(){
- return this._parent_.environment.getElement().childNodes;
- },
- "add":function(_elements){
- for (var i = 0; i < arguments.length; i++) {
- var el = arguments[i];
- this._parent_.environment.getElement().appendChild(
- el.environment ? el.environment.getElement() : el
- );
- }
- return this._parent_;
- },
- "addAfter":function(_element,_referenceElement){
- this.addBefore(
- _element.environment?_element.environment.getElement():_element,
- (_referenceElement.environment?_referenceElement.environment.getElement():_referenceElement).nextSibling
- );
- return this._parent_;
- },
- "addBefore":function(_element,_referenceElement){
- this._parent_.environment.getElement().insertBefore(
- _element.environment?_element.environment.getElement():_element,
- _referenceElement.environment?_referenceElement.environment.getElement():_referenceElement
- );
- return this._parent_;
- },
- "query":function(_tag,_attributeName,_attributeValue){
- return this._parent_.query(
- "{0}{1}".format( (_tag?"{0}".format(_tag):"/*"), _attributeName||_attributeValue?"[contains(concat(' ', @{0}, ' '),' {1} ')]".format(_attributeName||"",_attributeValue||""):"" )
- );
- },
- "remove":function(_element){
- this._parent_.environment.getElement().removeChild(_element.environment?_element.environment.getElement():_element);
- }
- },
- "environment":{
- "_element":null,
- "getParent":function(){
- return this.getElement().parentNode;
- },
- "getPosition":function(){
- return pi.util.Element.getPosition(this.getElement());
- },
- "getSize":function(){
- return pi.util.Element.getSize( this.getElement() );
- },
- "addStyle":function(_styleObject){
- pi.util.Element.addStyle(this.getElement(),_styleObject);
- return this._parent_;
- },
- "getStyle":function(_property){
- return pi.util.Element.getStyle(_property);
- },
- "getName":function(){
- return this.getElement().nodeName;
- },
- "getType":function(){
- return this.getElement().nodeType;
- },
- "getView":function(_property){
- return pi.util.Element.getView(this.getElement(),_property);
- }
- },
- "event":{
- "addListener":function(_event,_fn,_useCapture){
- pi.util.AddEvent(this._parent_.environment.getElement(),_event,_fn,_useCapture);
- return this._parent_;
- },
- "removeListener":function(_event,_fn,_useCapture){
- pi.util.RemoveEvent(this._parent_.environment.getElement(),_event,_fn,_useCapture);
- return this._parent_;
- }
- }
- });
-
- pi.xhr = new pi.base;
- pi.xhr.constructor = function(){
- var api;
- if(!window.XMLHttpRequest){
- var names = ["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
- for (var i = 0; i < names.length; i++) {
- try {
- this.environment.setApi(new ActiveXObject(names[i]));
- break;
- } catch (e) { continue; }
- }
- }
- else
- this.environment.setApi(new XMLHttpRequest());
- this.environment.getApi().onreadystatechange=this.event.readystatechange.curry(this);
- return this;
- };
- pi.xhr.body = {
- "abort":function(){
- this.environment.getApi().abort();
- },
- "send":function(){
- var url = this.environment.getUrl(), data = this.environment.getData(),dataUrl = "";
-
- for (var key in data)
- dataUrl += "{0}={1}&".format(key, data[key]);
-
- if (this.environment.getType()=="GET")
- url += (url.search("\\?")==-1?"?":"&")+"{0}".format(dataUrl);
-
- this.environment.getApi().open(this.environment.getType(),url,this.environment.getAsync());
-
- for(var key in this.environment.getHeader())
- this.environment.getApi().setRequestHeader(key,this.environment.getHeader()[key]);
-
- this.environment.getApi().send(this.environment.getType()=="GET"?"":dataUrl);
- }
- };
- pi.xhr.body.environment = {
- "_async":true, "_api":null, "_cache":true, "_callback":[], "_channel":null, "_data":{}, "_header":{}, "_mimeType":null, "_multipart":false, "_type":"GET", "_timeout":0, "_url":"",
- "addCallback": function(_options,_fn){
- this.getCallback().push({ "fn":_fn, "options":_options });
- },
- "addHeader": function(_key,_value){
- this.getHeader()[_key] = _value;
- },
- "addData": function(_key,_value){
- this.getData()[_key] = _value;
- },
- "changeCache":function(_value){
- if(_value==false){
- this.addData("forceCache",Math.round(Math.random()*10000));
- }
- this.setCache(_value);
- },
- "changeType": function(_value){
- if(_value=="POST"){
- this.addHeader("Content-Type","application/x-www-form-urlencoded");
- }
- this.setType(_value);
- }
- };
- pi.xhr.body.event = {
- "readystatechange":function(){
- var readyState = this.environment.getApi().readyState;
- var callback=this.environment.getCallback();
-
- for (var i = 0; i < callback.length; i++) {
- if(callback[i].options.readyState.indexOf(readyState)>-1)
- callback[i].fn.apply(this);
- }
- }
- };
- pi.xhr = pi.xhr.build();
-
- /*
- * xml.xhr.get
- */
-
- pi.xhr.get = function(_url,_returnPiObject){
- var request = new pi.xhr();
- request.environment.setAsync(false);
- request.environment.setUrl(_url);
- request.send();
- return _returnPiObject?request:request.environment.getApi();
- };
-
- /*
- * pi.xpath
- */
-
- pi.xpath = function(_expression,_resultType,_contextNode,_namespaceResolver,_result){
- var contextNode = _contextNode||document,
- expression = _expression||"",
- namespaceResolver = _namespaceResolver||null,
- result=_result||null,
- resultType=_resultType||"ANY_TYPE";
- return document.evaluate(expression, contextNode, namespaceResolver, XPathResult[resultType], result);
- };
-
- Array.prototype.clone = function(){
- var tmp = [];
- Array.prototype.push.apply(tmp,this);
- tmp.forEach(function(item,index,object){
- if(item instanceof Array)
- object[index] = object[index].clone();
- });
- return tmp;
- };
- Array.prototype.count = function(_value){
- var count = 0;
- this.forEach(function(){
- count+=Number(arguments[0]==_value);
- });
- return count;
- };
-
- Array.prototype.forEach = Array.prototype.forEach||function(_function){
- for(var i=0; i<this.length; i++)
- _function.apply(this,[this[i],i,this]);
- };
-
- Array.prototype.getLastItem = function(){
- return this[this.length-1];
- };
-
- Array.prototype.indexOf = Array.prototype.indexOf||function(_value){
- var index = -1;
- for(var i=0; i<this.length; i++)
- if(this[i]==_value){
- index = i;
- break;
- }
- return index;
- };
-
- Array.prototype.remove = function(_index){
- var array = this.slice(0,_index);
- Array.prototype.push.apply(array,this.slice(_index+1));
- return array;
- };
-
- Array.prototype.removeValue = function(_value){
- return this.remove(this.indexOf(_value));
- };
-
- Boolean.prototype.toggle = function(){
- return this==true?arguments[0]:arguments[1];
- };
-
- Number.prototype.base = function(_system){
- var remain = this%_system;
- if(this==remain)return String.fromCharCode(this+(this>9?87:48));
- return ((this-remain)/_system).base(_system)+String.fromCharCode(remain+(remain>9?87:48));
- };
- Number.prototype.decimal = function(_system){
- var result = 0, digit = String(this).split("");
- for(var i=0; i<digit.length; i++)
- {
- digit[i]=parseInt((digit[i].charCodeAt(0)>58)?digit[i].charCodeAt(0)-87:digit[i]);
- result += digit[i]*(Math.pow(_system,digit.length-1-i));
- }
- return result;
- };
- Number.prototype.range = function(_pattern){
- for(
- var value = String(this), isFloat = /\./i.test(value),
- i = isFloat.toggle(parseInt(value.split(".")[0]),0),
- end = parseInt(value.split(".")[isFloat.toggle(1,0)]),
- array = []; i<end; i++
- ){
- array.push(
- Boolean(_pattern)==false?i:(typeof _pattern=="function"?_pattern(i):_pattern[i])
- );
- }
- return array;
- };
-
- String.prototype.escape = function(){
- return escape(this);
- };
-
- String.prototype.format = function(){
- var values = arguments;
- return this.replace(/\{(\d)\}/g,function(){
- return values[arguments[1]];
- });
- };
-
- String.prototype.leftpad = function(_len,_ch){
- var str=this;
- var ch = Boolean(_ch)==false?" ":_ch;
- while(str.length<_len)
- str=ch+str;
- return str;
- };
-
- String.prototype.toggle = function(_value,_other){
- return this==_value?_value:_other;
- };
-
- String.prototype.unicode = function(){
- var str="", obj = this.split("");
- for(var i=obj.length-1; i>=0; i--)
- str="\\u{0}{1}".format(String(obj[i].charCodeAt(0).base(16)).leftpad(4,"0"),str);
- return str;
- };
-
- pi.util.AddEvent(
- pi.env.ie?window:document,
- pi.env.ie?"load":"DOMContentLoaded",
- function(){
- for(var i=0; i<pi.util.DOMContentLoaded.length; i++){
- pi.util.DOMContentLoaded[ i ]();
- }
- }
- );
-
-})(window); \ No newline at end of file
diff --git a/usr/local/www/javascript/row_helper.js b/usr/local/www/javascript/row_helper.js
deleted file mode 100644
index 07d4bfc..0000000
--- a/usr/local/www/javascript/row_helper.js
+++ /dev/null
@@ -1,97 +0,0 @@
-// Global Variables
-var rowname = new Array(4999);
-var rowtype = new Array(4999);
-var newrow = new Array(4999);
-var rowsize = new Array(4999);
-
-for (i = 0; i < 4999; i++) {
- rowname[i] = '';
- rowtype[i] = '';
- newrow[i] = '';
- rowsize[i] = '30';
-}
-
-var field_counter_js = 0;
-var loaded = 0;
-var is_streaming_progress_bar = 0;
-var temp_streaming_text = "";
-
-var addRowTo = (function() {
- return (function (tableId) {
- var $ = jQuery;
- var d, tbody, tr, td, bgc, i, ii, j;
- d = document;
- tbody = d.getElementById(tableId).getElementsByTagName("tbody").item(0);
- tr = d.createElement("tr");
- for (i = 0; i < field_counter_js; i++) {
- td = d.createElement("td");
- if(typeof(rowtype[i]) == 'function') {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' />" + rowtype[i](rowname[i], rowsize[i], totalrows) + " ";
- } else if(rowtype[i] == 'textbox') {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input size='" + rowsize[i] + "' class='formfld unknown' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "' /> ";
- } else if(rowtype[i] == 'textbox,ipv4v6') {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input size='" + rowsize[i] + "' class='formfld unknown ipv4v6' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "' /> ";
- } else if(rowtype[i] == 'password') {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input type='password' size='" + rowsize[i] + "' class='formfld pwd' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "' /> ";
- } else if(rowtype[i] == 'select') {
- var cidr;
- var str;
- for (cidr = 128; cidr>= 1; cidr--) {
- str=str + "<option value=\"" + cidr + "\" >" + cidr + "</option>";
- }
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><select size='1' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + str + "</select> ";
- } else if(rowtype[i] == 'select,ipv4v6') {
- var cidr;
- var str;
- for (cidr = 128; cidr>= 1; cidr--) {
- str=str + "<option value=\"" + cidr + "\" >" + cidr + "</option>";
- }
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><select class='ipv4v6' size='1' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + str + "</select> ";
- } else if(rowtype[i] == 'select_source') {
- var cidr;
- var str;
- for (cidr = 128; cidr>= 1; cidr--) {
- str=str + "<option value=\"" + cidr + "\" >" + cidr + "</option>";
- }
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><select size='1' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + str + "</select> ";
- } else {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input type='checkbox' name='" + rowname[i] + totalrows + "' /> ";
- }
- tr.appendChild(td);
- }
- td = d.createElement("td");
- td.rowSpan = "1";
-
- td.innerHTML = '<a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/' + theme + '/images/icons/icon_x.gif" /></a>';
- tr.appendChild(td);
- tbody.appendChild(tr);
- totalrows++;
- if($(tr).ipv4v6ify)
- $(tr).ipv4v6ify();
- });
-})();
-
-function removeRow(el) {
- var cel;
- while (el && el.nodeName.toLowerCase() != "tr")
- el = el.parentNode;
-
- if (el && el.parentNode) {
- cel = el.getElementsByTagName("td").item(0);
- el.parentNode.removeChild(el);
- }
-}
-
-function find_unique_field_name(field_name) {
- // loop through field_name and strip off -NUMBER
- var last_found_dash = 0;
- for (var i = 0; i < field_name.length; i++) {
- // is this a dash, if so, update
- // last_found_dash
- if (field_name.substr(i,1) == "-" )
- last_found_dash = i;
- }
- if (last_found_dash < 1)
- return field_name;
- return(field_name.substr(0,last_found_dash));
-}
diff --git a/usr/local/www/javascript/row_helper_dynamic.js b/usr/local/www/javascript/row_helper_dynamic.js
deleted file mode 100644
index d144093..0000000
--- a/usr/local/www/javascript/row_helper_dynamic.js
+++ /dev/null
@@ -1,98 +0,0 @@
-// Global Variables
-var rowname = new Array(99);
-var rowtype = new Array(99);
-var newrow = new Array(99);
-var rowsize = new Array(99);
-
-// Global variables. Set to javascript code
-// that will be eval() after change, add & delete.
-var rowhelper_onChange = '';
-var rowhelper_onAdd = '';
-var rowhelper_onDelete = '';
-
-for (i = 0; i < 99; i++) {
- rowname[i] = '';
- rowtype[i] = '';
- newrow[i] = '';
- rowsize[i] = '25';
-}
-
-var field_counter_js = 0;
-var loaded = 0;
-var is_streaming_progress_bar = 0;
-var temp_streaming_text = "";
-
-var addRowTo = (function() {
- return (function (tableId, objectSize) {
- var $ = jQuery;
- var d, tbody, tr, td, bgc, i, ii, j, size, className;
- d = document;
- tbody = d.getElementById(tableId).getElementsByTagName("tbody").item(0);
- tr = d.createElement("tr");
- totalrows++;
- size = objectSize;
- for (i = 0; i < field_counter_js; i++) {
- if (!objectSize)
- size = rowsize[i];
- td = d.createElement("td");
- if(typeof(rowtype[i]) == 'function') {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' />" + rowtype[i](rowname[i], size, totalrows) + " ";
- } else if(rowtype[i] == 'textbox') {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input " + rowhelper_onChange + " size='" + rowsize[i] + "' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "' /> ";
- } else if(rowtype[i] == 'textbox,ipv4v6') {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input " + rowhelper_onChange + " size='" + rowsize[i] + "' name='" + rowname[i] + totalrows + "' class='ipv4v6' id='" + rowname[i] + totalrows + "' /> ";
- } else if(rowtype[i] == 'select') {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><select " + rowhelper_onChange + " name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + newrow[i] + "</select> ";
- } else if(rowtype[i] == 'select,ipv4v6') {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><select " + rowhelper_onChange + " name='" + rowname[i] + totalrows + "' class='ipv4v6' id='" + rowname[i] + totalrows + "'>" + newrow[i] + "</select> ";
- } else if(rowtype[i] == 'interfaces_selection') {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><select " + rowhelper_onChange + " name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + newrow[i] + "</select> ";
- } else if(rowtype[i] == 'select_source') {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><select " + rowhelper_onChange + " name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + newrow[i] + "</select> ";
- } else if(rowtype[i] == 'checkbox') {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input " + rowhelper_onChange + " type='checkbox'name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "' /> ";
- } else if(rowtype[i] == 'input') {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input " + rowhelper_onChange + " class='formfld unknown' size='" + size + "' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "' /> ";
- } else if(rowtype[i] == 'password') {
- td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input " + rowhelper_onChange + " class='formfld pwd' type='password' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "' /> ";
- }
- tr.appendChild(td);
- }
- td = d.createElement("td");
- td.rowSpan = "1";
- td.innerHTML = '<a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/' + theme + '/images/icons/icon_x.gif" /></a>';
- tr.appendChild(td);
- tbody.appendChild(tr);
- if(rowhelper_onAdd != '')
- eval(rowhelper_onAdd);
- if($(tr).ipv4v6ify)
- $(tr).ipv4v6ify();
- });
-})();
-
-function removeRow(el) {
- var cel;
- while (el && el.nodeName.toLowerCase() != "tr")
- el = el.parentNode;
-
- if (el && el.parentNode) {
- cel = el.getElementsByTagName("td").item(0);
- el.parentNode.removeChild(el);
- }
- if(rowhelper_onDelete != '')
- eval(rowhelper_onDelete);
-}
-
-function find_unique_field_name(field_name) {
- // loop through field_name and strip off -NUMBER
- var last_found_dash = 0;
- for (var i = 0; i < field_name.length; i++) {
- // is this a dash, if so, update
- // last_found_dash
- if (field_name.substr(i,1) == "-" )
- last_found_dash = i;
- }
- if (last_found_dash < 1)
- return field_name;
- return(field_name.substr(0,last_found_dash));
-}
diff --git a/usr/local/www/javascript/row_toggle.js b/usr/local/www/javascript/row_toggle.js
deleted file mode 100644
index 350743e..0000000
--- a/usr/local/www/javascript/row_toggle.js
+++ /dev/null
@@ -1,66 +0,0 @@
-function fr_toggle(id, prefix) {
- if (!prefix)
- prefix = 'fr';
-
- var checkbox = document.getElementById(prefix + 'c' + id);
- checkbox.checked = !checkbox.checked;
- fr_bgcolor(id, prefix);
-}
-
-function fr_bgcolor(id, prefix) {
- if (!prefix)
- prefix = 'fr';
-
- var row = document.getElementById(prefix + id);
- var checkbox = document.getElementById(prefix + 'c' + id);
- var cells = row.getElementsByTagName('td');
- var cellcnt = cells.length;
-
- for (i = 0; i < cellcnt; i++) {
- // Check for cells with frd id only
- if (cells[i].id == prefix + 'd' + id)
- cells[i].style.backgroundColor = checkbox.checked ? "#FFFFBB" : "#FFFFFF";
- }
- //cells[7].style.backgroundColor = checkbox.checked ? "#FFFFBB" : "#990000";
-}
-
-function fr_insline(id, on, prefix) {
- if (!prefix)
- prefix = 'fr';
-
- var row = document.getElementById(prefix + id);
- var prevrow;
- if (id != 0) {
- prevrow = document.getElementById(prefix + (id-1));
- } else {
- prevrow = document.getElementById(prefix + 'header');
- }
-
- var cells = row.getElementsByTagName("td");
- var prevcells = prevrow.getElementsByTagName("td");
-
- for (i = 0; i <= prevcells.length - 1; i++) {
- if (prevcells[i].id == prefix + 'd' + (id-1)) {
- if (on) {
- prevcells[i].style.borderBottom = "3px solid #990000";
- prevcells[i].style.paddingBottom = ((id != 0) ? 2 : 3) + "px";
- } else {
- prevcells[i].style.borderBottom = "1px solid #999999";
- prevcells[i].style.borderBottomWidth = "1px";
- prevcells[i].style.paddingBottom = ((id != 0) ? 4 : 5) + "px";
- }
- }
- }
-
- for (i = 0; i <= cells.length - 1; i++) {
- if (cells[i].id == prefix + 'd' + (id)) {
- if (on) {
- cells[i].style.borderTop = "2px solid #990000";
- cells[i].style.paddingTop = "2px";
- } else {
- cells[i].style.borderTopWidth = 0;
- cells[i].style.paddingTop = "4px";
- }
- }
- }
-}
diff --git a/usr/local/www/javascript/scriptaculous/builder.js b/usr/local/www/javascript/scriptaculous/builder.js
deleted file mode 100644
index b0dd14e..0000000
--- a/usr/local/www/javascript/scriptaculous/builder.js
+++ /dev/null
@@ -1,136 +0,0 @@
-// script.aculo.us builder.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
-
-// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-var Builder = {
- NODEMAP: {
- AREA: 'map',
- CAPTION: 'table',
- COL: 'table',
- COLGROUP: 'table',
- LEGEND: 'fieldset',
- OPTGROUP: 'select',
- OPTION: 'select',
- PARAM: 'object',
- TBODY: 'table',
- TD: 'table',
- TFOOT: 'table',
- TH: 'table',
- THEAD: 'table',
- TR: 'table'
- },
- // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
- // due to a Firefox bug
- node: function(elementName) {
- elementName = elementName.toUpperCase();
-
- // try innerHTML approach
- var parentTag = this.NODEMAP[elementName] || 'div';
- var parentElement = document.createElement(parentTag);
- try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
- parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
- } catch(e) {}
- var element = parentElement.firstChild || null;
-
- // see if browser added wrapping tags
- if(element && (element.tagName.toUpperCase() != elementName))
- element = element.getElementsByTagName(elementName)[0];
-
- // fallback to createElement approach
- if(!element) element = document.createElement(elementName);
-
- // abort if nothing could be created
- if(!element) return;
-
- // attributes (or text)
- if(arguments[1])
- if(this._isStringOrNumber(arguments[1]) ||
- (arguments[1] instanceof Array) ||
- arguments[1].tagName) {
- this._children(element, arguments[1]);
- } else {
- var attrs = this._attributes(arguments[1]);
- if(attrs.length) {
- try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
- parentElement.innerHTML = "<" +elementName + " " +
- attrs + "></" + elementName + ">";
- } catch(e) {}
- element = parentElement.firstChild || null;
- // workaround firefox 1.0.X bug
- if(!element) {
- element = document.createElement(elementName);
- for(attr in arguments[1])
- element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
- }
- if(element.tagName.toUpperCase() != elementName)
- element = parentElement.getElementsByTagName(elementName)[0];
- }
- }
-
- // text, or array of children
- if(arguments[2])
- this._children(element, arguments[2]);
-
- return $(element);
- },
- _text: function(text) {
- return document.createTextNode(text);
- },
-
- ATTR_MAP: {
- 'className': 'class',
- 'htmlFor': 'for'
- },
-
- _attributes: function(attributes) {
- var attrs = [];
- for(attribute in attributes)
- attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
- '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
- return attrs.join(" ");
- },
- _children: function(element, children) {
- if(children.tagName) {
- element.appendChild(children);
- return;
- }
- if(typeof children=='object') { // array can hold nodes and text
- children.flatten().each( function(e) {
- if(typeof e=='object')
- element.appendChild(e);
- else
- if(Builder._isStringOrNumber(e))
- element.appendChild(Builder._text(e));
- });
- } else
- if(Builder._isStringOrNumber(children))
- element.appendChild(Builder._text(children));
- },
- _isStringOrNumber: function(param) {
- return(typeof param=='string' || typeof param=='number');
- },
- build: function(html) {
- var element = this.node('div');
- $(element).update(html.strip());
- return element.down();
- },
- dump: function(scope) {
- if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
-
- var tags = ("a abbr acronym address applet area b base basefont bdo big blockquote body " +
- "br button caption center cite code col colgroup dd del dfn dir div dl dt em fieldset " +
- "font form frame frameset h1 h2 h3 h4 h5 h6 head hr html i iframe img input ins isindex "+
- "kbd label legend li link map menu meta noframes noscript object ol optgroup option p "+
- "param pre q s samp script select small span strike strong style sub sup table tbody td "+
- "textarea tfoot th thead title tr tt u ul var").split(/\s+/);
-
- tags.each( function(tag){
- scope[tag] = function() {
- return Builder.node.apply(Builder, [tag].concat($A(arguments)));
- };
- });
- }
-}; \ No newline at end of file
diff --git a/usr/local/www/javascript/scriptaculous/controls.js b/usr/local/www/javascript/scriptaculous/controls.js
deleted file mode 100644
index 59815cb..0000000
--- a/usr/local/www/javascript/scriptaculous/controls.js
+++ /dev/null
@@ -1,965 +0,0 @@
-// script.aculo.us controls.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
-
-// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// (c) 2005-2009 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
-// (c) 2005-2009 Jon Tirsen (http://www.tirsen.com)
-// Contributors:
-// Richard Livsey
-// Rahul Bhargava
-// Rob Wills
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-// Autocompleter.Base handles all the autocompletion functionality
-// that's independent of the data source for autocompletion. This
-// includes drawing the autocompletion menu, observing keyboard
-// and mouse events, and similar.
-//
-// Specific autocompleters need to provide, at the very least,
-// a getUpdatedChoices function that will be invoked every time
-// the text inside the monitored textbox changes. This method
-// should get the text for which to provide autocompletion by
-// invoking this.getToken(), NOT by directly accessing
-// this.element.value. This is to allow incremental tokenized
-// autocompletion. Specific auto-completion logic (AJAX, etc)
-// belongs in getUpdatedChoices.
-//
-// Tokenized incremental autocompletion is enabled automatically
-// when an autocompleter is instantiated with the 'tokens' option
-// in the options parameter, e.g.:
-// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
-// will incrementally autocomplete with a comma as the token.
-// Additionally, ',' in the above example can be replaced with
-// a token array, e.g. { tokens: [',', '\n'] } which
-// enables autocompletion on multiple tokens. This is most
-// useful when one of the tokens is \n (a newline), as it
-// allows smart autocompletion after linebreaks.
-
-if(typeof Effect == 'undefined')
- throw("controls.js requires including script.aculo.us' effects.js library");
-
-var Autocompleter = { };
-Autocompleter.Base = Class.create({
- baseInitialize: function(element, update, options) {
- element = $(element);
- this.element = element;
- this.update = $(update);
- this.hasFocus = false;
- this.changed = false;
- this.active = false;
- this.index = 0;
- this.entryCount = 0;
- this.oldElementValue = this.element.value;
-
- if(this.setOptions)
- this.setOptions(options);
- else
- this.options = options || { };
-
- this.options.paramName = this.options.paramName || this.element.name;
- this.options.tokens = this.options.tokens || [];
- this.options.frequency = this.options.frequency || 0.4;
- this.options.minChars = this.options.minChars || 1;
- this.options.onShow = this.options.onShow ||
- function(element, update){
- if(!update.style.position || update.style.position=='absolute') {
- update.style.position = 'absolute';
- Position.clone(element, update, {
- setHeight: false,
- offsetTop: element.offsetHeight
- });
- }
- Effect.Appear(update,{duration:0.15});
- };
- this.options.onHide = this.options.onHide ||
- function(element, update){ new Effect.Fade(update,{duration:0.15}); };
-
- if(typeof(this.options.tokens) == 'string')
- this.options.tokens = new Array(this.options.tokens);
- // Force carriage returns as token delimiters anyway
- if (!this.options.tokens.include('\n'))
- this.options.tokens.push('\n');
-
- this.observer = null;
-
- this.element.setAttribute('autocomplete','off');
-
- Element.hide(this.update);
-
- Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
- Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
- },
-
- show: function() {
- if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
- if(!this.iefix &&
- (Prototype.Browser.IE) &&
- (Element.getStyle(this.update, 'position')=='absolute')) {
- new Insertion.After(this.update,
- '<iframe id="' + this.update.id + '_iefix" '+
- 'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
- 'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
- this.iefix = $(this.update.id+'_iefix');
- }
- if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
- },
-
- fixIEOverlapping: function() {
- Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
- this.iefix.style.zIndex = 1;
- this.update.style.zIndex = 2;
- Element.show(this.iefix);
- },
-
- hide: function() {
- this.stopIndicator();
- if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
- if(this.iefix) Element.hide(this.iefix);
- },
-
- startIndicator: function() {
- if(this.options.indicator) Element.show(this.options.indicator);
- },
-
- stopIndicator: function() {
- if(this.options.indicator) Element.hide(this.options.indicator);
- },
-
- onKeyPress: function(event) {
- if(this.active)
- switch(event.keyCode) {
- case Event.KEY_TAB:
- case Event.KEY_RETURN:
- this.selectEntry();
- Event.stop(event);
- case Event.KEY_ESC:
- this.hide();
- this.active = false;
- Event.stop(event);
- return;
- case Event.KEY_LEFT:
- case Event.KEY_RIGHT:
- return;
- case Event.KEY_UP:
- this.markPrevious();
- this.render();
- Event.stop(event);
- return;
- case Event.KEY_DOWN:
- this.markNext();
- this.render();
- Event.stop(event);
- return;
- }
- else
- if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
- (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;
-
- this.changed = true;
- this.hasFocus = true;
-
- if(this.observer) clearTimeout(this.observer);
- this.observer =
- setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
- },
-
- activate: function() {
- this.changed = false;
- this.hasFocus = true;
- this.getUpdatedChoices();
- },
-
- onHover: function(event) {
- var element = Event.findElement(event, 'LI');
- if(this.index != element.autocompleteIndex)
- {
- this.index = element.autocompleteIndex;
- this.render();
- }
- Event.stop(event);
- },
-
- onClick: function(event) {
- var element = Event.findElement(event, 'LI');
- this.index = element.autocompleteIndex;
- this.selectEntry();
- this.hide();
- },
-
- onBlur: function(event) {
- // needed to make click events working
- setTimeout(this.hide.bind(this), 250);
- this.hasFocus = false;
- this.active = false;
- },
-
- render: function() {
- if(this.entryCount > 0) {
- for (var i = 0; i < this.entryCount; i++)
- this.index==i ?
- Element.addClassName(this.getEntry(i),"selected") :
- Element.removeClassName(this.getEntry(i),"selected");
- if(this.hasFocus) {
- this.show();
- this.active = true;
- }
- } else {
- this.active = false;
- this.hide();
- }
- },
-
- markPrevious: function() {
- if(this.index > 0) this.index--;
- else this.index = this.entryCount-1;
- this.getEntry(this.index).scrollIntoView(true);
- },
-
- markNext: function() {
- if(this.index < this.entryCount-1) this.index++;
- else this.index = 0;
- this.getEntry(this.index).scrollIntoView(false);
- },
-
- getEntry: function(index) {
- return this.update.firstChild.childNodes[index];
- },
-
- getCurrentEntry: function() {
- return this.getEntry(this.index);
- },
-
- selectEntry: function() {
- this.active = false;
- this.updateElement(this.getCurrentEntry());
- },
-
- updateElement: function(selectedElement) {
- if (this.options.updateElement) {
- this.options.updateElement(selectedElement);
- return;
- }
- var value = '';
- if (this.options.select) {
- var nodes = $(selectedElement).select('.' + this.options.select) || [];
- if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
- } else
- value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
-
- var bounds = this.getTokenBounds();
- if (bounds[0] != -1) {
- var newValue = this.element.value.substr(0, bounds[0]);
- var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
- if (whitespace)
- newValue += whitespace[0];
- this.element.value = newValue + value + this.element.value.substr(bounds[1]);
- } else {
- this.element.value = value;
- }
- this.oldElementValue = this.element.value;
- this.element.focus();
-
- if (this.options.afterUpdateElement)
- this.options.afterUpdateElement(this.element, selectedElement);
- },
-
- updateChoices: function(choices) {
- if(!this.changed && this.hasFocus) {
- this.update.innerHTML = choices;
- Element.cleanWhitespace(this.update);
- Element.cleanWhitespace(this.update.down());
-
- if(this.update.firstChild && this.update.down().childNodes) {
- this.entryCount =
- this.update.down().childNodes.length;
- for (var i = 0; i < this.entryCount; i++) {
- var entry = this.getEntry(i);
- entry.autocompleteIndex = i;
- this.addObservers(entry);
- }
- } else {
- this.entryCount = 0;
- }
-
- this.stopIndicator();
- this.index = 0;
-
- if(this.entryCount==1 && this.options.autoSelect) {
- this.selectEntry();
- this.hide();
- } else {
- this.render();
- }
- }
- },
-
- addObservers: function(element) {
- Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
- Event.observe(element, "click", this.onClick.bindAsEventListener(this));
- },
-
- onObserverEvent: function() {
- this.changed = false;
- this.tokenBounds = null;
- if(this.getToken().length>=this.options.minChars) {
- this.getUpdatedChoices();
- } else {
- this.active = false;
- this.hide();
- }
- this.oldElementValue = this.element.value;
- },
-
- getToken: function() {
- var bounds = this.getTokenBounds();
- return this.element.value.substring(bounds[0], bounds[1]).strip();
- },
-
- getTokenBounds: function() {
- if (null != this.tokenBounds) return this.tokenBounds;
- var value = this.element.value;
- if (value.strip().empty()) return [-1, 0];
- var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
- var offset = (diff == this.oldElementValue.length ? 1 : 0);
- var prevTokenPos = -1, nextTokenPos = value.length;
- var tp;
- for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
- tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
- if (tp > prevTokenPos) prevTokenPos = tp;
- tp = value.indexOf(this.options.tokens[index], diff + offset);
- if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
- }
- return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
- }
-});
-
-Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
- var boundary = Math.min(newS.length, oldS.length);
- for (var index = 0; index < boundary; ++index)
- if (newS[index] != oldS[index])
- return index;
- return boundary;
-};
-
-Ajax.Autocompleter = Class.create(Autocompleter.Base, {
- initialize: function(element, update, url, options) {
- this.baseInitialize(element, update, options);
- this.options.asynchronous = true;
- this.options.onComplete = this.onComplete.bind(this);
- this.options.defaultParams = this.options.parameters || null;
- this.url = url;
- },
-
- getUpdatedChoices: function() {
- this.startIndicator();
-
- var entry = encodeURIComponent(this.options.paramName) + '=' +
- encodeURIComponent(this.getToken());
-
- this.options.parameters = this.options.callback ?
- this.options.callback(this.element, entry) : entry;
-
- if(this.options.defaultParams)
- this.options.parameters += '&' + this.options.defaultParams;
-
- new Ajax.Request(this.url, this.options);
- },
-
- onComplete: function(request) {
- this.updateChoices(request.responseText);
- }
-});
-
-// The local array autocompleter. Used when you'd prefer to
-// inject an array of autocompletion options into the page, rather
-// than sending out Ajax queries, which can be quite slow sometimes.
-//
-// The constructor takes four parameters. The first two are, as usual,
-// the id of the monitored textbox, and id of the autocompletion menu.
-// The third is the array you want to autocomplete from, and the fourth
-// is the options block.
-//
-// Extra local autocompletion options:
-// - choices - How many autocompletion choices to offer
-//
-// - partialSearch - If false, the autocompleter will match entered
-// text only at the beginning of strings in the
-// autocomplete array. Defaults to true, which will
-// match text at the beginning of any *word* in the
-// strings in the autocomplete array. If you want to
-// search anywhere in the string, additionally set
-// the option fullSearch to true (default: off).
-//
-// - fullSsearch - Search anywhere in autocomplete array strings.
-//
-// - partialChars - How many characters to enter before triggering
-// a partial match (unlike minChars, which defines
-// how many characters are required to do any match
-// at all). Defaults to 2.
-//
-// - ignoreCase - Whether to ignore case when autocompleting.
-// Defaults to true.
-//
-// It's possible to pass in a custom function as the 'selector'
-// option, if you prefer to write your own autocompletion logic.
-// In that case, the other options above will not apply unless
-// you support them.
-
-Autocompleter.Local = Class.create(Autocompleter.Base, {
- initialize: function(element, update, array, options) {
- this.baseInitialize(element, update, options);
- this.options.array = array;
- },
-
- getUpdatedChoices: function() {
- this.updateChoices(this.options.selector(this));
- },
-
- setOptions: function(options) {
- this.options = Object.extend({
- choices: 10,
- partialSearch: true,
- partialChars: 2,
- ignoreCase: true,
- fullSearch: false,
- selector: function(instance) {
- var ret = []; // Beginning matches
- var partial = []; // Inside matches
- var entry = instance.getToken();
- var count = 0;
-
- for (var i = 0; i < instance.options.array.length &&
- ret.length < instance.options.choices ; i++) {
-
- var elem = instance.options.array[i];
- var foundPos = instance.options.ignoreCase ?
- elem.toLowerCase().indexOf(entry.toLowerCase()) :
- elem.indexOf(entry);
-
- while (foundPos != -1) {
- if (foundPos == 0 && elem.length != entry.length) {
- ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
- elem.substr(entry.length) + "</li>");
- break;
- } else if (entry.length >= instance.options.partialChars &&
- instance.options.partialSearch && foundPos != -1) {
- if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
- partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
- elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
- foundPos + entry.length) + "</li>");
- break;
- }
- }
-
- foundPos = instance.options.ignoreCase ?
- elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
- elem.indexOf(entry, foundPos + 1);
-
- }
- }
- if (partial.length)
- ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
- return "<ul>" + ret.join('') + "</ul>";
- }
- }, options || { });
- }
-});
-
-// AJAX in-place editor and collection editor
-// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April 2007).
-
-// Use this if you notice weird scrolling problems on some browsers,
-// the DOM might be a bit confused when this gets called so do this
-// waits 1 ms (with setTimeout) until it does the activation
-Field.scrollFreeActivate = function(field) {
- setTimeout(function() {
- Field.activate(field);
- }, 1);
-};
-
-Ajax.InPlaceEditor = Class.create({
- initialize: function(element, url, options) {
- this.url = url;
- this.element = element = $(element);
- this.prepareOptions();
- this._controls = { };
- arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
- Object.extend(this.options, options || { });
- if (!this.options.formId && this.element.id) {
- this.options.formId = this.element.id + '-inplaceeditor';
- if ($(this.options.formId))
- this.options.formId = '';
- }
- if (this.options.externalControl)
- this.options.externalControl = $(this.options.externalControl);
- if (!this.options.externalControl)
- this.options.externalControlOnly = false;
- this._originalBackground = this.element.getStyle('background-color') || 'transparent';
- this.element.title = this.options.clickToEditText;
- this._boundCancelHandler = this.handleFormCancellation.bind(this);
- this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
- this._boundFailureHandler = this.handleAJAXFailure.bind(this);
- this._boundSubmitHandler = this.handleFormSubmission.bind(this);
- this._boundWrapperHandler = this.wrapUp.bind(this);
- this.registerListeners();
- },
- checkForEscapeOrReturn: function(e) {
- if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
- if (Event.KEY_ESC == e.keyCode)
- this.handleFormCancellation(e);
- else if (Event.KEY_RETURN == e.keyCode)
- this.handleFormSubmission(e);
- },
- createControl: function(mode, handler, extraClasses) {
- var control = this.options[mode + 'Control'];
- var text = this.options[mode + 'Text'];
- if ('button' == control) {
- var btn = document.createElement('input');
- btn.type = 'submit';
- btn.value = text;
- btn.className = 'editor_' + mode + '_button';
- if ('cancel' == mode)
- btn.onclick = this._boundCancelHandler;
- this._form.appendChild(btn);
- this._controls[mode] = btn;
- } else if ('link' == control) {
- var link = document.createElement('a');
- link.href = '#';
- link.appendChild(document.createTextNode(text));
- link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
- link.className = 'editor_' + mode + '_link';
- if (extraClasses)
- link.className += ' ' + extraClasses;
- this._form.appendChild(link);
- this._controls[mode] = link;
- }
- },
- createEditField: function() {
- var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
- var fld;
- if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
- fld = document.createElement('input');
- fld.type = 'text';
- var size = this.options.size || this.options.cols || 0;
- if (0 < size) fld.size = size;
- } else {
- fld = document.createElement('textarea');
- fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
- fld.cols = this.options.cols || 40;
- }
- fld.name = this.options.paramName;
- fld.value = text; // No HTML breaks conversion anymore
- fld.className = 'editor_field';
- if (this.options.submitOnBlur)
- fld.onblur = this._boundSubmitHandler;
- this._controls.editor = fld;
- if (this.options.loadTextURL)
- this.loadExternalText();
- this._form.appendChild(this._controls.editor);
- },
- createForm: function() {
- var ipe = this;
- function addText(mode, condition) {
- var text = ipe.options['text' + mode + 'Controls'];
- if (!text || condition === false) return;
- ipe._form.appendChild(document.createTextNode(text));
- };
- this._form = $(document.createElement('form'));
- this._form.id = this.options.formId;
- this._form.addClassName(this.options.formClassName);
- this._form.onsubmit = this._boundSubmitHandler;
- this.createEditField();
- if ('textarea' == this._controls.editor.tagName.toLowerCase())
- this._form.appendChild(document.createElement('br'));
- if (this.options.onFormCustomization)
- this.options.onFormCustomization(this, this._form);
- addText('Before', this.options.okControl || this.options.cancelControl);
- this.createControl('ok', this._boundSubmitHandler);
- addText('Between', this.options.okControl && this.options.cancelControl);
- this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
- addText('After', this.options.okControl || this.options.cancelControl);
- },
- destroy: function() {
- if (this._oldInnerHTML)
- this.element.innerHTML = this._oldInnerHTML;
- this.leaveEditMode();
- this.unregisterListeners();
- },
- enterEditMode: function(e) {
- if (this._saving || this._editing) return;
- this._editing = true;
- this.triggerCallback('onEnterEditMode');
- if (this.options.externalControl)
- this.options.externalControl.hide();
- this.element.hide();
- this.createForm();
- this.element.parentNode.insertBefore(this._form, this.element);
- if (!this.options.loadTextURL)
- this.postProcessEditField();
- if (e) Event.stop(e);
- },
- enterHover: function(e) {
- if (this.options.hoverClassName)
- this.element.addClassName(this.options.hoverClassName);
- if (this._saving) return;
- this.triggerCallback('onEnterHover');
- },
- getText: function() {
- return this.element.innerHTML.unescapeHTML();
- },
- handleAJAXFailure: function(transport) {
- this.triggerCallback('onFailure', transport);
- if (this._oldInnerHTML) {
- this.element.innerHTML = this._oldInnerHTML;
- this._oldInnerHTML = null;
- }
- },
- handleFormCancellation: function(e) {
- this.wrapUp();
- if (e) Event.stop(e);
- },
- handleFormSubmission: function(e) {
- var form = this._form;
- var value = $F(this._controls.editor);
- this.prepareSubmission();
- var params = this.options.callback(form, value) || '';
- if (Object.isString(params))
- params = params.toQueryParams();
- params.editorId = this.element.id;
- if (this.options.htmlResponse) {
- var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: params,
- onComplete: this._boundWrapperHandler,
- onFailure: this._boundFailureHandler
- });
- new Ajax.Updater({ success: this.element }, this.url, options);
- } else {
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: params,
- onComplete: this._boundWrapperHandler,
- onFailure: this._boundFailureHandler
- });
- new Ajax.Request(this.url, options);
- }
- if (e) Event.stop(e);
- },
- leaveEditMode: function() {
- this.element.removeClassName(this.options.savingClassName);
- this.removeForm();
- this.leaveHover();
- this.element.style.backgroundColor = this._originalBackground;
- this.element.show();
- if (this.options.externalControl)
- this.options.externalControl.show();
- this._saving = false;
- this._editing = false;
- this._oldInnerHTML = null;
- this.triggerCallback('onLeaveEditMode');
- },
- leaveHover: function(e) {
- if (this.options.hoverClassName)
- this.element.removeClassName(this.options.hoverClassName);
- if (this._saving) return;
- this.triggerCallback('onLeaveHover');
- },
- loadExternalText: function() {
- this._form.addClassName(this.options.loadingClassName);
- this._controls.editor.disabled = true;
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: 'editorId=' + encodeURIComponent(this.element.id),
- onComplete: Prototype.emptyFunction,
- onSuccess: function(transport) {
- this._form.removeClassName(this.options.loadingClassName);
- var text = transport.responseText;
- if (this.options.stripLoadedTextTags)
- text = text.stripTags();
- this._controls.editor.value = text;
- this._controls.editor.disabled = false;
- this.postProcessEditField();
- }.bind(this),
- onFailure: this._boundFailureHandler
- });
- new Ajax.Request(this.options.loadTextURL, options);
- },
- postProcessEditField: function() {
- var fpc = this.options.fieldPostCreation;
- if (fpc)
- $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
- },
- prepareOptions: function() {
- this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
- Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
- [this._extraDefaultOptions].flatten().compact().each(function(defs) {
- Object.extend(this.options, defs);
- }.bind(this));
- },
- prepareSubmission: function() {
- this._saving = true;
- this.removeForm();
- this.leaveHover();
- this.showSaving();
- },
- registerListeners: function() {
- this._listeners = { };
- var listener;
- $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
- listener = this[pair.value].bind(this);
- this._listeners[pair.key] = listener;
- if (!this.options.externalControlOnly)
- this.element.observe(pair.key, listener);
- if (this.options.externalControl)
- this.options.externalControl.observe(pair.key, listener);
- }.bind(this));
- },
- removeForm: function() {
- if (!this._form) return;
- this._form.remove();
- this._form = null;
- this._controls = { };
- },
- showSaving: function() {
- this._oldInnerHTML = this.element.innerHTML;
- this.element.innerHTML = this.options.savingText;
- this.element.addClassName(this.options.savingClassName);
- this.element.style.backgroundColor = this._originalBackground;
- this.element.show();
- },
- triggerCallback: function(cbName, arg) {
- if ('function' == typeof this.options[cbName]) {
- this.options[cbName](this, arg);
- }
- },
- unregisterListeners: function() {
- $H(this._listeners).each(function(pair) {
- if (!this.options.externalControlOnly)
- this.element.stopObserving(pair.key, pair.value);
- if (this.options.externalControl)
- this.options.externalControl.stopObserving(pair.key, pair.value);
- }.bind(this));
- },
- wrapUp: function(transport) {
- this.leaveEditMode();
- // Can't use triggerCallback due to backward compatibility: requires
- // binding + direct element
- this._boundComplete(transport, this.element);
- }
-});
-
-Object.extend(Ajax.InPlaceEditor.prototype, {
- dispose: Ajax.InPlaceEditor.prototype.destroy
-});
-
-Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
- initialize: function($super, element, url, options) {
- this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
- $super(element, url, options);
- },
-
- createEditField: function() {
- var list = document.createElement('select');
- list.name = this.options.paramName;
- list.size = 1;
- this._controls.editor = list;
- this._collection = this.options.collection || [];
- if (this.options.loadCollectionURL)
- this.loadCollection();
- else
- this.checkForExternalText();
- this._form.appendChild(this._controls.editor);
- },
-
- loadCollection: function() {
- this._form.addClassName(this.options.loadingClassName);
- this.showLoadingText(this.options.loadingCollectionText);
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: 'editorId=' + encodeURIComponent(this.element.id),
- onComplete: Prototype.emptyFunction,
- onSuccess: function(transport) {
- var js = transport.responseText.strip();
- if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
- throw('Server returned an invalid collection representation.');
- this._collection = eval(js);
- this.checkForExternalText();
- }.bind(this),
- onFailure: this.onFailure
- });
- new Ajax.Request(this.options.loadCollectionURL, options);
- },
-
- showLoadingText: function(text) {
- this._controls.editor.disabled = true;
- var tempOption = this._controls.editor.firstChild;
- if (!tempOption) {
- tempOption = document.createElement('option');
- tempOption.value = '';
- this._controls.editor.appendChild(tempOption);
- tempOption.selected = true;
- }
- tempOption.update((text || '').stripScripts().stripTags());
- },
-
- checkForExternalText: function() {
- this._text = this.getText();
- if (this.options.loadTextURL)
- this.loadExternalText();
- else
- this.buildOptionList();
- },
-
- loadExternalText: function() {
- this.showLoadingText(this.options.loadingText);
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: 'editorId=' + encodeURIComponent(this.element.id),
- onComplete: Prototype.emptyFunction,
- onSuccess: function(transport) {
- this._text = transport.responseText.strip();
- this.buildOptionList();
- }.bind(this),
- onFailure: this.onFailure
- });
- new Ajax.Request(this.options.loadTextURL, options);
- },
-
- buildOptionList: function() {
- this._form.removeClassName(this.options.loadingClassName);
- this._collection = this._collection.map(function(entry) {
- return 2 === entry.length ? entry : [entry, entry].flatten();
- });
- var marker = ('value' in this.options) ? this.options.value : this._text;
- var textFound = this._collection.any(function(entry) {
- return entry[0] == marker;
- }.bind(this));
- this._controls.editor.update('');
- var option;
- this._collection.each(function(entry, index) {
- option = document.createElement('option');
- option.value = entry[0];
- option.selected = textFound ? entry[0] == marker : 0 == index;
- option.appendChild(document.createTextNode(entry[1]));
- this._controls.editor.appendChild(option);
- }.bind(this));
- this._controls.editor.disabled = false;
- Field.scrollFreeActivate(this._controls.editor);
- }
-});
-
-//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
-//**** This only exists for a while, in order to let ****
-//**** users adapt to the new API. Read up on the new ****
-//**** API and convert your code to it ASAP! ****
-
-Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
- if (!options) return;
- function fallback(name, expr) {
- if (name in options || expr === undefined) return;
- options[name] = expr;
- };
- fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
- options.cancelLink == options.cancelButton == false ? false : undefined)));
- fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
- options.okLink == options.okButton == false ? false : undefined)));
- fallback('highlightColor', options.highlightcolor);
- fallback('highlightEndColor', options.highlightendcolor);
-};
-
-Object.extend(Ajax.InPlaceEditor, {
- DefaultOptions: {
- ajaxOptions: { },
- autoRows: 3, // Use when multi-line w/ rows == 1
- cancelControl: 'link', // 'link'|'button'|false
- cancelText: 'cancel',
- clickToEditText: 'Click to edit',
- externalControl: null, // id|elt
- externalControlOnly: false,
- fieldPostCreation: 'activate', // 'activate'|'focus'|false
- formClassName: 'inplaceeditor-form',
- formId: null, // id|elt
- highlightColor: '#ffff99',
- highlightEndColor: '#ffffff',
- hoverClassName: '',
- htmlResponse: true,
- loadingClassName: 'inplaceeditor-loading',
- loadingText: 'Loading...',
- okControl: 'button', // 'link'|'button'|false
- okText: 'ok',
- paramName: 'value',
- rows: 1, // If 1 and multi-line, uses autoRows
- savingClassName: 'inplaceeditor-saving',
- savingText: 'Saving...',
- size: 0,
- stripLoadedTextTags: false,
- submitOnBlur: false,
- textAfterControls: '',
- textBeforeControls: '',
- textBetweenControls: ''
- },
- DefaultCallbacks: {
- callback: function(form) {
- return Form.serialize(form);
- },
- onComplete: function(transport, element) {
- // For backward compatibility, this one is bound to the IPE, and passes
- // the element directly. It was too often customized, so we don't break it.
- new Effect.Highlight(element, {
- startcolor: this.options.highlightColor, keepBackgroundImage: true });
- },
- onEnterEditMode: null,
- onEnterHover: function(ipe) {
- ipe.element.style.backgroundColor = ipe.options.highlightColor;
- if (ipe._effect)
- ipe._effect.cancel();
- },
- onFailure: function(transport, ipe) {
- alert('Error communication with the server: ' + transport.responseText.stripTags());
- },
- onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
- onLeaveEditMode: null,
- onLeaveHover: function(ipe) {
- ipe._effect = new Effect.Highlight(ipe.element, {
- startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
- restorecolor: ipe._originalBackground, keepBackgroundImage: true
- });
- }
- },
- Listeners: {
- click: 'enterEditMode',
- keydown: 'checkForEscapeOrReturn',
- mouseover: 'enterHover',
- mouseout: 'leaveHover'
- }
-});
-
-Ajax.InPlaceCollectionEditor.DefaultOptions = {
- loadingCollectionText: 'Loading options...'
-};
-
-// Delayed observer, like Form.Element.Observer,
-// but waits for delay after last key input
-// Ideal for live-search fields
-
-Form.Element.DelayedObserver = Class.create({
- initialize: function(element, delay, callback) {
- this.delay = delay || 0.5;
- this.element = $(element);
- this.callback = callback;
- this.timer = null;
- this.lastValue = $F(this.element);
- Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
- },
- delayedListener: function(event) {
- if(this.lastValue == $F(this.element)) return;
- if(this.timer) clearTimeout(this.timer);
- this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
- this.lastValue = $F(this.element);
- },
- onTimerEvent: function() {
- this.timer = null;
- this.callback(this.element, $F(this.element));
- }
-}); \ No newline at end of file
diff --git a/usr/local/www/javascript/scriptaculous/dragdrop.js b/usr/local/www/javascript/scriptaculous/dragdrop.js
deleted file mode 100644
index 452601e..0000000
--- a/usr/local/www/javascript/scriptaculous/dragdrop.js
+++ /dev/null
@@ -1,974 +0,0 @@
-// script.aculo.us dragdrop.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
-
-// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-if(Object.isUndefined(Effect))
- throw("dragdrop.js requires including script.aculo.us' effects.js library");
-
-var Droppables = {
- drops: [],
-
- remove: function(element) {
- this.drops = this.drops.reject(function(d) { return d.element==$(element); });
- },
-
- add: function(element) {
- element = $(element);
- var options = Object.extend({
- greedy: true,
- hoverclass: null,
- tree: false
- }, arguments[1] || { });
-
- // cache containers
- if(options.containment) {
- options._containers = [];
- var containment = options.containment;
- if(Object.isArray(containment)) {
- containment.each( function(c) { options._containers.push($(c)); });
- } else {
- options._containers.push($(containment));
- }
- }
-
- if(options.accept) options.accept = [options.accept].flatten();
-
- Element.makePositioned(element); // fix IE
- options.element = element;
-
- this.drops.push(options);
- },
-
- findDeepestChild: function(drops) {
- deepest = drops[0];
-
- for (i = 1; i < drops.length; ++i)
- if (Element.isParent(drops[i].element, deepest.element))
- deepest = drops[i];
-
- return deepest;
- },
-
- isContained: function(element, drop) {
- var containmentNode;
- if(drop.tree) {
- containmentNode = element.treeNode;
- } else {
- containmentNode = element.parentNode;
- }
- return drop._containers.detect(function(c) { return containmentNode == c; });
- },
-
- isAffected: function(point, element, drop) {
- return (
- (drop.element!=element) &&
- ((!drop._containers) ||
- this.isContained(element, drop)) &&
- ((!drop.accept) ||
- (Element.classNames(element).detect(
- function(v) { return drop.accept.include(v); } ) )) &&
- Position.within(drop.element, point[0], point[1]) );
- },
-
- deactivate: function(drop) {
- if(drop.hoverclass)
- Element.removeClassName(drop.element, drop.hoverclass);
- this.last_active = null;
- },
-
- activate: function(drop) {
- if(drop.hoverclass)
- Element.addClassName(drop.element, drop.hoverclass);
- this.last_active = drop;
- },
-
- show: function(point, element) {
- if(!this.drops.length) return;
- var drop, affected = [];
-
- this.drops.each( function(drop) {
- if(Droppables.isAffected(point, element, drop))
- affected.push(drop);
- });
-
- if(affected.length>0)
- drop = Droppables.findDeepestChild(affected);
-
- if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
- if (drop) {
- Position.within(drop.element, point[0], point[1]);
- if(drop.onHover)
- drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
-
- if (drop != this.last_active) Droppables.activate(drop);
- }
- },
-
- fire: function(event, element) {
- if(!this.last_active) return;
- Position.prepare();
-
- if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
- if (this.last_active.onDrop) {
- this.last_active.onDrop(element, this.last_active.element, event);
- return true;
- }
- },
-
- reset: function() {
- if(this.last_active)
- this.deactivate(this.last_active);
- }
-};
-
-var Draggables = {
- drags: [],
- observers: [],
-
- register: function(draggable) {
- if(this.drags.length == 0) {
- this.eventMouseUp = this.endDrag.bindAsEventListener(this);
- this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
- this.eventKeypress = this.keyPress.bindAsEventListener(this);
-
- Event.observe(document, "mouseup", this.eventMouseUp);
- Event.observe(document, "mousemove", this.eventMouseMove);
- Event.observe(document, "keypress", this.eventKeypress);
- }
- this.drags.push(draggable);
- },
-
- unregister: function(draggable) {
- this.drags = this.drags.reject(function(d) { return d==draggable; });
- if(this.drags.length == 0) {
- Event.stopObserving(document, "mouseup", this.eventMouseUp);
- Event.stopObserving(document, "mousemove", this.eventMouseMove);
- Event.stopObserving(document, "keypress", this.eventKeypress);
- }
- },
-
- activate: function(draggable) {
- if(draggable.options.delay) {
- this._timeout = setTimeout(function() {
- Draggables._timeout = null;
- window.focus();
- Draggables.activeDraggable = draggable;
- }.bind(this), draggable.options.delay);
- } else {
- window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
- this.activeDraggable = draggable;
- }
- },
-
- deactivate: function() {
- this.activeDraggable = null;
- },
-
- updateDrag: function(event) {
- if(!this.activeDraggable) return;
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- // Mozilla-based browsers fire successive mousemove events with
- // the same coordinates, prevent needless redrawing (moz bug?)
- if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
- this._lastPointer = pointer;
-
- this.activeDraggable.updateDrag(event, pointer);
- },
-
- endDrag: function(event) {
- if(this._timeout) {
- clearTimeout(this._timeout);
- this._timeout = null;
- }
- if(!this.activeDraggable) return;
- this._lastPointer = null;
- this.activeDraggable.endDrag(event);
- this.activeDraggable = null;
- },
-
- keyPress: function(event) {
- if(this.activeDraggable)
- this.activeDraggable.keyPress(event);
- },
-
- addObserver: function(observer) {
- this.observers.push(observer);
- this._cacheObserverCallbacks();
- },
-
- removeObserver: function(element) { // element instead of observer fixes mem leaks
- this.observers = this.observers.reject( function(o) { return o.element==element; });
- this._cacheObserverCallbacks();
- },
-
- notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag'
- if(this[eventName+'Count'] > 0)
- this.observers.each( function(o) {
- if(o[eventName]) o[eventName](eventName, draggable, event);
- });
- if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
- },
-
- _cacheObserverCallbacks: function() {
- ['onStart','onEnd','onDrag'].each( function(eventName) {
- Draggables[eventName+'Count'] = Draggables.observers.select(
- function(o) { return o[eventName]; }
- ).length;
- });
- }
-};
-
-/*--------------------------------------------------------------------------*/
-
-var Draggable = Class.create({
- initialize: function(element) {
- var defaults = {
- handle: false,
- reverteffect: function(element, top_offset, left_offset) {
- var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
- new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
- queue: {scope:'_draggable', position:'end'}
- });
- },
- endeffect: function(element) {
- var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
- new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
- queue: {scope:'_draggable', position:'end'},
- afterFinish: function(){
- Draggable._dragging[element] = false;
- }
- });
- },
- zindex: 1000,
- revert: false,
- quiet: false,
- scroll: false,
- scrollSensitivity: 20,
- scrollSpeed: 15,
- snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] }
- delay: 0
- };
-
- if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
- Object.extend(defaults, {
- starteffect: function(element) {
- element._opacity = Element.getOpacity(element);
- Draggable._dragging[element] = true;
- new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
- }
- });
-
- var options = Object.extend(defaults, arguments[1] || { });
-
- this.element = $(element);
-
- if(options.handle && Object.isString(options.handle))
- this.handle = this.element.down('.'+options.handle, 0);
-
- if(!this.handle) this.handle = $(options.handle);
- if(!this.handle) this.handle = this.element;
-
- if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
- options.scroll = $(options.scroll);
- this._isScrollChild = Element.childOf(this.element, options.scroll);
- }
-
- Element.makePositioned(this.element); // fix IE
-
- this.options = options;
- this.dragging = false;
-
- this.eventMouseDown = this.initDrag.bindAsEventListener(this);
- Event.observe(this.handle, "mousedown", this.eventMouseDown);
-
- Draggables.register(this);
- },
-
- destroy: function() {
- Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
- Draggables.unregister(this);
- },
-
- currentDelta: function() {
- return([
- parseInt(Element.getStyle(this.element,'left') || '0'),
- parseInt(Element.getStyle(this.element,'top') || '0')]);
- },
-
- initDrag: function(event) {
- if(!Object.isUndefined(Draggable._dragging[this.element]) &&
- Draggable._dragging[this.element]) return;
- if(Event.isLeftClick(event)) {
- // abort on form elements, fixes a Firefox issue
- var src = Event.element(event);
- if((tag_name = src.tagName.toUpperCase()) && (
- tag_name=='input' ||
- tag_name=='select' ||
- tag_name=='option' ||
- tag_name=='button' ||
- tag_name=='textarea')) return;
-
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- var pos = this.element.cumulativeOffset();
- this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]); });
-
- Draggables.activate(this);
- Event.stop(event);
- }
- },
-
- startDrag: function(event) {
- this.dragging = true;
- if(!this.delta)
- this.delta = this.currentDelta();
-
- if(this.options.zindex) {
- this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
- this.element.style.zIndex = this.options.zindex;
- }
-
- if(this.options.ghosting) {
- this._clone = this.element.cloneNode(true);
- this._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
- if (!this._originallyAbsolute)
- Position.absolutize(this.element);
- this.element.parentNode.insertBefore(this._clone, this.element);
- }
-
- if(this.options.scroll) {
- if (this.options.scroll == window) {
- var where = this._getWindowScroll(this.options.scroll);
- this.originalScrollLeft = where.left;
- this.originalScrollTop = where.top;
- } else {
- this.originalScrollLeft = this.options.scroll.scrollLeft;
- this.originalScrollTop = this.options.scroll.scrollTop;
- }
- }
-
- Draggables.notify('onStart', this, event);
-
- if(this.options.starteffect) this.options.starteffect(this.element);
- },
-
- updateDrag: function(event, pointer) {
- if(!this.dragging) this.startDrag(event);
-
- if(!this.options.quiet){
- Position.prepare();
- Droppables.show(pointer, this.element);
- }
-
- Draggables.notify('onDrag', this, event);
-
- this.draw(pointer);
- if(this.options.change) this.options.change(this);
-
- if(this.options.scroll) {
- this.stopScrolling();
-
- var p;
- if (this.options.scroll == window) {
- with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
- } else {
- p = Position.page(this.options.scroll);
- p[0] += this.options.scroll.scrollLeft + Position.deltaX;
- p[1] += this.options.scroll.scrollTop + Position.deltaY;
- p.push(p[0]+this.options.scroll.offsetWidth);
- p.push(p[1]+this.options.scroll.offsetHeight);
- }
- var speed = [0,0];
- if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
- if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
- if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
- if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
- this.startScrolling(speed);
- }
-
- // fix AppleWebKit rendering
- if(Prototype.Browser.WebKit) window.scrollBy(0,0);
-
- Event.stop(event);
- },
-
- finishDrag: function(event, success) {
- this.dragging = false;
-
- if(this.options.quiet){
- Position.prepare();
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- Droppables.show(pointer, this.element);
- }
-
- if(this.options.ghosting) {
- if (!this._originallyAbsolute)
- Position.relativize(this.element);
- delete this._originallyAbsolute;
- Element.remove(this._clone);
- this._clone = null;
- }
-
- var dropped = false;
- if(success) {
- dropped = Droppables.fire(event, this.element);
- if (!dropped) dropped = false;
- }
- if(dropped && this.options.onDropped) this.options.onDropped(this.element);
- Draggables.notify('onEnd', this, event);
-
- var revert = this.options.revert;
- if(revert && Object.isFunction(revert)) revert = revert(this.element);
-
- var d = this.currentDelta();
- if(revert && this.options.reverteffect) {
- if (dropped == 0 || revert != 'failure')
- this.options.reverteffect(this.element,
- d[1]-this.delta[1], d[0]-this.delta[0]);
- } else {
- this.delta = d;
- }
-
- if(this.options.zindex)
- this.element.style.zIndex = this.originalZ;
-
- if(this.options.endeffect)
- this.options.endeffect(this.element);
-
- Draggables.deactivate(this);
- Droppables.reset();
- },
-
- keyPress: function(event) {
- if(event.keyCode!=Event.KEY_ESC) return;
- this.finishDrag(event, false);
- Event.stop(event);
- },
-
- endDrag: function(event) {
- if(!this.dragging) return;
- this.stopScrolling();
- this.finishDrag(event, true);
- Event.stop(event);
- },
-
- draw: function(point) {
- var pos = this.element.cumulativeOffset();
- if(this.options.ghosting) {
- var r = Position.realOffset(this.element);
- pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
- }
-
- var d = this.currentDelta();
- pos[0] -= d[0]; pos[1] -= d[1];
-
- if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
- pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
- pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
- }
-
- var p = [0,1].map(function(i){
- return (point[i]-pos[i]-this.offset[i]);
- }.bind(this));
-
- if(this.options.snap) {
- if(Object.isFunction(this.options.snap)) {
- p = this.options.snap(p[0],p[1],this);
- } else {
- if(Object.isArray(this.options.snap)) {
- p = p.map( function(v, i) {
- return (v/this.options.snap[i]).round()*this.options.snap[i]; }.bind(this));
- } else {
- p = p.map( function(v) {
- return (v/this.options.snap).round()*this.options.snap; }.bind(this));
- }
- }}
-
- var style = this.element.style;
- if((!this.options.constraint) || (this.options.constraint=='horizontal'))
- style.left = p[0] + "px";
- if((!this.options.constraint) || (this.options.constraint=='vertical'))
- style.top = p[1] + "px";
-
- if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
- },
-
- stopScrolling: function() {
- if(this.scrollInterval) {
- clearInterval(this.scrollInterval);
- this.scrollInterval = null;
- Draggables._lastScrollPointer = null;
- }
- },
-
- startScrolling: function(speed) {
- if(!(speed[0] || speed[1])) return;
- this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
- this.lastScrolled = new Date();
- this.scrollInterval = setInterval(this.scroll.bind(this), 10);
- },
-
- scroll: function() {
- var current = new Date();
- var delta = current - this.lastScrolled;
- this.lastScrolled = current;
- if(this.options.scroll == window) {
- with (this._getWindowScroll(this.options.scroll)) {
- if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
- var d = delta / 1000;
- this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
- }
- }
- } else {
- this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
- this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000;
- }
-
- Position.prepare();
- Droppables.show(Draggables._lastPointer, this.element);
- Draggables.notify('onDrag', this);
- if (this._isScrollChild) {
- Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
- Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
- Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
- if (Draggables._lastScrollPointer[0] < 0)
- Draggables._lastScrollPointer[0] = 0;
- if (Draggables._lastScrollPointer[1] < 0)
- Draggables._lastScrollPointer[1] = 0;
- this.draw(Draggables._lastScrollPointer);
- }
-
- if(this.options.change) this.options.change(this);
- },
-
- _getWindowScroll: function(w) {
- var T, L, W, H;
- with (w.document) {
- if (w.document.documentElement && documentElement.scrollTop) {
- T = documentElement.scrollTop;
- L = documentElement.scrollLeft;
- } else if (w.document.body) {
- T = body.scrollTop;
- L = body.scrollLeft;
- }
- if (w.innerWidth) {
- W = w.innerWidth;
- H = w.innerHeight;
- } else if (w.document.documentElement && documentElement.clientWidth) {
- W = documentElement.clientWidth;
- H = documentElement.clientHeight;
- } else {
- W = body.offsetWidth;
- H = body.offsetHeight;
- }
- }
- return { top: T, left: L, width: W, height: H };
- }
-});
-
-Draggable._dragging = { };
-
-/*--------------------------------------------------------------------------*/
-
-var SortableObserver = Class.create({
- initialize: function(element, observer) {
- this.element = $(element);
- this.observer = observer;
- this.lastValue = Sortable.serialize(this.element);
- },
-
- onStart: function() {
- this.lastValue = Sortable.serialize(this.element);
- },
-
- onEnd: function() {
- Sortable.unmark();
- if(this.lastValue != Sortable.serialize(this.element))
- this.observer(this.element);
- }
-});
-
-var Sortable = {
- SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
-
- sortables: { },
-
- _findRootElement: function(element) {
- while (element.tagName.toUpperCase() != "BODY") {
- if(element.id && Sortable.sortables[element.id]) return element;
- element = element.parentNode;
- }
- },
-
- options: function(element) {
- element = Sortable._findRootElement($(element));
- if(!element) return;
- return Sortable.sortables[element.id];
- },
-
- destroy: function(element){
- element = $(element);
- var s = Sortable.sortables[element.id];
-
- if(s) {
- Draggables.removeObserver(s.element);
- s.droppables.each(function(d){ Droppables.remove(d); });
- s.draggables.invoke('destroy');
-
- delete Sortable.sortables[s.element.id];
- }
- },
-
- create: function(element) {
- element = $(element);
- var options = Object.extend({
- element: element,
- tag: 'li', // assumes li children, override with tag: 'tagname'
- dropOnEmpty: false,
- tree: false,
- treeTag: 'ul',
- overlap: 'vertical', // one of 'vertical', 'horizontal'
- constraint: 'vertical', // one of 'vertical', 'horizontal', false
- containment: element, // also takes array of elements (or id's); or false
- handle: false, // or a CSS class
- only: false,
- delay: 0,
- hoverclass: null,
- ghosting: false,
- quiet: false,
- scroll: false,
- scrollSensitivity: 20,
- scrollSpeed: 15,
- format: this.SERIALIZE_RULE,
-
- // these take arrays of elements or ids and can be
- // used for better initialization performance
- elements: false,
- handles: false,
-
- onChange: Prototype.emptyFunction,
- onUpdate: Prototype.emptyFunction
- }, arguments[1] || { });
-
- // clear any old sortable with same element
- this.destroy(element);
-
- // build options for the draggables
- var options_for_draggable = {
- revert: true,
- quiet: options.quiet,
- scroll: options.scroll,
- scrollSpeed: options.scrollSpeed,
- scrollSensitivity: options.scrollSensitivity,
- delay: options.delay,
- ghosting: options.ghosting,
- constraint: options.constraint,
- handle: options.handle };
-
- if(options.starteffect)
- options_for_draggable.starteffect = options.starteffect;
-
- if(options.reverteffect)
- options_for_draggable.reverteffect = options.reverteffect;
- else
- if(options.ghosting) options_for_draggable.reverteffect = function(element) {
- element.style.top = 0;
- element.style.left = 0;
- };
-
- if(options.endeffect)
- options_for_draggable.endeffect = options.endeffect;
-
- if(options.zindex)
- options_for_draggable.zindex = options.zindex;
-
- // build options for the droppables
- var options_for_droppable = {
- overlap: options.overlap,
- containment: options.containment,
- tree: options.tree,
- hoverclass: options.hoverclass,
- onHover: Sortable.onHover
- };
-
- var options_for_tree = {
- onHover: Sortable.onEmptyHover,
- overlap: options.overlap,
- containment: options.containment,
- hoverclass: options.hoverclass
- };
-
- // fix for gecko engine
- Element.cleanWhitespace(element);
-
- options.draggables = [];
- options.droppables = [];
-
- // drop on empty handling
- if(options.dropOnEmpty || options.tree) {
- Droppables.add(element, options_for_tree);
- options.droppables.push(element);
- }
-
- (options.elements || this.findElements(element, options) || []).each( function(e,i) {
- var handle = options.handles ? $(options.handles[i]) :
- (options.handle ? $(e).select('.' + options.handle)[0] : e);
- options.draggables.push(
- new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
- Droppables.add(e, options_for_droppable);
- if(options.tree) e.treeNode = element;
- options.droppables.push(e);
- });
-
- if(options.tree) {
- (Sortable.findTreeElements(element, options) || []).each( function(e) {
- Droppables.add(e, options_for_tree);
- e.treeNode = element;
- options.droppables.push(e);
- });
- }
-
- // keep reference
- this.sortables[element.identify()] = options;
-
- // for onupdate
- Draggables.addObserver(new SortableObserver(element, options.onUpdate));
-
- },
-
- // return all suitable-for-sortable elements in a guaranteed order
- findElements: function(element, options) {
- return Element.findChildren(
- element, options.only, options.tree ? true : false, options.tag);
- },
-
- findTreeElements: function(element, options) {
- return Element.findChildren(
- element, options.only, options.tree ? true : false, options.treeTag);
- },
-
- onHover: function(element, dropon, overlap) {
- if(Element.isParent(dropon, element)) return;
-
- if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
- return;
- } else if(overlap>0.5) {
- Sortable.mark(dropon, 'before');
- if(dropon.previousSibling != element) {
- var oldParentNode = element.parentNode;
- element.style.visibility = "hidden"; // fix gecko rendering
- dropon.parentNode.insertBefore(element, dropon);
- if(dropon.parentNode!=oldParentNode)
- Sortable.options(oldParentNode).onChange(element);
- Sortable.options(dropon.parentNode).onChange(element);
- }
- } else {
- Sortable.mark(dropon, 'after');
- var nextElement = dropon.nextSibling || null;
- if(nextElement != element) {
- var oldParentNode = element.parentNode;
- element.style.visibility = "hidden"; // fix gecko rendering
- dropon.parentNode.insertBefore(element, nextElement);
- if(dropon.parentNode!=oldParentNode)
- Sortable.options(oldParentNode).onChange(element);
- Sortable.options(dropon.parentNode).onChange(element);
- }
- }
- },
-
- onEmptyHover: function(element, dropon, overlap) {
- var oldParentNode = element.parentNode;
- var droponOptions = Sortable.options(dropon);
-
- if(!Element.isParent(dropon, element)) {
- var index;
-
- var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
- var child = null;
-
- if(children) {
- var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
-
- for (index = 0; index < children.length; index += 1) {
- if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
- offset -= Element.offsetSize (children[index], droponOptions.overlap);
- } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
- child = index + 1 < children.length ? children[index + 1] : null;
- break;
- } else {
- child = children[index];
- break;
- }
- }
- }
-
- dropon.insertBefore(element, child);
-
- Sortable.options(oldParentNode).onChange(element);
- droponOptions.onChange(element);
- }
- },
-
- unmark: function() {
- if(Sortable._marker) Sortable._marker.hide();
- },
-
- mark: function(dropon, position) {
- // mark on ghosting only
- var sortable = Sortable.options(dropon.parentNode);
- if(sortable && !sortable.ghosting) return;
-
- if(!Sortable._marker) {
- Sortable._marker =
- ($('dropmarker') || Element.extend(document.createElement('DIV'))).
- hide().addClassName('dropmarker').setStyle({position:'absolute'});
- document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
- }
- var offsets = dropon.cumulativeOffset();
- Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
-
- if(position=='after')
- if(sortable.overlap == 'horizontal')
- Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
- else
- Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
-
- Sortable._marker.show();
- },
-
- _tree: function(element, options, parent) {
- var children = Sortable.findElements(element, options) || [];
-
- for (var i = 0; i < children.length; ++i) {
- var match = children[i].id.match(options.format);
-
- if (!match) continue;
-
- var child = {
- id: encodeURIComponent(match ? match[1] : null),
- element: element,
- parent: parent,
- children: [],
- position: parent.children.length,
- container: $(children[i]).down(options.treeTag)
- };
-
- /* Get the element containing the children and recurse over it */
- if (child.container)
- this._tree(child.container, options, child);
-
- parent.children.push (child);
- }
-
- return parent;
- },
-
- tree: function(element) {
- element = $(element);
- var sortableOptions = this.options(element);
- var options = Object.extend({
- tag: sortableOptions.tag,
- treeTag: sortableOptions.treeTag,
- only: sortableOptions.only,
- name: element.id,
- format: sortableOptions.format
- }, arguments[1] || { });
-
- var root = {
- id: null,
- parent: null,
- children: [],
- container: element,
- position: 0
- };
-
- return Sortable._tree(element, options, root);
- },
-
- /* Construct a [i] index for a particular node */
- _constructIndex: function(node) {
- var index = '';
- do {
- if (node.id) index = '[' + node.position + ']' + index;
- } while ((node = node.parent) != null);
- return index;
- },
-
- sequence: function(element) {
- element = $(element);
- var options = Object.extend(this.options(element), arguments[1] || { });
-
- return $(this.findElements(element, options) || []).map( function(item) {
- return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
- });
- },
-
- setSequence: function(element, new_sequence) {
- element = $(element);
- var options = Object.extend(this.options(element), arguments[2] || { });
-
- var nodeMap = { };
- this.findElements(element, options).each( function(n) {
- if (n.id.match(options.format))
- nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
- n.parentNode.removeChild(n);
- });
-
- new_sequence.each(function(ident) {
- var n = nodeMap[ident];
- if (n) {
- n[1].appendChild(n[0]);
- delete nodeMap[ident];
- }
- });
- },
-
- serialize: function(element) {
- element = $(element);
- var options = Object.extend(Sortable.options(element), arguments[1] || { });
- var name = encodeURIComponent(
- (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
-
- if (options.tree) {
- return Sortable.tree(element, arguments[1]).children.map( function (item) {
- return [name + Sortable._constructIndex(item) + "[id]=" +
- encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
- }).flatten().join('&');
- } else {
- return Sortable.sequence(element, arguments[1]).map( function(item) {
- return name + "[]=" + encodeURIComponent(item);
- }).join('&');
- }
- }
-};
-
-// Returns true if child is contained within element
-Element.isParent = function(child, element) {
- if (!child.parentNode || child == element) return false;
- if (child.parentNode == element) return true;
- return Element.isParent(child.parentNode, element);
-};
-
-Element.findChildren = function(element, only, recursive, tagName) {
- if(!element.hasChildNodes()) return null;
- tagName = tagName.toUpperCase();
- if(only) only = [only].flatten();
- var elements = [];
- $A(element.childNodes).each( function(e) {
- if(e.tagName && e.tagName.toUpperCase()==tagName &&
- (!only || (Element.classNames(e).detect(function(v) { return only.include(v); }))))
- elements.push(e);
- if(recursive) {
- var grandchildren = Element.findChildren(e, only, recursive, tagName);
- if(grandchildren) elements.push(grandchildren);
- }
- });
-
- return (elements.length>0 ? elements.flatten() : []);
-};
-
-Element.offsetSize = function (element, type) {
- return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
-}; \ No newline at end of file
diff --git a/usr/local/www/javascript/scriptaculous/effects.js b/usr/local/www/javascript/scriptaculous/effects.js
deleted file mode 100644
index 7d5192c..0000000
--- a/usr/local/www/javascript/scriptaculous/effects.js
+++ /dev/null
@@ -1,1123 +0,0 @@
-// script.aculo.us effects.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
-
-// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// Contributors:
-// Justin Palmer (http://encytemedia.com/)
-// Mark Pilgrim (http://diveintomark.org/)
-// Martin Bialasinki
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-// converts rgb() and #xxx to #xxxxxx format,
-// returns self (or first argument) if not convertable
-String.prototype.parseColor = function() {
- var color = '#';
- if (this.slice(0,4) == 'rgb(') {
- var cols = this.slice(4,this.length-1).split(',');
- var i=0; do { color += parseInt(cols[i]).toColorPart(); } while (++i<3);
- } else {
- if (this.slice(0,1) == '#') {
- if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
- if (this.length==7) color = this.toLowerCase();
- }
- }
- return (color.length==7 ? color : (arguments[0] || this));
-};
-
-/*--------------------------------------------------------------------------*/
-
-Element.collectTextNodes = function(element) {
- return $A($(element).childNodes).collect( function(node) {
- return (node.nodeType==3 ? node.nodeValue :
- (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
- }).flatten().join('');
-};
-
-Element.collectTextNodesIgnoreClass = function(element, className) {
- return $A($(element).childNodes).collect( function(node) {
- return (node.nodeType==3 ? node.nodeValue :
- ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
- Element.collectTextNodesIgnoreClass(node, className) : ''));
- }).flatten().join('');
-};
-
-Element.setContentZoom = function(element, percent) {
- element = $(element);
- element.setStyle({fontSize: (percent/100) + 'em'});
- if (Prototype.Browser.WebKit) window.scrollBy(0,0);
- return element;
-};
-
-Element.getInlineOpacity = function(element){
- return $(element).style.opacity || '';
-};
-
-Element.forceRerendering = function(element) {
- try {
- element = $(element);
- var n = document.createTextNode(' ');
- element.appendChild(n);
- element.removeChild(n);
- } catch(e) { }
-};
-
-/*--------------------------------------------------------------------------*/
-
-var Effect = {
- _elementDoesNotExistError: {
- name: 'ElementDoesNotExistError',
- message: 'The specified DOM element does not exist, but is required for this effect to operate'
- },
- Transitions: {
- linear: Prototype.K,
- sinoidal: function(pos) {
- return (-Math.cos(pos*Math.PI)/2) + .5;
- },
- reverse: function(pos) {
- return 1-pos;
- },
- flicker: function(pos) {
- var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;
- return pos > 1 ? 1 : pos;
- },
- wobble: function(pos) {
- return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;
- },
- pulse: function(pos, pulses) {
- return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;
- },
- spring: function(pos) {
- return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
- },
- none: function(pos) {
- return 0;
- },
- full: function(pos) {
- return 1;
- }
- },
- DefaultOptions: {
- duration: 1.0, // seconds
- fps: 100, // 100= assume 66fps max.
- sync: false, // true for combining
- from: 0.0,
- to: 1.0,
- delay: 0.0,
- queue: 'parallel'
- },
- tagifyText: function(element) {
- var tagifyStyle = 'position:relative';
- if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
-
- element = $(element);
- $A(element.childNodes).each( function(child) {
- if (child.nodeType==3) {
- child.nodeValue.toArray().each( function(character) {
- element.insertBefore(
- new Element('span', {style: tagifyStyle}).update(
- character == ' ' ? String.fromCharCode(160) : character),
- child);
- });
- Element.remove(child);
- }
- });
- },
- multiple: function(element, effect) {
- var elements;
- if (((typeof element == 'object') ||
- Object.isFunction(element)) &&
- (element.length))
- elements = element;
- else
- elements = $(element).childNodes;
-
- var options = Object.extend({
- speed: 0.1,
- delay: 0.0
- }, arguments[2] || { });
- var masterDelay = options.delay;
-
- $A(elements).each( function(element, index) {
- new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
- });
- },
- PAIRS: {
- 'slide': ['SlideDown','SlideUp'],
- 'blind': ['BlindDown','BlindUp'],
- 'appear': ['Appear','Fade']
- },
- toggle: function(element, effect, options) {
- element = $(element);
- effect = (effect || 'appear').toLowerCase();
-
- return Effect[ Effect.PAIRS[ effect ][ element.visible() ? 1 : 0 ] ](element, Object.extend({
- queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
- }, options || {}));
- }
-};
-
-Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
-
-/* ------------- core effects ------------- */
-
-Effect.ScopedQueue = Class.create(Enumerable, {
- initialize: function() {
- this.effects = [];
- this.interval = null;
- },
- _each: function(iterator) {
- this.effects._each(iterator);
- },
- add: function(effect) {
- var timestamp = new Date().getTime();
-
- var position = Object.isString(effect.options.queue) ?
- effect.options.queue : effect.options.queue.position;
-
- switch(position) {
- case 'front':
- // move unstarted effects after this effect
- this.effects.findAll(function(e){ return e.state=='idle'; }).each( function(e) {
- e.startOn += effect.finishOn;
- e.finishOn += effect.finishOn;
- });
- break;
- case 'with-last':
- timestamp = this.effects.pluck('startOn').max() || timestamp;
- break;
- case 'end':
- // start effect after last queued effect has finished
- timestamp = this.effects.pluck('finishOn').max() || timestamp;
- break;
- }
-
- effect.startOn += timestamp;
- effect.finishOn += timestamp;
-
- if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
- this.effects.push(effect);
-
- if (!this.interval)
- this.interval = setInterval(this.loop.bind(this), 15);
- },
- remove: function(effect) {
- this.effects = this.effects.reject(function(e) { return e==effect; });
- if (this.effects.length == 0) {
- clearInterval(this.interval);
- this.interval = null;
- }
- },
- loop: function() {
- var timePos = new Date().getTime();
- for(var i=0, len=this.effects.length;i<len;i++)
- this.effects[i] && this.effects[i].loop(timePos);
- }
-});
-
-Effect.Queues = {
- instances: $H(),
- get: function(queueName) {
- if (!Object.isString(queueName)) return queueName;
-
- return this.instances.get(queueName) ||
- this.instances.set(queueName, new Effect.ScopedQueue());
- }
-};
-Effect.Queue = Effect.Queues.get('global');
-
-Effect.Base = Class.create({
- position: null,
- start: function(options) {
- if (options && options.transition === false) options.transition = Effect.Transitions.linear;
- this.options = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
- this.currentFrame = 0;
- this.state = 'idle';
- this.startOn = this.options.delay*1000;
- this.finishOn = this.startOn+(this.options.duration*1000);
- this.fromToDelta = this.options.to-this.options.from;
- this.totalTime = this.finishOn-this.startOn;
- this.totalFrames = this.options.fps*this.options.duration;
-
- this.render = (function() {
- function dispatch(effect, eventName) {
- if (effect.options[eventName + 'Internal'])
- effect.options[eventName + 'Internal'](effect);
- if (effect.options[eventName])
- effect.options[eventName](effect);
- }
-
- return function(pos) {
- if (this.state === "idle") {
- this.state = "running";
- dispatch(this, 'beforeSetup');
- if (this.setup) this.setup();
- dispatch(this, 'afterSetup');
- }
- if (this.state === "running") {
- pos = (this.options.transition(pos) * this.fromToDelta) + this.options.from;
- this.position = pos;
- dispatch(this, 'beforeUpdate');
- if (this.update) this.update(pos);
- dispatch(this, 'afterUpdate');
- }
- };
- })();
-
- this.event('beforeStart');
- if (!this.options.sync)
- Effect.Queues.get(Object.isString(this.options.queue) ?
- 'global' : this.options.queue.scope).add(this);
- },
- loop: function(timePos) {
- if (timePos >= this.startOn) {
- if (timePos >= this.finishOn) {
- this.render(1.0);
- this.cancel();
- this.event('beforeFinish');
- if (this.finish) this.finish();
- this.event('afterFinish');
- return;
- }
- var pos = (timePos - this.startOn) / this.totalTime,
- frame = (pos * this.totalFrames).round();
- if (frame > this.currentFrame) {
- this.render(pos);
- this.currentFrame = frame;
- }
- }
- },
- cancel: function() {
- if (!this.options.sync)
- Effect.Queues.get(Object.isString(this.options.queue) ?
- 'global' : this.options.queue.scope).remove(this);
- this.state = 'finished';
- },
- event: function(eventName) {
- if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
- if (this.options[eventName]) this.options[eventName](this);
- },
- inspect: function() {
- var data = $H();
- for(property in this)
- if (!Object.isFunction(this[property])) data.set(property, this[property]);
- return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
- }
-});
-
-Effect.Parallel = Class.create(Effect.Base, {
- initialize: function(effects) {
- this.effects = effects || [];
- this.start(arguments[1]);
- },
- update: function(position) {
- this.effects.invoke('render', position);
- },
- finish: function(position) {
- this.effects.each( function(effect) {
- effect.render(1.0);
- effect.cancel();
- effect.event('beforeFinish');
- if (effect.finish) effect.finish(position);
- effect.event('afterFinish');
- });
- }
-});
-
-Effect.Tween = Class.create(Effect.Base, {
- initialize: function(object, from, to) {
- object = Object.isString(object) ? $(object) : object;
- var args = $A(arguments), method = args.last(),
- options = args.length == 5 ? args[3] : null;
- this.method = Object.isFunction(method) ? method.bind(object) :
- Object.isFunction(object[method]) ? object[method].bind(object) :
- function(value) { object[method] = value; };
- this.start(Object.extend({ from: from, to: to }, options || { }));
- },
- update: function(position) {
- this.method(position);
- }
-});
-
-Effect.Event = Class.create(Effect.Base, {
- initialize: function() {
- this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
- },
- update: Prototype.emptyFunction
-});
-
-Effect.Opacity = Class.create(Effect.Base, {
- initialize: function(element) {
- this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
- // make this work on IE on elements without 'layout'
- if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
- this.element.setStyle({zoom: 1});
- var options = Object.extend({
- from: this.element.getOpacity() || 0.0,
- to: 1.0
- }, arguments[1] || { });
- this.start(options);
- },
- update: function(position) {
- this.element.setOpacity(position);
- }
-});
-
-Effect.Move = Class.create(Effect.Base, {
- initialize: function(element) {
- this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
- var options = Object.extend({
- x: 0,
- y: 0,
- mode: 'relative'
- }, arguments[1] || { });
- this.start(options);
- },
- setup: function() {
- this.element.makePositioned();
- this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
- this.originalTop = parseFloat(this.element.getStyle('top') || '0');
- if (this.options.mode == 'absolute') {
- this.options.x = this.options.x - this.originalLeft;
- this.options.y = this.options.y - this.originalTop;
- }
- },
- update: function(position) {
- this.element.setStyle({
- left: (this.options.x * position + this.originalLeft).round() + 'px',
- top: (this.options.y * position + this.originalTop).round() + 'px'
- });
- }
-});
-
-// for backwards compatibility
-Effect.MoveBy = function(element, toTop, toLeft) {
- return new Effect.Move(element,
- Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
-};
-
-Effect.Scale = Class.create(Effect.Base, {
- initialize: function(element, percent) {
- this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
- var options = Object.extend({
- scaleX: true,
- scaleY: true,
- scaleContent: true,
- scaleFromCenter: false,
- scaleMode: 'box', // 'box' or 'contents' or { } with provided values
- scaleFrom: 100.0,
- scaleTo: percent
- }, arguments[2] || { });
- this.start(options);
- },
- setup: function() {
- this.restoreAfterFinish = this.options.restoreAfterFinish || false;
- this.elementPositioning = this.element.getStyle('position');
-
- this.originalStyle = { };
- ['top','left','width','height','fontSize'].each( function(k) {
- this.originalStyle[k] = this.element.style[k];
- }.bind(this));
-
- this.originalTop = this.element.offsetTop;
- this.originalLeft = this.element.offsetLeft;
-
- var fontSize = this.element.getStyle('font-size') || '100%';
- ['em','px','%','pt'].each( function(fontSizeType) {
- if (fontSize.indexOf(fontSizeType)>0) {
- this.fontSize = parseFloat(fontSize);
- this.fontSizeType = fontSizeType;
- }
- }.bind(this));
-
- this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
-
- this.dims = null;
- if (this.options.scaleMode=='box')
- this.dims = [this.element.offsetHeight, this.element.offsetWidth];
- if (/^content/.test(this.options.scaleMode))
- this.dims = [this.element.scrollHeight, this.element.scrollWidth];
- if (!this.dims)
- this.dims = [this.options.scaleMode.originalHeight,
- this.options.scaleMode.originalWidth];
- },
- update: function(position) {
- var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
- if (this.options.scaleContent && this.fontSize)
- this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
- this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
- },
- finish: function(position) {
- if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
- },
- setDimensions: function(height, width) {
- var d = { };
- if (this.options.scaleX) d.width = width.round() + 'px';
- if (this.options.scaleY) d.height = height.round() + 'px';
- if (this.options.scaleFromCenter) {
- var topd = (height - this.dims[0])/2;
- var leftd = (width - this.dims[1])/2;
- if (this.elementPositioning == 'absolute') {
- if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
- if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
- } else {
- if (this.options.scaleY) d.top = -topd + 'px';
- if (this.options.scaleX) d.left = -leftd + 'px';
- }
- }
- this.element.setStyle(d);
- }
-});
-
-Effect.Highlight = Class.create(Effect.Base, {
- initialize: function(element) {
- this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
- var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
- this.start(options);
- },
- setup: function() {
- // Prevent executing on elements not in the layout flow
- if (this.element.getStyle('display')=='none') { this.cancel(); return; }
- // Disable background image during the effect
- this.oldStyle = { };
- if (!this.options.keepBackgroundImage) {
- this.oldStyle.backgroundImage = this.element.getStyle('background-image');
- this.element.setStyle({backgroundImage: 'none'});
- }
- if (!this.options.endcolor)
- this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
- if (!this.options.restorecolor)
- this.options.restorecolor = this.element.getStyle('background-color');
- // init color calculations
- this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16); }.bind(this));
- this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]; }.bind(this));
- },
- update: function(position) {
- this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
- return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
- },
- finish: function() {
- this.element.setStyle(Object.extend(this.oldStyle, {
- backgroundColor: this.options.restorecolor
- }));
- }
-});
-
-Effect.ScrollTo = function(element) {
- var options = arguments[1] || { },
- scrollOffsets = document.viewport.getScrollOffsets(),
- elementOffsets = $(element).cumulativeOffset();
-
- if (options.offset) elementOffsets[1] += options.offset;
-
- return new Effect.Tween(null,
- scrollOffsets.top,
- elementOffsets[1],
- options,
- function(p){ scrollTo(scrollOffsets.left, p.round()); }
- );
-};
-
-/* ------------- combination effects ------------- */
-
-Effect.Fade = function(element) {
- element = $(element);
- var oldOpacity = element.getInlineOpacity();
- var options = Object.extend({
- from: element.getOpacity() || 1.0,
- to: 0.0,
- afterFinishInternal: function(effect) {
- if (effect.options.to!=0) return;
- effect.element.hide().setStyle({opacity: oldOpacity});
- }
- }, arguments[1] || { });
- return new Effect.Opacity(element,options);
-};
-
-Effect.Appear = function(element) {
- element = $(element);
- var options = Object.extend({
- from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
- to: 1.0,
- // force Safari to render floated elements properly
- afterFinishInternal: function(effect) {
- effect.element.forceRerendering();
- },
- beforeSetup: function(effect) {
- effect.element.setOpacity(effect.options.from).show();
- }}, arguments[1] || { });
- return new Effect.Opacity(element,options);
-};
-
-Effect.Puff = function(element) {
- element = $(element);
- var oldStyle = {
- opacity: element.getInlineOpacity(),
- position: element.getStyle('position'),
- top: element.style.top,
- left: element.style.left,
- width: element.style.width,
- height: element.style.height
- };
- return new Effect.Parallel(
- [ new Effect.Scale(element, 200,
- { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
- new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
- Object.extend({ duration: 1.0,
- beforeSetupInternal: function(effect) {
- Position.absolutize(effect.effects[0].element);
- },
- afterFinishInternal: function(effect) {
- effect.effects[0].element.hide().setStyle(oldStyle); }
- }, arguments[1] || { })
- );
-};
-
-Effect.BlindUp = function(element) {
- element = $(element);
- element.makeClipping();
- return new Effect.Scale(element, 0,
- Object.extend({ scaleContent: false,
- scaleX: false,
- restoreAfterFinish: true,
- afterFinishInternal: function(effect) {
- effect.element.hide().undoClipping();
- }
- }, arguments[1] || { })
- );
-};
-
-Effect.BlindDown = function(element) {
- element = $(element);
- var elementDimensions = element.getDimensions();
- return new Effect.Scale(element, 100, Object.extend({
- scaleContent: false,
- scaleX: false,
- scaleFrom: 0,
- scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
- restoreAfterFinish: true,
- afterSetup: function(effect) {
- effect.element.makeClipping().setStyle({height: '0px'}).show();
- },
- afterFinishInternal: function(effect) {
- effect.element.undoClipping();
- }
- }, arguments[1] || { }));
-};
-
-Effect.SwitchOff = function(element) {
- element = $(element);
- var oldOpacity = element.getInlineOpacity();
- return new Effect.Appear(element, Object.extend({
- duration: 0.4,
- from: 0,
- transition: Effect.Transitions.flicker,
- afterFinishInternal: function(effect) {
- new Effect.Scale(effect.element, 1, {
- duration: 0.3, scaleFromCenter: true,
- scaleX: false, scaleContent: false, restoreAfterFinish: true,
- beforeSetup: function(effect) {
- effect.element.makePositioned().makeClipping();
- },
- afterFinishInternal: function(effect) {
- effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
- }
- });
- }
- }, arguments[1] || { }));
-};
-
-Effect.DropOut = function(element) {
- element = $(element);
- var oldStyle = {
- top: element.getStyle('top'),
- left: element.getStyle('left'),
- opacity: element.getInlineOpacity() };
- return new Effect.Parallel(
- [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
- new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
- Object.extend(
- { duration: 0.5,
- beforeSetup: function(effect) {
- effect.effects[0].element.makePositioned();
- },
- afterFinishInternal: function(effect) {
- effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
- }
- }, arguments[1] || { }));
-};
-
-Effect.Shake = function(element) {
- element = $(element);
- var options = Object.extend({
- distance: 20,
- duration: 0.5
- }, arguments[1] || {});
- var distance = parseFloat(options.distance);
- var split = parseFloat(options.duration) / 10.0;
- var oldStyle = {
- top: element.getStyle('top'),
- left: element.getStyle('left') };
- return new Effect.Move(element,
- { x: distance, y: 0, duration: split, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
- effect.element.undoPositioned().setStyle(oldStyle);
- }}); }}); }}); }}); }}); }});
-};
-
-Effect.SlideDown = function(element) {
- element = $(element).cleanWhitespace();
- // SlideDown need to have the content of the element wrapped in a container element with fixed height!
- var oldInnerBottom = element.down().getStyle('bottom');
- var elementDimensions = element.getDimensions();
- return new Effect.Scale(element, 100, Object.extend({
- scaleContent: false,
- scaleX: false,
- scaleFrom: window.opera ? 0 : 1,
- scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
- restoreAfterFinish: true,
- afterSetup: function(effect) {
- effect.element.makePositioned();
- effect.element.down().makePositioned();
- if (window.opera) effect.element.setStyle({top: ''});
- effect.element.makeClipping().setStyle({height: '0px'}).show();
- },
- afterUpdateInternal: function(effect) {
- effect.element.down().setStyle({bottom:
- (effect.dims[0] - effect.element.clientHeight) + 'px' });
- },
- afterFinishInternal: function(effect) {
- effect.element.undoClipping().undoPositioned();
- effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
- }, arguments[1] || { })
- );
-};
-
-Effect.SlideUp = function(element) {
- element = $(element).cleanWhitespace();
- var oldInnerBottom = element.down().getStyle('bottom');
- var elementDimensions = element.getDimensions();
- return new Effect.Scale(element, window.opera ? 0 : 1,
- Object.extend({ scaleContent: false,
- scaleX: false,
- scaleMode: 'box',
- scaleFrom: 100,
- scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
- restoreAfterFinish: true,
- afterSetup: function(effect) {
- effect.element.makePositioned();
- effect.element.down().makePositioned();
- if (window.opera) effect.element.setStyle({top: ''});
- effect.element.makeClipping().show();
- },
- afterUpdateInternal: function(effect) {
- effect.element.down().setStyle({bottom:
- (effect.dims[0] - effect.element.clientHeight) + 'px' });
- },
- afterFinishInternal: function(effect) {
- effect.element.hide().undoClipping().undoPositioned();
- effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
- }
- }, arguments[1] || { })
- );
-};
-
-// Bug in opera makes the TD containing this element expand for a instance after finish
-Effect.Squish = function(element) {
- return new Effect.Scale(element, window.opera ? 1 : 0, {
- restoreAfterFinish: true,
- beforeSetup: function(effect) {
- effect.element.makeClipping();
- },
- afterFinishInternal: function(effect) {
- effect.element.hide().undoClipping();
- }
- });
-};
-
-Effect.Grow = function(element) {
- element = $(element);
- var options = Object.extend({
- direction: 'center',
- moveTransition: Effect.Transitions.sinoidal,
- scaleTransition: Effect.Transitions.sinoidal,
- opacityTransition: Effect.Transitions.full
- }, arguments[1] || { });
- var oldStyle = {
- top: element.style.top,
- left: element.style.left,
- height: element.style.height,
- width: element.style.width,
- opacity: element.getInlineOpacity() };
-
- var dims = element.getDimensions();
- var initialMoveX, initialMoveY;
- var moveX, moveY;
-
- switch (options.direction) {
- case 'top-left':
- initialMoveX = initialMoveY = moveX = moveY = 0;
- break;
- case 'top-right':
- initialMoveX = dims.width;
- initialMoveY = moveY = 0;
- moveX = -dims.width;
- break;
- case 'bottom-left':
- initialMoveX = moveX = 0;
- initialMoveY = dims.height;
- moveY = -dims.height;
- break;
- case 'bottom-right':
- initialMoveX = dims.width;
- initialMoveY = dims.height;
- moveX = -dims.width;
- moveY = -dims.height;
- break;
- case 'center':
- initialMoveX = dims.width / 2;
- initialMoveY = dims.height / 2;
- moveX = -dims.width / 2;
- moveY = -dims.height / 2;
- break;
- }
-
- return new Effect.Move(element, {
- x: initialMoveX,
- y: initialMoveY,
- duration: 0.01,
- beforeSetup: function(effect) {
- effect.element.hide().makeClipping().makePositioned();
- },
- afterFinishInternal: function(effect) {
- new Effect.Parallel(
- [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
- new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
- new Effect.Scale(effect.element, 100, {
- scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
- sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
- ], Object.extend({
- beforeSetup: function(effect) {
- effect.effects[0].element.setStyle({height: '0px'}).show();
- },
- afterFinishInternal: function(effect) {
- effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
- }
- }, options)
- );
- }
- });
-};
-
-Effect.Shrink = function(element) {
- element = $(element);
- var options = Object.extend({
- direction: 'center',
- moveTransition: Effect.Transitions.sinoidal,
- scaleTransition: Effect.Transitions.sinoidal,
- opacityTransition: Effect.Transitions.none
- }, arguments[1] || { });
- var oldStyle = {
- top: element.style.top,
- left: element.style.left,
- height: element.style.height,
- width: element.style.width,
- opacity: element.getInlineOpacity() };
-
- var dims = element.getDimensions();
- var moveX, moveY;
-
- switch (options.direction) {
- case 'top-left':
- moveX = moveY = 0;
- break;
- case 'top-right':
- moveX = dims.width;
- moveY = 0;
- break;
- case 'bottom-left':
- moveX = 0;
- moveY = dims.height;
- break;
- case 'bottom-right':
- moveX = dims.width;
- moveY = dims.height;
- break;
- case 'center':
- moveX = dims.width / 2;
- moveY = dims.height / 2;
- break;
- }
-
- return new Effect.Parallel(
- [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
- new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
- new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
- ], Object.extend({
- beforeStartInternal: function(effect) {
- effect.effects[0].element.makePositioned().makeClipping();
- },
- afterFinishInternal: function(effect) {
- effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
- }, options)
- );
-};
-
-Effect.Pulsate = function(element) {
- element = $(element);
- var options = arguments[1] || { },
- oldOpacity = element.getInlineOpacity(),
- transition = options.transition || Effect.Transitions.linear,
- reverser = function(pos){
- return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);
- };
-
- return new Effect.Opacity(element,
- Object.extend(Object.extend({ duration: 2.0, from: 0,
- afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
- }, options), {transition: reverser}));
-};
-
-Effect.Fold = function(element) {
- element = $(element);
- var oldStyle = {
- top: element.style.top,
- left: element.style.left,
- width: element.style.width,
- height: element.style.height };
- element.makeClipping();
- return new Effect.Scale(element, 5, Object.extend({
- scaleContent: false,
- scaleX: false,
- afterFinishInternal: function(effect) {
- new Effect.Scale(element, 1, {
- scaleContent: false,
- scaleY: false,
- afterFinishInternal: function(effect) {
- effect.element.hide().undoClipping().setStyle(oldStyle);
- } });
- }}, arguments[1] || { }));
-};
-
-Effect.Morph = Class.create(Effect.Base, {
- initialize: function(element) {
- this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
- var options = Object.extend({
- style: { }
- }, arguments[1] || { });
-
- if (!Object.isString(options.style)) this.style = $H(options.style);
- else {
- if (options.style.include(':'))
- this.style = options.style.parseStyle();
- else {
- this.element.addClassName(options.style);
- this.style = $H(this.element.getStyles());
- this.element.removeClassName(options.style);
- var css = this.element.getStyles();
- this.style = this.style.reject(function(style) {
- return style.value == css[style.key];
- });
- options.afterFinishInternal = function(effect) {
- effect.element.addClassName(effect.options.style);
- effect.transforms.each(function(transform) {
- effect.element.style[transform.style] = '';
- });
- };
- }
- }
- this.start(options);
- },
-
- setup: function(){
- function parseColor(color){
- if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
- color = color.parseColor();
- return $R(0,2).map(function(i){
- return parseInt( color.slice(i*2+1,i*2+3), 16 );
- });
- }
- this.transforms = this.style.map(function(pair){
- var property = pair[0], value = pair[1], unit = null;
-
- if (value.parseColor('#zzzzzz') != '#zzzzzz') {
- value = value.parseColor();
- unit = 'color';
- } else if (property == 'opacity') {
- value = parseFloat(value);
- if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
- this.element.setStyle({zoom: 1});
- } else if (Element.CSS_LENGTH.test(value)) {
- var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
- value = parseFloat(components[1]);
- unit = (components.length == 3) ? components[2] : null;
- }
-
- var originalValue = this.element.getStyle(property);
- return {
- style: property.camelize(),
- originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
- targetValue: unit=='color' ? parseColor(value) : value,
- unit: unit
- };
- }.bind(this)).reject(function(transform){
- return (
- (transform.originalValue == transform.targetValue) ||
- (
- transform.unit != 'color' &&
- (isNaN(transform.originalValue) || isNaN(transform.targetValue))
- )
- );
- });
- },
- update: function(position) {
- var style = { }, transform, i = this.transforms.length;
- while(i--)
- style[(transform = this.transforms[i]).style] =
- transform.unit=='color' ? '#'+
- (Math.round(transform.originalValue[0]+
- (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
- (Math.round(transform.originalValue[1]+
- (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
- (Math.round(transform.originalValue[2]+
- (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
- (transform.originalValue +
- (transform.targetValue - transform.originalValue) * position).toFixed(3) +
- (transform.unit === null ? '' : transform.unit);
- this.element.setStyle(style, true);
- }
-});
-
-Effect.Transform = Class.create({
- initialize: function(tracks){
- this.tracks = [];
- this.options = arguments[1] || { };
- this.addTracks(tracks);
- },
- addTracks: function(tracks){
- tracks.each(function(track){
- track = $H(track);
- var data = track.values().first();
- this.tracks.push($H({
- ids: track.keys().first(),
- effect: Effect.Morph,
- options: { style: data }
- }));
- }.bind(this));
- return this;
- },
- play: function(){
- return new Effect.Parallel(
- this.tracks.map(function(track){
- var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
- var elements = [$(ids) || $$(ids)].flatten();
- return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)); });
- }).flatten(),
- this.options
- );
- }
-});
-
-Element.CSS_PROPERTIES = $w(
- 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
- 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
- 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
- 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
- 'fontSize fontWeight height left letterSpacing lineHeight ' +
- 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
- 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
- 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
- 'right textIndent top width wordSpacing zIndex');
-
-Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
-
-String.__parseStyleElement = document.createElement('div');
-String.prototype.parseStyle = function(){
- var style, styleRules = $H();
- if (Prototype.Browser.WebKit)
- style = new Element('div',{style:this}).style;
- else {
- String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
- style = String.__parseStyleElement.childNodes[0].style;
- }
-
- Element.CSS_PROPERTIES.each(function(property){
- if (style[property]) styleRules.set(property, style[property]);
- });
-
- if (Prototype.Browser.IE && this.include('opacity'))
- styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);
-
- return styleRules;
-};
-
-if (document.defaultView && document.defaultView.getComputedStyle) {
- Element.getStyles = function(element) {
- var css = document.defaultView.getComputedStyle($(element), null);
- return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
- styles[property] = css[property];
- return styles;
- });
- };
-} else {
- Element.getStyles = function(element) {
- element = $(element);
- var css = element.currentStyle, styles;
- styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
- results[property] = css[property];
- return results;
- });
- if (!styles.opacity) styles.opacity = element.getOpacity();
- return styles;
- };
-}
-
-Effect.Methods = {
- morph: function(element, style) {
- element = $(element);
- new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
- return element;
- },
- visualEffect: function(element, effect, options) {
- element = $(element);
- var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
- new Effect[klass](element, options);
- return element;
- },
- highlight: function(element, options) {
- element = $(element);
- new Effect.Highlight(element, options);
- return element;
- }
-};
-
-$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
- 'pulsate shake puff squish switchOff dropOut').each(
- function(effect) {
- Effect.Methods[effect] = function(element, options){
- element = $(element);
- Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
- return element;
- };
- }
-);
-
-$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
- function(f) { Effect.Methods[f] = Element[f]; }
-);
-
-Element.addMethods(Effect.Methods); \ No newline at end of file
diff --git a/usr/local/www/javascript/scriptaculous/prototype.js b/usr/local/www/javascript/scriptaculous/prototype.js
deleted file mode 100644
index 9cb702c..0000000
--- a/usr/local/www/javascript/scriptaculous/prototype.js
+++ /dev/null
@@ -1,6079 +0,0 @@
-/* Prototype JavaScript framework, version 1.7
- * (c) 2005-2010 Sam Stephenson
- *
- * Prototype is freely distributable under the terms of an MIT-style license.
- * For details, see the Prototype web site: http://www.prototypejs.org/
- *
- *--------------------------------------------------------------------------*/
-
-var Prototype = {
-
- Version: '1.7',
-
- Browser: (function(){
- var ua = navigator.userAgent;
- var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
- return {
- IE: !!window.attachEvent && !isOpera,
- Opera: isOpera,
- WebKit: ua.indexOf('AppleWebKit/') > -1,
- Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
- MobileSafari: /Apple.*Mobile/.test(ua)
- };
- })(),
-
- BrowserFeatures: {
- XPath: !!document.evaluate,
-
- SelectorsAPI: !!document.querySelector,
-
- ElementExtensions: (function() {
- var constructor = window.Element || window.HTMLElement;
- return !!(constructor && constructor.prototype);
- })(),
- SpecificElementExtensions: (function() {
- if (typeof window.HTMLDivElement !== 'undefined')
- return true;
-
- var div = document.createElement('div'),
- form = document.createElement('form'),
- isSupported = false;
-
- if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {
- isSupported = true;
- }
-
- div = form = null;
-
- return isSupported;
- })()
- },
-
- ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
- JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
-
- emptyFunction: function() { },
-
- K: function(x) { return x; }
-};
-
-if (Prototype.Browser.MobileSafari)
- Prototype.BrowserFeatures.SpecificElementExtensions = false;
-
-
-var Abstract = { };
-
-
-var Try = {
- these: function() {
- var returnValue;
-
- for (var i = 0, length = arguments.length; i < length; i++) {
- var lambda = arguments[i];
- try {
- returnValue = lambda();
- break;
- } catch (e) { }
- }
-
- return returnValue;
- }
-};
-
-/* Based on Alex Arnell's inheritance implementation. */
-
-var Class = (function() {
-
- var IS_DONTENUM_BUGGY = (function(){
- for (var p in { toString: 1 }) {
- if (p === 'toString') return false;
- }
- return true;
- })();
-
- function subclass() {};
- function create() {
- var parent = null, properties = $A(arguments);
- if (Object.isFunction(properties[0]))
- parent = properties.shift();
-
- function klass() {
- this.initialize.apply(this, arguments);
- }
-
- Object.extend(klass, Class.Methods);
- klass.superclass = parent;
- klass.subclasses = [];
-
- if (parent) {
- subclass.prototype = parent.prototype;
- klass.prototype = new subclass;
- parent.subclasses.push(klass);
- }
-
- for (var i = 0, length = properties.length; i < length; i++)
- klass.addMethods(properties[i]);
-
- if (!klass.prototype.initialize)
- klass.prototype.initialize = Prototype.emptyFunction;
-
- klass.prototype.constructor = klass;
- return klass;
- }
-
- function addMethods(source) {
- var ancestor = this.superclass && this.superclass.prototype,
- properties = Object.keys(source);
-
- if (IS_DONTENUM_BUGGY) {
- if (source.toString != Object.prototype.toString)
- properties.push("toString");
- if (source.valueOf != Object.prototype.valueOf)
- properties.push("valueOf");
- }
-
- for (var i = 0, length = properties.length; i < length; i++) {
- var property = properties[i], value = source[property];
- if (ancestor && Object.isFunction(value) &&
- value.argumentNames()[0] == "$super") {
- var method = value;
- value = (function(m) {
- return function() { return ancestor[m].apply(this, arguments); };
- })(property).wrap(method);
-
- value.valueOf = method.valueOf.bind(method);
- value.toString = method.toString.bind(method);
- }
- this.prototype[property] = value;
- }
-
- return this;
- }
-
- return {
- create: create,
- Methods: {
- addMethods: addMethods
- }
- };
-})();
-(function() {
-
- var _toString = Object.prototype.toString,
- NULL_TYPE = 'Null',
- UNDEFINED_TYPE = 'Undefined',
- BOOLEAN_TYPE = 'Boolean',
- NUMBER_TYPE = 'Number',
- STRING_TYPE = 'String',
- OBJECT_TYPE = 'Object',
- FUNCTION_CLASS = '[object Function]',
- BOOLEAN_CLASS = '[object Boolean]',
- NUMBER_CLASS = '[object Number]',
- STRING_CLASS = '[object String]',
- ARRAY_CLASS = '[object Array]',
- DATE_CLASS = '[object Date]',
- NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON &&
- typeof JSON.stringify === 'function' &&
- JSON.stringify(0) === '0' &&
- typeof JSON.stringify(Prototype.K) === 'undefined';
-
- function Type(o) {
- switch(o) {
- case null: return NULL_TYPE;
- case (void 0): return UNDEFINED_TYPE;
- }
- var type = typeof o;
- switch(type) {
- case 'boolean': return BOOLEAN_TYPE;
- case 'number': return NUMBER_TYPE;
- case 'string': return STRING_TYPE;
- }
- return OBJECT_TYPE;
- }
-
- function extend(destination, source) {
- for (var property in source)
- destination[property] = source[property];
- return destination;
- }
-
- function inspect(object) {
- try {
- if (isUndefined(object)) return 'undefined';
- if (object === null) return 'null';
- return object.inspect ? object.inspect() : String(object);
- } catch (e) {
- if (e instanceof RangeError) return '...';
- throw e;
- }
- }
-
- function toJSON(value) {
- return Str('', { '': value }, []);
- }
-
- function Str(key, holder, stack) {
- var value = holder[key],
- type = typeof value;
-
- if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') {
- value = value.toJSON(key);
- }
-
- var _class = _toString.call(value);
-
- switch (_class) {
- case NUMBER_CLASS:
- case BOOLEAN_CLASS:
- case STRING_CLASS:
- value = value.valueOf();
- }
-
- switch (value) {
- case null: return 'null';
- case true: return 'true';
- case false: return 'false';
- }
-
- type = typeof value;
- switch (type) {
- case 'string':
- return value.inspect(true);
- case 'number':
- return isFinite(value) ? String(value) : 'null';
- case 'object':
-
- for (var i = 0, length = stack.length; i < length; i++) {
- if (stack[i] === value) { throw new TypeError(); }
- }
- stack.push(value);
-
- var partial = [];
- if (_class === ARRAY_CLASS) {
- for (var i = 0, length = value.length; i < length; i++) {
- var str = Str(i, value, stack);
- partial.push(typeof str === 'undefined' ? 'null' : str);
- }
- partial = '[' + partial.join(',') + ']';
- } else {
- var keys = Object.keys(value);
- for (var i = 0, length = keys.length; i < length; i++) {
- var key = keys[i], str = Str(key, value, stack);
- if (typeof str !== "undefined") {
- partial.push(key.inspect(true)+ ':' + str);
- }
- }
- partial = '{' + partial.join(',') + '}';
- }
- stack.pop();
- return partial;
- }
- }
-
- function stringify(object) {
- return JSON.stringify(object);
- }
-
- function toQueryString(object) {
- return $H(object).toQueryString();
- }
-
- function toHTML(object) {
- return object && object.toHTML ? object.toHTML() : String.interpret(object);
- }
-
- function keys(object) {
- if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); }
- var results = [];
- for (var property in object) {
- if (object.hasOwnProperty(property)) {
- results.push(property);
- }
- }
- return results;
- }
-
- function values(object) {
- var results = [];
- for (var property in object)
- results.push(object[property]);
- return results;
- }
-
- function clone(object) {
- return extend({ }, object);
- }
-
- function isElement(object) {
- return !!(object && object.nodeType == 1);
- }
-
- function isArray(object) {
- return _toString.call(object) === ARRAY_CLASS;
- }
-
- var hasNativeIsArray = (typeof Array.isArray == 'function')
- && Array.isArray([]) && !Array.isArray({});
-
- if (hasNativeIsArray) {
- isArray = Array.isArray;
- }
-
- function isHash(object) {
- return object instanceof Hash;
- }
-
- function isFunction(object) {
- return _toString.call(object) === FUNCTION_CLASS;
- }
-
- function isString(object) {
- return _toString.call(object) === STRING_CLASS;
- }
-
- function isNumber(object) {
- return _toString.call(object) === NUMBER_CLASS;
- }
-
- function isDate(object) {
- return _toString.call(object) === DATE_CLASS;
- }
-
- function isUndefined(object) {
- return typeof object === "undefined";
- }
-
- extend(Object, {
- extend: extend,
- inspect: inspect,
- toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON,
- toQueryString: toQueryString,
- toHTML: toHTML,
- keys: Object.keys || keys,
- values: values,
- clone: clone,
- isElement: isElement,
- isArray: isArray,
- isHash: isHash,
- isFunction: isFunction,
- isString: isString,
- isNumber: isNumber,
- isDate: isDate,
- isUndefined: isUndefined
- });
-})();
-Object.extend(Function.prototype, (function() {
- var slice = Array.prototype.slice;
-
- function update(array, args) {
- var arrayLength = array.length, length = args.length;
- while (length--) array[arrayLength + length] = args[length];
- return array;
- }
-
- function merge(array, args) {
- array = slice.call(array, 0);
- return update(array, args);
- }
-
- function argumentNames() {
- var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
- .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
- .replace(/\s+/g, '').split(',');
- return names.length == 1 && !names[0] ? [] : names;
- }
-
- function bind(context) {
- if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
- var __method = this, args = slice.call(arguments, 1);
- return function() {
- var a = merge(args, arguments);
- return __method.apply(context, a);
- };
- }
-
- function bindAsEventListener(context) {
- var __method = this, args = slice.call(arguments, 1);
- return function(event) {
- var a = update([event || window.event], args);
- return __method.apply(context, a);
- };
- }
-
- function curry() {
- if (!arguments.length) return this;
- var __method = this, args = slice.call(arguments, 0);
- return function() {
- var a = merge(args, arguments);
- return __method.apply(this, a);
- };
- }
-
- function delay(timeout) {
- var __method = this, args = slice.call(arguments, 1);
- timeout = timeout * 1000;
- return window.setTimeout(function() {
- return __method.apply(__method, args);
- }, timeout);
- }
-
- function defer() {
- var args = update([0.01], arguments);
- return this.delay.apply(this, args);
- }
-
- function wrap(wrapper) {
- var __method = this;
- return function() {
- var a = update([__method.bind(this)], arguments);
- return wrapper.apply(this, a);
- };
- }
-
- function methodize() {
- if (this._methodized) return this._methodized;
- var __method = this;
- return this._methodized = function() {
- var a = update([this], arguments);
- return __method.apply(null, a);
- };
- }
-
- return {
- argumentNames: argumentNames,
- bind: bind,
- bindAsEventListener: bindAsEventListener,
- curry: curry,
- delay: delay,
- defer: defer,
- wrap: wrap,
- methodize: methodize
- };
-})());
-
-
-
-(function(proto) {
-
- function toISOString() {
- return this.getUTCFullYear() + '-' +
- (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
- this.getUTCDate().toPaddedString(2) + 'T' +
- this.getUTCHours().toPaddedString(2) + ':' +
- this.getUTCMinutes().toPaddedString(2) + ':' +
- this.getUTCSeconds().toPaddedString(2) + 'Z';
- }
-
-
- function toJSON() {
- return this.toISOString();
- }
-
- if (!proto.toISOString) proto.toISOString = toISOString;
- if (!proto.toJSON) proto.toJSON = toJSON;
-
-})(Date.prototype);
-
-
-RegExp.prototype.match = RegExp.prototype.test;
-
-RegExp.escape = function(str) {
- return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
-};
-var PeriodicalExecuter = Class.create({
- initialize: function(callback, frequency) {
- this.callback = callback;
- this.frequency = frequency;
- this.currentlyExecuting = false;
-
- this.registerCallback();
- },
-
- registerCallback: function() {
- this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
- },
-
- execute: function() {
- this.callback(this);
- },
-
- stop: function() {
- if (!this.timer) return;
- clearInterval(this.timer);
- this.timer = null;
- },
-
- onTimerEvent: function() {
- if (!this.currentlyExecuting) {
- try {
- this.currentlyExecuting = true;
- this.execute();
- this.currentlyExecuting = false;
- } catch(e) {
- this.currentlyExecuting = false;
- throw e;
- }
- }
- }
-});
-Object.extend(String, {
- interpret: function(value) {
- return value == null ? '' : String(value);
- },
- specialChar: {
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '\\': '\\\\'
- }
-});
-
-Object.extend(String.prototype, (function() {
- var NATIVE_JSON_PARSE_SUPPORT = window.JSON &&
- typeof JSON.parse === 'function' &&
- JSON.parse('{"test": true}').test;
-
- function prepareReplacement(replacement) {
- if (Object.isFunction(replacement)) return replacement;
- var template = new Template(replacement);
- return function(match) { return template.evaluate(match); };
- }
-
- function gsub(pattern, replacement) {
- var result = '', source = this, match;
- replacement = prepareReplacement(replacement);
-
- if (Object.isString(pattern))
- pattern = RegExp.escape(pattern);
-
- if (!(pattern.length || pattern.source)) {
- replacement = replacement('');
- return replacement + source.split('').join(replacement) + replacement;
- }
-
- while (source.length > 0) {
- if (match = source.match(pattern)) {
- result += source.slice(0, match.index);
- result += String.interpret(replacement(match));
- source = source.slice(match.index + match[0].length);
- } else {
- result += source, source = '';
- }
- }
- return result;
- }
-
- function sub(pattern, replacement, count) {
- replacement = prepareReplacement(replacement);
- count = Object.isUndefined(count) ? 1 : count;
-
- return this.gsub(pattern, function(match) {
- if (--count < 0) return match[0];
- return replacement(match);
- });
- }
-
- function scan(pattern, iterator) {
- this.gsub(pattern, iterator);
- return String(this);
- }
-
- function truncate(length, truncation) {
- length = length || 30;
- truncation = Object.isUndefined(truncation) ? '...' : truncation;
- return this.length > length ?
- this.slice(0, length - truncation.length) + truncation : String(this);
- }
-
- function strip() {
- return this.replace(/^\s+/, '').replace(/\s+$/, '');
- }
-
- function stripTags() {
- return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
- }
-
- function stripScripts() {
- return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
- }
-
- function extractScripts() {
- var matchAll = new RegExp(Prototype.ScriptFragment, 'img'),
- matchOne = new RegExp(Prototype.ScriptFragment, 'im');
- return (this.match(matchAll) || []).map(function(scriptTag) {
- return (scriptTag.match(matchOne) || ['', ''])[1];
- });
- }
-
- function evalScripts() {
- return this.extractScripts().map(function(script) { return eval(script); });
- }
-
- function escapeHTML() {
- return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
- }
-
- function unescapeHTML() {
- return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
- }
-
-
- function toQueryParams(separator) {
- var match = this.strip().match(/([^?#]*)(#.*)?$/);
- if (!match) return { };
-
- return match[1].split(separator || '&').inject({ }, function(hash, pair) {
- if ((pair = pair.split('='))[0]) {
- var key = decodeURIComponent(pair.shift()),
- value = pair.length > 1 ? pair.join('=') : pair[0];
-
- if (value != undefined) value = decodeURIComponent(value);
-
- if (key in hash) {
- if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
- hash[key].push(value);
- }
- else hash[key] = value;
- }
- return hash;
- });
- }
-
- function toArray() {
- return this.split('');
- }
-
- function succ() {
- return this.slice(0, this.length - 1) +
- String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
- }
-
- function times(count) {
- return count < 1 ? '' : new Array(count + 1).join(this);
- }
-
- function camelize() {
- return this.replace(/-+(.)?/g, function(match, chr) {
- return chr ? chr.toUpperCase() : '';
- });
- }
-
- function capitalize() {
- return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
- }
-
- function underscore() {
- return this.replace(/::/g, '/')
- .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
- .replace(/([a-z\d])([A-Z])/g, '$1_$2')
- .replace(/-/g, '_')
- .toLowerCase();
- }
-
- function dasherize() {
- return this.replace(/_/g, '-');
- }
-
- function inspect(useDoubleQuotes) {
- var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) {
- if (character in String.specialChar) {
- return String.specialChar[character];
- }
- return '\\u00' + character.charCodeAt().toPaddedString(2, 16);
- });
- if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
- return "'" + escapedString.replace(/'/g, '\\\'') + "'";
- }
-
- function unfilterJSON(filter) {
- return this.replace(filter || Prototype.JSONFilter, '$1');
- }
-
- function isJSON() {
- var str = this;
- if (str.blank()) return false;
- str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@');
- str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']');
- str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
- return (/^[\],:{}\s]*$/).test(str);
- }
-
- function evalJSON(sanitize) {
- var json = this.unfilterJSON(),
- cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
- if (cx.test(json)) {
- json = json.replace(cx, function (a) {
- return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- });
- }
- try {
- if (!sanitize || json.isJSON()) return eval('(' + json + ')');
- } catch (e) { }
- throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
- }
-
- function parseJSON() {
- var json = this.unfilterJSON();
- return JSON.parse(json);
- }
-
- function include(pattern) {
- return this.indexOf(pattern) > -1;
- }
-
- function startsWith(pattern) {
- return this.lastIndexOf(pattern, 0) === 0;
- }
-
- function endsWith(pattern) {
- var d = this.length - pattern.length;
- return d >= 0 && this.indexOf(pattern, d) === d;
- }
-
- function empty() {
- return this == '';
- }
-
- function blank() {
- return /^\s*$/.test(this);
- }
-
- function interpolate(object, pattern) {
- return new Template(this, pattern).evaluate(object);
- }
-
- return {
- gsub: gsub,
- sub: sub,
- scan: scan,
- truncate: truncate,
- strip: String.prototype.trim || strip,
- stripTags: stripTags,
- stripScripts: stripScripts,
- extractScripts: extractScripts,
- evalScripts: evalScripts,
- escapeHTML: escapeHTML,
- unescapeHTML: unescapeHTML,
- toQueryParams: toQueryParams,
- parseQuery: toQueryParams,
- toArray: toArray,
- succ: succ,
- times: times,
- camelize: camelize,
- capitalize: capitalize,
- underscore: underscore,
- dasherize: dasherize,
- inspect: inspect,
- unfilterJSON: unfilterJSON,
- isJSON: isJSON,
- evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON,
- include: include,
- startsWith: startsWith,
- endsWith: endsWith,
- empty: empty,
- blank: blank,
- interpolate: interpolate
- };
-})());
-
-var Template = Class.create({
- initialize: function(template, pattern) {
- this.template = template.toString();
- this.pattern = pattern || Template.Pattern;
- },
-
- evaluate: function(object) {
- if (object && Object.isFunction(object.toTemplateReplacements))
- object = object.toTemplateReplacements();
-
- return this.template.gsub(this.pattern, function(match) {
- if (object == null) return (match[1] + '');
-
- var before = match[1] || '';
- if (before == '\\') return match[2];
-
- var ctx = object, expr = match[3],
- pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
-
- match = pattern.exec(expr);
- if (match == null) return before;
-
- while (match != null) {
- var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1];
- ctx = ctx[comp];
- if (null == ctx || '' == match[3]) break;
- expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
- match = pattern.exec(expr);
- }
-
- return before + String.interpret(ctx);
- });
- }
-});
-Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
-
-var $break = { };
-
-var Enumerable = (function() {
- function each(iterator, context) {
- var index = 0;
- try {
- this._each(function(value) {
- iterator.call(context, value, index++);
- });
- } catch (e) {
- if (e != $break) throw e;
- }
- return this;
- }
-
- function eachSlice(number, iterator, context) {
- var index = -number, slices = [], array = this.toArray();
- if (number < 1) return array;
- while ((index += number) < array.length)
- slices.push(array.slice(index, index+number));
- return slices.collect(iterator, context);
- }
-
- function all(iterator, context) {
- iterator = iterator || Prototype.K;
- var result = true;
- this.each(function(value, index) {
- result = result && !!iterator.call(context, value, index);
- if (!result) throw $break;
- });
- return result;
- }
-
- function any(iterator, context) {
- iterator = iterator || Prototype.K;
- var result = false;
- this.each(function(value, index) {
- if (result = !!iterator.call(context, value, index))
- throw $break;
- });
- return result;
- }
-
- function collect(iterator, context) {
- iterator = iterator || Prototype.K;
- var results = [];
- this.each(function(value, index) {
- results.push(iterator.call(context, value, index));
- });
- return results;
- }
-
- function detect(iterator, context) {
- var result;
- this.each(function(value, index) {
- if (iterator.call(context, value, index)) {
- result = value;
- throw $break;
- }
- });
- return result;
- }
-
- function findAll(iterator, context) {
- var results = [];
- this.each(function(value, index) {
- if (iterator.call(context, value, index))
- results.push(value);
- });
- return results;
- }
-
- function grep(filter, iterator, context) {
- iterator = iterator || Prototype.K;
- var results = [];
-
- if (Object.isString(filter))
- filter = new RegExp(RegExp.escape(filter));
-
- this.each(function(value, index) {
- if (filter.match(value))
- results.push(iterator.call(context, value, index));
- });
- return results;
- }
-
- function include(object) {
- if (Object.isFunction(this.indexOf))
- if (this.indexOf(object) != -1) return true;
-
- var found = false;
- this.each(function(value) {
- if (value == object) {
- found = true;
- throw $break;
- }
- });
- return found;
- }
-
- function inGroupsOf(number, fillWith) {
- fillWith = Object.isUndefined(fillWith) ? null : fillWith;
- return this.eachSlice(number, function(slice) {
- while(slice.length < number) slice.push(fillWith);
- return slice;
- });
- }
-
- function inject(memo, iterator, context) {
- this.each(function(value, index) {
- memo = iterator.call(context, memo, value, index);
- });
- return memo;
- }
-
- function invoke(method) {
- var args = $A(arguments).slice(1);
- return this.map(function(value) {
- return value[method].apply(value, args);
- });
- }
-
- function max(iterator, context) {
- iterator = iterator || Prototype.K;
- var result;
- this.each(function(value, index) {
- value = iterator.call(context, value, index);
- if (result == null || value >= result)
- result = value;
- });
- return result;
- }
-
- function min(iterator, context) {
- iterator = iterator || Prototype.K;
- var result;
- this.each(function(value, index) {
- value = iterator.call(context, value, index);
- if (result == null || value < result)
- result = value;
- });
- return result;
- }
-
- function partition(iterator, context) {
- iterator = iterator || Prototype.K;
- var trues = [], falses = [];
- this.each(function(value, index) {
- (iterator.call(context, value, index) ?
- trues : falses).push(value);
- });
- return [trues, falses];
- }
-
- function pluck(property) {
- var results = [];
- this.each(function(value) {
- results.push(value[property]);
- });
- return results;
- }
-
- function reject(iterator, context) {
- var results = [];
- this.each(function(value, index) {
- if (!iterator.call(context, value, index))
- results.push(value);
- });
- return results;
- }
-
- function sortBy(iterator, context) {
- return this.map(function(value, index) {
- return {
- value: value,
- criteria: iterator.call(context, value, index)
- };
- }).sort(function(left, right) {
- var a = left.criteria, b = right.criteria;
- return a < b ? -1 : a > b ? 1 : 0;
- }).pluck('value');
- }
-
- function toArray() {
- return this.map();
- }
-
- function zip() {
- var iterator = Prototype.K, args = $A(arguments);
- if (Object.isFunction(args.last()))
- iterator = args.pop();
-
- var collections = [this].concat(args).map($A);
- return this.map(function(value, index) {
- return iterator(collections.pluck(index));
- });
- }
-
- function size() {
- return this.toArray().length;
- }
-
- function inspect() {
- return '#<Enumerable:' + this.toArray().inspect() + '>';
- }
-
-
-
-
-
-
-
-
-
- return {
- each: each,
- eachSlice: eachSlice,
- all: all,
- every: all,
- any: any,
- some: any,
- collect: collect,
- map: collect,
- detect: detect,
- findAll: findAll,
- select: findAll,
- filter: findAll,
- grep: grep,
- include: include,
- member: include,
- inGroupsOf: inGroupsOf,
- inject: inject,
- invoke: invoke,
- max: max,
- min: min,
- partition: partition,
- pluck: pluck,
- reject: reject,
- sortBy: sortBy,
- toArray: toArray,
- entries: toArray,
- zip: zip,
- size: size,
- inspect: inspect,
- find: detect
- };
-})();
-
-function $A(iterable) {
- if (!iterable) return [];
- if ('toArray' in Object(iterable)) return iterable.toArray();
- var length = iterable.length || 0, results = new Array(length);
- while (length--) results[length] = iterable[length];
- return results;
-}
-
-
-function $w(string) {
- if (!Object.isString(string)) return [];
- string = string.strip();
- return string ? string.split(/\s+/) : [];
-}
-
-Array.from = $A;
-
-
-(function() {
- var arrayProto = Array.prototype,
- slice = arrayProto.slice,
- _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available
-
- function each(iterator, context) {
- for (var i = 0, length = this.length >>> 0; i < length; i++) {
- if (i in this) iterator.call(context, this[i], i, this);
- }
- }
- if (!_each) _each = each;
-
- function clear() {
- this.length = 0;
- return this;
- }
-
- function first() {
- return this[0];
- }
-
- function last() {
- return this[this.length - 1];
- }
-
- function compact() {
- return this.select(function(value) {
- return value != null;
- });
- }
-
- function flatten() {
- return this.inject([], function(array, value) {
- if (Object.isArray(value))
- return array.concat(value.flatten());
- array.push(value);
- return array;
- });
- }
-
- function without() {
- var values = slice.call(arguments, 0);
- return this.select(function(value) {
- return !values.include(value);
- });
- }
-
- function reverse(inline) {
- return (inline === false ? this.toArray() : this)._reverse();
- }
-
- function uniq(sorted) {
- return this.inject([], function(array, value, index) {
- if (0 == index || (sorted ? array.last() != value : !array.include(value)))
- array.push(value);
- return array;
- });
- }
-
- function intersect(array) {
- return this.uniq().findAll(function(item) {
- return array.detect(function(value) { return item === value; });
- });
- }
-
-
- function clone() {
- return slice.call(this, 0);
- }
-
- function size() {
- return this.length;
- }
-
- function inspect() {
- return '[' + this.map(Object.inspect).join(', ') + ']';
- }
-
- function indexOf(item, i) {
- i || (i = 0);
- var length = this.length;
- if (i < 0) i = length + i;
- for (; i < length; i++)
- if (this[i] === item) return i;
- return -1;
- }
-
- function lastIndexOf(item, i) {
- i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
- var n = this.slice(0, i).reverse().indexOf(item);
- return (n < 0) ? n : i - n - 1;
- }
-
- function concat() {
- var array = slice.call(this, 0), item;
- for (var i = 0, length = arguments.length; i < length; i++) {
- item = arguments[i];
- if (Object.isArray(item) && !('callee' in item)) {
- for (var j = 0, arrayLength = item.length; j < arrayLength; j++)
- array.push(item[j]);
- } else {
- array.push(item);
- }
- }
- return array;
- }
-
- Object.extend(arrayProto, Enumerable);
-
- if (!arrayProto._reverse)
- arrayProto._reverse = arrayProto.reverse;
-
- Object.extend(arrayProto, {
- _each: _each,
- clear: clear,
- first: first,
- last: last,
- compact: compact,
- flatten: flatten,
- without: without,
- reverse: reverse,
- uniq: uniq,
- intersect: intersect,
- clone: clone,
- toArray: clone,
- size: size,
- inspect: inspect
- });
-
- var CONCAT_ARGUMENTS_BUGGY = (function() {
- return [].concat(arguments)[0][0] !== 1;
- })(1,2);
-
- if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat;
-
- if (!arrayProto.indexOf) arrayProto.indexOf = indexOf;
- if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf;
-})();
-function $H(object) {
- return new Hash(object);
-};
-
-var Hash = Class.create(Enumerable, (function() {
- function initialize(object) {
- this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
- }
-
-
- function _each(iterator) {
- for (var key in this._object) {
- var value = this._object[key], pair = [key, value];
- pair.key = key;
- pair.value = value;
- iterator(pair);
- }
- }
-
- function set(key, value) {
- return this._object[key] = value;
- }
-
- function get(key) {
- if (this._object[key] !== Object.prototype[key])
- return this._object[key];
- }
-
- function unset(key) {
- var value = this._object[key];
- delete this._object[key];
- return value;
- }
-
- function toObject() {
- return Object.clone(this._object);
- }
-
-
-
- function keys() {
- return this.pluck('key');
- }
-
- function values() {
- return this.pluck('value');
- }
-
- function index(value) {
- var match = this.detect(function(pair) {
- return pair.value === value;
- });
- return match && match.key;
- }
-
- function merge(object) {
- return this.clone().update(object);
- }
-
- function update(object) {
- return new Hash(object).inject(this, function(result, pair) {
- result.set(pair.key, pair.value);
- return result;
- });
- }
-
- function toQueryPair(key, value) {
- if (Object.isUndefined(value)) return key;
- return key + '=' + encodeURIComponent(String.interpret(value));
- }
-
- function toQueryString() {
- return this.inject([], function(results, pair) {
- var key = encodeURIComponent(pair.key), values = pair.value;
-
- if (values && typeof values == 'object') {
- if (Object.isArray(values)) {
- var queryValues = [];
- for (var i = 0, len = values.length, value; i < len; i++) {
- value = values[i];
- queryValues.push(toQueryPair(key, value));
- }
- return results.concat(queryValues);
- }
- } else results.push(toQueryPair(key, values));
- return results;
- }).join('&');
- }
-
- function inspect() {
- return '#<Hash:{' + this.map(function(pair) {
- return pair.map(Object.inspect).join(': ');
- }).join(', ') + '}>';
- }
-
- function clone() {
- return new Hash(this);
- }
-
- return {
- initialize: initialize,
- _each: _each,
- set: set,
- get: get,
- unset: unset,
- toObject: toObject,
- toTemplateReplacements: toObject,
- keys: keys,
- values: values,
- index: index,
- merge: merge,
- update: update,
- toQueryString: toQueryString,
- inspect: inspect,
- toJSON: toObject,
- clone: clone
- };
-})());
-
-Hash.from = $H;
-Object.extend(Number.prototype, (function() {
- function toColorPart() {
- return this.toPaddedString(2, 16);
- }
-
- function succ() {
- return this + 1;
- }
-
- function times(iterator, context) {
- $R(0, this, true).each(iterator, context);
- return this;
- }
-
- function toPaddedString(length, radix) {
- var string = this.toString(radix || 10);
- return '0'.times(length - string.length) + string;
- }
-
- function abs() {
- return Math.abs(this);
- }
-
- function round() {
- return Math.round(this);
- }
-
- function ceil() {
- return Math.ceil(this);
- }
-
- function floor() {
- return Math.floor(this);
- }
-
- return {
- toColorPart: toColorPart,
- succ: succ,
- times: times,
- toPaddedString: toPaddedString,
- abs: abs,
- round: round,
- ceil: ceil,
- floor: floor
- };
-})());
-
-function $R(start, end, exclusive) {
- return new ObjectRange(start, end, exclusive);
-}
-
-var ObjectRange = Class.create(Enumerable, (function() {
- function initialize(start, end, exclusive) {
- this.start = start;
- this.end = end;
- this.exclusive = exclusive;
- }
-
- function _each(iterator) {
- var value = this.start;
- while (this.include(value)) {
- iterator(value);
- value = value.succ();
- }
- }
-
- function include(value) {
- if (value < this.start)
- return false;
- if (this.exclusive)
- return value < this.end;
- return value <= this.end;
- }
-
- return {
- initialize: initialize,
- _each: _each,
- include: include
- };
-})());
-
-
-
-var Ajax = {
- getTransport: function() {
- return Try.these(
- function() {return new XMLHttpRequest();},
- function() {return new ActiveXObject('Msxml2.XMLHTTP');},
- function() {return new ActiveXObject('Microsoft.XMLHTTP');}
- ) || false;
- },
-
- activeRequestCount: 0
-};
-
-Ajax.Responders = {
- responders: [],
-
- _each: function(iterator) {
- this.responders._each(iterator);
- },
-
- register: function(responder) {
- if (!this.include(responder))
- this.responders.push(responder);
- },
-
- unregister: function(responder) {
- this.responders = this.responders.without(responder);
- },
-
- dispatch: function(callback, request, transport, json) {
- this.each(function(responder) {
- if (Object.isFunction(responder[callback])) {
- try {
- responder[callback].apply(responder, [request, transport, json]);
- } catch (e) { }
- }
- });
- }
-};
-
-Object.extend(Ajax.Responders, Enumerable);
-
-Ajax.Responders.register({
- onCreate: function() { Ajax.activeRequestCount++; },
- onComplete: function() { Ajax.activeRequestCount--; }
-});
-Ajax.Base = Class.create({
- initialize: function(options) {
- this.options = {
- method: 'post',
- asynchronous: true,
- contentType: 'application/x-www-form-urlencoded',
- encoding: 'UTF-8',
- parameters: '',
- evalJSON: true,
- evalJS: true
- };
- Object.extend(this.options, options || { });
-
- this.options.method = this.options.method.toLowerCase();
-
- if (Object.isHash(this.options.parameters))
- this.options.parameters = this.options.parameters.toObject();
- }
-});
-Ajax.Request = Class.create(Ajax.Base, {
- _complete: false,
-
- initialize: function($super, url, options) {
- $super(options);
- this.transport = Ajax.getTransport();
- this.request(url);
- },
-
- request: function(url) {
- this.url = url;
- this.method = this.options.method;
- var params = Object.isString(this.options.parameters) ?
- this.options.parameters :
- Object.toQueryString(this.options.parameters);
-
- if (!['get', 'post'].include(this.method)) {
- params += (params ? '&' : '') + "_method=" + this.method;
- this.method = 'post';
- }
-
- if (params && this.method === 'get') {
- this.url += (this.url.include('?') ? '&' : '?') + params;
- }
-
- this.parameters = params.toQueryParams();
-
- try {
- var response = new Ajax.Response(this);
- if (this.options.onCreate) this.options.onCreate(response);
- Ajax.Responders.dispatch('onCreate', this, response);
-
- this.transport.open(this.method.toUpperCase(), this.url,
- this.options.asynchronous);
-
- if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
-
- this.transport.onreadystatechange = this.onStateChange.bind(this);
- this.setRequestHeaders();
-
- this.body = this.method == 'post' ? (this.options.postBody || params) : null;
- this.transport.send(this.body);
-
- /* Force Firefox to handle ready state 4 for synchronous requests */
- if (!this.options.asynchronous && this.transport.overrideMimeType)
- this.onStateChange();
-
- }
- catch (e) {
- this.dispatchException(e);
- }
- },
-
- onStateChange: function() {
- var readyState = this.transport.readyState;
- if (readyState > 1 && !((readyState == 4) && this._complete))
- this.respondToReadyState(this.transport.readyState);
- },
-
- setRequestHeaders: function() {
- var headers = {
- 'X-Requested-With': 'XMLHttpRequest',
- 'X-Prototype-Version': Prototype.Version,
- 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
- };
-
- if (this.method == 'post') {
- headers['Content-type'] = this.options.contentType +
- (this.options.encoding ? '; charset=' + this.options.encoding : '');
-
- /* Force "Connection: close" for older Mozilla browsers to work
- * around a bug where XMLHttpRequest sends an incorrect
- * Content-length header. See Mozilla Bugzilla #246651.
- */
- if (this.transport.overrideMimeType &&
- (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
- headers['Connection'] = 'close';
- }
-
- if (typeof this.options.requestHeaders == 'object') {
- var extras = this.options.requestHeaders;
-
- if (Object.isFunction(extras.push))
- for (var i = 0, length = extras.length; i < length; i += 2)
- headers[extras[i]] = extras[i+1];
- else
- $H(extras).each(function(pair) { headers[pair.key] = pair.value; });
- }
-
- for (var name in headers)
- this.transport.setRequestHeader(name, headers[name]);
- },
-
- success: function() {
- var status = this.getStatus();
- return !status || (status >= 200 && status < 300) || status == 304;
- },
-
- getStatus: function() {
- try {
- if (this.transport.status === 1223) return 204;
- return this.transport.status || 0;
- } catch (e) { return 0; }
- },
-
- respondToReadyState: function(readyState) {
- var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
-
- if (state == 'Complete') {
- try {
- this._complete = true;
- (this.options['on' + response.status]
- || this.options['on' + (this.success() ? 'Success' : 'Failure')]
- || Prototype.emptyFunction)(response, response.headerJSON);
- } catch (e) {
- this.dispatchException(e);
- }
-
- var contentType = response.getHeader('Content-type');
- if (this.options.evalJS == 'force'
- || (this.options.evalJS && this.isSameOrigin() && contentType
- && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
- this.evalResponse();
- }
-
- try {
- (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
- Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
- } catch (e) {
- this.dispatchException(e);
- }
-
- if (state == 'Complete') {
- this.transport.onreadystatechange = Prototype.emptyFunction;
- }
- },
-
- isSameOrigin: function() {
- var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
- return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
- protocol: location.protocol,
- domain: document.domain,
- port: location.port ? ':' + location.port : ''
- }));
- },
-
- getHeader: function(name) {
- try {
- return this.transport.getResponseHeader(name) || null;
- } catch (e) { return null; }
- },
-
- evalResponse: function() {
- try {
- return eval((this.transport.responseText || '').unfilterJSON());
- } catch (e) {
- this.dispatchException(e);
- }
- },
-
- dispatchException: function(exception) {
- (this.options.onException || Prototype.emptyFunction)(this, exception);
- Ajax.Responders.dispatch('onException', this, exception);
- }
-});
-
-Ajax.Request.Events =
- ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
-
-
-
-
-
-
-
-
-Ajax.Response = Class.create({
- initialize: function(request){
- this.request = request;
- var transport = this.transport = request.transport,
- readyState = this.readyState = transport.readyState;
-
- if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
- this.status = this.getStatus();
- this.statusText = this.getStatusText();
- this.responseText = String.interpret(transport.responseText);
- this.headerJSON = this._getHeaderJSON();
- }
-
- if (readyState == 4) {
- var xml = transport.responseXML;
- this.responseXML = Object.isUndefined(xml) ? null : xml;
- this.responseJSON = this._getResponseJSON();
- }
- },
-
- status: 0,
-
- statusText: '',
-
- getStatus: Ajax.Request.prototype.getStatus,
-
- getStatusText: function() {
- try {
- return this.transport.statusText || '';
- } catch (e) { return ''; }
- },
-
- getHeader: Ajax.Request.prototype.getHeader,
-
- getAllHeaders: function() {
- try {
- return this.getAllResponseHeaders();
- } catch (e) { return null; }
- },
-
- getResponseHeader: function(name) {
- return this.transport.getResponseHeader(name);
- },
-
- getAllResponseHeaders: function() {
- return this.transport.getAllResponseHeaders();
- },
-
- _getHeaderJSON: function() {
- var json = this.getHeader('X-JSON');
- if (!json) return null;
- json = decodeURIComponent(escape(json));
- try {
- return json.evalJSON(this.request.options.sanitizeJSON ||
- !this.request.isSameOrigin());
- } catch (e) {
- this.request.dispatchException(e);
- }
- },
-
- _getResponseJSON: function() {
- var options = this.request.options;
- if (!options.evalJSON || (options.evalJSON != 'force' &&
- !(this.getHeader('Content-type') || '').include('application/json')) ||
- this.responseText.blank())
- return null;
- try {
- return this.responseText.evalJSON(options.sanitizeJSON ||
- !this.request.isSameOrigin());
- } catch (e) {
- this.request.dispatchException(e);
- }
- }
-});
-
-Ajax.Updater = Class.create(Ajax.Request, {
- initialize: function($super, container, url, options) {
- this.container = {
- success: (container.success || container),
- failure: (container.failure || (container.success ? null : container))
- };
-
- options = Object.clone(options);
- var onComplete = options.onComplete;
- options.onComplete = (function(response, json) {
- this.updateContent(response.responseText);
- if (Object.isFunction(onComplete)) onComplete(response, json);
- }).bind(this);
-
- $super(url, options);
- },
-
- updateContent: function(responseText) {
- var receiver = this.container[this.success() ? 'success' : 'failure'],
- options = this.options;
-
- if (!options.evalScripts) responseText = responseText.stripScripts();
-
- if (receiver = $(receiver)) {
- if (options.insertion) {
- if (Object.isString(options.insertion)) {
- var insertion = { }; insertion[options.insertion] = responseText;
- receiver.insert(insertion);
- }
- else options.insertion(receiver, responseText);
- }
- else receiver.update(responseText);
- }
- }
-});
-
-Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
- initialize: function($super, container, url, options) {
- $super(options);
- this.onComplete = this.options.onComplete;
-
- this.frequency = (this.options.frequency || 2);
- this.decay = (this.options.decay || 1);
-
- this.updater = { };
- this.container = container;
- this.url = url;
-
- this.start();
- },
-
- start: function() {
- this.options.onComplete = this.updateComplete.bind(this);
- this.onTimerEvent();
- },
-
- stop: function() {
- this.updater.options.onComplete = undefined;
- clearTimeout(this.timer);
- (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
- },
-
- updateComplete: function(response) {
- if (this.options.decay) {
- this.decay = (response.responseText == this.lastText ?
- this.decay * this.options.decay : 1);
-
- this.lastText = response.responseText;
- }
- this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
- },
-
- onTimerEvent: function() {
- this.updater = new Ajax.Updater(this.container, this.url, this.options);
- }
-});
-
-
-function $(element) {
- if (arguments.length > 1) {
- for (var i = 0, elements = [], length = arguments.length; i < length; i++)
- elements.push($(arguments[i]));
- return elements;
- }
- if (Object.isString(element))
- element = document.getElementById(element);
- return Element.extend(element);
-}
-
-if (Prototype.BrowserFeatures.XPath) {
- document._getElementsByXPath = function(expression, parentElement) {
- var results = [];
- var query = document.evaluate(expression, $(parentElement) || document,
- null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = 0, length = query.snapshotLength; i < length; i++)
- results.push(Element.extend(query.snapshotItem(i)));
- return results;
- };
-}
-
-/*--------------------------------------------------------------------------*/
-
-if (!Node) var Node = { };
-
-if (!Node.ELEMENT_NODE) {
- Object.extend(Node, {
- ELEMENT_NODE: 1,
- ATTRIBUTE_NODE: 2,
- TEXT_NODE: 3,
- CDATA_SECTION_NODE: 4,
- ENTITY_REFERENCE_NODE: 5,
- ENTITY_NODE: 6,
- PROCESSING_INSTRUCTION_NODE: 7,
- COMMENT_NODE: 8,
- DOCUMENT_NODE: 9,
- DOCUMENT_TYPE_NODE: 10,
- DOCUMENT_FRAGMENT_NODE: 11,
- NOTATION_NODE: 12
- });
-}
-
-
-
-(function(global) {
- function shouldUseCache(tagName, attributes) {
- if (tagName === 'select') return false;
- if ('type' in attributes) return false;
- return true;
- }
-
- var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){
- try {
- var el = document.createElement('<input name="x">');
- return el.tagName.toLowerCase() === 'input' && el.name === 'x';
- }
- catch(err) {
- return false;
- }
- })();
-
- var element = global.Element;
-
- global.Element = function(tagName, attributes) {
- attributes = attributes || { };
- tagName = tagName.toLowerCase();
- var cache = Element.cache;
-
- if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) {
- tagName = '<' + tagName + ' name="' + attributes.name + '">';
- delete attributes.name;
- return Element.writeAttribute(document.createElement(tagName), attributes);
- }
-
- if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
-
- var node = shouldUseCache(tagName, attributes) ?
- cache[tagName].cloneNode(false) : document.createElement(tagName);
-
- return Element.writeAttribute(node, attributes);
- };
-
- Object.extend(global.Element, element || { });
- if (element) global.Element.prototype = element.prototype;
-
-})(this);
-
-Element.idCounter = 1;
-Element.cache = { };
-
-Element._purgeElement = function(element) {
- var uid = element._prototypeUID;
- if (uid) {
- Element.stopObserving(element);
- element._prototypeUID = void 0;
- delete Element.Storage[uid];
- }
-};
-
-Element.Methods = {
- visible: function(element) {
- return $(element).style.display != 'none';
- },
-
- toggle: function(element) {
- element = $(element);
- Element[Element.visible(element) ? 'hide' : 'show'](element);
- return element;
- },
-
- hide: function(element) {
- element = $(element);
- element.style.display = 'none';
- return element;
- },
-
- show: function(element) {
- element = $(element);
- element.style.display = '';
- return element;
- },
-
- remove: function(element) {
- element = $(element);
- element.parentNode.removeChild(element);
- return element;
- },
-
- update: (function(){
-
- var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){
- var el = document.createElement("select"),
- isBuggy = true;
- el.innerHTML = "<option value=\"test\">test</option>";
- if (el.options && el.options[0]) {
- isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION";
- }
- el = null;
- return isBuggy;
- })();
-
- var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){
- try {
- var el = document.createElement("table");
- if (el && el.tBodies) {
- el.innerHTML = "<tbody><tr><td>test</td></tr></tbody>";
- var isBuggy = typeof el.tBodies[0] == "undefined";
- el = null;
- return isBuggy;
- }
- } catch (e) {
- return true;
- }
- })();
-
- var LINK_ELEMENT_INNERHTML_BUGGY = (function() {
- try {
- var el = document.createElement('div');
- el.innerHTML = "<link>";
- var isBuggy = (el.childNodes.length === 0);
- el = null;
- return isBuggy;
- } catch(e) {
- return true;
- }
- })();
-
- var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY ||
- TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY;
-
- var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () {
- var s = document.createElement("script"),
- isBuggy = false;
- try {
- s.appendChild(document.createTextNode(""));
- isBuggy = !s.firstChild ||
- s.firstChild && s.firstChild.nodeType !== 3;
- } catch (e) {
- isBuggy = true;
- }
- s = null;
- return isBuggy;
- })();
-
-
- function update(element, content) {
- element = $(element);
- var purgeElement = Element._purgeElement;
-
- var descendants = element.getElementsByTagName('*'),
- i = descendants.length;
- while (i--) purgeElement(descendants[i]);
-
- if (content && content.toElement)
- content = content.toElement();
-
- if (Object.isElement(content))
- return element.update().insert(content);
-
- content = Object.toHTML(content);
-
- var tagName = element.tagName.toUpperCase();
-
- if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) {
- element.text = content;
- return element;
- }
-
- if (ANY_INNERHTML_BUGGY) {
- if (tagName in Element._insertionTranslations.tags) {
- while (element.firstChild) {
- element.removeChild(element.firstChild);
- }
- Element._getContentFromAnonymousElement(tagName, content.stripScripts())
- .each(function(node) {
- element.appendChild(node);
- });
- } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf('<link') > -1) {
- while (element.firstChild) {
- element.removeChild(element.firstChild);
- }
- var nodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts(), true);
- nodes.each(function(node) { element.appendChild(node); });
- }
- else {
- element.innerHTML = content.stripScripts();
- }
- }
- else {
- element.innerHTML = content.stripScripts();
- }
-
- content.evalScripts.bind(content).defer();
- return element;
- }
-
- return update;
- })(),
-
- replace: function(element, content) {
- element = $(element);
- if (content && content.toElement) content = content.toElement();
- else if (!Object.isElement(content)) {
- content = Object.toHTML(content);
- var range = element.ownerDocument.createRange();
- range.selectNode(element);
- content.evalScripts.bind(content).defer();
- content = range.createContextualFragment(content.stripScripts());
- }
- element.parentNode.replaceChild(content, element);
- return element;
- },
-
- insert: function(element, insertions) {
- element = $(element);
-
- if (Object.isString(insertions) || Object.isNumber(insertions) ||
- Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
- insertions = {bottom:insertions};
-
- var content, insert, tagName, childNodes;
-
- for (var position in insertions) {
- content = insertions[position];
- position = position.toLowerCase();
- insert = Element._insertionTranslations[position];
-
- if (content && content.toElement) content = content.toElement();
- if (Object.isElement(content)) {
- insert(element, content);
- continue;
- }
-
- content = Object.toHTML(content);
-
- tagName = ((position == 'before' || position == 'after')
- ? element.parentNode : element).tagName.toUpperCase();
-
- childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
-
- if (position == 'top' || position == 'after') childNodes.reverse();
- childNodes.each(insert.curry(element));
-
- content.evalScripts.bind(content).defer();
- }
-
- return element;
- },
-
- wrap: function(element, wrapper, attributes) {
- element = $(element);
- if (Object.isElement(wrapper))
- $(wrapper).writeAttribute(attributes || { });
- else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
- else wrapper = new Element('div', wrapper);
- if (element.parentNode)
- element.parentNode.replaceChild(wrapper, element);
- wrapper.appendChild(element);
- return wrapper;
- },
-
- inspect: function(element) {
- element = $(element);
- var result = '<' + element.tagName.toLowerCase();
- $H({'id': 'id', 'className': 'class'}).each(function(pair) {
- var property = pair.first(),
- attribute = pair.last(),
- value = (element[property] || '').toString();
- if (value) result += ' ' + attribute + '=' + value.inspect(true);
- });
- return result + '>';
- },
-
- recursivelyCollect: function(element, property, maximumLength) {
- element = $(element);
- maximumLength = maximumLength || -1;
- var elements = [];
-
- while (element = element[property]) {
- if (element.nodeType == 1)
- elements.push(Element.extend(element));
- if (elements.length == maximumLength)
- break;
- }
-
- return elements;
- },
-
- ancestors: function(element) {
- return Element.recursivelyCollect(element, 'parentNode');
- },
-
- descendants: function(element) {
- return Element.select(element, "*");
- },
-
- firstDescendant: function(element) {
- element = $(element).firstChild;
- while (element && element.nodeType != 1) element = element.nextSibling;
- return $(element);
- },
-
- immediateDescendants: function(element) {
- var results = [], child = $(element).firstChild;
- while (child) {
- if (child.nodeType === 1) {
- results.push(Element.extend(child));
- }
- child = child.nextSibling;
- }
- return results;
- },
-
- previousSiblings: function(element, maximumLength) {
- return Element.recursivelyCollect(element, 'previousSibling');
- },
-
- nextSiblings: function(element) {
- return Element.recursivelyCollect(element, 'nextSibling');
- },
-
- siblings: function(element) {
- element = $(element);
- return Element.previousSiblings(element).reverse()
- .concat(Element.nextSiblings(element));
- },
-
- match: function(element, selector) {
- element = $(element);
- if (Object.isString(selector))
- return Prototype.Selector.match(element, selector);
- return selector.match(element);
- },
-
- up: function(element, expression, index) {
- element = $(element);
- if (arguments.length == 1) return $(element.parentNode);
- var ancestors = Element.ancestors(element);
- return Object.isNumber(expression) ? ancestors[expression] :
- Prototype.Selector.find(ancestors, expression, index);
- },
-
- down: function(element, expression, index) {
- element = $(element);
- if (arguments.length == 1) return Element.firstDescendant(element);
- return Object.isNumber(expression) ? Element.descendants(element)[expression] :
- Element.select(element, expression)[index || 0];
- },
-
- previous: function(element, expression, index) {
- element = $(element);
- if (Object.isNumber(expression)) index = expression, expression = false;
- if (!Object.isNumber(index)) index = 0;
-
- if (expression) {
- return Prototype.Selector.find(element.previousSiblings(), expression, index);
- } else {
- return element.recursivelyCollect("previousSibling", index + 1)[index];
- }
- },
-
- next: function(element, expression, index) {
- element = $(element);
- if (Object.isNumber(expression)) index = expression, expression = false;
- if (!Object.isNumber(index)) index = 0;
-
- if (expression) {
- return Prototype.Selector.find(element.nextSiblings(), expression, index);
- } else {
- var maximumLength = Object.isNumber(index) ? index + 1 : 1;
- return element.recursivelyCollect("nextSibling", index + 1)[index];
- }
- },
-
-
- select: function(element) {
- element = $(element);
- var expressions = Array.prototype.slice.call(arguments, 1).join(', ');
- return Prototype.Selector.select(expressions, element);
- },
-
- adjacent: function(element) {
- element = $(element);
- var expressions = Array.prototype.slice.call(arguments, 1).join(', ');
- return Prototype.Selector.select(expressions, element.parentNode).without(element);
- },
-
- identify: function(element) {
- element = $(element);
- var id = Element.readAttribute(element, 'id');
- if (id) return id;
- do { id = 'anonymous_element_' + Element.idCounter++; } while ($(id));
- Element.writeAttribute(element, 'id', id);
- return id;
- },
-
- readAttribute: function(element, name) {
- element = $(element);
- if (Prototype.Browser.IE) {
- var t = Element._attributeTranslations.read;
- if (t.values[name]) return t.values[name](element, name);
- if (t.names[name]) name = t.names[name];
- if (name.include(':')) {
- return (!element.attributes || !element.attributes[name]) ? null :
- element.attributes[name].value;
- }
- }
- return element.getAttribute(name);
- },
-
- writeAttribute: function(element, name, value) {
- element = $(element);
- var attributes = { }, t = Element._attributeTranslations.write;
-
- if (typeof name == 'object') attributes = name;
- else attributes[name] = Object.isUndefined(value) ? true : value;
-
- for (var attr in attributes) {
- name = t.names[attr] || attr;
- value = attributes[attr];
- if (t.values[attr]) name = t.values[attr](element, value);
- if (value === false || value === null)
- element.removeAttribute(name);
- else if (value === true)
- element.setAttribute(name, name);
- else element.setAttribute(name, value);
- }
- return element;
- },
-
- getHeight: function(element) {
- return Element.getDimensions(element).height;
- },
-
- getWidth: function(element) {
- return Element.getDimensions(element).width;
- },
-
- classNames: function(element) {
- return new Element.ClassNames(element);
- },
-
- hasClassName: function(element, className) {
- if (!(element = $(element))) return;
- var elementClassName = element.className;
- return (elementClassName.length > 0 && (elementClassName == className ||
- new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
- },
-
- addClassName: function(element, className) {
- if (!(element = $(element))) return;
- if (!Element.hasClassName(element, className))
- element.className += (element.className ? ' ' : '') + className;
- return element;
- },
-
- removeClassName: function(element, className) {
- if (!(element = $(element))) return;
- element.className = element.className.replace(
- new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
- return element;
- },
-
- toggleClassName: function(element, className) {
- if (!(element = $(element))) return;
- return Element[Element.hasClassName(element, className) ?
- 'removeClassName' : 'addClassName'](element, className);
- },
-
- cleanWhitespace: function(element) {
- element = $(element);
- var node = element.firstChild;
- while (node) {
- var nextNode = node.nextSibling;
- if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
- element.removeChild(node);
- node = nextNode;
- }
- return element;
- },
-
- empty: function(element) {
- return $(element).innerHTML.blank();
- },
-
- descendantOf: function(element, ancestor) {
- element = $(element), ancestor = $(ancestor);
-
- if (element.compareDocumentPosition)
- return (element.compareDocumentPosition(ancestor) & 8) === 8;
-
- if (ancestor.contains)
- return ancestor.contains(element) && ancestor !== element;
-
- while (element = element.parentNode)
- if (element == ancestor) return true;
-
- return false;
- },
-
- scrollTo: function(element) {
- element = $(element);
- var pos = Element.cumulativeOffset(element);
- window.scrollTo(pos[0], pos[1]);
- return element;
- },
-
- getStyle: function(element, style) {
- element = $(element);
- style = style == 'float' ? 'cssFloat' : style.camelize();
- var value = element.style[style];
- if (!value || value == 'auto') {
- var css = document.defaultView.getComputedStyle(element, null);
- value = css ? css[style] : null;
- }
- if (style == 'opacity') return value ? parseFloat(value) : 1.0;
- return value == 'auto' ? null : value;
- },
-
- getOpacity: function(element) {
- return $(element).getStyle('opacity');
- },
-
- setStyle: function(element, styles) {
- element = $(element);
- var elementStyle = element.style, match;
- if (Object.isString(styles)) {
- element.style.cssText += ';' + styles;
- return styles.include('opacity') ?
- element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
- }
- for (var property in styles)
- if (property == 'opacity') element.setOpacity(styles[property]);
- else
- elementStyle[(property == 'float' || property == 'cssFloat') ?
- (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
- property] = styles[property];
-
- return element;
- },
-
- setOpacity: function(element, value) {
- element = $(element);
- element.style.opacity = (value == 1 || value === '') ? '' :
- (value < 0.00001) ? 0 : value;
- return element;
- },
-
- makePositioned: function(element) {
- element = $(element);
- var pos = Element.getStyle(element, 'position');
- if (pos == 'static' || !pos) {
- element._madePositioned = true;
- element.style.position = 'relative';
- if (Prototype.Browser.Opera) {
- element.style.top = 0;
- element.style.left = 0;
- }
- }
- return element;
- },
-
- undoPositioned: function(element) {
- element = $(element);
- if (element._madePositioned) {
- element._madePositioned = undefined;
- element.style.position =
- element.style.top =
- element.style.left =
- element.style.bottom =
- element.style.right = '';
- }
- return element;
- },
-
- makeClipping: function(element) {
- element = $(element);
- if (element._overflow) return element;
- element._overflow = Element.getStyle(element, 'overflow') || 'auto';
- if (element._overflow !== 'hidden')
- element.style.overflow = 'hidden';
- return element;
- },
-
- undoClipping: function(element) {
- element = $(element);
- if (!element._overflow) return element;
- element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
- element._overflow = null;
- return element;
- },
-
- clonePosition: function(element, source) {
- var options = Object.extend({
- setLeft: true,
- setTop: true,
- setWidth: true,
- setHeight: true,
- offsetTop: 0,
- offsetLeft: 0
- }, arguments[2] || { });
-
- source = $(source);
- var p = Element.viewportOffset(source), delta = [0, 0], parent = null;
-
- element = $(element);
-
- if (Element.getStyle(element, 'position') == 'absolute') {
- parent = Element.getOffsetParent(element);
- delta = Element.viewportOffset(parent);
- }
-
- if (parent == document.body) {
- delta[0] -= document.body.offsetLeft;
- delta[1] -= document.body.offsetTop;
- }
-
- if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
- if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
- if (options.setWidth) element.style.width = source.offsetWidth + 'px';
- if (options.setHeight) element.style.height = source.offsetHeight + 'px';
- return element;
- }
-};
-
-Object.extend(Element.Methods, {
- getElementsBySelector: Element.Methods.select,
-
- childElements: Element.Methods.immediateDescendants
-});
-
-Element._attributeTranslations = {
- write: {
- names: {
- className: 'class',
- htmlFor: 'for'
- },
- values: { }
- }
-};
-
-if (Prototype.Browser.Opera) {
- Element.Methods.getStyle = Element.Methods.getStyle.wrap(
- function(proceed, element, style) {
- switch (style) {
- case 'height': case 'width':
- if (!Element.visible(element)) return null;
-
- var dim = parseInt(proceed(element, style), 10);
-
- if (dim !== element['offset' + style.capitalize()])
- return dim + 'px';
-
- var properties;
- if (style === 'height') {
- properties = ['border-top-width', 'padding-top',
- 'padding-bottom', 'border-bottom-width'];
- }
- else {
- properties = ['border-left-width', 'padding-left',
- 'padding-right', 'border-right-width'];
- }
- return properties.inject(dim, function(memo, property) {
- var val = proceed(element, property);
- return val === null ? memo : memo - parseInt(val, 10);
- }) + 'px';
- default: return proceed(element, style);
- }
- }
- );
-
- Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
- function(proceed, element, attribute) {
- if (attribute === 'title') return element.title;
- return proceed(element, attribute);
- }
- );
-}
-
-else if (Prototype.Browser.IE) {
- Element.Methods.getStyle = function(element, style) {
- element = $(element);
- style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
- var value = element.style[style];
- if (!value && element.currentStyle) value = element.currentStyle[style];
-
- if (style == 'opacity') {
- if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
- if (value[1]) return parseFloat(value[1]) / 100;
- return 1.0;
- }
-
- if (value == 'auto') {
- if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
- return element['offset' + style.capitalize()] + 'px';
- return null;
- }
- return value;
- };
-
- Element.Methods.setOpacity = function(element, value) {
- function stripAlpha(filter){
- return filter.replace(/alpha\([^\)]*\)/gi,'');
- }
- element = $(element);
- var currentStyle = element.currentStyle;
- if ((currentStyle && !currentStyle.hasLayout) ||
- (!currentStyle && element.style.zoom == 'normal'))
- element.style.zoom = 1;
-
- var filter = element.getStyle('filter'), style = element.style;
- if (value == 1 || value === '') {
- (filter = stripAlpha(filter)) ?
- style.filter = filter : style.removeAttribute('filter');
- return element;
- } else if (value < 0.00001) value = 0;
- style.filter = stripAlpha(filter) +
- 'alpha(opacity=' + (value * 100) + ')';
- return element;
- };
-
- Element._attributeTranslations = (function(){
-
- var classProp = 'className',
- forProp = 'for',
- el = document.createElement('div');
-
- el.setAttribute(classProp, 'x');
-
- if (el.className !== 'x') {
- el.setAttribute('class', 'x');
- if (el.className === 'x') {
- classProp = 'class';
- }
- }
- el = null;
-
- el = document.createElement('label');
- el.setAttribute(forProp, 'x');
- if (el.htmlFor !== 'x') {
- el.setAttribute('htmlFor', 'x');
- if (el.htmlFor === 'x') {
- forProp = 'htmlFor';
- }
- }
- el = null;
-
- return {
- read: {
- names: {
- 'class': classProp,
- 'className': classProp,
- 'for': forProp,
- 'htmlFor': forProp
- },
- values: {
- _getAttr: function(element, attribute) {
- return element.getAttribute(attribute);
- },
- _getAttr2: function(element, attribute) {
- return element.getAttribute(attribute, 2);
- },
- _getAttrNode: function(element, attribute) {
- var node = element.getAttributeNode(attribute);
- return node ? node.value : "";
- },
- _getEv: (function(){
-
- var el = document.createElement('div'), f;
- el.onclick = Prototype.emptyFunction;
- var value = el.getAttribute('onclick');
-
- if (String(value).indexOf('{') > -1) {
- f = function(element, attribute) {
- attribute = element.getAttribute(attribute);
- if (!attribute) return null;
- attribute = attribute.toString();
- attribute = attribute.split('{')[1];
- attribute = attribute.split('}')[0];
- return attribute.strip();
- };
- }
- else if (value === '') {
- f = function(element, attribute) {
- attribute = element.getAttribute(attribute);
- if (!attribute) return null;
- return attribute.strip();
- };
- }
- el = null;
- return f;
- })(),
- _flag: function(element, attribute) {
- return $(element).hasAttribute(attribute) ? attribute : null;
- },
- style: function(element) {
- return element.style.cssText.toLowerCase();
- },
- title: function(element) {
- return element.title;
- }
- }
- }
- };
- })();
-
- Element._attributeTranslations.write = {
- names: Object.extend({
- cellpadding: 'cellPadding',
- cellspacing: 'cellSpacing'
- }, Element._attributeTranslations.read.names),
- values: {
- checked: function(element, value) {
- element.checked = !!value;
- },
-
- style: function(element, value) {
- element.style.cssText = value ? value : '';
- }
- }
- };
-
- Element._attributeTranslations.has = {};
-
- $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
- 'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
- Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
- Element._attributeTranslations.has[attr.toLowerCase()] = attr;
- });
-
- (function(v) {
- Object.extend(v, {
- href: v._getAttr2,
- src: v._getAttr2,
- type: v._getAttr,
- action: v._getAttrNode,
- disabled: v._flag,
- checked: v._flag,
- readonly: v._flag,
- multiple: v._flag,
- onload: v._getEv,
- onunload: v._getEv,
- onclick: v._getEv,
- ondblclick: v._getEv,
- onmousedown: v._getEv,
- onmouseup: v._getEv,
- onmouseover: v._getEv,
- onmousemove: v._getEv,
- onmouseout: v._getEv,
- onfocus: v._getEv,
- onblur: v._getEv,
- onkeypress: v._getEv,
- onkeydown: v._getEv,
- onkeyup: v._getEv,
- onsubmit: v._getEv,
- onreset: v._getEv,
- onselect: v._getEv,
- onchange: v._getEv
- });
- })(Element._attributeTranslations.read.values);
-
- if (Prototype.BrowserFeatures.ElementExtensions) {
- (function() {
- function _descendants(element) {
- var nodes = element.getElementsByTagName('*'), results = [];
- for (var i = 0, node; node = nodes[i]; i++)
- if (node.tagName !== "!") // Filter out comment nodes.
- results.push(node);
- return results;
- }
-
- Element.Methods.down = function(element, expression, index) {
- element = $(element);
- if (arguments.length == 1) return element.firstDescendant();
- return Object.isNumber(expression) ? _descendants(element)[expression] :
- Element.select(element, expression)[index || 0];
- };
- })();
- }
-
-}
-
-else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
- Element.Methods.setOpacity = function(element, value) {
- element = $(element);
- element.style.opacity = (value == 1) ? 0.999999 :
- (value === '') ? '' : (value < 0.00001) ? 0 : value;
- return element;
- };
-}
-
-else if (Prototype.Browser.WebKit) {
- Element.Methods.setOpacity = function(element, value) {
- element = $(element);
- element.style.opacity = (value == 1 || value === '') ? '' :
- (value < 0.00001) ? 0 : value;
-
- if (value == 1)
- if (element.tagName.toUpperCase() == 'IMG' && element.width) {
- element.width++; element.width--;
- } else try {
- var n = document.createTextNode(' ');
- element.appendChild(n);
- element.removeChild(n);
- } catch (e) { }
-
- return element;
- };
-}
-
-if ('outerHTML' in document.documentElement) {
- Element.Methods.replace = function(element, content) {
- element = $(element);
-
- if (content && content.toElement) content = content.toElement();
- if (Object.isElement(content)) {
- element.parentNode.replaceChild(content, element);
- return element;
- }
-
- content = Object.toHTML(content);
- var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
-
- if (Element._insertionTranslations.tags[tagName]) {
- var nextSibling = element.next(),
- fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
- parent.removeChild(element);
- if (nextSibling)
- fragments.each(function(node) { parent.insertBefore(node, nextSibling); });
- else
- fragments.each(function(node) { parent.appendChild(node); });
- }
- else element.outerHTML = content.stripScripts();
-
- content.evalScripts.bind(content).defer();
- return element;
- };
-}
-
-Element._returnOffset = function(l, t) {
- var result = [l, t];
- result.left = l;
- result.top = t;
- return result;
-};
-
-Element._getContentFromAnonymousElement = function(tagName, html, force) {
- var div = new Element('div'),
- t = Element._insertionTranslations.tags[tagName];
-
- var workaround = false;
- if (t) workaround = true;
- else if (force) {
- workaround = true;
- t = ['', '', 0];
- }
-
- if (workaround) {
- div.innerHTML = '&nbsp;' + t[0] + html + t[1];
- div.removeChild(div.firstChild);
- for (var i = t[2]; i--; ) {
- div = div.firstChild;
- }
- }
- else {
- div.innerHTML = html;
- }
- return $A(div.childNodes);
-};
-
-Element._insertionTranslations = {
- before: function(element, node) {
- element.parentNode.insertBefore(node, element);
- },
- top: function(element, node) {
- element.insertBefore(node, element.firstChild);
- },
- bottom: function(element, node) {
- element.appendChild(node);
- },
- after: function(element, node) {
- element.parentNode.insertBefore(node, element.nextSibling);
- },
- tags: {
- TABLE: ['<table>', '</table>', 1],
- TBODY: ['<table><tbody>', '</tbody></table>', 2],
- TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
- TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
- SELECT: ['<select>', '</select>', 1]
- }
-};
-
-(function() {
- var tags = Element._insertionTranslations.tags;
- Object.extend(tags, {
- THEAD: tags.TBODY,
- TFOOT: tags.TBODY,
- TH: tags.TD
- });
-})();
-
-Element.Methods.Simulated = {
- hasAttribute: function(element, attribute) {
- attribute = Element._attributeTranslations.has[attribute] || attribute;
- var node = $(element).getAttributeNode(attribute);
- return !!(node && node.specified);
- }
-};
-
-Element.Methods.ByTag = { };
-
-Object.extend(Element, Element.Methods);
-
-(function(div) {
-
- if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) {
- window.HTMLElement = { };
- window.HTMLElement.prototype = div['__proto__'];
- Prototype.BrowserFeatures.ElementExtensions = true;
- }
-
- div = null;
-
-})(document.createElement('div'));
-
-Element.extend = (function() {
-
- function checkDeficiency(tagName) {
- if (typeof window.Element != 'undefined') {
- var proto = window.Element.prototype;
- if (proto) {
- var id = '_' + (Math.random()+'').slice(2),
- el = document.createElement(tagName);
- proto[id] = 'x';
- var isBuggy = (el[id] !== 'x');
- delete proto[id];
- el = null;
- return isBuggy;
- }
- }
- return false;
- }
-
- function extendElementWith(element, methods) {
- for (var property in methods) {
- var value = methods[property];
- if (Object.isFunction(value) && !(property in element))
- element[property] = value.methodize();
- }
- }
-
- var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object');
-
- if (Prototype.BrowserFeatures.SpecificElementExtensions) {
- if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) {
- return function(element) {
- if (element && typeof element._extendedByPrototype == 'undefined') {
- var t = element.tagName;
- if (t && (/^(?:object|applet|embed)$/i.test(t))) {
- extendElementWith(element, Element.Methods);
- extendElementWith(element, Element.Methods.Simulated);
- extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]);
- }
- }
- return element;
- };
- }
- return Prototype.K;
- }
-
- var Methods = { }, ByTag = Element.Methods.ByTag;
-
- var extend = Object.extend(function(element) {
- if (!element || typeof element._extendedByPrototype != 'undefined' ||
- element.nodeType != 1 || element == window) return element;
-
- var methods = Object.clone(Methods),
- tagName = element.tagName.toUpperCase();
-
- if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
-
- extendElementWith(element, methods);
-
- element._extendedByPrototype = Prototype.emptyFunction;
- return element;
-
- }, {
- refresh: function() {
- if (!Prototype.BrowserFeatures.ElementExtensions) {
- Object.extend(Methods, Element.Methods);
- Object.extend(Methods, Element.Methods.Simulated);
- }
- }
- });
-
- extend.refresh();
- return extend;
-})();
-
-if (document.documentElement.hasAttribute) {
- Element.hasAttribute = function(element, attribute) {
- return element.hasAttribute(attribute);
- };
-}
-else {
- Element.hasAttribute = Element.Methods.Simulated.hasAttribute;
-}
-
-Element.addMethods = function(methods) {
- var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
-
- if (!methods) {
- Object.extend(Form, Form.Methods);
- Object.extend(Form.Element, Form.Element.Methods);
- Object.extend(Element.Methods.ByTag, {
- "FORM": Object.clone(Form.Methods),
- "INPUT": Object.clone(Form.Element.Methods),
- "SELECT": Object.clone(Form.Element.Methods),
- "TEXTAREA": Object.clone(Form.Element.Methods),
- "BUTTON": Object.clone(Form.Element.Methods)
- });
- }
-
- if (arguments.length == 2) {
- var tagName = methods;
- methods = arguments[1];
- }
-
- if (!tagName) Object.extend(Element.Methods, methods || { });
- else {
- if (Object.isArray(tagName)) tagName.each(extend);
- else extend(tagName);
- }
-
- function extend(tagName) {
- tagName = tagName.toUpperCase();
- if (!Element.Methods.ByTag[tagName])
- Element.Methods.ByTag[tagName] = { };
- Object.extend(Element.Methods.ByTag[tagName], methods);
- }
-
- function copy(methods, destination, onlyIfAbsent) {
- onlyIfAbsent = onlyIfAbsent || false;
- for (var property in methods) {
- var value = methods[property];
- if (!Object.isFunction(value)) continue;
- if (!onlyIfAbsent || !(property in destination))
- destination[property] = value.methodize();
- }
- }
-
- function findDOMClass(tagName) {
- var klass;
- var trans = {
- "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
- "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
- "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
- "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
- "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
- "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
- "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
- "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
- "FrameSet", "IFRAME": "IFrame"
- };
- if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
- if (window[klass]) return window[klass];
- klass = 'HTML' + tagName + 'Element';
- if (window[klass]) return window[klass];
- klass = 'HTML' + tagName.capitalize() + 'Element';
- if (window[klass]) return window[klass];
-
- var element = document.createElement(tagName),
- proto = element['__proto__'] || element.constructor.prototype;
-
- element = null;
- return proto;
- }
-
- var elementPrototype = window.HTMLElement ? HTMLElement.prototype :
- Element.prototype;
-
- if (F.ElementExtensions) {
- copy(Element.Methods, elementPrototype);
- copy(Element.Methods.Simulated, elementPrototype, true);
- }
-
- if (F.SpecificElementExtensions) {
- for (var tag in Element.Methods.ByTag) {
- var klass = findDOMClass(tag);
- if (Object.isUndefined(klass)) continue;
- copy(T[tag], klass.prototype);
- }
- }
-
- Object.extend(Element, Element.Methods);
- delete Element.ByTag;
-
- if (Element.extend.refresh) Element.extend.refresh();
- Element.cache = { };
-};
-
-
-document.viewport = {
-
- getDimensions: function() {
- return { width: this.getWidth(), height: this.getHeight() };
- },
-
- getScrollOffsets: function() {
- return Element._returnOffset(
- window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
- window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
- }
-};
-
-(function(viewport) {
- var B = Prototype.Browser, doc = document, element, property = {};
-
- function getRootElement() {
- if (B.WebKit && !doc.evaluate)
- return document;
-
- if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)
- return document.body;
-
- return document.documentElement;
- }
-
- function define(D) {
- if (!element) element = getRootElement();
-
- property[D] = 'client' + D;
-
- viewport['get' + D] = function() { return element[property[D]]; };
- return viewport['get' + D]();
- }
-
- viewport.getWidth = define.curry('Width');
-
- viewport.getHeight = define.curry('Height');
-})(document.viewport);
-
-
-Element.Storage = {
- UID: 1
-};
-
-Element.addMethods({
- getStorage: function(element) {
- if (!(element = $(element))) return;
-
- var uid;
- if (element === window) {
- uid = 0;
- } else {
- if (typeof element._prototypeUID === "undefined")
- element._prototypeUID = Element.Storage.UID++;
- uid = element._prototypeUID;
- }
-
- if (!Element.Storage[uid])
- Element.Storage[uid] = $H();
-
- return Element.Storage[uid];
- },
-
- store: function(element, key, value) {
- if (!(element = $(element))) return;
-
- if (arguments.length === 2) {
- Element.getStorage(element).update(key);
- } else {
- Element.getStorage(element).set(key, value);
- }
-
- return element;
- },
-
- retrieve: function(element, key, defaultValue) {
- if (!(element = $(element))) return;
- var hash = Element.getStorage(element), value = hash.get(key);
-
- if (Object.isUndefined(value)) {
- hash.set(key, defaultValue);
- value = defaultValue;
- }
-
- return value;
- },
-
- clone: function(element, deep) {
- if (!(element = $(element))) return;
- var clone = element.cloneNode(deep);
- clone._prototypeUID = void 0;
- if (deep) {
- var descendants = Element.select(clone, '*'),
- i = descendants.length;
- while (i--) {
- descendants[i]._prototypeUID = void 0;
- }
- }
- return Element.extend(clone);
- },
-
- purge: function(element) {
- if (!(element = $(element))) return;
- var purgeElement = Element._purgeElement;
-
- purgeElement(element);
-
- var descendants = element.getElementsByTagName('*'),
- i = descendants.length;
-
- while (i--) purgeElement(descendants[i]);
-
- return null;
- }
-});
-
-(function() {
-
- function toDecimal(pctString) {
- var match = pctString.match(/^(\d+)%?$/i);
- if (!match) return null;
- return (Number(match[1]) / 100);
- }
-
- function getPixelValue(value, property, context) {
- var element = null;
- if (Object.isElement(value)) {
- element = value;
- value = element.getStyle(property);
- }
-
- if (value === null) {
- return null;
- }
-
- if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) {
- return window.parseFloat(value);
- }
-
- var isPercentage = value.include('%'), isViewport = (context === document.viewport);
-
- if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) {
- var style = element.style.left, rStyle = element.runtimeStyle.left;
- element.runtimeStyle.left = element.currentStyle.left;
- element.style.left = value || 0;
- value = element.style.pixelLeft;
- element.style.left = style;
- element.runtimeStyle.left = rStyle;
-
- return value;
- }
-
- if (element && isPercentage) {
- context = context || element.parentNode;
- var decimal = toDecimal(value);
- var whole = null;
- var position = element.getStyle('position');
-
- var isHorizontal = property.include('left') || property.include('right') ||
- property.include('width');
-
- var isVertical = property.include('top') || property.include('bottom') ||
- property.include('height');
-
- if (context === document.viewport) {
- if (isHorizontal) {
- whole = document.viewport.getWidth();
- } else if (isVertical) {
- whole = document.viewport.getHeight();
- }
- } else {
- if (isHorizontal) {
- whole = $(context).measure('width');
- } else if (isVertical) {
- whole = $(context).measure('height');
- }
- }
-
- return (whole === null) ? 0 : whole * decimal;
- }
-
- return 0;
- }
-
- function toCSSPixels(number) {
- if (Object.isString(number) && number.endsWith('px')) {
- return number;
- }
- return number + 'px';
- }
-
- function isDisplayed(element) {
- var originalElement = element;
- while (element && element.parentNode) {
- var display = element.getStyle('display');
- if (display === 'none') {
- return false;
- }
- element = $(element.parentNode);
- }
- return true;
- }
-
- var hasLayout = Prototype.K;
- if ('currentStyle' in document.documentElement) {
- hasLayout = function(element) {
- if (!element.currentStyle.hasLayout) {
- element.style.zoom = 1;
- }
- return element;
- };
- }
-
- function cssNameFor(key) {
- if (key.include('border')) key = key + '-width';
- return key.camelize();
- }
-
- Element.Layout = Class.create(Hash, {
- initialize: function($super, element, preCompute) {
- $super();
- this.element = $(element);
-
- Element.Layout.PROPERTIES.each( function(property) {
- this._set(property, null);
- }, this);
-
- if (preCompute) {
- this._preComputing = true;
- this._begin();
- Element.Layout.PROPERTIES.each( this._compute, this );
- this._end();
- this._preComputing = false;
- }
- },
-
- _set: function(property, value) {
- return Hash.prototype.set.call(this, property, value);
- },
-
- set: function(property, value) {
- throw "Properties of Element.Layout are read-only.";
- },
-
- get: function($super, property) {
- var value = $super(property);
- return value === null ? this._compute(property) : value;
- },
-
- _begin: function() {
- if (this._prepared) return;
-
- var element = this.element;
- if (isDisplayed(element)) {
- this._prepared = true;
- return;
- }
-
- var originalStyles = {
- position: element.style.position || '',
- width: element.style.width || '',
- visibility: element.style.visibility || '',
- display: element.style.display || ''
- };
-
- element.store('prototype_original_styles', originalStyles);
-
- var position = element.getStyle('position'),
- width = element.getStyle('width');
-
- if (width === "0px" || width === null) {
- element.style.display = 'block';
- width = element.getStyle('width');
- }
-
- var context = (position === 'fixed') ? document.viewport :
- element.parentNode;
-
- element.setStyle({
- position: 'absolute',
- visibility: 'hidden',
- display: 'block'
- });
-
- var positionedWidth = element.getStyle('width');
-
- var newWidth;
- if (width && (positionedWidth === width)) {
- newWidth = getPixelValue(element, 'width', context);
- } else if (position === 'absolute' || position === 'fixed') {
- newWidth = getPixelValue(element, 'width', context);
- } else {
- var parent = element.parentNode, pLayout = $(parent).getLayout();
-
- newWidth = pLayout.get('width') -
- this.get('margin-left') -
- this.get('border-left') -
- this.get('padding-left') -
- this.get('padding-right') -
- this.get('border-right') -
- this.get('margin-right');
- }
-
- element.setStyle({ width: newWidth + 'px' });
-
- this._prepared = true;
- },
-
- _end: function() {
- var element = this.element;
- var originalStyles = element.retrieve('prototype_original_styles');
- element.store('prototype_original_styles', null);
- element.setStyle(originalStyles);
- this._prepared = false;
- },
-
- _compute: function(property) {
- var COMPUTATIONS = Element.Layout.COMPUTATIONS;
- if (!(property in COMPUTATIONS)) {
- throw "Property not found.";
- }
-
- return this._set(property, COMPUTATIONS[property].call(this, this.element));
- },
-
- toObject: function() {
- var args = $A(arguments);
- var keys = (args.length === 0) ? Element.Layout.PROPERTIES :
- args.join(' ').split(' ');
- var obj = {};
- keys.each( function(key) {
- if (!Element.Layout.PROPERTIES.include(key)) return;
- var value = this.get(key);
- if (value != null) obj[key] = value;
- }, this);
- return obj;
- },
-
- toHash: function() {
- var obj = this.toObject.apply(this, arguments);
- return new Hash(obj);
- },
-
- toCSS: function() {
- var args = $A(arguments);
- var keys = (args.length === 0) ? Element.Layout.PROPERTIES :
- args.join(' ').split(' ');
- var css = {};
-
- keys.each( function(key) {
- if (!Element.Layout.PROPERTIES.include(key)) return;
- if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return;
-
- var value = this.get(key);
- if (value != null) css[cssNameFor(key)] = value + 'px';
- }, this);
- return css;
- },
-
- inspect: function() {
- return "#<Element.Layout>";
- }
- });
-
- Object.extend(Element.Layout, {
- PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'),
-
- COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'),
-
- COMPUTATIONS: {
- 'height': function(element) {
- if (!this._preComputing) this._begin();
-
- var bHeight = this.get('border-box-height');
- if (bHeight <= 0) {
- if (!this._preComputing) this._end();
- return 0;
- }
-
- var bTop = this.get('border-top'),
- bBottom = this.get('border-bottom');
-
- var pTop = this.get('padding-top'),
- pBottom = this.get('padding-bottom');
-
- if (!this._preComputing) this._end();
-
- return bHeight - bTop - bBottom - pTop - pBottom;
- },
-
- 'width': function(element) {
- if (!this._preComputing) this._begin();
-
- var bWidth = this.get('border-box-width');
- if (bWidth <= 0) {
- if (!this._preComputing) this._end();
- return 0;
- }
-
- var bLeft = this.get('border-left'),
- bRight = this.get('border-right');
-
- var pLeft = this.get('padding-left'),
- pRight = this.get('padding-right');
-
- if (!this._preComputing) this._end();
-
- return bWidth - bLeft - bRight - pLeft - pRight;
- },
-
- 'padding-box-height': function(element) {
- var height = this.get('height'),
- pTop = this.get('padding-top'),
- pBottom = this.get('padding-bottom');
-
- return height + pTop + pBottom;
- },
-
- 'padding-box-width': function(element) {
- var width = this.get('width'),
- pLeft = this.get('padding-left'),
- pRight = this.get('padding-right');
-
- return width + pLeft + pRight;
- },
-
- 'border-box-height': function(element) {
- if (!this._preComputing) this._begin();
- var height = element.offsetHeight;
- if (!this._preComputing) this._end();
- return height;
- },
-
- 'border-box-width': function(element) {
- if (!this._preComputing) this._begin();
- var width = element.offsetWidth;
- if (!this._preComputing) this._end();
- return width;
- },
-
- 'margin-box-height': function(element) {
- var bHeight = this.get('border-box-height'),
- mTop = this.get('margin-top'),
- mBottom = this.get('margin-bottom');
-
- if (bHeight <= 0) return 0;
-
- return bHeight + mTop + mBottom;
- },
-
- 'margin-box-width': function(element) {
- var bWidth = this.get('border-box-width'),
- mLeft = this.get('margin-left'),
- mRight = this.get('margin-right');
-
- if (bWidth <= 0) return 0;
-
- return bWidth + mLeft + mRight;
- },
-
- 'top': function(element) {
- var offset = element.positionedOffset();
- return offset.top;
- },
-
- 'bottom': function(element) {
- var offset = element.positionedOffset(),
- parent = element.getOffsetParent(),
- pHeight = parent.measure('height');
-
- var mHeight = this.get('border-box-height');
-
- return pHeight - mHeight - offset.top;
- },
-
- 'left': function(element) {
- var offset = element.positionedOffset();
- return offset.left;
- },
-
- 'right': function(element) {
- var offset = element.positionedOffset(),
- parent = element.getOffsetParent(),
- pWidth = parent.measure('width');
-
- var mWidth = this.get('border-box-width');
-
- return pWidth - mWidth - offset.left;
- },
-
- 'padding-top': function(element) {
- return getPixelValue(element, 'paddingTop');
- },
-
- 'padding-bottom': function(element) {
- return getPixelValue(element, 'paddingBottom');
- },
-
- 'padding-left': function(element) {
- return getPixelValue(element, 'paddingLeft');
- },
-
- 'padding-right': function(element) {
- return getPixelValue(element, 'paddingRight');
- },
-
- 'border-top': function(element) {
- return getPixelValue(element, 'borderTopWidth');
- },
-
- 'border-bottom': function(element) {
- return getPixelValue(element, 'borderBottomWidth');
- },
-
- 'border-left': function(element) {
- return getPixelValue(element, 'borderLeftWidth');
- },
-
- 'border-right': function(element) {
- return getPixelValue(element, 'borderRightWidth');
- },
-
- 'margin-top': function(element) {
- return getPixelValue(element, 'marginTop');
- },
-
- 'margin-bottom': function(element) {
- return getPixelValue(element, 'marginBottom');
- },
-
- 'margin-left': function(element) {
- return getPixelValue(element, 'marginLeft');
- },
-
- 'margin-right': function(element) {
- return getPixelValue(element, 'marginRight');
- }
- }
- });
-
- if ('getBoundingClientRect' in document.documentElement) {
- Object.extend(Element.Layout.COMPUTATIONS, {
- 'right': function(element) {
- var parent = hasLayout(element.getOffsetParent());
- var rect = element.getBoundingClientRect(),
- pRect = parent.getBoundingClientRect();
-
- return (pRect.right - rect.right).round();
- },
-
- 'bottom': function(element) {
- var parent = hasLayout(element.getOffsetParent());
- var rect = element.getBoundingClientRect(),
- pRect = parent.getBoundingClientRect();
-
- return (pRect.bottom - rect.bottom).round();
- }
- });
- }
-
- Element.Offset = Class.create({
- initialize: function(left, top) {
- this.left = left.round();
- this.top = top.round();
-
- this[0] = this.left;
- this[1] = this.top;
- },
-
- relativeTo: function(offset) {
- return new Element.Offset(
- this.left - offset.left,
- this.top - offset.top
- );
- },
-
- inspect: function() {
- return "#<Element.Offset left: #{left} top: #{top}>".interpolate(this);
- },
-
- toString: function() {
- return "[#{left}, #{top}]".interpolate(this);
- },
-
- toArray: function() {
- return [this.left, this.top];
- }
- });
-
- function getLayout(element, preCompute) {
- return new Element.Layout(element, preCompute);
- }
-
- function measure(element, property) {
- return $(element).getLayout().get(property);
- }
-
- function getDimensions(element) {
- element = $(element);
- var display = Element.getStyle(element, 'display');
-
- if (display && display !== 'none') {
- return { width: element.offsetWidth, height: element.offsetHeight };
- }
-
- var style = element.style;
- var originalStyles = {
- visibility: style.visibility,
- position: style.position,
- display: style.display
- };
-
- var newStyles = {
- visibility: 'hidden',
- display: 'block'
- };
-
- if (originalStyles.position !== 'fixed')
- newStyles.position = 'absolute';
-
- Element.setStyle(element, newStyles);
-
- var dimensions = {
- width: element.offsetWidth,
- height: element.offsetHeight
- };
-
- Element.setStyle(element, originalStyles);
-
- return dimensions;
- }
-
- function getOffsetParent(element) {
- element = $(element);
-
- if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
- return $(document.body);
-
- var isInline = (Element.getStyle(element, 'display') === 'inline');
- if (!isInline && element.offsetParent) return $(element.offsetParent);
-
- while ((element = element.parentNode) && element !== document.body) {
- if (Element.getStyle(element, 'position') !== 'static') {
- return isHtml(element) ? $(document.body) : $(element);
- }
- }
-
- return $(document.body);
- }
-
-
- function cumulativeOffset(element) {
- element = $(element);
- var valueT = 0, valueL = 0;
- if (element.parentNode) {
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- element = element.offsetParent;
- } while (element);
- }
- return new Element.Offset(valueL, valueT);
- }
-
- function positionedOffset(element) {
- element = $(element);
-
- var layout = element.getLayout();
-
- var valueT = 0, valueL = 0;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- element = element.offsetParent;
- if (element) {
- if (isBody(element)) break;
- var p = Element.getStyle(element, 'position');
- if (p !== 'static') break;
- }
- } while (element);
-
- valueL -= layout.get('margin-top');
- valueT -= layout.get('margin-left');
-
- return new Element.Offset(valueL, valueT);
- }
-
- function cumulativeScrollOffset(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.scrollTop || 0;
- valueL += element.scrollLeft || 0;
- element = element.parentNode;
- } while (element);
- return new Element.Offset(valueL, valueT);
- }
-
- function viewportOffset(forElement) {
- element = $(element);
- var valueT = 0, valueL = 0, docBody = document.body;
-
- var element = forElement;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- if (element.offsetParent == docBody &&
- Element.getStyle(element, 'position') == 'absolute') break;
- } while (element = element.offsetParent);
-
- element = forElement;
- do {
- if (element != docBody) {
- valueT -= element.scrollTop || 0;
- valueL -= element.scrollLeft || 0;
- }
- } while (element = element.parentNode);
- return new Element.Offset(valueL, valueT);
- }
-
- function absolutize(element) {
- element = $(element);
-
- if (Element.getStyle(element, 'position') === 'absolute') {
- return element;
- }
-
- var offsetParent = getOffsetParent(element);
- var eOffset = element.viewportOffset(),
- pOffset = offsetParent.viewportOffset();
-
- var offset = eOffset.relativeTo(pOffset);
- var layout = element.getLayout();
-
- element.store('prototype_absolutize_original_styles', {
- left: element.getStyle('left'),
- top: element.getStyle('top'),
- width: element.getStyle('width'),
- height: element.getStyle('height')
- });
-
- element.setStyle({
- position: 'absolute',
- top: offset.top + 'px',
- left: offset.left + 'px',
- width: layout.get('width') + 'px',
- height: layout.get('height') + 'px'
- });
-
- return element;
- }
-
- function relativize(element) {
- element = $(element);
- if (Element.getStyle(element, 'position') === 'relative') {
- return element;
- }
-
- var originalStyles =
- element.retrieve('prototype_absolutize_original_styles');
-
- if (originalStyles) element.setStyle(originalStyles);
- return element;
- }
-
- if (Prototype.Browser.IE) {
- getOffsetParent = getOffsetParent.wrap(
- function(proceed, element) {
- element = $(element);
-
- if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
- return $(document.body);
-
- var position = element.getStyle('position');
- if (position !== 'static') return proceed(element);
-
- element.setStyle({ position: 'relative' });
- var value = proceed(element);
- element.setStyle({ position: position });
- return value;
- }
- );
-
- positionedOffset = positionedOffset.wrap(function(proceed, element) {
- element = $(element);
- if (!element.parentNode) return new Element.Offset(0, 0);
- var position = element.getStyle('position');
- if (position !== 'static') return proceed(element);
-
- var offsetParent = element.getOffsetParent();
- if (offsetParent && offsetParent.getStyle('position') === 'fixed')
- hasLayout(offsetParent);
-
- element.setStyle({ position: 'relative' });
- var value = proceed(element);
- element.setStyle({ position: position });
- return value;
- });
- } else if (Prototype.Browser.Webkit) {
- cumulativeOffset = function(element) {
- element = $(element);
- var valueT = 0, valueL = 0;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- if (element.offsetParent == document.body)
- if (Element.getStyle(element, 'position') == 'absolute') break;
-
- element = element.offsetParent;
- } while (element);
-
- return new Element.Offset(valueL, valueT);
- };
- }
-
-
- Element.addMethods({
- getLayout: getLayout,
- measure: measure,
- getDimensions: getDimensions,
- getOffsetParent: getOffsetParent,
- cumulativeOffset: cumulativeOffset,
- positionedOffset: positionedOffset,
- cumulativeScrollOffset: cumulativeScrollOffset,
- viewportOffset: viewportOffset,
- absolutize: absolutize,
- relativize: relativize
- });
-
- function isBody(element) {
- return element.nodeName.toUpperCase() === 'BODY';
- }
-
- function isHtml(element) {
- return element.nodeName.toUpperCase() === 'HTML';
- }
-
- function isDocument(element) {
- return element.nodeType === Node.DOCUMENT_NODE;
- }
-
- function isDetached(element) {
- return element !== document.body &&
- !Element.descendantOf(element, document.body);
- }
-
- if ('getBoundingClientRect' in document.documentElement) {
- Element.addMethods({
- viewportOffset: function(element) {
- element = $(element);
- if (isDetached(element)) return new Element.Offset(0, 0);
-
- var rect = element.getBoundingClientRect(),
- docEl = document.documentElement;
- return new Element.Offset(rect.left - docEl.clientLeft,
- rect.top - docEl.clientTop);
- }
- });
- }
-})();
-window.$$ = function() {
- var expression = $A(arguments).join(', ');
- return Prototype.Selector.select(expression, document);
-};
-
-Prototype.Selector = (function() {
-
- function select() {
- throw new Error('Method "Prototype.Selector.select" must be defined.');
- }
-
- function match() {
- throw new Error('Method "Prototype.Selector.match" must be defined.');
- }
-
- function find(elements, expression, index) {
- index = index || 0;
- var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i;
-
- for (i = 0; i < length; i++) {
- if (match(elements[i], expression) && index == matchIndex++) {
- return Element.extend(elements[i]);
- }
- }
- }
-
- function extendElements(elements) {
- for (var i = 0, length = elements.length; i < length; i++) {
- Element.extend(elements[i]);
- }
- return elements;
- }
-
-
- var K = Prototype.K;
-
- return {
- select: select,
- match: match,
- find: find,
- extendElements: (Element.extend === K) ? K : extendElements,
- extendElement: Element.extend
- };
-})();
-Prototype._original_property = window.Sizzle;
-/*!
- * Sizzle CSS Selector Engine - v1.0
- * Copyright 2009, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- done = 0,
- toString = Object.prototype.toString,
- hasDuplicate = false,
- baseHasDuplicate = true;
-
-[0, 0].sort(function(){
- baseHasDuplicate = false;
- return 0;
-});
-
-var Sizzle = function(selector, context, results, seed) {
- results = results || [];
- var origContext = context = context || document;
-
- if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
- return [];
- }
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- var parts = [], m, set, checkSet, check, mode, extra, prune = true, contextXML = isXML(context),
- soFar = selector;
-
- while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
- soFar = m[3];
-
- parts.push( m[1] );
-
- if ( m[2] ) {
- extra = m[3];
- break;
- }
- }
-
- if ( parts.length > 1 && origPOS.exec( selector ) ) {
- if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
- set = posProcess( parts[0] + parts[1], context );
- } else {
- set = Expr.relative[ parts[0] ] ?
- [ context ] :
- Sizzle( parts.shift(), context );
-
- while ( parts.length ) {
- selector = parts.shift();
-
- if ( Expr.relative[ selector ] )
- selector += parts.shift();
-
- set = posProcess( selector, set );
- }
- }
- } else {
- if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
- Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
- var ret = Sizzle.find( parts.shift(), context, contextXML );
- context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
- }
-
- if ( context ) {
- var ret = seed ?
- { expr: parts.pop(), set: makeArray(seed) } :
- Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
- set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
-
- if ( parts.length > 0 ) {
- checkSet = makeArray(set);
- } else {
- prune = false;
- }
-
- while ( parts.length ) {
- var cur = parts.pop(), pop = cur;
-
- if ( !Expr.relative[ cur ] ) {
- cur = "";
- } else {
- pop = parts.pop();
- }
-
- if ( pop == null ) {
- pop = context;
- }
-
- Expr.relative[ cur ]( checkSet, pop, contextXML );
- }
- } else {
- checkSet = parts = [];
- }
- }
-
- if ( !checkSet ) {
- checkSet = set;
- }
-
- if ( !checkSet ) {
- throw "Syntax error, unrecognized expression: " + (cur || selector);
- }
-
- if ( toString.call(checkSet) === "[object Array]" ) {
- if ( !prune ) {
- results.push.apply( results, checkSet );
- } else if ( context && context.nodeType === 1 ) {
- for ( var i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
- results.push( set[i] );
- }
- }
- } else {
- for ( var i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
- results.push( set[i] );
- }
- }
- }
- } else {
- makeArray( checkSet, results );
- }
-
- if ( extra ) {
- Sizzle( extra, origContext, results, seed );
- Sizzle.uniqueSort( results );
- }
-
- return results;
-};
-
-Sizzle.uniqueSort = function(results){
- if ( sortOrder ) {
- hasDuplicate = baseHasDuplicate;
- results.sort(sortOrder);
-
- if ( hasDuplicate ) {
- for ( var i = 1; i < results.length; i++ ) {
- if ( results[i] === results[i-1] ) {
- results.splice(i--, 1);
- }
- }
- }
- }
-
- return results;
-};
-
-Sizzle.matches = function(expr, set){
- return Sizzle(expr, null, null, set);
-};
-
-Sizzle.find = function(expr, context, isXML){
- var set, match;
-
- if ( !expr ) {
- return [];
- }
-
- for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
- var type = Expr.order[i], match;
-
- if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- var left = match[1];
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace(/\\/g, "");
- set = Expr.find[ type ]( match, context, isXML );
- if ( set != null ) {
- expr = expr.replace( Expr.match[ type ], "" );
- break;
- }
- }
- }
- }
-
- if ( !set ) {
- set = context.getElementsByTagName("*");
- }
-
- return {set: set, expr: expr};
-};
-
-Sizzle.filter = function(expr, set, inplace, not){
- var old = expr, result = [], curLoop = set, match, anyFound,
- isXMLFilter = set && set[0] && isXML(set[0]);
-
- while ( expr && set.length ) {
- for ( var type in Expr.filter ) {
- if ( (match = Expr.match[ type ].exec( expr )) != null ) {
- var filter = Expr.filter[ type ], found, item;
- anyFound = false;
-
- if ( curLoop == result ) {
- result = [];
- }
-
- if ( Expr.preFilter[ type ] ) {
- match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
- if ( !match ) {
- anyFound = found = true;
- } else if ( match === true ) {
- continue;
- }
- }
-
- if ( match ) {
- for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
- if ( item ) {
- found = filter( item, match, i, curLoop );
- var pass = not ^ !!found;
-
- if ( inplace && found != null ) {
- if ( pass ) {
- anyFound = true;
- } else {
- curLoop[i] = false;
- }
- } else if ( pass ) {
- result.push( item );
- anyFound = true;
- }
- }
- }
- }
-
- if ( found !== undefined ) {
- if ( !inplace ) {
- curLoop = result;
- }
-
- expr = expr.replace( Expr.match[ type ], "" );
-
- if ( !anyFound ) {
- return [];
- }
-
- break;
- }
- }
- }
-
- if ( expr == old ) {
- if ( anyFound == null ) {
- throw "Syntax error, unrecognized expression: " + expr;
- } else {
- break;
- }
- }
-
- old = expr;
- }
-
- return curLoop;
-};
-
-var Expr = Sizzle.selectors = {
- order: [ "ID", "NAME", "TAG" ],
- match: {
- ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
- TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
- POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
- PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
- },
- leftMatch: {},
- attrMap: {
- "class": "className",
- "for": "htmlFor"
- },
- attrHandle: {
- href: function(elem){
- return elem.getAttribute("href");
- }
- },
- relative: {
- "+": function(checkSet, part, isXML){
- var isPartStr = typeof part === "string",
- isTag = isPartStr && !/\W/.test(part),
- isPartStrNotTag = isPartStr && !isTag;
-
- if ( isTag && !isXML ) {
- part = part.toUpperCase();
- }
-
- for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
- if ( (elem = checkSet[i]) ) {
- while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
- elem || false :
- elem === part;
- }
- }
-
- if ( isPartStrNotTag ) {
- Sizzle.filter( part, checkSet, true );
- }
- },
- ">": function(checkSet, part, isXML){
- var isPartStr = typeof part === "string";
-
- if ( isPartStr && !/\W/.test(part) ) {
- part = isXML ? part : part.toUpperCase();
-
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- var parent = elem.parentNode;
- checkSet[i] = parent.nodeName === part ? parent : false;
- }
- }
- } else {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- checkSet[i] = isPartStr ?
- elem.parentNode :
- elem.parentNode === part;
- }
- }
-
- if ( isPartStr ) {
- Sizzle.filter( part, checkSet, true );
- }
- }
- },
- "": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck;
-
- if ( !/\W/.test(part) ) {
- var nodeCheck = part = isXML ? part : part.toUpperCase();
- checkFn = dirNodeCheck;
- }
-
- checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
- },
- "~": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck;
-
- if ( typeof part === "string" && !/\W/.test(part) ) {
- var nodeCheck = part = isXML ? part : part.toUpperCase();
- checkFn = dirNodeCheck;
- }
-
- checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
- }
- },
- find: {
- ID: function(match, context, isXML){
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- return m ? [m] : [];
- }
- },
- NAME: function(match, context, isXML){
- if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [], results = context.getElementsByName(match[1]);
-
- for ( var i = 0, l = results.length; i < l; i++ ) {
- if ( results[i].getAttribute("name") === match[1] ) {
- ret.push( results[i] );
- }
- }
-
- return ret.length === 0 ? null : ret;
- }
- },
- TAG: function(match, context){
- return context.getElementsByTagName(match[1]);
- }
- },
- preFilter: {
- CLASS: function(match, curLoop, inplace, result, not, isXML){
- match = " " + match[1].replace(/\\/g, "") + " ";
-
- if ( isXML ) {
- return match;
- }
-
- for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
- if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) {
- if ( !inplace )
- result.push( elem );
- } else if ( inplace ) {
- curLoop[i] = false;
- }
- }
- }
-
- return false;
- },
- ID: function(match){
- return match[1].replace(/\\/g, "");
- },
- TAG: function(match, curLoop){
- for ( var i = 0; curLoop[i] === false; i++ ){}
- return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();
- },
- CHILD: function(match){
- if ( match[1] == "nth" ) {
- var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
- match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
- !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
- match[2] = (test[1] + (test[2] || 1)) - 0;
- match[3] = test[3] - 0;
- }
-
- match[0] = done++;
-
- return match;
- },
- ATTR: function(match, curLoop, inplace, result, not, isXML){
- var name = match[1].replace(/\\/g, "");
-
- if ( !isXML && Expr.attrMap[name] ) {
- match[1] = Expr.attrMap[name];
- }
-
- if ( match[2] === "~=" ) {
- match[4] = " " + match[4] + " ";
- }
-
- return match;
- },
- PSEUDO: function(match, curLoop, inplace, result, not){
- if ( match[1] === "not" ) {
- if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
- match[3] = Sizzle(match[3], null, null, curLoop);
- } else {
- var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
- if ( !inplace ) {
- result.push.apply( result, ret );
- }
- return false;
- }
- } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
- return true;
- }
-
- return match;
- },
- POS: function(match){
- match.unshift( true );
- return match;
- }
- },
- filters: {
- enabled: function(elem){
- return elem.disabled === false && elem.type !== "hidden";
- },
- disabled: function(elem){
- return elem.disabled === true;
- },
- checked: function(elem){
- return elem.checked === true;
- },
- selected: function(elem){
- elem.parentNode.selectedIndex;
- return elem.selected === true;
- },
- parent: function(elem){
- return !!elem.firstChild;
- },
- empty: function(elem){
- return !elem.firstChild;
- },
- has: function(elem, i, match){
- return !!Sizzle( match[3], elem ).length;
- },
- header: function(elem){
- return /h\d/i.test( elem.nodeName );
- },
- text: function(elem){
- return "text" === elem.type;
- },
- radio: function(elem){
- return "radio" === elem.type;
- },
- checkbox: function(elem){
- return "checkbox" === elem.type;
- },
- file: function(elem){
- return "file" === elem.type;
- },
- password: function(elem){
- return "password" === elem.type;
- },
- submit: function(elem){
- return "submit" === elem.type;
- },
- image: function(elem){
- return "image" === elem.type;
- },
- reset: function(elem){
- return "reset" === elem.type;
- },
- button: function(elem){
- return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
- },
- input: function(elem){
- return /input|select|textarea|button/i.test(elem.nodeName);
- }
- },
- setFilters: {
- first: function(elem, i){
- return i === 0;
- },
- last: function(elem, i, match, array){
- return i === array.length - 1;
- },
- even: function(elem, i){
- return i % 2 === 0;
- },
- odd: function(elem, i){
- return i % 2 === 1;
- },
- lt: function(elem, i, match){
- return i < match[3] - 0;
- },
- gt: function(elem, i, match){
- return i > match[3] - 0;
- },
- nth: function(elem, i, match){
- return match[3] - 0 == i;
- },
- eq: function(elem, i, match){
- return match[3] - 0 == i;
- }
- },
- filter: {
- PSEUDO: function(elem, match, i, array){
- var name = match[1], filter = Expr.filters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
- } else if ( name === "contains" ) {
- return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
- } else if ( name === "not" ) {
- var not = match[3];
-
- for ( var i = 0, l = not.length; i < l; i++ ) {
- if ( not[i] === elem ) {
- return false;
- }
- }
-
- return true;
- }
- },
- CHILD: function(elem, match){
- var type = match[1], node = elem;
- switch (type) {
- case 'only':
- case 'first':
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) return false;
- }
- if ( type == 'first') return true;
- node = elem;
- case 'last':
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) return false;
- }
- return true;
- case 'nth':
- var first = match[2], last = match[3];
-
- if ( first == 1 && last == 0 ) {
- return true;
- }
-
- var doneName = match[0],
- parent = elem.parentNode;
-
- if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
- var count = 0;
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
- parent.sizcache = doneName;
- }
-
- var diff = elem.nodeIndex - last;
- if ( first == 0 ) {
- return diff == 0;
- } else {
- return ( diff % first == 0 && diff / first >= 0 );
- }
- }
- },
- ID: function(elem, match){
- return elem.nodeType === 1 && elem.getAttribute("id") === match;
- },
- TAG: function(elem, match){
- return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;
- },
- CLASS: function(elem, match){
- return (" " + (elem.className || elem.getAttribute("class")) + " ")
- .indexOf( match ) > -1;
- },
- ATTR: function(elem, match){
- var name = match[1],
- result = Expr.attrHandle[ name ] ?
- Expr.attrHandle[ name ]( elem ) :
- elem[ name ] != null ?
- elem[ name ] :
- elem.getAttribute( name ),
- value = result + "",
- type = match[2],
- check = match[4];
-
- return result == null ?
- type === "!=" :
- type === "=" ?
- value === check :
- type === "*=" ?
- value.indexOf(check) >= 0 :
- type === "~=" ?
- (" " + value + " ").indexOf(check) >= 0 :
- !check ?
- value && result !== false :
- type === "!=" ?
- value != check :
- type === "^=" ?
- value.indexOf(check) === 0 :
- type === "$=" ?
- value.substr(value.length - check.length) === check :
- type === "|=" ?
- value === check || value.substr(0, check.length + 1) === check + "-" :
- false;
- },
- POS: function(elem, match, i, array){
- var name = match[2], filter = Expr.setFilters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
- }
- }
- }
-};
-
-var origPOS = Expr.match.POS;
-
-for ( var type in Expr.match ) {
- Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
- Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source );
-}
-
-var makeArray = function(array, results) {
- array = Array.prototype.slice.call( array, 0 );
-
- if ( results ) {
- results.push.apply( results, array );
- return results;
- }
-
- return array;
-};
-
-try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 );
-
-} catch(e){
- makeArray = function(array, results) {
- var ret = results || [];
-
- if ( toString.call(array) === "[object Array]" ) {
- Array.prototype.push.apply( ret, array );
- } else {
- if ( typeof array.length === "number" ) {
- for ( var i = 0, l = array.length; i < l; i++ ) {
- ret.push( array[i] );
- }
- } else {
- for ( var i = 0; array[i]; i++ ) {
- ret.push( array[i] );
- }
- }
- }
-
- return ret;
- };
-}
-
-var sortOrder;
-
-if ( document.documentElement.compareDocumentPosition ) {
- sortOrder = function( a, b ) {
- if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-} else if ( "sourceIndex" in document.documentElement ) {
- sortOrder = function( a, b ) {
- if ( !a.sourceIndex || !b.sourceIndex ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var ret = a.sourceIndex - b.sourceIndex;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-} else if ( document.createRange ) {
- sortOrder = function( a, b ) {
- if ( !a.ownerDocument || !b.ownerDocument ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
- aRange.setStart(a, 0);
- aRange.setEnd(a, 0);
- bRange.setStart(b, 0);
- bRange.setEnd(b, 0);
- var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-}
-
-(function(){
- var form = document.createElement("div"),
- id = "script" + (new Date).getTime();
- form.innerHTML = "<a name='" + id + "'/>";
-
- var root = document.documentElement;
- root.insertBefore( form, root.firstChild );
-
- if ( !!document.getElementById( id ) ) {
- Expr.find.ID = function(match, context, isXML){
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
- }
- };
-
- Expr.filter.ID = function(elem, match){
- var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
- return elem.nodeType === 1 && node && node.nodeValue === match;
- };
- }
-
- root.removeChild( form );
- root = form = null; // release memory in IE
-})();
-
-(function(){
-
- var div = document.createElement("div");
- div.appendChild( document.createComment("") );
-
- if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function(match, context){
- var results = context.getElementsByTagName(match[1]);
-
- if ( match[1] === "*" ) {
- var tmp = [];
-
- for ( var i = 0; results[i]; i++ ) {
- if ( results[i].nodeType === 1 ) {
- tmp.push( results[i] );
- }
- }
-
- results = tmp;
- }
-
- return results;
- };
- }
-
- div.innerHTML = "<a href='#'></a>";
- if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
- div.firstChild.getAttribute("href") !== "#" ) {
- Expr.attrHandle.href = function(elem){
- return elem.getAttribute("href", 2);
- };
- }
-
- div = null; // release memory in IE
-})();
-
-if ( document.querySelectorAll ) (function(){
- var oldSizzle = Sizzle, div = document.createElement("div");
- div.innerHTML = "<p class='TEST'></p>";
-
- if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
- return;
- }
-
- Sizzle = function(query, context, extra, seed){
- context = context || document;
-
- if ( !seed && context.nodeType === 9 && !isXML(context) ) {
- try {
- return makeArray( context.querySelectorAll(query), extra );
- } catch(e){}
- }
-
- return oldSizzle(query, context, extra, seed);
- };
-
- for ( var prop in oldSizzle ) {
- Sizzle[ prop ] = oldSizzle[ prop ];
- }
-
- div = null; // release memory in IE
-})();
-
-if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
- var div = document.createElement("div");
- div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
- if ( div.getElementsByClassName("e").length === 0 )
- return;
-
- div.lastChild.className = "e";
-
- if ( div.getElementsByClassName("e").length === 1 )
- return;
-
- Expr.order.splice(1, 0, "CLASS");
- Expr.find.CLASS = function(match, context, isXML) {
- if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
- return context.getElementsByClassName(match[1]);
- }
- };
-
- div = null; // release memory in IE
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- var sibDir = dir == "previousSibling" && !isXML;
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- if ( sibDir && elem.nodeType === 1 ){
- elem.sizcache = doneName;
- elem.sizset = i;
- }
- elem = elem[dir];
- var match = false;
-
- while ( elem ) {
- if ( elem.sizcache === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 && !isXML ){
- elem.sizcache = doneName;
- elem.sizset = i;
- }
-
- if ( elem.nodeName === cur ) {
- match = elem;
- break;
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- var sibDir = dir == "previousSibling" && !isXML;
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- if ( sibDir && elem.nodeType === 1 ) {
- elem.sizcache = doneName;
- elem.sizset = i;
- }
- elem = elem[dir];
- var match = false;
-
- while ( elem ) {
- if ( elem.sizcache === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 ) {
- if ( !isXML ) {
- elem.sizcache = doneName;
- elem.sizset = i;
- }
- if ( typeof cur !== "string" ) {
- if ( elem === cur ) {
- match = true;
- break;
- }
-
- } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
- match = elem;
- break;
- }
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-var contains = document.compareDocumentPosition ? function(a, b){
- return a.compareDocumentPosition(b) & 16;
-} : function(a, b){
- return a !== b && (a.contains ? a.contains(b) : true);
-};
-
-var isXML = function(elem){
- return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
- !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML";
-};
-
-var posProcess = function(selector, context){
- var tmpSet = [], later = "", match,
- root = context.nodeType ? [context] : context;
-
- while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
- later += match[0];
- selector = selector.replace( Expr.match.PSEUDO, "" );
- }
-
- selector = Expr.relative[selector] ? selector + "*" : selector;
-
- for ( var i = 0, l = root.length; i < l; i++ ) {
- Sizzle( selector, root[i], tmpSet );
- }
-
- return Sizzle.filter( later, tmpSet );
-};
-
-
-window.Sizzle = Sizzle;
-
-})();
-
-;(function(engine) {
- var extendElements = Prototype.Selector.extendElements;
-
- function select(selector, scope) {
- return extendElements(engine(selector, scope || document));
- }
-
- function match(element, selector) {
- return engine.matches(selector, [element]).length == 1;
- }
-
- Prototype.Selector.engine = engine;
- Prototype.Selector.select = select;
- Prototype.Selector.match = match;
-})(Sizzle);
-
-window.Sizzle = Prototype._original_property;
-delete Prototype._original_property;
-
-var Form = {
- reset: function(form) {
- form = $(form);
- form.reset();
- return form;
- },
-
- serializeElements: function(elements, options) {
- if (typeof options != 'object') options = { hash: !!options };
- else if (Object.isUndefined(options.hash)) options.hash = true;
- var key, value, submitted = false, submit = options.submit, accumulator, initial;
-
- if (options.hash) {
- initial = {};
- accumulator = function(result, key, value) {
- if (key in result) {
- if (!Object.isArray(result[key])) result[key] = [result[key]];
- result[key].push(value);
- } else result[key] = value;
- return result;
- };
- } else {
- initial = '';
- accumulator = function(result, key, value) {
- return result + (result ? '&' : '') + encodeURIComponent(key) + '=' + encodeURIComponent(value);
- };
- }
-
- return elements.inject(initial, function(result, element) {
- if (!element.disabled && element.name) {
- key = element.name; value = $(element).getValue();
- if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
- submit !== false && (!submit || key == submit) && (submitted = true)))) {
- result = accumulator(result, key, value);
- }
- }
- return result;
- });
- }
-};
-
-Form.Methods = {
- serialize: function(form, options) {
- return Form.serializeElements(Form.getElements(form), options);
- },
-
- getElements: function(form) {
- var elements = $(form).getElementsByTagName('*'),
- element,
- arr = [ ],
- serializers = Form.Element.Serializers;
- for (var i = 0; element = elements[i]; i++) {
- arr.push(element);
- }
- return arr.inject([], function(elements, child) {
- if (serializers[child.tagName.toLowerCase()])
- elements.push(Element.extend(child));
- return elements;
- });
- },
-
- getInputs: function(form, typeName, name) {
- form = $(form);
- var inputs = form.getElementsByTagName('input');
-
- if (!typeName && !name) return $A(inputs).map(Element.extend);
-
- for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
- var input = inputs[i];
- if ((typeName && input.type != typeName) || (name && input.name != name))
- continue;
- matchingInputs.push(Element.extend(input));
- }
-
- return matchingInputs;
- },
-
- disable: function(form) {
- form = $(form);
- Form.getElements(form).invoke('disable');
- return form;
- },
-
- enable: function(form) {
- form = $(form);
- Form.getElements(form).invoke('enable');
- return form;
- },
-
- findFirstElement: function(form) {
- var elements = $(form).getElements().findAll(function(element) {
- return 'hidden' != element.type && !element.disabled;
- });
- var firstByIndex = elements.findAll(function(element) {
- return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
- }).sortBy(function(element) { return element.tabIndex; }).first();
-
- return firstByIndex ? firstByIndex : elements.find(function(element) {
- return /^(?:input|select|textarea)$/i.test(element.tagName);
- });
- },
-
- focusFirstElement: function(form) {
- form = $(form);
- var element = form.findFirstElement();
- if (element) element.activate();
- return form;
- },
-
- request: function(form, options) {
- form = $(form), options = Object.clone(options || { });
-
- var params = options.parameters, action = form.readAttribute('action') || '';
- if (action.blank()) action = window.location.href;
- options.parameters = form.serialize(true);
-
- if (params) {
- if (Object.isString(params)) params = params.toQueryParams();
- Object.extend(options.parameters, params);
- }
-
- if (form.hasAttribute('method') && !options.method)
- options.method = form.method;
-
- return new Ajax.Request(action, options);
- }
-};
-
-/*--------------------------------------------------------------------------*/
-
-
-Form.Element = {
- focus: function(element) {
- $(element).focus();
- return element;
- },
-
- select: function(element) {
- $(element).select();
- return element;
- }
-};
-
-Form.Element.Methods = {
-
- serialize: function(element) {
- element = $(element);
- if (!element.disabled && element.name) {
- var value = element.getValue();
- if (value != undefined) {
- var pair = { };
- pair[element.name] = value;
- return Object.toQueryString(pair);
- }
- }
- return '';
- },
-
- getValue: function(element) {
- element = $(element);
- var method = element.tagName.toLowerCase();
- return Form.Element.Serializers[method](element);
- },
-
- setValue: function(element, value) {
- element = $(element);
- var method = element.tagName.toLowerCase();
- Form.Element.Serializers[method](element, value);
- return element;
- },
-
- clear: function(element) {
- $(element).value = '';
- return element;
- },
-
- present: function(element) {
- return $(element).value != '';
- },
-
- activate: function(element) {
- element = $(element);
- try {
- element.focus();
- if (element.select && (element.tagName.toLowerCase() != 'input' ||
- !(/^(?:button|reset|submit)$/i.test(element.type))))
- element.select();
- } catch (e) { }
- return element;
- },
-
- disable: function(element) {
- element = $(element);
- element.disabled = true;
- return element;
- },
-
- enable: function(element) {
- element = $(element);
- element.disabled = false;
- return element;
- }
-};
-
-/*--------------------------------------------------------------------------*/
-
-var Field = Form.Element;
-
-var $F = Form.Element.Methods.getValue;
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element.Serializers = (function() {
- function input(element, value) {
- switch (element.type.toLowerCase()) {
- case 'checkbox':
- case 'radio':
- return inputSelector(element, value);
- default:
- return valueSelector(element, value);
- }
- }
-
- function inputSelector(element, value) {
- if (Object.isUndefined(value))
- return element.checked ? element.value : null;
- else element.checked = !!value;
- }
-
- function valueSelector(element, value) {
- if (Object.isUndefined(value)) return element.value;
- else element.value = value;
- }
-
- function select(element, value) {
- if (Object.isUndefined(value))
- return (element.type === 'select-one' ? selectOne : selectMany)(element);
-
- var opt, currentValue, single = !Object.isArray(value);
- for (var i = 0, length = element.length; i < length; i++) {
- opt = element.options[i];
- currentValue = this.optionValue(opt);
- if (single) {
- if (currentValue == value) {
- opt.selected = true;
- return;
- }
- }
- else opt.selected = value.include(currentValue);
- }
- }
-
- function selectOne(element) {
- var index = element.selectedIndex;
- return index >= 0 ? optionValue(element.options[index]) : null;
- }
-
- function selectMany(element) {
- var values, length = element.length;
- if (!length) return null;
-
- for (var i = 0, values = []; i < length; i++) {
- var opt = element.options[i];
- if (opt.selected) values.push(optionValue(opt));
- }
- return values;
- }
-
- function optionValue(opt) {
- return Element.hasAttribute(opt, 'value') ? opt.value : opt.text;
- }
-
- return {
- input: input,
- inputSelector: inputSelector,
- textarea: valueSelector,
- select: select,
- selectOne: selectOne,
- selectMany: selectMany,
- optionValue: optionValue,
- button: valueSelector
- };
-})();
-
-/*--------------------------------------------------------------------------*/
-
-
-Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
- initialize: function($super, element, frequency, callback) {
- $super(callback, frequency);
- this.element = $(element);
- this.lastValue = this.getValue();
- },
-
- execute: function() {
- var value = this.getValue();
- if (Object.isString(this.lastValue) && Object.isString(value) ?
- this.lastValue != value : String(this.lastValue) != String(value)) {
- this.callback(this.element, value);
- this.lastValue = value;
- }
- }
-});
-
-Form.Element.Observer = Class.create(Abstract.TimedObserver, {
- getValue: function() {
- return Form.Element.getValue(this.element);
- }
-});
-
-Form.Observer = Class.create(Abstract.TimedObserver, {
- getValue: function() {
- return Form.serialize(this.element);
- }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.EventObserver = Class.create({
- initialize: function(element, callback) {
- this.element = $(element);
- this.callback = callback;
-
- this.lastValue = this.getValue();
- if (this.element.tagName.toLowerCase() == 'form')
- this.registerFormCallbacks();
- else
- this.registerCallback(this.element);
- },
-
- onElementEvent: function() {
- var value = this.getValue();
- if (this.lastValue != value) {
- this.callback(this.element, value);
- this.lastValue = value;
- }
- },
-
- registerFormCallbacks: function() {
- Form.getElements(this.element).each(this.registerCallback, this);
- },
-
- registerCallback: function(element) {
- if (element.type) {
- switch (element.type.toLowerCase()) {
- case 'checkbox':
- case 'radio':
- Event.observe(element, 'click', this.onElementEvent.bind(this));
- break;
- default:
- Event.observe(element, 'change', this.onElementEvent.bind(this));
- break;
- }
- }
- }
-});
-
-Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
- getValue: function() {
- return Form.Element.getValue(this.element);
- }
-});
-
-Form.EventObserver = Class.create(Abstract.EventObserver, {
- getValue: function() {
- return Form.serialize(this.element);
- }
-});
-(function() {
-
- var Event = {
- KEY_BACKSPACE: 8,
- KEY_TAB: 9,
- KEY_RETURN: 13,
- KEY_ESC: 27,
- KEY_LEFT: 37,
- KEY_UP: 38,
- KEY_RIGHT: 39,
- KEY_DOWN: 40,
- KEY_DELETE: 46,
- KEY_HOME: 36,
- KEY_END: 35,
- KEY_PAGEUP: 33,
- KEY_PAGEDOWN: 34,
- KEY_INSERT: 45,
-
- cache: {}
- };
-
- var docEl = document.documentElement;
- var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl
- && 'onmouseleave' in docEl;
-
-
-
- var isIELegacyEvent = function(event) { return false; };
-
- if (window.attachEvent) {
- if (window.addEventListener) {
- isIELegacyEvent = function(event) {
- return !(event instanceof window.Event);
- };
- } else {
- isIELegacyEvent = function(event) { return true; };
- }
- }
-
- var _isButton;
-
- function _isButtonForDOMEvents(event, code) {
- return event.which ? (event.which === code + 1) : (event.button === code);
- }
-
- var legacyButtonMap = { 0: 1, 1: 4, 2: 2 };
- function _isButtonForLegacyEvents(event, code) {
- return event.button === legacyButtonMap[code];
- }
-
- function _isButtonForWebKit(event, code) {
- switch (code) {
- case 0: return event.which == 1 && !event.metaKey;
- case 1: return event.which == 2 || (event.which == 1 && event.metaKey);
- case 2: return event.which == 3;
- default: return false;
- }
- }
-
- if (window.attachEvent) {
- if (!window.addEventListener) {
- _isButton = _isButtonForLegacyEvents;
- } else {
- _isButton = function(event, code) {
- return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) :
- _isButtonForDOMEvents(event, code);
- };
- }
- } else if (Prototype.Browser.WebKit) {
- _isButton = _isButtonForWebKit;
- } else {
- _isButton = _isButtonForDOMEvents;
- }
-
- function isLeftClick(event) { return _isButton(event, 0); }
-
- function isMiddleClick(event) { return _isButton(event, 1); }
-
- function isRightClick(event) { return _isButton(event, 2); }
-
- function element(event) {
- event = Event.extend(event);
-
- var node = event.target, type = event.type,
- currentTarget = event.currentTarget;
-
- if (currentTarget && currentTarget.tagName) {
- if (type === 'load' || type === 'error' ||
- (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
- && currentTarget.type === 'radio'))
- node = currentTarget;
- }
-
- if (node.nodeType == Node.TEXT_NODE)
- node = node.parentNode;
-
- return Element.extend(node);
- }
-
- function findElement(event, expression) {
- var element = Event.element(event);
-
- if (!expression) return element;
- while (element) {
- if (Object.isElement(element) && Prototype.Selector.match(element, expression)) {
- return Element.extend(element);
- }
- element = element.parentNode;
- }
- }
-
- function pointer(event) {
- return { x: pointerX(event), y: pointerY(event) };
- }
-
- function pointerX(event) {
- var docElement = document.documentElement,
- body = document.body || { scrollLeft: 0 };
-
- return event.pageX || (event.clientX +
- (docElement.scrollLeft || body.scrollLeft) -
- (docElement.clientLeft || 0));
- }
-
- function pointerY(event) {
- var docElement = document.documentElement,
- body = document.body || { scrollTop: 0 };
-
- return event.pageY || (event.clientY +
- (docElement.scrollTop || body.scrollTop) -
- (docElement.clientTop || 0));
- }
-
- function stop(event) {
- Event.extend(event);
- event.preventDefault();
- event.stopPropagation();
-
- event.stopped = true;
- }
-
- Event.Methods = {
- isLeftClick: isLeftClick,
- isMiddleClick: isMiddleClick,
- isRightClick: isRightClick,
-
- element: element,
- findElement: findElement,
-
- pointer: pointer,
- pointerX: pointerX,
- pointerY: pointerY,
-
- stop: stop
- };
-
- var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
- m[name] = Event.Methods[name].methodize();
- return m;
- });
-
- if (window.attachEvent) {
- function _relatedTarget(event) {
- var element;
- switch (event.type) {
- case 'mouseover':
- case 'mouseenter':
- element = event.fromElement;
- break;
- case 'mouseout':
- case 'mouseleave':
- element = event.toElement;
- break;
- default:
- return null;
- }
- return Element.extend(element);
- }
-
- var additionalMethods = {
- stopPropagation: function() { this.cancelBubble = true; },
- preventDefault: function() { this.returnValue = false; },
- inspect: function() { return '[object Event]'; }
- };
-
- Event.extend = function(event, element) {
- if (!event) return false;
-
- if (!isIELegacyEvent(event)) return event;
-
- if (event._extendedByPrototype) return event;
- event._extendedByPrototype = Prototype.emptyFunction;
-
- var pointer = Event.pointer(event);
-
- Object.extend(event, {
- target: event.srcElement || element,
- relatedTarget: _relatedTarget(event),
- pageX: pointer.x,
- pageY: pointer.y
- });
-
- Object.extend(event, methods);
- Object.extend(event, additionalMethods);
-
- return event;
- };
- } else {
- Event.extend = Prototype.K;
- }
-
- if (window.addEventListener) {
- Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__;
- Object.extend(Event.prototype, methods);
- }
-
- function _createResponder(element, eventName, handler) {
- var registry = Element.retrieve(element, 'prototype_event_registry');
-
- if (Object.isUndefined(registry)) {
- CACHE.push(element);
- registry = Element.retrieve(element, 'prototype_event_registry', $H());
- }
-
- var respondersForEvent = registry.get(eventName);
- if (Object.isUndefined(respondersForEvent)) {
- respondersForEvent = [];
- registry.set(eventName, respondersForEvent);
- }
-
- if (respondersForEvent.pluck('handler').include(handler)) return false;
-
- var responder;
- if (eventName.include(":")) {
- responder = function(event) {
- if (Object.isUndefined(event.eventName))
- return false;
-
- if (event.eventName !== eventName)
- return false;
-
- Event.extend(event, element);
- handler.call(element, event);
- };
- } else {
- if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED &&
- (eventName === "mouseenter" || eventName === "mouseleave")) {
- if (eventName === "mouseenter" || eventName === "mouseleave") {
- responder = function(event) {
- Event.extend(event, element);
-
- var parent = event.relatedTarget;
- while (parent && parent !== element) {
- try { parent = parent.parentNode; }
- catch(e) { parent = element; }
- }
-
- if (parent === element) return;
-
- handler.call(element, event);
- };
- }
- } else {
- responder = function(event) {
- Event.extend(event, element);
- handler.call(element, event);
- };
- }
- }
-
- responder.handler = handler;
- respondersForEvent.push(responder);
- return responder;
- }
-
- function _destroyCache() {
- for (var i = 0, length = CACHE.length; i < length; i++) {
- Event.stopObserving(CACHE[i]);
- CACHE[i] = null;
- }
- }
-
- var CACHE = [];
-
- if (Prototype.Browser.IE)
- window.attachEvent('onunload', _destroyCache);
-
- if (Prototype.Browser.WebKit)
- window.addEventListener('unload', Prototype.emptyFunction, false);
-
-
- var _getDOMEventName = Prototype.K,
- translations = { mouseenter: "mouseover", mouseleave: "mouseout" };
-
- if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) {
- _getDOMEventName = function(eventName) {
- return (translations[eventName] || eventName);
- };
- }
-
- function observe(element, eventName, handler) {
- element = $(element);
-
- var responder = _createResponder(element, eventName, handler);
-
- if (!responder) return element;
-
- if (eventName.include(':')) {
- if (element.addEventListener)
- element.addEventListener("dataavailable", responder, false);
- else {
- element.attachEvent("ondataavailable", responder);
- element.attachEvent("onlosecapture", responder);
- }
- } else {
- var actualEventName = _getDOMEventName(eventName);
-
- if (element.addEventListener)
- element.addEventListener(actualEventName, responder, false);
- else
- element.attachEvent("on" + actualEventName, responder);
- }
-
- return element;
- }
-
- function stopObserving(element, eventName, handler) {
- element = $(element);
-
- var registry = Element.retrieve(element, 'prototype_event_registry');
- if (!registry) return element;
-
- if (!eventName) {
- registry.each( function(pair) {
- var eventName = pair.key;
- stopObserving(element, eventName);
- });
- return element;
- }
-
- var responders = registry.get(eventName);
- if (!responders) return element;
-
- if (!handler) {
- responders.each(function(r) {
- stopObserving(element, eventName, r.handler);
- });
- return element;
- }
-
- var i = responders.length, responder;
- while (i--) {
- if (responders[i].handler === handler) {
- responder = responders[i];
- break;
- }
- }
- if (!responder) return element;
-
- if (eventName.include(':')) {
- if (element.removeEventListener)
- element.removeEventListener("dataavailable", responder, false);
- else {
- element.detachEvent("ondataavailable", responder);
- element.detachEvent("onlosecapture", responder);
- }
- } else {
- var actualEventName = _getDOMEventName(eventName);
- if (element.removeEventListener)
- element.removeEventListener(actualEventName, responder, false);
- else
- element.detachEvent('on' + actualEventName, responder);
- }
-
- registry.set(eventName, responders.without(responder));
-
- return element;
- }
-
- function fire(element, eventName, memo, bubble) {
- element = $(element);
-
- if (Object.isUndefined(bubble))
- bubble = true;
-
- if (element == document && document.createEvent && !element.dispatchEvent)
- element = document.documentElement;
-
- var event;
- if (document.createEvent) {
- event = document.createEvent('HTMLEvents');
- event.initEvent('dataavailable', bubble, true);
- } else {
- event = document.createEventObject();
- event.eventType = bubble ? 'ondataavailable' : 'onlosecapture';
- }
-
- event.eventName = eventName;
- event.memo = memo || { };
-
- if (document.createEvent)
- element.dispatchEvent(event);
- else
- element.fireEvent(event.eventType, event);
-
- return Event.extend(event);
- }
-
- Event.Handler = Class.create({
- initialize: function(element, eventName, selector, callback) {
- this.element = $(element);
- this.eventName = eventName;
- this.selector = selector;
- this.callback = callback;
- this.handler = this.handleEvent.bind(this);
- },
-
- start: function() {
- Event.observe(this.element, this.eventName, this.handler);
- return this;
- },
-
- stop: function() {
- Event.stopObserving(this.element, this.eventName, this.handler);
- return this;
- },
-
- handleEvent: function(event) {
- var element = Event.findElement(event, this.selector);
- if (element) this.callback.call(this.element, event, element);
- }
- });
-
- function on(element, eventName, selector, callback) {
- element = $(element);
- if (Object.isFunction(selector) && Object.isUndefined(callback)) {
- callback = selector, selector = null;
- }
-
- return new Event.Handler(element, eventName, selector, callback).start();
- }
-
- Object.extend(Event, Event.Methods);
-
- Object.extend(Event, {
- fire: fire,
- observe: observe,
- stopObserving: stopObserving,
- on: on
- });
-
- Element.addMethods({
- fire: fire,
-
- observe: observe,
-
- stopObserving: stopObserving,
-
- on: on
- });
-
- Object.extend(document, {
- fire: fire.methodize(),
-
- observe: observe.methodize(),
-
- stopObserving: stopObserving.methodize(),
-
- on: on.methodize(),
-
- loaded: false
- });
-
- if (window.Event) Object.extend(window.Event, Event);
- else window.Event = Event;
-})();
-
-(function() {
- /* Support for the DOMContentLoaded event is based on work by Dan Webb,
- Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */
-
- var timer;
-
- function fireContentLoadedEvent() {
- if (document.loaded) return;
- if (timer) window.clearTimeout(timer);
- document.loaded = true;
- document.fire('dom:loaded');
- }
-
- function checkReadyState() {
- if (document.readyState === 'complete') {
- document.stopObserving('readystatechange', checkReadyState);
- fireContentLoadedEvent();
- }
- }
-
- function pollDoScroll() {
- try { document.documentElement.doScroll('left'); }
- catch(e) {
- timer = pollDoScroll.defer();
- return;
- }
- fireContentLoadedEvent();
- }
-
- if (document.addEventListener) {
- document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
- } else {
- document.observe('readystatechange', checkReadyState);
- if (window == top)
- timer = pollDoScroll.defer();
- }
-
- Event.observe(window, 'load', fireContentLoadedEvent);
-})();
-
-Element.addMethods();
-
-/*------------------------------- DEPRECATED -------------------------------*/
-
-Hash.toQueryString = Object.toQueryString;
-
-var Toggle = { display: Element.toggle };
-
-Element.Methods.childOf = Element.Methods.descendantOf;
-
-var Insertion = {
- Before: function(element, content) {
- return Element.insert(element, {before:content});
- },
-
- Top: function(element, content) {
- return Element.insert(element, {top:content});
- },
-
- Bottom: function(element, content) {
- return Element.insert(element, {bottom:content});
- },
-
- After: function(element, content) {
- return Element.insert(element, {after:content});
- }
-};
-
-var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
-
-var Position = {
- includeScrollOffsets: false,
-
- prepare: function() {
- this.deltaX = window.pageXOffset
- || document.documentElement.scrollLeft
- || document.body.scrollLeft
- || 0;
- this.deltaY = window.pageYOffset
- || document.documentElement.scrollTop
- || document.body.scrollTop
- || 0;
- },
-
- within: function(element, x, y) {
- if (this.includeScrollOffsets)
- return this.withinIncludingScrolloffsets(element, x, y);
- this.xcomp = x;
- this.ycomp = y;
- this.offset = Element.cumulativeOffset(element);
-
- return (y >= this.offset[1] &&
- y < this.offset[1] + element.offsetHeight &&
- x >= this.offset[0] &&
- x < this.offset[0] + element.offsetWidth);
- },
-
- withinIncludingScrolloffsets: function(element, x, y) {
- var offsetcache = Element.cumulativeScrollOffset(element);
-
- this.xcomp = x + offsetcache[0] - this.deltaX;
- this.ycomp = y + offsetcache[1] - this.deltaY;
- this.offset = Element.cumulativeOffset(element);
-
- return (this.ycomp >= this.offset[1] &&
- this.ycomp < this.offset[1] + element.offsetHeight &&
- this.xcomp >= this.offset[0] &&
- this.xcomp < this.offset[0] + element.offsetWidth);
- },
-
- overlap: function(mode, element) {
- if (!mode) return 0;
- if (mode == 'vertical')
- return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
- element.offsetHeight;
- if (mode == 'horizontal')
- return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
- element.offsetWidth;
- },
-
-
- cumulativeOffset: Element.Methods.cumulativeOffset,
-
- positionedOffset: Element.Methods.positionedOffset,
-
- absolutize: function(element) {
- Position.prepare();
- return Element.absolutize(element);
- },
-
- relativize: function(element) {
- Position.prepare();
- return Element.relativize(element);
- },
-
- realOffset: Element.Methods.cumulativeScrollOffset,
-
- offsetParent: Element.Methods.getOffsetParent,
-
- page: Element.Methods.viewportOffset,
-
- clone: function(source, target, options) {
- options = options || { };
- return Element.clonePosition(target, source, options);
- }
-};
-
-/*--------------------------------------------------------------------------*/
-
-if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
- function iter(name) {
- return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
- }
-
- instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
- function(element, className) {
- className = className.toString().strip();
- var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
- return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
- } : function(element, className) {
- className = className.toString().strip();
- var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
- if (!classNames && !className) return elements;
-
- var nodes = $(element).getElementsByTagName('*');
- className = ' ' + className + ' ';
-
- for (var i = 0, child, cn; child = nodes[i]; i++) {
- if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
- (classNames && classNames.all(function(name) {
- return !name.toString().blank() && cn.include(' ' + name + ' ');
- }))))
- elements.push(Element.extend(child));
- }
- return elements;
- };
-
- return function(className, parentElement) {
- return $(parentElement || document.body).getElementsByClassName(className);
- };
-}(Element.Methods);
-
-/*--------------------------------------------------------------------------*/
-
-Element.ClassNames = Class.create();
-Element.ClassNames.prototype = {
- initialize: function(element) {
- this.element = $(element);
- },
-
- _each: function(iterator) {
- this.element.className.split(/\s+/).select(function(name) {
- return name.length > 0;
- })._each(iterator);
- },
-
- set: function(className) {
- this.element.className = className;
- },
-
- add: function(classNameToAdd) {
- if (this.include(classNameToAdd)) return;
- this.set($A(this).concat(classNameToAdd).join(' '));
- },
-
- remove: function(classNameToRemove) {
- if (!this.include(classNameToRemove)) return;
- this.set($A(this).without(classNameToRemove).join(' '));
- },
-
- toString: function() {
- return $A(this).join(' ');
- }
-};
-
-Object.extend(Element.ClassNames.prototype, Enumerable);
-
-/*--------------------------------------------------------------------------*/
-
-(function() {
- window.Selector = Class.create({
- initialize: function(expression) {
- this.expression = expression.strip();
- },
-
- findElements: function(rootElement) {
- return Prototype.Selector.select(this.expression, rootElement);
- },
-
- match: function(element) {
- return Prototype.Selector.match(element, this.expression);
- },
-
- toString: function() {
- return this.expression;
- },
-
- inspect: function() {
- return "#<Selector: " + this.expression + ">";
- }
- });
-
- Object.extend(Selector, {
- matchElements: function(elements, expression) {
- var match = Prototype.Selector.match,
- results = [];
-
- for (var i = 0, length = elements.length; i < length; i++) {
- var element = elements[i];
- if (match(element, expression)) {
- results.push(Element.extend(element));
- }
- }
- return results;
- },
-
- findElement: function(elements, expression, index) {
- index = index || 0;
- var matchIndex = 0, element;
- for (var i = 0, length = elements.length; i < length; i++) {
- element = elements[i];
- if (Prototype.Selector.match(element, expression) && index === matchIndex++) {
- return Element.extend(element);
- }
- }
- },
-
- findChildElements: function(element, expressions) {
- var selector = expressions.toArray().join(', ');
- return Prototype.Selector.select(selector, element || document);
- }
- });
-})();
diff --git a/usr/local/www/javascript/scriptaculous/scriptaculous.js b/usr/local/www/javascript/scriptaculous/scriptaculous.js
deleted file mode 100644
index 6bf437a..0000000
--- a/usr/local/www/javascript/scriptaculous/scriptaculous.js
+++ /dev/null
@@ -1,68 +0,0 @@
-// script.aculo.us scriptaculous.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
-
-// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-var Scriptaculous = {
- Version: '1.8.3',
- require: function(libraryName) {
- try{
- // inserting via DOM fails in Safari 2.0, so brute force approach
- document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>');
- } catch(e) {
- // for xhtml+xml served content, fall back to DOM methods
- var script = document.createElement('script');
- script.type = 'text/javascript';
- script.src = libraryName;
- document.getElementsByTagName('head')[0].appendChild(script);
- }
- },
- REQUIRED_PROTOTYPE: '1.6.0.3',
- load: function() {
- function convertVersionString(versionString) {
- var v = versionString.replace(/_.*|\./g, '');
- v = parseInt(v + '0'.times(4-v.length));
- return versionString.indexOf('_') > -1 ? v-1 : v;
- }
-
- if((typeof Prototype=='undefined') ||
- (typeof Element == 'undefined') ||
- (typeof Element.Methods=='undefined') ||
- (convertVersionString(Prototype.Version) <
- convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
- throw("script.aculo.us requires the Prototype JavaScript framework >= " +
- Scriptaculous.REQUIRED_PROTOTYPE);
-
- var js = /scriptaculous\.js(\?.*)?$/;
- $$('head script[src]').findAll(function(s) {
- return s.src.match(js);
- }).each(function(s) {
- var path = s.src.replace(js, ''),
- includes = s.src.match(/\?.*load=([a-z,]*)/);
- (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
- function(include) { Scriptaculous.require(path+include+'.js') });
- });
- }
-};
-
-Scriptaculous.load(); \ No newline at end of file
diff --git a/usr/local/www/javascript/scriptaculous/slider.js b/usr/local/www/javascript/scriptaculous/slider.js
deleted file mode 100644
index 5fd0347..0000000
--- a/usr/local/www/javascript/scriptaculous/slider.js
+++ /dev/null
@@ -1,275 +0,0 @@
-// script.aculo.us slider.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
-
-// Copyright (c) 2005-2009 Marty Haught, Thomas Fuchs
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-if (!Control) var Control = { };
-
-// options:
-// axis: 'vertical', or 'horizontal' (default)
-//
-// callbacks:
-// onChange(value)
-// onSlide(value)
-Control.Slider = Class.create({
- initialize: function(handle, track, options) {
- var slider = this;
-
- if (Object.isArray(handle)) {
- this.handles = handle.collect( function(e) { return $(e); });
- } else {
- this.handles = [$(handle)];
- }
-
- this.track = $(track);
- this.options = options || { };
-
- this.axis = this.options.axis || 'horizontal';
- this.increment = this.options.increment || 1;
- this.step = parseInt(this.options.step || '1');
- this.range = this.options.range || $R(0,1);
-
- this.value = 0; // assure backwards compat
- this.values = this.handles.map( function() { return 0; });
- this.spans = this.options.spans ? this.options.spans.map(function(s){ return $(s); }) : false;
- this.options.startSpan = $(this.options.startSpan || null);
- this.options.endSpan = $(this.options.endSpan || null);
-
- this.restricted = this.options.restricted || false;
-
- this.maximum = this.options.maximum || this.range.end;
- this.minimum = this.options.minimum || this.range.start;
-
- // Will be used to align the handle onto the track, if necessary
- this.alignX = parseInt(this.options.alignX || '0');
- this.alignY = parseInt(this.options.alignY || '0');
-
- this.trackLength = this.maximumOffset() - this.minimumOffset();
-
- this.handleLength = this.isVertical() ?
- (this.handles[0].offsetHeight != 0 ?
- this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) :
- (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
- this.handles[0].style.width.replace(/px$/,""));
-
- this.active = false;
- this.dragging = false;
- this.disabled = false;
-
- if (this.options.disabled) this.setDisabled();
-
- // Allowed values array
- this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
- if (this.allowedValues) {
- this.minimum = this.allowedValues.min();
- this.maximum = this.allowedValues.max();
- }
-
- this.eventMouseDown = this.startDrag.bindAsEventListener(this);
- this.eventMouseUp = this.endDrag.bindAsEventListener(this);
- this.eventMouseMove = this.update.bindAsEventListener(this);
-
- // Initialize handles in reverse (make sure first handle is active)
- this.handles.each( function(h,i) {
- i = slider.handles.length-1-i;
- slider.setValue(parseFloat(
- (Object.isArray(slider.options.sliderValue) ?
- slider.options.sliderValue[i] : slider.options.sliderValue) ||
- slider.range.start), i);
- h.makePositioned().observe("mousedown", slider.eventMouseDown);
- });
-
- this.track.observe("mousedown", this.eventMouseDown);
- document.observe("mouseup", this.eventMouseUp);
- document.observe("mousemove", this.eventMouseMove);
-
- this.initialized = true;
- },
- dispose: function() {
- var slider = this;
- Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
- Event.stopObserving(document, "mouseup", this.eventMouseUp);
- Event.stopObserving(document, "mousemove", this.eventMouseMove);
- this.handles.each( function(h) {
- Event.stopObserving(h, "mousedown", slider.eventMouseDown);
- });
- },
- setDisabled: function(){
- this.disabled = true;
- },
- setEnabled: function(){
- this.disabled = false;
- },
- getNearestValue: function(value){
- if (this.allowedValues){
- if (value >= this.allowedValues.max()) return(this.allowedValues.max());
- if (value <= this.allowedValues.min()) return(this.allowedValues.min());
-
- var offset = Math.abs(this.allowedValues[0] - value);
- var newValue = this.allowedValues[0];
- this.allowedValues.each( function(v) {
- var currentOffset = Math.abs(v - value);
- if (currentOffset <= offset){
- newValue = v;
- offset = currentOffset;
- }
- });
- return newValue;
- }
- if (value > this.range.end) return this.range.end;
- if (value < this.range.start) return this.range.start;
- return value;
- },
- setValue: function(sliderValue, handleIdx){
- if (!this.active) {
- this.activeHandleIdx = handleIdx || 0;
- this.activeHandle = this.handles[this.activeHandleIdx];
- this.updateStyles();
- }
- handleIdx = handleIdx || this.activeHandleIdx || 0;
- if (this.initialized && this.restricted) {
- if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
- sliderValue = this.values[handleIdx-1];
- if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
- sliderValue = this.values[handleIdx+1];
- }
- sliderValue = this.getNearestValue(sliderValue);
- this.values[handleIdx] = sliderValue;
- this.value = this.values[0]; // assure backwards compat
-
- this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
- this.translateToPx(sliderValue);
-
- this.drawSpans();
- if (!this.dragging || !this.event) this.updateFinished();
- },
- setValueBy: function(delta, handleIdx) {
- this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
- handleIdx || this.activeHandleIdx || 0);
- },
- translateToPx: function(value) {
- return Math.round(
- ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
- (value - this.range.start)) + "px";
- },
- translateToValue: function(offset) {
- return ((offset/(this.trackLength-this.handleLength) *
- (this.range.end-this.range.start)) + this.range.start);
- },
- getRange: function(range) {
- var v = this.values.sortBy(Prototype.K);
- range = range || 0;
- return $R(v[range],v[range+1]);
- },
- minimumOffset: function(){
- return(this.isVertical() ? this.alignY : this.alignX);
- },
- maximumOffset: function(){
- return(this.isVertical() ?
- (this.track.offsetHeight != 0 ? this.track.offsetHeight :
- this.track.style.height.replace(/px$/,"")) - this.alignY :
- (this.track.offsetWidth != 0 ? this.track.offsetWidth :
- this.track.style.width.replace(/px$/,"")) - this.alignX);
- },
- isVertical: function(){
- return (this.axis == 'vertical');
- },
- drawSpans: function() {
- var slider = this;
- if (this.spans)
- $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)); });
- if (this.options.startSpan)
- this.setSpan(this.options.startSpan,
- $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
- if (this.options.endSpan)
- this.setSpan(this.options.endSpan,
- $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
- },
- setSpan: function(span, range) {
- if (this.isVertical()) {
- span.style.top = this.translateToPx(range.start);
- span.style.height = this.translateToPx(range.end - range.start + this.range.start);
- } else {
- span.style.left = this.translateToPx(range.start);
- span.style.width = this.translateToPx(range.end - range.start + this.range.start);
- }
- },
- updateStyles: function() {
- this.handles.each( function(h){ Element.removeClassName(h, 'selected'); });
- Element.addClassName(this.activeHandle, 'selected');
- },
- startDrag: function(event) {
- if (Event.isLeftClick(event)) {
- if (!this.disabled){
- this.active = true;
-
- var handle = Event.element(event);
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- var track = handle;
- if (track==this.track) {
- var offsets = this.track.cumulativeOffset();
- this.event = event;
- this.setValue(this.translateToValue(
- (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
- ));
- var offsets = this.activeHandle.cumulativeOffset();
- this.offsetX = (pointer[0] - offsets[0]);
- this.offsetY = (pointer[1] - offsets[1]);
- } else {
- // find the handle (prevents issues with Safari)
- while((this.handles.indexOf(handle) == -1) && handle.parentNode)
- handle = handle.parentNode;
-
- if (this.handles.indexOf(handle)!=-1) {
- this.activeHandle = handle;
- this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
- this.updateStyles();
-
- var offsets = this.activeHandle.cumulativeOffset();
- this.offsetX = (pointer[0] - offsets[0]);
- this.offsetY = (pointer[1] - offsets[1]);
- }
- }
- }
- Event.stop(event);
- }
- },
- update: function(event) {
- if (this.active) {
- if (!this.dragging) this.dragging = true;
- this.draw(event);
- if (Prototype.Browser.WebKit) window.scrollBy(0,0);
- Event.stop(event);
- }
- },
- draw: function(event) {
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- var offsets = this.track.cumulativeOffset();
- pointer[0] -= this.offsetX + offsets[0];
- pointer[1] -= this.offsetY + offsets[1];
- this.event = event;
- this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
- if (this.initialized && this.options.onSlide)
- this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
- },
- endDrag: function(event) {
- if (this.active && this.dragging) {
- this.finishDrag(event, true);
- Event.stop(event);
- }
- this.active = false;
- this.dragging = false;
- },
- finishDrag: function(event, success) {
- this.active = false;
- this.dragging = false;
- this.updateFinished();
- },
- updateFinished: function() {
- if (this.initialized && this.options.onChange)
- this.options.onChange(this.values.length>1 ? this.values : this.value, this);
- this.event = null;
- }
-}); \ No newline at end of file
diff --git a/usr/local/www/javascript/scriptaculous/sound.js b/usr/local/www/javascript/scriptaculous/sound.js
deleted file mode 100644
index a3bf4cd..0000000
--- a/usr/local/www/javascript/scriptaculous/sound.js
+++ /dev/null
@@ -1,59 +0,0 @@
-// script.aculo.us sound.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
-
-// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// Based on code created by Jules Gravinese (http://www.webveteran.com/)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-Sound = {
- tracks: {},
- _enabled: true,
- template:
- new Template('<embed style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>'),
- enable: function(){
- Sound._enabled = true;
- },
- disable: function(){
- Sound._enabled = false;
- },
- play: function(url){
- if(!Sound._enabled) return;
- var options = Object.extend({
- track: 'global', url: url, replace: false
- }, arguments[1] || {});
-
- if(options.replace && this.tracks[options.track]) {
- $R(0, this.tracks[options.track].id).each(function(id){
- var sound = $('sound_'+options.track+'_'+id);
- sound.Stop && sound.Stop();
- sound.remove();
- });
- this.tracks[options.track] = null;
- }
-
- if(!this.tracks[options.track])
- this.tracks[options.track] = { id: 0 };
- else
- this.tracks[options.track].id++;
-
- options.id = this.tracks[options.track].id;
- $$('body')[0].insert(
- Prototype.Browser.IE ? new Element('bgsound',{
- id: 'sound_'+options.track+'_'+options.id,
- src: options.url, loop: 1, autostart: true
- }) : Sound.template.evaluate(options));
- }
-};
-
-if(Prototype.Browser.Gecko && navigator.userAgent.indexOf("Win") > 0){
- if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('QuickTime') != -1; }))
- Sound.template = new Template('<object id="sound_#{track}_#{id}" width="0" height="0" type="audio/mpeg" data="#{url}"/>');
- else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('Windows Media') != -1; }))
- Sound.template = new Template('<object id="sound_#{track}_#{id}" type="application/x-mplayer2" data="#{url}"></object>');
- else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('RealPlayer') != -1; }))
- Sound.template = new Template('<embed type="audio/x-pn-realaudio-plugin" style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>');
- else
- Sound.play = function(){};
-} \ No newline at end of file
diff --git a/usr/local/www/javascript/scriptaculous/unittest.js b/usr/local/www/javascript/scriptaculous/unittest.js
deleted file mode 100644
index e18b08e..0000000
--- a/usr/local/www/javascript/scriptaculous/unittest.js
+++ /dev/null
@@ -1,568 +0,0 @@
-// script.aculo.us unittest.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
-
-// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// (c) 2005-2009 Jon Tirsen (http://www.tirsen.com)
-// (c) 2005-2009 Michael Schuerig (http://www.schuerig.de/michael/)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-// experimental, Firefox-only
-Event.simulateMouse = function(element, eventName) {
- var options = Object.extend({
- pointerX: 0,
- pointerY: 0,
- buttons: 0,
- ctrlKey: false,
- altKey: false,
- shiftKey: false,
- metaKey: false
- }, arguments[2] || {});
- var oEvent = document.createEvent("MouseEvents");
- oEvent.initMouseEvent(eventName, true, true, document.defaultView,
- options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY,
- options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 0, $(element));
-
- if(this.mark) Element.remove(this.mark);
- this.mark = document.createElement('div');
- this.mark.appendChild(document.createTextNode(" "));
- document.body.appendChild(this.mark);
- this.mark.style.position = 'absolute';
- this.mark.style.top = options.pointerY + "px";
- this.mark.style.left = options.pointerX + "px";
- this.mark.style.width = "5px";
- this.mark.style.height = "5px;";
- this.mark.style.borderTop = "1px solid red;";
- this.mark.style.borderLeft = "1px solid red;";
-
- if(this.step)
- alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options));
-
- $(element).dispatchEvent(oEvent);
-};
-
-// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2.
-// You need to downgrade to 1.0.4 for now to get this working
-// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much
-Event.simulateKey = function(element, eventName) {
- var options = Object.extend({
- ctrlKey: false,
- altKey: false,
- shiftKey: false,
- metaKey: false,
- keyCode: 0,
- charCode: 0
- }, arguments[2] || {});
-
- var oEvent = document.createEvent("KeyEvents");
- oEvent.initKeyEvent(eventName, true, true, window,
- options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
- options.keyCode, options.charCode );
- $(element).dispatchEvent(oEvent);
-};
-
-Event.simulateKeys = function(element, command) {
- for(var i=0; i<command.length; i++) {
- Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});
- }
-};
-
-var Test = {};
-Test.Unit = {};
-
-// security exception workaround
-Test.Unit.inspect = Object.inspect;
-
-Test.Unit.Logger = Class.create();
-Test.Unit.Logger.prototype = {
- initialize: function(log) {
- this.log = $(log);
- if (this.log) {
- this._createLogTable();
- }
- },
- start: function(testName) {
- if (!this.log) return;
- this.testName = testName;
- this.lastLogLine = document.createElement('tr');
- this.statusCell = document.createElement('td');
- this.nameCell = document.createElement('td');
- this.nameCell.className = "nameCell";
- this.nameCell.appendChild(document.createTextNode(testName));
- this.messageCell = document.createElement('td');
- this.lastLogLine.appendChild(this.statusCell);
- this.lastLogLine.appendChild(this.nameCell);
- this.lastLogLine.appendChild(this.messageCell);
- this.loglines.appendChild(this.lastLogLine);
- },
- finish: function(status, summary) {
- if (!this.log) return;
- this.lastLogLine.className = status;
- this.statusCell.innerHTML = status;
- this.messageCell.innerHTML = this._toHTML(summary);
- this.addLinksToResults();
- },
- message: function(message) {
- if (!this.log) return;
- this.messageCell.innerHTML = this._toHTML(message);
- },
- summary: function(summary) {
- if (!this.log) return;
- this.logsummary.innerHTML = this._toHTML(summary);
- },
- _createLogTable: function() {
- this.log.innerHTML =
- '<div id="logsummary"></div>' +
- '<table id="logtable">' +
- '<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +
- '<tbody id="loglines"></tbody>' +
- '</table>';
- this.logsummary = $('logsummary');
- this.loglines = $('loglines');
- },
- _toHTML: function(txt) {
- return txt.escapeHTML().replace(/\n/g,"<br />");
- },
- addLinksToResults: function(){
- $$("tr.failed .nameCell").each( function(td){ // todo: limit to children of this.log
- td.title = "Run only this test";
- Event.observe(td, 'click', function(){ window.location.search = "?tests=" + td.innerHTML;});
- });
- $$("tr.passed .nameCell").each( function(td){ // todo: limit to children of this.log
- td.title = "Run all tests";
- Event.observe(td, 'click', function(){ window.location.search = "";});
- });
- }
-};
-
-Test.Unit.Runner = Class.create();
-Test.Unit.Runner.prototype = {
- initialize: function(testcases) {
- this.options = Object.extend({
- testLog: 'testlog'
- }, arguments[1] || {});
- this.options.resultsURL = this.parseResultsURLQueryParameter();
- this.options.tests = this.parseTestsQueryParameter();
- if (this.options.testLog) {
- this.options.testLog = $(this.options.testLog) || null;
- }
- if(this.options.tests) {
- this.tests = [];
- for(var i = 0; i < this.options.tests.length; i++) {
- if(/^test/.test(this.options.tests[i])) {
- this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
- }
- }
- } else {
- if (this.options.test) {
- this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
- } else {
- this.tests = [];
- for(var testcase in testcases) {
- if(/^test/.test(testcase)) {
- this.tests.push(
- new Test.Unit.Testcase(
- this.options.context ? ' -> ' + this.options.titles[testcase] : testcase,
- testcases[testcase], testcases["setup"], testcases["teardown"]
- ));
- }
- }
- }
- }
- this.currentTest = 0;
- this.logger = new Test.Unit.Logger(this.options.testLog);
- setTimeout(this.runTests.bind(this), 1000);
- },
- parseResultsURLQueryParameter: function() {
- return window.location.search.parseQuery()["resultsURL"];
- },
- parseTestsQueryParameter: function(){
- if (window.location.search.parseQuery()["tests"]){
- return window.location.search.parseQuery()["tests"].split(',');
- };
- },
- // Returns:
- // "ERROR" if there was an error,
- // "FAILURE" if there was a failure, or
- // "SUCCESS" if there was neither
- getResult: function() {
- var hasFailure = false;
- for(var i=0;i<this.tests.length;i++) {
- if (this.tests[i].errors > 0) {
- return "ERROR";
- }
- if (this.tests[i].failures > 0) {
- hasFailure = true;
- }
- }
- if (hasFailure) {
- return "FAILURE";
- } else {
- return "SUCCESS";
- }
- },
- postResults: function() {
- if (this.options.resultsURL) {
- new Ajax.Request(this.options.resultsURL,
- { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false });
- }
- },
- runTests: function() {
- var test = this.tests[this.currentTest];
- if (!test) {
- // finished!
- this.postResults();
- this.logger.summary(this.summary());
- return;
- }
- if(!test.isWaiting) {
- this.logger.start(test.name);
- }
- test.run();
- if(test.isWaiting) {
- this.logger.message("Waiting for " + test.timeToWait + "ms");
- setTimeout(this.runTests.bind(this), test.timeToWait || 1000);
- } else {
- this.logger.finish(test.status(), test.summary());
- this.currentTest++;
- // tail recursive, hopefully the browser will skip the stackframe
- this.runTests();
- }
- },
- summary: function() {
- var assertions = 0;
- var failures = 0;
- var errors = 0;
- var messages = [];
- for(var i=0;i<this.tests.length;i++) {
- assertions += this.tests[i].assertions;
- failures += this.tests[i].failures;
- errors += this.tests[i].errors;
- }
- return (
- (this.options.context ? this.options.context + ': ': '') +
- this.tests.length + " tests, " +
- assertions + " assertions, " +
- failures + " failures, " +
- errors + " errors");
- }
-};
-
-Test.Unit.Assertions = Class.create();
-Test.Unit.Assertions.prototype = {
- initialize: function() {
- this.assertions = 0;
- this.failures = 0;
- this.errors = 0;
- this.messages = [];
- },
- summary: function() {
- return (
- this.assertions + " assertions, " +
- this.failures + " failures, " +
- this.errors + " errors" + "\n" +
- this.messages.join("\n"));
- },
- pass: function() {
- this.assertions++;
- },
- fail: function(message) {
- this.failures++;
- this.messages.push("Failure: " + message);
- },
- info: function(message) {
- this.messages.push("Info: " + message);
- },
- error: function(error) {
- this.errors++;
- this.messages.push(error.name + ": "+ error.message + "(" + Test.Unit.inspect(error) +")");
- },
- status: function() {
- if (this.failures > 0) return 'failed';
- if (this.errors > 0) return 'error';
- return 'passed';
- },
- assert: function(expression) {
- var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"';
- try { expression ? this.pass() :
- this.fail(message); }
- catch(e) { this.error(e); }
- },
- assertEqual: function(expected, actual) {
- var message = arguments[2] || "assertEqual";
- try { (expected == actual) ? this.pass() :
- this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
- '", actual "' + Test.Unit.inspect(actual) + '"'); }
- catch(e) { this.error(e); }
- },
- assertInspect: function(expected, actual) {
- var message = arguments[2] || "assertInspect";
- try { (expected == actual.inspect()) ? this.pass() :
- this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
- '", actual "' + Test.Unit.inspect(actual) + '"'); }
- catch(e) { this.error(e); }
- },
- assertEnumEqual: function(expected, actual) {
- var message = arguments[2] || "assertEnumEqual";
- try { $A(expected).length == $A(actual).length &&
- expected.zip(actual).all(function(pair) { return pair[0] == pair[1]; }) ?
- this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) +
- ', actual ' + Test.Unit.inspect(actual)); }
- catch(e) { this.error(e); }
- },
- assertNotEqual: function(expected, actual) {
- var message = arguments[2] || "assertNotEqual";
- try { (expected != actual) ? this.pass() :
- this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }
- catch(e) { this.error(e); }
- },
- assertIdentical: function(expected, actual) {
- var message = arguments[2] || "assertIdentical";
- try { (expected === actual) ? this.pass() :
- this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
- '", actual "' + Test.Unit.inspect(actual) + '"'); }
- catch(e) { this.error(e); }
- },
- assertNotIdentical: function(expected, actual) {
- var message = arguments[2] || "assertNotIdentical";
- try { !(expected === actual) ? this.pass() :
- this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
- '", actual "' + Test.Unit.inspect(actual) + '"'); }
- catch(e) { this.error(e); }
- },
- assertNull: function(obj) {
- var message = arguments[1] || 'assertNull';
- try { (obj==null) ? this.pass() :
- this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }
- catch(e) { this.error(e); }
- },
- assertMatch: function(expected, actual) {
- var message = arguments[2] || 'assertMatch';
- var regex = new RegExp(expected);
- try { (regex.exec(actual)) ? this.pass() :
- this.fail(message + ' : regex: "' + Test.Unit.inspect(expected) + ' did not match: ' + Test.Unit.inspect(actual) + '"'); }
- catch(e) { this.error(e); }
- },
- assertHidden: function(element) {
- var message = arguments[1] || 'assertHidden';
- this.assertEqual("none", element.style.display, message);
- },
- assertNotNull: function(object) {
- var message = arguments[1] || 'assertNotNull';
- this.assert(object != null, message);
- },
- assertType: function(expected, actual) {
- var message = arguments[2] || 'assertType';
- try {
- (actual.constructor == expected) ? this.pass() :
- this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
- '", actual "' + (actual.constructor) + '"'); }
- catch(e) { this.error(e); }
- },
- assertNotOfType: function(expected, actual) {
- var message = arguments[2] || 'assertNotOfType';
- try {
- (actual.constructor != expected) ? this.pass() :
- this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
- '", actual "' + (actual.constructor) + '"'); }
- catch(e) { this.error(e); }
- },
- assertInstanceOf: function(expected, actual) {
- var message = arguments[2] || 'assertInstanceOf';
- try {
- (actual instanceof expected) ? this.pass() :
- this.fail(message + ": object was not an instance of the expected type"); }
- catch(e) { this.error(e); }
- },
- assertNotInstanceOf: function(expected, actual) {
- var message = arguments[2] || 'assertNotInstanceOf';
- try {
- !(actual instanceof expected) ? this.pass() :
- this.fail(message + ": object was an instance of the not expected type"); }
- catch(e) { this.error(e); }
- },
- assertRespondsTo: function(method, obj) {
- var message = arguments[2] || 'assertRespondsTo';
- try {
- (obj[method] && typeof obj[method] == 'function') ? this.pass() :
- this.fail(message + ": object doesn't respond to [" + method + "]"); }
- catch(e) { this.error(e); }
- },
- assertReturnsTrue: function(method, obj) {
- var message = arguments[2] || 'assertReturnsTrue';
- try {
- var m = obj[method];
- if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
- m() ? this.pass() :
- this.fail(message + ": method returned false"); }
- catch(e) { this.error(e); }
- },
- assertReturnsFalse: function(method, obj) {
- var message = arguments[2] || 'assertReturnsFalse';
- try {
- var m = obj[method];
- if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
- !m() ? this.pass() :
- this.fail(message + ": method returned true"); }
- catch(e) { this.error(e); }
- },
- assertRaise: function(exceptionName, method) {
- var message = arguments[2] || 'assertRaise';
- try {
- method();
- this.fail(message + ": exception expected but none was raised"); }
- catch(e) {
- ((exceptionName == null) || (e.name==exceptionName)) ? this.pass() : this.error(e);
- }
- },
- assertElementsMatch: function() {
- var expressions = $A(arguments), elements = $A(expressions.shift());
- if (elements.length != expressions.length) {
- this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions');
- return false;
- }
- elements.zip(expressions).all(function(pair, index) {
- var element = $(pair.first()), expression = pair.last();
- if (element.match(expression)) return true;
- this.fail('assertElementsMatch: (in index ' + index + ') expected ' + expression.inspect() + ' but got ' + element.inspect());
- }.bind(this)) && this.pass();
- },
- assertElementMatches: function(element, expression) {
- this.assertElementsMatch([element], expression);
- },
- benchmark: function(operation, iterations) {
- var startAt = new Date();
- (iterations || 1).times(operation);
- var timeTaken = ((new Date())-startAt);
- this.info((arguments[2] || 'Operation') + ' finished ' +
- iterations + ' iterations in ' + (timeTaken/1000)+'s' );
- return timeTaken;
- },
- _isVisible: function(element) {
- element = $(element);
- if(!element.parentNode) return true;
- this.assertNotNull(element);
- if(element.style && Element.getStyle(element, 'display') == 'none')
- return false;
-
- return this._isVisible(element.parentNode);
- },
- assertNotVisible: function(element) {
- this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1]));
- },
- assertVisible: function(element) {
- this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1]));
- },
- benchmark: function(operation, iterations) {
- var startAt = new Date();
- (iterations || 1).times(operation);
- var timeTaken = ((new Date())-startAt);
- this.info((arguments[2] || 'Operation') + ' finished ' +
- iterations + ' iterations in ' + (timeTaken/1000)+'s' );
- return timeTaken;
- }
-};
-
-Test.Unit.Testcase = Class.create();
-Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), {
- initialize: function(name, test, setup, teardown) {
- Test.Unit.Assertions.prototype.initialize.bind(this)();
- this.name = name;
-
- if(typeof test == 'string') {
- test = test.gsub(/(\.should[^\(]+\()/,'#{0}this,');
- test = test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)');
- this.test = function() {
- eval('with(this){'+test+'}');
- };
- } else {
- this.test = test || function() {};
- }
-
- this.setup = setup || function() {};
- this.teardown = teardown || function() {};
- this.isWaiting = false;
- this.timeToWait = 1000;
- },
- wait: function(time, nextPart) {
- this.isWaiting = true;
- this.test = nextPart;
- this.timeToWait = time;
- },
- run: function() {
- try {
- try {
- if (!this.isWaiting) this.setup.bind(this)();
- this.isWaiting = false;
- this.test.bind(this)();
- } finally {
- if(!this.isWaiting) {
- this.teardown.bind(this)();
- }
- }
- }
- catch(e) { this.error(e); }
- }
-});
-
-// *EXPERIMENTAL* BDD-style testing to please non-technical folk
-// This draws many ideas from RSpec http://rspec.rubyforge.org/
-
-Test.setupBDDExtensionMethods = function(){
- var METHODMAP = {
- shouldEqual: 'assertEqual',
- shouldNotEqual: 'assertNotEqual',
- shouldEqualEnum: 'assertEnumEqual',
- shouldBeA: 'assertType',
- shouldNotBeA: 'assertNotOfType',
- shouldBeAn: 'assertType',
- shouldNotBeAn: 'assertNotOfType',
- shouldBeNull: 'assertNull',
- shouldNotBeNull: 'assertNotNull',
-
- shouldBe: 'assertReturnsTrue',
- shouldNotBe: 'assertReturnsFalse',
- shouldRespondTo: 'assertRespondsTo'
- };
- var makeAssertion = function(assertion, args, object) {
- this[assertion].apply(this,(args || []).concat([object]));
- };
-
- Test.BDDMethods = {};
- $H(METHODMAP).each(function(pair) {
- Test.BDDMethods[pair.key] = function() {
- var args = $A(arguments);
- var scope = args.shift();
- makeAssertion.apply(scope, [pair.value, args, this]); };
- });
-
- [Array.prototype, String.prototype, Number.prototype, Boolean.prototype].each(
- function(p){ Object.extend(p, Test.BDDMethods); }
- );
-};
-
-Test.context = function(name, spec, log){
- Test.setupBDDExtensionMethods();
-
- var compiledSpec = {};
- var titles = {};
- for(specName in spec) {
- switch(specName){
- case "setup":
- case "teardown":
- compiledSpec[specName] = spec[specName];
- break;
- default:
- var testName = 'test'+specName.gsub(/\s+/,'-').camelize();
- var body = spec[specName].toString().split('\n').slice(1);
- if(/^\{/.test(body[0])) body = body.slice(1);
- body.pop();
- body = body.map(function(statement){
- return statement.strip();
- });
- compiledSpec[testName] = body.join('\n');
- titles[testName] = specName;
- }
- }
- new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || 'testlog', context: name });
-}; \ No newline at end of file
diff --git a/usr/local/www/javascript/sorttable.js b/usr/local/www/javascript/sorttable.js
deleted file mode 100644
index f150e56..0000000
--- a/usr/local/www/javascript/sorttable.js
+++ /dev/null
@@ -1,584 +0,0 @@
-/*
- SortTable
- version 2
- 7th April 2007
- Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/
-
- Instructions:
- Download this file
- Add <script src="sorttable.js"></script> to your HTML
- Add class="sortable" to any table you'd like to make sortable
- Click on the headers to sort
-
- Thanks to many, many people for contributions and suggestions.
- Licenced as X11: http://www.kryogenix.org/code/browser/licence.html
- This basically means: do what you want with it.
-
- -- pfSense modifications --
- Allow for sorting of IP adresses
- 2012-09-15 Allow for multiple header rows, using "sortableHeaderRowIdentifier" class for the TR that has the column headers. (used in firewall-log)
- 2012-09-15 Allow sorting multiple dual/mutlti rows together, using sortablemultirow="2" attribute for the table
- 2012-09-15 Allow sorting of IP:Port texts, changed sort compare function
- 2012-11-05 Allow sorting of IP:Port and *:port texts toghether also AAA_23 AAA_123 in 'numeric order' (used in Diagnostics\Sockets column LOCAL)
-*/
-
-
-var stIsIE = /*@cc_on!@*/false;
-
-sorttable = {
- init: function() {
- // quit if this function has already been called
- if (arguments.callee.done) return;
- // flag this function so we don't do the same thing twice
- arguments.callee.done = true;
- // kill the timer
- if (_timer) clearInterval(_timer);
-
- if (!document.createElement || !document.getElementsByTagName) return;
-
- sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;
-
- forEach(document.getElementsByTagName('table'), function(table) {
- if (table.className.search(/\bsortable\b/) != -1) {
- sorttable.makeSortable(table);
- }
- });
-
- },
-
- makeSortable: function(table) {
- if (table.getElementsByTagName('thead').length == 0) {
- // table doesn't have a tHead. Since it should have, create one and
- // put the first table row in it.
- the = document.createElement('thead');
- the.appendChild(table.rows[0]);
- table.insertBefore(the,table.firstChild);
- }
- // Safari doesn't support table.tHead, sigh
- if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0];
-
- headrow = undefined;
- if (table.tHead.rows.length == 1)
- headrow = table.tHead.rows[0].cells;
- else
- {
- //if multiple rows are found one must be marked with class <tr class="sortableHeaderRowIdentifier">
- for (var i=0; i<table.tHead.rows.length; i++) {
- if (table.tHead.rows[i].className.search(/\bsortableHeaderRowIdentifier\b/) != -1)
- {
- headrow = table.tHead.rows[i].cells;
- break;
- }
- }
- }
- if (headrow == undefined)
- return;
-
- if (table.getAttribute("sortableMultirow") != undefined)
- sortableMultirow = parseInt(table.getAttribute("sortableMultirow"));
- else
- sortableMultirow = 1;
-
- // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as
- // "total" rows, for example). This is B&R, since what you're supposed
- // to do is put them in a tfoot. So, if there are sortbottom rows,
- // for backwards compatibility, move them to tfoot (creating it if needed).
- sortbottomrows = [];
- for (var i=0; i<table.rows.length; i++) {
- if (table.rows[i].className.search(/\bsortbottom\b/) != -1) {
- sortbottomrows[sortbottomrows.length] = table.rows[i];
- }
- }
- if (sortbottomrows) {
- if (table.tFoot == null) {
- // table doesn't have a tfoot. Create one.
- tfo = document.createElement('tfoot');
- table.appendChild(tfo);
- }
- for (var i=0; i<sortbottomrows.length; i++) {
- tfo.appendChild(sortbottomrows[i]);
- }
- delete sortbottomrows;
- }
-
- // work through each column and calculate its type
- for (var i=0; i<headrow.length; i++) {
- // manually override the type with a sorttable_type attribute
- if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col
- mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/);
- if (mtch) { override = mtch[1]; }
- if (mtch && typeof sorttable["sort_"+override] == 'function') {
- headrow[i].sorttable_sortfunction = sorttable["sort_"+override];
- } else {
- headrow[i].sorttable_sortfunction = sorttable.guessType(table,i, sortableMultirow);
- }
- // make it clickable to sort
- headrow[i].sorttable_columnindex = i;
- headrow[i].sorttable_tbody = table.tBodies[0];
- dean_addEvent(headrow[i],"click", function(e) {
-
- if (this.className.search(/\bsorttable_sorted\b/) != -1) {
- // if we're already sorted by this column, just
- // reverse the table, which is quicker
- sorttable.reverse(this.sorttable_tbody, sortableMultirow);
- this.className = this.className.replace('sorttable_sorted',
- 'sorttable_sorted_reverse');
- this.removeChild(document.getElementById('sorttable_sortfwdind'));
- sortrevind = document.createElement('span');
- sortrevind.id = "sorttable_sortrevind";
- sortrevind.innerHTML = stIsIE ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
- this.appendChild(sortrevind);
- return;
- }
- if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) {
- // if we're already sorted by this column in reverse, just
- // re-reverse the table, which is quicker
- sorttable.reverse(this.sorttable_tbody, sortableMultirow);
- this.className = this.className.replace('sorttable_sorted_reverse',
- 'sorttable_sorted');
- this.removeChild(document.getElementById('sorttable_sortrevind'));
- sortfwdind = document.createElement('span');
- sortfwdind.id = "sorttable_sortfwdind";
- sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
- this.appendChild(sortfwdind);
- return;
- }
-
- // remove sorttable_sorted classes
- theadrow = this.parentNode;
- forEach(theadrow.childNodes, function(cell) {
- if (cell.nodeType == 1) { // an element
- cell.className = cell.className.replace('sorttable_sorted_reverse','');
- cell.className = cell.className.replace('sorttable_sorted','');
- }
- });
- sortfwdind = document.getElementById('sorttable_sortfwdind');
- if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); }
- sortrevind = document.getElementById('sorttable_sortrevind');
- if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); }
-
- this.className += ' sorttable_sorted';
- sortfwdind = document.createElement('span');
- sortfwdind.id = "sorttable_sortfwdind";
- sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
- this.appendChild(sortfwdind);
-
- // build an array to sort. This is a Schwartzian transform thing,
- // i.e., we "decorate" each row with the actual sort key,
- // sort based on the sort keys, and then put the rows back in order
- // which is a lot faster because you only do getInnerText once per row
- row_array = [];
- col = this.sorttable_columnindex;
- rows = this.sorttable_tbody.rows;
- for (var j=0; j<rows.length; j+=sortableMultirow) {
- row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];
- for(var k=1; k < sortableMultirow;k++)
- {
- row_array[row_array.length-1][k+1]=rows[j+k];
- }
- }
- /* If you want a stable sort, uncomment the following line */
- //sorttable.shaker_sort(row_array, this.sorttable_sortfunction);
- /* and comment out this one */
- row_array.sort(this.sorttable_sortfunction);
-
- tb = this.sorttable_tbody;
- for (var j=0; j<row_array.length; j++) {
- for(var k=0; k<sortableMultirow; k++) {
- row = row_array[j][k+1];
- if (j % 2 == 0)
- row.className = row.className.replace(' listMReven',' listMRodd');
- else
- row.className = row.className.replace(' listMRodd',' listMReven');
-
- tb.appendChild(row);
- }
- }
-
- delete row_array;
- });
- }
- }
- },
-
- guessType: function(table, column, sortableMultirow) {
- // guess the type of a column based on its first non-blank row
- sortfn = sorttable.sort_alpha;
- for (var i=0; i<table.tBodies[0].rows.length; i+=sortableMultirow) {
- text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]);
- if (text != '') {
- if (text.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(\:[0-9]{1,5})?\b/)) {
- return sorttable.sort_ipaddr;
- }
- if (text.match(/^-?[£$¤]?[\d,.]+%?$/)) {
- return sorttable.sort_numeric;
- }
- // check for a date: dd/mm/yyyy or dd/mm/yy
- // can have / or . or - as separator
- // can be mm/dd as well
- possdate = text.match(sorttable.DATE_RE);
- if (possdate) {
- // looks like a date
- first = parseInt(possdate[1]);
- second = parseInt(possdate[2]);
- if (first > 12) {
- // definitely dd/mm
- return sorttable.sort_ddmm;
- } else if (second > 12) {
- return sorttable.sort_mmdd;
- } else {
- // looks like a date, but we can't tell which, so assume
- // that it's dd/mm (English imperialism!) and keep looking
- sortfn = sorttable.sort_ddmm;
- }
- }
- }
- }
- return sortfn;
- },
-
- getInnerText: function(node) {
- // gets the text we want to use for sorting for a cell.
- // strips leading and trailing whitespace.
- // this is *not* a generic getInnerText function; it's special to sorttable.
- // for example, you can override the cell text with a customkey attribute.
- // it also gets .value for <input> fields.
-
- hasInputs = (typeof node.getElementsByTagName == 'function') &&
- node.getElementsByTagName('input').length;
-
- if (node.getAttribute("sorttable_customkey") != null) {
- return node.getAttribute("sorttable_customkey");
- }
- else if (typeof node.textContent != 'undefined' && !hasInputs) {
- return node.textContent.replace(/^\s+|\s+$/g, '');
- }
- else if (typeof node.innerText != 'undefined' && !hasInputs) {
- return node.innerText.replace(/^\s+|\s+$/g, '');
- }
- else if (typeof node.text != 'undefined' && !hasInputs) {
- return node.text.replace(/^\s+|\s+$/g, '');
- }
- else {
- switch (node.nodeType) {
- case 3:
- if (node.nodeName.toLowerCase() == 'input') {
- return node.value.replace(/^\s+|\s+$/g, '');
- }
- case 4:
- return node.nodeValue.replace(/^\s+|\s+$/g, '');
- break;
- case 1:
- case 11:
- var innerText = '';
- for (var i = 0; i < node.childNodes.length; i++) {
- innerText += sorttable.getInnerText(node.childNodes[i]);
- }
- return innerText.replace(/^\s+|\s+$/g, '');
- break;
- default:
- return '';
- }
- }
- },
-
- reverse: function(tbody, sortableMultirow) {
- // reverse the rows in a tbody
- newrows = [];
- for (var i=0; i<tbody.rows.length; i++) {
- newrows[newrows.length] = tbody.rows[i];
- }
- for (var i=newrows.length-1; i>=0; i-=sortableMultirow) {
- for(var j=sortableMultirow-1;j>=0;j--)
- {
- tbody.appendChild(newrows[i-j]);
- }
- }
- delete newrows;
- },
-
- /* sort functions
- each sort function takes two parameters, a and b
- you are comparing a[0] and b[0] */
- sort_numeric: function(a,b) {
- aa = parseFloat(a[0].replace(/[^0-9.-]/g,''));
- if (isNaN(aa)) aa = 0;
- bb = parseFloat(b[0].replace(/[^0-9.-]/g,''));
- if (isNaN(bb)) bb = 0;
- return aa-bb;
- },
- sort_alpha: function(a,b) {
- if (a[0]==b[0]) return 0;
- if (a[0]<b[0]) return -1;
- return 1;
- },
- sort_ddmm: function(a,b) {
- mtch = a[0].match(sorttable.DATE_RE);
- y = mtch[3]; m = mtch[2]; d = mtch[1];
- if (m.length == 1) m = '0'+m;
- if (d.length == 1) d = '0'+d;
- dt1 = y+m+d;
- mtch = b[0].match(sorttable.DATE_RE);
- y = mtch[3]; m = mtch[2]; d = mtch[1];
- if (m.length == 1) m = '0'+m;
- if (d.length == 1) d = '0'+d;
- dt2 = y+m+d;
- if (dt1==dt2) return 0;
- if (dt1<dt2) return -1;
- return 1;
- },
- sort_mmdd: function(a,b) {
- mtch = a[0].match(sorttable.DATE_RE);
- y = mtch[3]; d = mtch[2]; m = mtch[1];
- if (m.length == 1) m = '0'+m;
- if (d.length == 1) d = '0'+d;
- dt1 = y+m+d;
- mtch = b[0].match(sorttable.DATE_RE);
- y = mtch[3]; d = mtch[2]; m = mtch[1];
- if (m.length == 1) m = '0'+m;
- if (d.length == 1) d = '0'+d;
- dt2 = y+m+d;
- if (dt1==dt2) return 0;
- if (dt1<dt2) return -1;
- return 1;
- },
- sortWithNumber: function(a,b) {
- amatch = a[0].match(/.*?(?=[0-9])/);
- bmatch = b[0].match(/.*?(?=[0-9])/);
- if (amatch && bmatch && amatch[0] == bmatch[0])
- {
- anumber = a[0].substring(amatch.length+1);
- bnumber = b[0].substring(bmatch.length+1);
- a2match = parseInt(anumber.match(/[0-9]*/));
- b2match = parseInt(bnumber.match(/[0-9]*/));
- if (a2match > b2match) return 1;
- if (a2match < b2match) return -1;
- }
- if (a[0] == b[0]) return 0;
- if (a[0] < b[0]) return -1;
- return 1;
- },
- sort_ipaddr: function(a,b) {
- aip = ip2ulong(a[0]);
- bip = ip2ulong(b[0]);
- if (aip && bip)
- {
- if (aip == bip) return 0;
- if (aip < bip) return -1;
- return 1;
- } else {
- if (aip !== false || bip !== false)
- return aip === false ? -1 : 1;
- else
- {
- return sorttable.sortWithNumber(a,b);
- }
- }
- },
-
- shaker_sort: function(list, comp_func) {
- // A stable sort function to allow multi-level sorting of data
- // see: http://en.wikipedia.org/wiki/Cocktail_sort
- // thanks to Joseph Nahmias
- var b = 0;
- var t = list.length - 1;
- var swap = true;
-
- while(swap) {
- swap = false;
- for(var i = b; i < t; ++i) {
- if ( comp_func(list[i], list[i+1]) > 0 ) {
- var q = list[i]; list[i] = list[i+1]; list[i+1] = q;
- swap = true;
- }
- } // for
- t--;
-
- if (!swap) break;
-
- for(var i = t; i > b; --i) {
- if ( comp_func(list[i], list[i-1]) < 0 ) {
- var q = list[i]; list[i] = list[i-1]; list[i-1] = q;
- swap = true;
- }
- } // for
- b++;
-
- } // while(swap)
- }
-};
-
-/* ******************************************************************
- Supporting functions: bundled here to avoid depending on a library
- ****************************************************************** */
-
-function ip2ulong(ip) {
- ip += "";
- var ulip = false;
- var octets = [];
- ipportmatch = ip.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:[0-9]{1,5}\b/);// IP:port
- if (ipportmatch) {
- ipportmatch += "";
- ipport = ipportmatch.split(':');
- octets = ipport[0].split('.');
- for (i=0; i < 4; i++) {
- ulip += octets[i] * Math.pow(256, (5-i));
- }
- ulip += parseInt(ipport[1]);
- } else {
- ipmatch = ip.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/);// IP only
- if (ipmatch) {
- ipmatch+="";
- octets = ipmatch.split('.');
- for (i=0; i < 4; i++) {
- ulip += octets[i] * Math.pow(256, (5-i));
- }
- }
- }
- return ulip;
-}
-
-// Dean Edwards/Matthias Miller/John Resig
-
-/* for Mozilla/Opera9 */
-if (document.addEventListener) {
- document.addEventListener("DOMContentLoaded", sorttable.init, false);
-}
-
-/* for Safari */
-if (/WebKit/i.test(navigator.userAgent)) { // sniff
- var _timer = setInterval(function() {
- if (/loaded|complete/.test(document.readyState)) {
- sorttable.init(); // call the onload handler
- }
- }, 10);
-}
-
-/* for other browsers */
-window.onload = sorttable.init;
-
-// written by Dean Edwards, 2005
-// with input from Tino Zijdel, Matthias Miller, Diego Perini
-
-// http://dean.edwards.name/weblog/2005/10/add-event/
-
-function dean_addEvent(element, type, handler) {
- if (element.addEventListener) {
- element.addEventListener(type, handler, false);
- } else {
- // assign each event handler a unique ID
- if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++;
- // create a hash table of event types for the element
- if (!element.events) element.events = {};
- // create a hash table of event handlers for each element/event pair
- var handlers = element.events[type];
- if (!handlers) {
- handlers = element.events[type] = {};
- // store the existing event handler (if there is one)
- if (element["on" + type]) {
- handlers[0] = element["on" + type];
- }
- }
- // store the event handler in the hash table
- handlers[handler.$$guid] = handler;
- // assign a global event handler to do all the work
- element["on" + type] = handleEvent;
- }
-};
-// a counter used to create unique IDs
-dean_addEvent.guid = 1;
-
-function removeEvent(element, type, handler) {
- if (element.removeEventListener) {
- element.removeEventListener(type, handler, false);
- } else {
- // delete the event handler from the hash table
- if (element.events && element.events[type]) {
- delete element.events[type][handler.$$guid];
- }
- }
-};
-
-function handleEvent(event) {
- var returnValue = true;
- // grab the event object (IE uses a global event object)
- event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
- // get a reference to the hash table of event handlers
- var handlers = this.events[event.type];
- // execute each event handler
- for (var i in handlers) {
- this.$$handleEvent = handlers[i];
- if (this.$$handleEvent(event) === false) {
- returnValue = false;
- }
- }
- return returnValue;
-};
-
-function fixEvent(event) {
- // add W3C standard event methods
- event.preventDefault = fixEvent.preventDefault;
- event.stopPropagation = fixEvent.stopPropagation;
- return event;
-};
-fixEvent.preventDefault = function() {
- this.returnValue = false;
-};
-fixEvent.stopPropagation = function() {
- this.cancelBubble = true;
-};
-
-// Dean's forEach: http://dean.edwards.name/base/forEach.js
-/*
- forEach, version 1.0
- Copyright 2006, Dean Edwards
- License: http://www.opensource.org/licenses/mit-license.php
-*/
-
-// array-like enumeration
-if (!Array.forEach) { // mozilla already supports this
- Array.forEach = function(array, block, context) {
- for (var i = 0; i < array.length; i++) {
- block.call(context, array[i], i, array);
- }
- };
-}
-
-// generic enumeration
-Function.prototype.forEach = function(object, block, context) {
- for (var key in object) {
- if (typeof this.prototype[key] == "undefined") {
- block.call(context, object[key], key, object);
- }
- }
-};
-
-// character enumeration
-String.forEach = function(string, block, context) {
- Array.forEach(string.split(""), function(chr, index) {
- block.call(context, chr, index, string);
- });
-};
-
-// globally resolve forEach enumeration
-var forEach = function(object, block, context) {
- if (object) {
- var resolve = Object; // default
- if (object instanceof Function) {
- // functions have a "length" property
- resolve = Function;
- } else if (object.forEach instanceof Function) {
- // the object implements a custom forEach method so use that
- object.forEach(block, context);
- return;
- } else if (typeof object == "string") {
- // the object is a string
- resolve = String;
- } else if (typeof object.length == "number") {
- // the object is array-like
- resolve = Array;
- }
- resolve.forEach(object, block, context);
- }
-};
-
diff --git a/usr/local/www/javascript/suggestions.js b/usr/local/www/javascript/suggestions.js
deleted file mode 100644
index 682a352..0000000
--- a/usr/local/www/javascript/suggestions.js
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/**
- * Provides suggestions for state names (USA).
- * @class
- * @scope public
- */
-function StateSuggestions(text) {
- this.states = text;
-}
-
-/**
- * Request suggestions for the given autosuggest control.
- * @scope protected
- * @param oAutoSuggestControl The autosuggest control to provide suggestions for.
- */
-StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,
- bTypeAhead /*:boolean*/) {
- var aSuggestions = [];
- var sTextboxValue = oAutoSuggestControl.textbox.value;
-
- if (sTextboxValue.length > 0){
-
- //search for matching states
- for (var i=0; i < this.states.length; i++) {
- if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) {
- aSuggestions.push(this.states[i]);
- }
- }
- }
-
- //provide suggestions to the control
- oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
-};
diff --git a/usr/local/www/javascript/ticker.js b/usr/local/www/javascript/ticker.js
deleted file mode 100644
index defb1d8..0000000
--- a/usr/local/www/javascript/ticker.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/* $Id$ */
-/*
- ticker.js
- Copyright (C) 2012 Marcello Coutinho
- Copyright (C) 2012 Carlos Cesario - carloscesario@gmail.com
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- pfSense_MODULE: utils
-
-*/
-function notice_action(action,msgid) {
- jQuery.ajax({
- type: 'post',
- cache: false,
- url: 'index.php',
- data: {closenotice: msgid},
- success: function(response) {
- jQuery('#menu_messages').html(response);
- }
- });
-}
-
-function pulsateText(elem) {
- jQuery(elem).effect("pulsate", { times:12 }, 500);
- jQuery(elem).effect("pulsate", { times:6 }, 1500);
- jQuery(elem).effect("pulsate", { times:3 }, 2500);
-}
-
-jQuery(document).ready(function() {
- pulsateText('#marquee-text');
- jQuery('#marquee-text a').hover(function () {
- jQuery(this).css('cursor','pointer');
- });
-});
-
-function alias_popup(alias_id,theme,loading) {
- domTT_update('ttalias_'+alias_id,"<a><img src='/themes/"+theme+"/images/misc/loader.gif'>"+loading+"</a>");
- jQuery.ajax({
- type: 'post',
- cache: false,
- url: "/index.php",
- data: {aliasid:alias_id, act:'alias_info_popup'},
- success: function(response) {
- //alert('<div>'+response.match(/<h1>.*<\/table>/i)+'<div>');
- domTT_update('ttalias_'+alias_id,'<div>'+response.match(/<h1>.*<\/table>/i)+'<div>');
- }
- });
-} \ No newline at end of file
diff --git a/usr/local/www/javascript/wizard/autosuggest.js b/usr/local/www/javascript/wizard/autosuggest.js
deleted file mode 100644
index d9b5ac0..0000000
--- a/usr/local/www/javascript/wizard/autosuggest.js
+++ /dev/null
@@ -1,337 +0,0 @@
-
-/**
- * An autosuggest textbox control.
- * @class
- * @scope public
- */
-function AutoSuggestControl(oTextbox /*:HTMLInputElement*/,
- oProvider /*:SuggestionProvider*/) {
-
- /**
- * The currently selected suggestions.
- * @scope private
- */
- this.cur /*:int*/ = -1;
-
- /**
- * The dropdown list layer.
- * @scope private
- */
- this.layer = null;
-
- /**
- * Suggestion provider for the autosuggest feature.
- * @scope private.
- */
- this.provider /*:SuggestionProvider*/ = oProvider;
-
- /**
- * The textbox to capture.
- * @scope private
- */
- this.textbox /*:HTMLInputElement*/ = oTextbox;
-
- //initialize the control
- this.init();
-
-}
-
-/**
- * Autosuggests one or more suggestions for what the user has typed.
- * If no suggestions are passed in, then no autosuggest occurs.
- * @scope private
- * @param aSuggestions An array of suggestion strings.
- * @param bTypeAhead If the control should provide a type ahead suggestion.
- */
-AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/,
- bTypeAhead /*:boolean*/) {
-
- //make sure there's at least one suggestion
- if (aSuggestions.length > 0) {
- if (bTypeAhead) {
- this.typeAhead(aSuggestions[0]);
- }
-
- this.showSuggestions(aSuggestions);
- } else {
- this.hideSuggestions();
- }
-};
-
-/**
- * Creates the dropdown layer to display multiple suggestions.
- * @scope private
- */
-AutoSuggestControl.prototype.createDropDown = function () {
-
- var oThis = this;
-
- //create the layer and assign styles
- this.layer = document.createElement("div");
- this.layer.className = "suggestions";
- this.layer.style.visibility = "hidden";
- this.layer.style.width = this.textbox.offsetWidth;
-
- //when the user clicks on the a suggestion, get the text (innerHTML)
- //and place it into a textbox
- this.layer.onmousedown =
- this.layer.onmouseup =
- this.layer.onmouseover = function (oEvent) {
- oEvent = oEvent || window.event;
- oTarget = oEvent.target || oEvent.srcElement;
-
- if (oEvent.type == "mousedown") {
- oThis.textbox.value = oTarget.firstChild.nodeValue;
- oThis.hideSuggestions();
- } else if (oEvent.type == "mouseover") {
- oThis.highlightSuggestion(oTarget);
- } else {
- oThis.textbox.focus();
- }
- };
-
-
- document.body.appendChild(this.layer);
-};
-
-/**
- * Gets the left coordinate of the textbox.
- * @scope private
- * @return The left coordinate of the textbox in pixels.
- */
-AutoSuggestControl.prototype.getLeft = function () /*:int*/ {
-
- var oNode = this.textbox;
- var iLeft = 0;
-
- while(oNode.tagName != "BODY") {
- iLeft += oNode.offsetLeft;
- oNode = oNode.offsetParent;
- }
-
- return iLeft;
-};
-
-/**
- * Gets the top coordinate of the textbox.
- * @scope private
- * @return The top coordinate of the textbox in pixels.
- */
-AutoSuggestControl.prototype.getTop = function () /*:int*/ {
-
- var oNode = this.textbox;
- var iTop = 0;
-
- while(oNode.tagName != "BODY") {
- iTop += oNode.offsetTop;
- oNode = oNode.offsetParent;
- }
-
- return iTop;
-};
-
-/**
- * Handles three keydown events.
- * @scope private
- * @param oEvent The event object for the keydown event.
- */
-AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) {
-
- switch(oEvent.keyCode) {
- case 38: //up arrow
- this.previousSuggestion();
- break;
- case 40: //down arrow
- this.nextSuggestion();
- break;
- case 13: //enter
- this.hideSuggestions();
- break;
- }
-
-};
-
-/**
- * Handles keyup events.
- * @scope private
- * @param oEvent The event object for the keyup event.
- */
-AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) {
-
- var iKeyCode = oEvent.keyCode;
-
- //for backspace (8) and delete (46), shows suggestions without typeahead
- if (iKeyCode == 8 || iKeyCode == 46) {
- this.provider.requestSuggestions(this, false);
-
- //make sure not to interfere with non-character keys
- } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
- //ignore
- } else {
- //request suggestions from the suggestion provider with typeahead
- this.provider.requestSuggestions(this, true);
- }
-};
-
-/**
- * Hides the suggestion dropdown.
- * @scope private
- */
-AutoSuggestControl.prototype.hideSuggestions = function () {
- this.layer.style.visibility = "hidden";
-};
-
-/**
- * Highlights the given node in the suggestions dropdown.
- * @scope private
- * @param oSuggestionNode The node representing a suggestion in the dropdown.
- */
-AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) {
-
- for (var i=0; i < this.layer.childNodes.length; i++) {
- var oNode = this.layer.childNodes[i];
- if (oNode == oSuggestionNode) {
- oNode.className = "current";
- } else if (oNode.className == "current") {
- oNode.className = "";
- }
- }
-};
-
-/**
- * Initializes the textbox with event handlers for
- * auto suggest functionality.
- * @scope private
- */
-AutoSuggestControl.prototype.init = function () {
-
- //save a reference to this object
- var oThis = this;
-
- //assign the onkeyup event handler
- this.textbox.onkeyup = function (oEvent) {
-
- //check for the proper location of the event object
- if (!oEvent) {
- oEvent = window.event;
- }
-
- //call the handleKeyUp() method with the event object
- oThis.handleKeyUp(oEvent);
- };
-
- //assign onkeydown event handler
- this.textbox.onkeydown = function (oEvent) {
-
- //check for the proper location of the event object
- if (!oEvent) {
- oEvent = window.event;
- }
-
- //call the handleKeyDown() method with the event object
- oThis.handleKeyDown(oEvent);
- };
-
- //assign onblur event handler (hides suggestions)
- this.textbox.onblur = function () {
- oThis.hideSuggestions();
- };
-
- //create the suggestions dropdown
- this.createDropDown();
-};
-
-/**
- * Highlights the next suggestion in the dropdown and
- * places the suggestion into the textbox.
- * @scope private
- */
-AutoSuggestControl.prototype.nextSuggestion = function () {
- var cSuggestionNodes = this.layer.childNodes;
-
- if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) {
- var oNode = cSuggestionNodes[++this.cur];
- this.highlightSuggestion(oNode);
- this.textbox.value = oNode.firstChild.nodeValue;
- }
-};
-
-/**
- * Highlights the previous suggestion in the dropdown and
- * places the suggestion into the textbox.
- * @scope private
- */
-AutoSuggestControl.prototype.previousSuggestion = function () {
- var cSuggestionNodes = this.layer.childNodes;
-
- if (cSuggestionNodes.length > 0 && this.cur > 0) {
- var oNode = cSuggestionNodes[--this.cur];
- this.highlightSuggestion(oNode);
- this.textbox.value = oNode.firstChild.nodeValue;
- }
-};
-
-/**
- * Selects a range of text in the textbox.
- * @scope public
- * @param iStart The start index (base 0) of the selection.
- * @param iLength The number of characters to select.
- */
-AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) {
-
- //use text ranges for Internet Explorer
- if (this.textbox.createTextRange) {
- var oRange = this.textbox.createTextRange();
- oRange.moveStart("character", iStart);
- oRange.moveEnd("character", iLength - this.textbox.value.length);
- oRange.select();
-
- //use setSelectionRange() for Mozilla
- } else if (this.textbox.setSelectionRange) {
- this.textbox.setSelectionRange(iStart, iLength);
- }
-
- //set focus back to the textbox
- this.textbox.focus();
-};
-
-/**
- * Builds the suggestion layer contents, moves it into position,
- * and displays the layer.
- * @scope private
- * @param aSuggestions An array of suggestions for the control.
- */
-AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) {
-
- var oDiv = null;
- this.layer.innerHTML = ""; //clear contents of the layer
-
- for (var i=0; i < aSuggestions.length; i++) {
- oDiv = document.createElement("div");
- oDiv.appendChild(document.createTextNode(aSuggestions[i]));
- this.layer.appendChild(oDiv);
- }
-
- this.layer.style.left = this.getLeft() + "px";
- this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px";
- this.layer.style.width = this.textbox.offsetWidth + "px";
- this.layer.style.visibility = "visible";
-
-};
-
-/**
- * Inserts a suggestion into the textbox, highlighting the
- * suggested part of the text.
- * @scope private
- * @param sSuggestion The suggestion for the textbox.
- */
-AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) {
-
- //check for support of typeahead functionality
- if (this.textbox.createTextRange || this.textbox.setSelectionRange){
- var iLen = this.textbox.value.length;
- this.textbox.value = sSuggestion;
- this.selectRange(iLen, sSuggestion.length);
- }
-};
-
diff --git a/usr/local/www/javascript/wizard/disablekeys.js b/usr/local/www/javascript/wizard/disablekeys.js
deleted file mode 100644
index 5d6c87a..0000000
--- a/usr/local/www/javascript/wizard/disablekeys.js
+++ /dev/null
@@ -1,6 +0,0 @@
-function kH(e) {
- var pK = document.all? window.event.keyCode:e.which;
- return pK != 13;
-}
-document.onkeypress = kH;
-if (document.layers) document.captureEvents(Event.KEYPRESS); \ No newline at end of file
diff --git a/usr/local/www/javascript/wizard/suggestions.js b/usr/local/www/javascript/wizard/suggestions.js
deleted file mode 100644
index 4d1e127..0000000
--- a/usr/local/www/javascript/wizard/suggestions.js
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/**
- * Provides suggestions for state names (USA).
- * @class
- * @scope public
- */
-function StateSuggestions(text) {
- this.states = text;
-}
-
-/**
- * Request suggestions for the given autosuggest control.
- * @scope protected
- * @param oAutoSuggestControl The autosuggest control to provide suggestions for.
- */
-StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,
- bTypeAhead /*:boolean*/) {
- var aSuggestions = [];
- var sTextboxValue = oAutoSuggestControl.textbox.value;
-
- if (sTextboxValue.length > 0){
-
- //search for matching states
- for (var i=0; i < this.states.length; i++) {
- if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) {
- aSuggestions.push(this.states[i]);
- }
- }
- }
-
- //provide suggestions to the control
- oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
-};
diff --git a/usr/local/www/license.php b/usr/local/www/license.php
deleted file mode 100644
index 2247d6a..0000000
--- a/usr/local/www/license.php
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php
-/* $Id$ */
-/*
- license.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-system-license
-##|*NAME=System: License page
-##|*DESCR=Allow access to the 'System: License' page.
-##|*MATCH=license.php*
-##|-PRIV
-
-require("guiconfig.inc");
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
- <?php include("fbegin.inc"); ?>
- <p class="pgtitle"><?=gettext("License");?></p>
-
- <p><strong><?=$g['product_name'];?> <?=gettext("is Copyright");?> &copy; <?=$g['product_copyright_years'];?> <?=gettext("by");?> <?=$g['product_copyright'];?><br />
- <?=gettext("All rights reserved");?>.</strong></p>
-
- <p><strong><?=gettext("m0n0wall is Copyright ");?>&copy; <?=gettext("2002-2015 by Manuel Kasper");?>
- (<a href="mailto:mk@neon1.net">mk@neon1.net</a>).<br />
- <?=gettext("All rights reserved");?>.</strong></p>
- <p> <?=gettext("Redistribution and use in source and binary forms, with or without");?><br />
- <?=gettext("modification, are permitted provided that the following conditions are met");?>:<br />
- <br />
- <?=gettext("1. Redistributions of source code must retain the above copyright notice,");?><br />
- <?=gettext("this list of conditions and the following disclaimer");?>.<br />
- <br />
- <?=gettext("2. Redistributions in binary form must reproduce the above copyright");?><br />
- <?=gettext("notice, this list of conditions and the following disclaimer in the");?><br />
- <?=gettext("documentation and/or other materials provided with the distribution.");?><br />
- <br />
- <strong><?=gettext("THIS SOFTWARE IS PROVIDED ");?>&quot;<?=gettext("AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,");?><br />
- <?=gettext("INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY");?><br />
- <?=gettext("AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE");?><br />
- <?=gettext("AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,");?><br />
- <?=gettext("OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF");?><br />
- <?=gettext("SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS");?><br />
- <?=gettext("INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN");?><br />
- <?=gettext("CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)");?><br />
- <?=gettext("ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE");?><br />
- <?=gettext("POSSIBILITY OF SUCH DAMAGE");?></strong>.</p>
- <hr size="1">
- <p><?= "{$g['product_name']} " . gettext("is based upon/includes various free software packages, listed below.");?><br />
- <?php printf(gettext("The authors of %s would like to thank the authors of these software packages for their efforts"), $g['product_name']);?>.</p>
- <p>FreeBSD (<a href="http://www.freebsd.org" target="_blank">http://www.freebsd.org</a>)<br />
- <?=gettext("Copyright");?> &copy;<?=gettext("1992-2015 The FreeBSD Project. All rights reserved");?>.<br />
- <br />
- <?=gettext("This product includes PHP, freely available from");?> <a href="http://www.php.net/" target="_blank">http://www.php.net</a>.<br />
- <?=gettext("Copyright"); ?> &copy; <?=gettext("1999-2015 The PHP Group. All rights reserved.");?>.<br />
- <br />
- <?=gettext("LightTPD"); ?> (<a href="http://www.lighttpd.net" target="_blank">http://www.lighttpd.net)</a><br />
- <?=gettext("Copyright"); ?> &copy;<?=gettext("2004, Jan Knescke, incremental");?><jan@kneschke.de>
- <?=gettext("All rights reserved.");?><br />
- <br />
- <?=gettext("ISC DHCP server ");?>(<a href="http://www.isc.org/products/DHCP/" target="_blank">http://www.isc.org/products/DHCP</a>)<br />
- <?=gettext("Copyright"); ?> &copy; <?=gettext("2004-2012 Internet Software Consortium, Inc.");?><br />
- <?=gettext("Copyright"); ?> &copy; <?=gettext("1995-2003 Internet Software Consortium");?><br />
- <br />
- <?=gettext("PF"); ?> (<a href="http://www.openbsd.org/faq/pf" target="_blank">http://www.openbsd.org</a>)<br />
- <br />
- <?=gettext("MPD - Multi-link PPP daemon for FreeBSD");?> (<a href="http://www.dellroad.org/mpd" target="_blank">http://www.dellroad.org/mpd</a>)<br />
- <?=gettext("Copyright"); ?> &copy; 2003-2004, Archie L. Cobbs, Michael Bretterklieber, Alexander Motin<br />
- <?=gettext("All rights reserved.");?><br />
- <br />
- <?=gettext("Circular log support for FreeBSD syslogd ");?>(<a href="http://software.wheelhouse.org/syslogd/" target="_blank">http://software.wheelhouse.org/syslogd/</a>)<br />
- <?=gettext("Copyright"); ?> &copy; 2001 Jeff Wheelhouse (jdw@wwwi.com)<br />
- <br />
- <?=gettext("Dnsmasq - a DNS forwarder for NAT firewalls");?> (<a href="http://www.thekelleys.org.uk" target="_blank">http://www.thekelleys.org.uk</a>)<br />
- <?=gettext("Copyright"); ?> &copy; 2000-2012 Simon Kelley.<br />
- <br />
- <?=gettext("IPsec-Tools"); ?> (<a href="http://ipsec-tools.sourceforge.net/" target="_blank">http://ipsec-tools.sourceforge.net/</a>)<br />
- <?=gettext("Copyright"); ?> &copy; <?=gettext("1995-2002 WIDE Project. All rights reserved.");?><br />
- <br />
- <?=gettext("msntp"); ?> (<a href="http://www.hpcf.cam.ac.uk/export" target="_blank">http://www.hpcf.cam.ac.uk/export</a>)<br />
- <?=gettext("Copyright"); ?> &copy;<?=gettext(" 1996, 1997, 2000 N.M. Maclaren, University of Cambridge. ".
- "All rights reserved.");?><br />
- <br />
- <?=gettext("UCD-SNMP"); ?> (<a href="http://www.ece.ucdavis.edu/ucd-snmp" target="_blank">http://www.ece.ucdavis.edu/ucd-snmp</a>)<br />
- <?=gettext("Copyright"); ?> &copy; <?=gettext("1989, 1991, 1992 by Carnegie Mellon University.");?><br />
- <?=gettext("Copyright"); ?> &copy; <?=gettext("1996, 1998-2000 The Regents of the University of California. All rights reserved");?>.<br />
- <?=gettext("Copyright"); ?> &copy; <?=gettext("2001-2002, Network Associates Technology, Inc. All rights reserved.");?><br />
- <?=gettext("Portions of this code are copyright");?> &copy; <?=gettext("2001-2002, Cambridge Broadband Ltd. All rights reserved.");?><br />
- <br />
- <?=gettext("choparp"); ?> (<a href="http://choparp.sourceforge.net/" target="_blank">http://choparp.sourceforge.net</a>)<br />
- <?=gettext("Copyright"); ?> &copy; 1997 Takamichi Tateoka (tree@mma.club.uec.ac.jp)<br />
- <?=gettext("Copyright"); ?> &copy; 2002 Thomas Quinot (thomas@cuivre.fr.eu.org)<br />
- <br />
- <?=gettext("php-radius"); ?> (<a href="http://www.mavetju.org/programming/php.php" target="_blank">http://www.mavetju.org/programming/php.php</a>)<br />
- <?=gettext("Copyright 2000, 2001, 2002 by Edwin Groothuis. All rights reserved.");?><br />
- <?=gettext("This product includes software developed by Edwin Groothuis.");?><br />
- <br />
- <?=gettext("wol"); ?> (<a href="http://ahh.sourceforge.net/wol" target="_blank">http://ahh.sourceforge.net/wol</a>)<br />
- <?=gettext("Copyright"); ?> &copy; 2000,2001,2002,2003,2004 Thomas Krennwallner &lt;krennwallner@aon.at&gt;
- <br />
- <?=gettext("OpenVPN"); ?> (<a href="http://openvpn.net/" target="_blank">http://openvpn.net/</a>)
- <?=gettext("Copyright (C) 2002-2005 OpenVPN Solutions LLC ");?>
- </p>
- <?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/load_balancer_monitor.php b/usr/local/www/load_balancer_monitor.php
deleted file mode 100644
index 87884e5..0000000
--- a/usr/local/www/load_balancer_monitor.php
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php
-/* $Id$ */
-/*
- load_balancer_monitor.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2008 Bill Marquette <bill.marquette@gmail.com>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-services-loadbalancer-monitor
-##|*NAME=Services: Load Balancer: Monitors page
-##|*DESCR=Allow access to the 'Services: Load Balancer: Monitors' page.
-##|*MATCH=load_balancer_monitor.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("util.inc");
-
-if (!is_array($config['load_balancer']['monitor_type'])) {
- $config['load_balancer']['monitor_type'] = array();
-}
-$a_monitor = &$config['load_balancer']['monitor_type'];
-
-if ($_POST) {
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
- $retval = 0;
- $retval |= filter_configure();
- $retval |= relayd_configure();
-
- $savemsg = get_std_save_message($retval);
- clear_subsystem_dirty('loadbalancer');
- }
-}
-
-if ($_GET['act'] == "del") {
- if (array_key_exists($_GET['id'], $a_monitor)) {
- /* make sure no pools reference this entry */
- if (is_array($config['load_balancer']['lbpool'])) {
- foreach ($config['load_balancer']['lbpool'] as $pool) {
- if ($pool['monitor'] == $a_monitor[$_GET['id']]['name']) {
- $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one pool.");
- break;
- }
- }
- }
-
- if (!$input_errors) {
- unset($a_monitor[$_GET['id']]);
- write_config();
- mark_subsystem_dirty('loadbalancer');
- header("Location: load_balancer_monitor.php");
- exit;
- }
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("Load Balancer"), gettext("Monitor"));
-$shortcut_section = "relayd";
-
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="load_balancer_monitor.php" method="post">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('loadbalancer')): ?><br/>
-<?php print_info_box_np(gettext("The load balancer configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="load balancer monitor">
- <tr><td class="tabnavtbl">
- <?php
- /* active tabs */
- $tab_array = array();
- $tab_array[] = array(gettext("Pools"), false, "load_balancer_pool.php");
- $tab_array[] = array(gettext("Virtual Servers"), false, "load_balancer_virtual_server.php");
- $tab_array[] = array(gettext("Monitors"), true, "load_balancer_monitor.php");
- $tab_array[] = array(gettext("Settings"), false, "load_balancer_setting.php");
- display_top_tabs($tab_array);
- ?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
-<?php
- $t = new MainTable();
- $t->edit_uri('load_balancer_monitor_edit.php');
- $t->my_uri('load_balancer_monitor.php');
- $t->add_column(gettext('Name'), 'name', 20);
- $t->add_column(gettext('Type'), 'type', 10);
- $t->add_column(gettext('Description'), 'descr', 30);
- $t->add_button('edit');
- $t->add_button('dup');
- $t->add_button('del');
- $t->add_content_array($a_monitor);
- $t->display();
-?>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/load_balancer_monitor_edit.php b/usr/local/www/load_balancer_monitor_edit.php
deleted file mode 100644
index 532136b..0000000
--- a/usr/local/www/load_balancer_monitor_edit.php
+++ /dev/null
@@ -1,390 +0,0 @@
-<?php
-/* $Id$ */
-/*
- load_balancer_monitor_edit.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2008 Bill Marquette <bill.marquette@gmail.com>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-services-loadbalancer-monitor-edit
-##|*NAME=Services: Load Balancer: Monitor: Edit page
-##|*DESCR=Allow access to the 'Services: Load Balancer: Monitor: Edit' page.
-##|*MATCH=load_balancer_monitor_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/load_balancer_monitor.php');
-}
-
-if (!is_array($config['load_balancer']['monitor_type'])) {
- $config['load_balancer']['monitor_type'] = array();
-}
-$a_monitor = &$config['load_balancer']['monitor_type'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_monitor[$id]) {
- $pconfig['name'] = $a_monitor[$id]['name'];
- $pconfig['type'] = $a_monitor[$id]['type'];
- $pconfig['descr'] = $a_monitor[$id]['descr'];
- $pconfig['options'] = array();
- $pconfig['options'] = $a_monitor[$id]['options'];
-} else {
- /* Some sane page defaults */
- $pconfig['options']['path'] = '/';
- $pconfig['options']['code'] = 200;
-}
-
-$changedesc = gettext("Load Balancer: Monitor:") . " ";
-$changecount = 0;
-
-if ($_POST) {
- $changecount++;
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* turn $_POST['http_options_*'] into $pconfig['options'][*] */
- foreach ($_POST as $key => $val) {
- if (stristr($key, 'options') !== false) {
- if (stristr($key, $pconfig['type'].'_') !== false) {
- $opt = explode('_', $key);
- $pconfig['options'][$opt[2]] = $val;
- }
- unset($pconfig[$key]);
- }
- }
-
- /* input validation */
- $reqdfields = explode(" ", "name type descr");
- $reqdfieldsn = array(gettext("Name"), gettext("Type"), gettext("Description"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- /* Ensure that our monitor names are unique */
- for ($i = 0; isset($config['load_balancer']['monitor_type'][$i]); $i++) {
- if (($_POST['name'] == $config['load_balancer']['monitor_type'][$i]['name']) && ($i != $id)) {
- $input_errors[] = gettext("This monitor name has already been used. Monitor names must be unique.");
- }
- }
-
- if (preg_match('/[ \/]/', $_POST['name'])) {
- $input_errors[] = gettext("You cannot use spaces or slashes in the 'name' field.");
- }
-
- if (strlen($_POST['name']) > 16) {
- $input_errors[] = gettext("The 'name' field must be 16 characters or less.");
- }
-
- switch ($_POST['type']) {
- case 'icmp': {
- break;
- }
- case 'tcp': {
- break;
- }
- case 'http':
- case 'https': {
- if (is_array($pconfig['options'])) {
- if (isset($pconfig['options']['host']) && $pconfig['options']['host'] != "") {
- if (!is_hostname($pconfig['options']['host'])) {
- $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'.");
- }
- }
- if (isset($pconfig['options']['code']) && $pconfig['options']['code'] != "") {
- // Check code
- if (!is_rfc2616_code($pconfig['options']['code'])) {
- $input_errors[] = gettext("HTTP(s) codes must be from RFC2616.");
- }
- }
- if (!isset($pconfig['options']['path']) || $pconfig['options']['path'] == "") {
- $input_errors[] = gettext("The path to monitor must be set.");
- }
- }
- break;
- }
- case 'send': {
- if (is_array($pconfig['options'])) {
- if (isset($pconfig['options']['send']) && $pconfig['options']['send'] != "") {
- // Check send
- }
- if (isset($pconfig['options']['expect']) && $pconfig['options']['expect'] != "") {
- // Check expect
- }
- }
- break;
- }
- }
-
- if (!$input_errors) {
- $monent = array();
- if (isset($id) && $a_monitor[$id]) {
- $monent = $a_monitor[$id];
- }
- if ($monent['name'] != "") {
- $changedesc .= " " . sprintf(gettext("modified '%s' monitor:"), $monent['name']);
- }
-
- update_if_changed("name", $monent['name'], $pconfig['name']);
- update_if_changed("type", $monent['type'], $pconfig['type']);
- update_if_changed("description", $monent['descr'], $pconfig['descr']);
- if ($pconfig['type'] == "http" || $pconfig['type'] == "https") {
- /* log updates, then clear array and reassign - dumb, but easiest way to have a clear array */
- update_if_changed("path", $monent['options']['path'], $pconfig['options']['path']);
- update_if_changed("host", $monent['options']['host'], $pconfig['options']['host']);
- update_if_changed("code", $monent['options']['code'], $pconfig['options']['code']);
- $monent['options'] = array();
- $monent['options']['path'] = $pconfig['options']['path'];
- $monent['options']['host'] = $pconfig['options']['host'];
- $monent['options']['code'] = $pconfig['options']['code'];
- }
- if ($pconfig['type'] == "send") {
- /* log updates, then clear array and reassign - dumb, but easiest way to have a clear array */
- update_if_changed("send", $monent['options']['send'], $pconfig['options']['send']);
- update_if_changed("expect", $monent['options']['expect'], $pconfig['options']['expect']);
- $monent['options'] = array();
- $monent['options']['send'] = $pconfig['options']['send'];
- $monent['options']['expect'] = $pconfig['options']['expect'];
- }
- if ($pconfig['type'] == "tcp" || $pconfig['type'] == "icmp") {
- $monent['options'] = array();
- }
-
- if (isset($id) && $a_monitor[$id]) {
- /* modify all pools with this name */
- for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) {
- if ($config['load_balancer']['lbpool'][$i]['monitor'] == $a_monitor[$id]['name']) {
- $config['load_balancer']['lbpool'][$i]['monitor'] = $monent['name'];
- }
- }
- $a_monitor[$id] = $monent;
- } else {
- $a_monitor[] = $monent;
- }
-
- if ($changecount > 0) {
- /* Mark config dirty */
- mark_subsystem_dirty('loadbalancer');
- write_config($changedesc);
- }
-
- header("Location: load_balancer_monitor.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("Load Balancer"), gettext("Monitor"), gettext("Edit"));
-$shortcut_section = "relayd";
-
-include("head.inc");
-$types = array("icmp" => gettext("ICMP"), "tcp" => gettext("TCP"), "http" => gettext("HTTP"), "https" => gettext("HTTPS"), "send" => gettext("Send/Expect"));
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-function updateType(t) {
- switch (t) {
-<?php
- /* OK, so this is sick using php to generate javascript, but it needed to be done */
- foreach ($types as $key => $val) {
- echo " case \"{$key}\": {\n";
- $t = $types;
- foreach ($t as $k => $v) {
- if ($k != $key) {
- echo " jQuery('#{$k}').hide();\n";
- }
- }
- echo " }\n";
- }
-?>
- }
- jQuery('#' + t).show();
-}
-//]]>
-</script>
-
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-
-<form action="load_balancer_monitor_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="monitor entry">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit Load Balancer - Monitor entry"); ?></td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <input name="name" type="text" <?if (isset($pconfig['name'])) echo "value=\"" . htmlspecialchars($pconfig['name']) . "\"";?> size="16" maxlength="16" />
- </td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <input name="descr" type="text" <?if (isset($pconfig['descr'])) echo "value=\"" . htmlspecialchars($pconfig['descr']) . "\"";?> size="64" />
- </td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Type"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <select id="type" name="type">
-<?
- foreach ($types as $key => $val) {
- if (isset($pconfig['type']) && $pconfig['type'] == $key) {
- $selected = " selected=\"selected\"";
- } else {
- $selected = "";
- }
- echo "<option value=\"{$key}\" onclick=\"updateType('{$key}');\"{$selected}>{$val}</option>\n";
- }
-?>
- </select>
- </td>
- </tr>
- <tr align="left" id="icmp"<?= $pconfig['type'] == "icmp" ? "" : " style=\"display:none;\""?>>
- <td></td>
- </tr>
- <tr align="left" id="tcp"<?= $pconfig['type'] == "tcp" ? "" : " style=\"display:none;\""?>>
- <td></td>
- </tr>
- <tr align="left" id="http"<?= $pconfig['type'] == "http" ? "" : " style=\"display:none;\""?>>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("HTTP"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="http">
- <tr align="left">
- <td valign="top" align="right" class="vtable"><?=gettext("Path"); ?></td>
- <td class="vtable" colspan="2">
- <input name="http_options_path" type="text" <?if (isset($pconfig['options']['path'])) echo "value=\"" . htmlspecialchars($pconfig['options']['path']) . "\"";?> size="64" />
- </td>
- </tr>
- <tr align="left">
- <td valign="top" align="right" class="vtable"><?=gettext("Host"); ?></td>
- <td class="vtable" colspan="2">
- <input name="http_options_host" type="text" <?if (isset($pconfig['options']['host'])) echo "value=\"" . htmlspecialchars($pconfig['options']['host']) . "\"";?> size="64" /><br /><?=gettext("Hostname for Host: header if needed."); ?>
- </td>
- </tr>
- <tr align="left">
- <td valign="top" align="right" class="vtable"><?=gettext("HTTP Code"); ?></td>
- <td class="vtable" colspan="2">
- <?= print_rfc2616_select("http_options_code", $pconfig['options']['code']); ?>
- </td>
- </tr>
-<!-- BILLM: XXX not supported digest checking just yet
- <tr align="left">
- <td width="22%" valign="top" class="vncell">MD5 Page Digest</td>
- <td width="78%" class="vtable" colspan="2">
- <input name="digest" type="text" <?if (isset($pconfig['digest'])) echo "value=\"" . htmlspecialchars($pconfig['digest']) . "\"";?>size="32"><br /><b>TODO: add fetch functionality here</b>
- </td>
- </tr>
--->
- </table>
- </td>
- </tr>
- <tr align="left" id="https"<?= $pconfig['type'] == "https" ? "" : " style=\"display:none;\""?>>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("HTTPS"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="https">
- <tr align="left">
- <td valign="top" align="right" class="vtable"><?=gettext("Path"); ?></td>
- <td class="vtable" colspan="2">
- <input name="https_options_path" type="text" <?if (isset($pconfig['options']['path'])) echo "value=\"" . htmlspecialchars($pconfig['options']['path']) ."\"";?> size="64" />
- </td>
- </tr>
- <tr align="left">
- <td valign="top" align="right" class="vtable"><?=gettext("Host"); ?></td>
- <td class="vtable" colspan="2">
- <input name="https_options_host" type="text" <?if (isset($pconfig['options']['host'])) echo "value=\"" . htmlspecialchars($pconfig['options']['host']) . "\"";?> size="64" /><br /><?=gettext("Hostname for Host: header if needed."); ?>
- </td>
- </tr>
- <tr align="left">
- <td valign="top" align="right" class="vtable"><?=gettext("HTTP Code"); ?></td>
- <td class="vtable" colspan="2">
- <?= print_rfc2616_select("https_options_code", $pconfig['options']['code']); ?>
- </td>
- </tr>
-<!-- BILLM: XXX not supported digest checking just yet
-
- <tr align="left">
- <td width="22%" valign="top" class="vncellreq">MD5 Page Digest</td>
- <td width="78%" class="vtable" colspan="2">
- <input name="digest" type="text" <?if (isset($pconfig['digest'])) echo "value=\"" . htmlspecialchars($pconfig['digest']) . "\"";?>size="32"><br /><b>TODO: add fetch functionality here</b>
- </td>
- </tr>
--->
- </table>
- </td>
- </tr>
- <tr align="left" id="send"<?= $pconfig['type'] == "send" ? "" : " style=\"display:none;\""?>>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Send/Expect"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="send expect">
- <tr align="left">
- <td valign="top" align="right" class="vtable"><?=gettext("Send string"); ?></td>
- <td class="vtable" colspan="2">
- <input name="send_options_send" type="text" <?if (isset($pconfig['options']['send'])) echo "value=\"" . htmlspecialchars($pconfig['options']['send']) . "\"";?> size="64" />
- </td>
- </tr>
- <tr align="left">
- <td valign="top" align="right" class="vtable"><?=gettext("Expect string"); ?></td>
- <td class="vtable" colspan="2">
- <input name="send_options_expect" type="text" <?if (isset($pconfig['options']['expect'])) echo "value=\"" . htmlspecialchars($pconfig['options']['expect']) . "\"";?> size="64" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_monitor[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<br />
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/load_balancer_pool.php b/usr/local/www/load_balancer_pool.php
deleted file mode 100644
index 47f3a89..0000000
--- a/usr/local/www/load_balancer_pool.php
+++ /dev/null
@@ -1,159 +0,0 @@
-<?php
-/* $Id$ */
-/*
- load_balancer_pool.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2005-2008 Bill Marquette <bill.marquette@gmail.com>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-loadbalancer-pool
-##|*NAME=Load Balancer: Pool page
-##|*DESCR=Allow access to the 'Load Balancer: Pool' page.
-##|*MATCH=load_balancer_pool.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-if (!is_array($config['load_balancer']['lbpool'])) {
- $config['load_balancer']['lbpool'] = array();
-}
-$a_pool = &$config['load_balancer']['lbpool'];
-
-
-if ($_POST) {
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
- $retval = 0;
- $retval |= filter_configure();
- $retval |= relayd_configure();
-
- $savemsg = get_std_save_message($retval);
- clear_subsystem_dirty('loadbalancer');
- }
-}
-
-if ($_GET['act'] == "del") {
- if (array_key_exists($_GET['id'], $a_pool)) {
- /* make sure no virtual servers reference this entry */
- if (is_array($config['load_balancer']['virtual_server'])) {
- foreach ($config['load_balancer']['virtual_server'] as $vs) {
- if ($vs['poolname'] == $a_pool[$_GET['id']]['name']) {
- $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one virtual server.");
- break;
- }
- }
- }
-
- if (!$input_errors) {
- unset($a_pool[$_GET['id']]);
- write_config();
- mark_subsystem_dirty('loadbalancer');
- header("Location: load_balancer_pool.php");
- exit;
- }
- }
-}
-
-/* Index monitor_type array for easy hyperlinking */
-$mondex = array();
-for ($i = 0; isset($config['load_balancer']['monitor_type'][$i]); $i++) {
- $mondex[$config['load_balancer']['monitor_type'][$i]['name']] = $i;
-}
-for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) {
- $a_pool[$i]['monitor'] = "<a href=\"/load_balancer_monitor_edit.php?id={$mondex[$a_pool[$i]['monitor']]}\">" . htmlspecialchars($a_pool[$i]['monitor']) . "</a>";
-}
-
-$pgtitle = array(gettext("Services"), gettext("Load Balancer"), gettext("Pool"));
-$shortcut_section = "relayd";
-
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="load_balancer_pool.php" method="post">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('loadbalancer')): ?><br/>
-<?php print_info_box_np(sprintf(gettext("The load balancer configuration has been changed%sYou must apply the changes in order for them to take effect."), "<br />"));?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="load balancer pools">
- <tr><td class="tabnavtbl">
- <?php
- /* active tabs */
- $tab_array = array();
- $tab_array[] = array(gettext("Pools"), true, "load_balancer_pool.php");
- $tab_array[] = array(gettext("Virtual Servers"), false, "load_balancer_virtual_server.php");
- $tab_array[] = array(gettext("Monitors"), false, "load_balancer_monitor.php");
- $tab_array[] = array(gettext("Settings"), false, "load_balancer_setting.php");
- display_top_tabs($tab_array);
- ?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
-<?php
- $t = new MainTable();
- $t->edit_uri('load_balancer_pool_edit.php');
- $t->my_uri('load_balancer_pool.php');
- $t->add_column(gettext('Name'), 'name', 10);
- $t->add_column(gettext('Mode'), 'mode', 10);
- $t->add_column(gettext('Servers'), 'servers', 15);
- $t->add_column(gettext('Port'), 'port', 10);
- $t->add_column(gettext('Monitor'), 'monitor', 10);
- $t->add_column(gettext('Description'), 'descr', 25);
- $t->add_button('edit');
- $t->add_button('dup');
- $t->add_button('del');
- $t->add_content_array($a_pool);
- $t->display();
-?>
- </div>
- </td>
- </tr>
- <tr>
- <td>
- <br />
- <span class="red"><strong><?=gettext("Hint:");?></strong></span>
- <br />
- <?= sprintf(gettext("The Load Balancer in %s 2.0 is for server load balancing, not Multi-WAN. For load balancing or failover for multiple WANs, use "), $g['product_name']);?>
- <a href="/system_gateway_groups.php"><?= gettext("Gateway Groups"); ?></a>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/load_balancer_pool_edit.php b/usr/local/www/load_balancer_pool_edit.php
deleted file mode 100644
index cf5c72f..0000000
--- a/usr/local/www/load_balancer_pool_edit.php
+++ /dev/null
@@ -1,368 +0,0 @@
-<?php
-/* $Id$ */
-/*
- load_balancer_pool_edit.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2005-2008 Bill Marquette <bill.marquette@gmail.com>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-loadbalancer-pool-edit
-##|*NAME=Load Balancer: Pool: Edit page
-##|*DESCR=Allow access to the 'Load Balancer: Pool: Edit' page.
-##|*MATCH=load_balancer_pool_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("filter.inc");
-require_once("util.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/load_balancer_pool.php');
-}
-
-if (!is_array($config['load_balancer']['lbpool'])) {
- $config['load_balancer']['lbpool'] = array();
-}
-$a_pool = &$config['load_balancer']['lbpool'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_pool[$id]) {
- $pconfig['name'] = $a_pool[$id]['name'];
- $pconfig['mode'] = $a_pool[$id]['mode'];
- $pconfig['descr'] = $a_pool[$id]['descr'];
- $pconfig['port'] = $a_pool[$id]['port'];
- $pconfig['retry'] = $a_pool[$id]['retry'];
- $pconfig['servers'] = &$a_pool[$id]['servers'];
- $pconfig['serversdisabled'] = &$a_pool[$id]['serversdisabled'];
- $pconfig['monitor'] = $a_pool[$id]['monitor'];
-}
-
-$changedesc = gettext("Load Balancer: Pool:") . " ";
-$changecount = 0;
-
-if ($_POST) {
- $changecount++;
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "name mode port monitor servers");
- $reqdfieldsn = array(gettext("Name"), gettext("Mode"), gettext("Port"), gettext("Monitor"), gettext("Server List"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- /* Ensure that our pool names are unique */
- for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) {
- if (($_POST['name'] == $config['load_balancer']['lbpool'][$i]['name']) && ($i != $id)) {
- $input_errors[] = gettext("This pool name has already been used. Pool names must be unique.");
- }
- }
-
- if (preg_match('/[ \/]/', $_POST['name'])) {
- $input_errors[] = gettext("You cannot use spaces or slashes in the 'name' field.");
- }
-
- if (strlen($_POST['name']) > 16) {
- $input_errors[] = gettext("The 'name' field must be 16 characters or less.");
- }
-
- if (in_array($_POST['name'], $reserved_table_names)) {
- $input_errors[] = sprintf(gettext("The name '%s' is a reserved word and cannot be used."), $_POST['name']);
- }
-
- if (is_alias($_POST['name'])) {
- $input_errors[] = sprintf(gettext("Sorry, an alias is already named %s."), $_POST['name']);
- }
-
- if (!is_portoralias($_POST['port'])) {
- $input_errors[] = gettext("The port must be an integer between 1 and 65535, or a port alias.");
- }
-
- // May as well use is_port as we want a positive integer and such.
- if (!empty($_POST['retry']) && !is_port($_POST['retry'])) {
- $input_errors[] = gettext("The retry value must be an integer between 1 and 65535.");
- }
-
- if (is_array($_POST['servers'])) {
- foreach ($pconfig['servers'] as $svrent) {
- if (!is_ipaddr($svrent) && !is_subnetv4($svrent)) {
- $input_errors[] = sprintf(gettext("%s is not a valid IP address or IPv4 subnet (in \"enabled\" list)."), $svrent);
- } else if (is_subnetv4($svrent) && subnet_size($svrent) > 64) {
- $input_errors[] = sprintf(gettext("%s is a subnet containing more than 64 IP addresses (in \"enabled\" list)."), $svrent);
- }
- }
- }
- if (is_array($_POST['serversdisabled'])) {
- foreach ($pconfig['serversdisabled'] as $svrent) {
- if (!is_ipaddr($svrent) && !is_subnetv4($svrent)) {
- $input_errors[] = sprintf(gettext("%s is not a valid IP address or IPv4 subnet (in \"disabled\" list)."), $svrent);
- } else if (is_subnetv4($svrent) && subnet_size($svrent) > 64) {
- $input_errors[] = sprintf(gettext("%s is a subnet containing more than 64 IP addresses (in \"disabled\" list)."), $svrent);
- }
- }
- }
- $m = array();
- for ($i = 0; isset($config['load_balancer']['monitor_type'][$i]); $i++) {
- $m[$config['load_balancer']['monitor_type'][$i]['name']] = $config['load_balancer']['monitor_type'][$i];
- }
-
- if (!isset($m[$_POST['monitor']])) {
- $input_errors[] = gettext("Invalid monitor chosen.");
- }
-
- if (!$input_errors) {
- $poolent = array();
- if (isset($id) && $a_pool[$id]) {
- $poolent = $a_pool[$id];
- }
- if ($poolent['name'] != "") {
- $changedesc .= sprintf(gettext(" modified '%s' pool:"), $poolent['name']);
- }
-
- update_if_changed("name", $poolent['name'], $_POST['name']);
- update_if_changed("mode", $poolent['mode'], $_POST['mode']);
- update_if_changed("description", $poolent['descr'], $_POST['descr']);
- update_if_changed("port", $poolent['port'], $_POST['port']);
- update_if_changed("retry", $poolent['retry'], $_POST['retry']);
- update_if_changed("servers", $poolent['servers'], $_POST['servers']);
- update_if_changed("serversdisabled", $poolent['serversdisabled'], $_POST['serversdisabled']);
- update_if_changed("monitor", $poolent['monitor'], $_POST['monitor']);
-
- if (isset($id) && $a_pool[$id]) {
- /* modify all virtual servers with this name */
- for ($i = 0; isset($config['load_balancer']['virtual_server'][$i]); $i++) {
- if ($config['load_balancer']['virtual_server'][$i]['lbpool'] == $a_pool[$id]['name']) {
- $config['load_balancer']['virtual_server'][$i]['lbpool'] = $poolent['name'];
- }
- }
- $a_pool[$id] = $poolent;
- } else {
- $a_pool[] = $poolent;
- }
-
- if ($changecount > 0) {
- /* Mark pool dirty */
- mark_subsystem_dirty('loadbalancer');
- write_config($changedesc);
- }
-
- header("Location: load_balancer_pool.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("Load Balancer"), gettext("Pool"), gettext("Edit"));
-$shortcut_section = "relayd";
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-function clearcombo() {
- for (var i = document.iform.serversSelect.options.length - 1; i >= 0; i--) {
- document.iform.serversSelect.options[i] = null;
- }
- document.iform.serversSelect.selectedIndex = -1;
-}
-//]]>
-</script>
-
-<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
-<script type="text/javascript" src="/javascript/suggestions.js"></script>
-
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-
-<form action="load_balancer_pool_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="load balancer pool entry">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Add/edit Load Balancer - Pool entry"); ?></td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <input name="name" type="text" <?if (isset($pconfig['name'])) echo "value=\"" . htmlspecialchars($pconfig['name']) . "\"";?> size="16" maxlength="16" />
- </td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Mode"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <select id="mode" name="mode" onchange="enforceFailover(); checkPoolControls();">
- <option value="loadbalance" <?if (!isset($pconfig['mode']) || ($pconfig['mode'] == "loadbalance")) echo "selected=\"selected\"";?>><?=gettext("Load Balance");?></option>
- <option value="failover" <?if ($pconfig['mode'] == "failover") echo "selected=\"selected\"";?>><?=gettext("Manual Failover");?></option>
- </select>
- </td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <input name="descr" type="text" <?if (isset($pconfig['descr'])) echo "value=\"" . htmlspecialchars($pconfig['descr']) . "\"";?> size="64" />
- </td>
- </tr>
-
- <tr align="left">
- <td width="22%" valign="top" id="monitorport_text" class="vncellreq"><?=gettext("Port"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <input class="formfldalias" id="port" name="port" type="text" <?if (isset($pconfig['port'])) echo "value=\"" . htmlspecialchars($pconfig['port']) . "\"";?> size="16" maxlength="16" /><br />
- <div id="monitorport_desc">
- <?=gettext("This is the port your servers are listening on."); ?><br />
- <?=gettext("You may also specify a port alias listed in Firewall -&gt; Aliases here."); ?>
- </div>
- <script type="text/javascript">
- //<![CDATA[
- var addressarray = <?= json_encode(get_alias_list(array("port", "url_ports", "urltable_ports"))) ?>;
- var oTextbox1 = new AutoSuggestControl(document.getElementById("port"), new StateSuggestions(addressarray));
- //]]>
- </script>
- </td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" id="retry_text" class="vncell"><?=gettext("Retry"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <input name="retry" type="text" <?if (isset($pconfig['retry'])) echo "value=\"" . htmlspecialchars($pconfig['retry']) . "\"";?> size="16" maxlength="16" /><br />
- <div id="retry_desc"><?=gettext("Optionally specify how many times to retry checking a server before declaring it down."); ?></div>
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Add item to pool"); ?></td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Monitor"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <?php if (count($config['load_balancer']['monitor_type'])): ?>
- <select id="monitor" name="monitor">
- <?php
- foreach ($config['load_balancer']['monitor_type'] as $monitor) {
- if ($monitor['name'] == $pconfig['monitor']) {
- $selected=" selected=\"selected\"";
- } else {
- $selected = "";
- }
- echo "<option value=\"{$monitor['name']}\"{$selected}>{$monitor['name']}</option>";
- }
- ?>
- </select>
- <?php else: ?>
- <b><?=gettext("NOTE"); ?>:</b> <?=gettext("Please add a monitor IP address on the monitors tab if you wish to use this feature."); ?>
- <?php endif; ?>
- </td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Server IP Address"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <input name="ipaddr" type="text" size="16" style="float: left;" />
- <input class="formbtn" type="button" name="button1" value="<?=gettext("Add to pool"); ?>" onclick="AddServerToPool(document.iform); enforceFailover(); checkPoolControls();" /><br />
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Current Pool Members"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Members"); ?></td>
- <td width="78%" class="vtable" colspan="2" valign="top">
- <table summary="members">
- <tbody>
- <tr>
- <td align="center">
- <b><?=gettext("Pool Disabled"); ?></b>
- <br/>
- <select id="serversDisabledSelect" name="serversdisabled[]" multiple="multiple" size="5">
-<?php
- if (is_array($pconfig['serversdisabled'])) {
- foreach ($pconfig['serversdisabled'] as $svrent) {
- if ($svrent != '') echo " <option value=\"{$svrent}\">{$svrent}</option>\n";
- }
- }
-?>
- </select>
- <input class="formbtn" type="button" name="removeDisabled" value="<?=gettext("Remove"); ?>" onclick="RemoveServerFromPool(document.iform, 'serversdisabled[]');" />
- </td>
-
- <td valign="middle">
- <input class="formbtn" type="button" id="moveToEnabled" name="moveToEnabled" value=">" onclick="moveOptions(document.iform.serversDisabledSelect, document.iform.serversSelect); checkPoolControls();" /><br />
- <input class="formbtn" type="button" id="moveToDisabled" name="moveToDisabled" value="<" onclick="moveOptions(document.iform.serversSelect, document.iform.serversDisabledSelect); checkPoolControls();" />
- </td>
-
- <td align="center">
- <b><?=gettext("Enabled (default)"); ?></b>
- <br/>
- <select id="serversSelect" name="servers[]" multiple="multiple" size="5">
-<?php
- if (is_array($pconfig['servers'])) {
- foreach ($pconfig['servers'] as $svrent) {
- echo " <option value=\"{$svrent}\">{$svrent}</option>\n";
- }
- }
-?>
- </select>
- <input class="formbtn" type="button" name="removeEnabled" value="<?=gettext("Remove"); ?>" onclick="RemoveServerFromPool(document.iform, 'servers[]');" />
- </td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <br />
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="AllServers('serversSelect', true); AllServers('serversDisabledSelect', true);" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_pool[$id] && $_GET['act'] != 'dup'): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<br />
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/load_balancer_setting.php b/usr/local/www/load_balancer_setting.php
deleted file mode 100644
index d82f341..0000000
--- a/usr/local/www/load_balancer_setting.php
+++ /dev/null
@@ -1,173 +0,0 @@
-<?php
-/* $Id$ */
-/*
- load_balancer_setting.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2008 Bill Marquette <bill.marquette@gmail.com>.
- Copyright (C) 2012 Pierre POMES <pierre.pomes@gmail.com>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-services-loadbalancer-setting
-##|*NAME=Services: Load Balancer: setting page
-##|*DESCR=Allow access to the 'Settings: Load Balancer: Settings' page.
-##|*MATCH=load_balancer_setting.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("util.inc");
-
-if (!is_array($config['load_balancer']['setting'])) {
- $config['load_balancer']['setting'] = array();
-}
-$lbsetting = &$config['load_balancer']['setting'];
-
-if ($_POST) {
-
- if ($_POST['apply']) {
- $retval = 0;
- $retval |= filter_configure();
- $retval |= relayd_configure();
-
- $savemsg = get_std_save_message($retval);
- clear_subsystem_dirty('loadbalancer');
- } else {
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if ($_POST['timeout'] && !is_numeric($_POST['timeout'])) {
- $input_errors[] = gettext("Timeout must be a numeric value");
- }
-
- if ($_POST['interval'] && !is_numeric($_POST['interval'])) {
- $input_errors[] = gettext("Interval must be a numeric value");
- }
-
- if ($_POST['prefork']) {
- if (!is_numeric($_POST['prefork'])) {
- $input_errors[] = gettext("Prefork must be a numeric value");
- } else {
- if (($_POST['prefork'] <= 0) || ($_POST['prefork'] > 32)) {
- $input_errors[] = gettext("Prefork value must be between 1 and 32");
- }
- }
- }
-
- /* update config if user entry is valid */
- if (!$input_errors) {
- $lbsetting['timeout'] = $_POST['timeout'];
- $lbsetting['interval'] = $_POST['interval'];
- $lbsetting['prefork'] = $_POST['prefork'];
-
- write_config();
- mark_subsystem_dirty('loadbalancer');
- }
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("Load Balancer"), gettext("Settings"));
-$shortcut_section = "relayd";
-
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="load_balancer_setting.php" method="post">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('loadbalancer')): ?><br/>
-<?php print_info_box_np(gettext("The load balancer configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="load balancer settings">
- <tr>
- <td class="tabnavtbl">
-<?php
- /* active tabs */
- $tab_array = array();
- $tab_array[] = array(gettext("Pools"), false, "load_balancer_pool.php");
- $tab_array[] = array(gettext("Virtual Servers"), false, "load_balancer_virtual_server.php");
- $tab_array[] = array(gettext("Monitors"), false, "load_balancer_monitor.php");
- $tab_array[] = array(gettext("Settings"), true, "load_balancer_setting.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Relayd global settings"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("timeout") ; ?></td>
- <td width="78%" class="vtable">
- <input name="timeout" id="timeout" value="<?php if ($lbsetting['timeout'] <> "") echo $lbsetting['timeout']; ?>" class="formfld unknown" />
- <br />
- <?=gettext("Set the global timeout in milliseconds for checks. Leave blank to use the default value of 1000 ms "); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("interval") ; ?></td>
- <td width="78%" class="vtable">
- <input name="interval" id="interval" value="<?php if ($lbsetting['interval'] <> "") echo $lbsetting['interval']; ?>" class="formfld unknown" />
- <br />
- <?=gettext("Set the interval in seconds at which the member of a pool will be checked. Leave blank to use the default interval of 10 seconds"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("prefork") ; ?></td>
- <td width="78%" class="vtable">
- <input name="prefork" id="prefork" value="<?php if ($lbsetting['prefork'] <> "") echo $lbsetting['prefork']; ?>" class="formfld unknown" />
- <br />
- <?=gettext("Number of processes used by relayd for dns protocol. Leave blank to use the default value of 5 processes"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/load_balancer_virtual_server.php b/usr/local/www/load_balancer_virtual_server.php
deleted file mode 100644
index dec55f1..0000000
--- a/usr/local/www/load_balancer_virtual_server.php
+++ /dev/null
@@ -1,152 +0,0 @@
-<?php
-/* $Id$ */
-/*
- load_balancer_virtual_server.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2005-2008 Bill Marquette <bill.marquette@gmail.com>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-services-loadbalancer-virtualservers
-##|*NAME=Services: Load Balancer: Virtual Servers page
-##|*DESCR=Allow access to the 'Services: Load Balancer: Virtual Servers' page.
-##|*MATCH=load_balancer_virtual_server.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("vslb.inc");
-
-if (!is_array($config['load_balancer']['virtual_server'])) {
- $config['load_balancer']['virtual_server'] = array();
-}
-$a_vs = &$config['load_balancer']['virtual_server'];
-
-if ($_POST) {
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
- $retval = 0;
- $retval |= filter_configure();
- $retval |= relayd_configure();
- $savemsg = get_std_save_message($retval);
- /* Wipe out old relayd anchors no longer in use. */
- cleanup_lb_marked();
- clear_subsystem_dirty('loadbalancer');
- }
-}
-
-if ($_GET['act'] == "del") {
- if (array_key_exists($_GET['id'], $a_vs)) {
-
- if (!$input_errors) {
- cleanup_lb_mark_anchor($a_vs[$_GET['id']]['name']);
- unset($a_vs[$_GET['id']]);
- write_config();
- mark_subsystem_dirty('loadbalancer');
- header("Location: load_balancer_virtual_server.php");
- exit;
- }
- }
-}
-
-/* Index lbpool array for easy hyperlinking */
-$poodex = array();
-for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) {
- $poodex[$config['load_balancer']['lbpool'][$i]['name']] = $i;
-}
-for ($i = 0; isset($config['load_balancer']['virtual_server'][$i]); $i++) {
- if ($a_vs[$i]) {
- $a_vs[$i]['poolname'] = "<a href=\"/load_balancer_pool_edit.php?id={$poodex[$a_vs[$i]['poolname']]}\">" . htmlspecialchars($a_vs[$i]['poolname']) . "</a>";
- if ($a_vs[$i]['sitedown'] != '') {
- $a_vs[$i]['sitedown'] = "<a href=\"/load_balancer_pool_edit.php?id={$poodex[$a_vs[$i]['sitedown']]}\">" . htmlspecialchars($a_vs[$i]['sitedown']) . "</a>";
- } else {
- $a_vs[$i]['sitedown'] = 'none';
- }
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("Load Balancer"), gettext("Virtual Servers"));
-$shortcut_section = "relayd-virtualservers";
-
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="load_balancer_virtual_server.php" method="post">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('loadbalancer')): ?><br/>
-<?php print_info_box_np(gettext("The virtual server configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="load balancer virtual server">
- <tr><td class="tabnavtbl">
-<?php
- /* active tabs */
- $tab_array = array();
- $tab_array[] = array(gettext("Pools"), false, "load_balancer_pool.php");
- $tab_array[] = array(gettext("Virtual Servers"), true, "load_balancer_virtual_server.php");
- $tab_array[] = array(gettext("Monitors"), false, "load_balancer_monitor.php");
- $tab_array[] = array(gettext("Settings"), false, "load_balancer_setting.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
-<?php
- $t = new MainTable();
- $t->edit_uri('load_balancer_virtual_server_edit.php');
- $t->my_uri('load_balancer_virtual_server.php');
- $t->add_column(gettext('Name'), 'name', 10);
- $t->add_column(gettext('Protocol'), 'relay_protocol', 10);
- $t->add_column(gettext('IP Address'), 'ipaddr', 15);
- $t->add_column(gettext('Port'), 'port', 10);
- $t->add_column(gettext('Pool'), 'poolname', 15);
- $t->add_column(gettext('Fall Back Pool'), 'sitedown', 15);
- $t->add_column(gettext('Description'), 'descr', 30);
- $t->add_button('edit');
- $t->add_button('dup');
- $t->add_button('del');
- $t->add_content_array($a_vs);
- $t->display();
-?>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/load_balancer_virtual_server_edit.php b/usr/local/www/load_balancer_virtual_server_edit.php
deleted file mode 100644
index 39bc6c9..0000000
--- a/usr/local/www/load_balancer_virtual_server_edit.php
+++ /dev/null
@@ -1,315 +0,0 @@
-<?php
-/* $Id$ */
-/*
- load_balancer_virtual_server_edit.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2005-2008 Bill Marquette <bill.marquette@gmail.com>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-loadbalancer-virtualserver-edit
-##|*NAME=Load Balancer: Virtual Server: Edit page
-##|*DESCR=Allow access to the 'Load Balancer: Virtual Server: Edit' page.
-##|*MATCH=load_balancer_virtual_server_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/load_balancer_virtual_server.php');
-}
-
-if (!is_array($config['load_balancer']['virtual_server'])) {
- $config['load_balancer']['virtual_server'] = array();
-}
-$a_vs = &$config['load_balancer']['virtual_server'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_vs[$id]) {
- $pconfig = $a_vs[$id];
-} else {
- // Sane defaults
- $pconfig['mode'] = 'redirect_mode';
-}
-
-$changedesc = gettext("Load Balancer: Virtual Server:") . " ";
-$changecount = 0;
-
-if ($_POST) {
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- switch ($pconfig['mode']) {
- case "redirect_mode": {
- $reqdfields = explode(" ", "ipaddr name mode");
- $reqdfieldsn = array(gettext("IP Address"), gettext("Name"), gettext("Mode"));
- break;
- }
- case "relay_mode": {
- $reqdfields = explode(" ", "ipaddr name mode relay_protocol");
- $reqdfieldsn = array(gettext("IP Address"), gettext("Name"), gettext("Mode"), gettext("Relay Protocol"));
- break;
- }
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- for ($i = 0; isset($config['load_balancer']['virtual_server'][$i]); $i++) {
- if (($_POST['name'] == $config['load_balancer']['virtual_server'][$i]['name']) && ($i != $id)) {
- $input_errors[] = gettext("This virtual server name has already been used. Virtual server names must be unique.");
- }
- }
-
- if (preg_match('/[ \/]/', $_POST['name'])) {
- $input_errors[] = gettext("You cannot use spaces or slashes in the 'name' field.");
- }
-
- if (strlen($_POST['name']) > 32) {
- $input_errors[] = gettext("The 'name' field must be 32 characters or less.");
- }
-
- if ($_POST['port'] != "" && !is_portoralias($_POST['port'])) {
- $input_errors[] = gettext("The port must be an integer between 1 and 65535, a port alias, or left blank.");
- }
-
- if (!is_ipaddroralias($_POST['ipaddr']) && !is_subnetv4($_POST['ipaddr'])) {
- $input_errors[] = sprintf(gettext("%s is not a valid IP address, IPv4 subnet, or alias."), $_POST['ipaddr']);
- } else if (is_subnetv4($_POST['ipaddr']) && subnet_size($_POST['ipaddr']) > 64) {
- $input_errors[] = sprintf(gettext("%s is a subnet containing more than 64 IP addresses."), $_POST['ipaddr']);
- }
-
- if ((strtolower($_POST['relay_protocol']) == "dns") && !empty($_POST['sitedown'])) {
- $input_errors[] = gettext("You cannot select a Fall Back Pool when using the DNS relay protocol.");
- }
-
- if (!$input_errors) {
- $vsent = array();
- if (isset($id) && $a_vs[$id]) {
- $vsent = $a_vs[$id];
- }
- if ($vsent['name'] != "") {
- $changedesc .= " " . sprintf(gettext("modified '%s' vs:"), $vsent['name']);
- } else {
- $changedesc .= " " . sprintf(gettext("created '%s' vs:"), $_POST['name']);
- }
-
- update_if_changed("name", $vsent['name'], $_POST['name']);
- update_if_changed("descr", $vsent['descr'], $_POST['descr']);
- update_if_changed("poolname", $vsent['poolname'], $_POST['poolname']);
- update_if_changed("port", $vsent['port'], $_POST['port']);
- update_if_changed("sitedown", $vsent['sitedown'], $_POST['sitedown']);
- update_if_changed("ipaddr", $vsent['ipaddr'], $_POST['ipaddr']);
- update_if_changed("mode", $vsent['mode'], $_POST['mode']);
- update_if_changed("relay protocol", $vsent['relay_protocol'], $_POST['relay_protocol']);
-
- if ($_POST['sitedown'] == "") {
- unset($vsent['sitedown']);
- }
-
- if (isset($id) && $a_vs[$id]) {
- if ($a_vs[$id]['name'] != $_POST['name']) {
- /* Because the VS name changed, mark the old name for cleanup. */
- cleanup_lb_mark_anchor($a_vs[$id]['name']);
- }
- $a_vs[$id] = $vsent;
- } else {
- $a_vs[] = $vsent;
- }
-
- if ($changecount > 0) {
- /* Mark virtual server dirty */
- mark_subsystem_dirty('loadbalancer');
- write_config($changedesc);
- }
-
- header("Location: load_balancer_virtual_server.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("Load Balancer"), gettext("Virtual Server"), gettext("Edit"));
-$shortcut_section = "relayd-virtualservers";
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
-<script type="text/javascript" src="/javascript/suggestions.js"></script>
-
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="load_balancer_virtual_server_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="load balancer server entry">
- <tr>
- <td colspan="3" valign="top" class="listtopic"><?=gettext("Edit Load Balancer - Virtual Server entry"); ?></td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <input name="name" type="text" <?if (isset($pconfig['name'])) echo "value=\"" . htmlspecialchars($pconfig['name']) . "\"";?> size="32" maxlength="32" />
- </td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <input name="descr" type="text" <?if (isset($pconfig['descr'])) echo "value=\"" . htmlspecialchars($pconfig['descr']) . "\"";?> size="64" />
- </td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("IP Address"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <input class="formfldalias" id="ipaddr" name="ipaddr" type="text" <?if (isset($pconfig['ipaddr'])) echo "value=\"" . htmlspecialchars($pconfig['ipaddr']) . "\"";?> size="39" maxlength="39" />
- <br /><?=gettext("This is normally the WAN IP address that you would like the server to listen on. All connections to this IP and port will be forwarded to the pool cluster."); ?>
- <br /><?=gettext("You may also specify a host alias listed in Firewall -&gt; Aliases here."); ?>
- <script type="text/javascript">
- //<![CDATA[
- var host_aliases = <?= json_encode(get_alias_list(array("host", "network", "url", "urltable"))) ?>;
- var oTextbox1 = new AutoSuggestControl(document.getElementById("ipaddr"), new StateSuggestions(host_aliases));
- //]]>
- </script>
- </td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" class="vncell"><?=gettext("Port"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <input class="formfldalias" name="port" id="port" type="text" <?if (isset($pconfig['port'])) echo "value=\"" . htmlspecialchars($pconfig['port']) . "\"";?> size="16" maxlength="16" />
- <br /><?=gettext("This is the port that the clients will connect to. All connections to this port will be forwarded to the pool cluster."); ?>
- <br /><?=gettext("If left blank, listening ports from the pool will be used."); ?>
- <br /><?=gettext("You may also specify a port alias listed in Firewall -&gt; Aliases here."); ?>
- <script type="text/javascript">
- //<![CDATA[
- var port_aliases = <?= json_encode(get_alias_list(array("port", "url_ports", "urltable_ports"))) ?>;
- var oTextbox2 = new AutoSuggestControl(document.getElementById("port"), new StateSuggestions(port_aliases));
- //]]>
- </script>
- </td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Virtual Server Pool"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <?php if (count($config['load_balancer']['lbpool']) == 0): ?>
- <b><?=gettext("NOTE:"); ?></b> <?=gettext("Please add a pool on the Pools tab to use this feature."); ?>
- <?php else: ?>
- <select id="poolname" name="poolname">
- <?php
- for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) {
- $selected = "";
- if ($config['load_balancer']['lbpool'][$i]['name'] == $pconfig['poolname']) {
- $selected = " selected=\"selected\"";
- }
- echo "<option value=\"" . htmlspecialchars($config['load_balancer']['lbpool'][$i]['name']) . "\"{$selected}>{$config['load_balancer']['lbpool'][$i]['name']}</option>";
- }
- ?>
- </select>
- <?php endif; ?>
- </td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Fall Back Pool"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <?php if (count($config['load_balancer']['lbpool']) == 0): ?>
- <b><?=gettext("NOTE:"); ?></b> <?=gettext("Please add a pool on the Pools tab to use this feature."); ?>
- <?php else: ?>
- <select id="sitedown" name="sitedown">
- <option value=""<?=htmlspecialchars($pconfig['sitedown']) == '' ? ' selected' : ''?>><?=gettext("none"); ?></option>
- <?php
- for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) {
- $selected = "";
- if ($config['load_balancer']['lbpool'][$i]['name'] == $pconfig['sitedown']) {
- $selected = " selected=\"selected\"";
- }
- echo "<option value=\"" . htmlspecialchars($config['load_balancer']['lbpool'][$i]['name']) . "\"{$selected}>{$config['load_balancer']['lbpool'][$i]['name']}</option>";
- }
- ?>
- </select>
- <br /><?=gettext("The server pool to which clients will be redirected if *ALL* servers in the Virtual Server Pool are offline."); ?>
- <br /><?=gettext("This option is NOT compatible with the DNS relay protocol."); ?>
- <?php endif; ?>
- </td>
- </tr>
- <tr style="display:none;"><td><input type="hidden" name="mode" value="redirect_mode" /></td></tr>
-<!--
- <tr align="left">
- <td width="22%" valign="top" class="vncellreq">Mode</td>
- <td width="78%" class="vtable" colspan="2">
- <input id="redirect_mode" type="radio" name="mode" value="redirect"<?=htmlspecialchars($pconfig['mode']) == 'redirect' ? ' checked="checked"': ''?> /> Redirect
- <input id="relay_mode" type="radio" name="mode" value="relay"<?=htmlspecialchars($pconfig['mode']) == 'relay' ? ' checked="checked"': ''?> /> Relay
- <br />
- </td>
- </tr>
--->
- <tr id="relay" align="left">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Relay Protocol"); ?></td>
- <td width="78%" class="vtable" colspan="2">
- <select id="relay_protocol" name="relay_protocol">
- <?php
- $lb_def_protos = array("tcp", "dns");
- foreach ($lb_def_protos as $lb_proto) {
- $selected = "";
- if ($pconfig['relay_protocol'] == $lb_proto) {
- $selected = " selected=\"selected\"";
- }
- echo "<option value=\"{$lb_proto}\"{$selected}>{$lb_proto}</option>";
- }
- ?>
- </select>
- <br />
- </td>
- </tr>
- <tr align="left">
- <td width="22%" valign="top">&nbsp;</td>
- <td align="left" valign="bottom" width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Submit"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_vs[$id] && $_GET['act'] != 'dup'): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<br />
-<span class="red"><strong><?=gettext("Note:"); ?></strong></span> <?=gettext("Don't forget to add a firewall rule for the virtual server/pool after you're finished setting it up."); ?>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/logobig.jpg b/usr/local/www/logobig.jpg
deleted file mode 100755
index 2ef196d..0000000
--- a/usr/local/www/logobig.jpg
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/niftycssCode.css b/usr/local/www/niftycssCode.css
deleted file mode 100755
index ec4af80..0000000
--- a/usr/local/www/niftycssCode.css
+++ /dev/null
@@ -1,21 +0,0 @@
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 0px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} \ No newline at end of file
diff --git a/usr/local/www/niftycssprintCode.css b/usr/local/www/niftycssprintCode.css
deleted file mode 100755
index e856b5b..0000000
--- a/usr/local/www/niftycssprintCode.css
+++ /dev/null
@@ -1 +0,0 @@
-.rtop,.rbottom,.artop,.arbottom{display: none}
diff --git a/usr/local/www/pkg.php b/usr/local/www/pkg.php
deleted file mode 100755
index c56ece5..0000000
--- a/usr/local/www/pkg.php
+++ /dev/null
@@ -1,582 +0,0 @@
-<?php
-/* $Id$ */
-/*
- pkg.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004-2012 Scott Ullrich <sullrich@gmail.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: pkgs
-*/
-
-##|+PRIV
-##|*IDENT=page-package-settings
-##|*NAME=Package: Settings page
-##|*DESCR=Allow access to the 'Package: Settings' page.
-##|*MATCH=pkg.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("pkg-utils.inc");
-
-function gentitle_pkg($pgname) {
- global $config;
- return $config['system']['hostname'] . "." . $config['system']['domain'] . " - " . $pgname;
-}
-
-function domTT_title($title_msg) {
- print "onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\" onmouseover=\"domTT_activate(this, event, 'content', '".gettext($title_msg)."', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle');\"";
-}
-
-$xml = $_REQUEST['xml'];
-
-if ($xml == "") {
- print_info_box_np(gettext("ERROR: No package defined."));
- exit;
-} else {
- if (file_exists("/usr/local/pkg/" . $xml)) {
- $pkg = parse_xml_config_pkg("/usr/local/pkg/" . $xml, "packagegui");
- } else {
- echo "File not found " . htmlspecialchars($xml);
- exit;
- }
-}
-
-if ($pkg['donotsave'] <> "") {
- header("Location: pkg_edit.php?xml=" . $xml);
- exit;
-}
-
-if ($pkg['include_file'] != "") {
- require_once($pkg['include_file']);
-}
-
-$package_name = $pkg['menu'][0]['name'];
-$section = $pkg['menu'][0]['section'];
-$config_path = $pkg['configpath'];
-$title = $pkg['title'];
-
-if ($_REQUEST['startdisplayingat']) {
- $startdisplayingat = $_REQUEST['startdisplayingat'];
-}
-
-if ($_REQUEST['display_maximum_rows']) {
- if ($_REQUEST['display_maximum_rows']) {
- $display_maximum_rows = $_REQUEST['display_maximum_rows'];
- }
-}
-
-$evaledvar = $config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'];
-
-if ($_GET['act'] == "update") {
-
- if (is_array($config['installedpackages'][$pkg['name']]) && $pkg['name'] != "" && $_REQUEST['ids'] !="") {
- #get current values
- $current_values=$config['installedpackages'][$pkg['name']]['config'];
- #get updated ids
- parse_str($_REQUEST['ids'], $update_list);
- #sort ids to know what to change
- #useful to do not lose data when using sorting and paging
- $sort_list=$update_list['ids'];
- sort($sort_list);
- #apply updates
- foreach ($update_list['ids'] as $key=> $value) {
- $config['installedpackages'][$pkg['name']]['config'][$sort_list[$key]]=$current_values[$update_list['ids'][$key]];
- }
- #save current config
- write_config();
- #sync package
- eval ("{$pkg['custom_php_resync_config_command']}");
- }
- #function called via jquery, no need to continue after save changes.
- exit;
-}
-if ($_GET['act'] == "del") {
- // loop through our fieldnames and automatically setup the fieldnames
- // in the environment. ie: a fieldname of username with a value of
- // testuser would automatically eval $username = "testuser";
- foreach ($evaledvar as $ip) {
- if ($pkg['adddeleteeditpagefields']['columnitem']) {
- foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) {
- ${xml_safe_fieldname($column['fielddescr'])} = $ip[xml_safe_fieldname($column['fieldname'])];
- }
- }
- }
-
- $a_pkg = &$config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'];
-
- if ($a_pkg[$_GET['id']]) {
- unset($a_pkg[$_GET['id']]);
- write_config();
- if ($pkg['custom_delete_php_command'] <> "") {
- if ($pkg['custom_php_command_before_form'] <> "") {
- eval($pkg['custom_php_command_before_form']);
- }
- eval($pkg['custom_delete_php_command']);
- }
- header("Location: pkg.php?xml=" . $xml);
- exit;
- }
-}
-
-ob_start();
-
-$iflist = get_configured_interface_with_descr(false, true);
-$evaledvar = $config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'];
-
-if ($pkg['custom_php_global_functions'] <> "") {
- eval($pkg['custom_php_global_functions']);
-}
-
-if ($pkg['custom_php_command_before_form'] <> "") {
- eval($pkg['custom_php_command_before_form']);
-}
-
-$pgtitle = array($title);
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript" src="javascript/domTT/domLib.js"></script>
-<script type="text/javascript" src="javascript/domTT/domTT.js"></script>
-<script type="text/javascript" src="javascript/domTT/behaviour.js"></script>
-<script type="text/javascript" src="javascript/domTT/fadomatic.js"></script>
-<script type="text/javascript">
-//<![CDATA[
- function setFilter(filtertext) {
- jQuery('#pkg_filter').val(filtertext);
- document.pkgform.submit();
- }
-
- <?php
- if ($pkg['adddeleteeditpagefields']['movable']) {
- ?>
- jQuery(document).ready(function() {
- jQuery('#mainarea table tbody').sortable({
- items: 'tr.sortable',
- cursor: 'move',
- distance: 10,
- opacity: 0.8,
- helper: function(e, ui) {
- ui.children().each(function() {
- jQuery(this).width(jQuery(this).width());
- });
- return ui;
- },
- });
- });
- function save_changes_to_xml(xml) {
- var ids=jQuery('#mainarea table tbody').sortable('serialize', {key:"ids[]"});
- var strloading="<img src='/themes/<?= $g['theme']; ?>/images/misc/loader.gif' alt='loader' /> " + "<?=gettext('Saving changes...');?>";
- if (confirm("<?=gettext("Do you really want to save changes?");?>")) {
- jQuery.ajax({
- type: 'get',
- cache: false,
- url: "<?=$_SERVER['SCRIPT_NAME'];?>",
- data: {xml:'<?=$xml?>', act:'update', ids: ids},
- beforeSend: function() {
- jQuery('#savemsg').empty().html(strloading);
- },
- error: function(data) {
- jQuery('#savemsg').empty().html('Error:' + data);
- },
- success: function(data) {
- jQuery('#savemsg').empty().html(data);
- }
- });
- }
- }
- <?php
- }
- ?>
-//]]>
-</script>
-<form action="pkg.php" name="pkgform" method="get">
-<input type='hidden' name='xml' value='<?=$_REQUEST['xml']?>' />
-<?php if ($_GET['savemsg'] <> "") $savemsg = htmlspecialchars($_GET['savemsg']); ?>
-<div id="savemsg"></div>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="package settings">
-<?php
- if ($pkg['tabs'] <> "") {
- $tab_array = array();
- foreach ($pkg['tabs']['tab'] as $tab) {
- if ($tab['tab_level']) {
- $tab_level = $tab['tab_level'];
- } else {
- $tab_level = 1;
- }
- if (isset($tab['active'])) {
- $active = true;
- } else {
- $active = false;
- }
- if (isset($tab['no_drop_down'])) {
- $no_drop_down = true;
- }
- $urltmp = "";
- if ($tab['url'] <> "") {
- $urltmp = $tab['url'];
- }
- if ($tab['xml'] <> "") {
- $urltmp = "pkg_edit.php?xml=" . $tab['xml'];
- }
-
- $addresswithport = getenv("HTTP_HOST");
- $colonpos = strpos($addresswithport, ":");
- if ($colonpos !== False) {
- //my url is actually just the IP address of the pfsense box
- $myurl = substr($addresswithport, 0, $colonpos);
- } else {
- $myurl = $addresswithport;
- }
- // eval url so that above $myurl item can be processed if need be.
- $url = str_replace('$myurl', $myurl, $urltmp);
-
- $tab_array[$tab_level][] = array(
- $tab['text'],
- $active,
- $url
- );
- }
-
- ksort($tab_array);
- foreach ($tab_array as $tab) {
- echo '<tr><td>';
- display_top_tabs($tab, $no_drop_down);
- echo '</td></tr>';
- }
- }
-?>
-<tr><td><div id="mainarea"><table width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabs">
-<?php
- /* Handle filtering bar A-Z */
- $include_filtering_inputbox = false;
- $colspan = 0;
- if ($pkg['adddeleteeditpagefields']['columnitem'] <> "") {
- foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) {
- $colspan++;
- }
- }
- if ($pkg['fields']['field']) {
- // First find the sorting type field if it exists
- foreach ($pkg['fields']['field'] as $field) {
- if ($field['type'] == "sorting") {
- if (isset($field['include_filtering_inputbox'])) {
- $include_filtering_inputbox = true;
- }
- if ($display_maximum_rows < 1) {
- if ($field['display_maximum_rows']) {
- $display_maximum_rows = $field['display_maximum_rows'];
- }
- }
- echo "<tr><td class='listhdrr' colspan='$colspan' align='center'>";
- echo "Filter by: ";
- $isfirst = true;
- for ($char = 65; $char < 91; $char++) {
- if (!$isfirst) {
- echo " | ";
- }
- echo "<a href=\"#\" onclick=\"setFilter('" . chr($char) . "');\">" . chr($char) . "</a>";
- $isfirst = false;
- }
- echo "</td></tr>";
- echo "<tr><td class='listhdrr' colspan='$colspan' align='center'>";
- if ($field['sortablefields']) {
- echo "Filter field: <select name='pkg_filter_type'>";
- foreach ($field['sortablefields']['item'] as $si) {
- if ($si['name'] == $_REQUEST['pkg_filter_type']) {
- $SELECTED = "selected=\"selected\"";
- } else {
- $SELECTED = "";
- }
- echo "<option value='{$si['name']}' {$SELECTED}>{$si['name']}</option>";
- }
- echo "</select>";
- }
- if ($include_filtering_inputbox) {
- echo "&nbsp;&nbsp;Filter text: <input id='pkg_filter' name='pkg_filter' value='" . $_REQUEST['pkg_filter'] . "' /> <input type='submit' value='Filter' />";
- }
- echo "</td></tr><tr><td><font size='-3'>&nbsp;</font></td></tr>";
- }
- }
- }
-?>
- <tr>
-<?php
- if ($display_maximum_rows) {
- $totalpages = ceil(round((count($evaledvar) / $display_maximum_rows), 9));
- $page = 1;
- $tmpcount = 0;
- $tmppp = 0;
- if (is_array($evaledvar)) {
- foreach ($evaledvar as $ipa) {
- if ($tmpcount == $display_maximum_rows) {
- $page++;
- $tmpcount = 0;
- }
- if ($tmppp == $startdisplayingat) {
- break;
- }
- $tmpcount++;
- $tmppp++;
- }
- }
- echo "<tr><td colspan='" . count($pkg['adddeleteeditpagefields']['columnitem']) . "'>";
- echo "<table width='100%' summary=''>";
- echo "<tr>";
- echo "<td align='left'>Displaying page $page of $totalpages</b></td>";
- echo "<td align='right'>Rows per page: <select onchange='document.pkgform.submit();' name='display_maximum_rows'>";
- for ($x = 0; $x < 250; $x++) {
- if ($x == $display_maximum_rows) {
- $SELECTED = "selected=\"selected\"";
- } else {
- $SELECTED = "";
- }
- echo "<option value='$x' $SELECTED>$x</option>\n";
- $x = $x + 4;
- }
- echo "</select></td></tr>";
- echo "</table>";
- echo "</td></tr>";
- }
- $cols = 0;
- if ($pkg['adddeleteeditpagefields']['columnitem'] <> "") {
- foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) {
- echo "<td class=\"listhdrr\">" . $column['fielddescr'] . "</td>";
- $cols++;
- }
- }
-?>
- </tr>
-<?php
- $i = 0;
- $pagination_startingrow = 0;
- $pagination_counter = 0;
- if ($evaledvar) {
- foreach ($evaledvar as $ip) {
- if ($startdisplayingat) {
- if ($i < $startdisplayingat) {
- $i++;
- continue;
- }
- }
- if ($_REQUEST['pkg_filter']) {
- // Handle filtered items
- if ($pkg['fields']['field'] && !$filter_regex) {
- // First find the sorting type field if it exists
- foreach ($pkg['fields']['field'] as $field) {
- if ($field['type'] == "sorting") {
- if ($field['sortablefields']['item']) {
- foreach ($field['sortablefields']['item'] as $sf) {
- if ($sf['name'] == $_REQUEST['pkg_filter_type']) {
- $filter_fieldname = $sf['fieldname'];
- #Use a default regex on sortable fields when none is declared
- if ($sf['regex']) {
- $filter_regex = str_replace("%FILTERTEXT%", $_REQUEST['pkg_filter'], trim($sf['regex']));
- } else {
- $filter_regex = "/{$_REQUEST['pkg_filter']}/i";
- }
- }
- }
- }
- }
- }
- }
- // Do we have something to filter on?
- unset($filter_matches);
- if ($pkg['adddeleteeditpagefields']['columnitem'] <> "") {
- foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) {
- $fieldname = $ip[xml_safe_fieldname($column['fieldname'])];
- if ($column['fieldname'] == $filter_fieldname) {
- if ($filter_regex) {
- //echo "$filter_regex - $fieldname<p/>";
- preg_match($filter_regex, $fieldname, $filter_matches);
- break;
- }
- }
- }
- }
- if (!$filter_matches) {
- $i++;
- continue;
- }
- }
- if ($pkg['adddeleteeditpagefields']['movable']) {
- echo "<tr valign=\"top\" class=\"sortable\" id=\"id_{$i}\">\n";
- } else {
- echo "<tr valign=\"top\">\n";
- }
- if ($pkg['adddeleteeditpagefields']['columnitem'] <> "") {
- foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) {
- if ($column['fieldname'] == "description") {
- $class = "listbg";
- } else {
- $class = "listlr";
- }
-?>
- <td class="<?=$class;?>" ondblclick="document.location='pkg_edit.php?xml=<?=$xml?>&amp;act=edit&amp;id=<?=$i;?>';">
-<?php
- $fieldname = $ip[xml_safe_fieldname($column['fieldname'])];
- #Check if columnitem has a type field declared
- if ($column['type'] == "checkbox") {
- if ($fieldname == "") {
- echo gettext("No");
- } else {
- echo gettext("Yes");
- }
- } else if ($column['type'] == "interface") {
- echo $column['prefix'] . $iflist[$fieldname] . $column['suffix'];
- } else {
- #Check if columnitem has an encoding field declared
- if ($column['encoding'] == "base64") {
- echo $column['prefix'] . base64_decode($fieldname) . $column['suffix'];
- #Check if there is a custom info to show when $fieldname is not empty
- } else if ($column['listmodeon'] && $fieldname != "") {
- echo $column['prefix'] . gettext($column['listmodeon']). $column['suffix'];
- #Check if there is a custom info to show when $fieldname is empty
- } else if ($column['listmodeoff'] && $fieldname == "") {
- echo $column['prefix'] .gettext($column['listmodeoff']). $column['suffix'];
- } else {
- echo $column['prefix'] . $fieldname ." ". $column['suffix'];
- }
- }
-?>
- </td>
-<?php
- } // foreach columnitem
- } // if columnitem
-?>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
-<?php
- #Show custom description to edit button if defined
- $edit_msg=($pkg['adddeleteeditpagefields']['edittext']?$pkg['adddeleteeditpagefields']['edittext']:"Edit this item");
-?>
- <td valign="middle"><a href="pkg_edit.php?xml=<?=$xml?>&amp;act=edit&amp;id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" <?=domTT_title($edit_msg)?> alt="edit" /></a></td>
-<?php
- #Show custom description to delete button if defined
- $delete_msg=($pkg['adddeleteeditpagefields']['deletetext']?$pkg['adddeleteeditpagefields']['deletetext']:"Delete this item");
-?>
- <td valign="middle"><a href="pkg.php?xml=<?=$xml?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this item?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" <?=domTT_title($delete_msg)?> alt="delete" /></a></td>
- </tr>
- </table>
- </td>
-<?php
- echo "</tr>\n"; // Pairs with an echo tr some way above
- // Handle pagination and display_maximum_rows
- if ($display_maximum_rows) {
- if ($pagination_counter == ($display_maximum_rows-1) or
- $i == (count($evaledvar)-1)) {
- $colcount = count($pkg['adddeleteeditpagefields']['columnitem']);
- $final_footer = "";
- $final_footer .= "<tr><td colspan='$colcount'>";
- $final_footer .= "<table width='100%' summary=''><tr>";
- $final_footer .= "<td align='left'>";
- $startingat = $startdisplayingat - $display_maximum_rows;
- if ($startingat > -1) {
- $final_footer .= "<a href='pkg.php?xml=" . $_REQUEST['xml'] . "&amp;startdisplayingat={$startingat}&amp;display_maximum_rows={$display_maximum_rows}'>";
- } else if ($startdisplayingat > 1) {
- $final_footer .= "<a href='pkg.php?xml=" . $_REQUEST['xml'] . "&amp;startdisplayingat=0&amp;display_maximum_rows={$display_maximum_rows}'>";
- }
- $final_footer .= "<font size='2'><< Previous page</font></a>";
- if ($tmppp + $display_maximum_rows > count($evaledvar)) {
- $endingrecord = count($evaledvar);
- } else {
- $endingrecord = $tmppp + $display_maximum_rows;
- }
- $final_footer .= "</td><td align='center'>";
- $tmppp++;
- $final_footer .= "<font size='2'>Displaying {$tmppp} - {$endingrecord} / " . count($evaledvar) . " records";
- $final_footer .= "</font></td><td align='right'>&nbsp;";
- if (($i+1) < count($evaledvar)) {
- $final_footer .= "<a href='pkg.php?xml=" . $_REQUEST['xml'] . "&amp;startdisplayingat=" . ($startdisplayingat + $display_maximum_rows) . "&amp;display_maximum_rows={$display_maximum_rows}'>";
- }
- $final_footer .= "<font size='2'>Next page >></font></a>";
- $final_footer .= "</td></tr></table></td></tr>";
- $i = count($evaledvar);
- break;
- }
- }
- $i++;
- $pagination_counter++;
- } // foreach evaledvar
- } // if evaledvar
-?>
- <tr>
- <td colspan="<?=$cols?>"></td>
- <td>
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
-<?php
- #Show custom description to add button if defined
- $add_msg=($pkg['adddeleteeditpagefields']['addtext']?$pkg['adddeleteeditpagefields']['addtext']:"Add a new item");
-?>
- <td valign="middle"><a href="pkg_edit.php?xml=<?=$xml?>&amp;id=<?=$i?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" <?=domTT_title($add_msg)?> alt="add" /></a></td>
-<?php
- #Show description button and info if defined
- if ($pkg['adddeleteeditpagefields']['description']) {
-?>
- <td valign="middle"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_info_pkg.gif" width="17" height="17" border="0" <?=domTT_title($pkg['adddeleteeditpagefields']['description'])?> alt="info" /></td>
-<?php
- }
-?>
- </tr>
- </table>
- </td>
- </tr>
- <?=$final_footer?>
-<?php
- #Show save button only when movable is defined
- if ($pkg['adddeleteeditpagefields']['movable']) {
-?>
- <tr>
- <td><input class="formbtn" type="button" value="Save" name="Submit" onclick="save_changes_to_xml('<?=$xml?>')" /></td>
- </tr>
-<?php
- }
-?>
- </table>
- </td>
- </tr>
-</table></div></td></tr>
-</table>
-
-</form>
-<?php include("fend.inc"); ?>
-
-<?php
- echo "<!-- filter_fieldname: {$filter_fieldname} -->";
- echo "<!-- filter_regex: {$filter_regex} -->";
-?>
-
-</body>
-</html>
diff --git a/usr/local/www/pkg_edit.php b/usr/local/www/pkg_edit.php
deleted file mode 100644
index 0b01a28..0000000
--- a/usr/local/www/pkg_edit.php
+++ /dev/null
@@ -1,1267 +0,0 @@
-<?php
-/* $Id$ */
-/*
- pkg_edit.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004-2012 Scott Ullrich <sullrich@gmail.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ifconfig
- pfSense_MODULE: pkgs
-*/
-
-##|+PRIV
-##|*IDENT=page-package-edit
-##|*NAME=Package: Edit page
-##|*DESCR=Allow access to the 'Package: Edit' page.
-##|*MATCH=pkg_edit.php*
-##|-PRIV
-
-ini_set('max_execution_time', '0');
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("pkg-utils.inc");
-
-/* dummy stubs needed by some code that was MFC'd */
-function pfSenseHeader($location) {
- header("Location: " . $location);
-}
-
-function gentitle_pkg($pgname) {
- global $pfSense_config;
- return $pfSense_config['system']['hostname'] . "." . $pfSense_config['system']['domain'] . " - " . $pgname;
-}
-
-function domTT_title($title_msg) {
- if (!empty($title_msg)) {
- $title_msg = preg_replace("/\s+/", " ", $title_msg);
- $title_msg = preg_replace("/'/", "\'", $title_msg);
- return "onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\" onmouseover=\"domTT_activate(this, event, 'content', '{$title_msg}', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'delay', 300, 'styleClass', 'niceTitle');\"";
- }
-}
-
-$xml = htmlspecialchars($_GET['xml']);
-if ($_POST['xml']) {
- $xml = htmlspecialchars($_POST['xml']);
-}
-
-$xml_fullpath = realpath('/usr/local/pkg/' . $xml);
-
-if ($xml == "" || $xml_fullpath === false ||
- substr($xml_fullpath, 0, strlen('/usr/local/pkg/')) != '/usr/local/pkg/') {
- print_info_box_np(gettext("ERROR: No valid package defined."));
- die;
-} else {
- $pkg = parse_xml_config_pkg($xml_fullpath, "packagegui");
-}
-
-if ($pkg['include_file'] <> "") {
- require_once($pkg['include_file']);
-}
-
-if (!isset($pkg['adddeleteeditpagefields'])) {
- $only_edit = true;
-} else {
- $only_edit = false;
-}
-
-$package_name = $pkg['menu'][0]['name'];
-$section = $pkg['menu'][0]['section'];
-$config_path = $pkg['configpath'];
-$name = $pkg['name'];
-$title = $pkg['title'];
-$pgtitle = $title;
-
-$id = $_GET['id'];
-if (isset($_POST['id'])) {
- $id = htmlspecialchars($_POST['id']);
-}
-
-// Not posting? Then user is editing a record. There must be a valid id
-// when editing a record.
-if (!$id && !$_POST) {
- $id = "0";
-}
-
-if (!is_numeric($id)) {
- header("Location: /");
- exit;
-}
-
-if ($pkg['custom_php_global_functions'] <> "") {
- eval($pkg['custom_php_global_functions']);
-}
-
-// grab the installedpackages->package_name section.
-if ($config['installedpackages'] && !is_array($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'])) {
- $config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'] = array();
-}
-
-// If the first entry in the array is an empty <config/> tag, kill it.
-if ($config['installedpackages'] && (count($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']) > 0)
- && ($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'][0] == "")) {
- array_shift($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']);
-}
-
-$a_pkg = &$config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'];
-
-if ($_GET['savemsg'] <> "") {
- $savemsg = htmlspecialchars($_GET['savemsg']);
-}
-
-if ($pkg['custom_php_command_before_form'] <> "") {
- eval($pkg['custom_php_command_before_form']);
-}
-
-if ($_POST) {
- $firstfield = "";
- $rows = 0;
-
- $input_errors = array();
- $reqfields = array();
- $reqfieldsn = array();
- foreach ($pkg['fields']['field'] as $field) {
- if (($field['type'] == 'input') && isset($field['required'])) {
- if ($field['fieldname']) {
- $reqfields[] = $field['fieldname'];
- }
- if ($field['fielddescr']) {
- $reqfieldsn[] = $field['fielddescr'];
- }
- }
- }
- do_input_validation($_POST, $reqfields, $reqfieldsn, $input_errors);
-
- if ($pkg['custom_php_validation_command']) {
- eval($pkg['custom_php_validation_command']);
- }
-
- if ($_POST['act'] == "del") {
- if ($pkg['custom_delete_php_command']) {
- if ($pkg['custom_php_command_before_form'] <> "") {
- eval($pkg['custom_php_command_before_form']);
- }
- eval($pkg['custom_delete_php_command']);
- }
- write_config($pkg['delete_string']);
- // resync the configuration file code if defined.
- if ($pkg['custom_php_resync_config_command'] <> "") {
- if ($pkg['custom_php_command_before_form'] <> "") {
- eval($pkg['custom_php_command_before_form']);
- }
- eval($pkg['custom_php_resync_config_command']);
- }
- } else {
- if (!$input_errors && $pkg['custom_add_php_command']) {
- if ($pkg['donotsave'] <> "" or $pkg['preoutput'] <> "") {
- ?>
-
-<?php include("head.inc"); ?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php
- }
- if ($pkg['preoutput']) {
- echo "<pre>";
- }
- eval($pkg['custom_add_php_command']);
- if ($pkg['preoutput']) {
- echo "</pre>";
- }
- }
- }
-
- // donotsave is enabled. lets simply exit.
- if (empty($pkg['donotsave'])) {
-
- // store values in xml configuration file.
- if (!$input_errors) {
- $pkgarr = array();
- foreach ($pkg['fields']['field'] as $fields) {
- switch ($fields['type']) {
- case "rowhelper":
- // save rowhelper items.
- #$rowhelpername=($fields['fieldname'] ? $fields['fieldname'] : "row");
- $rowhelpername="row";
- foreach ($fields['rowhelper']['rowhelperfield'] as $rowhelperfield) {
- foreach ($_POST as $key => $value) {
- if (preg_match("/^{$rowhelperfield['fieldname']}(\d+)$/", $key, $matches)) {
- $pkgarr[$rowhelpername][$matches[1]][$rowhelperfield['fieldname']] = $value;
- }
- }
- }
- break;
- default:
- $fieldname = $fields['fieldname'];
- if ($fieldname == "interface_array") {
- $fieldvalue = $_POST[$fieldname];
- } elseif (is_array($_POST[$fieldname])) {
- $fieldvalue = implode(',', $_POST[$fieldname]);
- } else {
- $fieldvalue = trim($_POST[$fieldname]);
- if ($fields['encoding'] == 'base64') {
- $fieldvalue = base64_encode($fieldvalue);
- }
- }
- if ($fieldname) {
- $pkgarr[$fieldname] = $fieldvalue;
- }
- }
- }
-
- if (isset($id) && $a_pkg[$id]) {
- $a_pkg[$id] = $pkgarr;
- } else {
- $a_pkg[] = $pkgarr;
- }
-
- write_config($pkg['addedit_string']);
- // late running code
- if ($pkg['custom_add_php_command_late'] <> "") {
- eval($pkg['custom_add_php_command_late']);
- }
-
- if (isset($pkg['filter_rules_needed'])) {
- filter_configure();
- }
-
- // resync the configuration file code if defined.
- if ($pkg['custom_php_resync_config_command'] <> "") {
- eval($pkg['custom_php_resync_config_command']);
- }
-
- parse_package_templates();
-
- /* if start_command is defined, restart w/ this */
- if ($pkg['start_command'] <> "") {
- exec($pkg['start_command'] . ">/dev/null 2&>1");
- }
-
- /* if restart_command is defined, restart w/ this */
- if ($pkg['restart_command'] <> "") {
- exec($pkg['restart_command'] . ">/dev/null 2&>1");
- }
-
- if ($pkg['aftersaveredirect'] <> "") {
- pfSenseHeader($pkg['aftersaveredirect']);
- } elseif (!$pkg['adddeleteeditpagefields']) {
- pfSenseHeader("pkg_edit.php?xml={$xml}&amp;id=0");
- } elseif (!$pkg['preoutput']) {
- pfSenseHeader("pkg.php?xml=" . $xml);
- }
- exit;
- } else {
- $get_from_post = true;
- }
- } elseif (!$input_errors) {
- exit;
- }
-}
-
-if ($pkg['title'] <> "") {
- $edit = ($only_edit ? '' : ": " . gettext("Edit"));
- $title = $pkg['title'] . $edit;
-} else {
- $title = gettext("Package Editor");
-}
-
-$pgtitle = $title;
-
-if ($pkg['custom_php_after_head_command']) {
- $closehead = false;
- include("head.inc");
- eval($pkg['custom_php_after_head_command']);
- echo "</head>\n";
-} else {
- include("head.inc");
-}
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
-<script type="text/javascript" src="/javascript/suggestions.js"></script>
-
-<?php if ($pkg['fields']['field'] <> "") { ?>
-<script type="text/javascript">
-//<![CDATA[
- //Everything inside it will load as soon as the DOM is loaded and before the page contents are loaded
- jQuery(document).ready(function() {
-
- //Sortable function
- jQuery('#mainarea table tbody').sortable({
- items: 'tr.sortable',
- cursor: 'move',
- distance: 10,
- opacity: 0.8,
- helper: function(e, ui) {
- ui.children().each(function() {
- jQuery(this).width(jQuery(this).width());
- });
- return ui;
- },
- });
-
- //delete current line jQuery function
- jQuery('#maintable td .delete').live('click', function() {
- //do not remove first line
- if (jQuery("#maintable tr").length > 2) {
- jQuery(this).parent().parent().remove();
- return false;
- }
- });
-
- //add new line jQuery function
- jQuery('#mainarea table .add').click(function() {
- //get table size and assign as new id
- var c_id=jQuery("#maintable tr").length;
- var new_row=jQuery("table#maintable tr:last").html().replace(/(name|id)="(\w+)(\d+)"/g,"$1='$2"+c_id+"'");
- //apply new id to created line rowhelperid
- jQuery("table#maintable tr:last").after("<tr>"+new_row+"<\/tr>");
- return false;
- });
- // Call enablechange function
- enablechange();
- });
-
- function enablechange() {
- <?php
- foreach ($pkg['fields']['field'] as $field) {
- if (isset($field['enablefields']) or isset($field['checkenablefields'])) {
- echo "\tif (jQuery('form[name=\"iform\"] input[name=\"{$field['fieldname']}\"]').prop('checked') == false) {\n";
-
- if (isset($field['enablefields'])) {
- foreach (explode(',', $field['enablefields']) as $enablefield) {
- echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').length > 0) {\n";
- echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').prop('disabled',true);\n";
- echo "\t\t}\n";
- }
- }
-
- if (isset($field['checkenablefields'])) {
- foreach (explode(',', $field['checkenablefields']) as $checkenablefield) {
- echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').length > 0) {\n";
- echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').prop('checked',true);\n";
- echo "\t\t}\n";
- }
- }
-
- echo "\t}\n\telse {\n";
-
- if (isset($field['enablefields'])) {
- foreach (explode(',', $field['enablefields']) as $enablefield) {
- echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').length > 0) {\n";
- echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').prop('disabled',false);\n";
- echo "\t\t}\n";
- }
- }
-
- if (isset($field['checkenablefields'])) {
- foreach (explode(',', $field['checkenablefields']) as $checkenablefield) {
- echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').length > 0) {\n";
- echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').prop('checked',false);\n";
- echo "\t\t}\n";
- }
- }
-
- echo "\t}\n";
- }
- }
- ?>
- }
-//]]>
-</script>
-<?php } ?>
-<script type="text/javascript" src="javascript/domTT/domLib.js"></script>
-<script type="text/javascript" src="javascript/domTT/domTT.js"></script>
-<script type="text/javascript" src="javascript/domTT/behaviour.js"></script>
-<script type="text/javascript" src="javascript/domTT/fadomatic.js"></script>
-<script type="text/javascript" src="/javascript/row_helper_dynamic.js"></script>
-
-<?php if (!empty($input_errors)) print_input_errors($input_errors); ?>
-<form name="iform" action="pkg_edit.php" method="post">
-<input type="hidden" name="xml" value="<?= htmlspecialchars($xml) ?>" />
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="package edit">
-<?php
-if ($pkg['tabs'] <> "") {
- $tab_array = array();
- foreach ($pkg['tabs']['tab'] as $tab) {
- if ($tab['tab_level']) {
- $tab_level = $tab['tab_level'];
- } else {
- $tab_level = 1;
- }
- if (isset($tab['active'])) {
- $active = true;
- } else {
- $active = false;
- }
- if (isset($tab['no_drop_down'])) {
- $no_drop_down = true;
- }
- $urltmp = "";
- if ($tab['url'] <> "") {
- $urltmp = $tab['url'];
- }
- if ($tab['xml'] <> "") {
- $urltmp = "pkg_edit.php?xml=" . $tab['xml'];
- }
-
- $addresswithport = getenv("HTTP_HOST");
- $colonpos = strpos($addresswithport, ":");
- if ($colonpos !== False) {
- //my url is actually just the IP address of the pfsense box
- $myurl = substr($addresswithport, 0, $colonpos);
- } else {
- $myurl = $addresswithport;
- }
- // eval url so that above $myurl item can be processed if need be.
- $url = str_replace('$myurl', $myurl, $urltmp);
-
- $tab_array[$tab_level][] = array(
- $tab['text'],
- $active,
- $url
- );
- }
-
- ksort($tab_array);
- foreach ($tab_array as $tabid => $tab) {
- echo '<tr><td>';
- display_top_tabs($tab, $no_drop_down, $tabid);
- echo '</td></tr>';
- }
-}
-
-?>
-<tr><td><div id="mainarea"><table id="t" class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
-<?php
- $cols = 0;
- $savevalue = gettext("Save");
- if ($pkg['savetext'] <> "") {
- $savevalue = $pkg['savetext'];
- }
- /* If a package's XML has <advanced_options/> configured, then setup
- * the table rows for the fields that have <advancedfield/> set.
- * These fields will be placed below other fields in a separate area titled 'Advanced Features'.
- * These advanced fields are not normally configured and generally left to default to 'default settings'.
- */
-
- if ($pkg['advanced_options'] == "enabled") {
- $adv_filed_count = 0;
- $advanced = "<td>&nbsp;</td>";
- $advanced .= "<tr><td colspan=\"2\" class=\"listtopic\">". gettext("Advanced features") . "<br /></td></tr>\n";
- }
- foreach ($pkg['fields']['field'] as $pkga) {
- if ($pkga['type'] == "sorting") {
- continue;
- }
-
- if ($pkga['type'] == "listtopic") {
- $input = "<tr id='td_{$pkga['fieldname']}'><td>&nbsp;</td></tr>";
- $input .= "<tr id='tr_{$pkga['fieldname']}'><td colspan=\"2\" class=\"listtopic\">{$pkga['name']}<br /></td></tr>\n";
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $advanced .= $input;
- $adv_filed_count++;
- } else {
- echo $input;
- }
- continue;
- }
-
- if ($pkga['combinefields'] == "begin") {
- $input="<tr valign='top' id='tr_{$pkga['fieldname']}'>";
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $advanced .= $input;
- } else {
- echo $input;
- }
- }
-
- $size = "";
- $colspan="";
- if (isset($pkga['dontdisplayname'])) {
- $input="";
- // If this is in a set of combined fields and;
- // - it is a "begin" (case already handled above) or
- // - usecolspan2 is in effect (so we want to spread all the combined fields horizontally)
- // then we do not want this "tr" to be inserted.
- // Thus only insert the "tr" if the not (!) of the above condition.
- if (!((isset($pkga['combinefields'])) && (($pkga['combinefields'] == "begin") || (isset($pkga['usecolspan2']))))) {
- $input .= "<tr valign='top' id='tr_{$pkga['fieldname']}'>";
- }
- if (isset($pkga['usecolspan2'])) {
- $colspan="colspan='2'";
- } else {
- $input .= "<td width='22%' class='vncell{$req}'>&nbsp;</td>";
- }
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $advanced .= $input;
- $adv_filed_count++;
- } else {
- echo $input;
- }
- } else if (!isset($pkga['placeonbottom'])) {
- unset($req);
- if (isset($pkga['required'])) {
- $req = 'req';
- }
- $input="";
- // If this is in a set of combined fields and;
- // - it is a "begin" (case already handled above) or
- // - usecolspan2 is in effect (so we want to spread all the combined fields horizontally)
- // then we do not want this "tr" to be inserted.
- // Thus only insert the "tr" if the not (!) of the above condition.
- if (!((isset($pkga['combinefields'])) && (($pkga['combinefields'] == "begin") || (isset($pkga['usecolspan2']))))) {
- $input .= "<tr>";
- }
- $input .= "<td valign='top' width=\"22%\" class=\"vncell{$req}\">";
- $input .= fixup_string($pkga['fielddescr']);
- $input .= "</td>";
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $advanced .= $input;
- $adv_filed_count++;
- } else {
- echo $input;
- }
- }
- if ($pkga['combinefields'] == "begin") {
- $input="<td class=\"vncell\"><table summary=\"advanced\"><tr>";
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $advanced .= $input;
- } else {
- echo $input;
- }
- }
-
- $class=(isset($pkga['combinefields']) ? '' : 'class="vtable"');
- if (!isset($pkga['placeonbottom'])) {
- $input="<td valign='top' {$colspan} {$class}>";
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $advanced .= $input;
- $adv_filed_count++;
- } else {
- echo $input;
- }
- }
-
- // if user is editing a record, load in the data.
- $fieldname = $pkga['fieldname'];
- if ($get_from_post) {
- $value = $_POST[$fieldname];
- if (is_array($value)) {
- $value = implode(',', $value);
- }
- } else {
- if (isset($id) && $a_pkg[$id]) {
- $value = $a_pkg[$id][$fieldname];
- } else {
- $value = $pkga['default_value'];
- }
- }
- switch ($pkga['type']) {
- case "input":
- $size = ($pkga['size'] ? " size='{$pkga['size']}' " : "");
- $input = "<input {$size} id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' class='formfld unknown' value=\"" . htmlspecialchars($value) ."\" />\n";
- $input .= "<br />" . fixup_string($pkga['description']) . "\n";
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $js_array[] = $pkga['fieldname'];
- $advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n";
- } else {
- echo $input;
- }
- break;
-
- case "password":
- $size = ($pkga['size'] ? " size='{$pkga['size']}' " : "");
- $input = "<input " . $size . " id='" . $pkga['fieldname'] . "' type='password' name='" . $pkga['fieldname'] . "' class='formfld pwd' value=\"" . htmlspecialchars($value) . "\" />\n";
- $input .= "<br />" . fixup_string($pkga['description']) . "\n";
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $js_array[] = $pkga['fieldname'];
- $advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n";
- } else {
- echo $input;
- }
- break;
-
- case "info":
- $input = fixup_string($pkga['description']) . "\n";
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $js_array[] = $pkga['fieldname'];
- $advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n";
- } else {
- echo $input;
- }
- break;
-
- case "select":
- $fieldname = $pkga['fieldname'];
- if (isset($pkga['multiple'])) {
- $multiple = 'multiple="multiple"';
- $items = explode(',', $value);
- $fieldname .= "[]";
- } else {
- $multiple = '';
- $items = array($value);
- }
- $size = ($pkga['size'] ? " size='{$pkga['size']}' " : "");
- $onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : '');
- $input = "<select id='" . $pkga['fieldname'] . "' $multiple $size $onchange name=\"$fieldname\">\n";
- foreach ($pkga['options']['option'] as $opt) {
- $selected = (in_array($opt['value'], $items) ? 'selected="selected"' : '');
- $input .= "\t<option value=\"{$opt['value']}\" {$selected}>{$opt['name']}</option>\n";
- }
- $input .= "</select>\n<br />\n" . fixup_string($pkga['description']) . "\n";
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $js_array[] = $pkga['fieldname'];
- $advanced .= display_advanced_field($pkga['fieldname']).$input;
- $advanced .= "</div>\n";
- } else {
- echo $input;
- }
- break;
-
- case "select_source":
- $fieldname = $pkga['fieldname'];
- if (isset($pkga['multiple'])) {
- $multiple = 'multiple="multiple"';
- $items = explode(',', $value);
- $fieldname .= "[]";
- } else {
- $multiple = '';
- $items = array($value);
- }
- $size = (isset($pkga['size']) ? "size=\"{$pkga['size']}\"" : '');
- $onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : '');
- $input = "<select id='{$pkga['fieldname']}' {$multiple} {$size} {$onchange} name=\"{$fieldname}\">\n";
-
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $js_array[] = $pkga['fieldname'];
- $advanced .= display_advanced_field($pkga['fieldname']) .$input;
- $advanced .= "</div>\n";
- } else {
- echo $input;
- }
- $source_url = $pkga['source'];
- eval("\$pkg_source_txt = &$source_url;");
- $input="";
- #check if show disable option is present on xml
- if (isset($pkga['show_disable_value'])) {
- array_push($pkg_source_txt,
- array(($pkga['source_name']? $pkga['source_name'] : $pkga['name'])=> $pkga['show_disable_value'], ($pkga['source_value']? $pkga['source_value'] : $pkga['value'])=> $pkga['show_disable_value']));
- }
- foreach ($pkg_source_txt as $opt) {
- $source_name =($pkga['source_name']? $opt[$pkga['source_name']] : $opt[$pkga['name']]);
- $source_value =($pkga['source_value'] ? $opt[$pkga['source_value']] : $opt[$pkga['value']]);
- $selected = (in_array($source_value, $items)? 'selected="selected"' : '');
- $input .= "\t<option value=\"{$source_value}\" $selected>{$source_name}</option>\n";
- }
- $input .= "</select>\n<br />\n" . fixup_string($pkga['description']) . "\n";
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $advanced .= $input;
- } else {
- echo $input;
- }
- break;
-
- case "vpn_selection" :
- $input = "<select id='{$pkga['fieldname']}' name='{$vpn['name']}'>\n";
- foreach ($config['ipsec']['phase1'] as $vpn) {
- $input .= "\t<option value=\"{$vpn['descr']}\">{$vpn['descr']}</option>\n";
- }
- $input .= "</select>\n";
- $input .= "<br />" . fixup_string($pkga['description']) . "\n";
-
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $js_array[] = $pkga['fieldname'];
- $advanced .= display_advanced_field($pkga['fieldname']).$input;
- $advanced .= "</div>\n";
- } else {
- echo $input;
- }
- break;
-
- case "checkbox":
- $checkboxchecked =($value == "on" ? " checked=\"checked\"" : "");
- $onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : '');
- if (isset($pkga['enablefields']) || isset($pkga['checkenablefields'])) {
- $onclick = ' onclick="javascript:enablechange();"';
- }
- $input = "<input id='{$pkga['fieldname']}' type='checkbox' name='{$pkga['fieldname']}' {$checkboxchecked} {$onclick} {$onchange} />\n";
- $input .= "<br />" . fixup_string($pkga['description']) . "\n";
-
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $js_array[] = $pkga['fieldname'];
- $advanced .= display_advanced_field($pkga['fieldname']).$input;
- $advanced .= "</div>\n";
- } else {
- echo $input;
- }
- break;
-
- case "textarea":
- if ($pkga['rows']) {
- $rows = " rows='{$pkga['rows']}' ";
- }
- if ($pkga['cols']) {
- $cols = " cols='{$pkga['cols']}' ";
- }
- if (($pkga['encoding'] == 'base64') && !$get_from_post && !empty($value)) {
- $value = base64_decode($value);
- }
- $wrap =($pkga['wrap'] == "off" ? 'wrap="off" style="white-space:nowrap;"' : '');
- $input = "<textarea {$rows} {$cols} name='{$pkga['fieldname']}'{$wrap}>{$value}</textarea>\n";
- $input .= "<br />" . fixup_string($pkga['description']) . "\n";
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $js_array[] = $pkga['fieldname'];
- $advanced .= display_advanced_field($pkga['fieldname']).$input;
- $advanced .= "</div>\n";
- } else {
- echo $input;
- }
- break;
-
- case "aliases":
- // Use xml tag <typealiases> to filter type aliases
- $size = ($pkga['size'] ? "size=\"{$pkga['size']}\"" : '');
- $fieldname = $pkga['fieldname'];
- $a_aliases = &$config['aliases']['alias'];
- $addrisfirst = 0;
- $aliasesaddr = "";
- $value = "value='{$value}'";
-
- if (isset($a_aliases)) {
- if (!empty($pkga['typealiases'])) {
- foreach ($a_aliases as $alias) {
- if ($alias['type'] == $pkga['typealiases']) {
- if ($addrisfirst == 1) {
- $aliasesaddr .= ",";
- }
- $aliasesaddr .= "'" . $alias['name'] . "'";
- $addrisfirst = 1;
- }
- }
- } else {
- foreach ($a_aliases as $alias) {
- if ($addrisfirst == 1) {
- $aliasesaddr .= ",";
- }
- $aliasesaddr .= "'" . $alias['name'] . "'";
- $addrisfirst = 1;
- }
- }
- }
-
- $input = "<input name='{$fieldname}' type='text' class='formfldalias' id='{$fieldname}' {$size} {$value} />\n<br />";
- $input .= fixup_string($pkga['description']) . "\n";
-
- $script = "<script type='text/javascript'>\n";
- $script .= "//<![CDATA[\n";
- $script .= "var aliasarray = new Array({$aliasesaddr})\n";
- $script .= "var oTextbox1 = new AutoSuggestControl(document.getElementById('{$fieldname}'), new StateSuggestions(aliasarray))\n";
- $script .= "//]]>\n";
- $script .= "</script>";
-
- echo $input;
- echo $script;
- break;
-
- case "interfaces_selection":
- $ips = array();
- $interface_regex=(isset($pkga['hideinterfaceregex']) ? $pkga['hideinterfaceregex'] : "nointerfacestohide");
- if (is_array($config['interfaces'])) {
- foreach ($config['interfaces'] as $iface_key=>$iface_value) {
- if (isset($iface_value['enable']) && !preg_match("/$interface_regex/", $iface_key)) {
- $iface_description=($iface_value['descr'] !="" ? strtoupper($iface_value['descr']) : strtoupper($iface_key));
- if (isset($pkga['showips'])) {
- $iface_description .= " address";
- }
- $ips[] = array('ip'=> $iface_key, 'description'=> $iface_description);
- }
- }
- }
- if (is_array($config['virtualip']) && isset($pkga['showvirtualips'])) {
- foreach ($config['virtualip']['vip'] as $vip) {
- if (!preg_match("/$interface_regex/", $vip['interface'])) {
- $vip_description=($vip['descr'] !="" ? " ({$vip['descr']}) " : " ");
- }
- switch ($vip['mode']) {
- case "ipalias":
- case "carp":
- $ips[] = array('ip' => $vip['subnet'], 'description' => "{$vip['subnet']} $vip_description");
- break;
- case "proxyarp":
- if ($vip['type'] == "network") {
- $start = ip2long32(gen_subnet($vip['subnet'], $vip['subnet_bits']));
- $end = ip2long32(gen_subnet_max($vip['subnet'], $vip['subnet_bits']));
- $len = $end - $start;
- for ($i = 0; $i <= $len; $i++) {
- $ips[]= array('ip' => long2ip32($start+$i), 'description' => long2ip32($start+$i)." from {$vip['subnet']}/{$vip['subnet_bits']} {$vip_description}");
- }
- } else {
- $ips[]= array('ip' => $vip['subnet'], 'description' => "{$vip['subnet']} $vip_description");
- }
- break;
- }
- }
- }
- sort($ips);
- if (isset($pkga['showlistenall'])) {
- array_unshift($ips, array('ip' => 'All', 'description' => 'Listen on All interfaces/ip addresses '));
- }
- if (!preg_match("/$interface_regex/", "loopback")) {
- $iface_description=(isset($pkga['showips']) ? "127.0.0.1 (loopback)" : "loopback");
- array_push($ips, array('ip' => 'lo0', 'description' => $iface_description));
- }
-
- #show interfaces array on gui
- $size = ($pkga['size'] ? "size=\"{$pkga['size']}\"" : '');
- $multiple = '';
- $fieldname = $pkga['fieldname'];
- if (isset($pkga['multiple'])) {
- $fieldname .= '[]';
- $multiple = 'multiple="multiple"';
- }
- $input = "<select id='{$pkga['fieldname']}' name=\"{$fieldname}\" {$size} {$multiple}>\n";
- if (is_array($value)) {
- $values = $value;
- } else {
- $values = explode(',', $value);
- }
- foreach ($ips as $iface) {
- $selected = (in_array($iface['ip'], $values) ? 'selected="selected"' : '');
- $input .= "<option value=\"{$iface['ip']}\" {$selected}>{$iface['description']}</option>\n";
- }
- $input .= "</select>\n<br />" . fixup_string($pkga['description']) . "\n";
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $advanced .= $input;
- } else {
- echo $input;
- }
- break;
-
- case "radio":
- $input = "<input type='radio' id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' value='{$value}' />";
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $advanced .= $input;
- } else {
- echo $input;
- }
- break;
-
- case "button":
- $input = "<input type='submit' id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' class='formbtn' value='{$pkga['fieldname']}' />\n";
- if (isset($pkga['placeonbottom'])) {
- $pkg_buttons .= $input;
- } else {
- echo $input ."\n<br />" . fixup_string($pkga['description']) . "\n";
- }
- break;
-
- case "schedule_selection":
- $input = "<select id='{$pkga['fieldname']}' name='{$pkga['fieldname']}'>\n";
- $schedules = array();
- $schedules[] = "none";
- if (is_array($config['schedules']['schedule'])) {
- foreach ($config['schedules']['schedule'] as $schedule) {
- if ($schedule['name'] <> "") {
- $schedules[] = $schedule['name'];
- }
- }
- }
- foreach ($schedules as $schedule) {
- $selected = ($value == $schedule ? "selected=\"selected\"" : "");
- if ($schedule == "none") {
- $input .= "<option value=\"\" {$selected}>{$schedule}</option>\n";
- } else {
- $input .= "<option value=\"{$schedule}\" {$selected}>{$schedule}</option>\n";
- }
- }
- $input .= "</select>\n<br />\n" . fixup_string($pkga['description']) . "\n";
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $js_array[] = $pkga['fieldname'];
- $advanced .= display_advanced_field($pkga['fieldname']).$input;
- $advanced .= "</div>\n";
- } else {
- echo $input;
- }
- break;
-
- case "rowhelper":
- #$rowhelpername=($fields['fieldname'] ? $fields['fieldname'] : "row");
- $rowhelpername="row";
- ?>
- <script type="text/javascript">
- //<![CDATA[
- <?php
- $rowcounter = 0;
- $fieldcounter = 0;
- foreach ($pkga['rowhelper']['rowhelperfield'] as $rowhelper) {
- echo "rowname[{$fieldcounter}] = \"{$rowhelper['fieldname']}\";\n";
- echo "rowtype[{$fieldcounter}] = \"{$rowhelper['type']}\";\n";
- echo "rowsize[{$fieldcounter}] = \"{$rowhelper['size']}\";\n";
- $fieldcounter++;
- }
- ?>
- //]]>
- </script>
- <table id="maintable" summary="main table">
- <tr id='<?="tr_{$pkga['fieldname']}";?>'>
- <?php
- foreach ($pkga['rowhelper']['rowhelperfield'] as $rowhelper) {
- echo "<td ".domTT_title($rowhelper['description'])."><b>" . fixup_string($rowhelper['fielddescr']) . "</b></td>\n";
- }
-
- $rowcounter = 0;
- $trc = 0;
-
- //Use assigned $a_pkg or create an empty array to enter loop
- if (isset($a_pkg[$id][$rowhelpername])) {
- $saved_rows=$a_pkg[$id][$rowhelpername];
- } else {
- $saved_rows[] = array();
- }
-
- foreach ($saved_rows as $row) {
- echo "</tr>\n<tr class=\"sortable\" id=\"id_{$rowcounter}\">\n";
- foreach ($pkga['rowhelper']['rowhelperfield'] as $rowhelper) {
- unset($value);
- if ($rowhelper['value'] <> "") {
- $value = $rowhelper['value'];
- }
- $fieldname = $rowhelper['fieldname'];
- // if user is editing a record, load in the data.
- if (isset($id) && $a_pkg[$id]) {
- $value = $row[$fieldname];
- }
- $options = "";
- $type = $rowhelper['type'];
- $description = $rowhelper['description'];
- $fieldname = $rowhelper['fieldname'];
- if ($type == "option") {
- $options = &$rowhelper['options']['option'];
- }
- if ($rowhelper['size']) {
- $size = $rowhelper['size'];
- } else if ($pkga['size']) {
- $size = $pkga['size'];
- } else {
- $size = "8";
- }
- display_row($rowcounter, $value, $fieldname, $type, $rowhelper, $size);
-
- $text = "";
- $trc++;
- }
- $rowcounter++;
- echo "<td>";
- #echo "<a onclick=\"removeRow(this); return false;\" href=\"#\"><img border=\"0\" src=\"./themes/".$g['theme']."/images/icons/icon_x.gif\" alt=\"remove\" /></a>";
- echo "<a class='delete' href=\"#\"><img border='0' src='./themes/{$g['theme']}/images/icons/icon_x.gif' alt='delete' /></a>";
- echo "</td>\n";
- }
- ?>
- </tr>
- <tbody></tbody>
- </table>
-
- <!-- <br /><a onclick="javascript:addRowTo('maintable'); return false;" href="#"><img border="0" src="./themes/<?#= $g['theme']; ?>/images/icons/icon_plus.gif" alt="add" /></a>-->
- <br /><a class="add" href="#"><img border="0" src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="add" /></a>
- <br /><?php if ($pkga['description'] != "") echo $pkga['description']; ?>
- <script type="text/javascript">
- //<![CDATA[
- field_counter_js = <?= $fieldcounter ?>;
- rows = <?= $rowcounter ?>;
- totalrows = <?php echo $rowcounter; ?>;
- loaded = <?php echo $rowcounter; ?>;
- //typesel_change();
- //]]>
- </script>
-
- <?php
- break;
- }
- #check typehint value
- if ($pkga['typehint']) {
- echo " " . $pkga['typehint'];
- }
- #check combinefields options
- if (isset($pkga['combinefields'])) {
- // At the end of each combined-fields field we always want to end a td tag.
- $input = "</td>";
- // The tr tag end is used to end the whole set of combined fields,
- // but also if usecolspan2 is not in effect then we also put each combined field in its own tr.
- if (($pkga['combinefields'] == "end") || (!isset($pkga['usecolspan2']))) {
- $input .= "</tr>";
- }
- // At the end of the combined fields we finish up the table that encloses the combined fields...
- if ($pkga['combinefields'] == "end") {
- $input .= "</table></td></tr>";
- }
- } else {
- $input = "</td></tr>";
- if ($pkga['usecolspan2']) {
- $input .= "</tr><br />";
- }
- }
- if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
- $advanced .= "{$input}\n";
- } else {
- echo "{$input}\n";
- }
- #increment counter
- $i++;
- }
-
- #print advanced settings if any after reading all fields
- if (isset($advanced) && $adv_filed_count > 0) {
- echo $advanced;
- }
-
- ?>
- <tr>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <div id="buttons">
- <?php
- if ($pkg['note'] != "") {
- echo "<p><span class=\"red\"><strong>" . gettext("Note") . ":</strong></span> {$pkg['note']}</p>";
- }
- //if (isset($id) && $a_pkg[$id]) // We'll always have a valid ID in our hands
- echo "<input name='id' type='hidden' value=\"" . htmlspecialchars($id) . "\" />";
- echo "<input name='Submit' type='submit' class='formbtn' value=\"" . htmlspecialchars($savevalue) . "\" />\n{$pkg_buttons}\n";
- if (!$only_edit) {
- echo "<input class=\"formbtn\" type=\"button\" value=\"".gettext("Cancel")."\" onclick=\"window.location.href='" . $_SERVER['HTTP_REFERER'] . "'\" />";
- }
- ?>
- </div>
- </td>
- </tr>
-
-</table>
-</div></td></tr>
-</table>
-</form>
-
-<?php if ($pkg['custom_php_after_form_command']) eval($pkg['custom_php_after_form_command']); ?>
-
-<?php
- /* JavaScript to handle the advanced fields. */
- if ($pkg['advanced_options'] == "enabled") {
- echo "<script type=\"text/javascript\">\n";
- echo "//<![CDATA[\n";
- foreach ($js_array as $advfieldname) {
- echo "function show_" . $advfieldname . "() {\n";
- echo "\tjQuery('#showadv_{$advfieldname}').empty();\n";
- echo "\tjQuery('#show_{$advfieldname}').css('display', 'block');\n";
- echo "}\n\n";
- }
- echo "//]]>\n";
- echo "</script>\n";
- }
-?>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
-
-<?php
-/*
- * ROW Helpers function
- */
-function display_row($trc, $value, $fieldname, $type, $rowhelper, $size) {
- global $text, $config;
- echo "<td>\n";
- switch ($type) {
- case "input":
- echo "<input size='{$size}' name='{$fieldname}{$trc}' id='{$fieldname}{$trc}' class='formfld unknown' value=\"" . htmlspecialchars($value) . "\" />\n";
- break;
- case "checkbox":
- echo "<input size='{$size}' type='checkbox' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' value='ON' ".($value?"CHECKED":"")." />\n";
- break;
- case "password":
- echo "<input size='{$size}' type='password' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' class='formfld pwd' value=\"" . htmlspecialchars($value) . "\" />\n";
- break;
- case "textarea":
- echo "<textarea rows='2' cols='12' id='{$fieldname}{$trc}' class='formfld unknown' name='{$fieldname}{$trc}'>{$value}</textarea>\n";
- case "select":
- echo "<select style='height:22px;' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' {$title}>\n";
- foreach ($rowhelper['options']['option'] as $rowopt) {
- $text .= "<option value='{$rowopt['value']}'>{$rowopt['name']}</option>";
- echo "<option value='{$rowopt['value']}'".($rowopt['value'] == $value?" selected=\"selected\"":"").">{$rowopt['name']}</option>\n";
- }
- echo "</select>\n";
- break;
- case "interfaces_selection":
- $size = ($size ? "size=\"{$size}\"" : '');
- $multiple = '';
- if (isset($rowhelper['multiple'])) {
- $fieldname .= '[]';
- $multiple = "multiple=\"multiple\"";
- }
- echo "<select style='height:22px;' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' {$size} {$multiple}>\n";
- $ifaces = get_configured_interface_with_descr();
- $additional_ifaces = $rowhelper['add_to_interfaces_selection'];
- if (!empty($additional_ifaces)) {
- $ifaces = array_merge($ifaces, explode(',', $additional_ifaces));
- }
- if (is_array($value)) {
- $values = $value;
- } else {
- $values = explode(',', $value);
- }
- $ifaces["lo0"] = "loopback";
- echo "<option><name></name><value></value></option>/n";
- foreach ($ifaces as $ifname => $iface) {
- $text .="<option value=\"{$ifname}\">$iface</option>";
- echo "<option value=\"{$ifname}\" ".(in_array($ifname, $values) ? 'selected="selected"' : '').">{$iface}</option>\n";
- }
- echo "</select>\n";
- break;
- case "select_source":
- echo "<select style='height:22px;' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}'>\n";
- if (isset($rowhelper['show_disable_value'])) {
- echo "<option value='{$rowhelper['show_disable_value']}'>{$rowhelper['show_disable_value']}</option>\n";
- }
- $source_url = $rowhelper['source'];
- eval("\$pkg_source_txt = &$source_url;");
- foreach ($pkg_source_txt as $opt) {
- $source_name = ($rowhelper['source_name'] ? $opt[$rowhelper['source_name']] : $opt[$rowhelper['name']]);
- $source_value = ($rowhelper['source_value'] ? $opt[$rowhelper['source_value']] : $opt[$rowhelper['value']]);
- $text .= "<option value='{$source_value}'>{$source_name}</option>";
- echo "<option value='{$source_value}'".($source_value == $value?" selected=\"selected\"":"").">{$source_name}</option>\n";
- }
- echo "</select>\n";
- break;
- }
- echo "</td>\n";
-}
-
-function fixup_string($string) {
- global $config;
- // fixup #1: $myurl -> http[s]://ip_address:port/
- $https = "";
- $port = $config['system']['webguiport'];
- if ($port <> "443" and $port <> "80") {
- $urlport = ":" . $port;
- } else {
- $urlport = "";
- }
-
- if ($config['system']['webgui']['protocol'] == "https") {
- $https = "s";
- }
- $myurl = "http" . $https . "://" . getenv("HTTP_HOST") . $urlport;
- $newstring = str_replace("\$myurl", $myurl, $string);
- $string = $newstring;
- // fixup #2: $wanip
- $curwanip = get_interface_ip();
- $newstring = str_replace("\$wanip", $curwanip, $string);
- $string = $newstring;
- // fixup #3: $lanip
- $lancfg = $config['interfaces']['lan'];
- $lanip = $lancfg['ipaddr'];
- $newstring = str_replace("\$lanip", $lanip, $string);
- $string = $newstring;
- // fixup #4: fix'r'up here.
- return $newstring;
-}
-
-/*
- * Parse templates if they are defined
- */
-function parse_package_templates() {
- global $pkg, $config;
- $rows = 0;
- if ($pkg['templates']['template'] <> "") {
- foreach ($pkg['templates']['template'] as $pkg_template_row) {
- $filename = $pkg_template_row['filename'];
- $template_text = $pkg_template_row['templatecontents'];
- $firstfield = "";
- /* calculate total row helpers count and */
- /* change fields defined as fieldname_fieldvalue to their value */
- foreach ($pkg['fields']['field'] as $fields) {
- switch ($fields['type']) {
- case "rowhelper":
- // save rowhelper items.
- $row_helper_total_rows = 0;
- $row_helper_data = "";
- foreach ($fields['rowhelper']['rowhelperfield'] as $rowhelperfield) {
- foreach ($_POST as $key => $value) {
- if (preg_match("/^{$rowhelperfield['fieldname']}(\d+)$/", $key, $matches)) {
- $row_helper_total_rows++;
- $row_helper_data .= $value;
- $sep = "";
- ereg($rowhelperfield['fieldname'] . "_fieldvalue\[(.*)\]", $template_text, $sep);
- foreach ($sep as $se) {
- $separator = $se;
- }
- if ($separator <> "") {
- $row_helper_data = ereg_replace(" ", $separator, $row_helper_data);
- $template_text = ereg_replace("\[{$separator}\]", "", $template_text);
- }
- $template_text = str_replace($rowhelperfield['fieldname'] . "_fieldvalue", $row_helper_data, $template_text);
- }
- }
- }
- break;
- default:
- $fieldname = $fields['fieldname'];
- $fieldvalue = $_POST[$fieldname];
- $template_text = str_replace($fieldname . "_fieldvalue", $fieldvalue, $template_text);
- }
- }
- /* replace $domain_total_rows with total rows */
- $template_text = str_replace("$domain_total_rows", $row_helper_total_rows, $template_text);
-
- /* replace cr's */
- $template_text = str_replace("\\n", "\n", $template_text);
-
- /* write out new template file */
- $fout = fopen($filename, "w");
- fwrite($fout, $template_text);
- fclose($fout);
- }
- }
-}
-
-/* Return html div fields */
-function display_advanced_field($fieldname) {
- $div = "<div id='showadv_{$fieldname}'>\n";
- $div .= "<input type='button' onclick='show_{$fieldname}()' value='" . gettext("Advanced") . "' /> - " . gettext("Show advanced option") ."</div>\n";
- $div .= "<div id='show_{$fieldname}' style='display:none'>\n";
- return $div;
-}
-
-?>
diff --git a/usr/local/www/pkg_mgr.php b/usr/local/www/pkg_mgr.php
deleted file mode 100644
index 85f378f..0000000
--- a/usr/local/www/pkg_mgr.php
+++ /dev/null
@@ -1,221 +0,0 @@
-<?php
-/* $Id$ */
-/*
- pkg_mgr.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004-2012 Scott Ullrich <sullrich@gmail.com>
- Copyright (C) 2013 Marcello Coutinho
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ifconfig
- pfSense_MODULE: pkgs
-*/
-
-##|+PRIV
-##|*IDENT=page-system-packagemanager
-##|*NAME=System: Package Manager page
-##|*DESCR=Allow access to the 'System: Package Manager' page.
-##|*MATCH=pkg_mgr.php*
-##|-PRIV
-
-ini_set('max_execution_time', '0');
-
-require_once("globals.inc");
-require_once("guiconfig.inc");
-require_once("pkg-utils.inc");
-
-/* if upgrade in progress, alert user */
-if (is_subsystem_dirty('packagelock')) {
- $pgtitle = array(gettext("System"), gettext("Package Manager"));
- include("head.inc");
- echo "<body link=\"#0000CC\" vlink=\"#0000CC\" alink=\"#0000CC\">\n";
- include("fbegin.inc");
- echo "Please wait while packages are reinstalled in the background.";
- include("fend.inc");
- echo "</body>";
- echo "</html>";
- exit;
-}
-function domTT_title($title_msg) {
- if (!empty($title_msg)) {
- $title_msg = preg_replace("/\s+/", " ", $title_msg);
- $title_msg = preg_replace("/'/", "\'", $title_msg);
- echo "onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\" onmouseover=\"domTT_activate(this, event, 'content', '{$title_msg}', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle');\"";
- }
-}
-
-$pkg_info = get_pkg_info();
-
-$closehead = false;
-$pgtitle = array(gettext("System"), gettext("Package Manager"));
-include("head.inc");
-
-?>
-<script type="text/javascript" src="javascript/domTT/domLib.js"></script>
-<script type="text/javascript" src="javascript/domTT/domTT.js"></script>
-<script type="text/javascript" src="javascript/domTT/behaviour.js"></script>
-<script type="text/javascript" src="javascript/domTT/fadomatic.js"></script>
-<script type="text/javascript" src="/javascript/row_helper_dynamic.js"></script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php
- include("fbegin.inc");
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="package manager">
- <tr><td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Available Packages"), true, "pkg_mgr.php");
- $tab_array[] = array(gettext("Installed Packages"), false, "pkg_mgr_installed.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr><td>
-<?php
- if ($pkg_info) {
- //Check categories
- $categories = array();
- foreach ($pkg_info as $pkg_data) {
- if (isset($pkg_data['categories'][0])) {
- $categories[$pkg_data['categories'][0]]++;
- }
- }
- ksort($categories);
- $cm_count = 0;
- $tab_array = array();
- $visible_categories = array();
- $categories_min_count = ($g['pkg_categories_min_count'] ? $g['pkg_categories_min_count'] : 3);
- $categories_max_display = ($g['pkg_categories_max_display'] ? $g['pkg_categories_max_display'] : 6);
-
- /* check selected category or define default category to show */
- if (isset($_REQUEST['category'])) {
- $menu_category = $_REQUEST['category'];
- } else if (isset($g['pkg_default_category'])) {
- $menu_category = $g['pkg_default_category'];
- } else {
- $menu_category = "All";
- }
-
- $menu_category = (isset($_REQUEST['category']) ? $_REQUEST['category'] : "All");
- $show_category = ($menu_category == "Other" || $menu_category == "All");
-
- $tab_array[] = array(gettext("All"), $menu_category == "All" ? true : false, "pkg_mgr.php?category=All");
- foreach ($categories as $category => $c_count) {
- if ($c_count >= $categories_min_count && $cm_count <= $categories_max_display) {
- $tab_array[] = array(gettext($category) , $menu_category == $category ? true : false, "pkg_mgr.php?category={$category}");
- $visible_categories[]=$category;
- $cm_count++;
- }
- }
- $tab_array[] = array(gettext("Other Categories"), $menu_category == "Other" ? true : false, "pkg_mgr.php?category=Other");
- if (count($categories) > 1) {
- display_top_tabs($tab_array);
- }
- }
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="10%" class="listhdrr"><?=gettext("Name"); ?></td>
-<?php
- if ($show_category) {
- print '<td width="18%" class="listhdr">'.gettext("Category").'</td>'."\n";
- }
-?>
- <td width="<?php print $show_category ? "15%" : "20%"; ?>" class="listhdr"><?=gettext("Version"); ?></td>
- <td width="<?php print $show_category ? "58%" : "70%"; ?>" class="listhdr"><?=gettext("Description"); ?></td>
- <td width="17">&nbsp;</td>
- </tr>
-<?php
- if (!$pkg_info) {
- echo "<tr><td colspan=\"5\"><center>" . gettext("There are currently no packages available for installation.") . "</td></tr>";
- } else {
- if (is_array($pkg_info)) {
- foreach ($pkg_info as $index):
- if (get_package_id($index['name']) >= 0) {
- continue;
- }
-
- $shortname = $index['name'];
- pkg_remove_prefix($shortname);
-
- /* Check package info link */
- if ($index['www'] && $index['www'] != 'UNKNOWN') {
- $pkginfolink = $index['www'];
- $pkginfo=gettext("Package info");
- } else {
- $pkginfolink = "https://forum.pfsense.org/index.php/board,15.0.html";
- $pkginfo=gettext("No package info, check the forum");
- }
-
- if ($menu_category == "All" || $index['categories'][0] == $menu_category || ($menu_category == "Other" && !in_array($index['categories'][0], $visible_categories))):
-?>
- <tr valign="top" class="<?= $index['categories'][0] ?>">
- <td class="listlr" <?=domTT_title(gettext("Click on package name to access its website."))?>>
- <a target="_blank" href="<?= $index['www'] ?>"><?=$shortname;?></a>
- </td>
-<?php
- if ($show_category) {
- print '<td class="listr">'.gettext($index['categories'][0]).'</td>'."\n";
- }
-
-?>
- <td class="listr"><?=$index['version'];?></td>
- <td class="listbg" style="overflow:hidden; text-align:justify;" <?=domTT_title(gettext("Click package info for more details about ".ucfirst($shortname)." package."))?>>
- <?=str_replace("\n", '<br />', $index['desc']);?>
-<?php
- if (!$g['disablepackageinfo']):
-?>
- <br /><br />
- <a target='_blank' href='<?=$pkginfolink?>' style='align:center;color:#ffffff; filter:Glow(color=#ff0000, strength=12);'><?=$pkginfo?></a>
-<?php
- endif;
-?>
- </td>
- <td valign="middle" class="list nowrap" width="17">
- <a href="pkg_mgr_install.php?id=<?=$shortname;?>"><img <?=domTT_title(gettext("Install ".ucfirst($shortname)." package."))?> src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
-<?php
- endif;
- endforeach;
- } else {
- echo "<tr><td colspan='5' align='center'>" . gettext("There are currently no packages available for installation.") . "</td></tr>";
- } /* if (is_array($pkg_info)) */
- } /* if (!$pkg_info) */
-?>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/pkg_mgr_install.php b/usr/local/www/pkg_mgr_install.php
deleted file mode 100644
index 1de2a40..0000000
--- a/usr/local/www/pkg_mgr_install.php
+++ /dev/null
@@ -1,323 +0,0 @@
-<?php
-/* $Id$ */
-/*
- pkg_mgr_install.php
- part of pfSense (https://www.pfsense.org)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004-2010 Scott Ullrich <sullrich@gmail.com>
- Copyright (C) 2005 Colin Smith
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /bin/rm
- pfSense_MODULE: pkgs
-*/
-
-##|+PRIV
-##|*IDENT=page-system-packagemanager-installpackage
-##|*NAME=System: Package Manager: Install Package page
-##|*DESCR=Allow access to the 'System: Package Manager: Install Package' page.
-##|*MATCH=pkg_mgr_install.php*
-##|-PRIV
-
-ini_set('max_execution_time', '0');
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("pkg-utils.inc");
-
-global $static_output;
-
-$static_output = "";
-$static_status = "";
-$sendto = "output";
-
-$pgtitle = array(gettext("System"), gettext("Package Manager"), gettext("Install Package"));
-include("head.inc");
-
-if ($_POST) {
- if (isset($_POST['pkgcancel']) || (empty($_POST['id']) && $_POST['mode'] != 'reinstallall')) {
- header("Location: pkg_mgr_installed.php");
- return;
- }
-} else if ($_GET) {
- switch ($_GET['mode']) {
- case 'reinstallall':
- case 'showlog':
- break;
- case 'installedinfo':
- case 'reinstallxml':
- case 'reinstallpkg':
- case 'delete':
- if (empty($_GET['pkg'])) {
- header("Location: pkg_mgr_installed.php");
- return;
- }
- break;
- default:
- if (empty($_GET['id'])) {
- header("Location: pkg_mgr_installed.php");
- return;
- }
- break;
- }
-}
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
- <form action="pkg_mgr_install.php" method="post">
- <div id="mainareapkg">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="package manager install">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Available packages"), false, "pkg_mgr.php");
- $tab_array[] = array(gettext("Installed packages"), false, "pkg_mgr_installed.php");
- $tab_array[] = array(gettext("Package Installer"), true, "");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
-<?php
-if ((empty($_GET['mode']) && $_GET['id']) || (!empty($_GET['mode']) && (!empty($_GET['pkg']) || $_GET['mode'] == 'reinstallall') && ($_GET['mode'] != 'installedinfo' && $_GET['mode'] != 'showlog'))):
- if (empty($_GET['mode']) && $_GET['id']) {
- $pkgname = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_GET['id'], ENT_QUOTES | ENT_HTML401));
- $pkgmode = 'installed';
- } else if (!empty($_GET['mode']) && !empty($_GET['pkg'])) {
- $pkgname = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_GET['pkg'], ENT_QUOTES | ENT_HTML401));
- $pkgmode = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_GET['mode'], ENT_QUOTES | ENT_HTML401));
- } else if ($_GET['mode'] == 'reinstallall') {
- $pkgmode = 'reinstallall';
- }
- $pkg_gui_xml_text = "";
- switch ($pkgmode) {
- case 'reinstallall':
- $pkgname = 'All packages';
- $pkgtxt = 'reinstalled';
- break;
- case 'reinstallxml':
- $pkg_gui_xml_text = " GUI XML components";
- case 'reinstallpkg':
- $pkgtxt = 'reinstalled';
- break;
- case 'delete':
- $pkgtxt = 'deleted';
- break;
- default:
- $pkgtxt = $pkgmode;
- break;
- }
-?>
- <tr>
- <td class="tabcont" align="center">
- <table style="height:15;colspacing:0" width="420" border="0" cellpadding="0" cellspacing="0" summary="images">
- <tr>
- <td class="tabcont" align="center">Package: <b><?=$pkgname;?></b><?=$pkg_gui_xml_text;?> will be <?=$pkgtxt;?>.<br/>
- Please confirm the action.<br/>
- </td>
- <td class="tabcont" align="center">
- <input type="hidden" name="id" value="<?=$pkgname;?>" />
- <input type="hidden" name="mode" value="<?=$pkgmode;?>" />
- <input type="submit" name="pkgconfirm" id="pkgconfirm" value="Confirm"/>
- <input type="submit" name="pkgcancel" id="pkgcancel" value="Cancel"/>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
-endif;
-if (!empty($_POST['id']) || $_GET['mode'] == 'showlog' || ($_GET['mode'] == 'installedinfo' && !empty($_GET['pkg']))):
-?>
- <tr>
- <td class="tabcont" align="center">
- <table style="height:15;colspacing:0" width="420" border="0" cellpadding="0" cellspacing="0" summary="images">
- <tr>
- <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_left.gif')" height="15" width="5"></td>
- <td>
- <table id="progholder" style="height:15;colspacing:0" width="410" border="0" cellpadding="0" cellspacing="0" summary="progress bar">
- <tr>
- <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_gray.gif')" valign="top" align="left">
- <img src='./themes/<?= $g['theme']; ?>/images/misc/bar_blue.gif' width="0" height="15" name="progressbar" id="progressbar" alt="progress bar" />
- </td>
- </tr>
- </table>
- </td>
- <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_right.gif')" height="15" width="5">
- </td>
- </tr>
- </table>
- <br />
- <!-- status box -->
- <textarea cols="80" rows="1" name="status" id="status" wrap="hard"><?=gettext("Beginning package installation.");?></textarea>
- <br />
- <!-- command output box -->
- <textarea cols="80" rows="35" name="output" id="output" wrap="hard"></textarea>
- </td>
- </tr>
-<?php endif; ?>
- </table>
- </div>
- </form>
-<?php include("fend.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-NiftyCheck();
-Rounded("div#mainareapkg","bl br","#FFF","#eeeeee","smooth");
-//]]>
-</script>
-
-<?php
-
-ob_flush();
-
-if ($_GET) {
- $pkgname = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_GET['pkg'], ENT_QUOTES | ENT_HTML401));
- switch ($_GET['mode']) {
- case 'showlog':
- if (strpos($pkgname, ".")) {
- update_output_window(gettext("Something is wrong on the request."));
- } else if (file_exists("/tmp/pkg_mgr_{$pkgname}.log")) {
- update_output_window(@file_get_contents("/tmp/pkg_mgr_{$pkgname}.log"));
- } else {
- update_output_window(gettext("Log was not retrievable."));
- }
- break;
- case 'installedinfo':
- if (file_exists("/tmp/{$pkgname}.info")) {
- $status = @file_get_contents("/tmp/{$pkgname}.info");
- update_status("{$pkgname} " . gettext("installation completed."));
- update_output_window($status);
- } else {
- update_output_window(sprintf(gettext("Could not find %s."), $pkgname));
- }
- break;
- default:
- break;
- }
-} else if ($_POST) {
- $pkgid = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_POST['id'], ENT_QUOTES | ENT_HTML401));
-
- /* All other cases make changes, so mount rw fs */
- conf_mount_rw();
- /* Write out configuration to create a backup prior to pkg install. */
- write_config(gettext("Creating restore point before package installation."));
-
- switch ($_POST['mode']) {
- case 'delete':
- uninstall_package($pkgid);
- update_status(gettext("Package deleted."));
- $static_output .= "\n" . gettext("Package deleted.");
- update_output_window($static_output);
- filter_configure();
- break;
- case 'reinstallxml':
- pkg_fetch_config_file($pkgid);
- pkg_fetch_additional_files($pkgid);
- break;
- case 'reinstallpkg':
- delete_package_xml($pkgid);
- if (install_package($pkgid) != 0) {
- update_status(gettext("Package reinstallation failed."));
- $static_output .= "\n" . gettext("Package reinstallation failed.");
- update_output_window($static_output);
- } else {
- update_status(gettext("Package reinstalled."));
- $static_output .= "\n" . gettext("Package reinstalled.");
- update_output_window($static_output);
- filter_configure();
- }
- @file_put_contents("/tmp/{$pkgid}.info", $static_output);
- $pkgid = htmlspecialchars($pkgid);
- echo "<script type='text/javascript'>document.location=\"pkg_mgr_install.php?mode=installedinfo&pkg={$pkgid}\";</script>";
- send_event("service restart packages");
- break;
- case 'reinstallall':
- if (is_array($config['installedpackages']) && is_array($config['installedpackages']['package'])) {
- $todo = array();
- foreach ($config['installedpackages']['package'] as $package) {
- $todo[] = array('name' => $package['name'], 'version' => $package['version']);
- }
- foreach ($todo as $pkgtodo) {
- $static_output = "";
- if ($pkgtodo['name']) {
- update_output_window($static_output);
- uninstall_package($pkgtodo['name']);
- install_package($pkgtodo['name']);
- }
- }
- update_status(gettext("All packages reinstalled."));
- $static_output .= "\n" . gettext("All packages reinstalled.");
- update_output_window($static_output);
- filter_configure();
- send_event("service restart packages");
- } else {
- update_output_window(gettext("No packages are installed."));
- }
- break;
- case 'installed':
- default:
- $status = install_package($pkgid);
- if ($status != 0) {
- update_status(gettext("Installation of") . " {$pkgid} " . gettext("FAILED!"));
- $static_output .= "\n" . gettext("Installation halted.");
- update_output_window($static_output);
- } else {
- $status_a = gettext(sprintf("Installation of %s completed.", $pkgid));
- update_status($status_a);
- $status = get_after_install_info($pkgid);
- if ($status) {
- $static_output .= "\n" . gettext("Installation completed.") . "\n{$pkgid} " . gettext("setup instructions") . ":\n{$status}";
- } else {
- $static_output .= "\n" . gettext("Installation completed. Please check to make sure that the package is configured from the respective menu then start the package.");
- }
-
- @file_put_contents("/tmp/{$pkgid}.info", $static_output);
- echo "<script type='text/javascript'>document.location=\"pkg_mgr_install.php?mode=installedinfo&pkg={$pkgid}\";</script>";
- }
- filter_configure();
- break;
- }
-
- // Delete all temporary package tarballs and staging areas.
- unlink_if_exists("/tmp/apkg_*");
- rmdir_recursive("/var/tmp/instmp*");
-
- // close log
- if ($fd_log) {
- fclose($fd_log);
- }
-
- /* Restore to read only fs */
- conf_mount_ro();
-}
-?>
-
-</body>
-</html>
diff --git a/usr/local/www/pkg_mgr_installed.php b/usr/local/www/pkg_mgr_installed.php
deleted file mode 100644
index 3801271..0000000
--- a/usr/local/www/pkg_mgr_installed.php
+++ /dev/null
@@ -1,259 +0,0 @@
-<?php
-/* $Id$ */
-/*
- pkg_mgr_installed.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004-2012 Scott Ullrich <sullrich@gmail.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: pkgs
-*/
-
-##|+PRIV
-##|*IDENT=page-system-packagemanager-installed
-##|*NAME=System: Package Manager: Installed page
-##|*DESCR=Allow access to the 'System: Package Manager: Installed' page.
-##|*MATCH=pkg_mgr_installed.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("pkg-utils.inc");
-
-$timezone = $config['system']['timezone'];
-if (!$timezone) {
- $timezone = "Etc/UTC";
-}
-
-date_default_timezone_set($timezone);
-
-/* if upgrade in progress, alert user */
-if (is_subsystem_dirty('packagelock')) {
- $pgtitle = array(gettext("System"), gettext("Package Manager"));
- include("head.inc");
- echo "<body link=\"#0000CC\" vlink=\"#0000CC\" alink=\"#0000CC\">\n";
- include("fbegin.inc");
- echo "Please wait while packages are reinstalled in the background.";
- include("fend.inc");
- echo "</body>";
- echo "</html>";
- exit;
-}
-
-function domTT_title($title_msg, $return="echo") {
- if (!empty($title_msg)) {
- $title_msg = preg_replace("/\s+/", " ", $title_msg);
- $title_msg = preg_replace("/'/", "\'", $title_msg);
- $title= "onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\" onmouseover=\"domTT_activate(this, event, 'content', '{$title_msg}', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle');\"";
- if ($return =="echo") {
- echo $title;
- } else {
- return $title;
- }
- }
-}
-if (is_array($config['installedpackages']['package'])) {
- foreach ($config['installedpackages']['package'] as $instpkg) {
- $tocheck[] = $instpkg['name'];
- }
- $currentvers = get_pkg_info($tocheck, array('version', 'xmlver', 'pkginfolink', 'descr'));
-}
-$closehead = false;
-$pgtitle = array(gettext("System"), gettext("Package Manager"));
-include("head.inc");
-
-?>
-<script type="text/javascript" src="javascript/domTT/domLib.js"></script>
-<script type="text/javascript" src="javascript/domTT/domTT.js"></script>
-<script type="text/javascript" src="javascript/domTT/behaviour.js"></script>
-<script type="text/javascript" src="javascript/domTT/fadomatic.js"></script>
-<script type="text/javascript" src="/javascript/row_helper_dynamic.js"></script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
- <?php include("fbegin.inc");
-
- /* Print package server mismatch warning. See https://redmine.pfsense.org/issues/484 */
- if (!verify_all_package_servers()) {
- print_info_box(package_server_mismatch_message());
- }
-
- /* Print package server SSL warning. See https://redmine.pfsense.org/issues/484 */
- if (check_package_server_ssl() === false) {
- print_info_box(package_server_ssl_failure_message());
- }
-?>
-
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="packages installed">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Available Packages"), false, "pkg_mgr.php");
-// $tab_array[] = array("{$g['product_version']} " . gettext("packages"), false, "pkg_mgr.php");
-// $tab_array[] = array("Packages for any platform", false, "pkg_mgr.php?ver=none");
-// $tab_array[] = array("Packages for a different platform", $requested_version == "other" ? true : false, "pkg_mgr.php?ver=other");
- $tab_array[] = array(gettext("Installed Packages"), true, "pkg_mgr_installed.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="12%" class="listhdrr"><?=gettext("Name"); ?></td>
- <td width="16%" class="listhdrr"><?=gettext("Category"); ?></td>
- <td width="15%" class="listhdrr"><?=gettext("Version"); ?></td>
- <td width="53%" class="listhdr"><?=gettext("Description"); ?></td>
- <td width="40">&nbsp;</td>
- </tr>
- <?php
- if (is_array($config['installedpackages']['package'])):
-
- $instpkgs = array();
- foreach ($config['installedpackages']['package'] as $instpkg) {
- $instpkgs[] = $instpkg['name'];
- }
- natcasesort($instpkgs);
-
- foreach ($instpkgs as $index => $pkgname):
-
- $pkg = $config['installedpackages']['package'][$index];
- if (!$pkg['name']) {
- continue;
- }
-
- // get history/changelog git dir
- $commit_dir = explode("/", $pkg['config_file']);
- $changeloglink = "https://github.com/pfsense/pfsense-packages/commits/master/config/" . $commit_dir[(count($commit_dir)-2)];
- #check package version
- $latest_package = $currentvers[$pkg['name']]['version'];
- if ($latest_package) {
- // we're running a newer version of the package
- if (strcmp($pkg['version'], $latest_package) > 0) {
- $tdclass = "listbggrey";
- if ($g['disablepackagehistory']) {
- $pkgver = "<a>" . gettext("Available") . ": " . $latest_package . "<br />";
- } else {
- $pkgver = "<a target='_blank' href='$changeloglink'>" . gettext("Available") . ": " . $latest_package . "<br />";
- }
- $pkgver .= gettext("Installed") . ": " . $pkg['version'] . "</a>";
- }
- // we're running an older version of the package
- if (strcmp($pkg['version'], $latest_package) < 0) {
- $tdclass = "listbg";
- if ($g['disablepackagehistory']) {
- $pkgver = "<a><font color='#ffffff'>" . gettext("Available") . ": " . $latest_package . "</font><br />";
- } else {
- $pkgver = "<a target='_blank' href='$changeloglink'><font color='#ffffff'>" . gettext("Available") . ": " . $latest_package . "<br />";
- }
- $pkgver .= gettext("Installed") . ": " . $pkg['version'] . "</font></a>";
- }
- // we're running the current version
- if (!strcmp($pkg['version'], $latest_package)) {
- $tdclass = "listr";
- if ($g['disablepackagehistory']) {
- $pkgver = "<a>{$pkg['version']}</a>";
- } else {
- $pkgver = "<a target='_blank' href='$changeloglink'>{$pkg['version']}</a>";
- }
- }
- $pkgdescr = $currentvers[$pkg['name']]['descr'];
- } else {
- // unknown available package version
- $tdclass = "listbg";
- if ($g['disablepackagehistory']) {
- $pkgver = "<a><font color='#ffffff'>" . gettext("Latest") . ": " . gettext("N/A") . "</font><br />";
- } else {
- $pkgver = "<a target='_blank' href='$changeloglink'><font color='#ffffff'>" . gettext("Latest") . ": " . gettext("N/A") . "<br />";
- }
- $pkgver .= gettext("Installed") . ": " . $pkg['version'] . "</font></a>";
- $pkgdescr = $pkg['descr'];
- }
- /* Check package info link */
- if ($pkg['pkginfolink']) {
- $pkginfolink = $pkg['pkginfolink'];
- $pkginfo=gettext("Package info");
- } else {
- $pkginfolink = "https://forum.pfsense.org/index.php/board,15.0.html";
- $pkginfo=gettext("No package info, check the forum");
- }
-
- ?>
- <tr valign="top">
- <td class="listlr">
- <?=$pkg['name'];?>
- </td>
- <td class="listr">
- <?=$pkg['category'];?>
- </td>
- <?php
- if (isset($g['disablepackagehistory'])) {
- echo "<td class='{$tdclass}'>{$pkgver}</td>";
- } else {
- echo "<td class='{$tdclass}' " . domTT_title(gettext("Click on " . ucfirst($pkg['name']) . " version to check its change log."), "return").">{$pkgver}</td>";
- }
- ?>
- <td class="listbg" style="overflow:hidden; text-align:justify;" <?=domTT_title(gettext("Click package info for more details about " . ucfirst($pkg['name']) . " package."))?>>
- <?=$pkgdescr;?>
- <?php if (!$g['disablepackageinfo']): ?>
- <br /><br />
- <a target='_blank' href='<?=$pkginfolink?>' style='align:center;color:#ffffff; filter:Glow(color=#ff0000, strength=12);'><?=$pkginfo?></a>
- <?php endif; ?>
- </td>
- <td valign="middle" class="list nowrap">
- <a href="pkg_mgr_install.php?mode=delete&amp;pkg=<?= $pkg['name']; ?>">
- <img <?=domTT_title(gettext("Remove " . ucfirst($pkg['name']) . " package."))?> src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" />
- </a>
- <br />
- <a href="pkg_mgr_install.php?mode=reinstallpkg&amp;pkg=<?= $pkg['name']; ?>">
- <img <?=domTT_title(gettext("Reinstall " . ucfirst($pkg['name']) . " package."));?> src="./themes/<?= $g['theme']; ?>/images/icons/icon_reinstall_pkg.gif" width="17" height="17" border="0" alt="reinstall" />
- </a>
- <a href="pkg_mgr_install.php?mode=reinstallxml&amp;pkg=<?= $pkg['name']; ?>">
- <img <?=domTT_title(gettext("Reinstall " . ucfirst($pkg['name']) . "'s GUI components."));?> src="./themes/<?= $g['theme']; ?>/images/icons/icon_reinstall_xml.gif" width="17" height="17" border="0" alt="reinstall" />
- </a>
- </td>
- </tr>
- <?php
- endforeach;
- else:
- ?>
- <tr>
- <td colspan="5" align="center">
- <?=gettext("There are no packages currently installed."); ?>
- </td>
- </tr>
- <?php
- endif;
- ?>
- </table>
- </div>
- </td>
- </tr>
- </table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/pkg_mgr_settings.php b/usr/local/www/pkg_mgr_settings.php
deleted file mode 100644
index 04a5151..0000000
--- a/usr/local/www/pkg_mgr_settings.php
+++ /dev/null
@@ -1,163 +0,0 @@
-<?php
-/* $Id$ */
-/*
- pkg_mgr_settings.php
- part of pfSense
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2009 Jim Pingle <jimp@pfsense.org>
- Copyright (C) 2004-2010 Scott Ullrich <sullrich@gmail.com>
- Copyright (C) 2005 Colin Smith
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: pkgs
-*/
-
-##|+PRIV
-##|*IDENT=page-pkg-mgr-settings
-##|*NAME=Packages: Settings page
-##|*DESCR=Allow access to the 'Packages: Settings' page.
-##|*MATCH=pkg_mgr_settings.php*
-##|-PRIV
-
-ini_set('max_execution_time', '0');
-
-require_once("globals.inc");
-require_once("guiconfig.inc");
-require_once("pkg-utils.inc");
-
-if ($_POST) {
- if (!$input_errors) {
- if ($_POST['alturlenable'] == "yes") {
- $config['system']['altpkgrepo']['enable'] = true;
- $config['system']['altpkgrepo']['xmlrpcbaseurl'] = $_POST['pkgrepourl'];
- } else {
- unset($config['system']['altpkgrepo']['enable']);
- }
- write_config();
- }
-}
-
-$curcfg = $config['system']['altpkgrepo'];
-$closehead = false;
-$pgtitle = array(gettext("System"), gettext("Package Settings"));
-include("head.inc");
-?>
-<script type="text/javascript">
-//<![CDATA[
-
-function enable_altpkgrepourl(enable_over) {
- if (document.iform.alturlenable.checked || enable_over) {
- document.iform.pkgrepourl.disabled = 0;
- } else {
- document.iform.pkgrepourl.disabled = 1;
- }
-}
-
-//]]>
-</script>
-</head>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc");
-
- /* Print package server mismatch warning. See https://redmine.pfsense.org/issues/484 */
- if (!verify_all_package_servers()) {
- print_info_box(package_server_mismatch_message());
- }
-
- /* Print package server SSL warning. See https://redmine.pfsense.org/issues/484 */
- if (check_package_server_ssl() === false) {
- print_info_box(package_server_ssl_failure_message());
- }
-?>
-
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-
-<form action="pkg_mgr_settings.php" method="post" name="iform" id="iform">
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="package manager settings">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(sprintf(gettext("%s packages"), $g['product_version']), false, "pkg_mgr.php");
- $tab_array[] = array(gettext("Installed Packages"), false, "pkg_mgr_installed.php");
- $tab_array[] = array(gettext("Package Settings"), true, "pkg_mgr_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="vncell">
- <?php echo gettext("This page allows an alternate package repository to be configured, primarily for temporary use as a testing mechanism."); ?>
- <?php echo gettext("The contents of unofficial packages servers cannot be verified and may contain malicious files."); ?>
- <?php echo gettext("The package server settings should remain at their default values to ensure that verifiable and trusted packages are recevied."); ?>
- <br/><br/>
- <?php echo gettext("A warning is printed on the Dashboard and in the package manager when an unofficial package server is in use."); ?>
- <br/><br/>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Package Repository URL");?></td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Package Repository URL");?></td>
- <td class="vtable">
- <input name="alturlenable" type="checkbox" id="alturlenable" value="yes" onclick="enable_altpkgrepourl()" <?php if (isset($curcfg['enable'])) echo "checked=\"checked\""; ?> /> <?=gettext("Use a non-official server for packages");?> <br />
- <table summary="alternative URL">
- <tr>
- <td><?=gettext("Base URL:");?></td>
- <td>
- <input name="pkgrepourl" type="text" class="formfld url" id="pkgrepourl" size="64" value="<?php if ($curcfg['xmlrpcbaseurl']) echo htmlspecialchars($curcfg['xmlrpcbaseurl']); else echo $g['']; ?>" />
- </td>
- </tr>
- </table>
- <span class="vexpl">
- <?php printf(gettext("This is where %s will check for packages when the"), $g['product_name']);?> <a href="pkg_mgr.php"><?=gettext("System: Packages");?></a> <?=gettext("page is viewed.");?>
- </span>
- </td>
- </tr>
- <script type="text/javascript">
- //<![CDATA[
- enable_altpkgrepourl();
- //]]>
- </script>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/protochart/ProtoChart.js b/usr/local/www/protochart/ProtoChart.js
deleted file mode 100644
index 4e60f18..0000000
--- a/usr/local/www/protochart/ProtoChart.js
+++ /dev/null
@@ -1,2653 +0,0 @@
-/**
- * Class: ProtoChart
- * Version: v0.5 beta
- *
- * ProtoChart is a charting lib on top of Prototype.
- * This library is heavily motivated by excellent work done by:
- * * Flot <http://code.google.com/p/flot/>
- * * Flotr <http://solutoire.com/flotr/>
- *
- * Complete examples can be found at: <http://www.deensoft.com/lab/protochart>
- */
-
-/**
- * Events:
- * ProtoChart:mousemove - Fired when mouse is moved over the chart
- * ProtoChart:plotclick - Fired when graph is clicked
- * ProtoChart:dataclick - Fired when graph is clicked AND the click is on a data point
- * ProtoChart:selected - Fired when certain region on the graph is selected
- * ProtoChart:hit - Fired when mouse is moved near or over certain data point on the graph
- */
-
-
-if(!Proto) var Proto = {};
-
-Proto.Chart = Class.create({
- /**
- * Function:
- * {Object} elem
- * {Object} data
- * {Object} options
- */
- initialize: function(elem, data, options)
- {
- options = options || {};
- this.graphData = [];
- /**
- * Property: options
- *
- * Description: Various options can be set. More details in description.
- *
- * colors:
- * {Array} - pass in a array which contains strings of colors you want to use. Default has 6 color set.
- *
- * legend:
- * {BOOL} - show - if you want to show the legend. Default is false
- * {integer} - noColumns - Number of columns for the legend. Default is 1
- * {function} - labelFormatter - A function that returns a string. The function is called with a string and is expected to return a string. Default = null
- * {string} - labelBoxBorderColor - border color for the little label boxes. Default #CCC
- * {HTMLElem} - container - an HTML id or HTML element where the legend should be rendered. If left null means to put the legend on top of the Chart
- * {string} - position - position for the legend on the Chart. Default value 'ne'
- * {integer} - margin - default valud of 5
- * {string} - backgroundColor - default to null (which means auto-detect)
- * {float} - backgroundOpacity - leave it 0 to avoid background
- *
- * xaxis (yaxis) options:
- * {string} - mode - default is null but you can pass a string "time" to indicate time series
- * {integer} - min
- * {integer} - max
- * {float} - autoscaleMargin - in % to add if auto-setting min/max
- * {mixed} - ticks - either [1, 3] or [[1, "a"], 3] or a function which gets axis info and returns ticks
- * {function} - tickFormatter - A function that returns a string as a tick label. Default is null
- * {float} - tickDecimals
- * {integer} - tickSize
- * {integer} - minTickSize
- * {array} - monthNames
- * {string} - timeformat
- *
- * Points / Lines / Bars options:
- * {bool} - show, default is false
- * {integer} - radius: default is 3
- * {integer} - lineWidth : default is 2
- * {bool} - fill : default is true
- * {string} - fillColor: default is #ffffff
- *
- * Grid options:
- * {string} - color
- * {string} - backgroundColor - defualt is *null*
- * {string} - tickColor - default is *#dddddd*
- * {integer} - labelMargin - should be in pixels default is 3
- * {integer} - borderWidth - default *1*
- * {bool} - clickable - default *null* - pass in TRUE if you wish to monitor click events
- * {mixed} - coloredAreas - default *null* - pass in mixed object eg. {x1, x2}
- * {string} - coloredAreasColor - default *#f4f4f4*
- * {bool} - drawXAxis - default *true*
- * {bool} - drawYAxis - default *true*
- *
- * selection options:
- * {string} - mode : either "x", "y" or "xy"
- * {string} - color : string
- */
- this.options = this.merge(options,{
- colors: ["#edc240", "#00A8F0", "#C0D800", "#cb4b4b", "#4da74d", "#9440ed"],
- legend: {
- show: false,
- noColumns: 1,
- labelFormatter: null,
- labelBoxBorderColor: "#ccc",
- container: null,
- position: "ne",
- margin: 5,
- backgroundColor: null,
- backgroundOpacity: 0.85
- },
- xaxis: {
- mode: null,
- min: null,
- max: null,
- autoscaleMargin: null,
- ticks: null,
- tickFormatter: null,
- tickDecimals: null,
- tickSize: null,
- minTickSize: null,
- monthNames: null,
- timeformat: null
- },
- yaxis: {
- mode: null,
- min: null,
- max: null,
- ticks: null,
- tickFormatter: null,
- tickDecimals: null,
- tickSize: null,
- minTickSize: null,
- monthNames: null,
- timeformat: null,
- autoscaleMargin: 0.02
- },
-
- points: {
- show: false,
- radius: 3,
- lineWidth: 2,
- fill: true,
- fillColor: "#ffffff"
- },
- lines: {
- show: false,
- lineWidth: 2,
- fill: false,
- fillColor: null
- },
- bars: {
- show: false,
- lineWidth: 2,
- barWidth: 1,
- fill: true,
- fillColor: null,
- showShadow: false,
- fillOpacity: 0.4,
- autoScale: true
- },
- pies: {
- show: false,
- radius: 50,
- borderWidth: 1,
- fill: true,
- fillColor: null,
- fillOpacity: 0.90,
- labelWidth: 30,
- fontSize: 11,
- autoScale: true
- },
- grid: {
- color: "#545454",
- backgroundColor: null,
- tickColor: "#dddddd",
- labelMargin: 3,
- borderWidth: 1,
- clickable: null,
- coloredAreas: null,
- coloredAreasColor: "#f4f4f4",
- drawXAxis: true,
- drawYAxis: true
- },
- mouse: {
- track: false,
- position: 'se',
- fixedPosition: true,
- clsName: 'mouseValHolder',
- trackFormatter: this.defaultTrackFormatter,
- margin: 3,
- color: '#ff3f19',
- trackDecimals: 1,
- sensibility: 2,
- radius: 5,
- lineColor: '#cb4b4b'
- },
- selection: {
- mode: null,
- color: "#97CBFF"
- },
- allowDataClick: true,
- makeRandomColor: false,
- shadowSize: 4
- });
-
- /*
- * Local variables.
- */
- this.canvas = null;
- this.overlay = null;
- this.eventHolder = null;
- this.context = null;
- this.overlayContext = null;
-
- this.domObj = $(elem);
-
- this.xaxis = {};
- this.yaxis = {};
- this.chartOffset = {left: 0, right: 0, top: 0, bottom: 0};
- this.yLabelMaxWidth = 0;
- this.yLabelMaxHeight = 0;
- this.xLabelBoxWidth = 0;
- this.canvasWidth = 0;
- this.canvasHeight = 0;
- this.chartWidth = 0;
- this.chartHeight = 0;
- this.hozScale = 0;
- this.vertScale = 0;
- this.workarounds = {};
-
- this.domObj = $(elem);
-
- this.barDataRange = [];
-
- this.lastMousePos = { pageX: null, pageY: null };
- this.selection = { first: { x: -1, y: -1}, second: { x: -1, y: -1} };
- this.prevSelection = null;
- this.selectionInterval = null;
- this.ignoreClick = false;
- this.prevHit = null;
-
- if(this.options.makeRandomColor)
- this.options.color = this.makeRandomColor(this.options.colors);
-
- this.setData(data);
- this.constructCanvas();
- this.setupGrid();
- this.draw();
- },
- /**
- * Private function internally used.
- */
- merge: function(src, dest)
- {
- var result = dest || {};
- for(var i in src){
- result[i] = (typeof(src[i]) == 'object' && !(src[i].constructor == Array || src[i].constructor == RegExp)) ? this.merge(src[i], dest[i]) : result[i] = src[i];
- }
- return result;
- },
- /**
- * Function: setData
- * {Object} data
- *
- * Description:
- * Sets datasoruces properly then sets the Bar Width accordingly, then copies the default data options and then processes the graph data
- *
- * Returns: none
- *
- */
- setData: function(data)
- {
- this.graphData = this.parseData(data);
- this.setBarWidth();
- this.copyGraphDataOptions();
- this.processGraphData();
- },
- /**
- * Function: parseData
- * {Object} data
- *
- * Return:
- * {Object} result
- *
- * Description:
- * Takes the provided data object and converts it into generic data that we can understand. User can pass in data in 3 different ways:
- * - [d1, d2]
- * - [{data: d1, label: "data1"}, {data: d2, label: "data2"}]
- * - [d1, {data: d1, label: "data1"}]
- *
- * This function parses these senarios and makes it readable
- */
- parseData: function(data)
- {
- var res = [];
- data.each(function(d){
- var s;
- if(d.data) {
- s = {};
- for(var v in d) {
- s[v] = d[v];
- }
- }
- else {
- s = {data: d};
- }
- res.push(s);
- }.bind(this));
- return res;
- },
- /**
- * function: makeRandomColor
- * {Object} colorSet
- *
- * Return:
- * {Array} result - array containing random colors
- */
- makeRandomColor: function(colorSet)
- {
- var randNum = Math.floor(Math.random() * colorSet.length);
- var randArr = [];
- var newArr = [];
- randArr.push(randNum);
-
- while(randArr.length < colorSet.length)
- {
- var tempNum = Math.floor(Math.random() * colorSet.length);
-
- while(checkExisted(tempNum, randArr))
- tempNum = Math.floor(Math.random() * colorSet.length);
-
- randArr.push(tempNum);
- }
-
- randArr.each(function(ra){
- newArr.push(colorSet[ra]);
-
- }.bind(this));
- return newArr;
- },
- /**
- * function: checkExisted
- * {Object} needle
- * {Object} haystack
- *
- * return:
- * {bool} existed - true if it finds needle in the haystack
- */
- checkExisted: function(needle, haystack)
- {
- var existed = false;
- haystack.each(function(aNeedle){
- if(aNeedle == needle) {
- existed = true;
- throw $break;
- }
- }.bind(this));
- return existed;
- },
- /**
- * function: setBarWidth
- *
- * Description: sets the bar width for Bar Graph, you should enable *autoScale* property for bar graph
- */
- setBarWidth: function()
- {
- if(this.options.bars.show && this.options.bars.autoScale)
- {
- this.options.bars.barWidth = 1 / this.graphData.length / 1.2;
- }
- },
- /**
- * Function: copyGraphDataOptions
- *
- * Description: Private function that goes through each graph data (series) and assigned the graph
- * properties to it.
- */
- copyGraphDataOptions: function()
- {
- var i, neededColors = this.graphData.length, usedColors = [], assignedColors = [];
-
- this.graphData.each(function(gd){
- var sc = gd.color;
- if(sc) {
- --neededColors;
- if(Object.isNumber(sc)) {
- assignedColors.push(sc);
- }
- else {
- usedColors.push(this.parseColor(sc));
- }
- }
- }.bind(this));
-
-
- assignedColors.each(function(ac){
- neededColors = Math.max(neededColors, ac + 1);
- });
-
- var colors = [];
- var variation = 0;
- i = 0;
- while (colors.length < neededColors) {
- var c;
- if (this.options.colors.length == i) {
- c = new Proto.Color(100, 100, 100);
- }
- else {
- c = this.parseColor(this.options.colors[i]);
- }
-
- var sign = variation % 2 == 1 ? -1 : 1;
- var factor = 1 + sign * Math.ceil(variation / 2) * 0.2;
- c.scale(factor, factor, factor);
-
- colors.push(c);
-
- ++i;
- if (i >= this.options.colors.length) {
- i = 0;
- ++variation;
- }
- }
-
- var colorIndex = 0, s;
-
- this.graphData.each(function(gd){
- if(gd.color == null)
- {
- gd.color = colors[colorIndex].toString();
- ++colorIndex;
- }
- else if(Object.isNumber(gd.color)) {
- gd.color = colors[gd.color].toString();
- }
-
- gd.lines = Object.extend(Object.clone(this.options.lines), gd.lines);
- gd.points = Object.extend(Object.clone(this.options.points), gd.points);
- gd.bars = Object.extend(Object.clone(this.options.bars), gd.bars);
- gd.mouse = Object.extend(Object.clone(this.options.mouse), gd.mouse);
- if (gd.shadowSize == null) {
- gd.shadowSize = this.options.shadowSize;
- }
- }.bind(this));
-
- },
- /**
- * Function: processGraphData
- *
- * Description: processes graph data, setup xaxis and yaxis min and max points.
- */
- processGraphData: function() {
-
- this.xaxis.datamin = this.yaxis.datamin = Number.MAX_VALUE;
- this.xaxis.datamax = this.yaxis.datamax = Number.MIN_VALUE;
-
- this.graphData.each(function(gd) {
- var data = gd.data;
- data.each(function(d){
- if(d == null) {
- return;
- }
-
- var x = d[0], y = d[1];
- if(!x || !y || isNaN(x = +x) || isNaN(y = +y)) {
- d = null;
- return;
- }
-
- if (x < this.xaxis.datamin)
- this.xaxis.datamin = x;
- if (x > this.xaxis.datamax)
- this.xaxis.datamax = x;
- if (y < this.yaxis.datamin)
- this.yaxis.datamin = y;
- if (y > this.yaxis.datamax)
- this.yaxis.datamax = y;
- }.bind(this));
- }.bind(this));
-
-
- if (this.xaxis.datamin == Number.MAX_VALUE)
- this.xaxis.datamin = 0;
- if (this.yaxis.datamin == Number.MAX_VALUE)
- this.yaxis.datamin = 0;
- if (this.xaxis.datamax == Number.MIN_VALUE)
- this.xaxis.datamax = 1;
- if (this.yaxis.datamax == Number.MIN_VALUE)
- this.yaxis.datamax = 1;
- },
- /**
- * Function: constructCanvas
- *
- * Description: constructs the main canvas for drawing. It replicates the HTML elem (usually DIV) passed
- * in via constructor. If there is no height/width assigned to the HTML elem then we take a default size
- * of 400px (width) and 300px (height)
- */
- constructCanvas: function() {
-
- this.canvasWidth = this.domObj.getWidth();
- this.canvasHeight = this.domObj.getHeight();
- this.domObj.update(""); // clear target
- this.domObj.setStyle({
- "position": "relative"
- });
-
- if (this.canvasWidth <= 0) {
- this.canvasWdith = 400;
- }
- if(this.canvasHeight <= 0) {
- this.canvasHeight = 300;
- }
-
- this.canvas = (Prototype.Browser.IE) ? document.createElement("canvas") : new Element("CANVAS", {'width': this.canvasWidth, 'height': this.canvasHeight});
- Element.extend(this.canvas);
- this.canvas.style.width = this.canvasWidth + "px";
- this.canvas.style.height = this.canvasHeight + "px";
-
- this.domObj.appendChild(this.canvas);
-
- if (Prototype.Browser.IE) // excanvas hack
- {
- this.canvas = $(window.G_vmlCanvasManager.initElement(this.canvas));
- }
- this.canvas = $(this.canvas);
-
- this.context = this.canvas.getContext("2d");
-
- this.overlay = (Prototype.Browser.IE) ? document.createElement("canvas") : new Element("CANVAS", {'width': this.canvasWidth, 'height': this.canvasHeight});
- Element.extend(this.overlay);
- this.overlay.style.width = this.canvasWidth + "px";
- this.overlay.style.height = this.canvasHeight + "px";
- this.overlay.style.position = "absolute";
- this.overlay.style.left = "0px";
- this.overlay.style.right = "0px";
-
- this.overlay.setStyle({
- 'position': 'absolute',
- 'left': '0px',
- 'right': '0px'
- });
- this.domObj.appendChild(this.overlay);
-
- if (Prototype.Browser.IE) {
- this.overlay = $(window.G_vmlCanvasManager.initElement(this.overlay));
- }
-
- this.overlay = $(this.overlay);
- this.overlayContext = this.overlay.getContext("2d");
-
- if(this.options.selection.mode)
- {
- this.overlay.observe('mousedown', this.onMouseDown.bind(this));
- this.overlay.observe('mousemove', this.onMouseMove.bind(this));
- }
- if(this.options.grid.clickable) {
- this.overlay.observe('click', this.onClick.bind(this));
- }
- if(this.options.mouse.track)
- {
- this.overlay.observe('mousemove', this.onMouseMove.bind(this));
- }
- },
- /**
- * function: setupGrid
- *
- * Description: a container function that does a few interesting things.
- *
- * 1. calls <extendXRangeIfNeededByBar> function which makes sure that our axis are expanded if needed
- *
- * 2. calls <setRange> function providing xaxis options which fixes the ranges according to data points
- *
- * 3. calls <prepareTickGeneration> function for xaxis which generates ticks according to options provided by user
- *
- * 4. calls <setTicks> function for xaxis that sets the ticks
- *
- * similar sequence is called for y-axis.
- *
- * At the end if this is a pie chart than we insert Labels (around the pie chart) via <insertLabels> and we also call <insertLegend>
- */
- setupGrid: function()
- {
- if(this.options.bars.show)
- {
- this.xaxis.max += 0.5;
- this.xaxis.min -= 0.5;
- }
- //x-axis
- this.extendXRangeIfNeededByBar();
- this.setRange(this.xaxis, this.options.xaxis);
- this.prepareTickGeneration(this.xaxis, this.options.xaxis);
- this.setTicks(this.xaxis, this.options.xaxis);
-
-
- //y-axis
- this.setRange(this.yaxis, this.options.yaxis);
- this.prepareTickGeneration(this.yaxis, this.options.yaxis);
- this.setTicks(this.yaxis, this.options.yaxis);
- this.setSpacing();
-
- if(!this.options.pies.show)
- {
- this.insertLabels();
- }
- this.insertLegend();
- },
- /**
- * function: setRange
- *
- * parameters:
- * {Object} axis
- * {Object} axisOptions
- */
- setRange: function(axis, axisOptions) {
- var min = axisOptions.min != null ? axisOptions.min : axis.datamin;
- var max = axisOptions.max != null ? axisOptions.max : axis.datamax;
-
- if (max - min == 0.0) {
- // degenerate case
- var widen;
- if (max == 0.0)
- widen = 1.0;
- else
- widen = 0.01;
-
- min -= widen;
- max += widen;
- }
- else {
- // consider autoscaling
- var margin = axisOptions.autoscaleMargin;
- if (margin != null) {
- if (axisOptions.min == null) {
- min -= (max - min) * margin;
- // make sure we don't go below zero if all values
- // are positive
- if (min < 0 && axis.datamin >= 0)
- min = 0;
- }
- if (axisOptions.max == null) {
- max += (max - min) * margin;
- if (max > 0 && axis.datamax <= 0)
- max = 0;
- }
- }
- }
- axis.min = min;
- axis.max = max;
- },
- /**
- * function: prepareTickGeneration
- *
- * Parameters:
- * {Object} axis
- * {Object} axisOptions
- */
- prepareTickGeneration: function(axis, axisOptions) {
- // estimate number of ticks
- var noTicks;
- if (Object.isNumber(axisOptions.ticks) && axisOptions.ticks > 0)
- noTicks = axisOptions.ticks;
- else if (axis == this.xaxis)
- noTicks = this.canvasWidth / 100;
- else
- noTicks = this.canvasHeight / 60;
-
- var delta = (axis.max - axis.min) / noTicks;
- var size, generator, unit, formatter, i, magn, norm;
-
- if (axisOptions.mode == "time") {
- function formatDate(d, fmt, monthNames) {
- var leftPad = function(n) {
- n = "" + n;
- return n.length == 1 ? "0" + n : n;
- };
-
- var r = [];
- var escape = false;
- if (monthNames == null)
- monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
- for (var i = 0; i < fmt.length; ++i) {
- var c = fmt.charAt(i);
-
- if (escape) {
- switch (c) {
- case 'h': c = "" + d.getHours(); break;
- case 'H': c = leftPad(d.getHours()); break;
- case 'M': c = leftPad(d.getMinutes()); break;
- case 'S': c = leftPad(d.getSeconds()); break;
- case 'd': c = "" + d.getDate(); break;
- case 'm': c = "" + (d.getMonth() + 1); break;
- case 'y': c = "" + d.getFullYear(); break;
- case 'b': c = "" + monthNames[d.getMonth()]; break;
- }
- r.push(c);
- escape = false;
- }
- else {
- if (c == "%")
- escape = true;
- else
- r.push(c);
- }
- }
- return r.join("");
- }
-
-
- // map of app. size of time units in milliseconds
- var timeUnitSize = {
- "second": 1000,
- "minute": 60 * 1000,
- "hour": 60 * 60 * 1000,
- "day": 24 * 60 * 60 * 1000,
- "month": 30 * 24 * 60 * 60 * 1000,
- "year": 365.2425 * 24 * 60 * 60 * 1000
- };
-
-
- // the allowed tick sizes, after 1 year we use
- // an integer algorithm
- var spec = [
- [1, "second"], [2, "second"], [5, "second"], [10, "second"],
- [30, "second"],
- [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],
- [30, "minute"],
- [1, "hour"], [2, "hour"], [4, "hour"],
- [8, "hour"], [12, "hour"],
- [1, "day"], [2, "day"], [3, "day"],
- [0.25, "month"], [0.5, "month"], [1, "month"],
- [2, "month"], [3, "month"], [6, "month"],
- [1, "year"]
- ];
-
- var minSize = 0;
- if (axisOptions.minTickSize != null) {
- if (typeof axisOptions.tickSize == "number")
- minSize = axisOptions.tickSize;
- else
- minSize = axisOptions.minTickSize[0] * timeUnitSize[axisOptions.minTickSize[1]];
- }
-
- for (i = 0; i < spec.length - 1; ++i) {
- if (delta < (spec[i][0] * timeUnitSize[spec[i][1]] + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2 && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) {
- break;
- }
- }
-
- size = spec[i][0];
- unit = spec[i][1];
-
- // special-case the possibility of several years
- if (unit == "year") {
- magn = Math.pow(10, Math.floor(Math.log(delta / timeUnitSize.year) / Math.LN10));
- norm = (delta / timeUnitSize.year) / magn;
- if (norm < 1.5)
- size = 1;
- else if (norm < 3)
- size = 2;
- else if (norm < 7.5)
- size = 5;
- else
- size = 10;
-
- size *= magn;
- }
-
- if (axisOptions.tickSize) {
- size = axisOptions.tickSize[0];
- unit = axisOptions.tickSize[1];
- }
-
- var floorInBase = this.floorInBase; //gives us a reference to a global function..
-
- generator = function(axis) {
- var ticks = [],
- tickSize = axis.tickSize[0], unit = axis.tickSize[1],
- d = new Date(axis.min);
-
- var step = tickSize * timeUnitSize[unit];
-
-
-
- if (unit == "second")
- d.setSeconds(floorInBase(d.getSeconds(), tickSize));
- if (unit == "minute")
- d.setMinutes(floorInBase(d.getMinutes(), tickSize));
- if (unit == "hour")
- d.setHours(floorInBase(d.getHours(), tickSize));
- if (unit == "month")
- d.setMonth(floorInBase(d.getMonth(), tickSize));
- if (unit == "year")
- d.setFullYear(floorInBase(d.getFullYear(), tickSize));
-
- // reset smaller components
- d.setMilliseconds(0);
- if (step >= timeUnitSize.minute)
- d.setSeconds(0);
- if (step >= timeUnitSize.hour)
- d.setMinutes(0);
- if (step >= timeUnitSize.day)
- d.setHours(0);
- if (step >= timeUnitSize.day * 4)
- d.setDate(1);
- if (step >= timeUnitSize.year)
- d.setMonth(0);
-
-
- var carry = 0, v;
- do {
- v = d.getTime();
- ticks.push({ v: v, label: axis.tickFormatter(v, axis) });
- if (unit == "month") {
- if (tickSize < 1) {
- d.setDate(1);
- var start = d.getTime();
- d.setMonth(d.getMonth() + 1);
- var end = d.getTime();
- d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);
- carry = d.getHours();
- d.setHours(0);
- }
- else
- d.setMonth(d.getMonth() + tickSize);
- }
- else if (unit == "year") {
- d.setFullYear(d.getFullYear() + tickSize);
- }
- else
- d.setTime(v + step);
- } while (v < axis.max);
-
- return ticks;
- };
-
- formatter = function (v, axis) {
- var d = new Date(v);
-
- // first check global format
- if (axisOptions.timeformat != null)
- return formatDate(d, axisOptions.timeformat, axisOptions.monthNames);
-
- var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];
- var span = axis.max - axis.min;
-
- if (t < timeUnitSize.minute)
- fmt = "%h:%M:%S";
- else if (t < timeUnitSize.day) {
- if (span < 2 * timeUnitSize.day)
- fmt = "%h:%M";
- else
- fmt = "%b %d %h:%M";
- }
- else if (t < timeUnitSize.month)
- fmt = "%b %d";
- else if (t < timeUnitSize.year) {
- if (span < timeUnitSize.year)
- fmt = "%b";
- else
- fmt = "%b %y";
- }
- else
- fmt = "%y";
-
- return formatDate(d, fmt, axisOptions.monthNames);
- };
- }
- else {
- // pretty rounding of base-10 numbers
- var maxDec = axisOptions.tickDecimals;
- var dec = -Math.floor(Math.log(delta) / Math.LN10);
- if (maxDec != null && dec > maxDec)
- dec = maxDec;
-
- magn = Math.pow(10, -dec);
- norm = delta / magn; // norm is between 1.0 and 10.0
-
- if (norm < 1.5)
- size = 1;
- else if (norm < 3) {
- size = 2;
- // special case for 2.5, requires an extra decimal
- if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {
- size = 2.5;
- ++dec;
- }
- }
- else if (norm < 7.5)
- size = 5;
- else
- size = 10;
-
- size *= magn;
-
- if (axisOptions.minTickSize != null && size < axisOptions.minTickSize)
- size = axisOptions.minTickSize;
-
- if (axisOptions.tickSize != null)
- size = axisOptions.tickSize;
-
- axis.tickDecimals = Math.max(0, (maxDec != null) ? maxDec : dec);
-
- var floorInBase = this.floorInBase;
-
- generator = function (axis) {
- var ticks = [];
- var start = floorInBase(axis.min, axis.tickSize);
- // then spew out all possible ticks
- var i = 0, v;
- do {
- v = start + i * axis.tickSize;
- ticks.push({ v: v, label: axis.tickFormatter(v, axis) });
- ++i;
- } while (v < axis.max);
- return ticks;
- };
-
- formatter = function (v, axis) {
- if(v) {
- return v.toFixed(axis.tickDecimals);
- }
- return 0;
- };
- }
-
- axis.tickSize = unit ? [size, unit] : size;
- axis.tickGenerator = generator;
- if (Object.isFunction(axisOptions.tickFormatter))
- axis.tickFormatter = function (v, axis) { return "" + axisOptions.tickFormatter(v, axis); };
- else
- axis.tickFormatter = formatter;
- },
- /**
- * function: extendXRangeIfNeededByBar
- */
- extendXRangeIfNeededByBar: function() {
-
- if (this.options.xaxis.max == null) {
- // great, we're autoscaling, check if we might need a bump
- var newmax = this.xaxis.max;
- this.graphData.each(function(gd){
- if(gd.bars.show && gd.bars.barWidth + this.xaxis.datamax > newmax)
- {
- newmax = this.xaxis.datamax + gd.bars.barWidth;
- }
- }.bind(this));
- this.xaxis.nax = newmax;
-
- }
- },
- /**
- * function: setTicks
- *
- * parameters:
- * {Object} axis
- * {Object} axisOptions
- */
- setTicks: function(axis, axisOptions) {
- axis.ticks = [];
-
- if (axisOptions.ticks == null)
- axis.ticks = axis.tickGenerator(axis);
- else if (typeof axisOptions.ticks == "number") {
- if (axisOptions.ticks > 0)
- axis.ticks = axis.tickGenerator(axis);
- }
- else if (axisOptions.ticks) {
- var ticks = axisOptions.ticks;
-
- if (Object.isFunction(ticks))
- // generate the ticks
- ticks = ticks({ min: axis.min, max: axis.max });
-
- // clean up the user-supplied ticks, copy them over
- //var i, v;
- ticks.each(function(t, i){
- var v = null;
- var label = null;
- if(typeof t == 'object') {
- v = t[0];
- if(t.length > 1) { label = t[1]; }
- }
- else {
- v = t;
- }
- if(!label) {
- label = axis.tickFormatter(v, axis);
- }
- axis.ticks[i] = {v: v, label: label}
- }.bind(this));
-
- }
-
- if (axisOptions.autoscaleMargin != null && axis.ticks.length > 0) {
- if (axisOptions.min == null)
- axis.min = Math.min(axis.min, axis.ticks[0].v);
- if (axisOptions.max == null && axis.ticks.length > 1)
- axis.max = Math.min(axis.max, axis.ticks[axis.ticks.length - 1].v);
- }
- },
- /**
- * Function: setSpacing
- *
- * Parameters: none
- */
- setSpacing: function() {
- // calculate y label dimensions
- var i, labels = [], l;
- for (i = 0; i < this.yaxis.ticks.length; ++i) {
- l = this.yaxis.ticks[i].label;
-
- if (l)
- labels.push('<div class="tickLabel">' + l + '</div>');
- }
-
- if (labels.length > 0) {
- var dummyDiv = new Element('div', {'style': 'position:absolute;top:-10000px;font-size:smaller'});
- dummyDiv.update(labels.join(""));
- this.domObj.insert(dummyDiv);
- this.yLabelMaxWidth = dummyDiv.getWidth();
- this.yLabelMaxHeight = dummyDiv.select('div')[0].getHeight();
- dummyDiv.remove();
- }
-
- var maxOutset = this.options.grid.borderWidth;
- if (this.options.points.show)
- maxOutset = Math.max(maxOutset, this.options.points.radius + this.options.points.lineWidth/2);
- for (i = 0; i < this.graphData.length; ++i) {
- if (this.graphData[i].points.show)
- maxOutset = Math.max(maxOutset, this.graphData[i].points.radius + this.graphData[i].points.lineWidth/2);
- }
-
- this.chartOffset.left = this.chartOffset.right = this.chartOffset.top = this.chartOffset.bottom = maxOutset;
-
- this.chartOffset.left += this.yLabelMaxWidth + this.options.grid.labelMargin;
- this.chartWidth = this.canvasWidth - this.chartOffset.left - this.chartOffset.right;
-
- this.xLabelBoxWidth = this.chartWidth / 6;
- labels = [];
-
- for (i = 0; i < this.xaxis.ticks.length; ++i) {
- l = this.xaxis.ticks[i].label;
- if (l) {
- labels.push('<span class="tickLabel" width="' + this.xLabelBoxWidth + '">' + l + '</span>');
- }
- }
-
- var xLabelMaxHeight = 0;
- if (labels.length > 0) {
- var dummyDiv = new Element('div', {'style': 'position:absolute;top:-10000px;font-size:smaller'});
- dummyDiv.update(labels.join(""));
- this.domObj.appendChild(dummyDiv);
- xLabelMaxHeight = dummyDiv.getHeight();
- dummyDiv.remove();
- }
-
- this.chartOffset.bottom += xLabelMaxHeight + this.options.grid.labelMargin;
- this.chartHeight = this.canvasHeight - this.chartOffset.bottom - this.chartOffset.top;
- this.hozScale = this.chartWidth / (this.xaxis.max - this.xaxis.min);
- this.vertScale = this.chartHeight / (this.yaxis.max - this.yaxis.min);
- },
- /**
- * function: draw
- */
- draw: function() {
- if(this.options.bars.show)
- {
- this.extendXRangeIfNeededByBar();
- this.setSpacing();
- this.drawGrid();
- this.drawBarGraph(this.graphData, this.barDataRange);
- }
- else if(this.options.pies.show)
- {
- this.preparePieData(this.graphData);
- this.drawPieGraph(this.graphData);
- }
- else
- {
- this.drawGrid();
- for (var i = 0; i < this.graphData.length; i++) {
- this.drawGraph(this.graphData[i]);
- }
- }
- },
- /**
- * function: translateHoz
- *
- * Paramters:
- * {Object} x
- *
- * Description: Given a value this function translate it to relative x coord on canvas
- */
- translateHoz: function(x) {
- return (x - this.xaxis.min) * this.hozScale;
- },
- /**
- * function: translateVert
- *
- * parameters:
- * {Object} y
- *
- * Description: Given a value this function translate it to relative y coord on canvas
- */
- translateVert: function(y) {
- return this.chartHeight - (y - this.yaxis.min) * this.vertScale;
- },
- /**
- * function: drawGrid
- *
- * parameters: none
- *
- * description: draws the actual grid on the canvas
- */
- drawGrid: function() {
- var i;
-
- this.context.save();
- this.context.clearRect(0, 0, this.canvasWidth, this.canvasHeight);
- this.context.translate(this.chartOffset.left, this.chartOffset.top);
-
- // draw background, if any
- if (this.options.grid.backgroundColor != null) {
- this.context.fillStyle = this.options.grid.backgroundColor;
- this.context.fillRect(0, 0, this.chartWidth, this.chartHeight);
- }
-
- // draw colored areas
- if (this.options.grid.coloredAreas) {
- var areas = this.options.grid.coloredAreas;
- if (Object.isFunction(areas)) {
- areas = areas({ xmin: this.xaxis.min, xmax: this.xaxis.max, ymin: this.yaxis.min, ymax: this.yaxis.max });
- }
-
- areas.each(function(a){
- // clip
- if (a.x1 == null || a.x1 < this.xaxis.min)
- a.x1 = this.xaxis.min;
- if (a.x2 == null || a.x2 > this.xaxis.max)
- a.x2 = this.xaxis.max;
- if (a.y1 == null || a.y1 < this.yaxis.min)
- a.y1 = this.yaxis.min;
- if (a.y2 == null || a.y2 > this.yaxis.max)
- a.y2 = this.yaxis.max;
-
- var tmp;
- if (a.x1 > a.x2) {
- tmp = a.x1;
- a.x1 = a.x2;
- a.x2 = tmp;
- }
- if (a.y1 > a.y2) {
- tmp = a.y1;
- a.y1 = a.y2;
- a.y2 = tmp;
- }
-
- if (a.x1 >= this.xaxis.max || a.x2 <= this.xaxis.min || a.x1 == a.x2
- || a.y1 >= this.yaxis.max || a.y2 <= this.yaxis.min || a.y1 == a.y2)
- return;
-
- this.context.fillStyle = a.color || this.options.grid.coloredAreasColor;
- this.context.fillRect(Math.floor(this.translateHoz(a.x1)), Math.floor(this.translateVert(a.y2)),
- Math.floor(this.translateHoz(a.x2) - this.translateHoz(a.x1)), Math.floor(this.translateVert(a.y1) - this.translateVert(a.y2)));
- }.bind(this));
-
-
- }
-
- // draw the inner grid
- this.context.lineWidth = 1;
- this.context.strokeStyle = this.options.grid.tickColor;
- this.context.beginPath();
- var v;
- if (this.options.grid.drawXAxis) {
- this.xaxis.ticks.each(function(aTick){
- v = aTick.v;
- if(v <= this.xaxis.min || v >= this.xaxis.max) {
- return;
- }
- this.context.moveTo(Math.floor(this.translateHoz(v)) + this.context.lineWidth / 2, 0);
- this.context.lineTo(Math.floor(this.translateHoz(v)) + this.context.lineWidth / 2, this.chartHeight);
- }.bind(this));
-
- }
-
- if (this.options.grid.drawYAxis) {
- this.yaxis.ticks.each(function(aTick){
- v = aTick.v;
- if(v <= this.yaxis.min || v >= this.yaxis.max) {
- return;
- }
- this.context.moveTo(0, Math.floor(this.translateVert(v)) + this.context.lineWidth / 2);
- this.context.lineTo(this.chartWidth, Math.floor(this.translateVert(v)) + this.context.lineWidth / 2);
- }.bind(this));
-
- }
- this.context.stroke();
-
- if (this.options.grid.borderWidth) {
- // draw border
- this.context.lineWidth = this.options.grid.borderWidth;
- this.context.strokeStyle = this.options.grid.color;
- this.context.lineJoin = "round";
- this.context.strokeRect(0, 0, this.chartWidth, this.chartHeight);
- this.context.restore();
- }
- },
- /**
- * function: insertLabels
- *
- * parameters: none
- *
- * description: inserts the label with proper spacing. Both on X and Y axis
- */
- insertLabels: function() {
- this.domObj.select(".tickLabels").invoke('remove');
-
- var i, tick;
- var html = '<div class="tickLabels" style="font-size:smaller;color:' + this.options.grid.color + '">';
-
- // do the x-axis
- this.xaxis.ticks.each(function(tick){
- if (!tick.label || tick.v < this.xaxis.min || tick.v > this.xaxis.max)
- return;
- html += '<div style="position:absolute;top:' + (this.chartOffset.top + this.chartHeight + this.options.grid.labelMargin) + 'px;left:' + (this.chartOffset.left + this.translateHoz(tick.v) - this.xLabelBoxWidth/2) + 'px;width:' + this.xLabelBoxWidth + 'px;text-align:center" class="tickLabel">' + tick.label + "</div>";
-
- }.bind(this));
-
- // do the y-axis
- this.yaxis.ticks.each(function(tick){
- if (!tick.label || tick.v < this.yaxis.min || tick.v > this.yaxis.max)
- return;
- html += '<div id="ylabels" style="position:absolute;top:' + (this.chartOffset.top + this.translateVert(tick.v) - this.yLabelMaxHeight/2) + 'px;left:0;width:' + this.yLabelMaxWidth + 'px;text-align:right" class="tickLabel">' + tick.label + "</div>";
- }.bind(this));
-
- html += '</div>';
-
- this.domObj.insert(html);
- },
- /**
- * function: drawGraph
- *
- * Paramters:
- * {Object} graphData
- *
- * Description: given a graphData (series) this function calls a proper lower level method to draw it.
- */
- drawGraph: function(graphData) {
- if (graphData.lines.show || (!graphData.bars.show && !graphData.points.show))
- this.drawGraphLines(graphData);
- if (graphData.bars.show)
- this.drawGraphBar(graphData);
- if (graphData.points.show)
- this.drawGraphPoints(graphData);
- },
- /**
- * function: plotLine
- *
- * parameters:
- * {Object} data
- * {Object} offset
- *
- * description:
- * Helper function that plots a line based on the data provided
- */
- plotLine: function(data, offset) {
- var prev, cur = null, drawx = null, drawy = null;
-
- this.context.beginPath();
- for (var i = 0; i < data.length; ++i) {
- prev = cur;
- cur = data[i];
-
- if (prev == null || cur == null)
- continue;
-
- var x1 = prev[0], y1 = prev[1],
- x2 = cur[0], y2 = cur[1];
-
- // clip with ymin
- if (y1 <= y2 && y1 < this.yaxis.min) {
- if (y2 < this.yaxis.min)
- continue; // line segment is outside
- // compute new intersection point
- x1 = (this.yaxis.min - y1) / (y2 - y1) * (x2 - x1) + x1;
- y1 = this.yaxis.min;
- }
- else if (y2 <= y1 && y2 < this.yaxis.min) {
- if (y1 < this.yaxis.min)
- continue;
- x2 = (this.yaxis.min - y1) / (y2 - y1) * (x2 - x1) + x1;
- y2 = this.yaxis.min;
- }
-
- // clip with ymax
- if (y1 >= y2 && y1 > this.yaxis.max) {
- if (y2 > this.yaxis.max)
- continue;
- x1 = (this.yaxis.max - y1) / (y2 - y1) * (x2 - x1) + x1;
- y1 = this.yaxis.max;
- }
- else if (y2 >= y1 && y2 > this.yaxis.max) {
- if (y1 > this.yaxis.max)
- continue;
- x2 = (this.yaxis.max - y1) / (y2 - y1) * (x2 - x1) + x1;
- y2 = this.yaxis.max;
- }
-
- // clip with xmin
- if (x1 <= x2 && x1 < this.xaxis.min) {
- if (x2 < this.xaxis.min)
- continue;
- y1 = (this.xaxis.min - x1) / (x2 - x1) * (y2 - y1) + y1;
- x1 = this.xaxis.min;
- }
- else if (x2 <= x1 && x2 < this.xaxis.min) {
- if (x1 < this.xaxis.min)
- continue;
- y2 = (this.xaxis.min - x1) / (x2 - x1) * (y2 - y1) + y1;
- x2 = this.xaxis.min;
- }
-
- // clip with xmax
- if (x1 >= x2 && x1 > this.xaxis.max) {
- if (x2 > this.xaxis.max)
- continue;
- y1 = (this.xaxis.max - x1) / (x2 - x1) * (y2 - y1) + y1;
- x1 = this.xaxis.max;
- }
- else if (x2 >= x1 && x2 > this.xaxis.max) {
- if (x1 > this.xaxis.max)
- continue;
- y2 = (this.xaxis.max - x1) / (x2 - x1) * (y2 - y1) + y1;
- x2 = this.xaxis.max;
- }
-
- if (drawx != this.translateHoz(x1) || drawy != this.translateVert(y1) + offset)
- this.context.moveTo(this.translateHoz(x1), this.translateVert(y1) + offset);
-
- drawx = this.translateHoz(x2);
- drawy = this.translateVert(y2) + offset;
- this.context.lineTo(drawx, drawy);
- }
- this.context.stroke();
- },
- /**
- * function: plotLineArea
- *
- * parameters:
- * {Object} data
- *
- * description:
- * Helper functoin that plots a colored line graph. This function
- * takes the data nad then fill in the area on the graph properly
- */
- plotLineArea: function(data) {
- var prev, cur = null;
-
- var bottom = Math.min(Math.max(0, this.yaxis.min), this.yaxis.max);
- var top, lastX = 0;
-
- var areaOpen = false;
-
- for (var i = 0; i < data.length; ++i) {
- prev = cur;
- cur = data[i];
-
- if (areaOpen && prev != null && cur == null) {
- // close area
- this.context.lineTo(this.translateHoz(lastX), this.translateVert(bottom));
- this.context.fill();
- areaOpen = false;
- continue;
- }
-
- if (prev == null || cur == null)
- continue;
-
- var x1 = prev[0], y1 = prev[1],
- x2 = cur[0], y2 = cur[1];
-
- // clip x values
-
- // clip with xmin
- if (x1 <= x2 && x1 < this.xaxis.min) {
- if (x2 < this.xaxis.min)
- continue;
- y1 = (this.xaxis.min - x1) / (x2 - x1) * (y2 - y1) + y1;
- x1 = this.xaxis.min;
- }
- else if (x2 <= x1 && x2 < this.xaxis.min) {
- if (x1 < this.xaxis.min)
- continue;
- y2 = (this.xaxis.min - x1) / (x2 - x1) * (y2 - y1) + y1;
- x2 = this.xaxis.min;
- }
-
- // clip with xmax
- if (x1 >= x2 && x1 > this.xaxis.max) {
- if (x2 > this.xaxis.max)
- continue;
- y1 = (this.xaxis.max - x1) / (x2 - x1) * (y2 - y1) + y1;
- x1 = this.xaxis.max;
- }
- else if (x2 >= x1 && x2 > this.xaxis.max) {
- if (x1 > this.xaxis.max)
- continue;
- y2 = (this.xaxis.max - x1) / (x2 - x1) * (y2 - y1) + y1;
- x2 = this.xaxis.max;
- }
-
- if (!areaOpen) {
- // open area
- this.context.beginPath();
- this.context.moveTo(this.translateHoz(x1), this.translateVert(bottom));
- areaOpen = true;
- }
-
- // now first check the case where both is outside
- if (y1 >= this.yaxis.max && y2 >= this.yaxis.max) {
- this.context.lineTo(this.translateHoz(x1), this.translateVert(this.yaxis.max));
- this.context.lineTo(this.translateHoz(x2), this.translateVert(this.yaxis.max));
- continue;
- }
- else if (y1 <= this.yaxis.min && y2 <= this.yaxis.min) {
- this.context.lineTo(this.translateHoz(x1), this.translateVert(this.yaxis.min));
- this.context.lineTo(this.translateHoz(x2), this.translateVert(this.yaxis.min));
- continue;
- }
-
- var x1old = x1, x2old = x2;
-
- // clip with ymin
- if (y1 <= y2 && y1 < this.yaxis.min && y2 >= this.yaxis.min) {
- x1 = (this.yaxis.min - y1) / (y2 - y1) * (x2 - x1) + x1;
- y1 = this.yaxis.min;
- }
- else if (y2 <= y1 && y2 < this.yaxis.min && y1 >= this.yaxis.min) {
- x2 = (this.yaxis.min - y1) / (y2 - y1) * (x2 - x1) + x1;
- y2 = this.yaxis.min;
- }
-
- // clip with ymax
- if (y1 >= y2 && y1 > this.yaxis.max && y2 <= this.yaxis.max) {
- x1 = (this.yaxis.max - y1) / (y2 - y1) * (x2 - x1) + x1;
- y1 = this.yaxis.max;
- }
- else if (y2 >= y1 && y2 > this.yaxis.max && y1 <= this.yaxis.max) {
- x2 = (this.yaxis.max - y1) / (y2 - y1) * (x2 - x1) + x1;
- y2 = this.yaxis.max;
- }
-
-
- // if the x value was changed we got a rectangle
- // to fill
- if (x1 != x1old) {
- if (y1 <= this.yaxis.min)
- top = this.yaxis.min;
- else
- top = this.yaxis.max;
-
- this.context.lineTo(this.translateHoz(x1old), this.translateVert(top));
- this.context.lineTo(this.translateHoz(x1), this.translateVert(top));
- }
-
- // fill the triangles
- this.context.lineTo(this.translateHoz(x1), this.translateVert(y1));
- this.context.lineTo(this.translateHoz(x2), this.translateVert(y2));
-
- // fill the other rectangle if it's there
- if (x2 != x2old) {
- if (y2 <= this.yaxis.min)
- top = this.yaxis.min;
- else
- top = this.yaxis.max;
-
- this.context.lineTo(this.translateHoz(x2old), this.translateVert(top));
- this.context.lineTo(this.translateHoz(x2), this.translateVert(top));
- }
-
- lastX = Math.max(x2, x2old);
- }
-
- if (areaOpen) {
- this.context.lineTo(this.translateHoz(lastX), this.translateVert(bottom));
- this.context.fill();
- }
- },
- /**
- * function: drawGraphLines
- *
- * parameters:
- * {Object} graphData
- *
- * description:
- * Main function that daws the line graph. This function is called
- * if <options> lines property is set to show or no other type of
- * graph is specified. This function depends on <plotLineArea> and
- * <plotLine> functions.
- */
- drawGraphLines: function(graphData) {
- this.context.save();
- this.context.translate(this.chartOffset.left, this.chartOffset.top);
- this.context.lineJoin = "round";
-
- var lw = graphData.lines.lineWidth;
- var sw = graphData.shadowSize;
- // FIXME: consider another form of shadow when filling is turned on
- if (sw > 0) {
- // draw shadow in two steps
- this.context.lineWidth = sw / 2;
- this.context.strokeStyle = "rgba(0,0,0,0.1)";
- this.plotLine(graphData.data, lw/2 + sw/2 + this.context.lineWidth/2);
-
- this.context.lineWidth = sw / 2;
- this.context.strokeStyle = "rgba(0,0,0,0.2)";
- this.plotLine(graphData.data, lw/2 + this.context.lineWidth/2);
- }
-
- this.context.lineWidth = lw;
- this.context.strokeStyle = graphData.color;
- if (graphData.lines.fill) {
- this.context.fillStyle = graphData.lines.fillColor != null ? graphData.lines.fillColor : this.parseColor(graphData.color).scale(null, null, null, 0.4).toString();
- this.plotLineArea(graphData.data, 0);
- }
-
- this.plotLine(graphData.data, 0);
- this.context.restore();
- },
- /**
- * function: plotPoints
- *
- * parameters:
- * {Object} data
- * {Object} radius
- * {Object} fill
- *
- * description:
- * Helper function that draws the point graph according to the data provided. Size of each
- * point is provided by radius variable and fill specifies if points
- * are filled
- */
- plotPoints: function(data, radius, fill) {
- for (var i = 0; i < data.length; ++i) {
- if (data[i] == null)
- continue;
-
- var x = data[i][0], y = data[i][1];
- if (x < this.xaxis.min || x > this.xaxis.max || y < this.yaxis.min || y > this.yaxis.max)
- continue;
-
- this.context.beginPath();
- this.context.arc(this.translateHoz(x), this.translateVert(y), radius, 0, 2 * Math.PI, true);
- if (fill)
- this.context.fill();
- this.context.stroke();
- }
- },
- /**
- * function: plotPointShadows
- *
- * parameters:
- * {Object} data
- * {Object} offset
- * {Object} radius
- *
- * description:
- * Helper function that draws the shadows for the points.
- */
- plotPointShadows: function(data, offset, radius) {
- for (var i = 0; i < data.length; ++i) {
- if (data[i] == null)
- continue;
-
- var x = data[i][0], y = data[i][1];
- if (x < this.xaxis.min || x > this.xaxis.max || y < this.yaxis.min || y > this.yaxis.max)
- continue;
- this.context.beginPath();
- this.context.arc(this.translateHoz(x), this.translateVert(y) + offset, radius, 0, Math.PI, false);
- this.context.stroke();
- }
- },
- /**
- * function: drawGraphPoints
- *
- * paramters:
- * {Object} graphData
- *
- * description:
- * Draws the point graph onto the canvas. This function depends on helper
- * functions <plotPointShadows> and <plotPoints>
- */
- drawGraphPoints: function(graphData) {
- this.context.save();
- this.context.translate(this.chartOffset.left, this.chartOffset.top);
-
- var lw = graphData.lines.lineWidth;
- var sw = graphData.shadowSize;
- if (sw > 0) {
- // draw shadow in two steps
- this.context.lineWidth = sw / 2;
- this.context.strokeStyle = "rgba(0,0,0,0.1)";
- this.plotPointShadows(graphData.data, sw/2 + this.context.lineWidth/2, graphData.points.radius);
-
- this.context.lineWidth = sw / 2;
- this.context.strokeStyle = "rgba(0,0,0,0.2)";
- this.plotPointShadows(graphData.data, this.context.lineWidth/2, graphData.points.radius);
- }
-
- this.context.lineWidth = graphData.points.lineWidth;
- this.context.strokeStyle = graphData.color;
- this.context.fillStyle = graphData.points.fillColor != null ? graphData.points.fillColor : graphData.color;
- this.plotPoints(graphData.data, graphData.points.radius, graphData.points.fill);
- this.context.restore();
- },
- /**
- * function: preparePieData
- *
- * parameters:
- * {Object} graphData
- *
- * Description:
- * Helper function that manipulates the given data stream so that it can
- * be plotted as a Pie Chart
- */
- preparePieData: function(graphData)
- {
- for(i = 0; i < graphData.length; i++)
- {
- var data = 0;
- for(j = 0; j < graphData[i].data.length; j++){
- data += parseInt(graphData[i].data[j][1]);
- }
- graphData[i].data = data;
- }
- },
- /**
- * function: drawPieShadow
- *
- * {Object} anchorX
- * {Object} anchorY
- * {Object} radius
- *
- * description:
- * Helper function that draws a shadow for the Pie Chart. This just draws
- * a circle with offset that simulates shadow. We do not give each piece
- * of the pie an individual shadow.
- */
- drawPieShadow: function(anchorX, anchorY, radius)
- {
- this.context.beginPath();
- this.context.moveTo(anchorX, anchorY);
- this.context.fillStyle = 'rgba(0,0,0,' + 0.1 + ')';
- startAngle = 0;
- endAngle = (Math.PI/180)*360;
- this.context.arc(anchorX + 2, anchorY +2, radius + (this.options.shadowSize/2), startAngle, endAngle, false);
- this.context.fill();
- this.context.closePath();
- },
- /**
- * function: drawPieGraph
- *
- * parameters:
- * {Object} graphData
- *
- * description:
- * Draws the actual pie chart. This function depends on helper function
- * <drawPieShadow> to draw the actual shadow
- */
- drawPieGraph: function(graphData)
- {
- var sumData = 0;
- var radius = 0;
- var centerX = this.chartWidth/2;
- var centerY = this.chartHeight/2;
- var startAngle = 0;
- var endAngle = 0;
- var fontSize = this.options.pies.fontSize;
- var labelWidth = this.options.pies.labelWidth;
-
- //determine Pie Radius
- if(!this.options.pies.autoScale)
- radius = this.options.pies.radius;
- else
- radius = (this.chartHeight * 0.85)/2;
-
- var labelRadius = radius * 1.05;
-
- for(i = 0; i < graphData.length; i++)
- sumData += graphData[i].data;
-
- // used to adjust labels so that everything adds up to 100%
- totalPct = 0;
-
- //lets draw the shadow first.. we don't need an individual shadow to every pie rather we just
- //draw a circle underneath to simulate the shadow...
- this.drawPieShadow(centerX, centerY, radius, 0, 0);
-
- //lets draw the actual pie chart now.
- graphData.each(function(gd, j){
- var pct = gd.data / sumData;
- startAngle = endAngle;
- endAngle += pct * (2 * Math.PI);
- var sliceMiddle = (endAngle - startAngle) / 2 + startAngle;
- var labelX = centerX + Math.cos(sliceMiddle) * labelRadius;
- var labelY = centerY + Math.sin(sliceMiddle) * labelRadius;
- var anchorX = centerX;
- var anchorY = centerY;
- var textAlign = null;
- var verticalAlign = null;
- var left = 0;
- var top = 0;
-
- //draw pie:
- //drawing pie
- this.context.beginPath();
- this.context.moveTo(anchorX, anchorY);
- this.context.arc(anchorX, anchorY, radius, startAngle, endAngle, false);
- this.context.closePath();
- this.context.fillStyle = this.parseColor(gd.color).scale(null, null, null, this.options.pies.fillOpacity).toString();
-
- if(this.options.pies.fill) { this.context.fill(); }
-
- // drawing labels
- if (sliceMiddle <= 0.25 * (2 * Math.PI))
- {
- // text on top and align left
- textAlign = "left";
- verticalAlign = "top";
- left = labelX;
- top = labelY + fontSize;
- }
- else if (sliceMiddle > 0.25 * (2 * Math.PI) && sliceMiddle <= 0.5 * (2 * Math.PI))
- {
- // text on bottom and align left
- textAlign = "left";
- verticalAlign = "bottom";
- left = labelX - labelWidth;
- top = labelY;
- }
- else if (sliceMiddle > 0.5 * (2 * Math.PI) && sliceMiddle <= 0.75 * (2 * Math.PI))
- {
- // text on bottom and align right
- textAlign = "right";
- verticalAlign = "bottom";
- left = labelX - labelWidth;
- top = labelY - fontSize;
- }
- else
- {
- // text on top and align right
- textAlign = "right";
- verticalAlign = "bottom";
- left = labelX;
- top = labelY - fontSize;
- }
-
- left = left + "px";
- top = top + "px";
- var textVal = Math.round(pct * 100);
-
- if (j == graphData.length - 1) {
- if (textVal + totalPct < 100) {
- textVal = textVal + 1;
- } else if (textVal + totalPct > 100) {
- textVal = textVal - 1;
- };
- }
-
- var html = "<div style=\"position: absolute;zindex:11; width:" + labelWidth + "px;fontSize:" + fontSize + "px;overflow:hidden;top:"+ top + ";left:"+ left + ";textAlign:" + textAlign + ";verticalAlign:" + verticalAlign +"\">" + textVal + "%</div>";
- //$(html).appendTo(target);
- this.domObj.insert(html);
-
- totalPct = totalPct + textVal;
- }.bind(this));
-
- },
- /**
- * function: drawBarGraph
- *
- * parameters:
- * {Object} graphData
- * {Object} barDataRange
- *
- * description:
- * Goes through each series in graphdata and passes it onto <drawBarGraphs> function
- */
- drawBarGraph: function(graphData, barDataRange)
- {
- graphData.each(function(gd, i){
- this.drawGraphBars(gd, i, graphData.size(), barDataRange);
- }.bind(this));
- },
- /**
- * function: drawGraphBar
- *
- * parameters:
- * {Object} graphData
- *
- * description:
- * This function is called when an individual series in GraphData is bar graph and plots it
- */
- drawGraphBar: function(graphData)
- {
- this.drawGraphBars(graphData, 0, this.graphData.length, this.barDataRange);
- },
- /**
- * function: plotBars
- *
- * parameters:
- * {Object} graphData
- * {Object} data
- * {Object} barWidth
- * {Object} offset
- * {Object} fill
- * {Object} counter
- * {Object} total
- * {Object} barDataRange
- *
- * description:
- * Helper function that draws the bar graph based on data.
- */
- plotBars: function(graphData, data, barWidth, offset, fill,counter, total, barDataRange) {
- var shift = 0;
-
- if(total % 2 == 0)
- {
- shift = (1 + ((counter - total /2 ) - 1)) * barWidth;
- }
- else
- {
- var interval = 0.5;
- if(counter == (total/2 - interval )) {
- shift = - barWidth * interval;
- }
- else {
- shift = (interval + (counter - Math.round(total/2))) * barWidth;
- }
- }
-
- var rangeData = [];
- data.each(function(d){
- if(!d) return;
-
- var x = d[0], y = d[1];
- var drawLeft = true, drawTop = true, drawRight = true;
- var left = x + shift, right = x + barWidth + shift, bottom = 0, top = y;
- var rangeDataPoint = {};
- rangeDataPoint.left = left;
- rangeDataPoint.right = right;
- rangeDataPoint.value = top;
- rangeData.push(rangeDataPoint);
-
- if (right < this.xaxis.min || left > this.xaxis.max || top < this.yaxis.min || bottom > this.yaxis.max)
- return;
-
- // clip
- if (left < this.xaxis.min) {
- left = this.xaxis.min;
- drawLeft = false;
- }
-
- if (right > this.xaxis.max) {
- right = this.xaxis.max;
- drawRight = false;
- }
-
- if (bottom < this.yaxis.min)
- bottom = this.yaxis.min;
-
- if (top > this.yaxis.max) {
- top = this.yaxis.max;
- drawTop = false;
- }
-
- if(graphData.bars.showShadow && graphData.shadowSize > 0)
- this.plotShadowOutline(graphData, this.context.strokeStyle, left, bottom, top, right, drawLeft, drawRight, drawTop);
-
- // fill the bar
- if (fill) {
- this.context.beginPath();
- this.context.moveTo(this.translateHoz(left), this.translateVert(bottom) + offset);
- this.context.lineTo(this.translateHoz(left), this.translateVert(top) + offset);
- this.context.lineTo(this.translateHoz(right), this.translateVert(top) + offset);
- this.context.lineTo(this.translateHoz(right), this.translateVert(bottom) + offset);
- this.context.fill();
- }
-
- // draw outline
- if (drawLeft || drawRight || drawTop) {
- this.context.beginPath();
- this.context.moveTo(this.translateHoz(left), this.translateVert(bottom) + offset);
- if (drawLeft)
- this.context.lineTo(this.translateHoz(left), this.translateVert(top) + offset);
- else
- this.context.moveTo(this.translateHoz(left), this.translateVert(top) + offset);
-
- if (drawTop)
- this.context.lineTo(this.translateHoz(right), this.translateVert(top) + offset);
- else
- this.context.moveTo(this.translateHoz(right), this.translateVert(top) + offset);
- if (drawRight)
- this.context.lineTo(this.translateHoz(right), this.translateVert(bottom) + offset);
- else
- this.context.moveTo(this.translateHoz(right), this.translateVert(bottom) + offset);
- this.context.stroke();
- }
- }.bind(this));
-
- barDataRange.push(rangeData);
- },
- /**
- * function: plotShadowOutline
- *
- * parameters:
- * {Object} graphData
- * {Object} orgStrokeStyle
- * {Object} left
- * {Object} bottom
- * {Object} top
- * {Object} right
- * {Object} drawLeft
- * {Object} drawRight
- * {Object} drawTop
- *
- * description:
- * Helper function that draws a outline simulating shadow for bar chart
- */
- plotShadowOutline: function(graphData, orgStrokeStyle, left, bottom, top, right, drawLeft, drawRight, drawTop)
- {
- var orgOpac = 0.3;
-
- for(var n = 1; n <= this.options.shadowSize/2; n++)
- {
- var opac = orgOpac * n;
- this.context.beginPath();
- this.context.strokeStyle = "rgba(0,0,0," + opac + ")";
-
- this.context.moveTo(this.translateHoz(left) + n, this.translateVert(bottom));
-
- if(drawLeft)
- this.context.lineTo(this.translateHoz(left) + n, this.translateVert(top) - n);
- else
- this.context.moveTo(this.translateHoz(left) + n, this.translateVert(top) - n);
-
- if(drawTop)
- this.context.lineTo(this.translateHoz(right) + n, this.translateVert(top) - n);
- else
- this.context.moveTo(this.translateHoz(right) + n, this.translateVert(top) - n);
-
- if(drawRight)
- this.context.lineTo(this.translateHoz(right) + n, this.translateVert(bottom));
- else
- this.context.lineTo(this.translateHoz(right) + n, this.translateVert(bottom));
-
- this.context.stroke();
- this.context.closePath();
- }
-
- this.context.strokeStyle = orgStrokeStyle;
- },
- /**
- * function: drawGraphBars
- *
- * parameters:
- * {Object} graphData
- * {Object} counter
- * {Object} total
- * {Object} barDataRange
- *
- * description:
- * Draws the actual bar graphs. Calls <plotBars> to draw the individual bar
- */
- drawGraphBars: function(graphData, counter, total, barDataRange){
- this.context.save();
- this.context.translate(this.chartOffset.left, this.chartOffset.top);
- this.context.lineJoin = "round";
-
- var bw = graphData.bars.barWidth;
- var lw = Math.min(graphData.bars.lineWidth, bw);
-
-
- this.context.lineWidth = lw;
- this.context.strokeStyle = graphData.color;
- if (graphData.bars.fill) {
- this.context.fillStyle = graphData.bars.fillColor != null ? graphData.bars.fillColor : this.parseColor(graphData.color).scale(null, null, null, this.options.bars.fillOpacity).toString();
- }
- this.plotBars(graphData, graphData.data, bw, 0, graphData.bars.fill, counter, total, barDataRange);
- this.context.restore();
- },
- /**
- * function: insertLegend
- *
- * description:
- * inserts legend onto the graph. *legend: {show: true}* must be set in <options>
- * for for this to work.
- */
- insertLegend: function() {
- this.domObj.select(".legend").invoke('remove');
-
- if (!this.options.legend.show)
- return;
-
- var fragments = [];
- var rowStarted = false;
- this.graphData.each(function(gd, index){
- if(!gd.label) {
- return;
- }
- if(index % this.options.legend.noColumns == 0) {
- if(rowStarted) {
- fragments.push('</tr>');
- }
- fragments.push('<tr>');
- rowStarted = true;
- }
- var label = gd.label;
- if(this.options.legend.labelFormatter != null) {
- label = this.options.legend.labelFormatter(label);
- }
-
- fragments.push(
- '<td class="legendColorBox"><div style="border:1px solid ' + this.options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:14px;height:10px;background-color:' + gd.color + ';overflow:hidden"></div></div></td>' +
- '<td class="legendLabel">' + label + '</td>');
-
- }.bind(this));
-
- if (rowStarted)
- fragments.push('</tr>');
-
- if(fragments.length > 0){
- var table = '<table style="font-size:smaller;color:' + this.options.grid.color + '">' + fragments.join("") + '</table>';
- if($(this.options.legend.container) != null){
- $(this.options.legend.container).insert(table);
- }else{
- var pos = '';
- var p = this.options.legend.position, m = this.options.legend.margin;
-
- if(p.charAt(0) == 'n') pos += 'top:' + (m + this.chartOffset.top) + 'px;';
- else if(p.charAt(0) == 's') pos += 'bottom:' + (m + this.chartOffset.bottom) + 'px;';
- if(p.charAt(1) == 'e') pos += 'right:' + (m + this.chartOffset.right) + 'px;';
- else if(p.charAt(1) == 'w') pos += 'left:' + (m + this.chartOffset.bottom) + 'px;';
- var div = this.domObj.insert('<div class="ProtoChart-legend" style="border: 1px solid '+this.options.legend.borderColor+'; position:absolute;z-index:2;' + pos +'">' + table + '</div>').getElementsBySelector('div.ProtoChart-legend').first();
-
- if(this.options.legend.backgroundOpacity != 0.0){
- var c = this.options.legend.backgroundColor;
- if(c == null){
- var tmp = (this.options.grid.backgroundColor != null) ? this.options.grid.backgroundColor : this.extractColor(div);
- c = this.parseColor(tmp).adjust(null, null, null, 1).toString();
- }
- this.domObj.insert('<div class="ProtoChart-legend-bg" style="position:absolute;width:' + div.getWidth() + 'px;height:' + div.getHeight() + 'px;' + pos +'background-color:' + c + ';"> </div>').select('div.ProtoChart-legend-bg').first().setStyle({
- 'opacity': this.options.legend.backgroundOpacity
- });
- }
- }
- }
- },
- /**
- * Function: onMouseMove
- *
- * parameters:
- * event: {Object} ev
- *
- * Description:
- * Called whenever the mouse is moved on the graph. This takes care of the mousetracking.
- * This event also fires <ProtoChart:mousemove> event, which gets current position of the
- * mouse as a parameters.
- */
- onMouseMove: function(ev) {
- var e = ev || window.event;
- if (e.pageX == null && e.clientX != null) {
- var de = document.documentElement, b = $(document.body);
- this.lastMousePos.pageX = e.clientX + (de && de.scrollLeft || b.scrollLeft || 0);
- this.lastMousePos.pageY = e.clientY + (de && de.scrollTop || b.scrollTop || 0);
- }
- else {
- this.lastMousePos.pageX = e.pageX;
- this.lastMousePos.pageY = e.pageY;
- }
-
- var offset = this.overlay.cumulativeOffset();
- var pos = {
- x: this.xaxis.min + (e.pageX - offset.left - this.chartOffset.left) / this.hozScale,
- y: this.yaxis.max - (e.pageY - offset.top - this.chartOffset.top) / this.vertScale
- };
-
- if(this.options.mouse.track && this.selectionInterval == null) {
- this.hit(ev, pos);
- }
- this.domObj.fire("ProtoChart:mousemove", [ pos ]);
- },
- /**
- * Function: onMouseDown
- *
- * Parameters:
- * Event - {Object} e
- *
- * Description:
- * Called whenever the mouse is clicked.
- */
- onMouseDown: function(e) {
- if (e.which != 1) // only accept left-click
- return;
-
- document.body.focus();
-
- if (document.onselectstart !== undefined && this.workarounds.onselectstart == null) {
- this.workarounds.onselectstart = document.onselectstart;
- document.onselectstart = function () { return false; };
- }
- if (document.ondrag !== undefined && this.workarounds.ondrag == null) {
- this.workarounds.ondrag = document.ondrag;
- document.ondrag = function () { return false; };
- }
-
- this.setSelectionPos(this.selection.first, e);
-
- if (this.selectionInterval != null)
- clearInterval(this.selectionInterval);
- this.lastMousePos.pageX = null;
- this.selectionInterval = setInterval(this.updateSelectionOnMouseMove.bind(this), 200);
-
- this.overlay.observe("mouseup", this.onSelectionMouseUp.bind(this));
- },
- /**
- * Function: onClick
- * parameters:
- * Event - {Object} e
- * Description:
- * Handles the "click" event on the chart. This function fires <ProtoChart:plotclick> event. If
- * <options.allowDataClick> is enabled then it also fires <ProtoChart:dataclick> event which gives
- * you access to exact data point where user clicked.
- */
- onClick: function(e) {
- if (this.ignoreClick) {
- this.ignoreClick = false;
- return;
- }
- var offset = this.overlay.cumulativeOffset();
- var pos ={
- x: this.xaxis.min + (e.pageX - offset.left - this.chartOffset.left) / this.hozScale,
- y: this.yaxis.max - (e.pageY - offset.top - this.chartOffset.top) / this.vertScale
- };
- this.domObj.fire("ProtoChart:plotclick", [ pos ]);
-
- if(this.options.allowDataClick)
- {
- var dataPoint = {};
- if(this.options.points.show)
- {
- dataPoint = this.getDataClickPoint(pos, this.options);
- this.domObj.fire("ProtoChart:dataclick", [dataPoint]);
- }
- else if(this.options.lines.show && this.options.points.show)
- {
- dataPoint = this.getDataClickPoint(pos, this.options);
- this.domObj.fire("ProtoChart:dataclick", [dataPoint]);
- }
- else if(this.options.bars.show)
- {
- if(this.barDataRange.length > 0)
- {
- dataPoint = this.getDataClickPoint(pos, this.options, this.barDataRange);
- this.domObj.fire("ProtoChart:dataclick", [dataPoint]);
- }
- }
- }
- },
- /**
- * Internal function used by onClick method.
- */
- getDataClickPoint: function(pos, options, barDataRange)
- {
- pos.x = parseInt(pos.x);
- pos.y = parseInt(pos.y);
- var yClick = pos.y.toFixed(0);
- var dataVal = {};
-
- dataVal.position = pos;
- dataVal.value = '';
-
- if(options.points.show)
- {
- this.graphData.each(function(gd){
- var temp = gd.data;
- var xClick = parseInt(pos.x.toFixed(0));
- if(xClick < 0) { xClick = 0; }
- if(temp[xClick] && yClick >= temp[xClick][1] - (this.options.points.radius * 10) && yClick <= temp[xClick][1] + (this.options.points.radius * 10)) {
- dataVal.value = temp[xClick][1];
- throw $break;
- }
-
- }.bind(this));
- }
- else if(options.bars.show)
- {
- xClick = pos.x;
- this.barDataRange.each(function(barData){
- barData.each(function(data){
- var temp = data;
- if(xClick > temp.left && xClick < temp.right) {
- dataVal.value = temp.value;
- throw $break;
- }
- }.bind(this));
- }.bind(this));
-
- }
-
- return dataVal;
- },
- /**
- * Function: triggerSelectedEvent
- *
- * Description:
- * Internal function called when a selection on the graph is made. This function
- * fires <ProtoChart:selected> event which has a parameter representing the selection
- * {
- * x1: {int}, y1: {int},
- * x2: {int}, y2: {int}
- * }
- */
- triggerSelectedEvent: function() {
- var x1, x2, y1, y2;
- if (this.selection.first.x <= this.selection.second.x) {
- x1 = this.selection.first.x;
- x2 = this.selection.second.x;
- }
- else {
- x1 = this.selection.second.x;
- x2 = this.selection.first.x;
- }
-
- if (this.selection.first.y >= this.selection.second.y) {
- y1 = this.selection.first.y;
- y2 = this.selection.second.y;
- }
- else {
- y1 = this.selection.second.y;
- y2 = this.selection.first.y;
- }
-
- x1 = this.xaxis.min + x1 / this.hozScale;
- x2 = this.xaxis.min + x2 / this.hozScale;
-
- y1 = this.yaxis.max - y1 / this.vertScale;
- y2 = this.yaxis.max - y2 / this.vertScale;
-
- this.domObj.fire("ProtoChart:selected", [ { x1: x1, y1: y1, x2: x2, y2: y2 } ]);
- },
- /**
- * Internal function
- */
- onSelectionMouseUp: function(e) {
- if (document.onselectstart !== undefined)
- document.onselectstart = this.workarounds.onselectstart;
- if (document.ondrag !== undefined)
- document.ondrag = this.workarounds.ondrag;
-
- if (this.selectionInterval != null) {
- clearInterval(this.selectionInterval);
- this.selectionInterval = null;
- }
-
- this.setSelectionPos(this.selection.second, e);
- this.clearSelection();
- if (!this.selectionIsSane() || e.which != 1)
- return false;
-
- this.drawSelection();
- this.triggerSelectedEvent();
- this.ignoreClick = true;
-
- return false;
- },
- setSelectionPos: function(pos, e) {
- var offset = $(this.overlay).cumulativeOffset();
- if (this.options.selection.mode == "y") {
- if (pos == this.selection.first)
- pos.x = 0;
- else
- pos.x = this.chartWidth;
- }
- else {
- pos.x = e.pageX - offset.left - this.chartOffset.left;
- pos.x = Math.min(Math.max(0, pos.x), this.chartWidth);
- }
-
- if (this.options.selection.mode == "x") {
- if (pos == this.selection.first)
- pos.y = 0;
- else
- pos.y = this.chartHeight;
- }
- else {
- pos.y = e.pageY - offset.top - this.chartOffset.top;
- pos.y = Math.min(Math.max(0, pos.y), this.chartHeight);
- }
- },
- updateSelectionOnMouseMove: function() {
- if (this.lastMousePos.pageX == null)
- return;
-
- this.setSelectionPos(this.selection.second, this.lastMousePos);
- this.clearSelection();
- if (this.selectionIsSane())
- this.drawSelection();
- },
- clearSelection: function() {
- if (this.prevSelection == null)
- return;
-
- var x = Math.min(this.prevSelection.first.x, this.prevSelection.second.x),
- y = Math.min(this.prevSelection.first.y, this.prevSelection.second.y),
- w = Math.abs(this.prevSelection.second.x - this.prevSelection.first.x),
- h = Math.abs(this.prevSelection.second.y - this.prevSelection.first.y);
-
- this.overlayContext.clearRect(x + this.chartOffset.left - this.overlayContext.lineWidth,
- y + this.chartOffset.top - this.overlayContext.lineWidth,
- w + this.overlayContext.lineWidth*2,
- h + this.overlayContext.lineWidth*2);
-
- this.prevSelection = null;
- },
- /**
- * Function: setSelection
- *
- * Parameters:
- * Area - {Object} area represented as a range like: {x1: 3, y1: 3, x2: 4, y2: 8}
- *
- * Description:
- * Sets the current graph selection to the provided range. Calls <drawSelection> and
- * <triggerSelectedEvent> functions internally.
- */
- setSelection: function(area) {
- this.clearSelection();
-
- if (this.options.selection.mode == "x") {
- this.selection.first.y = 0;
- this.selection.second.y = this.chartHeight;
- }
- else {
- this.selection.first.y = (this.yaxis.max - area.y1) * this.vertScale;
- this.selection.second.y = (this.yaxis.max - area.y2) * this.vertScale;
- }
- if (this.options.selection.mode == "y") {
- this.selection.first.x = 0;
- this.selection.second.x = this.chartWidth;
- }
- else {
- this.selection.first.x = (area.x1 - this.xaxis.min) * this.hozScale;
- this.selection.second.x = (area.x2 - this.xaxis.min) * this.hozScale;
- }
-
- this.drawSelection();
- this.triggerSelectedEvent();
- },
- /**
- * Function: drawSelection
- * Description: Internal function called to draw the selection made on the graph.
- */
- drawSelection: function() {
- if (this.prevSelection != null &&
- this.selection.first.x == this.prevSelection.first.x &&
- this.selection.first.y == this.prevSelection.first.y &&
- this.selection.second.x == this.prevSelection.second.x &&
- this.selection.second.y == this.prevSelection.second.y)
- {
- return;
- }
-
- this.overlayContext.strokeStyle = this.parseColor(this.options.selection.color).scale(null, null, null, 0.8).toString();
- this.overlayContext.lineWidth = 1;
- this.context.lineJoin = "round";
- this.overlayContext.fillStyle = this.parseColor(this.options.selection.color).scale(null, null, null, 0.4).toString();
-
- this.prevSelection = { first: { x: this.selection.first.x,
- y: this.selection.first.y },
- second: { x: this.selection.second.x,
- y: this.selection.second.y } };
-
- var x = Math.min(this.selection.first.x, this.selection.second.x),
- y = Math.min(this.selection.first.y, this.selection.second.y),
- w = Math.abs(this.selection.second.x - this.selection.first.x),
- h = Math.abs(this.selection.second.y - this.selection.first.y);
-
- this.overlayContext.fillRect(x + this.chartOffset.left, y + this.chartOffset.top, w, h);
- this.overlayContext.strokeRect(x + this.chartOffset.left, y + this.chartOffset.top, w, h);
- },
- /**
- * Internal function
- */
- selectionIsSane: function() {
- var minSize = 5;
- return Math.abs(this.selection.second.x - this.selection.first.x) >= minSize &&
- Math.abs(this.selection.second.y - this.selection.first.y) >= minSize;
- },
- /**
- * Internal function that formats the track. This is the format the text is shown when mouse
- * tracking is enabled.
- */
- defaultTrackFormatter: function(val)
- {
- return '['+val.x+', '+val.y+']';
- },
- /**
- * Function: clearHit
- */
- clearHit: function(){
- if(this.prevHit){
- this.overlayContext.clearRect(
- this.translateHoz(this.prevHit.x) + this.chartOffset.left - this.options.mouse.radius*2,
- this.translateVert(this.prevHit.y) + this.chartOffset.top - this.options.mouse.radius*2,
- this.options.mouse.radius*3 + this.options.points.lineWidth*3,
- this.options.mouse.radius*3 + this.options.points.lineWidth*3
- );
- this.prevHit = null;
- }
- },
- /**
- * Function: hit
- *
- * Parameters:
- * event - {Object} event object
- * mouse - {Object} mouse object that is used to keep track of mouse movement
- *
- * Description:
- * If hit occurs this function will fire a ProtoChart:hit event.
- */
- hit: function(event, mouse){
- /**
- * Nearest data element.
- */
- var n = {
- dist:Number.MAX_VALUE,
- x:null,
- y:null,
- mouse:null
- };
-
-
- for(var i = 0, data, xsens, ysens; i < this.graphData.length; i++){
- if(!this.graphData[i].mouse.track) continue;
- data = this.graphData[i].data;
- xsens = (this.hozScale*this.graphData[i].mouse.sensibility);
- ysens = (this.vertScale*this.graphData[i].mouse.sensibility);
- for(var j = 0, xabs, yabs; j < data.length; j++){
- xabs = this.hozScale*Math.abs(data[j][0] - mouse.x);
- yabs = this.vertScale*Math.abs(data[j][1] - mouse.y);
-
- if(xabs < xsens && yabs < ysens && (xabs+yabs) < n.dist){
- n.dist = (xabs+yabs);
- n.x = data[j][0];
- n.y = data[j][1];
- n.mouse = this.graphData[i].mouse;
- }
- }
- }
-
- if(n.mouse && n.mouse.track && !this.prevHit || (this.prevHit && n.x != this.prevHit.x && n.y != this.prevHit.y)){
- var el = this.domObj.select('.'+this.options.mouse.clsName).first();
- if(!el){
- var pos = '', p = this.options.mouse.position, m = this.options.mouse.margin;
- if(p.charAt(0) == 'n') pos += 'top:' + (m + this.chartOffset.top) + 'px;';
- else if(p.charAt(0) == 's') pos += 'bottom:' + (m + this.chartOffset.bottom) + 'px;';
- if(p.charAt(1) == 'e') pos += 'right:' + (m + this.chartOffset.right) + 'px;';
- else if(p.charAt(1) == 'w') pos += 'left:' + (m + this.chartOffset.bottom) + 'px;';
-
- this.domObj.insert('<div class="'+this.options.mouse.clsName+'" style="display:none;position:absolute;'+pos+'"></div>');
- return;
- }
- if(n.x !== null && n.y !== null){
- el.setStyle({display:'block'});
-
- this.clearHit();
- if(n.mouse.lineColor != null){
- this.overlayContext.save();
- this.overlayContext.translate(this.chartOffset.left, this.chartOffset.top);
- this.overlayContext.lineWidth = this.options.points.lineWidth;
- this.overlayContext.strokeStyle = n.mouse.lineColor;
- this.overlayContext.fillStyle = '#ffffff';
- this.overlayContext.beginPath();
-
-
- this.overlayContext.arc(this.translateHoz(n.x), this.translateVert(n.y), this.options.mouse.radius, 0, 2 * Math.PI, true);
- this.overlayContext.fill();
- this.overlayContext.stroke();
- this.overlayContext.restore();
- }
- this.prevHit = n;
-
- var decimals = n.mouse.trackDecimals;
- if(decimals == null || decimals < 0) decimals = 0;
- if(!this.options.mouse.fixedPosition)
- {
- el.setStyle({
- left: (this.translateHoz(n.x) + this.options.mouse.radius + 10) + "px",
- top: (this.translateVert(n.y) + this.options.mouse.radius + 10) + "px"
- });
- }
- el.innerHTML = n.mouse.trackFormatter({x: n.x.toFixed(decimals), y: n.y.toFixed(decimals)});
- this.domObj.fire( 'ProtoChart:hit', [n] )
- }else if(this.options.prevHit){
- el.setStyle({display:'none'});
- this.clearHit();
- }
- }
- },
- /**
- * Internal function
- */
- floorInBase: function(n, base) {
- return base * Math.floor(n / base);
- },
- /**
- * Function: extractColor
- *
- * Parameters:
- * element - HTML element or ID of an HTML element
- *
- * Returns:
- * color in string format
- */
- extractColor: function(element)
- {
- var color;
- do
- {
- color = $(element).getStyle('background-color').toLowerCase();
- if(color != '' && color != 'transparent')
- {
- break;
- }
- element = element.up(0); //or else just get the parent ....
- } while(element.nodeName.toLowerCase() != 'body');
-
- //safari fix
- if(color == 'rgba(0, 0, 0, 0)')
- return 'transparent';
- return color;
- },
- /**
- * Function: parseColor
- *
- * Parameters:
- * str - color string in different formats
- *
- * Returns:
- * a Proto.Color Object - use toString() function to retreive the color in rgba/rgb format
- */
- parseColor: function(str)
- {
- var result;
-
- /**
- * rgb(num,num,num)
- */
- if((result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str)))
- return new Proto.Color(parseInt(result[1]), parseInt(result[2]), parseInt(result[3]));
-
- /**
- * rgba(num,num,num,num)
- */
- if((result = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str)))
- return new Proto.Color(parseInt(result[1]), parseInt(result[2]), parseInt(result[3]), parseFloat(result[4]));
-
- /**
- * rgb(num%,num%,num%)
- */
- if((result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str)))
- return new Proto.Color(parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55);
-
- /**
- * rgba(num%,num%,num%,num)
- */
- if((result = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str)))
- return new Proto.Color(parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55, parseFloat(result[4]));
-
- /**
- * #a0b1c2
- */
- if((result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str)))
- return new Proto.Color(parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16));
-
- /**
- * #fff
- */
- if((result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str)))
- return new Proto.Color(parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16));
-
- /**
- * Otherwise, check if user wants transparent .. or we just return a standard color;
- */
- var name = str.strip().toLowerCase();
- if(name == 'transparent'){
- return new Proto.Color(255, 255, 255, 0);
- }
-
- return new Proto.Color(100,100,100, 1);
-
- }
-});
-
-if(!Proto) var Proto = {};
-
-/**
- * Class: Proto.Color
- *
- * Helper class that manipulates colors using RGBA values.
- *
- */
-
-Proto.Color = Class.create({
- initialize: function(r, g, b, a) {
- this.rgba = ['r', 'g', 'b', 'a'];
- var x = 4;
- while(-1<--x) {
- this[this.rgba[x]] = arguments[x] || ((x==3) ? 1.0 : 0);
- }
- },
- toString: function() {
- if(this.a >= 1.0) {
- return "rgb(" + [this.r, this.g, this.b].join(",") +")";
- }
- else {
- return "rgba("+[this.r, this.g, this.b, this.a].join(",")+")";
- }
- },
- scale: function(rf, gf, bf, af) {
- x = 4;
- while(-1<--x) {
- if(arguments[x] != null) {
- this[this.rgba[x]] *= arguments[x];
- }
- }
- return this.normalize();
- },
- adjust: function(rd, gd, bd, ad) {
- x = 4; //rgba.length
- while (-1<--x) {
- if (arguments[x] != null)
- this[this.rgba[x]] += arguments[x];
- }
- return this.normalize();
- },
- clone: function() {
- return new Proto.Color(this.r, this.b, this.g, this.a);
- },
- limit: function(val,minVal,maxVal) {
- return Math.max(Math.min(val, maxVal), minVal);
- },
- normalize: function() {
- this.r = this.limit(parseInt(this.r), 0, 255);
- this.g = this.limit(parseInt(this.g), 0, 255);
- this.b = this.limit(parseInt(this.b), 0, 255);
- this.a = this.limit(this.a, 0, 1);
- return this;
- }
-}); \ No newline at end of file
diff --git a/usr/local/www/protochart/excanvas-compressed.js b/usr/local/www/protochart/excanvas-compressed.js
deleted file mode 100644
index 9d71658..0000000
--- a/usr/local/www/protochart/excanvas-compressed.js
+++ /dev/null
@@ -1,19 +0,0 @@
-if(!window.CanvasRenderingContext2D){(function(){var I=Math,i=I.round,L=I.sin,M=I.cos,m=10,A=m/2,Q={init:function(a){var b=a||document;if(/MSIE/.test(navigator.userAgent)&&!window.opera){var c=this;b.attachEvent("onreadystatechange",function(){c.r(b)})}},r:function(a){if(a.readyState=="complete"){if(!a.namespaces["s"]){a.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml")}var b=a.createStyleSheet();b.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}";
-var c=a.getElementsByTagName("canvas");for(var d=0;d<c.length;d++){if(!c[d].getContext){this.initElement(c[d])}}}},q:function(a){var b=a.outerHTML,c=a.ownerDocument.createElement(b);if(b.slice(-2)!="/>"){var d="/"+a.tagName,e;while((e=a.nextSibling)&&e.tagName!=d){e.removeNode()}if(e){e.removeNode()}}a.parentNode.replaceChild(c,a);return c},initElement:function(a){a=this.q(a);a.getContext=function(){if(this.l){return this.l}return this.l=new K(this)};a.attachEvent("onpropertychange",V);a.attachEvent("onresize",
-W);var b=a.attributes;if(b.width&&b.width.specified){a.style.width=b.width.nodeValue+"px"}else{a.width=a.clientWidth}if(b.height&&b.height.specified){a.style.height=b.height.nodeValue+"px"}else{a.height=a.clientHeight}return a}};function V(a){var b=a.srcElement;switch(a.propertyName){case "width":b.style.width=b.attributes.width.nodeValue+"px";b.getContext().clearRect();break;case "height":b.style.height=b.attributes.height.nodeValue+"px";b.getContext().clearRect();break}}function W(a){var b=a.srcElement;
-if(b.firstChild){b.firstChild.style.width=b.clientWidth+"px";b.firstChild.style.height=b.clientHeight+"px"}}Q.init();var R=[];for(var E=0;E<16;E++){for(var F=0;F<16;F++){R[E*16+F]=E.toString(16)+F.toString(16)}}function J(){return[[1,0,0],[0,1,0],[0,0,1]]}function G(a,b){var c=J();for(var d=0;d<3;d++){for(var e=0;e<3;e++){var g=0;for(var h=0;h<3;h++){g+=a[d][h]*b[h][e]}c[d][e]=g}}return c}function N(a,b){b.fillStyle=a.fillStyle;b.lineCap=a.lineCap;b.lineJoin=a.lineJoin;b.lineWidth=a.lineWidth;b.miterLimit=
-a.miterLimit;b.shadowBlur=a.shadowBlur;b.shadowColor=a.shadowColor;b.shadowOffsetX=a.shadowOffsetX;b.shadowOffsetY=a.shadowOffsetY;b.strokeStyle=a.strokeStyle;b.d=a.d;b.e=a.e}function O(a){var b,c=1;a=String(a);if(a.substring(0,3)=="rgb"){var d=a.indexOf("(",3),e=a.indexOf(")",d+1),g=a.substring(d+1,e).split(",");b="#";for(var h=0;h<3;h++){b+=R[Number(g[h])]}if(g.length==4&&a.substr(3,1)=="a"){c=g[3]}}else{b=a}return[b,c]}function S(a){switch(a){case "butt":return"flat";case "round":return"round";
-case "square":default:return"square"}}function K(a){this.a=J();this.m=[];this.k=[];this.c=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=m*1;this.globalAlpha=1;this.canvas=a;var b=a.ownerDocument.createElement("div");b.style.width=a.clientWidth+"px";b.style.height=a.clientHeight+"px";b.style.overflow="hidden";b.style.position="absolute";a.appendChild(b);this.j=b;this.d=1;this.e=1}var j=K.prototype;j.clearRect=function(){this.j.innerHTML=
-"";this.c=[]};j.beginPath=function(){this.c=[]};j.moveTo=function(a,b){this.c.push({type:"moveTo",x:a,y:b});this.f=a;this.g=b};j.lineTo=function(a,b){this.c.push({type:"lineTo",x:a,y:b});this.f=a;this.g=b};j.bezierCurveTo=function(a,b,c,d,e,g){this.c.push({type:"bezierCurveTo",cp1x:a,cp1y:b,cp2x:c,cp2y:d,x:e,y:g});this.f=e;this.g=g};j.quadraticCurveTo=function(a,b,c,d){var e=this.f+0.6666666666666666*(a-this.f),g=this.g+0.6666666666666666*(b-this.g),h=e+(c-this.f)/3,l=g+(d-this.g)/3;this.bezierCurveTo(e,
-g,h,l,c,d)};j.arc=function(a,b,c,d,e,g){c*=m;var h=g?"at":"wa",l=a+M(d)*c-A,n=b+L(d)*c-A,o=a+M(e)*c-A,f=b+L(e)*c-A;if(l==o&&!g){l+=0.125}this.c.push({type:h,x:a,y:b,radius:c,xStart:l,yStart:n,xEnd:o,yEnd:f})};j.rect=function(a,b,c,d){this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath()};j.strokeRect=function(a,b,c,d){this.beginPath();this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath();this.stroke()};j.fillRect=function(a,
-b,c,d){this.beginPath();this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath();this.fill()};j.createLinearGradient=function(a,b,c,d){var e=new H("gradient");return e};j.createRadialGradient=function(a,b,c,d,e,g){var h=new H("gradientradial");h.n=c;h.o=g;h.i.x=a;h.i.y=b;return h};j.drawImage=function(a,b){var c,d,e,g,h,l,n,o,f=a.runtimeStyle.width,k=a.runtimeStyle.height;a.runtimeStyle.width="auto";a.runtimeStyle.height="auto";var q=a.width,r=a.height;a.runtimeStyle.width=
-f;a.runtimeStyle.height=k;if(arguments.length==3){c=arguments[1];d=arguments[2];h=(l=0);n=(e=q);o=(g=r)}else if(arguments.length==5){c=arguments[1];d=arguments[2];e=arguments[3];g=arguments[4];h=(l=0);n=q;o=r}else if(arguments.length==9){h=arguments[1];l=arguments[2];n=arguments[3];o=arguments[4];c=arguments[5];d=arguments[6];e=arguments[7];g=arguments[8]}else{throw"Invalid number of arguments";}var s=this.b(c,d),t=[],v=10,w=10;t.push(" <g_vml_:group",' coordsize="',m*v,",",m*w,'"',' coordorigin="0,0"',
-' style="width:',v,";height:",w,";position:absolute;");if(this.a[0][0]!=1||this.a[0][1]){var x=[];x.push("M11='",this.a[0][0],"',","M12='",this.a[1][0],"',","M21='",this.a[0][1],"',","M22='",this.a[1][1],"',","Dx='",i(s.x/m),"',","Dy='",i(s.y/m),"'");var p=s,y=this.b(c+e,d),z=this.b(c,d+g),B=this.b(c+e,d+g);p.x=Math.max(p.x,y.x,z.x,B.x);p.y=Math.max(p.y,y.y,z.y,B.y);t.push("padding:0 ",i(p.x/m),"px ",i(p.y/m),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",x.join(""),", sizingmethod='clip');")}else{t.push("top:",
-i(s.y/m),"px;left:",i(s.x/m),"px;")}t.push(' ">','<g_vml_:image src="',a.src,'"',' style="width:',m*e,";"," height:",m*g,';"',' cropleft="',h/q,'"',' croptop="',l/r,'"',' cropright="',(q-h-n)/q,'"',' cropbottom="',(r-l-o)/r,'"'," />","</g_vml_:group>");this.j.insertAdjacentHTML("BeforeEnd",t.join(""))};j.stroke=function(a){var b=[],c=O(a?this.fillStyle:this.strokeStyle),d=c[0],e=c[1]*this.globalAlpha,g=10,h=10;b.push("<g_vml_:shape",' fillcolor="',d,'"',' filled="',Boolean(a),'"',' style="position:absolute;width:',
-g,";height:",h,';"',' coordorigin="0 0" coordsize="',m*g," ",m*h,'"',' stroked="',!a,'"',' strokeweight="',this.lineWidth,'"',' strokecolor="',d,'"',' path="');var l={x:null,y:null},n={x:null,y:null};for(var o=0;o<this.c.length;o++){var f=this.c[o];if(f.type=="moveTo"){b.push(" m ");var k=this.b(f.x,f.y);b.push(i(k.x),",",i(k.y))}else if(f.type=="lineTo"){b.push(" l ");var k=this.b(f.x,f.y);b.push(i(k.x),",",i(k.y))}else if(f.type=="close"){b.push(" x ")}else if(f.type=="bezierCurveTo"){b.push(" c ");
-var k=this.b(f.x,f.y),q=this.b(f.cp1x,f.cp1y),r=this.b(f.cp2x,f.cp2y);b.push(i(q.x),",",i(q.y),",",i(r.x),",",i(r.y),",",i(k.x),",",i(k.y))}else if(f.type=="at"||f.type=="wa"){b.push(" ",f.type," ");var k=this.b(f.x,f.y),s=this.b(f.xStart,f.yStart),t=this.b(f.xEnd,f.yEnd);b.push(i(k.x-this.d*f.radius),",",i(k.y-this.e*f.radius)," ",i(k.x+this.d*f.radius),",",i(k.y+this.e*f.radius)," ",i(s.x),",",i(s.y)," ",i(t.x),",",i(t.y))}if(k){if(l.x==null||k.x<l.x){l.x=k.x}if(n.x==null||k.x>n.x){n.x=k.x}if(l.y==
-null||k.y<l.y){l.y=k.y}if(n.y==null||k.y>n.y){n.y=k.y}}}b.push(' ">');if(typeof this.fillStyle=="object"){var v={x:"50%",y:"50%"},w=n.x-l.x,x=n.y-l.y,p=w>x?w:x;v.x=i(this.fillStyle.i.x/w*100+50)+"%";v.y=i(this.fillStyle.i.y/x*100+50)+"%";var y=[];if(this.fillStyle.p=="gradientradial"){var z=this.fillStyle.n/p*100,B=this.fillStyle.o/p*100-z}else{var z=0,B=100}var C={offset:null,color:null},D={offset:null,color:null};this.fillStyle.h.sort(function(T,U){return T.offset-U.offset});for(var o=0;o<this.fillStyle.h.length;o++){var u=
-this.fillStyle.h[o];y.push(u.offset*B+z,"% ",u.color,",");if(u.offset>C.offset||C.offset==null){C.offset=u.offset;C.color=u.color}if(u.offset<D.offset||D.offset==null){D.offset=u.offset;D.color=u.color}}y.pop();b.push("<g_vml_:fill",' color="',D.color,'"',' color2="',C.color,'"',' type="',this.fillStyle.p,'"',' focusposition="',v.x,", ",v.y,'"',' colors="',y.join(""),'"',' opacity="',e,'" />')}else if(a){b.push('<g_vml_:fill color="',d,'" opacity="',e,'" />')}else{b.push("<g_vml_:stroke",' opacity="',
-e,'"',' joinstyle="',this.lineJoin,'"',' miterlimit="',this.miterLimit,'"',' endcap="',S(this.lineCap),'"',' weight="',this.lineWidth,'px"',' color="',d,'" />')}b.push("</g_vml_:shape>");this.j.insertAdjacentHTML("beforeEnd",b.join(""));this.c=[]};j.fill=function(){this.stroke(true)};j.closePath=function(){this.c.push({type:"close"})};j.b=function(a,b){return{x:m*(a*this.a[0][0]+b*this.a[1][0]+this.a[2][0])-A,y:m*(a*this.a[0][1]+b*this.a[1][1]+this.a[2][1])-A}};j.save=function(){var a={};N(this,a);
-this.k.push(a);this.m.push(this.a);this.a=G(J(),this.a)};j.restore=function(){N(this.k.pop(),this);this.a=this.m.pop()};j.translate=function(a,b){var c=[[1,0,0],[0,1,0],[a,b,1]];this.a=G(c,this.a)};j.rotate=function(a){var b=M(a),c=L(a),d=[[b,c,0],[-c,b,0],[0,0,1]];this.a=G(d,this.a)};j.scale=function(a,b){this.d*=a;this.e*=b;var c=[[a,0,0],[0,b,0],[0,0,1]];this.a=G(c,this.a)};j.clip=function(){};j.arcTo=function(){};j.createPattern=function(){return new P};function H(a){this.p=a;this.n=0;this.o=
-0;this.h=[];this.i={x:0,y:0}}H.prototype.addColorStop=function(a,b){b=O(b);this.h.push({offset:1-a,color:b})};function P(){}G_vmlCanvasManager=Q;CanvasRenderingContext2D=K;CanvasGradient=H;CanvasPattern=P})()};
diff --git a/usr/local/www/protochart/excanvas.js b/usr/local/www/protochart/excanvas.js
deleted file mode 100644
index f8780b6..0000000
--- a/usr/local/www/protochart/excanvas.js
+++ /dev/null
@@ -1,785 +0,0 @@
-// Copyright 2006 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-// Known Issues:
-//
-// * Patterns are not implemented.
-// * Radial gradient are not implemented. The VML version of these look very
-// different from the canvas one.
-// * Clipping paths are not implemented.
-// * Coordsize. The width and height attribute have higher priority than the
-// width and height style values which isn't correct.
-// * Painting mode isn't implemented.
-// * Canvas width/height should is using content-box by default. IE in
-// Quirks mode will draw the canvas using border-box. Either change your
-// doctype to HTML5
-// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)
-// or use Box Sizing Behavior from WebFX
-// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)
-// * Optimize. There is always room for speed improvements.
-
-// only add this code if we do not already have a canvas implementation
-if (!window.CanvasRenderingContext2D) {
-
-(function () {
-
- // alias some functions to make (compiled) code shorter
- var m = Math;
- var mr = m.round;
- var ms = m.sin;
- var mc = m.cos;
-
- // this is used for sub pixel precision
- var Z = 10;
- var Z2 = Z / 2;
-
- var G_vmlCanvasManager_ = {
- init: function (opt_doc) {
- var doc = opt_doc || document;
- if (/MSIE/.test(navigator.userAgent) && !window.opera) {
- var self = this;
- doc.attachEvent("onreadystatechange", function () {
- self.init_(doc);
- });
- }
- },
-
- init_: function (doc) {
- if (doc.readyState == "complete") {
- // create xmlns
- if (!doc.namespaces["g_vml_"]) {
- doc.namespaces.add("g_vml_", "urn:schemas-microsoft-com:vml");
- }
-
- // setup default css
- var ss = doc.createStyleSheet();
- ss.cssText = "canvas{display:inline-block;overflow:hidden;" +
- // default size is 300x150 in Gecko and Opera
- "text-align:left;width:300px;height:150px}" +
- "g_vml_\\:*{behavior:url(#default#VML)}";
-
- // find all canvas elements
- var els = doc.getElementsByTagName("canvas");
- for (var i = 0; i < els.length; i++) {
- if (!els[i].getContext) {
- this.initElement(els[i]);
- }
- }
- }
- },
-
- fixElement_: function (el) {
- // in IE before version 5.5 we would need to add HTML: to the tag name
- // but we do not care about IE before version 6
- var outerHTML = el.outerHTML;
-
- var newEl = el.ownerDocument.createElement(outerHTML);
- // if the tag is still open IE has created the children as siblings and
- // it has also created a tag with the name "/FOO"
- if (outerHTML.slice(-2) != "/>") {
- var tagName = "/" + el.tagName;
- var ns;
- // remove content
- while ((ns = el.nextSibling) && ns.tagName != tagName) {
- ns.removeNode();
- }
- // remove the incorrect closing tag
- if (ns) {
- ns.removeNode();
- }
- }
- el.parentNode.replaceChild(newEl, el);
- return newEl;
- },
-
- /**
- * Public initializes a canvas element so that it can be used as canvas
- * element from now on. This is called automatically before the page is
- * loaded but if you are creating elements using createElement you need to
- * make sure this is called on the element.
- * @param {HTMLElement} el The canvas element to initialize.
- * @return {HTMLElement} the element that was created.
- */
- initElement: function (el) {
- el = this.fixElement_(el);
- el.getContext = function () {
- if (this.context_) {
- return this.context_;
- }
- return this.context_ = new CanvasRenderingContext2D_(this);
- };
-
- // do not use inline function because that will leak memory
- el.attachEvent('onpropertychange', onPropertyChange);
- el.attachEvent('onresize', onResize);
-
- var attrs = el.attributes;
- if (attrs.width && attrs.width.specified) {
- // TODO: use runtimeStyle and coordsize
- // el.getContext().setWidth_(attrs.width.nodeValue);
- el.style.width = attrs.width.nodeValue + "px";
- } else {
- el.width = el.clientWidth;
- }
- if (attrs.height && attrs.height.specified) {
- // TODO: use runtimeStyle and coordsize
- // el.getContext().setHeight_(attrs.height.nodeValue);
- el.style.height = attrs.height.nodeValue + "px";
- } else {
- el.height = el.clientHeight;
- }
- //el.getContext().setCoordsize_()
- return el;
- }
- };
-
- function onPropertyChange(e) {
- var el = e.srcElement;
-
- switch (e.propertyName) {
- case 'width':
- el.style.width = el.attributes.width.nodeValue + "px";
- el.getContext().clearRect();
- break;
- case 'height':
- el.style.height = el.attributes.height.nodeValue + "px";
- el.getContext().clearRect();
- break;
- }
- }
-
- function onResize(e) {
- var el = e.srcElement;
- if (el.firstChild) {
- el.firstChild.style.width = el.clientWidth + 'px';
- el.firstChild.style.height = el.clientHeight + 'px';
- }
- }
-
- G_vmlCanvasManager_.init();
-
- // precompute "00" to "FF"
- var dec2hex = [];
- for (var i = 0; i < 16; i++) {
- for (var j = 0; j < 16; j++) {
- dec2hex[i * 16 + j] = i.toString(16) + j.toString(16);
- }
- }
-
- function createMatrixIdentity() {
- return [
- [1, 0, 0],
- [0, 1, 0],
- [0, 0, 1]
- ];
- }
-
- function matrixMultiply(m1, m2) {
- var result = createMatrixIdentity();
-
- for (var x = 0; x < 3; x++) {
- for (var y = 0; y < 3; y++) {
- var sum = 0;
-
- for (var z = 0; z < 3; z++) {
- sum += m1[x][z] * m2[z][y];
- }
-
- result[x][y] = sum;
- }
- }
- return result;
- }
-
- function copyState(o1, o2) {
- o2.fillStyle = o1.fillStyle;
- o2.lineCap = o1.lineCap;
- o2.lineJoin = o1.lineJoin;
- o2.lineWidth = o1.lineWidth;
- o2.miterLimit = o1.miterLimit;
- o2.shadowBlur = o1.shadowBlur;
- o2.shadowColor = o1.shadowColor;
- o2.shadowOffsetX = o1.shadowOffsetX;
- o2.shadowOffsetY = o1.shadowOffsetY;
- o2.strokeStyle = o1.strokeStyle;
- o2.arcScaleX_ = o1.arcScaleX_;
- o2.arcScaleY_ = o1.arcScaleY_;
- }
-
- function processStyle(styleString) {
- var str, alpha = 1;
-
- styleString = String(styleString);
- if (styleString.substring(0, 3) == "rgb") {
- var start = styleString.indexOf("(", 3);
- var end = styleString.indexOf(")", start + 1);
- var guts = styleString.substring(start + 1, end).split(",");
-
- str = "#";
- for (var i = 0; i < 3; i++) {
- str += dec2hex[Number(guts[i])];
- }
-
- if ((guts.length == 4) && (styleString.substr(3, 1) == "a")) {
- alpha = guts[3];
- }
- } else {
- str = styleString;
- }
-
- return [str, alpha];
- }
-
- function processLineCap(lineCap) {
- switch (lineCap) {
- case "butt":
- return "flat";
- case "round":
- return "round";
- case "square":
- default:
- return "square";
- }
- }
-
- /**
- * This class implements CanvasRenderingContext2D interface as described by
- * the WHATWG.
- * @param {HTMLElement} surfaceElement The element that the 2D context should
- * be associated with
- */
- function CanvasRenderingContext2D_(surfaceElement) {
- this.m_ = createMatrixIdentity();
-
- this.mStack_ = [];
- this.aStack_ = [];
- this.currentPath_ = [];
-
- // Canvas context properties
- this.strokeStyle = "#000";
- this.fillStyle = "#000";
-
- this.lineWidth = 1;
- this.lineJoin = "miter";
- this.lineCap = "butt";
- this.miterLimit = Z * 1;
- this.globalAlpha = 1;
- this.canvas = surfaceElement;
-
- var el = surfaceElement.ownerDocument.createElement('div');
- el.style.width = surfaceElement.clientWidth + 'px';
- el.style.height = surfaceElement.clientHeight + 'px';
- el.style.overflow = 'hidden';
- el.style.position = 'absolute';
- surfaceElement.appendChild(el);
-
- this.element_ = el;
- this.arcScaleX_ = 1;
- this.arcScaleY_ = 1;
- }
-
- var contextPrototype = CanvasRenderingContext2D_.prototype;
- contextPrototype.clearRect = function() {
- this.element_.innerHTML = "";
- this.currentPath_ = [];
- };
-
- contextPrototype.beginPath = function() {
- // TODO: Branch current matrix so that save/restore has no effect
- // as per safari docs.
-
- this.currentPath_ = [];
- };
-
- contextPrototype.moveTo = function(aX, aY) {
- this.currentPath_.push({type: "moveTo", x: aX, y: aY});
- this.currentX_ = aX;
- this.currentY_ = aY;
- };
-
- contextPrototype.lineTo = function(aX, aY) {
- this.currentPath_.push({type: "lineTo", x: aX, y: aY});
- this.currentX_ = aX;
- this.currentY_ = aY;
- };
-
- contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,
- aCP2x, aCP2y,
- aX, aY) {
- this.currentPath_.push({type: "bezierCurveTo",
- cp1x: aCP1x,
- cp1y: aCP1y,
- cp2x: aCP2x,
- cp2y: aCP2y,
- x: aX,
- y: aY});
- this.currentX_ = aX;
- this.currentY_ = aY;
- };
-
- contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {
- // the following is lifted almost directly from
- // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes
- var cp1x = this.currentX_ + 2.0 / 3.0 * (aCPx - this.currentX_);
- var cp1y = this.currentY_ + 2.0 / 3.0 * (aCPy - this.currentY_);
- var cp2x = cp1x + (aX - this.currentX_) / 3.0;
- var cp2y = cp1y + (aY - this.currentY_) / 3.0;
- this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, aX, aY);
- };
-
- contextPrototype.arc = function(aX, aY, aRadius,
- aStartAngle, aEndAngle, aClockwise) {
- aRadius *= Z;
- var arcType = aClockwise ? "at" : "wa";
-
- var xStart = aX + (mc(aStartAngle) * aRadius) - Z2;
- var yStart = aY + (ms(aStartAngle) * aRadius) - Z2;
-
- var xEnd = aX + (mc(aEndAngle) * aRadius) - Z2;
- var yEnd = aY + (ms(aEndAngle) * aRadius) - Z2;
-
- // IE won't render arches drawn counter clockwise if xStart == xEnd.
- if (xStart == xEnd && !aClockwise) {
- xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something
- // that can be represented in binary
- }
-
- this.currentPath_.push({type: arcType,
- x: aX,
- y: aY,
- radius: aRadius,
- xStart: xStart,
- yStart: yStart,
- xEnd: xEnd,
- yEnd: yEnd});
-
- };
-
- contextPrototype.rect = function(aX, aY, aWidth, aHeight) {
- this.moveTo(aX, aY);
- this.lineTo(aX + aWidth, aY);
- this.lineTo(aX + aWidth, aY + aHeight);
- this.lineTo(aX, aY + aHeight);
- this.closePath();
- };
-
- contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {
- // Will destroy any existing path (same as FF behaviour)
- this.beginPath();
- this.moveTo(aX, aY);
- this.lineTo(aX + aWidth, aY);
- this.lineTo(aX + aWidth, aY + aHeight);
- this.lineTo(aX, aY + aHeight);
- this.closePath();
- this.stroke();
- };
-
- contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {
- // Will destroy any existing path (same as FF behaviour)
- this.beginPath();
- this.moveTo(aX, aY);
- this.lineTo(aX + aWidth, aY);
- this.lineTo(aX + aWidth, aY + aHeight);
- this.lineTo(aX, aY + aHeight);
- this.closePath();
- this.fill();
- };
-
- contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {
- var gradient = new CanvasGradient_("gradient");
- return gradient;
- };
-
- contextPrototype.createRadialGradient = function(aX0, aY0,
- aR0, aX1,
- aY1, aR1) {
- var gradient = new CanvasGradient_("gradientradial");
- gradient.radius1_ = aR0;
- gradient.radius2_ = aR1;
- gradient.focus_.x = aX0;
- gradient.focus_.y = aY0;
- return gradient;
- };
-
- contextPrototype.drawImage = function (image, var_args) {
- var dx, dy, dw, dh, sx, sy, sw, sh;
-
- // to find the original width we overide the width and height
- var oldRuntimeWidth = image.runtimeStyle.width;
- var oldRuntimeHeight = image.runtimeStyle.height;
- image.runtimeStyle.width = 'auto';
- image.runtimeStyle.height = 'auto';
-
- // get the original size
- var w = image.width;
- var h = image.height;
-
- // and remove overides
- image.runtimeStyle.width = oldRuntimeWidth;
- image.runtimeStyle.height = oldRuntimeHeight;
-
- if (arguments.length == 3) {
- dx = arguments[1];
- dy = arguments[2];
- sx = sy = 0;
- sw = dw = w;
- sh = dh = h;
- } else if (arguments.length == 5) {
- dx = arguments[1];
- dy = arguments[2];
- dw = arguments[3];
- dh = arguments[4];
- sx = sy = 0;
- sw = w;
- sh = h;
- } else if (arguments.length == 9) {
- sx = arguments[1];
- sy = arguments[2];
- sw = arguments[3];
- sh = arguments[4];
- dx = arguments[5];
- dy = arguments[6];
- dw = arguments[7];
- dh = arguments[8];
- } else {
- throw "Invalid number of arguments";
- }
-
- var d = this.getCoords_(dx, dy);
-
- var w2 = sw / 2;
- var h2 = sh / 2;
-
- var vmlStr = [];
-
- var W = 10;
- var H = 10;
-
- // For some reason that I've now forgotten, using divs didn't work
- vmlStr.push(' <g_vml_:group',
- ' coordsize="', Z * W, ',', Z * H, '"',
- ' coordorigin="0,0"' ,
- ' style="width:', W, ';height:', H, ';position:absolute;');
-
- // If filters are necessary (rotation exists), create them
- // filters are bog-slow, so only create them if abbsolutely necessary
- // The following check doesn't account for skews (which don't exist
- // in the canvas spec (yet) anyway.
-
- if (this.m_[0][0] != 1 || this.m_[0][1]) {
- var filter = [];
-
- // Note the 12/21 reversal
- filter.push("M11='", this.m_[0][0], "',",
- "M12='", this.m_[1][0], "',",
- "M21='", this.m_[0][1], "',",
- "M22='", this.m_[1][1], "',",
- "Dx='", mr(d.x / Z), "',",
- "Dy='", mr(d.y / Z), "'");
-
- // Bounding box calculation (need to minimize displayed area so that
- // filters don't waste time on unused pixels.
- var max = d;
- var c2 = this.getCoords_(dx + dw, dy);
- var c3 = this.getCoords_(dx, dy + dh);
- var c4 = this.getCoords_(dx + dw, dy + dh);
-
- max.x = Math.max(max.x, c2.x, c3.x, c4.x);
- max.y = Math.max(max.y, c2.y, c3.y, c4.y);
-
- vmlStr.push("padding:0 ", mr(max.x / Z), "px ", mr(max.y / Z),
- "px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",
- filter.join(""), ", sizingmethod='clip');");
- } else {
- vmlStr.push("top:", mr(d.y / Z), "px;left:", mr(d.x / Z), "px;");
- }
-
- vmlStr.push(' ">' ,
- '<g_vml_:image src="', image.src, '"',
- ' style="width:', Z * dw, ';',
- ' height:', Z * dh, ';"',
- ' cropleft="', sx / w, '"',
- ' croptop="', sy / h, '"',
- ' cropright="', (w - sx - sw) / w, '"',
- ' cropbottom="', (h - sy - sh) / h, '"',
- ' />',
- '</g_vml_:group>');
-
- this.element_.insertAdjacentHTML("BeforeEnd",
- vmlStr.join(""));
- };
-
- contextPrototype.stroke = function(aFill) {
- var lineStr = [];
- var lineOpen = false;
- var a = processStyle(aFill ? this.fillStyle : this.strokeStyle);
- var color = a[0];
- var opacity = a[1] * this.globalAlpha;
-
- var W = 10;
- var H = 10;
-
- lineStr.push('<g_vml_:shape',
- ' fillcolor="', color, '"',
- ' filled="', Boolean(aFill), '"',
- ' style="position:absolute;width:', W, ';height:', H, ';"',
- ' coordorigin="0 0" coordsize="', Z * W, ' ', Z * H, '"',
- ' stroked="', !aFill, '"',
- ' strokeweight="', this.lineWidth, '"',
- ' strokecolor="', color, '"',
- ' path="');
-
- var newSeq = false;
- var min = {x: null, y: null};
- var max = {x: null, y: null};
-
- for (var i = 0; i < this.currentPath_.length; i++) {
- var p = this.currentPath_[i];
-
- if (p.type == "moveTo") {
- lineStr.push(" m ");
- var c = this.getCoords_(p.x, p.y);
- lineStr.push(mr(c.x), ",", mr(c.y));
- } else if (p.type == "lineTo") {
- lineStr.push(" l ");
- var c = this.getCoords_(p.x, p.y);
- lineStr.push(mr(c.x), ",", mr(c.y));
- } else if (p.type == "close") {
- lineStr.push(" x ");
- } else if (p.type == "bezierCurveTo") {
- lineStr.push(" c ");
- var c = this.getCoords_(p.x, p.y);
- var c1 = this.getCoords_(p.cp1x, p.cp1y);
- var c2 = this.getCoords_(p.cp2x, p.cp2y);
- lineStr.push(mr(c1.x), ",", mr(c1.y), ",",
- mr(c2.x), ",", mr(c2.y), ",",
- mr(c.x), ",", mr(c.y));
- } else if (p.type == "at" || p.type == "wa") {
- lineStr.push(" ", p.type, " ");
- var c = this.getCoords_(p.x, p.y);
- var cStart = this.getCoords_(p.xStart, p.yStart);
- var cEnd = this.getCoords_(p.xEnd, p.yEnd);
-
- lineStr.push(mr(c.x - this.arcScaleX_ * p.radius), ",",
- mr(c.y - this.arcScaleY_ * p.radius), " ",
- mr(c.x + this.arcScaleX_ * p.radius), ",",
- mr(c.y + this.arcScaleY_ * p.radius), " ",
- mr(cStart.x), ",", mr(cStart.y), " ",
- mr(cEnd.x), ",", mr(cEnd.y));
- }
-
-
- // TODO: Following is broken for curves due to
- // move to proper paths.
-
- // Figure out dimensions so we can do gradient fills
- // properly
- if(c) {
- if (min.x == null || c.x < min.x) {
- min.x = c.x;
- }
- if (max.x == null || c.x > max.x) {
- max.x = c.x;
- }
- if (min.y == null || c.y < min.y) {
- min.y = c.y;
- }
- if (max.y == null || c.y > max.y) {
- max.y = c.y;
- }
- }
- }
- lineStr.push(' ">');
-
- if (typeof this.fillStyle == "object") {
- var focus = {x: "50%", y: "50%"};
- var width = (max.x - min.x);
- var height = (max.y - min.y);
- var dimension = (width > height) ? width : height;
-
- focus.x = mr((this.fillStyle.focus_.x / width) * 100 + 50) + "%";
- focus.y = mr((this.fillStyle.focus_.y / height) * 100 + 50) + "%";
-
- var colors = [];
-
- // inside radius (%)
- if (this.fillStyle.type_ == "gradientradial") {
- var inside = (this.fillStyle.radius1_ / dimension * 100);
-
- // percentage that outside radius exceeds inside radius
- var expansion = (this.fillStyle.radius2_ / dimension * 100) - inside;
- } else {
- var inside = 0;
- var expansion = 100;
- }
-
- var insidecolor = {offset: null, color: null};
- var outsidecolor = {offset: null, color: null};
-
- // We need to sort 'colors' by percentage, from 0 > 100 otherwise ie
- // won't interpret it correctly
- this.fillStyle.colors_.sort(function (cs1, cs2) {
- return cs1.offset - cs2.offset;
- });
-
- for (var i = 0; i < this.fillStyle.colors_.length; i++) {
- var fs = this.fillStyle.colors_[i];
-
- colors.push( (fs.offset * expansion) + inside, "% ", fs.color, ",");
-
- if (fs.offset > insidecolor.offset || insidecolor.offset == null) {
- insidecolor.offset = fs.offset;
- insidecolor.color = fs.color;
- }
-
- if (fs.offset < outsidecolor.offset || outsidecolor.offset == null) {
- outsidecolor.offset = fs.offset;
- outsidecolor.color = fs.color;
- }
- }
- colors.pop();
-
- lineStr.push('<g_vml_:fill',
- ' color="', outsidecolor.color, '"',
- ' color2="', insidecolor.color, '"',
- ' type="', this.fillStyle.type_, '"',
- ' focusposition="', focus.x, ', ', focus.y, '"',
- ' colors="', colors.join(""), '"',
- ' opacity="', opacity, '" />');
- } else if (aFill) {
- lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity, '" />');
- } else {
- lineStr.push(
- '<g_vml_:stroke',
- ' opacity="', opacity,'"',
- ' joinstyle="', this.lineJoin, '"',
- ' miterlimit="', this.miterLimit, '"',
- ' endcap="', processLineCap(this.lineCap) ,'"',
- ' weight="', this.lineWidth, 'px"',
- ' color="', color,'" />'
- );
- }
-
- lineStr.push("</g_vml_:shape>");
-
- this.element_.insertAdjacentHTML("beforeEnd", lineStr.join(""));
-
- //this.currentPath_ = [];
- };
-
- contextPrototype.fill = function() {
- this.stroke(true);
- };
-
- contextPrototype.closePath = function() {
- this.currentPath_.push({type: "close"});
- };
-
- /**
- * @private
- */
- contextPrototype.getCoords_ = function(aX, aY) {
- return {
- x: Z * (aX * this.m_[0][0] + aY * this.m_[1][0] + this.m_[2][0]) - Z2,
- y: Z * (aX * this.m_[0][1] + aY * this.m_[1][1] + this.m_[2][1]) - Z2
- };
- };
-
- contextPrototype.save = function() {
- var o = {};
- copyState(this, o);
- this.aStack_.push(o);
- this.mStack_.push(this.m_);
- this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);
- };
-
- contextPrototype.restore = function() {
- copyState(this.aStack_.pop(), this);
- this.m_ = this.mStack_.pop();
- };
-
- contextPrototype.translate = function(aX, aY) {
- var m1 = [
- [1, 0, 0],
- [0, 1, 0],
- [aX, aY, 1]
- ];
-
- this.m_ = matrixMultiply(m1, this.m_);
- };
-
- contextPrototype.rotate = function(aRot) {
- var c = mc(aRot);
- var s = ms(aRot);
-
- var m1 = [
- [c, s, 0],
- [-s, c, 0],
- [0, 0, 1]
- ];
-
- this.m_ = matrixMultiply(m1, this.m_);
- };
-
- contextPrototype.scale = function(aX, aY) {
- this.arcScaleX_ *= aX;
- this.arcScaleY_ *= aY;
- var m1 = [
- [aX, 0, 0],
- [0, aY, 0],
- [0, 0, 1]
- ];
-
- this.m_ = matrixMultiply(m1, this.m_);
- };
-
- /******** STUBS ********/
- contextPrototype.clip = function() {
- // TODO: Implement
- };
-
- contextPrototype.arcTo = function() {
- // TODO: Implement
- };
-
- contextPrototype.createPattern = function() {
- return new CanvasPattern_;
- };
-
- // Gradient / Pattern Stubs
- function CanvasGradient_(aType) {
- this.type_ = aType;
- this.radius1_ = 0;
- this.radius2_ = 0;
- this.colors_ = [];
- this.focus_ = {x: 0, y: 0};
- }
-
- CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {
- aColor = processStyle(aColor);
- this.colors_.push({offset: 1-aOffset, color: aColor});
- };
-
- function CanvasPattern_() {}
-
- // set up externs
- G_vmlCanvasManager = G_vmlCanvasManager_;
- CanvasRenderingContext2D = CanvasRenderingContext2D_;
- CanvasGradient = CanvasGradient_;
- CanvasPattern = CanvasPattern_;
-
-})();
-
-} // if
diff --git a/usr/local/www/reboot.php b/usr/local/www/reboot.php
deleted file mode 100755
index 3a986ac..0000000
--- a/usr/local/www/reboot.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-/* $Id$ */
-/*
- reboot.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-rebootsystem
-##|*NAME=Diagnostics: Reboot System page
-##|*DESCR=Allow access to the 'Diagnostics: Reboot System' page.
-##|*MATCH=reboot.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-require("captiveportal.inc");
-
-if ($_POST['Submit'] == " " . gettext("No") . " ") {
- header("Location: index.php");
- exit;
-}
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Reboot System"));
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($_POST['Submit'] == " " . gettext("Yes") . " "): ?>
-<meta http-equiv=\"refresh\" content=\"70;url=/\">
-<?php print_info_box(gettext("The system is rebooting now. This may take one minute.")); ?>
-<pre>
-<?php system_reboot(); ?>
-</pre>
-<?php else: ?>
-<form action="reboot.php" method="post">
- <p><strong><?=gettext("Are you sure you want to reboot the system?");?></strong></p>
- <p>
- <input name="Submit" type="submit" class="formbtn" value=" <?=gettext("Yes");?> " />
- <input name="Submit" type="submit" class="formbtn" value=" <?=gettext("No");?> " />
- </p>
-</form>
-<?php endif; ?>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/restart_httpd.php b/usr/local/www/restart_httpd.php
deleted file mode 100644
index 2f59bbf..0000000
--- a/usr/local/www/restart_httpd.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-/* $Id$ */
-/*
- restart_httpd.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2005 Bill Marquette <bill.marquette@gmail.com>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /bin/chmod
- pfSense_MODULE: pkgs
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-restart-httpd
-##|*NAME=Diagnostics: Restart HTTPD : System page
-##|*DESCR=Allow access to the 'Diagnostics: Restart HTTPD: System' page.
-##|*MATCH=restart_httpd.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-
-$pgtitle = array(gettext("Restarting httpd"));
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<form>
-<?php include("fbegin.inc"); ?>
-
-<?=gettext("Mounting file systems read/write");?>...
-<?php flush(); sleep(1); conf_mount_rw(); ?>
-<?=gettext("Done");?>.<br />
-<?=gettext("Forcing all PHP file permissions to 0755");?>...
-<?php flush(); sleep(1); system('/bin/chmod -R 0755 /usr/local/www/*.php'); ?>
-<?=gettext("Done");?>.<br />
-<?=gettext("Mounting file systems read only");?>...
-<?php flush(); sleep(1); conf_mount_ro(); ?>
-<?=gettext("Done");?>.<br />
-<?=gettext("Restarting mini_httpd");?>...
-<?php flush(); sleep(1); system_webgui_start(); ?>
-<?=gettext("Done");?>.<br />
-
-<?php
-include("fend.inc");
-?>
diff --git a/usr/local/www/services_captiveportal.php b/usr/local/www/services_captiveportal.php
deleted file mode 100644
index 515bcbb..0000000
--- a/usr/local/www/services_captiveportal.php
+++ /dev/null
@@ -1,1253 +0,0 @@
-<?php
-/*
- services_captiveportal.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-services-captiveportal
-##|*NAME=Services: Captive portal page
-##|*DESCR=Allow access to the 'Services: Captive portal' page.
-##|*MATCH=services_captiveportal.php*
-##|-PRIV
-
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("captiveportal.inc");
-
-if (substr($_GET['act'], 0, 3) == "get") {
- $nocsrf = true;
-}
-
-require_once("guiconfig.inc");
-
-global $cpzone;
-global $cpzoneid;
-
-$cpzoneid = 1; /* Just a default */
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-$pgtitle = array(gettext("Services"), gettext("Captive portal"), $a_cp[$cpzone]['zone']);
-$shortcut_section = "captiveportal";
-
-if ($_GET['act'] == "viewhtml") {
- if ($a_cp[$cpzone] && $a_cp[$cpzone]['page']['htmltext']) {
- echo base64_decode($a_cp[$cpzone]['page']['htmltext']);
- }
- exit;
-} else if ($_GET['act'] == "gethtmlhtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['htmltext']) {
- $file_data = base64_decode($a_cp[$cpzone]['page']['htmltext']);
- $file_size = strlen($file_data);
-
- header("Content-Type: text/html");
- header("Content-Disposition: attachment; filename=portal.html");
- header("Content-Length: $file_size");
- echo $file_data;
-
- exit;
-} else if ($_GET['act'] == "delhtmlhtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['htmltext']) {
- unset($a_cp[$cpzone]['page']['htmltext']);
- write_config(sprintf(gettext("Captive Portal: zone %s: Restore default portal page"), $cpzone));
- header("Location: services_captiveportal.php?zone={$cpzone}");
- exit;
-} else if ($_GET['act'] == "viewerrhtml") {
- if ($a_cp[$cpzone] && $a_cp[$cpzone]['page']['errtext']) {
- echo base64_decode($a_cp[$cpzone]['page']['errtext']);
- }
- exit;
-} else if ($_GET['act'] == "geterrhtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['errtext']) {
- $file_data = base64_decode($a_cp[$cpzone]['page']['errtext']);
- $file_size = strlen($file_data);
-
- header("Content-Type: text/html");
- header("Content-Disposition: attachment; filename=err.html");
- header("Content-Length: $file_size");
- echo $file_data;
-
- exit;
-} else if ($_GET['act'] == "delerrhtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['errtext']) {
- unset($a_cp[$cpzone]['page']['errtext']);
- write_config(sprintf(gettext("Captive Portal: zone %s: Restore default error page"), $cpzone));
- header("Location: services_captiveportal.php?zone={$cpzone}");
- exit;
-} else if ($_GET['act'] == "viewlogouthtml") {
- if ($a_cp[$cpzone] && $a_cp[$cpzone]['page']['logouttext']) {
- echo base64_decode($a_cp[$cpzone]['page']['logouttext']);
- }
- exit;
-} else if ($_GET['act'] == "getlogouthtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['logouttext']) {
- $file_data = base64_decode($a_cp[$cpzone]['page']['logouttext']);
- $file_size = strlen($file_data);
-
- header("Content-Type: text/html");
- header("Content-Disposition: attachment; filename=logout.html");
- header("Content-Length: $file_size");
- echo $file_data;
-
- exit;
-} else if ($_GET['act'] == "dellogouthtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['logouttext']) {
- unset($a_cp[$cpzone]['page']['logouttext']);
- write_config(sprintf(gettext("Captive Portal: zone %s: Restore default logout page"), $cpzone));
- header("Location: services_captiveportal.php?zone={$cpzone}");
- exit;
-}
-
-if (!is_array($config['ca'])) {
- $config['ca'] = array();
-}
-
-$a_ca =& $config['ca'];
-
-if (!is_array($config['cert'])) {
- $config['cert'] = array();
-}
-
-$a_cert =& $config['cert'];
-
-if ($a_cp[$cpzone]) {
- $cpzoneid = $pconfig['zoneid'] = $a_cp[$cpzone]['zoneid'];
- $pconfig['cinterface'] = $a_cp[$cpzone]['interface'];
- $pconfig['maxproc'] = $a_cp[$cpzone]['maxproc'];
- $pconfig['maxprocperip'] = $a_cp[$cpzone]['maxprocperip'];
- $pconfig['timeout'] = $a_cp[$cpzone]['timeout'];
- $pconfig['idletimeout'] = $a_cp[$cpzone]['idletimeout'];
- $pconfig['freelogins_count'] = $a_cp[$cpzone]['freelogins_count'];
- $pconfig['freelogins_resettimeout'] = $a_cp[$cpzone]['freelogins_resettimeout'];
- $pconfig['freelogins_updatetimeouts'] = isset($a_cp[$cpzone]['freelogins_updatetimeouts']);
- $pconfig['enable'] = isset($a_cp[$cpzone]['enable']);
- $pconfig['auth_method'] = $a_cp[$cpzone]['auth_method'];
- $pconfig['localauth_priv'] = isset($a_cp[$cpzone]['localauth_priv']);
- $pconfig['radacct_enable'] = isset($a_cp[$cpzone]['radacct_enable']);
- $pconfig['radmac_enable'] = isset($a_cp[$cpzone]['radmac_enable']);
- $pconfig['radmac_secret'] = $a_cp[$cpzone]['radmac_secret'];
- $pconfig['reauthenticate'] = isset($a_cp[$cpzone]['reauthenticate']);
- $pconfig['reauthenticateacct'] = $a_cp[$cpzone]['reauthenticateacct'];
- $pconfig['httpslogin_enable'] = isset($a_cp[$cpzone]['httpslogin']);
- $pconfig['httpsname'] = $a_cp[$cpzone]['httpsname'];
- $pconfig['preauthurl'] = strtolower($a_cp[$cpzone]['preauthurl']);
- $pconfig['blockedmacsurl'] = strtolower($a_cp[$cpzone]['blockedmacsurl']);
- $pconfig['certref'] = $a_cp[$cpzone]['certref'];
- $pconfig['nohttpsforwards'] = isset($a_cp[$cpzone]['nohttpsforwards']);
- $pconfig['logoutwin_enable'] = isset($a_cp[$cpzone]['logoutwin_enable']);
- $pconfig['peruserbw'] = isset($a_cp[$cpzone]['peruserbw']);
- $pconfig['bwdefaultdn'] = $a_cp[$cpzone]['bwdefaultdn'];
- $pconfig['bwdefaultup'] = $a_cp[$cpzone]['bwdefaultup'];
- $pconfig['nomacfilter'] = isset($a_cp[$cpzone]['nomacfilter']);
- $pconfig['noconcurrentlogins'] = isset($a_cp[$cpzone]['noconcurrentlogins']);
- $pconfig['radius_protocol'] = $a_cp[$cpzone]['radius_protocol'];
- $pconfig['redirurl'] = $a_cp[$cpzone]['redirurl'];
- $pconfig['radiusip'] = $a_cp[$cpzone]['radiusip'];
- $pconfig['radiusip2'] = $a_cp[$cpzone]['radiusip2'];
- $pconfig['radiusip3'] = $a_cp[$cpzone]['radiusip3'];
- $pconfig['radiusip4'] = $a_cp[$cpzone]['radiusip4'];
- $pconfig['radiusport'] = $a_cp[$cpzone]['radiusport'];
- $pconfig['radiusport2'] = $a_cp[$cpzone]['radiusport2'];
- $pconfig['radiusport3'] = $a_cp[$cpzone]['radiusport3'];
- $pconfig['radiusport4'] = $a_cp[$cpzone]['radiusport4'];
- $pconfig['radiusacctport'] = $a_cp[$cpzone]['radiusacctport'];
- $pconfig['radiuskey'] = $a_cp[$cpzone]['radiuskey'];
- $pconfig['radiuskey2'] = $a_cp[$cpzone]['radiuskey2'];
- $pconfig['radiuskey3'] = $a_cp[$cpzone]['radiuskey3'];
- $pconfig['radiuskey4'] = $a_cp[$cpzone]['radiuskey4'];
- $pconfig['radiusvendor'] = $a_cp[$cpzone]['radiusvendor'];
- $pconfig['radiussession_timeout'] = isset($a_cp[$cpzone]['radiussession_timeout']);
- $pconfig['radiussrcip_attribute'] = $a_cp[$cpzone]['radiussrcip_attribute'];
- $pconfig['passthrumacadd'] = isset($a_cp[$cpzone]['passthrumacadd']);
- $pconfig['passthrumacaddusername'] = isset($a_cp[$cpzone]['passthrumacaddusername']);
- $pconfig['radmac_format'] = $a_cp[$cpzone]['radmac_format'];
- $pconfig['reverseacct'] = isset($a_cp[$cpzone]['reverseacct']);
- $pconfig['radiusnasid'] = $a_cp[$cpzone]['radiusnasid'];
- $pconfig['page'] = array();
- if ($a_cp[$cpzone]['page']['htmltext']) {
- $pconfig['page']['htmltext'] = $a_cp[$cpzone]['page']['htmltext'];
- }
- if ($a_cp[$cpzone]['page']['errtext']) {
- $pconfig['page']['errtext'] = $a_cp[$cpzone]['page']['errtext'];
- }
- if ($a_cp[$cpzone]['page']['logouttext']) {
- $pconfig['page']['logouttext'] = $a_cp[$cpzone]['page']['logouttext'];
- }
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if ($_POST['enable']) {
- $reqdfields = explode(" ", "zone cinterface");
- $reqdfieldsn = array(gettext("Zone name"), gettext("Interface"));
-
- if (isset($_POST['auth_method']) && $_POST['auth_method'] == "radius") {
- $reqdfields[] = "radius_protocol";
- $reqdfieldsn[] = gettext("RADIUS Protocol");
- $reqdfields[] = "radiusip";
- $reqdfieldsn[] = gettext("Primary RADIUS server IP address");
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- /* make sure no interfaces are bridged or used on other zones */
- if (is_array($_POST['cinterface'])) {
- foreach ($pconfig['cinterface'] as $cpbrif) {
- if (link_interface_to_bridge($cpbrif)) {
- $input_errors[] = sprintf(gettext("The captive portal cannot be used on interface %s since it is part of a bridge."), $cpbrif);
- }
- foreach ($a_cp as $cpkey => $cp) {
- if ($cpkey != $cpzone || empty($cpzone)) {
- if (in_array($cpbrif, explode(",", $cp['interface']))) {
- $input_errors[] = sprintf(gettext("The captive portal cannot be used on interface %s since it is used already on %s instance."), $cpbrif, $cp['zone']);
- }
- }
- }
- }
- }
-
- if ($_POST['httpslogin_enable']) {
- if (!$_POST['certref']) {
- $input_errors[] = gettext("Certificate must be specified for HTTPS login.");
- }
- if (!$_POST['httpsname'] || !is_domain($_POST['httpsname'])) {
- $input_errors[] = gettext("The HTTPS server name must be specified for HTTPS login.");
- }
- }
- }
-
- if ($_POST['timeout']) {
- if (!is_numeric($_POST['timeout']) || ($_POST['timeout'] < 1)) {
- $input_errors[] = gettext("The timeout must be at least 1 minute.");
- } else if (isset($config['dhcpd']) && is_array($config['dhcpd'])) {
- foreach ($config['dhcpd'] as $dhcpd_if => $dhcpd_data) {
- if (!isset($dhcpd_data['enable'])) {
- continue;
- }
- if (!is_array($_POST['cinterface']) || !in_array($dhcpd_if, $_POST['cinterface'])) {
- continue;
- }
-
- $deftime = 7200; // Default lease time
- if (isset($dhcpd_data['defaultleasetime']) && is_numeric($dhcpd_data['defaultleasetime'])) {
- $deftime = $dhcpd_data['defaultleasetime'];
- }
-
- if ($_POST['timeout'] > $deftime) {
- $input_errors[] = gettext("Hard timeout must be less or equal Default lease time set on DHCP Server");
- }
- }
- }
- }
- if ($_POST['idletimeout'] && (!is_numeric($_POST['idletimeout']) || ($_POST['idletimeout'] < 1))) {
- $input_errors[] = gettext("The idle timeout must be at least 1 minute.");
- }
- if ($_POST['freelogins_count'] && (!is_numeric($_POST['freelogins_count']))) {
- $input_errors[] = gettext("The pass-through credit count must be a number or left blank.");
- } else if ($_POST['freelogins_count'] && is_numeric($_POST['freelogins_count']) && ($_POST['freelogins_count'] >= 1)) {
- if (empty($_POST['freelogins_resettimeout']) || !is_numeric($_POST['freelogins_resettimeout']) || ($_POST['freelogins_resettimeout'] <= 0)) {
- $input_errors[] = gettext("The waiting period to restore pass-through credits must be above 0 hours.");
- }
- }
- if (($_POST['radiusip'] && !is_ipaddr($_POST['radiusip']))) {
- $input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['radiusip']);
- }
- if (($_POST['radiusip2'] && !is_ipaddr($_POST['radiusip2']))) {
- $input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['radiusip2']);
- }
- if (($_POST['radiusip3'] && !is_ipaddr($_POST['radiusip3']))) {
- $input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['radiusip3']);
- }
- if (($_POST['radiusip4'] && !is_ipaddr($_POST['radiusip4']))) {
- $input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['radiusip4']);
- }
- if (($_POST['radiusport'] && !is_port($_POST['radiusport']))) {
- $input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusport']);
- }
- if (($_POST['radiusport2'] && !is_port($_POST['radiusport2']))) {
- $input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusport2']);
- }
- if (($_POST['radiusport3'] && !is_port($_POST['radiusport3']))) {
- $input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusport3']);
- }
- if (($_POST['radiusport4'] && !is_port($_POST['radiusport4']))) {
- $input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusport4']);
- }
- if (($_POST['radiusacctport'] && !is_port($_POST['radiusacctport']))) {
- $input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusacctport']);
- }
- if ($_POST['maxproc'] && (!is_numeric($_POST['maxproc']) || ($_POST['maxproc'] < 4) || ($_POST['maxproc'] > 100))) {
- $input_errors[] = gettext("The maximum number of concurrent connections per client IP address may not be larger than the global maximum.");
- }
- if (trim($_POST['radiusnasid']) !== "" && !preg_match("/^[\x21-\x7e]{3,253}$/i", trim($_POST['radiusnasid']))) {
- $input_errors[] = gettext("The NAS-Identifier must be 3-253 characters long and should only contain ASCII characters.");
- }
-
- if (!$input_errors) {
- $newcp =& $a_cp[$cpzone];
- //$newcp['zoneid'] = $a_cp[$cpzone]['zoneid'];
- if (empty($newcp['zoneid'])) {
- $newcp['zoneid'] = 2;
- foreach ($a_cp as $keycpzone => $cp) {
- if ($cp['zoneid'] == $newcp['zoneid'] && $keycpzone != $cpzone) {
- $newcp['zoneid'] += 2; /* Reserve space for SSL config if needed */
- }
- }
- $cpzoneid = $newcp['zoneid'];
- }
- $oldifaces = explode(",", $newcp['interface']);
- if (is_array($_POST['cinterface'])) {
- $newcp['interface'] = implode(",", $_POST['cinterface']);
- }
- $newcp['maxproc'] = $_POST['maxproc'];
- $newcp['maxprocperip'] = $_POST['maxprocperip'] ? $_POST['maxprocperip'] : false;
- $newcp['timeout'] = $_POST['timeout'];
- $newcp['idletimeout'] = $_POST['idletimeout'];
- $newcp['freelogins_count'] = $_POST['freelogins_count'];
- $newcp['freelogins_resettimeout'] = $_POST['freelogins_resettimeout'];
- $newcp['freelogins_updatetimeouts'] = $_POST['freelogins_updatetimeouts'] ? true : false;
- if ($_POST['enable']) {
- $newcp['enable'] = true;
- } else {
- unset($newcp['enable']);
- }
- $newcp['auth_method'] = $_POST['auth_method'];
- $newcp['localauth_priv'] = isset($_POST['localauth_priv']);
- $newcp['radacct_enable'] = $_POST['radacct_enable'] ? true : false;
- $newcp['reauthenticate'] = $_POST['reauthenticate'] ? true : false;
- $newcp['radmac_enable'] = $_POST['radmac_enable'] ? true : false;
- $newcp['radmac_secret'] = $_POST['radmac_secret'] ? $_POST['radmac_secret'] : false;
- $newcp['reauthenticateacct'] = $_POST['reauthenticateacct'];
- if ($_POST['httpslogin_enable']) {
- $newcp['httpslogin'] = true;
- } else {
- unset($newcp['httpslogin']);
- }
- $newcp['httpsname'] = $_POST['httpsname'];
- $newcp['preauthurl'] = $_POST['preauthurl'];
- $newcp['blockedmacsurl'] = $_POST['blockedmacsurl'];
- $newcp['peruserbw'] = $_POST['peruserbw'] ? true : false;
- if (isset($_POST['bwdefaultdn'])) {
- $newcp['bwdefaultdn'] = $_POST['bwdefaultdn'];
- } else {
- unset($newcp['bwdefaultdn']);
- }
- if (isset($_POST['bwdefaultup'])) {
- $newcp['bwdefaultup'] = $_POST['bwdefaultup'];
- } else {
- unset($newcp['bwdefaultup']);
- }
- $newcp['certref'] = $_POST['certref'];
- $newcp['nohttpsforwards'] = $_POST['nohttpsforwards'] ? true : false;
- $newcp['logoutwin_enable'] = $_POST['logoutwin_enable'] ? true : false;
- $newcp['nomacfilter'] = $_POST['nomacfilter'] ? true : false;
- $newcp['noconcurrentlogins'] = $_POST['noconcurrentlogins'] ? true : false;
- $newcp['radius_protocol'] = $_POST['radius_protocol'];
- $newcp['redirurl'] = $_POST['redirurl'];
- if (isset($_POST['radiusip'])) {
- $newcp['radiusip'] = $_POST['radiusip'];
- } else {
- unset($newcp['radiusip']);
- }
- if (isset($_POST['radiusip2'])) {
- $newcp['radiusip2'] = $_POST['radiusip2'];
- } else {
- unset($newcp['radiusip2']);
- }
- if (isset($_POST['radiusip3'])) {
- $newcp['radiusip3'] = $_POST['radiusip3'];
- } else {
- unset($newcp['radiusip3']);
- }
- if (isset($_POST['radiusip4'])) {
- $newcp['radiusip4'] = $_POST['radiusip4'];
- } else {
- unset($newcp['radiusip4']);
- }
- $newcp['radiusport'] = $_POST['radiusport'];
- $newcp['radiusport2'] = $_POST['radiusport2'];
- if (isset($_POST['radiusport3'])) {
- $newcp['radiusport3'] = $_POST['radiusport3'];
- }
- if (isset($_POST['radiusport4'])) {
- $newcp['radiusport4'] = $_POST['radiusport4'];
- }
- $newcp['radiusacctport'] = $_POST['radiusacctport'];
- $newcp['radiuskey'] = $_POST['radiuskey'];
- $newcp['radiuskey2'] = $_POST['radiuskey2'];
- $newcp['radiuskey3'] = $_POST['radiuskey3'];
- $newcp['radiuskey4'] = $_POST['radiuskey4'];
- $newcp['radiusvendor'] = $_POST['radiusvendor'] ? $_POST['radiusvendor'] : false;
- $newcp['radiussession_timeout'] = $_POST['radiussession_timeout'] ? true : false;
- $newcp['radiussrcip_attribute'] = $_POST['radiussrcip_attribute'];
- $newcp['passthrumacadd'] = $_POST['passthrumacadd'] ? true : false;
- $newcp['passthrumacaddusername'] = $_POST['passthrumacaddusername'] ? true : false;
- $newcp['radmac_format'] = $_POST['radmac_format'] ? $_POST['radmac_format'] : false;
- $newcp['reverseacct'] = $_POST['reverseacct'] ? true : false;
- $newcp['radiusnasid'] = trim($_POST['radiusnasid']);
- if (!is_array($newcp['page'])) {
- $newcp['page'] = array();
- }
-
- /* file upload? */
- if (is_uploaded_file($_FILES['htmlfile']['tmp_name'])) {
- $newcp['page']['htmltext'] = base64_encode(file_get_contents($_FILES['htmlfile']['tmp_name']));
- }
- if (is_uploaded_file($_FILES['errfile']['tmp_name'])) {
- $newcp['page']['errtext'] = base64_encode(file_get_contents($_FILES['errfile']['tmp_name']));
- }
- if (is_uploaded_file($_FILES['logoutfile']['tmp_name'])) {
- $newcp['page']['logouttext'] = base64_encode(file_get_contents($_FILES['logoutfile']['tmp_name']));
- }
-
- write_config();
-
- /* Clear up unselected interfaces */
- $newifaces = explode(",", $newcp['interface']);
- $toremove = array_diff($oldifaces, $newifaces);
- if (!empty($toremove)) {
- foreach ($toremove as $removeif) {
- $removeif = get_real_interface($removeif);
- mwexec("/sbin/ipfw zone {$cpzoneid} mdel {$removeif}");
- }
- }
- captiveportal_configure_zone($newcp);
- unset($newcp, $newifaces, $toremove);
- filter_configure();
- header("Location: services_captiveportal_zones.php");
- exit;
- } else {
- if (is_array($_POST['cinterface'])) {
- $pconfig['cinterface'] = implode(",", $_POST['cinterface']);
- }
- }
-}
-$closehead = false;
-include("head.inc");
-?>
-<script type="text/javascript">
-//<![CDATA[
-function enable_change(enable_change) {
- var endis, radius_endis;
- endis = !(document.iform.enable.checked || enable_change);
- localauth_endis = !((!endis && document.iform.auth_method[1].checked) || enable_change);
- radius_endis = !((!endis && document.iform.auth_method[2].checked) || enable_change);
- https_endis = !((!endis && document.iform.httpslogin_enable.checked) || enable_change);
-
- document.iform.cinterface.disabled = endis;
- //document.iform.maxproc.disabled = endis;
- document.iform.maxprocperip.disabled = endis;
- document.iform.idletimeout.disabled = endis;
- document.iform.freelogins_count.disabled = endis;
- document.iform.freelogins_resettimeout.disabled = endis;
- document.iform.freelogins_updatetimeouts.disabled = endis;
- document.iform.timeout.disabled = endis;
- document.iform.preauthurl.disabled = endis;
- document.iform.blockedmacsurl.disabled = endis;
- document.iform.redirurl.disabled = endis;
- document.iform.localauth_priv.disabled = localauth_endis;
- document.iform.radiusip.disabled = radius_endis;
- document.iform.radiusip2.disabled = radius_endis;
- document.iform.radiusip3.disabled = radius_endis;
- document.iform.radiusip4.disabled = radius_endis;
- document.iform.radiusport.disabled = radius_endis;
- document.iform.radiusport3.disabled = radius_endis;
- document.iform.radiusport4.disabled = radius_endis;
- document.iform.radiusport2.disabled = radius_endis;
- document.iform.radiuskey.disabled = radius_endis;
- document.iform.radiuskey2.disabled = radius_endis;
- document.iform.radiuskey3.disabled = radius_endis;
- document.iform.radiuskey4.disabled = radius_endis;
- document.iform.radacct_enable.disabled = radius_endis;
- document.iform.peruserbw.disabled = endis;
- document.iform.bwdefaultdn.disabled = endis;
- document.iform.bwdefaultup.disabled = endis;
- document.iform.reauthenticate.disabled = radius_endis;
- document.iform.auth_method[0].disabled = endis;
- document.iform.auth_method[1].disabled = endis;
- document.iform.auth_method[2].disabled = endis;
- document.iform.radius_protocol[0].disabled = radius_endis;
- document.iform.radius_protocol[1].disabled = radius_endis;
- document.iform.radius_protocol[2].disabled = radius_endis;
- document.iform.radius_protocol[3].disabled = radius_endis;
- document.iform.radmac_enable.disabled = radius_endis;
- document.iform.httpslogin_enable.disabled = endis;
- document.iform.radmac_format.disabled = radius_endis;
- document.iform.httpsname.disabled = https_endis;
- document.iform.certref.disabled = https_endis;
- document.iform.nohttpsforwards.disabled = https_endis;
- document.iform.logoutwin_enable.disabled = endis;
- document.iform.nomacfilter.disabled = endis;
- document.iform.noconcurrentlogins.disabled = endis;
- document.iform.radiusvendor.disabled = radius_endis;
- document.iform.radiussession_timeout.disabled = radius_endis;
- document.iform.radiussrcip_attribute.disabled = radius_endis;
- document.iform.htmlfile.disabled = endis;
- document.iform.errfile.disabled = endis;
- document.iform.logoutfile.disabled = endis;
-
- document.iform.radiusacctport.disabled = (radius_endis || !document.iform.radacct_enable.checked) && !enable_change;
-
- document.iform.radmac_secret.disabled = (radius_endis || !document.iform.radmac_enable.checked) && !enable_change;
-
- var radacct_dis = (radius_endis || !document.iform.radacct_enable.checked) && !enable_change;
- document.iform.reauthenticateacct[0].disabled = radacct_dis;
- document.iform.reauthenticateacct[1].disabled = radacct_dis;
- document.iform.reauthenticateacct[2].disabled = radacct_dis;
- document.iform.reverseacct.disabled = (radius_endis || !document.iform.radacct_enable.checked) && !enable_change;
- document.iform.radiusnasid.disabled = radius_endis;
-}
-//]]>
-</script>
-</head>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<form action="services_captiveportal.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="captive portal">
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Captive portal(s)"), true, "services_captiveportal.php?zone={$cpzone}");
- $tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}");
- $tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}");
- display_top_tabs($tab_array, true);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main">
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable">
- <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
- <strong><?=gettext("Enable captive portal"); ?> </strong>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interfaces"); ?></td>
- <td width="78%" class="vtable">
- <select name="cinterface[]" multiple="multiple" size="<?php echo count($config['interfaces']); ?>" class="formselect" id="cinterface">
- <?php
- $interfaces = get_configured_interface_with_descr();
- $cselected = explode(",", $pconfig['cinterface']);
- foreach ($interfaces as $iface => $ifacename): ?>
- <option value="<?=$iface;?>" <?php if (in_array($iface, $cselected)) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
- <?php
- endforeach;
- ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Select the interface(s) to enable for captive portal."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Maximum concurrent connections"); ?></td>
- <td class="vtable">
- <table cellpadding="0" cellspacing="0" summary="connections">
- <tr>
- <td>
- <input name="maxprocperip" type="text" class="formfld unknown" id="maxprocperip" size="5" value="<?=htmlspecialchars($pconfig['maxprocperip']);?>" /> <?=gettext("per client IP address (0 = no limit)"); ?>
- </td>
- </tr>
- </table>
- <?=gettext("This setting limits the number of concurrent connections to the captive portal HTTP(S) server. This does not set how many users can be logged in " .
- "to the captive portal, but rather how many users can load the portal page or authenticate at the same time! " .
- "Possible setting allowed is: minimum 4 connections per client IP address, with a total maximum of 100 connections."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Idle timeout"); ?></td>
- <td class="vtable">
- <input name="idletimeout" type="text" class="formfld unknown" id="idletimeout" size="6" value="<?=htmlspecialchars($pconfig['idletimeout']);?>" />
- <?=gettext("minutes"); ?><br />
- <?=gettext("Clients will be disconnected after this amount of inactivity. They may log in again immediately, though. Leave this field blank for no idle timeout."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Hard timeout"); ?></td>
- <td width="78%" class="vtable">
- <input name="timeout" type="text" class="formfld unknown" id="timeout" size="6" value="<?=htmlspecialchars($pconfig['timeout']);?>" />
- <?=gettext("minutes"); ?><br />
- <?=gettext("Clients will be disconnected after this amount of time, regardless of activity. They may log in again immediately, though. Leave this field blank for no hard timeout (not recommended unless an idle timeout is set)."); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Pass-through credits allowed per MAC address"); ?></td>
- <td width="78%" class="vtable">
- <input name="freelogins_count" type="text" class="formfld unknown" id="freelogins_count" size="6" value="<?=htmlspecialchars($pconfig['freelogins_count']);?>" />
- <?=gettext("per client MAC address (0 or blank = none)"); ?><br />
- <?=gettext("This setting allows passing through the captive portal without authentication a limited number of times per MAC address. Once used up, the client can only log in with valid credentials until the waiting period specified below has expired. Recommended to set a hard timeout and/or idle timeout when using this for it to be effective."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Waiting period to restore pass-through credits"); ?></td>
- <td width="78%" class="vtable">
- <input name="freelogins_resettimeout" type="text" class="formfld unknown" id="freelogins_resettimeout" size="6" value="<?=htmlspecialchars($pconfig['freelogins_resettimeout']);?>" />
- <?=gettext("hours"); ?><br />
- <?=gettext("Clients will have their available pass-through credits restored to the original count after this amount of time since using the first one. This must be above 0 hours if pass-through credits are enabled."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Reset waiting period on attempted access"); ?></td>
- <td width="78%" class="vtable">
- <input name="freelogins_updatetimeouts" type="checkbox" class="formfld" id="freelogins_updatetimeouts" value="yes" <?php if ($pconfig['freelogins_updatetimeouts']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable waiting period reset on attempted access"); ?></strong><br />
- <?=gettext("If enabled, the waiting period is reset to the original duration if access is attempted when all pass-through credits have already been exhausted."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Logout popup window"); ?></td>
- <td width="78%" class="vtable">
- <input name="logoutwin_enable" type="checkbox" class="formfld" id="logoutwin_enable" value="yes" <?php if ($pconfig['logoutwin_enable']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable logout popup window"); ?></strong><br />
- <?=gettext("If enabled, a popup window will appear when clients are allowed through the captive portal. This allows clients to explicitly disconnect themselves before the idle or hard timeout occurs."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Pre-authentication redirect URL"); ?> </td>
- <td class="vtable">
- <input name="preauthurl" type="text" class="formfld url" id="preauthurl" size="60" value="<?=htmlspecialchars($pconfig['preauthurl']);?>" /><br />
- <?php printf(gettext("Use this field to set \$PORTAL_REDIRURL\$ variable which can be accessed using your custom captive portal index.php page or error pages."));?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("After authentication Redirection URL"); ?></td>
- <td class="vtable">
- <input name="redirurl" type="text" class="formfld url" id="redirurl" size="60" value="<?=htmlspecialchars($pconfig['redirurl']);?>" />
- <br />
- <?=gettext("If you provide a URL here, clients will be redirected to that URL instead of the one they initially tried to access after they've authenticated."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Blocked MAC address redirect URL"); ?> </td>
- <td class="vtable">
- <input name="blockedmacsurl" type="text" class="formfld url" id="blockedmacsurl" size="60" value="<?=htmlspecialchars($pconfig['blockedmacsurl']);?>" /><br />
- <?php printf(gettext("If you provide a URL here, MAC addresses set to be blocked will be redirect to that URL when attempt to access anything."));?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Concurrent user logins"); ?></td>
- <td class="vtable">
- <input name="noconcurrentlogins" type="checkbox" class="formfld" id="noconcurrentlogins" value="yes" <?php if ($pconfig['noconcurrentlogins']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable concurrent logins"); ?></strong><br />
- <?=gettext("If this option is set, only the most recent login per username will be active. Subsequent logins will cause machines previously logged in with the same username to be disconnected."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("MAC filtering"); ?> </td>
- <td class="vtable">
- <input name="nomacfilter" type="checkbox" class="formfld" id="nomacfilter" value="yes" <?php if ($pconfig['nomacfilter']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable MAC filtering"); ?></strong><br />
- <?=gettext("If this option is set, no attempts will be made to ensure that the MAC address of clients stays the same while they're logged in." .
- "This is required when the MAC address of the client cannot be determined (usually because there are routers between"); ?> <?php echo $g['product_name'] ?> <?=gettext("and the clients)."); ?>
- <?=gettext("If this is enabled, RADIUS MAC authentication cannot be used."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Pass-through MAC Auto Entry"); ?></td>
- <td class="vtable">
- <input name="passthrumacadd" type="checkbox" class="formfld" id="passthrumacadd" value="yes" <?php if ($pconfig['passthrumacadd']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable Pass-through MAC automatic additions"); ?></strong><br />
- <?=gettext("If this option is set, a MAC passthrough entry is automatically added after the user has successfully authenticated. Users of that MAC address will never have to authenticate again."); ?>
- <?=gettext("To remove the passthrough MAC entry you either have to log in and remove it manually from the"); ?> <a href="services_captiveportal_mac.php"><?=gettext("MAC tab"); ?></a> <?=gettext("or send a POST from another system to remove it."); ?>
- <?=gettext("If this is enabled, RADIUS MAC authentication cannot be used. Also, the logout window will not be shown."); ?>
- <br /><br />
- <input name="passthrumacaddusername" type="checkbox" class="formfld" id="passthrumacaddusername" value="yes" <?php if ($pconfig['passthrumacaddusername']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable Pass-through MAC automatic addition with username"); ?></strong><br />
- <?=gettext("If this option is set, with the automatically MAC passthrough entry created the username, used during authentication, will be saved."); ?>
- <?=gettext("To remove the passthrough MAC entry you either have to log in and remove it manually from the"); ?> <a href="services_captiveportal_mac.php"><?=gettext("MAC tab"); ?></a> <?=gettext("or send a POST from another system to remove it."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Per-user bandwidth restriction"); ?></td>
- <td class="vtable">
- <input name="peruserbw" type="checkbox" class="formfld" id="peruserbw" value="yes" <?php if ($pconfig['peruserbw']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable per-user bandwidth restriction"); ?></strong><br /><br />
- <table cellpadding="0" cellspacing="0" summary="bandwidth">
- <tr>
- <td><?=gettext("Default download"); ?></td>
- <td>
- <input type="text" class="formfld unknown" name="bwdefaultdn" id="bwdefaultdn" size="10" value="<?=htmlspecialchars($pconfig['bwdefaultdn']);?>" /> <?=gettext("Kbit/s"); ?>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Default upload"); ?></td>
- <td>
- <input type="text" class="formfld unknown" name="bwdefaultup" id="bwdefaultup" size="10" value="<?=htmlspecialchars($pconfig['bwdefaultup']);?>" /> <?=gettext("Kbit/s"); ?>
- </td>
- </tr>
- </table>
- <br />
- <?=gettext("If this option is set, the captive portal will restrict each user who logs in to the specified default bandwidth. RADIUS can override the default settings. Leave empty or set to 0 for no limit."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Authentication"); ?></td>
- <td width="78%" class="vtable">
- <table cellpadding="0" cellspacing="0" summary="authentication">
- <tr>
- <td colspan="2">
- <input name="auth_method" type="radio" id="auth_method" value="none" onclick="enable_change(false)" <?php if ($pconfig['auth_method'] != "local" && $pconfig['auth_method'] != "radius") echo "checked=\"checked\""; ?> />
- <?=gettext("No Authentication"); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <input name="auth_method" type="radio" id="auth_method" value="local" onclick="enable_change(false)" <?php if ($pconfig['auth_method'] == "local") echo "checked=\"checked\""; ?> />
- <?=gettext("Local"); ?> <a href="system_usermanager.php"><?=gettext("User Manager"); ?></a> / <?=gettext("Vouchers"); ?>
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td>
- <input name="localauth_priv" type="checkbox" id="localauth_priv" value="yes" onclick="enable_change(false)" <?php if ($pconfig['localauth_priv'] == "yes") echo "checked=\"checked\""; ?> />
- <?=gettext("Allow only users/groups with 'Captive portal login' privilege set"); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <input name="auth_method" type="radio" id="auth_method" value="radius" onclick="enable_change(false)" <?php if ($pconfig['auth_method'] == "radius") echo "checked=\"checked\""; ?> />
- <?=gettext("RADIUS Authentication"); ?>
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS Protocol"); ?></td>
- <td width="78%" class="vtable">
- <table cellpadding="0" cellspacing="0" summary="radius">
- <tr>
- <td colspan="2">
- <input name="radius_protocol" type="radio" id="radius_protocol" value="PAP" onclick="enable_change(false)" <?php if ($pconfig['auth_method'] == "radius" && $pconfig['radius_protocol'] != "CHAP_MD5" && $pconfig['radius_protocol'] != "MSCHAPv1" && $pconfig['radius_protocol'] != "MSCHAPv2") echo "checked=\"checked\""; ?> />
- <?=gettext("PAP"); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <input name="radius_protocol" type="radio" id="radius_protocol" value="CHAP_MD5" onclick="enable_change(false)" <?php if ($pconfig['auth_method'] == "radius" && $pconfig['radius_protocol'] == "CHAP_MD5") echo "checked=\"checked\""; ?> />
- <?=gettext("CHAP_MD5"); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <input name="radius_protocol" type="radio" id="radius_protocol" value="MSCHAPv1" onclick="enable_change(false)" <?php if ($pconfig['auth_method'] == "radius" && $pconfig['radius_protocol'] == "MSCHAPv1") echo "checked=\"checked\""; ?> />
- <?=gettext("MSCHAPv1"); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <input name="radius_protocol" type="radio" id="radius_protocol" value="MSCHAPv2" onclick="enable_change(false)" <?php if ($pconfig['auth_method'] == "radius" && $pconfig['radius_protocol'] == "MSCHAPv2") echo "checked=\"checked\""; ?> />
- <?=gettext("MSCHAPv2"); ?>
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- </tr>
- </table>
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="primary athentication">
- <tr>
- <td colspan="2" valign="top" class="listtopic">Primary Authentication Source</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="optsect_t2"><?=gettext("Primary RADIUS server"); ?></td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("IP address"); ?></td>
- <td class="vtable">
- <input name="radiusip" type="text" class="formfld unknown" id="radiusip" size="20" value="<?=htmlspecialchars($pconfig['radiusip']);?>" /><br />
- <?=gettext("Enter the IP address of the RADIUS server which users of the captive portal have to authenticate against."); ?>
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("Port"); ?></td>
- <td class="vtable">
- <input name="radiusport" type="text" class="formfld unknown" id="radiusport" size="5" value="<?=htmlspecialchars($pconfig['radiusport']);?>" /><br />
- <?=gettext("Leave this field blank to use the default port (1812)."); ?>
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("Shared secret"); ?>&nbsp;&nbsp;</td>
- <td class="vtable">
- <input name="radiuskey" type="text" class="formfld unknown" id="radiuskey" size="16" value="<?=htmlspecialchars($pconfig['radiuskey']);?>" /><br />
- <?=gettext("Leave this field blank to not use a RADIUS shared secret (not recommended)."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="optsect_t2"><?=gettext("Secondary RADIUS server"); ?></td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("IP address"); ?></td>
- <td class="vtable">
- <input name="radiusip2" type="text" class="formfld unknown" id="radiusip2" size="20" value="<?=htmlspecialchars($pconfig['radiusip2']);?>" /><br />
- <?=gettext("If you have a second RADIUS server, you can activate it by entering its IP address here."); ?>
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("Port"); ?></td>
- <td class="vtable">
- <input name="radiusport2" type="text" class="formfld unknown" id="radiusport2" size="5" value="<?=htmlspecialchars($pconfig['radiusport2']);?>" />
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("Shared secret"); ?>&nbsp;&nbsp;</td>
- <td class="vtable">
- <input name="radiuskey2" type="text" class="formfld unknown" id="radiuskey2" size="16" value="<?=htmlspecialchars($pconfig['radiuskey2']);?>" />
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic">Secondary Authentication Source</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="optsect_t2"><?=gettext("Primary RADIUS server"); ?></td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("IP address"); ?></td>
- <td class="vtable">
- <input name="radiusip3" type="text" class="formfld unknown" id="radiusip3" size="20" value="<?=htmlspecialchars($pconfig['radiusip3']);?>" /><br />
- <?=gettext("If you have a third RADIUS server, you can activate it by entering its IP address here."); ?>
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("Port"); ?></td>
- <td class="vtable">
- <input name="radiusport3" type="text" class="formfld unknown" id="radiusport3" size="5" value="<?=htmlspecialchars($pconfig['radiusport3']);?>" />
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("Shared secret"); ?>&nbsp;&nbsp;</td>
- <td class="vtable">
- <input name="radiuskey3" type="text" class="formfld unknown" id="radiuskey3" size="16" value="<?=htmlspecialchars($pconfig['radiuskey3']);?>" />
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="optsect_t2"><?=gettext("Secondary RADIUS server"); ?></td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("IP address"); ?></td>
- <td class="vtable">
- <input name="radiusip4" type="text" class="formfld unknown" id="radiusip4" size="20" value="<?=htmlspecialchars($pconfig['radiusip4']);?>" /><br />
- <?=gettext("If you have a fourth RADIUS server, you can activate it by entering its IP address here."); ?>
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("Port"); ?></td>
- <td class="vtable">
- <input name="radiusport4" type="text" class="formfld unknown" id="radiusport4" size="5" value="<?=htmlspecialchars($pconfig['radiusport4']);?>" />
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("Shared secret"); ?>&nbsp;&nbsp;</td>
- <td class="vtable">
- <input name="radiuskey4" type="text" class="formfld unknown" id="radiuskey4" size="16" value="<?=htmlspecialchars($pconfig['radiuskey4']);?>" />
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Accounting"); ?></td>
- </tr>
- <tr>
- <td class="vncell">&nbsp;</td>
- <td class="vtable">
- <input name="radacct_enable" type="checkbox" id="radacct_enable" value="yes" onclick="enable_change(false)" <?php if ($pconfig['radacct_enable']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("send RADIUS accounting packets"); ?></strong><br />
- <?=gettext("If this is enabled, RADIUS accounting packets will be sent to the primary RADIUS server."); ?>
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("Accounting port"); ?></td>
- <td class="vtable">
- <input name="radiusacctport" type="text" class="formfld unknown" id="radiusacctport" size="5" value="<?=htmlspecialchars($pconfig['radiusacctport']);?>" /><br />
- <?=gettext("Leave blank to use the default port (1813)."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("Accounting updates"); ?></td>
- <td class="vtable">
- <input name="reauthenticateacct" type="radio" value="" <?php if (!$pconfig['reauthenticateacct']) echo "checked=\"checked\""; ?> /> <?=gettext("no accounting updates"); ?><br />
- <input name="reauthenticateacct" type="radio" value="stopstart" <?php if ($pconfig['reauthenticateacct'] == "stopstart") echo "checked=\"checked\""; ?> /> <?=gettext("stop/start accounting"); ?><br />
- <input name="reauthenticateacct" type="radio" value="interimupdate" <?php if ($pconfig['reauthenticateacct'] == "interimupdate") echo "checked=\"checked\""; ?> /> <?=gettext("interim update"); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("RADIUS options"); ?></td>
- </tr>
- <tr>
- <td class="vncell"><?=gettext("Reauthentication"); ?></td>
- <td class="vtable">
- <input name="reauthenticate" type="checkbox" id="reauthenticate" value="yes" onclick="enable_change(false)" <?php if ($pconfig['reauthenticate']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Reauthenticate connected users every minute"); ?></strong><br />
- <?=gettext("If reauthentication is enabled, Access-Requests will be sent to the RADIUS server for each user that is " .
- "logged in every minute. If an Access-Reject is received for a user, that user is disconnected from the captive portal immediately."); ?>
- </td>
- </tr>
- <tr>
- <td class=""><?=gettext("RADIUS MAC authentication"); ?></td>
- <td class="">
- <input name="radmac_enable" type="checkbox" id="radmac_enable" value="yes" onclick="enable_change(false)" <?php if ($pconfig['radmac_enable']) echo "checked=\"checked\""; ?> /><strong><?=gettext("Enable RADIUS MAC authentication"); ?></strong><br />
- <?=gettext("If this option is enabled, the captive portal will try to authenticate users by sending their MAC address as the username and the password " .
- "entered below to the RADIUS server."); ?>
- </td>
- </tr>
- <tr>
- <td class="vncell"><?=gettext("MAC authentication secret"); ?></td>
- <td class="vtable">
- <input name="radmac_secret" type="text" class="formfld unknown" id="radmac_secret" size="16" value="<?=htmlspecialchars($pconfig['radmac_secret']);?>" />
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("RADIUS NAS IP attribute"); ?></td>
- <td class="vtable">
- <select name="radiussrcip_attribute" id="radiussrcip_attribute">
- <?php
- $iflist = get_configured_interface_with_descr();
- foreach ($iflist as $ifdesc => $ifdescr) {
- $ipaddr = get_interface_ip($ifdesc);
- if (is_ipaddr($ipaddr)) {
- $selected = "";
- if ($ifdesc == $pconfig['radiussrcip_attribute']) {
- $selected= "selected=\"selected\"";
- }
- echo "<option value='{$ifdesc}' {$selected}>{$ifdescr} - {$ipaddr}</option>\n";
- }
- }
- if (is_array($config['virtualip']['vip'])) {
- foreach ($config['virtualip']['vip'] as $sn) {
- if ($sn['mode'] == "proxyarp" && $sn['type'] == "network") {
- $start = ip2long32(gen_subnet($sn['subnet'], $sn['subnet_bits']));
- $end = ip2long32(gen_subnet_max($sn['subnet'], $sn['subnet_bits']));
- $len = $end - $start;
-
- for ($i = 0; $i <= $len; $i++) {
- $snip = long2ip32($start+$i);
- echo "<option value='{$snip}' {$selected}>" . htmlspecialchars("{$sn['descr']} - {$snip}") . "></option>\n";
- }
- } else {
- echo "<option value='{$sn['subnet']}' {$selected}>" . htmlspecialchars("{$sn['descr']} - {$sn['subnet']}") . "></option>\n";
- }
- }
- }
- ?>
- </select><br />
- <?=gettext("Choose the IP to use for calling station attribute."); ?>
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("Session-Timeout"); ?></td>
- <td class="vtable">
- <input name="radiussession_timeout" type="checkbox" id="radiussession_timeout" value="yes" <?php if ($pconfig['radiussession_timeout']) echo "checked=\"checked\""; ?> /><strong><?=gettext("Use RADIUS Session-Timeout attributes"); ?></strong><br />
- <?=gettext("When this is enabled, clients will be disconnected after the amount of time retrieved from the RADIUS Session-Timeout attribute."); ?>
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("Type"); ?></td>
- <td class="vtable">
- <select name="radiusvendor" id="radiusvendor">
- <option value="default"><?php echo gettext("default"); ?></option>
- <?php
- $radiusvendors = array("cisco");
- foreach ($radiusvendors as $radiusvendor) {
- if ($pconfig['radiusvendor'] == $radiusvendor) {
- echo "<option selected=\"selected\" value=\"$radiusvendor\">$radiusvendor</option>\n";
- } else {
- echo "<option value=\"$radiusvendor\">$radiusvendor</option>\n";
- }
- }
- ?>
- </select><br />
- <?php printf(gettext("If RADIUS type is set to Cisco, in Access-Requests the value of Calling-Station-Id will be set to the client's IP address and " .
- "the Called-Station-Id to the client's MAC address. Default behavior is Calling-Station-Id = client's MAC address and Called-Station-Id = %s's WAN IP address."),
- $g['product_name']);?>
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("Accounting Style"); ?></td>
- <td class="vtable">
- <input name="reverseacct" type="checkbox" id="reverseacct" value="yes" <?php if ($pconfig['reverseacct']) echo "checked=\"checked\""; ?> /><strong><?=gettext("Invert Acct-Input-Octets and Acct-Output-Octets"); ?></strong><br />
- <?=gettext("When this is enabled, data counts for RADIUS accounting packets will be taken from the client perspective, not the NAS. Acct-Input-Octets will represent download, and Acct-Output-Octets will represent upload."); ?>
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("NAS Identifier"); ?></td>
- <td class="vtable">
- <input name="radiusnasid" type="text" maxlength="253" class="formfld unknown" id="radiusnasid" value="<?=htmlspecialchars($pconfig['radiusnasid']);?>" /><br />
- <?=gettext("Specify a NAS identifier to override the default value") . " (" . php_uname("n") . ")"; ?>
- </td>
- </tr>
- <tr>
- <td class="vncell" valign="top"><?=gettext("MAC address format"); ?></td>
- <td class="vtable">
- <select name="radmac_format" id="radmac_format">
- <option value="default"><?php echo gettext("default"); ?></option>
- <?php
- $macformats = array("singledash", "ietf", "cisco", "unformatted");
- foreach ($macformats as $macformat) {
- if ($pconfig['radmac_format'] == $macformat) {
- echo "<option selected=\"selected\" value=\"$macformat\">", gettext($macformat), "</option>\n";
- } else {
- echo "<option value=\"$macformat\">", gettext($macformat), "</option>\n";
- }
- }
- ?>
- </select><br />
- <?=gettext("This option changes the MAC address format used in the whole RADIUS system. Change this if you also"); ?>
- <?=gettext("need to change the username format for RADIUS MAC authentication."); ?><br />
- <?=gettext("default:"); ?> 00:11:22:33:44:55<br />
- <?=gettext("singledash:"); ?> 001122-334455<br />
- <?=gettext("ietf:"); ?> 00-11-22-33-44-55<br />
- <?=gettext("cisco:"); ?> 0011.2233.4455<br />
- <?=gettext("unformatted:"); ?> 001122334455
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("HTTPS login"); ?></td>
- <td class="vtable">
- <input name="httpslogin_enable" type="checkbox" class="formfld" id="httpslogin_enable" value="yes" onclick="enable_change(false)" <?php if ($pconfig['httpslogin_enable']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable HTTPS login"); ?></strong><br />
- <?=gettext("If enabled, the username and password will be transmitted over an HTTPS connection to protect against eavesdroppers. A server name and certificate must also be specified below."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("HTTPS server name"); ?> </td>
- <td class="vtable">
- <input name="httpsname" type="text" class="formfld unknown" id="httpsname" size="30" value="<?=htmlspecialchars($pconfig['httpsname']);?>" /><br />
- <?php printf(gettext("This name will be used in the form action for the HTTPS POST and should match the Common Name (CN) in your certificate (otherwise, the client browser will most likely display a security warning). Make sure captive portal clients can resolve this name in DNS and verify on the client that the IP resolves to the correct interface IP on %s."), $g['product_name']);?>
- </td>
- </tr>
- <tr id="ssl_opts">
- <td width="22%" valign="top" class="vncell"><?=gettext("SSL Certificate"); ?></td>
- <td width="78%" class="vtable">
- <?php if (count($a_cert)): ?>
- <select name="certref" id="certref" class="formselect">
- <?php
- foreach ($a_cert as $cert):
- $selected = "";
- if ($pconfig['certref'] == $cert['refid']) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$cert['refid'];?>"<?=$selected;?>><?=htmlspecialchars($cert['descr']);?></option>
- <?php endforeach; ?>
- </select>
- <?php else: ?>
- <b><?=gettext("No Certificates defined."); ?></b> <br />Create one under <a href="system_certmanager.php">System &gt; Cert Manager</a>.
- <?php endif; ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Disable HTTPS forwards"); ?></td>
- <td class="vtable">
- <input name="nohttpsforwards" type="checkbox" class="formfld" id="nohttpsforwards" value="yes" <?php if ($pconfig['nohttpsforwards']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable HTTPS forwards"); ?></strong><br/>
- <?=gettext("If this option is set, attempts to connect to SSL/HTTPS (Port 443) sites will not be forwarded to the captive portal. This prevents certificate errors from being presented to the user even if HTTPS logins are enabled. Users must attempt a connecton to an HTTP (Port 80) site to get forwarded to the captive portal. If HTTPS logins are enabled, the user will be redirected to the HTTPS login page."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Portal page contents"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input type="file" name="htmlfile" class="formfld file" id="htmlfile" /><br />
- <?php
- list($host) = explode(":", $_SERVER['HTTP_HOST']);
- $zoneid = $pconfig['zoneid'] ? $pconfig['zoneid'] : 8000;
- if ($pconfig['httpslogin_enable']) {
- $port = $pconfig['listenporthttps'] ? $pconfig['listenporthttps'] : ($zoneid + 8001);
- $href = "https://{$host}:{$port}";
- } else {
- $port = $pconfig['listenporthttp'] ? $pconfig['listenporthttp'] : ($zoneid + 8000);
- $href = "http://{$host}:{$port}";
- }
- ?>
- <?php if ($pconfig['page']['htmltext']): ?>
- <a href="<?=$href?>" target="_blank"><?=gettext("View current page"); ?></a>
- <br />
- <a href="?zone=<?=$cpzone?>&amp;act=gethtmlhtml" target="_blank"><?=gettext("Download current page"); ?></a>
- <br />
- <a href="?zone=<?=$cpzone?>&amp;act=delhtmlhtml" onclick="return confirm('Do you really want to restore default page?')" target="_blank">
- <?=gettext("Restore default portal page"); ?>
- </a>
- <br />
- <br />
- <?php endif; ?>
- <?php
- printf(
- gettext('Upload an HTML/PHP file for the portal page here (leave blank to keep the current one). ' .
- 'Make sure to include a form (POST to %1$s) with a submit button (%2$s) and a hidden field with %3$s and %4$s. ' .
- 'Include the %5$s and %6$s and/or %7$s input fields if authentication is enabled, otherwise it will always fail.'),
- '&quot;$PORTAL_ACTION$&quot;',
- "name=&quot;accept&quot;",
- "name=&quot;redirurl&quot;",
- 'value=&quot;$PORTAL_REDIRURL$&quot;',
- "&quot;auth_user&quot;",
- "&quot;auth_pass&quot;",
- "&quot;auth_voucher&quot;");
- ?>
- <?=gettext("Example code for the form:"); ?><br />
- <br />
- <tt>&lt;form method=&quot;post&quot; action=&quot;$PORTAL_ACTION$&quot;&gt;<br />
- &nbsp;&nbsp;&nbsp;&lt;input name=&quot;auth_user&quot; type=&quot;text&quot;&gt;<br />
- &nbsp;&nbsp;&nbsp;&lt;input name=&quot;auth_pass&quot; type=&quot;password&quot;&gt;<br />
- &nbsp;&nbsp;&nbsp;&lt;input name=&quot;auth_voucher&quot; type=&quot;text&quot;&gt;<br />
- &nbsp;&nbsp;&nbsp;&lt;input name=&quot;redirurl&quot; type=&quot;hidden&quot; value=&quot;$PORTAL_REDIRURL$&quot;&gt;<br />
- &nbsp;&nbsp;&nbsp;&lt;input name=&quot;accept&quot; type=&quot;submit&quot; value=&quot;Continue&quot;&gt;<br />
- &lt;/form&gt;</tt>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Authentication"); ?><br />
- <?=gettext("error page"); ?><br />
- <?=gettext("contents"); ?>
- </td>
- <td class="vtable">
- <input name="errfile" type="file" class="formfld file" id="errfile" /><br />
- <?php if ($pconfig['page']['errtext']): ?>
- <a href="?zone=<?=$cpzone?>&amp;act=viewerrhtml" target="_blank"><?=gettext("View current page"); ?></a>
- <br />
- <a href="?zone=<?=$cpzone?>&amp;act=geterrhtml" target="_blank"><?=gettext("Download current page"); ?></a>
- <br />
- <a href="?zone=<?=$cpzone?>&amp;act=delerrhtml" onclick="return confirm('Do you really want to restore default page?')" target="_blank">
- <?=gettext("Restore default error page"); ?>
- </a>
- <br />
- <br />
- <?php endif; ?>
- <?=gettext("The contents of the HTML/PHP file that you upload here are displayed when an authentication error occurs. " .
- "You may include"); ?> &quot;$PORTAL_MESSAGE$&quot;, <?=gettext("which will be replaced by the error or reply messages from the RADIUS server, if any."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Logout"); ?><br />
- <?=gettext("page"); ?><br />
- <?=gettext("contents"); ?></td>
- <td class="vtable">
- <input name="logoutfile" type="file" class="formfld file" id="logoutfile" /><br />
- <?php if ($pconfig['page']['logouttext']): ?>
- <a href="?zone=<?=$cpzone?>&amp;act=viewlogouthtml" target="_blank"><?=gettext("View current page"); ?></a>
- <br />
- <a href="?zone=<?=$cpzone?>&amp;act=getlogouthtml" target="_blank"><?=gettext("Download current page"); ?></a>
- <br />
- <a href="?zone=<?=$cpzone?>&amp;act=dellogouthtml" onclick="return confirm('Do you really want to restore default page?')" target="_blank">
- <?=gettext("Restore default logout page"); ?>
- </a>
- <br />
- <br />
- <?php endif; ?>
- <?=gettext("The contents of the HTML/PHP file that you upload here are displayed on authentication success when the logout popup is enabled."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <?php echo "<input name='zone' id='zone' type='hidden' value='" . htmlspecialchars($cpzone, ENT_QUOTES | ENT_HTML401) . "' />"; ?>
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
- <a href="services_captiveportal_zones.php"><input name="Cancel" type="button" class="formbtn" value="<?=gettext("Cancel"); ?>" onclick="enable_change(true)" /></a>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <span class="vexpl">
- <span class="red">
- <strong>
- <?=gettext("Note:"); ?><br />
- </strong>
- </span>
- <?=gettext("Changing any settings on this page will disconnect all clients! Don't forget to enable the DHCP server on your captive portal interface! Make sure that the default/maximum DHCP lease time is higher than the timeout entered on this page. Also, the DNS Forwarder or Resolver needs to be enabled for DNS lookups by unauthenticated clients to work."); ?>
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
-enable_change(false);
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_captiveportal_filemanager.php b/usr/local/www/services_captiveportal_filemanager.php
deleted file mode 100644
index f672938..0000000
--- a/usr/local/www/services_captiveportal_filemanager.php
+++ /dev/null
@@ -1,267 +0,0 @@
-<?php
-/*
- services_captiveportal_filemanager.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2005-2006 Jonathan De Graeve (jonathan.de.graeve@imelda.be)
- and Paul Taylor (paultaylor@winn-dixie.com).
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-services-captiveportal-filemanager
-##|*NAME=Services: Captive portal: File Manager page
-##|*DESCR=Allow access to the 'Services: Captive portal: File Manager' page.
-##|*MATCH=services_captiveportal_filemanager.php*
-##|-PRIV
-
-function cpelementscmp($a, $b) {
- return strcasecmp($a['name'], $b['name']);
-}
-
-function cpelements_sort() {
- global $config, $cpzone;
-
- usort($config['captiveportal'][$cpzone]['element'], "cpelementscmp");
-}
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-if (empty($cpzone)) {
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-$pgtitle = array(gettext("Services"), gettext("Captive portal"), $a_cp[$cpzone]['zone']);
-$shortcut_section = "captiveportal";
-
-if (!is_array($a_cp[$cpzone]['element'])) {
- $a_cp[$cpzone]['element'] = array();
-}
-$a_element =& $a_cp[$cpzone]['element'];
-
-// Calculate total size of all files
-$total_size = 0;
-foreach ($a_element as $element) {
- $total_size += $element['size'];
-}
-
-if ($_POST) {
- unset($input_errors);
-
- if (is_uploaded_file($_FILES['new']['tmp_name'])) {
-
- if (!stristr($_FILES['new']['name'], "captiveportal-")) {
- $name = "captiveportal-" . $_FILES['new']['name'];
- } else {
- $name = $_FILES['new']['name'];
- }
- $size = filesize($_FILES['new']['tmp_name']);
-
- // is there already a file with that name?
- foreach ($a_element as $element) {
- if ($element['name'] == $name) {
- $input_errors[] = sprintf(gettext("A file with the name '%s' already exists."), $name);
- break;
- }
- }
-
- // check total file size
- if (($total_size + $size) > $g['captiveportal_element_sizelimit']) {
- $input_errors[] = gettext("The total size of all files uploaded may not exceed ") .
- format_bytes($g['captiveportal_element_sizelimit']) . ".";
- }
-
- if (!$input_errors) {
- $element = array();
- $element['name'] = $name;
- $element['size'] = $size;
- $element['content'] = base64_encode(file_get_contents($_FILES['new']['tmp_name']));
-
- $a_element[] = $element;
- cpelements_sort();
-
- write_config();
- captiveportal_write_elements();
- header("Location: services_captiveportal_filemanager.php?zone={$cpzone}");
- exit;
- }
- }
-} else if (($_GET['act'] == "del") && !empty($cpzone) && $a_element[$_GET['id']]) {
- conf_mount_rw();
- @unlink("{$g['captiveportal_element_path']}/" . $a_element[$_GET['id']]['name']);
- @unlink("{$g['captiveportal_path']}/" . $a_element[$_GET['id']]['name']);
- conf_mount_ro();
- unset($a_element[$_GET['id']]);
- write_config();
- header("Location: services_captiveportal_filemanager.php?zone={$cpzone}");
- exit;
-}
-
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_captiveportal_filemanager.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
-<input type="hidden" name="zone" id="zone" value="<?=htmlspecialchars($cpzone);?>" />
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="captiveportal file manager">
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}");
- $tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}");
- $tab_array[] = array(gettext("File Manager"), true, "services_captiveportal_filemanager.php?zone={$cpzone}");
- display_top_tabs($tab_array, true);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabcont">
- <table width="80%" border="0" cellpadding="0" cellspacing="0" summary="main">
- <tr>
- <td width="70%" class="listhdrr"><?=gettext("Name"); ?></td>
- <td width="20%" class="listhdr"><?=gettext("Size"); ?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td width="17" height="17"></td>
- <td>
- <a href="services_captiveportal_filemanager.php?zone=<?=$cpzone;?>&amp;act=add"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add file"); ?>" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- if (is_array($a_cp[$cpzone]['element'])):
- $i = 0;
- foreach ($a_cp[$cpzone]['element'] as $element):
-?>
- <tr>
- <td class="listlr"><?=htmlspecialchars($element['name']);?></td>
- <td class="listr" align="right"><?=format_bytes($element['size']);?></td>
- <td valign="middle" class="list nowrap">
- <a href="services_captiveportal_filemanager.php?zone=<?=$cpzone;?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this file?"); ?>')"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete file"); ?>" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
- endif;
-?>
-
-<?php
- if ($total_size > 0):
-?>
- <tr>
- <td class="listlr" style="background-color: #eee"><strong><?=gettext("TOTAL"); ?></strong></td>
- <td class="listr" style="background-color: #eee" align="right"><strong><?=format_bytes($total_size);?></strong></td>
- <td valign="middle" class="list nowrap"></td>
- </tr>
-<?php
- endif;
-
- if ($_GET['act'] == 'add'):
-?>
- <tr>
- <td class="listlr" colspan="2">
- <input type="file" name="new" class="formfld file" size="40" id="new" />
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Upload"); ?>" />
- </td>
- <td valign="middle" class="list nowrap">
- <a href="services_captiveportal_filemanager.php?zone=<?=$cpzone;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("cancel"); ?>" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
-<?php
- else:
-?>
- <tr>
- <td class="list" colspan="2"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17" height="17"></td>
- <td>
- <a href="services_captiveportal_filemanager.php?zone=<?=$cpzone;?>&amp;act=add"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add file"); ?>" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- endif;
-?>
- </table>
- <span class="vexpl">
- <span class="red">
- <strong>
- <?=gettext("Note:"); ?><br />
- </strong>
- </span>
- <?=gettext("Any files that you upload here with the filename prefix of captiveportal- will " .
- "be made available in the root directory of the captive portal HTTP(S) server. " .
- "You may reference them directly from your portal page HTML code using relative paths. " .
- "Example: you've uploaded an image with the name 'captiveportal-test.jpg' using the " .
- "file manager. Then you can include it in your portal page like this:"); ?>
- <br /><br />
- <tt>&lt;img src=&quot;captiveportal-test.jpg&quot; width=... height=...&gt;</tt>
- <br /><br />
- <?=gettext("In addition, you can also upload .php files for execution. You can pass the filename " .
- "to your custom page from the initial page by using text similar to:"); ?>
- <br /><br />
- <tt>&lt;a href="/captiveportal-aup.php?zone=$PORTAL_ZONE$&amp;redirurl=$PORTAL_REDIRURL$"&gt;<?=gettext("Acceptable usage policy"); ?>&lt;/a&gt;</tt>
- <br /><br />
- <?php printf(gettext("The total size limit for all files is %s."), format_bytes($g['captiveportal_element_sizelimit']));?>
- </span>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_captiveportal_hostname.php b/usr/local/www/services_captiveportal_hostname.php
deleted file mode 100644
index 939fb23..0000000
--- a/usr/local/www/services_captiveportal_hostname.php
+++ /dev/null
@@ -1,232 +0,0 @@
-<?php
-/*
- services_captiveportal_hostname.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2011 Scott Ullrich <sullrich@gmail.com>
- All rights reserved.
-
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ipfw
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-services-captiveportal-allowedhostnames
-##|*NAME=Services: Captive portal: Allowed Hostnames page
-##|*DESCR=Allow access to the 'Services: Captive portal: Allowed Hostnames' page.
-##|*MATCH=services_captiveportal_hostname.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-if (isset($cpzone) && !empty($cpzone) && isset($a_cp[$cpzone]['zoneid'])) {
- $cpzoneid = $a_cp[$cpzone]['zoneid'];
-}
-
-$pgtitle = array(gettext("Services"), gettext("Captive portal"), $a_cp[$cpzone]['zone']);
-$shortcut_section = "captiveportal";
-
-if ($_GET['act'] == "del" && !empty($cpzone) && isset($cpzoneid)) {
- $a_allowedhostnames =& $a_cp[$cpzone]['allowedhostname'];
- if ($a_allowedhostnames[$_GET['id']]) {
- $ipent = $a_allowedhostnames[$_GET['id']];
-
- if (isset($a_cp[$cpzone]['enable'])) {
- if (is_ipaddr($ipent['hostname'])) {
- $ip = $ipent['hostname'];
- } else {
- $ip = gethostbyname($ipent['hostname']);
- }
- $sn = (is_ipaddrv6($ip)) ? 128 : 32;
- if (is_ipaddr($ip)) {
- $ipfw = pfSense_ipfw_getTablestats($cpzoneid, IP_FW_TABLE_XLISTENTRY, 3, $ip);
- if (is_array($ipfw)) {
- captiveportal_free_dn_ruleno($ipfw['dnpipe']);
- pfSense_pipe_action("pipe delete {$ipfw['dnpipe']}");
- pfSense_pipe_action("pipe delete " . ($ipfw['dnpipe']+1));
- }
- pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XDEL, 3, $ip, $sn);
- pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XDEL, 4, $ip, $sn);
- }
- }
-
- unset($a_allowedhostnames[$_GET['id']]);
- write_config();
- captiveportal_allowedhostname_configure();
- header("Location: services_captiveportal_hostname.php?zone={$cpzone}");
- exit;
- }
-}
-
-
-include("head.inc");
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_captiveportal_hostname.php" method="post">
-<input type="hidden" name="zone" id="zone" value="<?=htmlspecialchars($cpzone);?>" />
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="captiveportal hostname">
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}");
- $tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Allowed IP Addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Allowed Hostnames"), true, "services_captiveportal_hostname.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}");
- $tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}");
- display_top_tabs($tab_array, true);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabcont">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="main">
- <tr>
- <td width="60%" class="listhdrr"><?=gettext("Hostname"); ?></td>
- <td width="40%" class="listhdr"><?=gettext("Description"); ?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17" height="17"></td>
- <td>
- <a href="services_captiveportal_hostname_edit.php?zone=<?=$cpzone;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add address"); ?>" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- if (is_array($a_cp[$cpzone]['allowedhostname'])):
- $i = 0;
- foreach ($a_cp[$cpzone]['allowedhostname'] as $ip):
-?>
- <tr ondblclick="document.location='services_captiveportal_hostname_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>'">
- <td class="listlr">
-<?php
- if ($ip['dir'] == "to") {
- echo "any <img src=\"/themes/{$g['theme']}/images/icons/icon_in.gif\" width=\"11\" height=\"11\" align=\"middle\" alt=\"in\" /> ";
- }
- if ($ip['dir'] == "both") {
- echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_pass.gif\" width=\"11\" height=\"11\" align=\"middle\" alt=\"pass\" /> ";
- }
- echo strtolower($ip['hostname']);
- if ($ip['dir'] == "from") {
- echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_in.gif\" width=\"11\" height=\"11\" align=\"middle\" alt=\"in\" /> any";
- }
-?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($ip['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <a href="services_captiveportal_hostname_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit address"); ?>" width="17" height="17" border="0" alt="add" /></a>
- &nbsp;<a href="services_captiveportal_hostname.php?zone=<?=$cpzone;?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this address?"); ?>')"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete address"); ?>" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
- endif;
-?>
- <tr>
- <td class="list" colspan="2">&nbsp;</td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17" height="17"></td>
- <td>
- <a href="services_captiveportal_hostname_edit.php?zone=<?=$cpzone;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add address"); ?>" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list">
- <p class="vexpl">
- <span class="red">
- <strong>
- <?=gettext("Note:"); ?><br />
- </strong>
- </span>
- <?=gettext("Adding allowed Hostnames will allow a DNS hostname access to/from access through the captive portal without being taken to the portal page. This can be used for a web server serving images for the portal page or a DNS server on another network, for example. By specifying <em>from</em> addresses, it may be used to always allow pass-through access from a client behind the captive portal."); ?>
- </p>
- <table border="0" cellspacing="0" cellpadding="0" summary="icons">
- <tr>
- <td>
- <span class="vexpl"><?=gettext("any"); ?> <img src="/themes/<?=$g['theme'];?>/images/icons/icon_in.gif" width="11" height="11" align="middle" alt="in" /> x.x.x.x </span>
- </td>
- <td>
- <span class="vexpl"><?=gettext("All connections"); ?> <strong><?=gettext("to"); ?></strong> <?=gettext("the Hostname are allowed"); ?></span>
- </td>
- </tr>
- <tr>
- <td colspan="5" height="4"></td>
- </tr>
- <tr>
- <td>x.x.x.x <span class="vexpl"><img src="/themes/<?=$g['theme'];?>/images/icons/icon_in.gif" width="11" height="11" align="middle" alt="in" /></span> <?=gettext("any"); ?>&nbsp;&nbsp;&nbsp; </td>
- <td><span class="vexpl"><?=gettext("All connections"); ?> <strong><?=gettext("from"); ?></strong> <?=gettext("the Hostname are allowed"); ?> </span></td>
- </tr>
- <tr>
- <td><span class="vexpl"><img src="/themes/<?=$g['theme'];?>/images/icons/icon_pass.gif" width="11" height="11" align="right" alt="pass" /></span>&nbsp;&nbsp;&nbsp;&nbsp; </td>
- <td><span class="vexpl"> All connections <strong>to</strong> and <strong>from</strong> the Hostname are allowed </span></td>
- </tr>
- </table>
- </td>
- <td class="list">&nbsp;</td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_captiveportal_hostname_edit.php b/usr/local/www/services_captiveportal_hostname_edit.php
deleted file mode 100644
index 674e220..0000000
--- a/usr/local/www/services_captiveportal_hostname_edit.php
+++ /dev/null
@@ -1,244 +0,0 @@
-<?php
-/*
- services_captiveportal_hostname_edit.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2011 Scott Ullrich <sullrich@gmail.com>
- All rights reserved.
-
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ipfw
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-services-captiveportal-editallowedhostnames
-##|*NAME=Services: Captive portal: Edit Allowed Hostnames page
-##|*DESCR=Allow access to the 'Services: Captive portal: Edit Allowed Hostnames' page.
-##|*MATCH=services_captiveportal_hostname_edit.php*
-##|-PRIV
-
-function allowedhostnamescmp($a, $b) {
- return strcmp($a['hostname'], $b['hostname']);
-}
-
-function allowedhostnames_sort() {
- global $g, $config, $cpzone;
- usort($config['captiveportal'][$cpzone]['allowedhostname'], "allowedhostnamescmp");
-}
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-
-global $cpzone, $cpzoneid;
-
-$pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Edit allowed Hostname"));
-$shortcut_section = "captiveportal";
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-$cpzoneid = $config['captiveportal'][$cpzone]['zoneid'];
-
-if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (!is_array($a_cp[$cpzone]['allowedhostname'])) {
- $a_cp[$cpzone]['allowedhostname'] = array();
-}
-$a_allowedhostnames = &$a_cp[$cpzone]['allowedhostname'];
-
-if (isset($id) && $a_allowedhostnames[$id]) {
- $pconfig['zone'] = $a_allowedhostnames[$id]['zone'];
- $pconfig['hostname'] = $a_allowedhostnames[$id]['hostname'];
- $pconfig['sn'] = $a_allowedhostnames[$id]['sn'];
- $pconfig['dir'] = $a_allowedhostnames[$id]['dir'];
- $pconfig['bw_up'] = $a_allowedhostnames[$id]['bw_up'];
- $pconfig['bw_down'] = $a_allowedhostnames[$id]['bw_down'];
- $pconfig['descr'] = $a_allowedhostnames[$id]['descr'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "hostname");
- $reqdfieldsn = array(gettext("Allowed Hostname"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (($_POST['hostname'] && !is_hostname($_POST['hostname']))) {
- $input_errors[] = sprintf(gettext("A valid Hostname must be specified. [%s]"), $_POST['hostname']);
- }
-
- if ($_POST['bw_up'] && !is_numeric($_POST['bw_up'])) {
- $input_errors[] = gettext("Upload speed needs to be an integer");
- }
- if ($_POST['bw_down'] && !is_numeric($_POST['bw_down'])) {
- $input_errors[] = gettext("Download speed needs to be an integer");
- }
-
- foreach ($a_allowedhostnames as $ipent) {
- if (isset($id) && ($a_allowedhostnames[$id]) && ($a_allowedhostnames[$id] === $ipent)) {
- continue;
- }
-
- if ($ipent['hostname'] == $_POST['hostname']) {
- $input_errors[] = sprintf("[%s] %s.", $_POST['hostname'], gettext("already allowed")) ;
- break ;
- }
- }
-
- if (!$input_errors) {
- $ip = array();
- $ip['hostname'] = $_POST['hostname'];
- $ip['sn'] = $_POST['sn'];
- $ip['dir'] = $_POST['dir'];
- $ip['descr'] = $_POST['descr'];
- if ($_POST['bw_up']) {
- $ip['bw_up'] = $_POST['bw_up'];
- }
- if ($_POST['bw_down']) {
- $ip['bw_down'] = $_POST['bw_down'];
- }
- if (isset($id) && $a_allowedhostnames[$id]) {
- $a_allowedhostnames[$id] = $ip;
- } else {
- $a_allowedhostnames[] = $ip;
- }
-
- allowedhostnames_sort();
-
- write_config();
-
- $rules = captiveportal_allowedhostname_configure();
- @file_put_contents("{$g['tmp_path']}/hostname_rules", $rules);
- mwexec("/sbin/ipfw -x {$cpzoneid} {$g['tmp_path']}/hostname_rules", true);
- unset($rules);
-
- header("Location: services_captiveportal_hostname.php?zone={$cpzone}");
- exit;
- }
-}
-
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="services_captiveportal_hostname_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="captiveportal hostname edit">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Direction"); ?></td>
- <td width="78%" class="vtable">
- <select name="dir" class="formfld">
- <?php
- $dirs = array(gettext("Both"), gettext("From"), gettext("To")) ;
- foreach ($dirs as $dir):
- ?>
- <option value="<?=strtolower($dir);?>" <?php if (strtolower($dir) == strtolower($pconfig['dir'])) echo "selected=\"selected\"";?> >
- <?=htmlspecialchars($dir);?>
- </option>
- <?php
- endforeach;
- ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Use"); ?> <em><?=gettext("From"); ?></em> <?=gettext("to always allow an Hostname through the captive portal (without authentication)"); ?>.
- <?=gettext("Use"); ?> <em><?=gettext("To"); ?></em> <?=gettext("to allow access from all clients (even non-authenticated ones) behind the portal to this Hostname"); ?>.
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="hostname" type="text" class="formfld unknown" id="hostname" size="17" value="<?=htmlspecialchars($pconfig['hostname']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Hostname");?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth up"); ?></td>
- <td width="78%" class="vtable">
- <input name="bw_up" type="text" class="formfld unknown" id="bw_up" size="10" value="<?=htmlspecialchars($pconfig['bw_up']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Enter a upload limit to be enforced on this Hostname in Kbit/s"); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth down"); ?></td>
- <td width="78%" class="vtable">
- <input name="bw_down" type="text" class="formfld unknown" id="bw_down" size="10" value="<?=htmlspecialchars($pconfig['bw_down']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Enter a download limit to be enforced on this Hostname in Kbit/s"); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
- <?php if (isset($id) && $a_allowedhostnames[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_captiveportal_ip.php b/usr/local/www/services_captiveportal_ip.php
deleted file mode 100644
index c475aeb..0000000
--- a/usr/local/www/services_captiveportal_ip.php
+++ /dev/null
@@ -1,208 +0,0 @@
-<?php
-/*
- services_captiveportal_ip.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ipfw
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-services-captiveportal-allowedips
-##|*NAME=Services: Captive portal: Allowed IPs page
-##|*DESCR=Allow access to the 'Services: Captive portal: Allowed IPs' page.
-##|*MATCH=services_captiveportal_ip.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-if (isset($cpzone) && !empty($cpzone) && isset($a_cp[$cpzone]['zoneid'])) {
- $cpzoneid = $a_cp[$cpzone]['zoneid'];
-}
-
-$pgtitle = array(gettext("Services"), gettext("Captive portal"), $a_cp[$cpzone]['zone']);
-$shortcut_section = "captiveportal";
-
-if ($_GET['act'] == "del" && !empty($cpzone) && isset($cpzoneid)) {
- $a_allowedips =& $config['captiveportal'][$cpzone]['allowedip'];
- if ($a_allowedips[$_GET['id']]) {
- $ipent = $a_allowedips[$_GET['id']];
-
- if (isset($config['captiveportal'][$cpzone]['enable'])) {
- $mask = (!empty($ipent['sn'])) ? $ipent['sn'] : 32;
-
- $ipfw = pfSense_ipfw_getTablestats($cpzoneid, IP_FW_TABLE_XLISTENTRY, 3, $ipent['ip']);
- pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XDEL, 3, $ipent['ip'], $mask);
- pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XDEL, 4, $ipent['ip'], $mask);
-
- if (is_array($ipfw)) {
- captiveportal_free_dn_ruleno($ipfw['dnpipe']);
- pfSense_pipe_action("pipe delete {$ipfw['dnpipe']}");
- pfSense_pipe_action("pipe delete " . ($ipfw['dnpipe']+1));
- }
- }
-
- unset($a_allowedips[$_GET['id']]);
- write_config();
- header("Location: services_captiveportal_ip.php?zone={$cpzone}");
- exit;
- }
-}
-
-
-include("head.inc");
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_captiveportal_ip.php" method="post">
- <input type="hidden" name="zone" id="zone" value="<?=htmlspecialchars($cpzone);?>" />
- <?php if ($savemsg) print_info_box($savemsg); ?>
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="captiveportal ip addresses">
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}");
- $tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Allowed IP addresses"), true, "services_captiveportal_ip.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}");
- $tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}");
- display_top_tabs($tab_array, true);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabcont">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="main">
- <tr>
- <td width="40%" class="listhdrr"><?=gettext("IP address"); ?></td>
- <td width="50%" class="listhdr"><?=gettext("Description"); ?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17" height="17"></td>
- <td>
- <a href="services_captiveportal_ip_edit.php?zone=<?=$cpzone;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add address"); ?>" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- if (is_array($a_cp[$cpzone]['allowedip'])):
- $i = 0;
- foreach ($a_cp[$cpzone]['allowedip'] as $ip):
-?>
- <tr ondblclick="document.location='services_captiveportal_ip_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>'">
- <td class="listlr">
-<?php
- if ($ip['dir'] == "to") {
- echo "any <img src=\"/themes/{$g['theme']}/images/icons/icon_in.gif\" width=\"11\" height=\"11\" align=\"middle\" alt=\"in\" /> ";
- }
- if ($ip['dir'] == "both") {
- echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_pass.gif\" width=\"11\" height=\"11\" align=\"middle\" alt=\"pass\" /> ";
- }
- echo strtolower($ip['ip']);
- if ($ip['sn'] != "32" && is_numeric($ip['sn'])) {
- $sn = $ip['sn'];
- echo "/$sn";
- }
- if ($ip['dir'] == "from") {
- echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_in.gif\" width=\"11\" height=\"11\" align=\"middle\" alt=\"any\" /> any";
- }
-?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($ip['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <a href="services_captiveportal_ip_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit address"); ?>" width="17" height="17" border="0" alt="edit" /></a>
- &nbsp;
- <a href="services_captiveportal_ip.php?zone=<?=$cpzone;?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this address?"); ?>')"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete address"); ?>" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
- endif;
-?>
- <tr>
- <td class="list" colspan="2">&nbsp;</td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17" height="17"></td>
- <td>
- <a href="services_captiveportal_ip_edit.php?zone=<?=$cpzone;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add address"); ?>" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list">
- <p class="vexpl">
- <span class="red">
- <strong>
- <?=gettext("Note:"); ?><br />
- </strong>
- </span>
- <?=gettext("Adding allowed IP addresses will allow IP access to/from these addresses through the captive portal without being taken to the portal page. This can be used for a web server serving images for the portal page or a DNS server on another network, for example."); ?>
- </p>
- </td>
- <td class="list">&nbsp;</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_captiveportal_ip_edit.php b/usr/local/www/services_captiveportal_ip_edit.php
deleted file mode 100644
index c5e5544..0000000
--- a/usr/local/www/services_captiveportal_ip_edit.php
+++ /dev/null
@@ -1,253 +0,0 @@
-<?php
-/*
- services_captiveportal_ip_edit.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2011 Scott Ullrich <sullrich@gmail.com>
- All rights reserved.
-
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/ipfw
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-services-captiveportal-editallowedips
-##|*NAME=Services: Captive portal: Edit Allowed IPs page
-##|*DESCR=Allow access to the 'Services: Captive portal: Edit Allowed IPs' page.
-##|*MATCH=services_captiveportal_ip_edit.php*
-##|-PRIV
-
-function allowedipscmp($a, $b) {
- return strcmp($a['ip'], $b['ip']);
-}
-
-function allowedips_sort() {
- global $g, $config, $cpzone;
-
- usort($config['captiveportal'][$cpzone]['allowedip'], "allowedipscmp");
-}
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-
-$pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Edit allowed IP address"));
-$shortcut_section = "captiveportal";
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (!is_array($config['captiveportal'][$cpzone]['allowedip'])) {
- $config['captiveportal'][$cpzone]['allowedip'] = array();
-}
-$a_allowedips =& $config['captiveportal'][$cpzone]['allowedip'];
-
-if (isset($id) && $a_allowedips[$id]) {
- $pconfig['ip'] = $a_allowedips[$id]['ip'];
- $pconfig['sn'] = $a_allowedips[$id]['sn'];
- $pconfig['bw_up'] = $a_allowedips[$id]['bw_up'];
- $pconfig['bw_down'] = $a_allowedips[$id]['bw_down'];
- $pconfig['descr'] = $a_allowedips[$id]['descr'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "ip sn");
- $reqdfieldsn = array(gettext("Allowed IP address"), gettext("Subnet mask"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if ($_POST['ip'] && !is_ipaddr($_POST['ip'])) {
- $input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['ip']);
- }
-
- if ($_POST['sn'] && (!is_numeric($_POST['sn']) || ($_POST['sn'] < 1) || ($_POST['sn'] > 32))) {
- $input_errors[] = gettext("A valid subnet mask must be specified");
- }
-
- if ($_POST['bw_up'] && !is_numeric($_POST['bw_up'])) {
- $input_errors[] = gettext("Upload speed needs to be an integer");
- }
-
- if ($_POST['bw_down'] && !is_numeric($_POST['bw_down'])) {
- $input_errors[] = gettext("Download speed needs to be an integer");
- }
-
- foreach ($a_allowedips as $ipent) {
- if (isset($id) && ($a_allowedips[$id]) && ($a_allowedips[$id] === $ipent)) {
- continue;
- }
-
- if ($ipent['ip'] == $_POST['ip']) {
- $input_errors[] = sprintf("[%s] %s.", $_POST['ip'], gettext("already allowed")) ;
- break ;
- }
- }
-
- if (!$input_errors) {
- $ip = array();
- $ip['ip'] = $_POST['ip'];
- $ip['sn'] = $_POST['sn'];
- $ip['descr'] = $_POST['descr'];
- if ($_POST['bw_up']) {
- $ip['bw_up'] = $_POST['bw_up'];
- }
- if ($_POST['bw_down']) {
- $ip['bw_down'] = $_POST['bw_down'];
- }
- if (isset($id) && $a_allowedips[$id]) {
- $oldip = $a_allowedips[$id]['ip'];
- if (!empty($a_allowedips[$id]['sn'])) {
- $oldmask = $a_allowedips[$id]['sn'];
- } else {
- $oldmask = 32;
- }
- $a_allowedips[$id] = $ip;
- } else {
- $a_allowedips[] = $ip;
- }
- allowedips_sort();
-
- write_config();
-
- if (isset($a_cp[$cpzone]['enable']) && is_module_loaded("ipfw.ko")) {
- $rules = "";
- $cpzoneid = $a_cp[$cpzone]['zoneid'];
- unset($ipfw);
- if (isset($oldip) && isset($oldmask)) {
- $ipfw = pfSense_ipfw_getTablestats($cpzoneid, IP_FW_TABLE_XLISTENTRY, 3, $oldip);
- $rules .= "table 3 delete {$oldip}/{$oldmask}\n";
- $rules .= "table 4 delete {$oldip}/{$oldmask}\n";
- if (is_array($ipfw)) {
- $rules .= "pipe delete {$ipfw['dnpipe']}\n";
- $rules .= "pipe delete " . ($ipfw['dnpipe']+1 . "\n");
- }
- }
- $rules .= captiveportal_allowedip_configure_entry($ip);
- if (is_array($ipfw)) {
- captiveportal_free_dn_ruleno($ipfw['dnpipe']);
- }
- $uniqid = uniqid("{$cpzone}_allowed");
- @file_put_contents("{$g['tmp_path']}/{$uniqid}_tmp", $rules);
- mwexec("/sbin/ipfw -x {$cpzoneid} -q {$g['tmp_path']}/{$uniqid}_tmp");
- @unlink("{$g['tmp_path']}/{$uniqid}_tmp");
- }
-
- header("Location: services_captiveportal_ip.php?zone={$cpzone}");
- exit;
- }
-}
-
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="services_captiveportal_ip_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="captiveportal allow ip edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit allowed ip rule");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("IP address"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="ip" type="text" class="formfld unknown" id="ip" size="17" value="<?=htmlspecialchars($pconfig['ip']);?>" />
- /<select name='sn' class="formselect" id='sn'>
- <?php for ($i = 32; $i >= 1; $i--): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['sn']) echo "selected=\"selected\""; ?>><?=$i;?></option>
- <?php endfor; ?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("IP address and subnet mask. Use /32 for a single IP");?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth up"); ?></td>
- <td width="78%" class="vtable">
- <input name="bw_up" type="text" class="formfld unknown" id="bw_up" size="10" value="<?=htmlspecialchars($pconfig['bw_up']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Enter a upload limit to be enforced on this IP address in Kbit/s"); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth down"); ?></td>
- <td width="78%" class="vtable">
- <input name="bw_down" type="text" class="formfld unknown" id="bw_down" size="10" value="<?=htmlspecialchars($pconfig['bw_down']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Enter a download limit to be enforced on this IP address in Kbit/s"); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
- <?php if (isset($id) && $a_allowedips[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_captiveportal_mac.php b/usr/local/www/services_captiveportal_mac.php
deleted file mode 100644
index d6c1af3..0000000
--- a/usr/local/www/services_captiveportal_mac.php
+++ /dev/null
@@ -1,244 +0,0 @@
-<?php
-/*
- services_captiveportal_mac.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-services-captiveportal-macaddresses
-##|*NAME=Services: Captive portal: Mac Addresses page
-##|*DESCR=Allow access to the 'Services: Captive portal: Mac Addresses' page.
-##|*MATCH=services_captiveportal_mac.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-
-global $cpzone;
-global $cpzoneid;
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-$pgtitle = array(gettext("Services"), gettext("Captive portal"), $a_cp[$cpzone]['zone']);
-$shortcut_section = "captiveportal";
-
-if ($_POST) {
-
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
- $retval = 0;
-
- if (is_array($a_cp[$cpzone]['passthrumac'])) {
- $cpzoneid = $a_cp[$cpzone]['cpzoneid'];
- $rules = captiveportal_passthrumac_configure();
- if (!empty($rules)) {
- @file_put_contents("{$g['tmp_path']}/passthrumac_gui", $rules);
- mwexec("/sbin/ipfw -x {$cpzoneid} {$g['tmp_path']}/passthrumac_gui");
- @unlink("{$g['tmp_path']}/passthrumac_gui");
- }
- $savemsg = get_std_save_message($retval);
- if ($retval == 0) {
- clear_subsystem_dirty('passthrumac');
- }
- }
- }
-
- if ($_POST['postafterlogin']) {
- if (!is_array($a_passthrumacs)) {
- echo gettext("No entry exists yet!") ."\n";
- exit;
- }
- if (empty($_POST['zone'])) {
- echo gettext("Please set the zone on which the operation should be allowed");
- exit;
- }
- if (!is_array($a_cp[$cpzone]['passthrumac'])) {
- $a_cp[$cpzone]['passthrumac'] = array();
- }
- $a_passthrumacs =& $a_cp[$cpzone]['passthrumac'];
-
- if ($_POST['username']) {
- $mac = captiveportal_passthrumac_findbyname($_POST['username']);
- if (!empty($mac)) {
- $_POST['delmac'] = $mac['mac'];
- } else {
- echo gettext("No entry exists for this username:") . " " . $_POST['username'] . "\n";
- }
- }
- if ($_POST['delmac']) {
- $found = false;
- foreach ($a_passthrumacs as $idx => $macent) {
- if ($macent['mac'] == $_POST['delmac']) {
- $found = true;
- break;
- }
- }
- if ($found == true) {
- $cpzoneid = $a_cp[$cpzone]['zoneid'];
- $rules = captiveportal_passthrumac_delete_entry($a_passthrumacs[$idx]);
- $uniqid = uniqid("{$cpzone}_mac");
- file_put_contents("{$g['tmp_path']}/{$uniqid}_tmp", $rules);
- mwexec("/sbin/ipfw -x {$cpzoneid} -q {$g['tmp_path']}/{$uniqid}_tmp");
- @unlink("{$g['tmp_path']}/{$uniqid}_tmp");
- unset($a_passthrumacs[$idx]);
- write_config();
- echo gettext("The entry was successfully deleted") . "\n";
- } else {
- echo gettext("No entry exists for this mac address:") . " " . $_POST['delmac'] . "\n";
- }
- }
- exit;
- }
-}
-
-if ($_GET['act'] == "del") {
- $a_passthrumacs =& $a_cp[$cpzone]['passthrumac'];
- if ($a_passthrumacs[$_GET['id']]) {
- $cpzoneid = $a_cp[$cpzone]['zoneid'];
- $rules = captiveportal_passthrumac_delete_entry($a_passthrumacs[$_GET['id']]);
- $uniqid = uniqid("{$cpzone}_mac");
- file_put_contents("{$g['tmp_path']}/{$uniqid}_tmp", $rules);
- mwexec("/sbin/ipfw -x {$cpzoneid} -q {$g['tmp_path']}/{$uniqid}_tmp");
- @unlink("{$g['tmp_path']}/{$uniqid}_tmp");
- unset($a_passthrumacs[$_GET['id']]);
- write_config();
- header("Location: services_captiveportal_mac.php?zone={$cpzone}");
- exit;
- }
-}
-
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_captiveportal_mac.php" method="post">
-<input type="hidden" name="zone" id="zone" value="<?=htmlspecialchars($cpzone);?>" />
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('passthrumac')): ?><p>
-<?php print_info_box_np(gettext("The captive portal MAC address configuration has been changed.<br />You must apply the changes in order for them to take effect."));?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="captiveportal mac">
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}");
- $tab_array[] = array(gettext("MAC"), true, "services_captiveportal_mac.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}");
- $tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}");
- display_top_tabs($tab_array, true);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabcont">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="main">
- <tr>
- <td width="3%" class="list"></td>
- <td width="37%" class="listhdrr"><?=gettext("MAC address"); ?></td>
- <td width="50%" class="listhdr"><?=gettext("Description"); ?></td>
- <td width="10%" class="list"></td>
- </tr>
-<?php
- if (is_array($a_cp[$cpzone]['passthrumac'])):
- $i = 0;
- foreach ($a_cp[$cpzone]['passthrumac'] as $mac):
-?>
- <tr ondblclick="document.location='services_captiveportal_mac_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>'">
- <td valign="middle" class="list nowrap">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$mac['action'];?>.gif" width="11" height="11" border="0" alt="icon" />
- </td>
- <td class="listlr">
- <?=$mac['mac'];?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($mac['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <a href="services_captiveportal_mac_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>">
- <img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit host"); ?>" width="17" height="17" border="0" alt="edit" />
- </a>
- &nbsp;
- <a href="services_captiveportal_mac.php?zone=<?=$cpzone;?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this host?"); ?>')">
- <img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete host"); ?>" width="17" height="17" border="0" alt="delte" />
- </a>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
- endif;
-?>
- <tr>
- <td class="list" colspan="3">&nbsp;</td>
- <td class="list">
- <a href="services_captiveportal_mac_edit.php?zone=<?=$cpzone;?>">
- <img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add host"); ?>" width="17" height="17" border="0" alt="add" />
- </a>
- </td>
- </tr>
- <tr>
- <td colspan="3" class="list">
- <span class="vexpl">
- <span class="red"><strong><?=gettext("Note:"); ?><br /></strong></span>
- <?=gettext("Adding MAC addresses as 'pass' MACs allows them access through the captive portal automatically without being taken to the portal page."); ?>
- </span>
- </td>
- <td class="list">&nbsp;</td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_captiveportal_mac_edit.php b/usr/local/www/services_captiveportal_mac_edit.php
deleted file mode 100644
index 191c9bb..0000000
--- a/usr/local/www/services_captiveportal_mac_edit.php
+++ /dev/null
@@ -1,270 +0,0 @@
-<?php
-/*
- services_captiveportal_mac_edit.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-services-captiveportal-editmacaddresses
-##|*NAME=Services: Captive portal: Edit MAC Addresses page
-##|*DESCR=Allow access to the 'Services: Captive portal: Edit MAC Addresses' page.
-##|*MATCH=services_captiveportal_mac_edit.php*
-##|-PRIV
-
-function passthrumacscmp($a, $b) {
- return strcmp($a['mac'], $b['mac']);
-}
-
-function passthrumacs_sort() {
- global $config, $cpzone;
-
- usort($config['captiveportal'][$cpzone]['passthrumac'], "passthrumacscmp");
-}
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-
-global $cpzone;
-global $cpzoneid;
-
-$pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Edit MAC address rules"));
-$shortcut_section = "captiveportal";
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (!is_array($a_cp[$cpzone]['passthrumac'])) {
- $a_cp[$cpzone]['passthrumac'] = array();
-}
-$a_passthrumacs = &$a_cp[$cpzone]['passthrumac'];
-
-if (isset($id) && $a_passthrumacs[$id]) {
- $pconfig['action'] = $a_passthrumacs[$id]['action'];
- $pconfig['mac'] = $a_passthrumacs[$id]['mac'];
- $pconfig['bw_up'] = $a_passthrumacs[$id]['bw_up'];
- $pconfig['bw_down'] = $a_passthrumacs[$id]['bw_down'];
- $pconfig['descr'] = $a_passthrumacs[$id]['descr'];
- $pconfig['username'] = $a_passthrumacs[$id]['username'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "action mac");
- $reqdfieldsn = array(gettext("Action"), gettext("MAC address"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- $_POST['mac'] = strtolower(str_replace("-", ":", $_POST['mac']));
-
- if ($_POST['mac']) {
- if (is_macaddr($_POST['mac'])) {
- $iflist = get_interface_list();
- foreach ($iflist as $if) {
- if ($_POST['mac'] == strtolower($if['mac'])) {
- $input_errors[] = sprintf(gettext("The MAC address %s belongs to a local interface, you cannot use it here."), $_POST['mac']);
- break;
- }
- }
- } else {
- $input_errors[] = sprintf("%s. [%s]", gettext("A valid MAC address must be specified"), $_POST['mac']);
- }
- }
- if ($_POST['bw_up'] && !is_numeric($_POST['bw_up'])) {
- $input_errors[] = gettext("Upload speed needs to be an integer");
- }
- if ($_POST['bw_down'] && !is_numeric($_POST['bw_down'])) {
- $input_errors[] = gettext("Download speed needs to be an integer");
- }
-
- foreach ($a_passthrumacs as $macent) {
- if (isset($id) && ($a_passthrumacs[$id]) && ($a_passthrumacs[$id] === $macent)) {
- continue;
- }
-
- if ($macent['mac'] == $_POST['mac']) {
- $input_errors[] = sprintf("[%s] %s.", $_POST['mac'], gettext("already exists"));
- break;
- }
- }
-
- if (!$input_errors) {
- $mac = array();
- $mac['action'] = $_POST['action'];
- $mac['mac'] = $_POST['mac'];
- if ($_POST['bw_up']) {
- $mac['bw_up'] = $_POST['bw_up'];
- }
- if ($_POST['bw_down']) {
- $mac['bw_down'] = $_POST['bw_down'];
- }
- if ($_POST['username']) {
- $mac['username'] = $_POST['username'];
- }
-
- $mac['descr'] = $_POST['descr'];
-
- if (isset($id) && $a_passthrumacs[$id]) {
- $oldmac = $a_passthrumacs[$id];
- $a_passthrumacs[$id] = $mac;
- } else {
- $oldmac = $mac;
- $a_passthrumacs[] = $mac;
- }
- passthrumacs_sort();
-
- write_config();
-
- if (isset($config['captiveportal'][$cpzone]['enable'])) {
- $cpzoneid = $config['captiveportal'][$cpzone]['zoneid'];
- $rules = captiveportal_passthrumac_delete_entry($oldmac);
- $rules .= captiveportal_passthrumac_configure_entry($mac);
- $uniqid = uniqid("{$cpzone}_macedit");
- file_put_contents("{$g['tmp_path']}/{$uniqid}_tmp", $rules);
- mwexec("/sbin/ipfw -x {$cpzoneid} -q {$g['tmp_path']}/{$uniqid}_tmp");
- @unlink("{$g['tmp_path']}/{$uniqid}_tmp");
- unset($cpzoneid);
- }
-
- header("Location: services_captiveportal_mac.php?zone={$cpzone}");
- exit;
- }
-}
-include("head.inc");
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="services_captiveportal_mac_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="captiveportal mac edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit MAC address rules");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Action"); ?></td>
- <td width="78%" class="vtable">
- <select name="action" class="formselect">
-<?php
- $actions = explode(" ", "Pass Block");
- foreach ($actions as $action):
-?>
- <option value="<?=strtolower($action);?>"<?php if (strtolower($action) == strtolower($pconfig['action'])) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($action);?>
- </option>
-<?php
- endforeach;
-?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Choose what to do with packets coming from this MAC address"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("MAC address"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="mac" type="text" class="formfld unknown" id="mac" size="17" value="<?=htmlspecialchars($pconfig['mac']);?>" />
-<?php
- $ip = getenv('REMOTE_ADDR');
- $mac = `/usr/sbin/arp -an | grep {$ip} | cut -d" " -f4`;
- $mac = str_replace("\n", "", $mac);
-?>
- <a onclick="document.forms[0].mac.value='<?=$mac?>';" href="#"><?=gettext("Copy my MAC address");?></a>
- <br />
- <span class="vexpl"><?=gettext("MAC address (6 hex octets separated by colons)"); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth up"); ?></td>
- <td width="78%" class="vtable">
- <input name="bw_up" type="text" class="formfld unknown" id="bw_up" size="10" value="<?=htmlspecialchars($pconfig['bw_up']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Enter a upload limit to be enforced on this MAC address in Kbit/s"); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth down"); ?></td>
- <td width="78%" class="vtable">
- <input name="bw_down" type="text" class="formfld unknown" id="bw_down" size="10" value="<?=htmlspecialchars($pconfig['bw_down']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Enter a download limit to be enforced on this MAC address in Kbit/s"); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
- <?php if (isset($id) && $a_passthrumacs[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- <?php if (isset($pconfig['username']) && $pconfig['username']): ?>
- <input name="username" type="hidden" value="<?=htmlspecialchars($pconfig['username']);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_captiveportal_vouchers.php b/usr/local/www/services_captiveportal_vouchers.php
deleted file mode 100644
index 0bc7dae..0000000
--- a/usr/local/www/services_captiveportal_vouchers.php
+++ /dev/null
@@ -1,715 +0,0 @@
-<?php
-/*
- services_captiveportal_vouchers.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2007 Marcel Wiget <mwiget@mac.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/local/bin/voucher /usr/bin/openssl
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-services-captiveportal-vouchers
-##|*NAME=Services: Captive portal Vouchers page
-##|*DESCR=Allow access to the 'Services: Captive portal Vouchers' page.
-##|*MATCH=services_captiveportal_vouchers.php*
-##|-PRIV
-
-if ($_POST['postafterlogin']) {
- $nocsrf= true;
-}
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-require_once("voucher.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_captiveportal_vouchers.php');
-}
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-if (empty($cpzone)) {
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-if ($_REQUEST['generatekey']) {
- exec("/usr/bin/openssl genrsa 64 > /tmp/key64.private");
- exec("/usr/bin/openssl rsa -pubout < /tmp/key64.private > /tmp/key64.public");
- $privatekey = str_replace("\n", "\\n", file_get_contents("/tmp/key64.private"));
- $publickey = str_replace("\n", "\\n", file_get_contents("/tmp/key64.public"));
- exec("rm /tmp/key64.private /tmp/key64.public");
- $alertmessage = gettext("You will need to recreate any existing Voucher Rolls due to the public and private key changes. Click cancel if you do not wish to recreate the vouchers.");
- echo <<<EOF
- jQuery('#publickey').val('{$publickey}');
- jQuery('#privatekey').val('{$privatekey}');
- alert('{$alertmessage}');
- jQuery('#publickey').effect('highlight');
- jQuery('#privatekey').effect('highlight');
-EOF;
- exit;
-}
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-if (!is_array($config['voucher'])) {
- $config['voucher'] = array();
-}
-
-if (empty($a_cp[$cpzone])) {
- log_error("Submission on captiveportal page with unknown zone parameter: " . htmlspecialchars($cpzone));
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-
-$pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Vouchers"), $a_cp[$cpzone]['zone']);
-$shortcut_section = "captiveportal-vouchers";
-
-if (!is_array($config['voucher'][$cpzone]['roll'])) {
- $config['voucher'][$cpzone]['roll'] = array();
-}
-if (!isset($config['voucher'][$cpzone]['charset'])) {
- $config['voucher'][$cpzone]['charset'] = '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
-}
-if (!isset($config['voucher'][$cpzone]['rollbits'])) {
- $config['voucher'][$cpzone]['rollbits'] = 16;
-}
-if (!isset($config['voucher'][$cpzone]['ticketbits'])) {
- $config['voucher'][$cpzone]['ticketbits'] = 10;
-}
-if (!isset($config['voucher'][$cpzone]['checksumbits'])) {
- $config['voucher'][$cpzone]['checksumbits'] = 5;
-}
-if (!isset($config['voucher'][$cpzone]['magic'])) {
- $config['voucher'][$cpzone]['magic'] = rand(); // anything slightly random will do
-}
-if (!isset($config['voucher'][$cpzone]['exponent'])) {
- while (true) {
- while (($exponent = rand()) % 30000 < 5000) {
- continue;
- }
- $exponent = ($exponent * 2) + 1; // Make it odd number
- if ($exponent <= 65537) {
- break;
- }
- }
- $config['voucher'][$cpzone]['exponent'] = $exponent;
- unset($exponent);
-}
-
-if (!isset($config['voucher'][$cpzone]['publickey'])) {
- /* generate a random 64 bit RSA key pair using the voucher binary */
- $fd = popen("/usr/local/bin/voucher -g 64 -e " . $config['voucher'][$cpzone]['exponent'], "r");
- if ($fd !== false) {
- $output = fread($fd, 16384);
- pclose($fd);
- list($privkey, $pubkey) = explode("\0", $output);
- $config['voucher'][$cpzone]['publickey'] = base64_encode($pubkey);
- $config['voucher'][$cpzone]['privatekey'] = base64_encode($privkey);
- }
-}
-
-// Check for invalid or expired vouchers
-if (!isset($config['voucher'][$cpzone]['descrmsgnoaccess'])) {
- $config['voucher'][$cpzone]['descrmsgnoaccess'] = gettext("Voucher invalid");
-}
-if (!isset($config['voucher'][$cpzone]['descrmsgexpired'])) {
- $config['voucher'][$cpzone]['descrmsgexpired'] = gettext("Voucher expired");
-}
-
-$a_roll = &$config['voucher'][$cpzone]['roll'];
-
-if ($_GET['act'] == "del") {
- $id = $_GET['id'];
- if ($a_roll[$id]) {
- $roll = $a_roll[$id]['number'];
- $voucherlck = lock("voucher{$cpzone}");
- unset($a_roll[$id]);
- voucher_unlink_db($roll);
- unlock($voucherlck);
- write_config();
- }
- header("Location: services_captiveportal_vouchers.php?zone={$cpzone}");
- exit;
-} else if ($_GET['act'] == "csv") {
- /* print all vouchers of the selected roll */
- $privkey = base64_decode($config['voucher'][$cpzone]['privatekey']);
- if (strstr($privkey, "BEGIN RSA PRIVATE KEY")) {
- $fd = fopen("{$g['varetc_path']}/voucher_{$cpzone}.private", "w");
- if (!$fd) {
- $input_errors[] = gettext("Cannot write private key file") . ".\n";
- } else {
- chmod("{$g['varetc_path']}/voucher_{$cpzone}.private", 0600);
- fwrite($fd, $privkey);
- fclose($fd);
- $a_voucher = &$config['voucher'][$cpzone]['roll'];
- $id = $_GET['id'];
- if (isset($id) && $a_voucher[$id]) {
- $number = $a_voucher[$id]['number'];
- $count = $a_voucher[$id]['count'];
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename=vouchers_{$cpzone}_roll{$number}.csv");
- if (file_exists("{$g['varetc_path']}/voucher_{$cpzone}.cfg")) {
- system("/usr/local/bin/voucher -c {$g['varetc_path']}/voucher_{$cpzone}.cfg -p {$g['varetc_path']}/voucher_{$cpzone}.private $number $count");
- }
- @unlink("{$g['varetc_path']}/voucher_{$cpzone}.private");
- } else {
- header("Location: services_captiveportal_vouchers.php?zone={$cpzone}");
- }
- exit;
- }
- } else {
- $input_errors[] = gettext("Need private RSA key to print vouchers") . "\n";
- }
-}
-
-$pconfig['enable'] = isset($config['voucher'][$cpzone]['enable']);
-$pconfig['charset'] = $config['voucher'][$cpzone]['charset'];
-$pconfig['rollbits'] = $config['voucher'][$cpzone]['rollbits'];
-$pconfig['ticketbits'] = $config['voucher'][$cpzone]['ticketbits'];
-$pconfig['checksumbits'] = $config['voucher'][$cpzone]['checksumbits'];
-$pconfig['magic'] = $config['voucher'][$cpzone]['magic'];
-$pconfig['exponent'] = $config['voucher'][$cpzone]['exponent'];
-$pconfig['publickey'] = base64_decode($config['voucher'][$cpzone]['publickey']);
-$pconfig['privatekey'] = base64_decode($config['voucher'][$cpzone]['privatekey']);
-$pconfig['msgnoaccess'] = $config['voucher'][$cpzone]['descrmsgnoaccess'];
-$pconfig['msgexpired'] = $config['voucher'][$cpzone]['descrmsgexpired'];
-$pconfig['vouchersyncdbip'] = $config['voucher'][$cpzone]['vouchersyncdbip'];
-$pconfig['vouchersyncport'] = $config['voucher'][$cpzone]['vouchersyncport'];
-$pconfig['vouchersyncpass'] = $config['voucher'][$cpzone]['vouchersyncpass'];
-$pconfig['vouchersyncusername'] = $config['voucher'][$cpzone]['vouchersyncusername'];
-
-if ($_POST) {
-
- unset($input_errors);
-
- if ($_POST['postafterlogin']) {
- voucher_expire($_POST['voucher_expire']);
- exit;
- }
-
- $pconfig = $_POST;
-
- /* input validation */
- if ($_POST['enable'] == "yes") {
- if (!$_POST['vouchersyncusername']) {
- $reqdfields = explode(" ", "charset rollbits ticketbits checksumbits publickey magic");
- $reqdfieldsn = array(gettext("charset"), gettext("rollbits"), gettext("ticketbits"), gettext("checksumbits"), gettext("publickey"), gettext("magic"));
- } else {
- $reqdfields = explode(" ", "vouchersyncdbip vouchersyncport vouchersyncpass vouchersyncusername");
- $reqdfieldsn = array(gettext("Synchronize Voucher Database IP"), gettext("Sync port"), gettext("Sync password"), gettext("Sync username"));
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- }
-
- if (!$_POST['vouchersyncusername']) {
- // Check for form errors
- if ($_POST['charset'] && (strlen($_POST['charset'] < 2))) {
- $input_errors[] = gettext("Need at least 2 characters to create vouchers.");
- }
- if ($_POST['charset'] && (strpos($_POST['charset'], "\"") > 0)) {
- $input_errors[] = gettext("Double quotes aren't allowed.");
- }
- if ($_POST['charset'] && (strpos($_POST['charset'], ",") > 0)) {
- $input_errors[] = "',' " . gettext("aren't allowed.");
- }
- if ($_POST['rollbits'] && (!is_numeric($_POST['rollbits']) || ($_POST['rollbits'] < 1) || ($_POST['rollbits'] > 31))) {
- $input_errors[] = gettext("# of Bits to store Roll Id needs to be between 1..31.");
- }
- if ($_POST['ticketbits'] && (!is_numeric($_POST['ticketbits']) || ($_POST['ticketbits'] < 1) || ($_POST['ticketbits'] > 16))) {
- $input_errors[] = gettext("# of Bits to store Ticket Id needs to be between 1..16.");
- }
- if ($_POST['checksumbits'] && (!is_numeric($_POST['checksumbits']) || ($_POST['checksumbits'] < 1) || ($_POST['checksumbits'] > 31))) {
- $input_errors[] = gettext("# of Bits to store checksum needs to be between 1..31.");
- }
- if ($_POST['publickey'] && (!strstr($_POST['publickey'], "BEGIN PUBLIC KEY"))) {
- $input_errors[] = gettext("This doesn't look like an RSA Public key.");
- }
- if ($_POST['privatekey'] && (!strstr($_POST['privatekey'], "BEGIN RSA PRIVATE KEY"))) {
- $input_errors[] = gettext("This doesn't look like an RSA Private key.");
- }
- if ($_POST['vouchersyncdbip'] && (is_ipaddr_configured($_POST['vouchersyncdbip']))) {
- $input_errors[] = gettext("You cannot sync the voucher database to this host (itself).");
- }
- }
-
- if (!$input_errors) {
- if (empty($config['voucher'][$cpzone])) {
- $newvoucher = array();
- } else {
- $newvoucher = $config['voucher'][$cpzone];
- }
- if ($_POST['enable'] == "yes") {
- $newvoucher['enable'] = true;
- } else {
- unset($newvoucher['enable']);
- }
- if (empty($_POST['vouchersyncusername'])) {
- unset($newvoucher['vouchersyncdbip']);
- unset($newvoucher['vouchersyncport']);
- unset($newvoucher['vouchersyncusername']);
- unset($newvoucher['vouchersyncpass']);
- $newvoucher['charset'] = $_POST['charset'];
- $newvoucher['rollbits'] = $_POST['rollbits'];
- $newvoucher['ticketbits'] = $_POST['ticketbits'];
- $newvoucher['checksumbits'] = $_POST['checksumbits'];
- $newvoucher['magic'] = $_POST['magic'];
- $newvoucher['exponent'] = $_POST['exponent'];
- $newvoucher['publickey'] = base64_encode($_POST['publickey']);
- $newvoucher['privatekey'] = base64_encode($_POST['privatekey']);
- $newvoucher['descrmsgnoaccess'] = $_POST['msgnoaccess'];
- $newvoucher['descrmsgexpired'] = $_POST['msgexpired'];
- $config['voucher'][$cpzone] = $newvoucher;
- write_config();
- voucher_configure_zone();
- } else {
- $newvoucher['vouchersyncdbip'] = $_POST['vouchersyncdbip'];
- $newvoucher['vouchersyncport'] = $_POST['vouchersyncport'];
- $newvoucher['vouchersyncusername'] = $_POST['vouchersyncusername'];
- $newvoucher['vouchersyncpass'] = $_POST['vouchersyncpass'];
- if ($newvoucher['vouchersyncpass'] && $newvoucher['vouchersyncusername'] &&
- $newvoucher['vouchersyncport'] && $newvoucher['vouchersyncdbip']) {
- // Synchronize the voucher DB from the master node
- require_once("xmlrpc.inc");
-
- $protocol = "http";
- if (is_array($config['system']) && is_array($config['system']['webgui']) && !empty($config['system']['webgui']['protocol']) &&
- $config['system']['webgui']['protocol'] == "https") {
- $protocol = "https";
- }
- if ($protocol == "https" || $newvoucher['vouchersyncport'] == "443") {
- $url = "https://{$newvoucher['vouchersyncdbip']}";
- } else {
- $url = "http://{$newvoucher['vouchersyncdbip']}";
- }
-
- $execcmd = <<<EOF
- \$toreturn = array();
- \$toreturn['voucher'] = \$config['voucher']['$cpzone'];
- unset(\$toreturn['vouchersyncport'], \$toreturn['vouchersyncpass'], \$toreturn['vouchersyncusername'], \$toreturn['vouchersyncdbip']);
-
-EOF;
-
- /* assemble xmlrpc payload */
- $params = array(
- XML_RPC_encode($newvoucher['vouchersyncpass']),
- XML_RPC_encode($execcmd)
- );
- $port = $newvoucher['vouchersyncport'];
- log_error("voucher XMLRPC sync data {$url}:{$port}.");
- $msg = new XML_RPC_Message('pfsense.exec_php', $params);
- $cli = new XML_RPC_Client('/xmlrpc.php', $url, $port);
- $cli->setCredentials($newvoucher['vouchersyncusername'], $newvoucher['vouchersyncpass']);
- $resp = $cli->send($msg, "250");
- if (!is_object($resp)) {
- $error = "A communications error occurred while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} (pfsense.exec_php).";
- log_error($error);
- file_notice("CaptivePortalVoucherSync", $error, "Communications error occurred", "");
- $input_errors[] = $error;
- } elseif ($resp->faultCode()) {
- $cli->setDebug(1);
- $resp = $cli->send($msg, "250");
- $error = "An error code was received while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString();
- log_error($error);
- file_notice("CaptivePortalVoucherSync", $error, "Error code received", "");
- $input_errors[] = $error;
- } else {
- log_error("The Captive Portal voucher database has been synchronized with {$url}:{$port} (pfsense.exec_php).");
- }
- if (!$input_errors) {
- $toreturn = XML_RPC_Decode($resp->value());
- if (!is_array($toreturn)) {
- if ($toreturn == "Authentication failed") {
- $input_errors[] = "Could not synchronize the voucher database: Authentication Failed.";
- }
- } else {
- // If we received back the voucher roll and other information then store it.
- if ($toreturn['voucher']['roll']) {
- $newvoucher['roll'] = $toreturn['voucher']['roll'];
- }
- if ($toreturn['voucher']['rollbits']) {
- $newvoucher['rollbits'] = $toreturn['voucher']['rollbits'];
- }
- if ($toreturn['voucher']['ticketbits']) {
- $newvoucher['ticketbits'] = $toreturn['voucher']['ticketbits'];
- }
- if ($toreturn['voucher']['checksumbits']) {
- $newvoucher['checksumbits'] = $toreturn['voucher']['checksumbits'];
- }
- if ($toreturn['voucher']['magic']) {
- $newvoucher['magic'] = $toreturn['voucher']['magic'];
- }
- if ($toreturn['voucher']['exponent']) {
- $newvoucher['exponent'] = $toreturn['voucher']['exponent'];
- }
- if ($toreturn['voucher']['publickey']) {
- $newvoucher['publickey'] = $toreturn['voucher']['publickey'];
- }
- if ($toreturn['voucher']['privatekey']) {
- $newvoucher['privatekey'] = $toreturn['voucher']['privatekey'];
- }
- if ($toreturn['voucher']['descrmsgnoaccess']) {
- $newvoucher['descrmsgnoaccess'] = $toreturn['voucher']['descrmsgnoaccess'];
- }
- if ($toreturn['voucher']['descrmsgexpired']) {
- $newvoucher['descrmsgexpired'] = $toreturn['voucher']['descrmsgexpired'];
- }
- $savemsg = gettext("Voucher database has been synchronized from {$url}:{$port}");
-
- $config['voucher'][$cpzone] = $newvoucher;
- write_config();
- voucher_configure_zone(true);
- }
- }
- }
- }
- if (!$input_errors) {
- header("Location: services_captiveportal_vouchers.php?zone={$cpzone}");
- exit;
- }
- }
-}
-$closehead = false;
-include("head.inc");
-?>
-<script type="text/javascript">
-//<![CDATA[
-function generatenewkey() {
- jQuery('#publickey').val('One moment please...');
- jQuery('#privatekey').val('One moment please...');
- jQuery.ajax("services_captiveportal_vouchers.php?zone=<?php echo($cpzone); ?>&generatekey=true", {
- type: 'get',
- success: function(data) {
- eval(data);
- }
- });
-}
-function before_save() {
- document.iform.charset.disabled = false;
- document.iform.rollbits.disabled = false;
- document.iform.ticketbits.disabled = false;
- document.iform.checksumbits.disabled = false;
- document.iform.magic.disabled = false;
- document.iform.publickey.disabled = false;
- document.iform.privatekey.disabled = false;
- document.iform.msgnoaccess.disabled = false;
- document.iform.msgexpired.disabled = false;
- for (var x = 0; x < <?php echo count($a_roll); ?>; x++) {
- jQuery('#addeditdelete' + x).show();
- }
- jQuery('#addnewroll').show();
-}
-function enable_change(enable_change) {
- var endis;
- endis = !(document.iform.enable.checked || enable_change);
- document.iform.charset.disabled = endis;
- document.iform.rollbits.disabled = endis;
- document.iform.ticketbits.disabled = endis;
- document.iform.checksumbits.disabled = endis;
- document.iform.magic.disabled = endis;
- document.iform.publickey.disabled = endis;
- document.iform.privatekey.disabled = endis;
- document.iform.msgnoaccess.disabled = endis;
- document.iform.msgexpired.disabled = endis;
- document.iform.vouchersyncdbip.disabled = endis;
- document.iform.vouchersyncport.disabled = endis;
- document.iform.vouchersyncpass.disabled = endis;
- document.iform.vouchersyncusername.disabled = endis;
- if (document.iform.vouchersyncusername.value != "") {
- document.iform.charset.disabled = true;
- document.iform.rollbits.disabled = true;
- document.iform.ticketbits.disabled = true;
- document.iform.checksumbits.disabled = true;
- document.iform.magic.disabled = true;
- document.iform.publickey.disabled = true;
- document.iform.privatekey.disabled = true;
- document.iform.msgnoaccess.disabled = true;
- document.iform.msgexpired.disabled = true;
- for (var x = 0; x < <?php echo count($a_roll); ?>; x++) {
- jQuery('#addeditdelete' + x).hide();
- }
- jQuery('#addnewroll').hide();
- } else {
- for (var x = 0; x < <?php echo count($a_roll); ?>; x++) {
- jQuery('#addeditdelete' + x).show();
- }
- jQuery('#addnewroll').show();
- }
-}
-//]]>
-</script>
-</head>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<form action="services_captiveportal_vouchers.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tab pane">
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}");
- $tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Vouchers"), true, "services_captiveportal_vouchers.php?zone={$cpzone}");
- $tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}");
- display_top_tabs($tab_array, true);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="checkbox pane">
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable">
- <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
- <strong><?=gettext("Enable Vouchers"); ?></strong>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell">
- <?=gettext("Voucher Rolls"); ?>
- <?php
- if ($pconfig['vouchersyncdbip']) {
- echo "<br />(Synchronized from {$pconfig['vouchersyncdbip']})";
- }
- ?>
- </td>
- <td class="vtable">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="content pane">
- <tr>
- <td width="10%" class="listhdrr"><?=gettext("Roll"); ?> #</td>
- <td width="20%" class="listhdrr"><?=gettext("Minutes/Ticket"); ?></td>
- <td width="20%" class="listhdrr"># <?=gettext("of Tickets"); ?></td>
- <td width="35%" class="listhdr"><?=gettext("Comment"); ?></td>
- <td width="15%" class="list"></td>
- </tr>
- <?php $i = 0; foreach ($a_roll as $rollent): ?>
- <tr>
- <td class="listlr">
- <?=htmlspecialchars($rollent['number']); ?>&nbsp;
- </td>
- <td class="listr">
- <?=htmlspecialchars($rollent['minutes']);?>&nbsp;
- </td>
- <td class="listr">
- <?=htmlspecialchars($rollent['count']);?>&nbsp;
- </td>
- <td class="listr">
- <?=htmlspecialchars($rollent['descr']); ?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <div id='addeditdelete<?=$i?>'>
- <?php if ($pconfig['enable']): ?>
- <a href="services_captiveportal_vouchers_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i; ?>"><img src="/themes/<?=$g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit voucher"); ?>" width="17" height="17" border="0" alt="<?=gettext("edit voucher"); ?>" /></a>
- <a href="services_captiveportal_vouchers.php?zone=<?=$cpzone;?>&amp;act=del&amp;id=<?=$i; ?>" onclick="return confirm('<?=gettext("Do you really want to delete this voucher? This makes all vouchers from this roll invalid"); ?>')"><img src="/themes/<?=$g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete vouchers"); ?>" width="17" height="17" border="0" alt="<?=gettext("delete vouchers"); ?>" /></a>
- <a href="services_captiveportal_vouchers.php?zone=<?=$cpzone;?>&amp;act=csv&amp;id=<?=$i; ?>"><img src="/themes/<?=$g['theme']; ?>/images/icons/icon_log_s.gif" title="<?=gettext("generate vouchers for this roll to CSV file"); ?>" width="11" height="15" border="0" alt="<?=gettext("generate vouchers for this roll to CSV file"); ?>" /></a>
- <?php endif;?>
- </div>
- </td>
- </tr>
- <?php $i++; endforeach; ?>
- <tr>
- <td class="list" colspan="4"></td>
- <?php
- if ($pconfig['enable']) {
- echo "<td class=\"list\"><div id='addnewroll'> <a href=\"services_captiveportal_vouchers_edit.php?zone={$cpzone}\"><img src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" title=\"" . gettext("add voucher") . "\" width=\"17\" height=\"17\" border=\"0\" alt=\"" . gettext("add voucher") . "\" /></a></div></td>";
- }
- ?>
- </tr>
- </table>
- <?php if ($pconfig['enable']): ?>
- <?=gettext("Create, generate and activate Rolls with Vouchers that allow access through the " .
- "captive portal for the configured time. Once a voucher is activated, " .
- "its clock is started and runs uninterrupted until it expires. During that " .
- "time, the voucher can be re-used from the same or a different computer. If the voucher " .
- "is used again from another computer, the previous session is stopped."); ?>
- <?php else: ?>
- <?=gettext("Enable Voucher support first using the checkbox above and hit Save at the bottom."); ?>
- <?php endif;?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq">
- <?=gettext("Voucher public key"); ?>
- </td>
- <td class="vtable">
- <textarea name="publickey" cols="65" rows="4" id="publickey" class="formpre"><?=htmlspecialchars($pconfig['publickey']);?></textarea>
- <br />
- <?=gettext("Paste an RSA public key (64 Bit or smaller) in PEM format here. This key is used to decrypt vouchers."); ?> <a href='#' onclick='generatenewkey();'><?=gettext('Generate');?></a> <?=gettext('new key');?>.
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Voucher private key"); ?></td>
- <td class="vtable">
- <textarea name="privatekey" cols="65" rows="5" id="privatekey" class="formpre"><?=htmlspecialchars($pconfig['privatekey']);?></textarea>
- <br />
- <?=gettext("Paste an RSA private key (64 Bit or smaller) in PEM format here. This key is only used to generate encrypted vouchers and doesn't need to be available if the vouchers have been generated offline."); ?> <a href='#' onclick='generatenewkey();'> <?=gettext('Generate');?></a> <?=gettext('new key');?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Character set"); ?></td>
- <td width="78%" class="vtable">
- <input name="charset" type="text" class="formfld" id="charset" size="80" value="<?=htmlspecialchars($pconfig['charset']);?>" />
- <br />
- <?=gettext("Tickets are generated with the specified character set. It should contain printable characters (numbers, lower case and upper case letters) that are hard to confuse with others. Avoid e.g. 0/O and l/1."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"># <?=gettext("of Roll Bits"); ?></td>
- <td width="78%" class="vtable">
- <input name="rollbits" type="text" class="formfld" id="rollbits" size="2" value="<?=htmlspecialchars($pconfig['rollbits']);?>" />
- <br />
- <?=gettext("Reserves a range in each voucher to store the Roll # it belongs to. Allowed range: 1..31. Sum of Roll+Ticket+Checksum bits must be one Bit less than the RSA key size."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"># <?=gettext("of Ticket Bits"); ?></td>
- <td width="78%" class="vtable">
- <input name="ticketbits" type="text" class="formfld" id="ticketbits" size="2" value="<?=htmlspecialchars($pconfig['ticketbits']);?>" />
- <br />
- <?=gettext("Reserves a range in each voucher to store the Ticket# it belongs to. Allowed range: 1..16. Using 16 bits allows a roll to have up to 65535 vouchers. A bit array, stored in RAM and in the config, is used to mark if a voucher has been used. A bit array for 65535 vouchers requires 8 KB of storage."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"># <?=gettext("of Checksum Bits"); ?></td>
- <td width="78%" class="vtable">
- <input name="checksumbits" type="text" class="formfld" id="checksumbits" size="2" value="<?=htmlspecialchars($pconfig['checksumbits']);?>" />
- <br />
- <?=gettext("Reserves a range in each voucher to store a simple checksum over Roll # and Ticket#. Allowed range is 0..31."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Magic Number"); ?></td>
- <td width="78%" class="vtable">
- <input name="magic" type="text" class="formfld" id="magic" size="20" value="<?=htmlspecialchars($pconfig['magic']);?>" />
- <br />
- <?=gettext("Magic number stored in every voucher. Verified during voucher check. Size depends on how many bits are left by Roll+Ticket+Checksum bits. If all bits are used, no magic number will be used and checked."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Invalid Voucher Message"); ?></td>
- <td width="78%" class="vtable">
- <input name="msgnoaccess" type="text" class="formfld" id="msgnoaccess" size="80" value="<?=htmlspecialchars($pconfig['msgnoaccess']);?>" />
- <br /><?=gettext("Error message displayed for invalid vouchers on captive portal error page"); ?> ($PORTAL_MESSAGE$).
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Expired Voucher Message"); ?></td>
- <td width="78%" class="vtable">
- <input name="msgexpired" type="text" class="formfld" id="msgexpired" size="80" value="<?=htmlspecialchars($pconfig['msgexpired']);?>" />
- <br /><?=gettext("Error message displayed for expired vouchers on captive portal error page"); ?> ($PORTAL_MESSAGE$).
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- &nbsp;
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Voucher database synchronization"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Synchronize Voucher Database IP"); ?></td>
- <td width="78%" class="vtable">
- <input name="vouchersyncdbip" type="text" class="formfld" id="vouchersyncdbip" size="17" value="<?=htmlspecialchars($pconfig['vouchersyncdbip']);?>" />
- <br /><?=gettext("IP address of master nodes webConfigurator to synchronize voucher database and used vouchers from."); ?>
- <br /><?=gettext("NOTE: this should be setup on the slave nodes and not the primary node!"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Voucher sync port"); ?></td>
- <td width="78%" class="vtable">
- <input name="vouchersyncport" type="text" class="formfld" id="vouchersyncport" size="7" value="<?=htmlspecialchars($pconfig['vouchersyncport']);?>" />
- <br /><?=gettext("This is the port of the master voucher nodes webConfigurator. Example: 443"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Voucher sync username"); ?></td>
- <td width="78%" class="vtable">
- <input name="vouchersyncusername" type="text" class="formfld" id="vouchersyncusername" size="25" value="<?=htmlspecialchars($pconfig['vouchersyncusername']);?>" autocomplete="off" />
- <br /><?=gettext("This is the username of the master voucher nodes webConfigurator."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Voucher sync password"); ?></td>
- <td width="78%" class="vtable">
- <input name="vouchersyncpass" type="password" class="formfld" id="vouchersyncpass" size="25" value="<?=htmlspecialchars($pconfig['vouchersyncpass']);?>" autocomplete="off" />
- <br /><?=gettext("This is the password of the master voucher nodes webConfigurator."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input type="hidden" name="zone" id="zone" value="<?=htmlspecialchars($cpzone);?>" />
- <input type="hidden" name="exponent" id="exponent" value="<?=$pconfig['exponent'];?>" />
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true); before_save();" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list">
- <p class="vexpl">
- <span class="red"><strong> <?=gettext("Note:"); ?><br /> </strong></span>
- <?=gettext("Changing any Voucher parameter (apart from managing the list of Rolls) on this page will render existing vouchers useless if they were generated with different settings."); ?>
- <br />
- <?=gettext("Specifying the Voucher Database Synchronization options will not record any other value from the other options. They will be retrieved/synced from the master."); ?>
- </p>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
-enable_change(false);
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_captiveportal_vouchers_edit.php b/usr/local/www/services_captiveportal_vouchers_edit.php
deleted file mode 100644
index 0aa6a45..0000000
--- a/usr/local/www/services_captiveportal_vouchers_edit.php
+++ /dev/null
@@ -1,230 +0,0 @@
-<?php
-/*
- services_captiveportal_vouchers_edit.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2007 Marcel Wiget <mwiget@mac.com>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-services-captiveportal-voucher-edit
-##|*NAME=Services: Captive portal Voucher Rolls page
-##|*DESCR=Allow access to the 'Services: Captive portal Edit Voucher Rolls' page.
-##|*MATCH=services_captiveportal_vouchers_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-require_once("voucher.inc");
-
-$pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Edit Voucher Rolls"));
-$shortcut_section = "captiveportal-vouchers";
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-if (!is_array($config['voucher'])) {
- $config['voucher'] = array();
-}
-
-if (!is_array($config['voucher'][$cpzone]['roll'])) {
- $config['voucher'][$cpzone]['roll'] = array();
-}
-$a_roll = &$config['voucher'][$cpzone]['roll'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_roll[$id]) {
- $pconfig['zone'] = $a_roll[$id]['zone'];
- $pconfig['number'] = $a_roll[$id]['number'];
- $pconfig['count'] = $a_roll[$id]['count'];
- $pconfig['minutes'] = $a_roll[$id]['minutes'];
- $pconfig['descr'] = $a_roll[$id]['descr'];
-}
-
-$maxnumber = (1<<$config['voucher'][$cpzone]['rollbits']) -1; // Highest Roll#
-$maxcount = (1<<$config['voucher'][$cpzone]['ticketbits']) -1; // Highest Ticket#
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "number count minutes");
- $reqdfieldsn = array(gettext("Number"), gettext("Count"), gettext("minutes"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- // Look for duplicate roll #
- foreach ($a_roll as $re) {
- if ($re['number'] == $_POST['number']) {
- $input_errors[] = sprintf(gettext("Roll number %s already exists."), $_POST['number']);
- break;
- }
- }
-
- if (!is_numeric($_POST['number']) || $_POST['number'] >= $maxnumber) {
- $input_errors[] = sprintf(gettext("Roll number must be numeric and less than %s"), $maxnumber);
- }
-
- if (!is_numeric($_POST['count']) || $_POST['count'] < 1 || $_POST['count'] > $maxcount) {
- $input_errors[] = sprintf(gettext("A roll has at least one voucher and less than %s."), $maxcount);
- }
-
- if (!is_numeric($_POST['minutes']) || $_POST['minutes'] < 1) {
- $input_errors[] = gettext("Each voucher must be good for at least 1 minute.");
- }
-
- if (!$input_errors) {
-
- if (isset($id) && $a_roll[$id]) {
- $rollent = $a_roll[$id];
- }
-
- $rollent['zone'] = $_POST['zone'];
- $rollent['number'] = $_POST['number'];
- $rollent['minutes'] = $_POST['minutes'];
- $rollent['descr'] = $_POST['descr'];
-
- /* New Roll or modified voucher count: create bitmask */
- $voucherlck = lock("voucher{$cpzone}");
- if ($_POST['count'] != $rollent['count']) {
- $rollent['count'] = $_POST['count'];
- $len = ($rollent['count']>>3) + 1; // count / 8 +1
- $rollent['used'] = base64_encode(str_repeat("\000", $len)); // 4 bitmask
- $rollent['active'] = array();
- voucher_write_used_db($rollent['number'], $rollent['used']);
- voucher_write_active_db($rollent['number'], array()); // create empty DB
- voucher_log(LOG_INFO, sprintf(gettext('All %1$s vouchers from Roll %2$s marked unused'), $rollent['count'], $rollent['number']));
- } else {
- // existing roll has been modified but without changing the count
- // read active and used DB from ramdisk and store it in XML config
- $rollent['used'] = base64_encode(voucher_read_used_db($rollent['number']));
- $activent = array();
- $db = array();
- $active_vouchers = voucher_read_active_db($rollent['number'], $rollent['minutes']);
- foreach ($active_vouchers as $voucher => $line) {
- list($timestamp, $minutes) = explode(",", $line);
- $activent['voucher'] = $voucher;
- $activent['timestamp'] = $timestamp;
- $activent['minutes'] = $minutes;
- $db[] = $activent;
- }
- $rollent['active'] = $db;
- }
- unlock($voucherlck);
-
- if (isset($id) && $a_roll[$id]) {
- $a_roll[$id] = $rollent;
- } else {
- $a_roll[] = $rollent;
- }
-
- write_config();
-
- header("Location: services_captiveportal_vouchers.php?zone={$cpzone}");
- exit;
- }
-}
-
-include("head.inc");
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<form action="services_captiveportal_vouchers_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="content pane">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Roll"); ?>#</td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="number" type="text" class="formfld" id="number" size="10" value="<?=htmlspecialchars($pconfig['number']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Enter the Roll"); ?># (0..<?=htmlspecialchars($maxnumber);?>) <?=gettext("found on top of the generated/printed vouchers"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Minutes per Ticket"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="minutes" type="text" class="formfld" id="minutes" size="10" value="<?=htmlspecialchars($pconfig['minutes']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Defines the time in minutes that a user is allowed access. The clock starts ticking the first time a voucher is used for authentication"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Count"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="count" type="text" class="formfld" id="count" size="10" value="<?=htmlspecialchars($pconfig['count']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Enter the number of vouchers"); ?> (1..<?=htmlspecialchars($maxcount);?>) <?=gettext("found on top of the generated/printed vouchers. WARNING: Changing this number for an existing Roll will mark all vouchers as unused again"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Comment"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="descr" type="text" class="formfld" id="descr" size="60" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Can be used to further identify this roll. Ignored by the system"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
- <?php if (isset($id) && $a_roll[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_captiveportal_zones.php b/usr/local/www/services_captiveportal_zones.php
deleted file mode 100644
index 6d956b5..0000000
--- a/usr/local/www/services_captiveportal_zones.php
+++ /dev/null
@@ -1,154 +0,0 @@
-<?php
-/*
- services_captiveportal_zones.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-services-captiveportal-zones
-##|*NAME=Services: Captive portal Zones page
-##|*DESCR=Allow access to the 'Services: Captive portal Zones' page.
-##|*MATCH=services_captiveportal_zones.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-
-global $cpzone;
-global $cpzoneid;
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp = &$config['captiveportal'];
-
-if ($_GET['act'] == "del" && !empty($_GET['zone'])) {
- $cpzone = htmlspecialchars($_GET['zone']);
- if ($a_cp[$cpzone]) {
- $cpzoneid = $a_cp[$cpzone]['zoneid'];
- unset($a_cp[$cpzone]['enable']);
- captiveportal_configure_zone($a_cp[$cpzone]);
- unset($a_cp[$cpzone]);
- if (isset($config['voucher'][$cpzone])) {
- unset($config['voucher'][$cpzone]);
- }
- write_config();
- }
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-$pgtitle = array(gettext("Captive Portal"), gettext("Zones"));
-$shortcut_section = "captiveportal";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_captiveportal_zones.php" method="post">
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('captiveportal')): ?><p>
-<?php print_info_box_np(gettext("The CaptivePortal entry list has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?>
-<?php endif; ?>
-
-<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="captive portal">
- <tr>
- <td width="15%" class="listhdrr"><?=gettext("Zone");?></td>
- <td width="30%" class="listhdrr"><?=gettext("Interfaces");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Number of users");?></td>
- <td width="40%" class="listhdrr"><?=gettext("Description");?></td>
- <td width="5%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle" width="17">&nbsp;</td>
- <td valign="middle">
- <a href="services_captiveportal_zones_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new captiveportal instance");?>" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- foreach ($a_cp as $cpzone => $cpitem):
- if (!is_array($cpitem)) {
- continue;
- }
-?>
- <tr>
- <td class="listlr" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';">
- <?=htmlspecialchars($cpitem['zone']);?>
- </td>
- <td class="listlr" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';">
-<?php
- $cpifaces = explode(",", $cpitem['interface']);
- foreach ($cpifaces as $cpiface) {
- echo convert_friendly_interface_to_friendly_descr($cpiface) . " ";
- }
-?>
- </td>
- <td class="listr" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';">
- <?=count(captiveportal_read_db());?>
- </td>
- <td class="listbg" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';">
- <?=htmlspecialchars($cpitem['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle"><a href="services_captiveportal.php?zone=<?=$cpzone?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit captiveportal instance"); ?>" alt="edit" /></a></td>
- <td>
- <a href="services_captiveportal_zones.php?act=del&amp;zone=<?=$cpzone;?>" onclick="return confirm('<?=gettext("Do you really want to delete this entry?");?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete captiveportal instance");?>" alt="delete" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- endforeach;
-?>
- <tr>
- <td class="list" colspan="4"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td valign="middle" width="17">&nbsp;</td>
- <td valign="middle">
- <a href="services_captiveportal_zones_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new captiveportal instance");?>" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_captiveportal_zones_edit.php b/usr/local/www/services_captiveportal_zones_edit.php
deleted file mode 100644
index fa37c80..0000000
--- a/usr/local/www/services_captiveportal_zones_edit.php
+++ /dev/null
@@ -1,124 +0,0 @@
-<?php
-/*
- services_captiveportal_zones_edit.php
- Copyright (C) 2011 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-services-captiveportal-editzones
-##|*NAME=Services: Captive portal: Edit Zones page
-##|*DESCR=Allow access to the 'Services: Captive portal: Edit Zones' page.
-##|*MATCH=services_captiveportal_zones_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-
-$pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Edit Zones"));
-$shortcut_section = "captiveportal";
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "zone");
- $reqdfieldsn = array(gettext("Zone name"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (preg_match('/[^A-Za-z0-9_]/', $_POST['zone'])) {
- $input_errors[] = gettext("The zone name can only contain letters, digits, and underscores (_).");
- }
-
- foreach ($a_cp as $cpkey => $cpent) {
- if ($cpent['zone'] == $_POST['zone']) {
- $input_errors[] = sprintf("[%s] %s.", $_POST['zone'], gettext("already exists"));
- break;
- }
- }
-
- if (!$input_errors) {
- $cpzone = strtolower($_POST['zone']);
- $a_cp[$cpzone] = array();
- $a_cp[$cpzone]['zone'] = str_replace(" ", "", $_POST['zone']);
- $a_cp[$cpzone]['descr'] = $_POST['descr'];
- $a_cp[$cpzone]['localauth_priv'] = true;
- write_config();
-
- header("Location: services_captiveportal.php?zone={$cpzone}");
- exit;
- }
-}
-include("head.inc");
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
- <form action="services_captiveportal_zones_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="captive portal edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit Captive Portal Zones");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Zone name"); ?></td>
- <td width="78%" class="vtable">
- <input name="zone" type="text" class="formfld unknown" id="zone" size="64" />
- <br />
- <span class="vexpl"><?=gettext("Zone name. Can only contain letters, digits, and underscores (_)."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" />
- <br />
- <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Continue"); ?>" />
- </td>
- </tr>
- </table>
- </form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_dhcp.php b/usr/local/www/services_dhcp.php
deleted file mode 100644
index 3061812..0000000
--- a/usr/local/www/services_dhcp.php
+++ /dev/null
@@ -1,1442 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_dhcp.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /bin/rm
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-services-dhcpserver
-##|*NAME=Services: DHCP server page
-##|*DESCR=Allow access to the 'Services: DHCP server' page.
-##|*MATCH=services_dhcp.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("filter.inc");
-
-if (!$g['services_dhcp_server_enable']) {
- header("Location: /");
- exit;
-}
-
-$if = $_GET['if'];
-if (!empty($_POST['if'])) {
- $if = $_POST['if'];
-}
-
-/* if OLSRD is enabled, allow WAN to house DHCP. */
-if ($config['installedpackages']['olsrd']) {
- foreach ($config['installedpackages']['olsrd']['config'] as $olsrd) {
- if ($olsrd['enable']) {
- $is_olsr_enabled = true;
- break;
- }
- }
-}
-
-$iflist = get_configured_interface_with_descr();
-
-/* set the starting interface */
-if (!$if || !isset($iflist[$if])) {
- foreach ($iflist as $ifent => $ifname) {
- $oc = $config['interfaces'][$ifent];
- if ((is_array($config['dhcpd'][$ifent]) && !isset($config['dhcpd'][$ifent]['enable']) && (!is_ipaddrv4($oc['ipaddr']))) ||
- (!is_array($config['dhcpd'][$ifent]) && (!is_ipaddrv4($oc['ipaddr'])))) {
- continue;
- }
- $if = $ifent;
- break;
- }
-}
-
-$act = $_GET['act'];
-if (!empty($_POST['act'])) {
- $act = $_POST['act'];
-}
-
-$a_pools = array();
-
-if (is_array($config['dhcpd'][$if])) {
- $pool = $_GET['pool'];
- if (is_numeric($_POST['pool'])) {
- $pool = $_POST['pool'];
- }
-
- // If we have a pool but no interface name, that's not valid. Redirect away.
- if (is_numeric($pool) && empty($if)) {
- header("Location: services_dhcp.php");
- exit;
- }
-
- if (!is_array($config['dhcpd'][$if]['pool'])) {
- $config['dhcpd'][$if]['pool'] = array();
- }
- $a_pools = &$config['dhcpd'][$if]['pool'];
-
- if (is_numeric($pool) && $a_pools[$pool]) {
- $dhcpdconf = &$a_pools[$pool];
- } elseif ($act == "newpool") {
- $dhcpdconf = array();
- } else {
- $dhcpdconf = &$config['dhcpd'][$if];
- }
-}
-if (is_array($dhcpdconf)) {
- // Global Options
- if (!is_numeric($pool) && !($act == "newpool")) {
- $pconfig['enable'] = isset($dhcpdconf['enable']);
- $pconfig['staticarp'] = isset($dhcpdconf['staticarp']);
- // No reason to specify this per-pool, per the dhcpd.conf man page it needs to be in every
- // pool and should be specified in every pool both nodes share, so we'll treat it as global
- $pconfig['failover_peerip'] = $dhcpdconf['failover_peerip'];
-
- // dhcpleaseinlocaltime is global to all interfaces. So if it is selected on any interface,
- // then show it true/checked.
- foreach ($config['dhcpd'] as $dhcpdifitem) {
- $dhcpleaseinlocaltime = $dhcpdifitem['dhcpleaseinlocaltime'];
- if ($dhcpleaseinlocaltime) {
- break;
- }
- }
-
- $pconfig['dhcpleaseinlocaltime'] = $dhcpleaseinlocaltime;
-
- if (!is_array($dhcpdconf['staticmap'])) {
- $dhcpdconf['staticmap'] = array();
- }
- $a_maps = &$dhcpdconf['staticmap'];
- } else {
- // Options that exist only in pools
- $pconfig['descr'] = $dhcpdconf['descr'];
- }
-
- // Options that can be global or per-pool.
- if (is_array($dhcpdconf['range'])) {
- $pconfig['range_from'] = $dhcpdconf['range']['from'];
- $pconfig['range_to'] = $dhcpdconf['range']['to'];
- }
- $pconfig['deftime'] = $dhcpdconf['defaultleasetime'];
- $pconfig['maxtime'] = $dhcpdconf['maxleasetime'];
- $pconfig['gateway'] = $dhcpdconf['gateway'];
- $pconfig['domain'] = $dhcpdconf['domain'];
- $pconfig['domainsearchlist'] = $dhcpdconf['domainsearchlist'];
- list($pconfig['wins1'], $pconfig['wins2']) = $dhcpdconf['winsserver'];
- list($pconfig['dns1'], $pconfig['dns2'], $pconfig['dns3'], $pconfig['dns4']) = $dhcpdconf['dnsserver'];
- $pconfig['denyunknown'] = isset($dhcpdconf['denyunknown']);
- $pconfig['ddnsdomain'] = $dhcpdconf['ddnsdomain'];
- $pconfig['ddnsdomainprimary'] = $dhcpdconf['ddnsdomainprimary'];
- $pconfig['ddnsdomainkeyname'] = $dhcpdconf['ddnsdomainkeyname'];
- $pconfig['ddnsdomainkey'] = $dhcpdconf['ddnsdomainkey'];
- $pconfig['ddnsupdate'] = isset($dhcpdconf['ddnsupdate']);
- $pconfig['mac_allow'] = $dhcpdconf['mac_allow'];
- $pconfig['mac_deny'] = $dhcpdconf['mac_deny'];
- list($pconfig['ntp1'], $pconfig['ntp2']) = $dhcpdconf['ntpserver'];
- $pconfig['tftp'] = $dhcpdconf['tftp'];
- $pconfig['ldap'] = $dhcpdconf['ldap'];
- $pconfig['netboot'] = isset($dhcpdconf['netboot']);
- $pconfig['nextserver'] = $dhcpdconf['nextserver'];
- $pconfig['filename'] = $dhcpdconf['filename'];
- $pconfig['filename32'] = $dhcpdconf['filename32'];
- $pconfig['filename64'] = $dhcpdconf['filename64'];
- $pconfig['rootpath'] = $dhcpdconf['rootpath'];
- $pconfig['netmask'] = $dhcpdconf['netmask'];
- $pconfig['numberoptions'] = $dhcpdconf['numberoptions'];
-}
-
-$ifcfgip = $config['interfaces'][$if]['ipaddr'];
-$ifcfgsn = $config['interfaces'][$if]['subnet'];
-
-function validate_partial_mac_list($maclist) {
- $macs = explode(',', $maclist);
-
- // Loop through and look for invalid MACs.
- foreach ($macs as $mac) {
- if (!is_macaddr($mac, true)) {
- return false;
- }
- }
- return true;
-}
-
-if (isset($_POST['submit'])) {
-
- unset($input_errors);
-
- $pconfig = $_POST;
-
- $numberoptions = array();
- for ($x = 0; $x < 99; $x++) {
- if (isset($_POST["number{$x}"]) && ctype_digit($_POST["number{$x}"])) {
- $numbervalue = array();
- $numbervalue['number'] = htmlspecialchars($_POST["number{$x}"]);
- $numbervalue['type'] = htmlspecialchars($_POST["itemtype{$x}"]);
- $numbervalue['value'] = str_replace('&quot;', '"', htmlspecialchars($_POST["value{$x}"]));
- $numberoptions['item'][] = $numbervalue;
- }
- }
- // Reload the new pconfig variable that the form uses.
- $pconfig['numberoptions'] = $numberoptions;
-
- /* input validation */
- if ($_POST['enable'] || is_numeric($pool) || $act == "newpool") {
- $reqdfields = explode(" ", "range_from range_to");
- $reqdfieldsn = array(gettext("Range begin"), gettext("Range end"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (($_POST['range_from'] && !is_ipaddrv4($_POST['range_from']))) {
- $input_errors[] = gettext("A valid range must be specified.");
- }
- if (($_POST['range_to'] && !is_ipaddrv4($_POST['range_to']))) {
- $input_errors[] = gettext("A valid range must be specified.");
- }
- if (($_POST['gateway'] && $_POST['gateway'] != "none" && !is_ipaddrv4($_POST['gateway']))) {
- $input_errors[] = gettext("A valid IP address must be specified for the gateway.");
- }
- if (($_POST['wins1'] && !is_ipaddrv4($_POST['wins1'])) || ($_POST['wins2'] && !is_ipaddrv4($_POST['wins2']))) {
- $input_errors[] = gettext("A valid IP address must be specified for the primary/secondary WINS servers.");
- }
- $parent_ip = get_interface_ip($_POST['if']);
- if (is_ipaddrv4($parent_ip) && $_POST['gateway'] && $_POST['gateway'] != "none") {
- $parent_sn = get_interface_subnet($_POST['if']);
- if (!ip_in_subnet($_POST['gateway'], gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn) && !ip_in_interface_alias_subnet($_POST['if'], $_POST['gateway'])) {
- $input_errors[] = sprintf(gettext("The gateway address %s does not lie within the chosen interface's subnet."), $_POST['gateway']);
- }
- }
- if (($_POST['dns1'] && !is_ipaddrv4($_POST['dns1'])) || ($_POST['dns2'] && !is_ipaddrv4($_POST['dns2'])) || ($_POST['dns3'] && !is_ipaddrv4($_POST['dns3'])) || ($_POST['dns4'] && !is_ipaddrv4($_POST['dns4']))) {
- $input_errors[] = gettext("A valid IP address must be specified for each of the DNS servers.");
- }
-
- if ($_POST['deftime'] && (!is_numeric($_POST['deftime']) || ($_POST['deftime'] < 60))) {
- $input_errors[] = gettext("The default lease time must be at least 60 seconds.");
- }
-
- if (isset($config['captiveportal']) && is_array($config['captiveportal'])) {
- $deftime = 7200; // Default value if it's empty
- if (is_numeric($_POST['deftime'])) {
- $deftime = $_POST['deftime'];
- }
-
- foreach ($config['captiveportal'] as $cpZone => $cpdata) {
- if (!isset($cpdata['enable'])) {
- continue;
- }
- if (!isset($cpdata['timeout']) || !is_numeric($cpdata['timeout'])) {
- continue;
- }
- $cp_ifs = explode(',', $cpdata['interface']);
- if (!in_array($if, $cp_ifs)) {
- continue;
- }
- if ($cpdata['timeout'] > $deftime) {
- $input_errors[] = sprintf(gettext(
- "The Captive Portal zone '%s' has Hard Timeout parameter set to a value bigger than Default lease time (%s)."), $cpZone, $deftime);
- }
- }
- }
-
- if ($_POST['maxtime'] && (!is_numeric($_POST['maxtime']) || ($_POST['maxtime'] < 60) || ($_POST['maxtime'] <= $_POST['deftime']))) {
- $input_errors[] = gettext("The maximum lease time must be at least 60 seconds and higher than the default lease time.");
- }
- if (($_POST['ddnsdomain'] && !is_domain($_POST['ddnsdomain']))) {
- $input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration.");
- }
- if (($_POST['ddnsdomain'] && !is_ipaddrv4($_POST['ddnsdomainprimary']))) {
- $input_errors[] = gettext("A valid primary domain name server IP address must be specified for the dynamic domain name.");
- }
- if (($_POST['ddnsdomainkey'] && !$_POST['ddnsdomainkeyname']) ||
- ($_POST['ddnsdomainkeyname'] && !$_POST['ddnsdomainkey'])) {
- $input_errors[] = gettext("You must specify both a valid domain key and key name.");
- }
- if ($_POST['domainsearchlist']) {
- $domain_array = preg_split("/[ ;]+/", $_POST['domainsearchlist']);
- foreach ($domain_array as $curdomain) {
- if (!is_domain($curdomain)) {
- $input_errors[] = gettext("A valid domain search list must be specified.");
- break;
- }
- }
- }
-
- // Validate MACs
- if (!empty($_POST['mac_allow']) && !validate_partial_mac_list($_POST['mac_allow'])) {
- $input_errors[] = gettext("If you specify a mac allow list, it must contain only valid partial MAC addresses.");
- }
- if (!empty($_POST['mac_deny']) && !validate_partial_mac_list($_POST['mac_deny'])) {
- $input_errors[] = gettext("If you specify a mac deny list, it must contain only valid partial MAC addresses.");
- }
-
- if (($_POST['ntp1'] && !is_ipaddrv4($_POST['ntp1'])) || ($_POST['ntp2'] && !is_ipaddrv4($_POST['ntp2']))) {
- $input_errors[] = gettext("A valid IP address must be specified for the primary/secondary NTP servers.");
- }
- if (($_POST['domain'] && !is_domain($_POST['domain']))) {
- $input_errors[] = gettext("A valid domain name must be specified for the DNS domain.");
- }
- if ($_POST['tftp'] && !is_ipaddrv4($_POST['tftp']) && !is_domain($_POST['tftp']) && !is_URL($_POST['tftp'])) {
- $input_errors[] = gettext("A valid IP address or hostname must be specified for the TFTP server.");
- }
- if (($_POST['nextserver'] && !is_ipaddrv4($_POST['nextserver']))) {
- $input_errors[] = gettext("A valid IP address must be specified for the network boot server.");
- }
-
- if (gen_subnet($ifcfgip, $ifcfgsn) == $_POST['range_from']) {
- $input_errors[] = gettext("You cannot use the network address in the starting subnet range.");
- }
- if (gen_subnet_max($ifcfgip, $ifcfgsn) == $_POST['range_to']) {
- $input_errors[] = gettext("You cannot use the broadcast address in the ending subnet range.");
- }
-
- // Disallow a range that includes the virtualip
- if (is_array($config['virtualip']['vip'])) {
- foreach ($config['virtualip']['vip'] as $vip) {
- if ($vip['interface'] == $if) {
- if ($vip['subnet'] && is_inrange_v4($vip['subnet'], $_POST['range_from'], $_POST['range_to'])) {
- $input_errors[] = sprintf(gettext("The subnet range cannot overlap with virtual IP address %s."), $vip['subnet']);
- }
- }
- }
- }
-
- $noip = false;
- if (is_array($a_maps)) {
- foreach ($a_maps as $map) {
- if (empty($map['ipaddr'])) {
- $noip = true;
- }
- }
- }
- if ($_POST['staticarp'] && $noip) {
- $input_errors[] = "Cannot enable static ARP when you have static map entries without IP addresses. Ensure all static maps have IP addresses and try again.";
- }
-
- if (is_array($pconfig['numberoptions']['item'])) {
- foreach ($pconfig['numberoptions']['item'] as $numberoption) {
- if ($numberoption['type'] == 'text' && strstr($numberoption['value'], '"')) {
- $input_errors[] = gettext("Text type cannot include quotation marks.");
- } else if ($numberoption['type'] == 'string' && !preg_match('/^"[^"]*"$/', $numberoption['value']) && !preg_match('/^[0-9a-f]{2}(?:\:[0-9a-f]{2})*$/i', $numberoption['value'])) {
- $input_errors[] = gettext("String type must be enclosed in quotes like \"this\" or must be a series of octets specified in hexadecimal, separated by colons, like 01:23:45:67:89:ab:cd:ef");
- } else if ($numberoption['type'] == 'boolean' && $numberoption['value'] != 'true' && $numberoption['value'] != 'false' && $numberoption['value'] != 'on' && $numberoption['value'] != 'off') {
- $input_errors[] = gettext("Boolean type must be true, false, on, or off.");
- } else if ($numberoption['type'] == 'unsigned integer 8' && (!is_numeric($numberoption['value']) || $numberoption['value'] < 0 || $numberoption['value'] > 255)) {
- $input_errors[] = gettext("Unsigned 8-bit integer type must be a number in the range 0 to 255.");
- } else if ($numberoption['type'] == 'unsigned integer 16' && (!is_numeric($numberoption['value']) || $numberoption['value'] < 0 || $numberoption['value'] > 65535)) {
- $input_errors[] = gettext("Unsigned 16-bit integer type must be a number in the range 0 to 65535.");
- } else if ($numberoption['type'] == 'unsigned integer 32' && (!is_numeric($numberoption['value']) || $numberoption['value'] < 0 || $numberoption['value'] > 4294967295)) {
- $input_errors[] = gettext("Unsigned 32-bit integer type must be a number in the range 0 to 4294967295.");
- } else if ($numberoption['type'] == 'signed integer 8' && (!is_numeric($numberoption['value']) || $numberoption['value'] < -128 || $numberoption['value'] > 127)) {
- $input_errors[] = gettext("Signed 8-bit integer type must be a number in the range -128 to 127.");
- } else if ($numberoption['type'] == 'signed integer 16' && (!is_numeric($numberoption['value']) || $numberoption['value'] < -32768 || $numberoption['value'] > 32767)) {
- $input_errors[] = gettext("Signed 16-bit integer type must be a number in the range -32768 to 32767.");
- } else if ($numberoption['type'] == 'signed integer 32' && (!is_numeric($numberoption['value']) || $numberoption['value'] < -2147483648 || $numberoption['value'] > 2147483647)) {
- $input_errors[] = gettext("Signed 32-bit integer type must be a number in the range -2147483648 to 2147483647.");
- } else if ($numberoption['type'] == 'ip-address' && !is_ipaddrv4($numberoption['value']) && !is_hostname($numberoption['value'])) {
- $input_errors[] = gettext("IP address or host type must be an IP address or host name.");
- }
- }
- }
-
- if (!$input_errors) {
- /* make sure the range lies within the current subnet */
- $subnet_start = ip2ulong(long2ip32(ip2long($ifcfgip) & gen_subnet_mask_long($ifcfgsn)));
- $subnet_end = ip2ulong(long2ip32(ip2long($ifcfgip) | (~gen_subnet_mask_long($ifcfgsn))));
-
- if ((ip2ulong($_POST['range_from']) < $subnet_start) || (ip2ulong($_POST['range_from']) > $subnet_end) ||
- (ip2ulong($_POST['range_to']) < $subnet_start) || (ip2ulong($_POST['range_to']) > $subnet_end)) {
- $input_errors[] = gettext("The specified range lies outside of the current subnet.");
- }
-
- if (ip2ulong($_POST['range_from']) > ip2ulong($_POST['range_to'])) {
- $input_errors[] = gettext("The range is invalid (first element higher than second element).");
- }
-
- if (is_numeric($pool) || ($act == "newpool")) {
- $rfrom = $config['dhcpd'][$if]['range']['from'];
- $rto = $config['dhcpd'][$if]['range']['to'];
-
- if (is_inrange_v4($_POST['range_from'], $rfrom, $rto) || is_inrange_v4($_POST['range_to'], $rfrom, $rto)) {
- $input_errors[] = gettext("The specified range must not be within the DHCP range for this interface.");
- }
- }
-
- foreach ($a_pools as $id => $p) {
- if (is_numeric($pool) && ($id == $pool)) {
- continue;
- }
-
- if (is_inrange_v4($_POST['range_from'], $p['range']['from'], $p['range']['to']) ||
- is_inrange_v4($_POST['range_to'], $p['range']['from'], $p['range']['to'])) {
- $input_errors[] = gettext("The specified range must not be within the range configured on a DHCP pool for this interface.");
- break;
- }
- }
-
- /* make sure that the DHCP Relay isn't enabled on this interface */
- if (isset($config['dhcrelay']['enable']) && (stristr($config['dhcrelay']['interface'], $if) !== false)) {
- $input_errors[] = sprintf(gettext("You must disable the DHCP relay on the %s interface before enabling the DHCP server."), $iflist[$if]);
- }
-
- $dynsubnet_start = ip2ulong($_POST['range_from']);
- $dynsubnet_end = ip2ulong($_POST['range_to']);
- if (is_array($a_maps)) {
- foreach ($a_maps as $map) {
- if (empty($map['ipaddr'])) {
- continue;
- }
- if ((ip2ulong($map['ipaddr']) > $dynsubnet_start) &&
- (ip2ulong($map['ipaddr']) < $dynsubnet_end)) {
- $input_errors[] = sprintf(gettext("The DHCP range cannot overlap any static DHCP mappings."));
- break;
- }
- }
- }
- }
- }
-
- if (!$input_errors) {
- if (!is_numeric($pool)) {
- if ($act == "newpool") {
- $dhcpdconf = array();
- } else {
- if (!is_array($config['dhcpd'][$if])) {
- $config['dhcpd'][$if] = array();
- }
- $dhcpdconf = $config['dhcpd'][$if];
- }
- } else {
- if (is_array($a_pools[$pool])) {
- $dhcpdconf = $a_pools[$pool];
- } else {
- // Someone specified a pool but it doesn't exist. Punt.
- header("Location: services_dhcp.php");
- exit;
- }
- }
- if (!is_array($dhcpdconf['range'])) {
- $dhcpdconf['range'] = array();
- }
-
- $dhcpd_enable_changed = false;
-
- // Global Options
- if (!is_numeric($pool) && !($act == "newpool")) {
- $old_dhcpd_enable = isset($dhcpdconf['enable']);
- $new_dhcpd_enable = ($_POST['enable']) ? true : false;
- if ($old_dhcpd_enable != $new_dhcpd_enable) {
- /* DHCP has been enabled or disabled. The pf ruleset will need to be rebuilt to allow or disallow DHCP. */
- $dhcpd_enable_changed = true;
- }
- $dhcpdconf['enable'] = $new_dhcpd_enable;
- $dhcpdconf['staticarp'] = ($_POST['staticarp']) ? true : false;
- $previous = $dhcpdconf['failover_peerip'];
- if ($previous <> $_POST['failover_peerip']) {
- mwexec("/bin/rm -rf /var/dhcpd/var/db/*");
- }
- $dhcpdconf['failover_peerip'] = $_POST['failover_peerip'];
- // dhcpleaseinlocaltime is global to all interfaces. So update the setting on all interfaces.
- foreach ($config['dhcpd'] as &$dhcpdifitem) {
- $dhcpdifitem['dhcpleaseinlocaltime'] = $_POST['dhcpleaseinlocaltime'];
- }
- } else {
- // Options that exist only in pools
- $dhcpdconf['descr'] = $_POST['descr'];
- }
-
- // Options that can be global or per-pool.
- $dhcpdconf['range']['from'] = $_POST['range_from'];
- $dhcpdconf['range']['to'] = $_POST['range_to'];
- $dhcpdconf['defaultleasetime'] = $_POST['deftime'];
- $dhcpdconf['maxleasetime'] = $_POST['maxtime'];
- $dhcpdconf['netmask'] = $_POST['netmask'];
-
- unset($dhcpdconf['winsserver']);
- if ($_POST['wins1']) {
- $dhcpdconf['winsserver'][] = $_POST['wins1'];
- }
- if ($_POST['wins2']) {
- $dhcpdconf['winsserver'][] = $_POST['wins2'];
- }
-
- unset($dhcpdconf['dnsserver']);
- if ($_POST['dns1']) {
- $dhcpdconf['dnsserver'][] = $_POST['dns1'];
- }
- if ($_POST['dns2']) {
- $dhcpdconf['dnsserver'][] = $_POST['dns2'];
- }
- if ($_POST['dns3']) {
- $dhcpdconf['dnsserver'][] = $_POST['dns3'];
- }
- if ($_POST['dns4']) {
- $dhcpdconf['dnsserver'][] = $_POST['dns4'];
- }
-
- $dhcpdconf['gateway'] = $_POST['gateway'];
- $dhcpdconf['domain'] = $_POST['domain'];
- $dhcpdconf['domainsearchlist'] = $_POST['domainsearchlist'];
- $dhcpdconf['denyunknown'] = ($_POST['denyunknown']) ? true : false;
- $dhcpdconf['ddnsdomain'] = $_POST['ddnsdomain'];
- $dhcpdconf['ddnsdomainprimary'] = $_POST['ddnsdomainprimary'];
- $dhcpdconf['ddnsdomainkeyname'] = $_POST['ddnsdomainkeyname'];
- $dhcpdconf['ddnsdomainkey'] = $_POST['ddnsdomainkey'];
- $dhcpdconf['ddnsupdate'] = ($_POST['ddnsupdate']) ? true : false;
- $dhcpdconf['mac_allow'] = $_POST['mac_allow'];
- $dhcpdconf['mac_deny'] = $_POST['mac_deny'];
-
- unset($dhcpdconf['ntpserver']);
- if ($_POST['ntp1']) {
- $dhcpdconf['ntpserver'][] = $_POST['ntp1'];
- }
- if ($_POST['ntp2']) {
- $dhcpdconf['ntpserver'][] = $_POST['ntp2'];
- }
-
- $dhcpdconf['tftp'] = $_POST['tftp'];
- $dhcpdconf['ldap'] = $_POST['ldap'];
- $dhcpdconf['netboot'] = ($_POST['netboot']) ? true : false;
- $dhcpdconf['nextserver'] = $_POST['nextserver'];
- $dhcpdconf['filename'] = $_POST['filename'];
- $dhcpdconf['filename32'] = $_POST['filename32'];
- $dhcpdconf['filename64'] = $_POST['filename64'];
- $dhcpdconf['rootpath'] = $_POST['rootpath'];
-
- // Handle the custom options rowhelper
- if (isset($dhcpdconf['numberoptions']['item'])) {
- unset($dhcpdconf['numberoptions']['item']);
- }
-
- $dhcpdconf['numberoptions'] = $numberoptions;
-
- if (is_numeric($pool) && is_array($a_pools[$pool])) {
- $a_pools[$pool] = $dhcpdconf;
- } elseif ($act == "newpool") {
- $a_pools[] = $dhcpdconf;
- } else {
- $config['dhcpd'][$if] = $dhcpdconf;
- }
-
- write_config();
- }
-}
-
-if ((isset($_POST['submit']) || isset($_POST['apply'])) && (!$input_errors)) {
- $retval = 0;
- $retvaldhcp = 0;
- $retvaldns = 0;
- /* dnsmasq_configure calls dhcpd_configure */
- /* no need to restart dhcpd twice */
- if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstatic'])) {
- $retvaldns = services_dnsmasq_configure();
- if ($retvaldns == 0) {
- clear_subsystem_dirty('hosts');
- clear_subsystem_dirty('staticmaps');
- }
- } else if (isset($config['unbound']['enable']) && isset($config['unbound']['regdhcpstatic'])) {
- $retvaldns = services_unbound_configure();
- if ($retvaldns == 0) {
- clear_subsystem_dirty('unbound');
- clear_subsystem_dirty('hosts');
- clear_subsystem_dirty('staticmaps');
- }
- } else {
- $retvaldhcp = services_dhcpd_configure();
- if ($retvaldhcp == 0) {
- clear_subsystem_dirty('staticmaps');
- }
- }
- if ($dhcpd_enable_changed) {
- $retvalfc = filter_configure();
- }
-
- if ($retvaldhcp == 1 || $retvaldns == 1 || $retvalfc == 1) {
- $retval = 1;
- }
- $savemsg = get_std_save_message($retval);
-}
-
-if ($act == "delpool") {
- if ($a_pools[$_GET['id']]) {
- unset($a_pools[$_GET['id']]);
- write_config();
- header("Location: services_dhcp.php?if={$if}");
- exit;
- }
-}
-
-if ($act == "del") {
- if ($a_maps[$_GET['id']]) {
- unset($a_maps[$_GET['id']]);
- write_config();
- if (isset($config['dhcpd'][$if]['enable'])) {
- mark_subsystem_dirty('staticmaps');
- if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstatic'])) {
- mark_subsystem_dirty('hosts');
- }
- }
- header("Location: services_dhcp.php?if={$if}");
- exit;
- }
-}
-
-$closehead = false;
-$pgtitle = array(gettext("Services"), gettext("DHCP server"));
-$shortcut_section = "dhcp";
-
-include("head.inc");
-
-?>
-
-<script type="text/javascript" src="/javascript/row_helper.js">
-</script>
-
-<script type="text/javascript">
-//<![CDATA[
- function itemtype_field(fieldname, fieldsize, n) {
- return '<select name="' + fieldname + n + '" class="formselect" id="' + fieldname + n + '"><?php
- $customitemtypes = array('text' => gettext('Text'), 'string' => gettext('String'), 'boolean' => gettext('Boolean'),
- 'unsigned integer 8' => gettext('Unsigned 8-bit integer'), 'unsigned integer 16' => gettext('Unsigned 16-bit integer'), 'unsigned integer 32' => gettext('Unsigned 32-bit integer'),
- 'signed integer 8' => gettext('Signed 8-bit integer'), 'signed integer 16' => gettext('Signed 16-bit integer'), 'signed integer 32' => gettext('Signed 32-bit integer'), 'ip-address' => gettext('IP address or host'));
- foreach ($customitemtypes as $typename => $typedescr) {
- echo "<option value=\"{$typename}\">{$typedescr}<\/option>";
- }
- ?><\/select>';
- }
-
- rowname[0] = "number";
- rowtype[0] = "textbox";
- rowsize[0] = "10";
- rowname[1] = "itemtype";
- rowtype[1] = itemtype_field;
- rowname[2] = "value";
- rowtype[2] = "textbox";
- rowsize[2] = "40";
-//]]>
-</script>
-
-<script type="text/javascript">
-//<![CDATA[
- function enable_change(enable_over) {
- var endis;
- <?php if (is_numeric($pool) || ($act == "newpool")): ?>
- enable_over = true;
- <?php endif; ?>
- endis = !(document.iform.enable.checked || enable_over);
- <?php if (is_numeric($pool) || ($act == "newpool")): ?>
- document.iform.descr.disabled = endis;
- <?php endif; ?>
- document.iform.range_from.disabled = endis;
- document.iform.range_to.disabled = endis;
- document.iform.wins1.disabled = endis;
- document.iform.wins2.disabled = endis;
- document.iform.dns1.disabled = endis;
- document.iform.dns2.disabled = endis;
- document.iform.dns3.disabled = endis;
- document.iform.dns4.disabled = endis;
- document.iform.deftime.disabled = endis;
- document.iform.maxtime.disabled = endis;
- document.iform.gateway.disabled = endis;
- document.iform.failover_peerip.disabled = endis;
- document.iform.domain.disabled = endis;
- document.iform.domainsearchlist.disabled = endis;
- document.iform.staticarp.disabled = endis;
- document.iform.dhcpleaseinlocaltime.disabled = endis;
- document.iform.ddnsdomain.disabled = endis;
- document.iform.ddnsdomainprimary.disabled = endis;
- document.iform.ddnsdomainkeyname.disabled = endis;
- document.iform.ddnsdomainkey.disabled = endis;
- document.iform.ddnsupdate.disabled = endis;
- document.iform.mac_allow.disabled = endis;
- document.iform.mac_deny.disabled = endis;
- document.iform.ntp1.disabled = endis;
- document.iform.ntp2.disabled = endis;
- document.iform.tftp.disabled = endis;
- document.iform.ldap.disabled = endis;
- document.iform.netboot.disabled = endis;
- document.iform.nextserver.disabled = endis;
- document.iform.filename.disabled = endis;
- document.iform.filename32.disabled = endis;
- document.iform.filename64.disabled = endis;
- document.iform.rootpath.disabled = endis;
- document.iform.denyunknown.disabled = endis;
- }
-
- function show_shownumbervalue() {
- document.getElementById("shownumbervaluebox").innerHTML='';
- aodiv = document.getElementById('shownumbervalue');
- aodiv.style.display = "block";
- }
-
- function show_ddns_config() {
- document.getElementById("showddnsbox").innerHTML='';
- aodiv = document.getElementById('showddns');
- aodiv.style.display = "block";
- }
-
- function show_maccontrol_config() {
- document.getElementById("showmaccontrolbox").innerHTML='';
- aodiv = document.getElementById('showmaccontrol');
- aodiv.style.display = "block";
- }
-
- function show_ntp_config() {
- document.getElementById("showntpbox").innerHTML='';
- aodiv = document.getElementById('showntp');
- aodiv.style.display = "block";
- }
-
- function show_tftp_config() {
- document.getElementById("showtftpbox").innerHTML='';
- aodiv = document.getElementById('showtftp');
- aodiv.style.display = "block";
- }
-
- function show_ldap_config() {
- document.getElementById("showldapbox").innerHTML='';
- aodiv = document.getElementById('showldap');
- aodiv.style.display = "block";
- }
-
- function show_netboot_config() {
- document.getElementById("shownetbootbox").innerHTML='';
- aodiv = document.getElementById('shownetboot');
- aodiv.style.display = "block";
- }
-//]]>
-</script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_dhcp.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php
- if (isset($config['dhcrelay']['enable'])) {
- echo gettext("DHCP Relay is currently enabled. Cannot enable the DHCP Server service while the DHCP Relay is enabled on any interface.");
- include("fend.inc");
- echo "</body>";
- echo "</html>";
- exit;
- }
-?>
-<?php if (is_subsystem_dirty('staticmaps')): ?><br/>
-<?php print_info_box_np(gettext("The static mapping configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcp server">
- <tr>
- <td>
-<?php
- /* active tabs */
- $tab_array = array();
- $tabscounter = 0;
- $i = 0;
- foreach ($iflist as $ifent => $ifname) {
- $oc = $config['interfaces'][$ifent];
- if ((is_array($config['dhcpd'][$ifent]) && !isset($config['dhcpd'][$ifent]['enable']) && (!is_ipaddrv4($oc['ipaddr']))) ||
- (!is_array($config['dhcpd'][$ifent]) && (!is_ipaddrv4($oc['ipaddr'])))) {
- continue;
- }
- if ($ifent == $if) {
- $active = true;
- } else {
- $active = false;
- }
- $tab_array[] = array($ifname, $active, "services_dhcp.php?if={$ifent}");
- $tabscounter++;
- }
- if ($tabscounter == 0) {
- echo "<b>" . gettext("The DHCP Server can only be enabled on interfaces configured with a static IPv4 address. This system has none.") . "<br/><br/>";
- echo "</td></tr></table></form>";
- include("fend.inc");
- echo "</body>";
- echo "</html>";
- exit;
- }
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <?php if (!is_numeric($pool) && !($act == "newpool")): ?>
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable">
- <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
- <strong><?php printf(gettext("Enable DHCP server on %s interface"), htmlspecialchars($iflist[$if]));?></strong>
- </td>
- </tr>
- <?php else: ?>
- <tr>
- <td colspan="2" class="listtopic"><?php echo gettext("Editing Pool-Specific Options. To return to the Interface, click its tab above."); ?></td>
- </tr>
- <?php endif; ?>
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable">
- <input name="denyunknown" id="denyunknown" type="checkbox" value="yes" <?php if ($pconfig['denyunknown']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Deny unknown clients");?></strong><br />
- <?=gettext("If this is checked, only the clients defined below will get DHCP leases from this server. ");?>
- </td>
- </tr>
- <?php if (is_numeric($pool) || ($act == "newpool")): ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Pool Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="20" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- </td>
- </tr>
- <?php endif; ?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet");?></td>
- <td width="78%" class="vtable">
- <?=gen_subnet($ifcfgip, $ifcfgsn);?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet mask");?></td>
- <td width="78%" class="vtable">
- <?=gen_subnet_mask($ifcfgsn);?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Available range");?></td>
- <td width="78%" class="vtable">
- <?php
- $range_from = ip2long(long2ip32(ip2long($ifcfgip) & gen_subnet_mask_long($ifcfgsn)));
- $range_from++;
- echo long2ip32($range_from);
- ?>
- -
- <?php
- $range_to = ip2long(long2ip32(ip2long($ifcfgip) | (~gen_subnet_mask_long($ifcfgsn))));
- $range_to--;
- echo long2ip32($range_to);
- if (is_numeric($pool) || ($act == "newpool")):
- ?>
- <br />In-use DHCP Pool Ranges:
- <?php
- if (is_array($config['dhcpd'][$if]['range'])):
- ?>
- <br />
- <?php
- echo $config['dhcpd'][$if]['range']['from'];
- ?>
- -
- <?php
- echo $config['dhcpd'][$if]['range']['to'];
- endif;
- ?>
- <?php
- foreach ($a_pools as $p):
- if (is_array($p['range'])):
- ?>
- <br />
- <?php
- echo $p['range']['from'];
- ?>
- -
- <?php
- echo $p['range']['to'];
- endif;
- endforeach;
- endif;
- ?>
- </td>
- </tr>
-<?php if ($is_olsr_enabled): ?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet Mask");?></td>
- <td width="78%" class="vtable">
- <select name="netmask" class="formselect" id="netmask">
- <?php
- for ($i = 32; $i > 0; $i--) {
- if ($i <> 31) {
- echo "<option value=\"{$i}\" ";
- if ($i == $pconfig['netmask']) {
- echo "selected=\"selected\"";
- }
- echo ">" . $i . "</option>";
- }
- }
- ?>
- </select>
- </td>
- </tr>
-<?php endif; ?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Range");?></td>
- <td width="78%" class="vtable">
- <input name="range_from" type="text" class="formfld unknown" id="range_from" size="20" value="<?=htmlspecialchars($pconfig['range_from']);?>" />
- &nbsp;<?=gettext("to"); ?>&nbsp; <input name="range_to" type="text" class="formfld unknown" id="range_to" size="20" value="<?=htmlspecialchars($pconfig['range_to']);?>" />
- </td>
- </tr>
-<?php
- if (!is_numeric($pool) && !($act == "newpool")):
-?>
- <tr>
- <td width="22%" valign="top" class="vncell">
- <?=gettext("Additional Pools");?>
- </td>
- <td width="78%" class="vtable">
- <?php echo gettext("If you need additional pools of addresses inside of this subnet outside the above Range, they may be specified here."); ?>
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="subnet">
- <tr>
- <td width="35%" class="listhdrr"><?=gettext("Pool Start");?></td>
- <td width="35%" class="listhdrr"><?=gettext("Pool End");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Description");?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="pool">
- <tr>
- <td valign="middle" width="17"></td>
- <td valign="middle">
- <a href="services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;act=newpool"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="plus" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- if (is_array($a_pools)):
- $i = 0;
- foreach ($a_pools as $poolent):
- if (!empty($poolent['range']['from']) && !empty($poolent['range']['to'])):
-?>
- <tr>
- <td class="listlr" ondblclick="document.location='services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;pool=<?=$i;?>';">
- <?=htmlspecialchars($poolent['range']['from']);?>
- </td>
- <td class="listr" ondblclick="document.location='services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;pool=<?=$i;?>';">
- <?=htmlspecialchars($poolent['range']['to']);?>&nbsp;
- </td>
- <td class="listr" ondblclick="document.location='services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;pool=<?=$i;?>';">
- <?=htmlspecialchars($poolent['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle">
- <a href="services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;pool=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
- </td>
- <td valign="middle">
- <a href="services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;act=delpool&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this pool?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- endif;
- $i++;
- endforeach;
- endif;
-?>
- <tr>
- <td class="list" colspan="3"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td valign="middle" width="17"></td>
- <td valign="middle">
- <a href="services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;act=newpool"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- endif;
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("WINS servers");?></td>
- <td width="78%" class="vtable">
- <input name="wins1" type="text" class="formfld unknown" id="wins1" size="20" value="<?=htmlspecialchars($pconfig['wins1']);?>" /><br />
- <input name="wins2" type="text" class="formfld unknown" id="wins2" size="20" value="<?=htmlspecialchars($pconfig['wins2']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("DNS servers");?></td>
- <td width="78%" class="vtable">
- <input name="dns1" type="text" class="formfld unknown" id="dns1" size="20" value="<?=htmlspecialchars($pconfig['dns1']);?>" /><br />
- <input name="dns2" type="text" class="formfld unknown" id="dns2" size="20" value="<?=htmlspecialchars($pconfig['dns2']);?>" /><br />
- <input name="dns3" type="text" class="formfld unknown" id="dns3" size="20" value="<?=htmlspecialchars($pconfig['dns3']);?>" /><br />
- <input name="dns4" type="text" class="formfld unknown" id="dns4" size="20" value="<?=htmlspecialchars($pconfig['dns4']);?>" /><br />
- <?=gettext("NOTE: leave blank to use the system default DNS servers - this interface's IP if DNS Forwarder or Resolver is enabled, otherwise the servers configured on the General page.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Gateway");?></td>
- <td width="78%" class="vtable">
- <input name="gateway" type="text" class="formfld host" id="gateway" size="20" value="<?=htmlspecialchars($pconfig['gateway']);?>" /><br />
- <?=gettext("The default is to use the IP on this interface of the firewall as the gateway. Specify an alternate gateway here if this is not the correct gateway for your network. Type \"none\" for no gateway assignment.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Domain name");?></td>
- <td width="78%" class="vtable">
- <input name="domain" type="text" class="formfld unknown" id="domain" size="20" value="<?=htmlspecialchars($pconfig['domain']);?>" /><br />
- <?=gettext("The default is to use the domain name of this system as the default domain name provided by DHCP. You may specify an alternate domain name here.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Domain search list");?></td>
- <td width="78%" class="vtable">
- <input name="domainsearchlist" type="text" class="formfld unknown" id="domainsearchlist" size="20" value="<?=htmlspecialchars($pconfig['domainsearchlist']);?>" /><br />
- <?=gettext("The DHCP server can optionally provide a domain search list. Use the semicolon character as separator ");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Default lease time");?></td>
- <td width="78%" class="vtable">
- <input name="deftime" type="text" class="formfld unknown" id="deftime" size="10" value="<?=htmlspecialchars($pconfig['deftime']);?>" />
- <?=gettext("seconds");?><br />
- <?=gettext("This is used for clients that do not ask for a specific expiration time."); ?><br />
- <?=gettext("The default is 7200 seconds.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Maximum lease time");?></td>
- <td width="78%" class="vtable">
- <input name="maxtime" type="text" class="formfld unknown" id="maxtime" size="10" value="<?=htmlspecialchars($pconfig['maxtime']);?>" />
- <?=gettext("seconds");?><br />
- <?=gettext("This is the maximum lease time for clients that ask for a specific expiration time."); ?><br />
- <?=gettext("The default is 86400 seconds.");?>
- </td>
- </tr>
-<?php
- if (!is_numeric($pool) && !($act == "newpool")):
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Failover peer IP:");?></td>
- <td width="78%" class="vtable">
- <input name="failover_peerip" type="text" class="formfld host" id="failover_peerip" size="20" value="<?=htmlspecialchars($pconfig['failover_peerip']);?>" /><br />
- <?=gettext("Leave blank to disable. Enter the interface IP address of the other machine. Machines must be using CARP. Interface's advskew determines whether the DHCPd process is Primary or Secondary. Ensure one machine's advskew<20 (and the other is >20).");?>
- </td>
- </tr>
-<?php
- endif;
-
- if (!is_numeric($pool) && !($act == "newpool")):
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Static ARP");?></td>
- <td width="78%" class="vtable">
- <table summary="static arp">
- <tr>
- <td>
- <input style="vertical-align:middle" type="checkbox" value="yes" name="staticarp" id="staticarp" <?php if ($pconfig['staticarp']) echo " checked=\"checked\""; ?> />&nbsp;
- </td>
- <td><b><?=gettext("Enable Static ARP entries");?></b></td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td>
- <span class="red">
- <strong><?=gettext("Note:");?></strong>
- </span>
- <?=gettext("This option persists even if DHCP server is disabled. Only the machines listed below will be able to communicate with the firewall on this NIC.");?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- endif;
-
- if (!is_numeric($pool) && !($act == "newpool")): ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Time format change"); ?></td>
- <td width="78%" class="vtable">
- <table summary="time format">
- <tr>
- <td>
- <input name="dhcpleaseinlocaltime" type="checkbox" id="dhcpleaseinlocaltime" value="yes" <?php if ($pconfig['dhcpleaseinlocaltime']) echo "checked=\"checked\""; ?> />
- </td>
- <td>
- <strong>
- <?=gettext("Change DHCP display lease time from UTC to local time."); ?>
- </strong>
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td>
- <span class="red">
- <strong><?=gettext("Note:");?></strong>
- </span>
- <?=gettext("By default DHCP leases are displayed in UTC time. By checking this box DHCP lease time will be displayed in local time and set to time zone selected. This will be used for all DHCP interfaces lease time."); ?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- endif;
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Dynamic DNS");?></td>
- <td width="78%" class="vtable">
- <div id="showddnsbox" <?php if ($pconfig['ddnsupdate'] || !empty($pconfig['ddnsdomain']) || !empty($pconfig['ddnsdomainprimary']) || !empty($pconfig['ddnsdomainkeyname']) || !empty($pconfig['ddnsdomainkey'])) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_ddns_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Dynamic DNS");?>
- </div>
- <div id="showddns" <?php if (!$pconfig['ddnsupdate'] && empty($pconfig['ddnsdomain']) && empty($pconfig['ddnsdomainprimary']) && empty($pconfig['ddnsdomainkeyname']) && empty($pconfig['ddnsdomainkey'])) echo "style='display:none'"; ?>>
- <input style="vertical-align:middle" type="checkbox" value="yes" name="ddnsupdate" id="ddnsupdate" <?php if ($pconfig['ddnsupdate']) echo " checked=\"checked\""; ?> />&nbsp;
- <b><?=gettext("Enable registration of DHCP client names in DNS.");?></b><br />
- <br/>
- <input name="ddnsdomain" type="text" class="formfld unknown" id="ddnsdomain" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomain']);?>" /><br />
- <?=gettext("Note: Leave blank to disable dynamic DNS registration.");?><br />
- <?=gettext("Enter the dynamic DNS domain which will be used to register client names in the DNS server.");?><br />
- <input name="ddnsdomainprimary" type="text" class="formfld unknown" id="ddnsdomainprimary" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainprimary']);?>" /><br />
- <?=gettext("Enter the primary domain name server IP address for the dynamic domain name.");?><br />
- <input name="ddnsdomainkeyname" type="text" class="formfld unknown" id="ddnsdomainkeyname" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainkeyname']);?>" /><br />
- <?=gettext("Enter the dynamic DNS domain key name which will be used to register client names in the DNS server.");?><br />
- <input name="ddnsdomainkey" type="text" class="formfld unknown" id="ddnsdomainkey" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainkey']);?>" /><br />
- <?=gettext("Enter the dynamic DNS domain key secret which will be used to register client names in the DNS server.");?>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("MAC Address Control");?></td>
- <td width="78%" class="vtable">
- <div id="showmaccontrolbox" <?php if (!empty($pconfig['mac_allow']) || !empty($pconfig['mac_deny'])) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_maccontrol_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show MAC Address Control");?>
- </div>
- <div id="showmaccontrol" <?php if (empty($pconfig['mac_allow']) && empty($pconfig['mac_deny'])) echo "style='display:none'"; ?>>
- <input name="mac_allow" type="text" class="formfld unknown" id="mac_allow" size="20" value="<?=htmlspecialchars($pconfig['mac_allow']);?>" /><br />
- <?=gettext("Enter a list of partial MAC addresses to allow, comma separated, no spaces, such as ");?>00:00:00,01:E5:FF<br />
- <input name="mac_deny" type="text" class="formfld unknown" id="mac_deny" size="20" value="<?=htmlspecialchars($pconfig['mac_deny']);?>" /><br />
- <?=gettext("Enter a list of partial MAC addresses to deny access, comma separated, no spaces, such as ");?>00:00:00,01:E5:FF
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("NTP servers");?></td>
- <td width="78%" class="vtable">
- <div id="showntpbox" <?php if (!empty($pconfig['ntp1']) || !empty($pconfig['ntp2'])) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_ntp_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show NTP configuration");?>
- </div>
- <div id="showntp" <?php if (empty($pconfig['ntp1']) && empty($pconfig['ntp2'])) echo "style='display:none'"; ?>>
- <input name="ntp1" type="text" class="formfld unknown" id="ntp1" size="20" value="<?=htmlspecialchars($pconfig['ntp1']);?>" /><br />
- <input name="ntp2" type="text" class="formfld unknown" id="ntp2" size="20" value="<?=htmlspecialchars($pconfig['ntp2']);?>" />
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("TFTP server");?></td>
- <td width="78%" class="vtable">
- <div id="showtftpbox" <?php if (!empty($pconfig['tftp'])) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_tftp_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show TFTP configuration");?>
- </div>
- <div id="showtftp" <?php if (empty($pconfig['tftp'])) echo "style='display:none'"; ?>>
- <input name="tftp" type="text" class="formfld unknown" id="tftp" size="50" value="<?=htmlspecialchars($pconfig['tftp']);?>" /><br />
- <?=gettext("Leave blank to disable. Enter a full hostname or IP for the TFTP server.");?>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("LDAP URI");?></td>
- <td width="78%" class="vtable">
- <div id="showldapbox" <?php if (!empty($pconfig['ldap'])) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_ldap_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show LDAP configuration");?>
- </div>
- <div id="showldap" <?php if (empty($pconfig['ldap'])) echo "style='display:none'"; ?>>
- <input name="ldap" type="text" class="formfld unknown" id="ldap" size="80" value="<?=htmlspecialchars($pconfig['ldap']);?>" /><br />
- <?=gettext("Leave blank to disable. Enter a full URI for the LDAP server in the form ldap://ldap.example.com/dc=example,dc=com");?>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Enable network booting");?></td>
- <td width="78%" class="vtable">
- <div id="shownetbootbox" <?php if ($pconfig['netboot'] || !empty($pconfig['nextserver']) || !empty($pconfig['filename']) || !empty($pconfig['filename32']) || !empty($pconfig['filename64']) || !empty($pconfig['rootpath'])) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_netboot_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Network booting");?>
- </div>
- <div id="shownetboot" <?php if (!$pconfig['netboot'] && empty($pconfig['nextserver']) && empty($pconfig['filename']) && empty($pconfig['filename32']) && empty($pconfig['filename64']) && empty($pconfig['rootpath'])) echo "style='display:none'"; ?>>
- <input style="vertical-align:middle" type="checkbox" value="yes" name="netboot" id="netboot" <?php if ($pconfig['netboot']) echo " checked=\"checked\""; ?> />&nbsp;
- <b><?=gettext("Enables network booting.");?></b>
- <br/>
- <table border="0" cellspacing="0" cellpadding="2" summary="network booting">
- <tr>
- <td>
- <?=gettext("Enter the IP of the"); ?> <b><?=gettext("next-server"); ?></b>
- </td>
- <td>
- <input name="nextserver" type="text" class="formfld unknown" id="nextserver" size="20" value="<?=htmlspecialchars($pconfig['nextserver']);?>" /><br />
- </td>
- </tr>
- <tr>
- <td>
- <?=gettext("and the default bios filename");?>
- </td>
- <td>
- <input name="filename" type="text" class="formfld unknown" id="filename" size="20" value="<?=htmlspecialchars($pconfig['filename']);?>" /><br />
- </td>
- </tr>
- <tr>
- <td>
- <?=gettext("and the UEFI 32bit filename ");?>
- </td>
- <td>
- <input name="filename32" type="text" class="formfld unknown" id="filename32" size="20" value="<?=htmlspecialchars($pconfig['filename32']);?>" /><br />
- </td>
- </tr>
- <tr>
- <td>
- <?=gettext("and the UEFI 64bit filename ");?>
- </td>
- <td>
- <input name="filename64" type="text" class="formfld unknown" id="filename64" size="20" value="<?=htmlspecialchars($pconfig['filename64']);?>" /><br />
- </td>
- </tr>
- </table>
- <?=gettext("Note: You need both a filename and a boot server configured for this to work!");?>
- <?=gettext("You will need all three filenames and a boot server configured for UEFI to work!");?>
- <?=gettext("Enter the"); ?> <b><?=gettext("root-path"); ?></b>-<?=gettext("string");?>
- <input name="rootpath" type="text" class="formfld unknown" id="rootpath" size="90" value="<?=htmlspecialchars($pconfig['rootpath']);?>" /><br />
- <?=gettext("Note: string-format: iscsi:(servername):(protocol):(port):(LUN):targetname");?>
- </div>
- </td>
- </tr>
-<?php
- if (!is_numeric($pool) && !($act == "newpool")):
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Additional BOOTP/DHCP Options");?></td>
- <td width="78%" class="vtable">
- <div id="shownumbervaluebox" <?php if (!empty($pconfig['numberoptions'])) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_shownumbervalue()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Additional BOOTP/DHCP Options");?>
- </div>
- <div id="shownumbervalue" <?php if (empty($pconfig['numberoptions'])) echo "style='display:none'"; ?>>
- <table id="maintable" summary="bootp-dhcp options">
- <tbody>
- <tr>
- <td colspan="3">
- <div style="padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066; background-color: #ffffff; color: #000000; font-size: 8pt;" id="itemhelp">
- <?=gettext("Enter the DHCP option number and the value for each item you would like to include in the DHCP lease information. For a list of available options please visit this"); ?> <a href="http://www.iana.org/assignments/bootp-dhcp-parameters/" target="_blank"><?=gettext("URL"); ?></a>
- </div>
- </td>
- </tr>
- <tr>
- <td><div id="onecolumn"><?=gettext("Number");?></div></td>
- <td><div id="twocolumn"><?=gettext("Type");?></div></td>
- <td><div id="threecolumn"><?=gettext("Value");?></div></td>
- </tr>
-<?php
- $counter = 0;
- if ($pconfig['numberoptions']):
- foreach ($pconfig['numberoptions']['item'] as $item):
- $number = $item['number'];
- $itemtype = $item['type'];
- $value = $item['value'];
-?>
- <tr>
- <td>
- <input autocomplete="off" name="number<?php echo $counter; ?>" type="text" class="formfld unknown" id="number<?php echo $counter; ?>" size="10" value="<?=htmlspecialchars($number);?>" />
- </td>
- <td>
- <select name="itemtype<?php echo $counter; ?>" class="formselect" id="itemtype<?php echo $counter; ?>">
-<?php
- foreach ($customitemtypes as $typename => $typedescr) {
- echo "<option value=\"{$typename}\" ";
- if ($itemtype == $typename) {
- echo "selected=\"selected\"";
- }
- echo ">" . $typedescr . "</option>";
- }
-?>
- </select>
- </td>
- <td>
- <input autocomplete="off" name="value<?php echo $counter; ?>" type="text" class="formfld unknown" id="value<?php echo $counter; ?>" size="40" value="<?=htmlspecialchars($value);?>" />
- </td>
- <td>
- <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="delete" /></a>
- </td>
- </tr>
-<?php
- $counter++;
- endforeach;
- endif; // numberoptions
-?>
- </tbody>
- </table>
- <a onclick="javascript:addRowTo('maintable', 'formfldalias'); return false;" href="#">
- <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
- </a>
- <script type="text/javascript">
- //<![CDATA[
- field_counter_js = 3;
- rows = 1;
- totalrows = <?php echo $counter; ?>;
- loaded = <?php echo $counter; ?>;
- //]]>
- </script>
- </div>
- </td>
- </tr>
-<?php
- endif;
-?>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <?php if ($act == "newpool"): ?>
- <input type="hidden" name="act" value="newpool" />
- <?php endif; ?>
- <?php if (is_numeric($pool)): ?>
- <input type="hidden" name="pool" value="<?php echo $pool; ?>" />
- <?php endif; ?>
- <input name="if" type="hidden" value="<?=htmlspecialchars($if);?>" />
- <input name="submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <p>
- <span class="vexpl">
- <span class="red"><strong><?=gettext("Note:");?>
- <br />
- </strong>
- </span>
- <?=gettext("The DNS servers entered in"); ?>
- <a href="system.php"><?=gettext("System: General setup"); ?></a>
- <?=gettext("(or the"); ?> <a href="services_dnsmasq.php"><?=gettext("DNS forwarder"); ?></a>, <?=gettext("if enabled)"); ?>
- </span>
- <span class="vexpl">
- <?=gettext("will be assigned to clients by the DHCP server."); ?>
- <br />
- <br />
- <?=gettext("The DHCP lease table can be viewed on the"); ?>
- <a href="status_dhcp_leases.php"><?=gettext("Status: DHCP leases"); ?></a>
- <?=gettext("page."); ?>
- <br />
- </span>
- </p>
- </td>
- </tr>
- </table>
-<?php
- if (!is_numeric($pool) && !($act == "newpool")):
-?>
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="static mappings">
- <tr>
- <td colspan="5" valign="top" class="listtopic"><?=gettext("DHCP Static Mappings for this interface.");?></td>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td width="7%" class="listhdrr"><?=gettext("Static ARP");?></td>
- <td width="18%" class="listhdrr"><?=gettext("MAC address");?></td>
- <td width="15%" class="listhdrr"><?=gettext("IP address");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Hostname");?></td>
- <td width="30%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td valign="middle" width="17"></td>
- <td valign="middle">
- <a href="services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- if (is_array($a_maps)):
- $i = 0;
- foreach ($a_maps as $mapent):
-?>
- <tr>
- <td align="center" class="listlr" ondblclick="document.location='services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>&amp;id=<?=$i;?>';">
- <?php if (isset($mapent['arp_table_static_entry'])): ?>
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_alert.gif" alt="ARP Table Static Entry" width="17" height="17" border="0" alt="alert" />
- <?php endif; ?>
- </td>
- <td class="listlr" ondblclick="document.location='services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>&amp;id=<?=$i;?>';">
- <?=htmlspecialchars($mapent['mac']);?>
- </td>
- <td class="listr" ondblclick="document.location='services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>&amp;id=<?=$i;?>';">
- <?=htmlspecialchars($mapent['ipaddr']);?>&nbsp;
- </td>
- <td class="listr" ondblclick="document.location='services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>&amp;id=<?=$i;?>';">
- <?=htmlspecialchars($mapent['hostname']);?>&nbsp;
- </td>
- <td class="listbg" ondblclick="document.location='services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>&amp;id=<?=$i;?>';">
- <?=htmlspecialchars($mapent['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle"><a href="services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>&amp;id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a></td>
- <td valign="middle"><a href="services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
- endif;
-?>
- <tr>
- <td class="list" colspan="5"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td valign="middle" width="17"></td>
- <td valign="middle"><a href="services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
-<?php
- endif;
-?>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
-enable_change(false);
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_dhcp_edit.php b/usr/local/www/services_dhcp_edit.php
deleted file mode 100644
index 1fc947b..0000000
--- a/usr/local/www/services_dhcp_edit.php
+++ /dev/null
@@ -1,625 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_dhcp_edit.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/sbin/arp
- pfSense_MODULE: dhcpserver
-*/
-
-##|+PRIV
-##|*IDENT=page-services-dhcpserver-editstaticmapping
-##|*NAME=Services: DHCP Server : Edit static mapping page
-##|*DESCR=Allow access to the 'Services: DHCP Server : Edit static mapping' page.
-##|*MATCH=services_dhcp_edit.php*
-##|-PRIV
-
-function staticmapcmp($a, $b) {
- return ipcmp($a['ipaddr'], $b['ipaddr']);
-}
-
-function staticmaps_sort($ifgui) {
- global $g, $config;
-
- usort($config['dhcpd'][$ifgui]['staticmap'], "staticmapcmp");
-}
-
-require_once('globals.inc');
-
-if (!$g['services_dhcp_server_enable']) {
- header("Location: /");
- exit;
-}
-
-require("guiconfig.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_dhcp.php');
-}
-
-$if = $_GET['if'];
-if ($_POST['if']) {
- $if = $_POST['if'];
-}
-
-if (!$if) {
- header("Location: services_dhcp.php");
- exit;
-}
-
-if (!is_array($config['dhcpd'])) {
- $config['dhcpd'] = array();
-}
-if (!is_array($config['dhcpd'][$if])) {
- $config['dhcpd'][$if] = array();
-}
-if (!is_array($config['dhcpd'][$if]['staticmap'])) {
- $config['dhcpd'][$if]['staticmap'] = array();
-}
-
-if (!is_array($config['dhcpd'][$if]['pool'])) {
- $config['dhcpd'][$if]['pool'] = array();
-}
-$a_pools = &$config['dhcpd'][$if]['pool'];
-
-$static_arp_enabled=isset($config['dhcpd'][$if]['staticarp']);
-$netboot_enabled=isset($config['dhcpd'][$if]['netboot']);
-$a_maps = &$config['dhcpd'][$if]['staticmap'];
-$ifcfgip = get_interface_ip($if);
-$ifcfgsn = get_interface_subnet($if);
-$ifcfgdescr = convert_friendly_interface_to_friendly_descr($if);
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_maps[$id]) {
- $pconfig['mac'] = $a_maps[$id]['mac'];
- $pconfig['cid'] = $a_maps[$id]['cid'];
- $pconfig['hostname'] = $a_maps[$id]['hostname'];
- $pconfig['ipaddr'] = $a_maps[$id]['ipaddr'];
- $pconfig['filename'] = $a_maps[$id]['filename'];
- $pconfig['rootpath'] = $a_maps[$id]['rootpath'];
- $pconfig['descr'] = $a_maps[$id]['descr'];
- $pconfig['arp_table_static_entry'] = isset($a_maps[$id]['arp_table_static_entry']);
- $pconfig['deftime'] = $a_maps[$id]['defaultleasetime'];
- $pconfig['maxtime'] = $a_maps[$id]['maxleasetime'];
- $pconfig['gateway'] = $a_maps[$id]['gateway'];
- $pconfig['domain'] = $a_maps[$id]['domain'];
- $pconfig['domainsearchlist'] = $a_maps[$id]['domainsearchlist'];
- list($pconfig['wins1'], $pconfig['wins2']) = $a_maps[$id]['winsserver'];
- list($pconfig['dns1'], $pconfig['dns2'], $pconfig['dns3'], $pconfig['dns4']) = $a_maps[$id]['dnsserver'];
- $pconfig['ddnsdomain'] = $a_maps[$id]['ddnsdomain'];
- $pconfig['ddnsdomainprimary'] = $a_maps[$id]['ddnsdomainprimary'];
- $pconfig['ddnsdomainkeyname'] = $a_maps[$id]['ddnsdomainkeyname'];
- $pconfig['ddnsdomainkey'] = $a_maps[$id]['ddnsdomainkey'];
- $pconfig['ddnsupdate'] = isset($a_maps[$id]['ddnsupdate']);
- list($pconfig['ntp1'], $pconfig['ntp2']) = $a_maps[$id]['ntpserver'];
- $pconfig['tftp'] = $a_maps[$id]['tftp'];
-} else {
- $pconfig['mac'] = $_GET['mac'];
- $pconfig['cid'] = $_GET['cid'];
- $pconfig['hostname'] = $_GET['hostname'];
- $pconfig['filename'] = $_GET['filename'];
- $pconfig['rootpath'] = $_GET['rootpath'];
- $pconfig['descr'] = $_GET['descr'];
- $pconfig['arp_table_static_entry'] = $_GET['arp_table_static_entry'];
- $pconfig['deftime'] = $_GET['defaultleasetime'];
- $pconfig['maxtime'] = $_GET['maxleasetime'];
- $pconfig['gateway'] = $_GET['gateway'];
- $pconfig['domain'] = $_GET['domain'];
- $pconfig['domainsearchlist'] = $_GET['domainsearchlist'];
- $pconfig['wins1'] = $_GET['wins1'];
- $pconfig['wins2'] = $_GET['wins2'];
- $pconfig['dns1'] = $_GET['dns1'];
- $pconfig['dns2'] = $_GET['dns2'];
- $pconfig['dns3'] = $_GET['dns3'];
- $pconfig['dns4'] = $_GET['dns4'];
- $pconfig['ddnsdomain'] = $_GET['ddnsdomain'];
- $pconfig['ddnsdomainprimary'] = $_GET['ddnsdomainprimary'];
- $pconfig['ddnsdomainkeyname'] = $_GET['ddnsdomainkeyname'];
- $pconfig['ddnsdomainkey'] = $_GET['ddnsdomainkey'];
- $pconfig['ddnsupdate'] = isset($_GET['ddnsupdate']);
- $pconfig['ntp1'] = $_GET['ntp1'];
- $pconfig['ntp2'] = $_GET['ntp2'];
- $pconfig['tftp'] = $_GET['tftp'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = array();
- $reqdfieldsn = array();
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- /* either MAC or Client-ID must be specified */
- if (empty($_POST['mac']) && empty($_POST['cid'])) {
- $input_errors[] = gettext("Either MAC address or Client identifier must be specified");
- }
-
- /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */
- $_POST['mac'] = strtolower(str_replace("-", ":", $_POST['mac']));
-
- if ($_POST['hostname']) {
- preg_match("/\-\$/", $_POST['hostname'], $matches);
- if ($matches) {
- $input_errors[] = gettext("The hostname cannot end with a hyphen according to RFC952");
- }
- if (!is_hostname($_POST['hostname'])) {
- $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'.");
- } else {
- if (!is_unqualified_hostname($_POST['hostname'])) {
- $input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted");
- }
- }
- }
- if (($_POST['ipaddr'] && !is_ipaddr($_POST['ipaddr']))) {
- $input_errors[] = gettext("A valid IP address must be specified.");
- }
- if (($_POST['mac'] && !is_macaddr($_POST['mac']))) {
- $input_errors[] = gettext("A valid MAC address must be specified.");
- }
- if ($static_arp_enabled && !$_POST['ipaddr']) {
- $input_errors[] = gettext("Static ARP is enabled. You must specify an IP address.");
- }
-
- /* check for overlaps */
- foreach ($a_maps as $mapent) {
- if (isset($id) && ($a_maps[$id]) && ($a_maps[$id] === $mapent)) {
- continue;
- }
- /* The fully qualified hostname (hostname + '.' + domainname) must be unique.
- * The unqualified hostname does not have to be unique as long as the fully
- * qualified hostname is unique. */
- $existingFqn = "{$mapent['hostname']}.{$mapent['domain']}";
- $candidateFqn = "{$_POST['hostname']}.{$_POST['domain']}";
- if ((($existingFqn == $candidateFqn) && $mapent['hostname']) ||
- (($mapent['mac'] == $_POST['mac']) && $mapent['mac']) ||
- (($mapent['ipaddr'] == $_POST['ipaddr']) && $mapent['ipaddr']) ||
- (($mapent['cid'] == $_POST['cid']) && $mapent['cid'])) {
- $input_errors[] = gettext("This fully qualified hostname (Hostname + Domainname), IP, MAC address or Client identifier already exists.");
- break;
- }
- }
-
- /* make sure it's not within the dynamic subnet */
- if ($_POST['ipaddr']) {
- $dynsubnet_start = ip2ulong($config['dhcpd'][$if]['range']['from']);
- $dynsubnet_end = ip2ulong($config['dhcpd'][$if]['range']['to']);
- if ((ip2ulong($_POST['ipaddr']) >= $dynsubnet_start) &&
- (ip2ulong($_POST['ipaddr']) <= $dynsubnet_end)) {
- $input_errors[] = sprintf(gettext("The IP address must not be within the DHCP range for this interface."));
- }
-
- foreach ($a_pools as $pidx => $p) {
- if (is_inrange_v4($_POST['ipaddr'], $p['range']['from'], $p['range']['to'])) {
- $input_errors[] = gettext("The IP address must not be within the range configured on a DHCP pool for this interface.");
- break;
- }
- }
-
- $lansubnet_start = ip2ulong(long2ip32(ip2long($ifcfgip) & gen_subnet_mask_long($ifcfgsn)));
- $lansubnet_end = ip2ulong(long2ip32(ip2long($ifcfgip) | (~gen_subnet_mask_long($ifcfgsn))));
- if ((ip2ulong($_POST['ipaddr']) < $lansubnet_start) ||
- (ip2ulong($_POST['ipaddr']) > $lansubnet_end)) {
- $input_errors[] = sprintf(gettext("The IP address must lie in the %s subnet."), $ifcfgdescr);
- }
- }
-
- if (($_POST['gateway'] && !is_ipaddrv4($_POST['gateway']))) {
- $input_errors[] = gettext("A valid IP address must be specified for the gateway.");
- }
- if (($_POST['wins1'] && !is_ipaddrv4($_POST['wins1'])) || ($_POST['wins2'] && !is_ipaddrv4($_POST['wins2']))) {
- $input_errors[] = gettext("A valid IP address must be specified for the primary/secondary WINS servers.");
- }
-
- $parent_ip = get_interface_ip($POST['if']);
- if (is_ipaddrv4($parent_ip) && $_POST['gateway']) {
- $parent_sn = get_interface_subnet($_POST['if']);
- if (!ip_in_subnet($_POST['gateway'], gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn) && !ip_in_interface_alias_subnet($_POST['if'], $_POST['gateway'])) {
- $input_errors[] = sprintf(gettext("The gateway address %s does not lie within the chosen interface's subnet."), $_POST['gateway']);
- }
- }
- if (($_POST['dns1'] && !is_ipaddrv4($_POST['dns1'])) ||
- ($_POST['dns2'] && !is_ipaddrv4($_POST['dns2'])) ||
- ($_POST['dns3'] && !is_ipaddrv4($_POST['dns3'])) ||
- ($_POST['dns4'] && !is_ipaddrv4($_POST['dns4']))) {
- $input_errors[] = gettext("A valid IP address must be specified for each of the DNS servers.");
- }
-
- if ($_POST['deftime'] && (!is_numeric($_POST['deftime']) || ($_POST['deftime'] < 60))) {
- $input_errors[] = gettext("The default lease time must be at least 60 seconds.");
- }
- if ($_POST['maxtime'] && (!is_numeric($_POST['maxtime']) || ($_POST['maxtime'] < 60) || ($_POST['maxtime'] <= $_POST['deftime']))) {
- $input_errors[] = gettext("The maximum lease time must be at least 60 seconds and higher than the default lease time.");
- }
- if (($_POST['ddnsdomain'] && !is_domain($_POST['ddnsdomain']))) {
- $input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration.");
- }
- if (($_POST['ddnsdomain'] && !is_ipaddrv4($_POST['ddnsdomainprimary']))) {
- $input_errors[] = gettext("A valid primary domain name server IP address must be specified for the dynamic domain name.");
- }
- if (($_POST['ddnsdomainkey'] && !$_POST['ddnsdomainkeyname']) ||
- ($_POST['ddnsdomainkeyname'] && !$_POST['ddnsdomainkey'])) {
- $input_errors[] = gettext("You must specify both a valid domain key and key name.");
- }
- if ($_POST['domainsearchlist']) {
- $domain_array=preg_split("/[ ;]+/", $_POST['domainsearchlist']);
- foreach ($domain_array as $curdomain) {
- if (!is_domain($curdomain)) {
- $input_errors[] = gettext("A valid domain search list must be specified.");
- break;
- }
- }
- }
-
- if (($_POST['ntp1'] && !is_ipaddrv4($_POST['ntp1'])) || ($_POST['ntp2'] && !is_ipaddrv4($_POST['ntp2']))) {
- $input_errors[] = gettext("A valid IP address must be specified for the primary/secondary NTP servers.");
- }
- if ($_POST['tftp'] && !is_ipaddrv4($_POST['tftp']) && !is_domain($_POST['tftp']) && !is_URL($_POST['tftp'])) {
- $input_errors[] = gettext("A valid IP address or hostname must be specified for the TFTP server.");
- }
- if (($_POST['nextserver'] && !is_ipaddrv4($_POST['nextserver']))) {
- $input_errors[] = gettext("A valid IP address must be specified for the network boot server.");
- }
-
- if (!$input_errors) {
- $mapent = array();
- $mapent['mac'] = $_POST['mac'];
- $mapent['cid'] = $_POST['cid'];
- $mapent['ipaddr'] = $_POST['ipaddr'];
- $mapent['hostname'] = $_POST['hostname'];
- $mapent['descr'] = $_POST['descr'];
- $mapent['arp_table_static_entry'] = ($_POST['arp_table_static_entry']) ? true : false;
- $mapent['filename'] = $_POST['filename'];
- $mapent['rootpath'] = $_POST['rootpath'];
- $mapent['defaultleasetime'] = $_POST['deftime'];
- $mapent['maxleasetime'] = $_POST['maxtime'];
-
- unset($mapent['winsserver']);
- if ($_POST['wins1']) {
- $mapent['winsserver'][] = $_POST['wins1'];
- }
- if ($_POST['wins2']) {
- $mapent['winsserver'][] = $_POST['wins2'];
- }
-
- unset($mapent['dnsserver']);
- if ($_POST['dns1']) {
- $mapent['dnsserver'][] = $_POST['dns1'];
- }
- if ($_POST['dns2']) {
- $mapent['dnsserver'][] = $_POST['dns2'];
- }
- if ($_POST['dns3']) {
- $mapent['dnsserver'][] = $_POST['dns3'];
- }
- if ($_POST['dns4']) {
- $mapent['dnsserver'][] = $_POST['dns4'];
- }
-
- $mapent['gateway'] = $_POST['gateway'];
- $mapent['domain'] = $_POST['domain'];
- $mapent['domainsearchlist'] = $_POST['domainsearchlist'];
- $mapent['ddnsdomain'] = $_POST['ddnsdomain'];
- $mapent['ddnsdomainprimary'] = $_POST['ddnsdomainprimary'];
- $mapent['ddnsdomainkeyname'] = $_POST['ddnsdomainkeyname'];
- $mapent['ddnsdomainkey'] = $_POST['ddnsdomainkey'];
- $mapent['ddnsupdate'] = ($_POST['ddnsupdate']) ? true : false;
-
- unset($mapent['ntpserver']);
- if ($_POST['ntp1']) {
- $mapent['ntpserver'][] = $_POST['ntp1'];
- }
- if ($_POST['ntp2']) {
- $mapent['ntpserver'][] = $_POST['ntp2'];
- }
-
- $mapent['tftp'] = $_POST['tftp'];
- $mapent['ldap'] = $_POST['ldap'];
-
- if (isset($id) && $a_maps[$id]) {
- $a_maps[$id] = $mapent;
- } else {
- $a_maps[] = $mapent;
- }
- staticmaps_sort($if);
-
- write_config();
-
- if (isset($config['dhcpd'][$if]['enable'])) {
- mark_subsystem_dirty('staticmaps');
- if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstatic'])) {
- mark_subsystem_dirty('hosts');
- }
- if (isset($config['unbound']['enable']) && isset($config['unbound']['regdhcpstatic'])) {
- mark_subsystem_dirty('unbound');
- }
- }
-
- header("Location: services_dhcp.php?if={$if}");
- exit;
- }
-}
-
-$closehead = false;
-$pgtitle = array(gettext("Services"), gettext("DHCP"), gettext("Edit static mapping"));
-$shortcut_section = "dhcp";
-
-include("head.inc");
-
-?>
-
-<script type="text/javascript">
-//<![CDATA[
- function show_ddns_config() {
- document.getElementById("showddnsbox").innerHTML='';
- aodiv = document.getElementById('showddns');
- aodiv.style.display = "block";
- }
-
- function show_ntp_config() {
- document.getElementById("showntpbox").innerHTML='';
- aodiv = document.getElementById('showntp');
- aodiv.style.display = "block";
- }
-
- function show_tftp_config() {
- document.getElementById("showtftpbox").innerHTML='';
- aodiv = document.getElementById('showtftp');
- aodiv.style.display = "block";
- }
-//]]>
-</script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="services_dhcp_edit.php" method="post" name="iform" id="iform">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="static mapping">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=sprintf(gettext("Static DHCP Mapping on %s"), $ifcfgdescr);?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("MAC address");?></td>
- <td width="78%" class="vtable">
- <input name="mac" type="text" class="formfld unknown" id="mac" size="30" value="<?=htmlspecialchars($pconfig['mac']);?>" />
- <?php
- $ip = getenv('REMOTE_ADDR');
- $mac = `/usr/sbin/arp -an | grep {$ip} | cut -d" " -f4`;
- $mac = str_replace("\n", "", $mac);
- ?>
- <a onclick="document.forms[0].mac.value='<?=$mac?>';" href="#"><?=gettext("Copy my MAC address");?></a>
- <br />
- <span class="vexpl">
- <?=gettext("Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Client identifier");?></td>
- <td width="78%" class="vtable">
- <input name="cid" type="text" class="formfld unknown" id="cid" size="30" value="<?=htmlspecialchars($pconfig['cid']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IP address");?></td>
- <td width="78%" class="vtable">
- <input name="ipaddr" type="text" class="formfld unknown" id="ipaddr" size="20" value="<?=htmlspecialchars($pconfig['ipaddr']);?>" />
- <br />
- <?=gettext("If an IPv4 address is entered, the address must be outside of the pool.");?>
- <br />
- <?=gettext("If no IPv4 address is given, one will be dynamically allocated from the pool.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Hostname");?></td>
- <td width="78%" class="vtable">
- <input name="hostname" type="text" class="formfld unknown" id="hostname" size="20" value="<?=htmlspecialchars($pconfig['hostname']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Name of the host, without domain part.");?>
- </span>
- </td>
- </tr>
-<?php
- if ($netboot_enabled) {
-?>
- <tr>
- <td width="22%" valign="top" class="vncell">Netboot Filename</td>
- <td width="78%" class="vtable">
- <input name="filename" type="text" class="formfld unknown" id="filename" size="20" value="<?=htmlspecialchars($pconfig['filename']);?>" />
- <br />
- <span class="vexpl">Name of the file that should be loaded when this host boots off of the network, overrides setting on main page.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell">Root Path</td>
- <td width="78%" class="vtable">
- <input name="rootpath" type="text" class="formfld unknown" id="rootpath" size="90" value="<?=htmlspecialchars($pconfig['rootpath']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Enter the"); ?> <b><?=gettext("root-path"); ?></b>-<?=gettext("string");?>, overrides setting on main page.
- </span>
- </td>
- </tr>
-<?php
- }
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed).");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("ARP Table Static Entry");?></td>
- <td width="78%" class="vtable">
- <input name="arp_table_static_entry" id="arp_table_static_entry" type="checkbox" value="yes" <?php if ($pconfig['arp_table_static_entry']) echo "checked=\"checked\""; ?> />
- <br />
- <span class="vexpl">
- <?=gettext("Create an ARP Table Static Entry for this MAC &amp; IP Address pair. ");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("WINS servers");?></td>
- <td width="78%" class="vtable">
- <input name="wins1" type="text" class="formfld unknown" id="wins1" size="20" value="<?=htmlspecialchars($pconfig['wins1']);?>" /><br />
- <input name="wins2" type="text" class="formfld unknown" id="wins2" size="20" value="<?=htmlspecialchars($pconfig['wins2']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("DNS servers");?></td>
- <td width="78%" class="vtable">
- <input name="dns1" type="text" class="formfld unknown" id="dns1" size="20" value="<?=htmlspecialchars($pconfig['dns1']);?>" /><br />
- <input name="dns2" type="text" class="formfld unknown" id="dns2" size="20" value="<?=htmlspecialchars($pconfig['dns2']);?>" /><br />
- <input name="dns3" type="text" class="formfld unknown" id="dns3" size="20" value="<?=htmlspecialchars($pconfig['dns3']);?>" /><br />
- <input name="dns4" type="text" class="formfld unknown" id="dns4" size="20" value="<?=htmlspecialchars($pconfig['dns4']);?>" /><br />
- <?=gettext("NOTE: leave blank to use the system default DNS servers - this interface's IP if DNS Forwarder or Resolver is enabled, otherwise the servers configured on the General page.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Gateway");?></td>
- <td width="78%" class="vtable">
- <input name="gateway" type="text" class="formfld host" id="gateway" size="20" value="<?=htmlspecialchars($pconfig['gateway']);?>" /><br />
- <?=gettext("The default is to use the IP on this interface of the firewall as the gateway. Specify an alternate gateway here if this is not the correct gateway for your network.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Domain name");?></td>
- <td width="78%" class="vtable">
- <input name="domain" type="text" class="formfld unknown" id="domain" size="20" value="<?=htmlspecialchars($pconfig['domain']);?>" /><br />
- <?=gettext("The default is to use the domain name of this system as the default domain name provided by DHCP. You may specify an alternate domain name here.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Domain search list");?></td>
- <td width="78%" class="vtable">
- <input name="domainsearchlist" type="text" class="formfld unknown" id="domainsearchlist" size="20" value="<?=htmlspecialchars($pconfig['domainsearchlist']);?>" /><br />
- <?=gettext("The DHCP server can optionally provide a domain search list. Use the semicolon character as separator ");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Default lease time");?></td>
- <td width="78%" class="vtable">
- <input name="deftime" type="text" class="formfld unknown" id="deftime" size="10" value="<?=htmlspecialchars($pconfig['deftime']);?>" />
- <?=gettext("seconds");?><br />
- <?=gettext("This is used for clients that do not ask for a specific expiration time."); ?><br />
- <?=gettext("The default is 7200 seconds.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Maximum lease time");?></td>
- <td width="78%" class="vtable">
- <input name="maxtime" type="text" class="formfld unknown" id="maxtime" size="10" value="<?=htmlspecialchars($pconfig['maxtime']);?>" />
- <?=gettext("seconds");?><br />
- <?=gettext("This is the maximum lease time for clients that ask for a specific expiration time."); ?><br />
- <?=gettext("The default is 86400 seconds.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Dynamic DNS");?></td>
- <td width="78%" class="vtable">
- <div id="showddnsbox">
- <input type="button" onclick="show_ddns_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Dynamic DNS");?>
- </div>
- <div id="showddns" style="display:none">
- <input style="vertical-align:middle" type="checkbox" value="yes" name="ddnsupdate" id="ddnsupdate" <?php if ($pconfig['ddnsupdate']) echo "checked=\"checked\""; ?> />&nbsp;
- <b><?=gettext("Enable registration of DHCP client names in DNS.");?></b><br />
- <p>
- <input name="ddnsdomain" type="text" class="formfld unknown" id="ddnsdomain" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomain']);?>" /><br />
- <?=gettext("Note: Leave blank to disable dynamic DNS registration.");?><br />
- <?=gettext("Enter the dynamic DNS domain which will be used to register client names in the DNS server.");?><br />
- <input name="ddnsdomainprimary" type="text" class="formfld unknown" id="ddnsdomainprimary" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainprimary']);?>" /><br />
- <?=gettext("Enter the primary domain name server IP address for the dynamic domain name.");?><br />
- <input name="ddnsdomainkeyname" type="text" class="formfld unknown" id="ddnsdomainkeyname" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainkeyname']);?>" /><br />
- <?=gettext("Enter the dynamic DNS domain key name which will be used to register client names in the DNS server.");?><br />
- <input name="ddnsdomainkey" type="text" class="formfld unknown" id="ddnsdomainkey" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainkey']);?>" /><br />
- <?=gettext("Enter the dynamic DNS domain key secret which will be used to register client names in the DNS server.");?>
- </p>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("NTP servers");?></td>
- <td width="78%" class="vtable">
- <div id="showntpbox">
- <input type="button" onclick="show_ntp_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show NTP configuration");?>
- </div>
- <div id="showntp" style="display:none">
- <input name="ntp1" type="text" class="formfld unknown" id="ntp1" size="20" value="<?=htmlspecialchars($pconfig['ntp1']);?>" /><br />
- <input name="ntp2" type="text" class="formfld unknown" id="ntp2" size="20" value="<?=htmlspecialchars($pconfig['ntp2']);?>" />
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("TFTP server");?></td>
- <td width="78%" class="vtable">
- <div id="showtftpbox">
- <input type="button" onclick="show_tftp_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show TFTP configuration");?>
- </div>
- <div id="showtftp" style="display:none">
- <input name="tftp" type="text" class="formfld unknown" id="tftp" size="50" value="<?=htmlspecialchars($pconfig['tftp']);?>" /><br />
- <?=gettext("Leave blank to disable. Enter a full hostname or IP for the TFTP server.");?>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_maps[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- <input name="if" type="hidden" value="<?=htmlspecialchars($if);?>" />
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_dhcp_relay.php b/usr/local/www/services_dhcp_relay.php
deleted file mode 100644
index ae69c3a..0000000
--- a/usr/local/www/services_dhcp_relay.php
+++ /dev/null
@@ -1,216 +0,0 @@
-<?php
-/*
- services_dhcp_relay.php
-
- Copyright (C) 2003-2004 Justin Ellison <justin@techadvise.com>.
- Copyright (C) 2010 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: dhcprelay
-*/
-
-##|+PRIV
-##|*IDENT=page-services-dhcprelay
-##|*NAME=Services: DHCP Relay page
-##|*DESCR=Allow access to the 'Services: DHCP Relay' page.
-##|*MATCH=services_dhcp_relay.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$pconfig['enable'] = isset($config['dhcrelay']['enable']);
-if (empty($config['dhcrelay']['interface'])) {
- $pconfig['interface'] = array();
-} else {
- $pconfig['interface'] = explode(",", $config['dhcrelay']['interface']);
-}
-$pconfig['server'] = $config['dhcrelay']['server'];
-$pconfig['agentoption'] = isset($config['dhcrelay']['agentoption']);
-
-$iflist = get_configured_interface_with_descr();
-
-/* set the enabled flag which will tell us if DHCP server is enabled
- * on any interface. We will use this to disable dhcp-relay since
- * the two are not compatible with each other.
- */
-$dhcpd_enabled = false;
-if (is_array($config['dhcpd'])) {
- foreach ($config['dhcpd'] as $dhcpif => $dhcp) {
- if (isset($dhcp['enable']) && isset($config['interfaces'][$dhcpif]['enable'])) {
- $dhcpd_enabled = true;
- break;
- }
- }
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if ($_POST['enable']) {
- $reqdfields = explode(" ", "server interface");
- $reqdfieldsn = array(gettext("Destination Server"), gettext("Interface"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if ($_POST['server']) {
- $checksrv = explode(",", $_POST['server']);
- foreach ($checksrv as $srv) {
- if (!is_ipaddr($srv)) {
- $input_errors[] = gettext("A valid Destination Server IP address must be specified.");
- }
- }
- }
- }
-
- if (!$input_errors) {
- $config['dhcrelay']['enable'] = $_POST['enable'] ? true : false;
- $config['dhcrelay']['interface'] = implode(",", $_POST['interface']);
- $config['dhcrelay']['agentoption'] = $_POST['agentoption'] ? true : false;
- $config['dhcrelay']['server'] = $_POST['server'];
-
- write_config();
-
- $retval = 0;
- $retval = services_dhcrelay_configure();
- $savemsg = get_std_save_message($retval);
-
- }
-}
-
-$closehead = false;
-$pgtitle = array(gettext("Services"), gettext("DHCP Relay"));
-$shortcut_section = "dhcp";
-include("head.inc");
-
-?>
-
-<script type="text/javascript">
-//<![CDATA[
-function enable_change(enable_over) {
- if (document.iform.enable.checked || enable_over) {
- document.iform.server.disabled = 0;
- document.iform.interface.disabled = 0;
- document.iform.agentoption.disabled = 0;
- } else {
- document.iform.server.disabled = 1;
- document.iform.interface.disabled = 1;
- document.iform.agentoption.disabled = 1;
- }
-}
-//]]>
-</script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_dhcp_relay.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcp relay">
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
-<?php
- if ($dhcpd_enabled) {
- echo "<td>DHCP Server is currently enabled. Cannot enable the DHCP Relay service while the DHCP Server is enabled on any interface.";
- echo "</td></tr></table></div></td></tr></table></form>";
- include("fend.inc");
- echo "</body></html>";
- exit;
- }
-?>
-
- <td colspan="2" valign="top" class="listtopic"><?=gettext("DHCP Relay configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Enable</td>
- <td width="78%" class="vtable">
- <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
- <strong><?php printf(gettext("Enable DHCP relay on interface"));?></strong>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Interface(s)</td>
- <td width="78%" class="vtable">
- <select id="interface" name="interface[]" multiple="multiple" class="formselect" size="3">
- <?php
- foreach ($iflist as $ifent => $ifdesc) {
- if (!is_ipaddr(get_interface_ip($ifent))) {
- continue;
- }
- echo "<option value=\"{$ifent}\"";
- if (in_array($ifent, $pconfig['interface'])) {
- echo " selected=\"selected\"";
- }
- echo ">{$ifdesc}</option>\n";
- }
- ?>
- </select>
- <br />Interfaces without an IP address will not be shown.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable">
- <input name="agentoption" type="checkbox" value="yes" <?php if ($pconfig['agentoption']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Append circuit ID and agent ID to requests"); ?></strong><br />
- <?php printf(gettext("If this is checked, the DHCP relay will append the circuit ID (%s interface number) and the agent ID to the DHCP request."), $g['product_name']); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination server");?></td>
- <td width="78%" class="vtable">
- <input name="server" type="text" class="formfld unknown" id="server" size="20" value="<?=htmlspecialchars($pconfig['server']);?>" />
- <br />
- <?=gettext("This is the IP address of the server to which DHCP requests are relayed. You can enter multiple server IP addresses, separated by commas.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
-enable_change(false);
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_dhcpv6.php b/usr/local/www/services_dhcpv6.php
deleted file mode 100644
index 51a6ada..0000000
--- a/usr/local/www/services_dhcpv6.php
+++ /dev/null
@@ -1,995 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_dhcpv6.php
- parts of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- part of pfSense (https://www.pfsense.org)
- Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /bin/rm
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-services-dhcpv6server
-##|*NAME=Services: DHCPv6 server page
-##|*DESCR=Allow access to the 'Services: DHCPv6 server' page.
-##|*MATCH=services_dhcpv6.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("filter.inc");
-
-if (!$g['services_dhcp_server_enable']) {
- header("Location: /");
- exit;
-}
-
-/* Fix failover DHCP problem
- * http://article.gmane.org/gmane.comp.security.firewalls.pfsense.support/18749
- */
-ini_set("memory_limit", "64M");
-
-$if = $_GET['if'];
-if ($_POST['if']) {
- $if = $_POST['if'];
-}
-
-/* if OLSRD is enabled, allow WAN to house DHCP. */
-if ($config['installedpackages']['olsrd']) {
- foreach ($config['installedpackages']['olsrd']['config'] as $olsrd) {
- if ($olsrd['enable']) {
- $is_olsr_enabled = true;
- break;
- }
- }
-}
-
-$iflist = get_configured_interface_with_descr();
-$iflist = array_merge($iflist, get_configured_pppoe_server_interfaces());
-
-/* set the starting interface */
-if (!$if || !isset($iflist[$if])) {
- foreach ($iflist as $ifent => $ifname) {
- $oc = $config['interfaces'][$ifent];
- if ((is_array($config['dhcpdv6'][$ifent]) && !isset($config['dhcpdv6'][$ifent]['enable']) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6'])))) ||
- (!is_array($config['dhcpdv6'][$ifent]) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6']))))) {
- continue;
- }
- $if = $ifent;
- break;
- }
-}
-
-if (is_array($config['dhcpdv6'][$if])) {
- /* DHCPv6 */
- if (is_array($config['dhcpdv6'][$if]['range'])) {
- $pconfig['range_from'] = $config['dhcpdv6'][$if]['range']['from'];
- $pconfig['range_to'] = $config['dhcpdv6'][$if]['range']['to'];
- }
- if (is_array($config['dhcpdv6'][$if]['prefixrange'])) {
- $pconfig['prefixrange_from'] = $config['dhcpdv6'][$if]['prefixrange']['from'];
- $pconfig['prefixrange_to'] = $config['dhcpdv6'][$if]['prefixrange']['to'];
- $pconfig['prefixrange_length'] = $config['dhcpdv6'][$if]['prefixrange']['prefixlength'];
- }
- $pconfig['deftime'] = $config['dhcpdv6'][$if]['defaultleasetime'];
- $pconfig['maxtime'] = $config['dhcpdv6'][$if]['maxleasetime'];
- $pconfig['domain'] = $config['dhcpdv6'][$if]['domain'];
- $pconfig['domainsearchlist'] = $config['dhcpdv6'][$if]['domainsearchlist'];
- list($pconfig['wins1'], $pconfig['wins2']) = $config['dhcpdv6'][$if]['winsserver'];
- list($pconfig['dns1'], $pconfig['dns2'], $pconfig['dns3'], $pconfig['dns4']) = $config['dhcpdv6'][$if]['dnsserver'];
- $pconfig['enable'] = isset($config['dhcpdv6'][$if]['enable']);
- $pconfig['ddnsdomain'] = $config['dhcpdv6'][$if]['ddnsdomain'];
- $pconfig['ddnsdomainprimary'] = $config['dhcpdv6'][$if]['ddnsdomainprimary'];
- $pconfig['ddnsdomainkeyname'] = $config['dhcpdv6'][$if]['ddnsdomainkeyname'];
- $pconfig['ddnsdomainkey'] = $config['dhcpdv6'][$if]['ddnsdomainkey'];
- $pconfig['ddnsupdate'] = isset($config['dhcpdv6'][$if]['ddnsupdate']);
- list($pconfig['ntp1'], $pconfig['ntp2']) = $config['dhcpdv6'][$if]['ntpserver'];
- $pconfig['tftp'] = $config['dhcpdv6'][$if]['tftp'];
- $pconfig['ldap'] = $config['dhcpdv6'][$if]['ldap'];
- $pconfig['netboot'] = isset($config['dhcpdv6'][$if]['netboot']);
- $pconfig['bootfile_url'] = $config['dhcpdv6'][$if]['bootfile_url'];
- $pconfig['netmask'] = $config['dhcpdv6'][$if]['netmask'];
- $pconfig['numberoptions'] = $config['dhcpdv6'][$if]['numberoptions'];
- $pconfig['dhcpv6leaseinlocaltime'] = $config['dhcpdv6'][$if]['dhcpv6leaseinlocaltime'];
- if (!is_array($config['dhcpdv6'][$if]['staticmap'])) {
- $config['dhcpdv6'][$if]['staticmap'] = array();
- }
- $a_maps = &$config['dhcpdv6'][$if]['staticmap'];
-}
-
-$ifcfgip = get_interface_ipv6($if);
-$ifcfgsn = get_interface_subnetv6($if);
-
-/* set the enabled flag which will tell us if DHCP relay is enabled
- * on any interface. We will use this to disable DHCP server since
- * the two are not compatible with each other.
- */
-
-$dhcrelay_enabled = false;
-$dhcrelaycfg = $config['dhcrelay6'];
-
-if (is_array($dhcrelaycfg)) {
- foreach ($dhcrelaycfg as $dhcrelayif => $dhcrelayifconf) {
- if (isset($dhcrelayifconf['enable']) && isset($iflist[$dhcrelayif]) &&
- (!link_interface_to_bridge($dhcrelayif))) {
- $dhcrelay_enabled = true;
- }
- }
-}
-
-if ($_POST) {
-
- unset($input_errors);
-
- $old_dhcpdv6_enable = ($pconfig['enable'] == true);
- $new_dhcpdv6_enable = ($_POST['enable'] ? true : false);
- $dhcpdv6_enable_changed = ($old_dhcpdv6_enable != $new_dhcpdv6_enable);
-
- $pconfig = $_POST;
-
- $numberoptions = array();
- for ($x = 0; $x < 99; $x++) {
- if (isset($_POST["number{$x}"]) && ctype_digit($_POST["number{$x}"])) {
- $numbervalue = array();
- $numbervalue['number'] = htmlspecialchars($_POST["number{$x}"]);
- $numbervalue['value'] = htmlspecialchars($_POST["value{$x}"]);
- $numberoptions['item'][] = $numbervalue;
- }
- }
- // Reload the new pconfig variable that the forum uses.
- $pconfig['numberoptions'] = $numberoptions;
-
- /* input validation */
- if ($_POST['enable']) {
- $reqdfields = explode(" ", "range_from range_to");
- $reqdfieldsn = array(gettext("Range begin"), gettext("Range end"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (($_POST['prefixrange_from'] && !is_ipaddrv6($_POST['prefixrange_from']))) {
- $input_errors[] = gettext("A valid range must be specified.");
- }
- if (($_POST['prefixrange_to'] && !is_ipaddrv6($_POST['prefixrange_to']))) {
- $input_errors[] = gettext("A valid prefix range must be specified.");
- }
- if (($_POST['range_from'] && !is_ipaddrv6($_POST['range_from']))) {
- $input_errors[] = gettext("A valid range must be specified.");
- }
- if (($_POST['range_to'] && !is_ipaddrv6($_POST['range_to']))) {
- $input_errors[] = gettext("A valid range must be specified.");
- }
- if (($_POST['gateway'] && !is_ipaddrv6($_POST['gateway']))) {
- $input_errors[] = gettext("A valid IPv6 address must be specified for the gateway.");
- }
- if (($_POST['dns1'] && !is_ipaddrv6($_POST['dns1'])) ||
- ($_POST['dns2'] && !is_ipaddrv6($_POST['dns2'])) ||
- ($_POST['dns3'] && !is_ipaddrv6($_POST['dns3'])) ||
- ($_POST['dns4'] && !is_ipaddrv6($_POST['dns4']))) {
- $input_errors[] = gettext("A valid IPv6 address must be specified for each of the DNS servers.");
- }
-
- if ($_POST['deftime'] && (!is_numeric($_POST['deftime']) || ($_POST['deftime'] < 60))) {
- $input_errors[] = gettext("The default lease time must be at least 60 seconds.");
- }
- if ($_POST['maxtime'] && (!is_numeric($_POST['maxtime']) || ($_POST['maxtime'] < 60) || ($_POST['maxtime'] <= $_POST['deftime']))) {
- $input_errors[] = gettext("The maximum lease time must be at least 60 seconds and higher than the default lease time.");
- }
- if (($_POST['ddnsdomain'] && !is_domain($_POST['ddnsdomain']))) {
- $input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration.");
- }
- if (($_POST['ddnsdomain'] && !is_ipaddrv4($_POST['ddnsdomainprimary']))) {
- $input_errors[] = gettext("A valid primary domain name server IPv4 address must be specified for the dynamic domain name.");
- }
- if (($_POST['ddnsdomainkey'] && !$_POST['ddnsdomainkeyname']) ||
- ($_POST['ddnsdomainkeyname'] && !$_POST['ddnsdomainkey'])) {
- $input_errors[] = gettext("You must specify both a valid domain key and key name.");
- }
- if ($_POST['domainsearchlist']) {
- $domain_array=preg_split("/[ ;]+/", $_POST['domainsearchlist']);
- foreach ($domain_array as $curdomain) {
- if (!is_domain($curdomain)) {
- $input_errors[] = gettext("A valid domain search list must be specified.");
- break;
- }
- }
- }
-
- if (($_POST['ntp1'] && !is_ipaddrv6($_POST['ntp1'])) || ($_POST['ntp2'] && !is_ipaddrv6($_POST['ntp2']))) {
- $input_errors[] = gettext("A valid IPv6 address must be specified for the primary/secondary NTP servers.");
- }
- if (($_POST['domain'] && !is_domain($_POST['domain']))) {
- $input_errors[] = gettext("A valid domain name must be specified for the DNS domain.");
- }
- if ($_POST['tftp'] && !is_ipaddr($_POST['tftp']) && !is_domain($_POST['tftp']) && !is_URL($_POST['tftp'])) {
- $input_errors[] = gettext("A valid IPv6 address or hostname must be specified for the TFTP server.");
- }
- if (($_POST['bootfile_url'] && !is_URL($_POST['bootfile_url']))) {
- $input_errors[] = gettext("A valid URL must be specified for the network bootfile.");
- }
-
- // Disallow a range that includes the virtualip
- if (is_array($config['virtualip']['vip'])) {
- foreach ($config['virtualip']['vip'] as $vip) {
- if ($vip['interface'] == $if) {
- if ($vip['subnetv6'] && is_inrange_v6($vip['subnetv6'], $_POST['range_from'], $_POST['range_to'])) {
- $input_errors[] = sprintf(gettext("The subnet range cannot overlap with virtual IPv6 address %s."), $vip['subnetv6']);
- }
- }
- }
- }
-
- $noip = false;
- if (is_array($a_maps)) {
- foreach ($a_maps as $map) {
- if (empty($map['ipaddrv6'])) {
- $noip = true;
- }
- }
- }
- if (!$input_errors) {
- /* make sure the range lies within the current subnet */
- $subnet_start = gen_subnetv6($ifcfgip, $ifcfgsn);
- $subnet_end = gen_subnetv6_max($ifcfgip, $ifcfgsn);
-
- if (is_ipaddrv6($ifcfgip)) {
- if ((!is_inrange_v6($_POST['range_from'], $subnet_start, $subnet_end)) ||
- (!is_inrange_v6($_POST['range_to'], $subnet_start, $subnet_end))) {
- $input_errors[] = gettext("The specified range lies outside of the current subnet.");
- }
- }
- /* "from" cannot be higher than "to" */
- if (inet_pton($_POST['range_from']) > inet_pton($_POST['range_to'])) {
- $input_errors[] = gettext("The range is invalid (first element higher than second element).");
- }
-
- /* make sure that the DHCP Relay isn't enabled on this interface */
- if (isset($config['dhcrelay'][$if]['enable'])) {
- $input_errors[] = sprintf(gettext("You must disable the DHCP relay on the %s interface before enabling the DHCP server."), $iflist[$if]);
- }
-
-
- /* Verify static mappings do not overlap:
- - available DHCP range
- - prefix delegation range (FIXME: still need to be completed) */
- $dynsubnet_start = inet_pton($_POST['range_from']);
- $dynsubnet_end = inet_pton($_POST['range_to']);
-
- if (is_array($a_maps)) {
- foreach ($a_maps as $map) {
- if (empty($map['ipaddrv6'])) {
- continue;
- }
- if ((inet_pton($map['ipaddrv6']) > $dynsubnet_start) &&
- (inet_pton($map['ipaddrv6']) < $dynsubnet_end)) {
- $input_errors[] = sprintf(gettext("The DHCP range cannot overlap any static DHCP mappings."));
- break;
- }
- }
- }
- }
- }
-
- if (!$input_errors) {
- if (!is_array($config['dhcpdv6'][$if])) {
- $config['dhcpdv6'][$if] = array();
- }
- if (!is_array($config['dhcpdv6'][$if]['range'])) {
- $config['dhcpdv6'][$if]['range'] = array();
- }
- if (!is_array($config['dhcpdv6'][$if]['prefixrange'])) {
- $config['dhcpdv6'][$if]['prefixrange'] = array();
- }
-
- $config['dhcpdv6'][$if]['range']['from'] = $_POST['range_from'];
- $config['dhcpdv6'][$if]['range']['to'] = $_POST['range_to'];
- $config['dhcpdv6'][$if]['prefixrange']['from'] = $_POST['prefixrange_from'];
- $config['dhcpdv6'][$if]['prefixrange']['to'] = $_POST['prefixrange_to'];
- $config['dhcpdv6'][$if]['prefixrange']['prefixlength'] = $_POST['prefixrange_length'];
- $config['dhcpdv6'][$if]['defaultleasetime'] = $_POST['deftime'];
- $config['dhcpdv6'][$if]['maxleasetime'] = $_POST['maxtime'];
- $config['dhcpdv6'][$if]['netmask'] = $_POST['netmask'];
-
- unset($config['dhcpdv6'][$if]['winsserver']);
-
- unset($config['dhcpdv6'][$if]['dnsserver']);
- if ($_POST['dns1']) {
- $config['dhcpdv6'][$if]['dnsserver'][] = $_POST['dns1'];
- }
- if ($_POST['dns2']) {
- $config['dhcpdv6'][$if]['dnsserver'][] = $_POST['dns2'];
- }
- if ($_POST['dns3']) {
- $config['dhcpdv6'][$if]['dnsserver'][] = $_POST['dns3'];
- }
- if ($_POST['dns4']) {
- $config['dhcpdv6'][$if]['dnsserver'][] = $_POST['dns4'];
- }
-
- $config['dhcpdv6'][$if]['domain'] = $_POST['domain'];
- $config['dhcpdv6'][$if]['domainsearchlist'] = $_POST['domainsearchlist'];
- $config['dhcpdv6'][$if]['enable'] = ($_POST['enable']) ? true : false;
- $config['dhcpdv6'][$if]['ddnsdomain'] = $_POST['ddnsdomain'];
- $config['dhcpdv6'][$if]['ddnsdomainprimary'] = $_POST['ddnsdomainprimary'];
- $config['dhcpdv6'][$if]['ddnsdomainkeyname'] = $_POST['ddnsdomainkeyname'];
- $config['dhcpdv6'][$if]['ddnsdomainkey'] = $_POST['ddnsdomainkey'];
- $config['dhcpdv6'][$if]['ddnsupdate'] = ($_POST['ddnsupdate']) ? true : false;
-
- unset($config['dhcpdv6'][$if]['ntpserver']);
- if ($_POST['ntp1']) {
- $config['dhcpdv6'][$if]['ntpserver'][] = $_POST['ntp1'];
- }
- if ($_POST['ntp2']) {
- $config['dhcpdv6'][$if]['ntpserver'][] = $_POST['ntp2'];
- }
-
- $config['dhcpdv6'][$if]['tftp'] = $_POST['tftp'];
- $config['dhcpdv6'][$if]['ldap'] = $_POST['ldap'];
- $config['dhcpdv6'][$if]['netboot'] = ($_POST['netboot']) ? true : false;
- $config['dhcpdv6'][$if]['bootfile_url'] = $_POST['bootfile_url'];
- $config['dhcpdv6'][$if]['dhcpv6leaseinlocaltime'] = $_POST['dhcpv6leaseinlocaltime'];
-
- // Handle the custom options rowhelper
- if (isset($config['dhcpdv6'][$if]['numberoptions']['item'])) {
- unset($config['dhcpdv6'][$if]['numberoptions']['item']);
- }
-
- $config['dhcpdv6'][$if]['numberoptions'] = $numberoptions;
-
- write_config();
-
- $retval = 0;
- $retvaldhcp = 0;
- $retvaldns = 0;
- /* Stop DHCPv6 so we can cleanup leases */
- killbypid("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpdv6.pid");
- // dhcp_clean_leases();
- /* dnsmasq_configure calls dhcpd_configure */
- /* no need to restart dhcpd twice */
- if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstatic'])) {
- $retvaldns = services_dnsmasq_configure();
- if ($retvaldns == 0) {
- clear_subsystem_dirty('hosts');
- clear_subsystem_dirty('staticmaps');
- }
- } else if (isset($config['unbound']['enable']) && isset($config['unbound']['regdhcpstatic'])) {
- $retvaldns = services_unbound_configure();
- if ($retvaldns == 0) {
- clear_subsystem_dirty('unbound');
- clear_subsystem_dirty('staticmaps');
- }
- } else {
- $retvaldhcp = services_dhcpd_configure();
- if ($retvaldhcp == 0) {
- clear_subsystem_dirty('staticmaps');
- }
- }
- if ($dhcpdv6_enable_changed) {
- $retvalfc = filter_configure();
- }
- if ($retvaldhcp == 1 || $retvaldns == 1 || $retvalfc == 1) {
- $retval = 1;
- }
- $savemsg = get_std_save_message($retval);
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($a_maps[$_GET['id']]) {
- unset($a_maps[$_GET['id']]);
- write_config();
- if (isset($config['dhcpdv6'][$if]['enable'])) {
- mark_subsystem_dirty('staticmapsv6');
- if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstaticv6'])) {
- mark_subsystem_dirty('hosts');
- }
- }
- header("Location: services_dhcpv6.php?if={$if}");
- exit;
- }
-}
-
-$closehead = false;
-$pgtitle = array(gettext("Services"), gettext("DHCPv6 server"));
-$shortcut_section = "dhcp6";
-
-include("head.inc");
-
-?>
-
-<script type="text/javascript" src="/javascript/row_helper.js">
-</script>
-
-<script type="text/javascript">
-//<![CDATA[
- rowname[0] = "number";
- rowtype[0] = "textbox";
- rowsize[0] = "10";
- rowname[1] = "value";
- rowtype[1] = "textbox";
- rowsize[1] = "55";
-//]]>
-</script>
-
-<script type="text/javascript">
-//<![CDATA[
- function enable_change(enable_over) {
- var endis;
- endis = !(document.iform.enable.checked || enable_over);
- document.iform.range_from.disabled = endis;
- document.iform.range_to.disabled = endis;
- document.iform.prefixrange_from.disabled = endis;
- document.iform.prefixrange_to.disabled = endis;
- document.iform.prefixrange_length.disabled = endis;
- document.iform.dns1.disabled = endis;
- document.iform.dns2.disabled = endis;
- document.iform.dns3.disabled = endis;
- document.iform.dns4.disabled = endis;
- document.iform.deftime.disabled = endis;
- document.iform.maxtime.disabled = endis;
- //document.iform.gateway.disabled = endis;
- document.iform.dhcpv6leaseinlocaltime.disabled = endis;
- document.iform.domain.disabled = endis;
- document.iform.domainsearchlist.disabled = endis;
- document.iform.ddnsdomain.disabled = endis;
- document.iform.ddnsdomainprimary.disabled = endis;
- document.iform.ddnsdomainkeyname.disabled = endis;
- document.iform.ddnsdomainkey.disabled = endis;
- document.iform.ddnsupdate.disabled = endis;
- document.iform.ntp1.disabled = endis;
- document.iform.ntp2.disabled = endis;
- //document.iform.tftp.disabled = endis;
- document.iform.ldap.disabled = endis;
- document.iform.netboot.disabled = endis;
- document.iform.bootfile_url.disabled = endis;
- }
-
- function show_shownumbervalue() {
- document.getElementById("shownumbervaluebox").innerHTML='';
- aodiv = document.getElementById('shownumbervalue');
- aodiv.style.display = "block";
- }
-
- function show_ddns_config() {
- document.getElementById("showddnsbox").innerHTML='';
- aodiv = document.getElementById('showddns');
- aodiv.style.display = "block";
- }
- function show_ntp_config() {
- document.getElementById("showntpbox").innerHTML='';
- aodiv = document.getElementById('showntp');
- aodiv.style.display = "block";
- }
- /*
- function show_tftp_config() {
- document.getElementById("showtftpbox").innerHTML='';
- aodiv = document.getElementById('showtftp');
- aodiv.style.display = "block";
- }
- */
- function show_ldap_config() {
- document.getElementById("showldapbox").innerHTML='';
- aodiv = document.getElementById('showldap');
- aodiv.style.display = "block";
- }
-
- function show_netboot_config() {
- document.getElementById("shownetbootbox").innerHTML='';
- aodiv = document.getElementById('shownetboot');
- aodiv.style.display = "block";
- }
-//]]>
-</script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_dhcpv6.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php
- if ($dhcrelay_enabled) {
- echo gettext("DHCP Relay is currently enabled. Cannot enable the DHCP Server service while the DHCP Relay is enabled on any interface.");
- include("fend.inc");
- echo "</body>";
- echo "</html>";
- exit;
- }
-?>
-<?php if (is_subsystem_dirty('staticmaps')): ?><p>
-<?php print_info_box_np(gettext("The static mapping configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcpv6 server">
- <tr>
- <td>
-<?php
- /* active tabs */
- $tab_array = array();
- $tabscounter = 0;
- $i = 0;
- foreach ($iflist as $ifent => $ifname) {
- $oc = $config['interfaces'][$ifent];
- if ((is_array($config['dhcpdv6'][$ifent]) && !isset($config['dhcpdv6'][$ifent]['enable']) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6'])))) ||
- (!is_array($config['dhcpdv6'][$ifent]) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6']))))) {
- continue;
- }
- if ($ifent == $if) {
- $active = true;
- } else {
- $active = false;
- }
- $tab_array[] = array($ifname, $active, "services_dhcpv6.php?if={$ifent}");
- $tabscounter++;
- }
- /* tack on PPPoE or PPtP servers here */
- /* pppoe server */
- if (is_array($config['pppoes']['pppoe'])) {
- foreach ($config['pppoes']['pppoe'] as $pppoe) {
- if ($pppoe['mode'] == "server") {
- $ifent = "poes". $pppoe['pppoeid'];
- $ifname = strtoupper($ifent);
- if ($ifent == $if) {
- $active = true;
- } else {
- $active = false;
- }
- $tab_array[] = array($ifname, $active, "services_dhcpv6.php?if={$ifent}");
- $tabscounter++;
- }
- }
- }
- if ($tabscounter == 0) {
- echo "<b>" . gettext("The DHCPv6 Server can only be enabled on interfaces configured with a static IPv6 address. This system has none.") . "<br/><br/>";
- echo "</td></tr></table></form>";
- include("fend.inc");
- echo "</body>";
- echo "</html>";
- exit;
- }
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("DHCPv6 Server"), true, "services_dhcpv6.php?if={$if}");
- $tab_array[] = array(gettext("Router Advertisements"), false, "services_router_advertisements.php?if={$if}");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("DHCPv6 Server");?></td>
- <td width="78%" class="vtable">
- <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false);" />
- <strong><?php printf(gettext("Enable DHCPv6 server on %s interface"), htmlspecialchars($iflist[$if]));?></strong>
- </td>
- </tr>
-<?php
- /* the PPPoE Server could well have no IPv6 address and operate fine with just link-local, just hide these */
- if (is_ipaddrv6($ifcfgip)) {
-?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet");?></td>
- <td width="78%" class="vtable">
- <?=gen_subnetv6($ifcfgip, $ifcfgsn);?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet mask");?></td>
- <td width="78%" class="vtable">
- <?=$ifcfgsn;?> bits
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Available range");?></td>
- <td width="78%" class="vtable">
- <?php
- $range_from = gen_subnetv6($ifcfgip, $ifcfgsn);
- echo $range_from;
- ?>
- -
- <?php
- $range_to = gen_subnetv6_max($ifcfgip, $ifcfgsn);
- echo $range_to;
- ?>
- </td>
- </tr>
-<?php
- }
-
- if ($is_olsr_enabled):
-?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet Mask");?></td>
- <td width="78%" class="vtable">
- <select name="netmask" class="formselect" id="netmask">
- <?php
- for ($i = 128; $i > 0; $i--) {
- if ($i <> 127) {
- echo "<option value=\"{$i}\" ";
- if ($i == $pconfig['netmask']) {
- echo "selected";
- }
- echo ">" . $i . "</option>";
- }
- }
- ?>
- </select>
- </td>
- </tr>
-<?php
- endif;
-?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Range");?></td>
- <td width="78%" class="vtable">
- <input name="range_from" type="text" class="formfld unknown" id="range_from" size="28" value="<?=htmlspecialchars($pconfig['range_from']);?>" />
- &nbsp;<?=gettext("to"); ?>&nbsp; <input name="range_to" type="text" class="formfld unknown" id="range_to" size="28" value="<?=htmlspecialchars($pconfig['range_to']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Prefix Delegation Range");?></td>
- <td width="78%" class="vtable">
- <input name="prefixrange_from" type="text" class="formfld unknown" id="prefixrange_from" size="28" value="<?=htmlspecialchars($pconfig['prefixrange_from']);?>" />
- &nbsp;<?=gettext("to"); ?>&nbsp; <input name="prefixrange_to" type="text" class="formfld unknown" id="prefixrange_to" size="28" value="<?=htmlspecialchars($pconfig['prefixrange_to']);?>" />
- &nbsp;<br /><?=gettext("Prefix Delegation Size"); ?>:&nbsp;
- <select name="prefixrange_length" class="formselect" id="prefixrange_length">
- <option value="48" <?php if ($pconfig['prefixrange_length'] == 48) echo "selected=\"selected\""; ?>>48</option>
- <option value="52" <?php if ($pconfig['prefixrange_length'] == 52) echo "selected=\"selected\""; ?>>52</option>
- <option value="56" <?php if ($pconfig['prefixrange_length'] == 56) echo "selected=\"selected\""; ?>>56</option>
- <option value="60" <?php if ($pconfig['prefixrange_length'] == 60) echo "selected=\"selected\""; ?>>60</option>
- <option value="62" <?php if ($pconfig['prefixrange_length'] == 62) echo "selected=\"selected\""; ?>>62</option>
- <option value="63" <?php if ($pconfig['prefixrange_length'] == 63) echo "selected=\"selected\""; ?>>63</option>
- <option value="64" <?php if ($pconfig['prefixrange_length'] == 64) echo "selected=\"selected\""; ?>>64</option>
- </select> <br />
- <?php echo gettext("You can define a Prefix range here for DHCP Prefix Delegation. This allows for
- assigning networks to subrouters. The start and end of the range must end on boundaries of the prefix delegation size."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("DNS servers");?></td>
- <td width="78%" class="vtable">
- <input name="dns1" type="text" class="formfld unknown" id="dns1" size="28" value="<?=htmlspecialchars($pconfig['dns1']);?>" /><br />
- <input name="dns2" type="text" class="formfld unknown" id="dns2" size="28" value="<?=htmlspecialchars($pconfig['dns2']);?>" /><br />
- <input name="dns3" type="text" class="formfld unknown" id="dns3" size="28" value="<?=htmlspecialchars($pconfig['dns3']);?>" /><br />
- <input name="dns4" type="text" class="formfld unknown" id="dns4" size="28" value="<?=htmlspecialchars($pconfig['dns4']);?>" /><br />
- <?=gettext("NOTE: leave blank to use the system default DNS servers - this interface's IP if DNS Forwarder or Resolver is enabled, otherwise the servers configured on the General page.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Domain name");?></td>
- <td width="78%" class="vtable">
- <input name="domain" type="text" class="formfld unknown" id="domain" size="28" value="<?=htmlspecialchars($pconfig['domain']);?>" /><br />
- <?=gettext("The default is to use the domain name of this system as the default domain name provided by DHCP. You may specify an alternate domain name here.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Domain search list");?></td>
- <td width="78%" class="vtable">
- <input name="domainsearchlist" type="text" class="formfld unknown" id="domainsearchlist" size="28" value="<?=htmlspecialchars($pconfig['domainsearchlist']);?>" /><br />
- <?=gettext("The DHCP server can optionally provide a domain search list. Use the semicolon character as separator");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Default lease time");?></td>
- <td width="78%" class="vtable">
- <input name="deftime" type="text" class="formfld unknown" id="deftime" size="10" value="<?=htmlspecialchars($pconfig['deftime']);?>" />
- <?=gettext("seconds");?><br />
- <?=gettext("This is used for clients that do not ask for a specific expiration time."); ?><br />
- <?=gettext("The default is 7200 seconds.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Maximum lease time");?></td>
- <td width="78%" class="vtable">
- <input name="maxtime" type="text" class="formfld unknown" id="maxtime" size="10" value="<?=htmlspecialchars($pconfig['maxtime']);?>" />
- <?=gettext("seconds");?><br />
- <?=gettext("This is the maximum lease time for clients that ask for a specific expiration time."); ?><br />
- <?=gettext("The default is 86400 seconds.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Time format change"); ?></td>
- <td width="78%" class="vtable">
- <table summary="time format change">
- <tr>
- <td>
- <input name="dhcpv6leaseinlocaltime" type="checkbox" id="dhcpv6leaseinlocaltime" value="yes" <?php if ($pconfig['dhcpv6leaseinlocaltime']) echo "checked=\"checked\""; ?> />
- </td>
- <td>
- <strong>
- <?=gettext("Change DHCPv6 display lease time from UTC to local time."); ?>
- </strong>
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td>
- <span class="red">
- <strong><?=gettext("Note:");?></strong>
- </span>
- <?=gettext("By default DHCPv6 leases are displayed in UTC time. By checking this box DHCPv6 lease time will be displayed in local time and set to time zone selected. This will be used for all DHCPv6 interfaces lease time."); ?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Dynamic DNS");?></td>
- <td width="78%" class="vtable">
- <div id="showddnsbox">
- <input type="button" onclick="show_ddns_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Dynamic DNS");?>
- </div>
- <div id="showddns" style="display:none">
- <input style="vertical-align:middle" type="checkbox" value="yes" name="ddnsupdate" id="ddnsupdate" <?php if ($pconfig['ddnsupdate']) echo " checked=\"checked\""; ?> />&nbsp;
- <b><?=gettext("Enable registration of DHCP client names in DNS.");?></b><br />
- <p>
- <input name="ddnsdomain" type="text" class="formfld unknown" id="ddnsdomain" size="28" value="<?=htmlspecialchars($pconfig['ddnsdomain']);?>" /><br />
- <?=gettext("Note: Leave blank to disable dynamic DNS registration.");?><br />
- <?=gettext("Enter the dynamic DNS domain which will be used to register client names in the DNS server.");?><br />
- <input name="ddnsdomainprimary" type="text" class="formfld unknown" id="ddnsdomainprimary" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainprimary']);?>" /><br />
- <?=gettext("Enter the primary domain name server IP address for the dynamic domain name.");?><br />
- <input name="ddnsdomainkeyname" type="text" class="formfld unknown" id="ddnsdomainkeyname" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainkeyname']);?>" /><br />
- <?=gettext("Enter the dynamic DNS domain key name which will be used to register client names in the DNS server.");?><br />
- <input name="ddnsdomainkey" type="text" class="formfld unknown" id="ddnsdomainkey" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainkey']);?>" /><br />
- <?=gettext("Enter the dynamic DNS domain key secret which will be used to register client names in the DNS server.");?>
- </p>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("NTP servers");?></td>
- <td width="78%" class="vtable">
- <div id="showntpbox">
- <input type="button" onclick="show_ntp_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show NTP configuration");?>
- </div>
- <div id="showntp" style="display:none">
- <input name="ntp1" type="text" class="formfld unknown" id="ntp1" size="28" value="<?=htmlspecialchars($pconfig['ntp1']);?>" /><br />
- <input name="ntp2" type="text" class="formfld unknown" id="ntp2" size="28" value="<?=htmlspecialchars($pconfig['ntp2']);?>" />
- </div>
- </td>
- </tr>
- <!-- ISC dhcpd does not support tftp for ipv6 yet. See redmine #2016
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("TFTP server");?></td>
- <td width="78%" class="vtable">
- <div id="showtftpbox">
- <input type="button" onclick="show_tftp_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show TFTP configuration");?>
- </div>
- <div id="showtftp" style="display:none">
- <input name="tftp" type="text" class="formfld unknown" id="tftp" size="50" value="<?=htmlspecialchars($pconfig['tftp']);?>" /><br />
- <?=gettext("Leave blank to disable. Enter a full hostname or IP for the TFTP server.");?>
- </div>
- </td>
- </tr>
- -->
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("LDAP URI");?></td>
- <td width="78%" class="vtable">
- <div id="showldapbox">
- <input type="button" onclick="show_ldap_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show LDAP configuration");?>
- </div>
- <div id="showldap" style="display:none">
- <input name="ldap" type="text" class="formfld unknown" id="ldap" size="80" value="<?=htmlspecialchars($pconfig['ldap']);?>" /><br />
- <?=gettext("Leave blank to disable. Enter a full URI for the LDAP server in the form ldap://ldap.example.com/dc=example,dc=com");?>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Enable network booting");?></td>
- <td width="78%" class="vtable">
- <div id="shownetbootbox">
- <input type="button" onclick="show_netboot_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Network booting");?>
- </div>
- <div id="shownetboot" style="display:none">
- <input style="vertical-align:middle" type="checkbox" value="yes" name="netboot" id="netboot" <?php if ($pconfig['netboot']) echo " checked=\"checked\""; ?> />&nbsp;
- <b><?=gettext("Enables network booting.");?></b>
- <br/>
- <?=gettext("Enter the Bootfile URL");?>
- <input name="bootfile_url" type="text" class="formfld unknown" id="bootfile_url" size="28" value="<?=htmlspecialchars($pconfig['bootfile_url']);?>" />
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Additional BOOTP/DHCP Options");?></td>
- <td width="78%" class="vtable">
- <div id="shownumbervaluebox">
- <input type="button" onclick="show_shownumbervalue()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Additional BOOTP/DHCP Options");?>
- </div>
- <div id="shownumbervalue" style="display:none">
- <table id="maintable" summary="bootp-dhcp options">
- <tbody>
- <tr>
- <td colspan="3">
- <div style="padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066; background-color: #ffffff; color: #000000; font-size: 8pt;" id="itemhelp">
- <?=gettext("Enter the DHCP option number and the value for each item you would like to include in the DHCP lease information. For a list of available options please visit this"); ?> <a href="http://www.iana.org/assignments/bootp-dhcp-parameters/" target="_blank"><?=gettext("URL"); ?></a>
- </div>
- </td>
- </tr>
- <tr>
- <td><div id="onecolumn"><?=gettext("Number");?></div></td>
- <td><div id="twocolumn"><?=gettext("Value");?></div></td>
- </tr>
-<?php
- $counter = 0;
- if ($pconfig['numberoptions']):
- foreach ($pconfig['numberoptions']['item'] as $item):
- $number = $item['number'];
- $value = $item['value'];
-?>
- <tr>
- <td>
- <input autocomplete="off" name="number<?php echo $counter; ?>" type="text" class="formfld" id="number<?php echo $counter; ?>" size="10" value="<?=htmlspecialchars($number);?>" />
- </td>
- <td>
- <input autocomplete="off" name="value<?php echo $counter; ?>" type="text" class="formfld" id="value<?php echo $counter; ?>" size="55" value="<?=htmlspecialchars($value);?>" />
- </td>
- <td>
- <input type="image" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" onclick="removeRow(this); return false;" value="<?=gettext("Delete");?>" />
- </td>
- </tr>
-<?php
- $counter++;
- endforeach;
- endif;
-?>
- </tbody>
- </table>
- <a onclick="javascript:addRowTo('maintable', 'formfldalias'); return false;" href="#">
- <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
- </a>
- <script type="text/javascript">
- //<![CDATA[
- field_counter_js = 2;
- rows = 1;
- totalrows = <?php echo $counter; ?>;
- loaded = <?php echo $counter; ?>;
- //]]>
- </script>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="if" type="hidden" value="<?=$if;?>" />
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <p>
- <span class="vexpl">
- <span class="red">
- <strong>
- <?=gettext("Note:");?><br />
- </strong>
- </span>
- <?=gettext("The DNS servers entered in"); ?> <a href="system.php"><?=gettext("System: General setup"); ?></a>\
- <?=gettext("(or the"); ?> <a href="services_dnsmasq.php"><?=gettext("DNS forwarder"); ?></a>, <?=gettext("if enabled)"); ?>
- </span>
- <span class="vexpl">
- <?=gettext("will be assigned to clients by the DHCP server."); ?><br />
- <br />
- <?=gettext("The DHCP lease table can be viewed on the"); ?> <a href="status_dhcpv6_leases.php"><?=gettext("Status: DHCPv6 leases"); ?></a> <?=gettext("page."); ?><br />
- </span>
- </p>
- </td>
- </tr>
- </table>
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="static mappings">
- <tr>
- <td colspan="4" valign="top" class="listtopic"><?=gettext("DHCPv6 Static Mappings for this interface.");?></td>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td width="25%" class="listhdrr"><?=gettext("DUID");?></td>
- <td width="15%" class="listhdrr"><?=gettext("IPv6 address");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Hostname");?></td>
- <td width="30%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td valign="middle" width="17"></td>
- <td valign="middle">
- <a href="services_dhcpv6_edit.php?if=<?=$if;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- if (is_array($a_maps)):
- $i = 0;
- foreach ($a_maps as $mapent):
- if ($mapent['duid'] <> "" or $mapent['ipaddrv6'] <> ""):
-?>
- <tr>
- <td class="listlr" ondblclick="document.location='services_dhcpv6_edit.php?if=<?=$if;?>&amp;id=<?=$i;?>';">
- <?=htmlspecialchars($mapent['duid']);?>
- </td>
- <td class="listr" ondblclick="document.location='services_dhcpv6_edit.php?if=<?=$if;?>&amp;id=<?=$i;?>';">
- <?=htmlspecialchars($mapent['ipaddrv6']);?>&nbsp;
- </td>
- <td class="listr" ondblclick="document.location='services_dhcpv6_edit.php?if=<?=$if;?>&amp;id=<?=$i;?>';">
- <?=htmlspecialchars($mapent['hostname']);?>&nbsp;
- </td>
- <td class="listbg" ondblclick="document.location='services_dhcpv6_edit.php?if=<?=$if;?>&amp;id=<?=$i;?>';">
- <?=htmlspecialchars($mapent['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle"><a href="services_dhcpv6_edit.php?if=<?=$if;?>&amp;id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a></td>
- <td valign="middle"><a href="services_dhcpv6.php?if=<?=$if;?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- endif;
- $i++;
- endforeach;
- endif;
-?>
- <tr>
- <td class="list" colspan="4"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td valign="middle" width="17"></td>
- <td valign="middle"><a href="services_dhcpv6_edit.php?if=<?=$if;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
-enable_change(false);
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_dhcpv6_edit.php b/usr/local/www/services_dhcpv6_edit.php
deleted file mode 100644
index 2034049..0000000
--- a/usr/local/www/services_dhcpv6_edit.php
+++ /dev/null
@@ -1,285 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_dhcpv6_edit.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2011 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/sbin/arp
- pfSense_MODULE: dhcpserver
-*/
-
-##|+PRIV
-##|*IDENT=page-services-dhcpserverv6-editstaticmapping
-##|*NAME=Services: DHCPv6 Server : Edit static mapping page
-##|*DESCR=Allow access to the 'Services: DHCPv6 Server : Edit static mapping' page.
-##|*MATCH=services_dhcpv6_edit.php*
-##|-PRIV
-
-function staticmapcmp($a, $b) {
- return ipcmp($a['ipaddrv6'], $b['ipaddrv6']);
-}
-
-function staticmaps_sort($ifgui) {
- global $g, $config;
-
- usort($config['dhcpdv6'][$ifgui]['staticmap'], "staticmapcmp");
-}
-
-require_once('globals.inc');
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_dhcpv6.php');
-}
-
-if (!$g['services_dhcp_server_enable']) {
- header("Location: /");
- exit;
-}
-
-require("guiconfig.inc");
-
-$if = $_GET['if'];
-if ($_POST['if']) {
- $if = $_POST['if'];
-}
-
-if (!$if) {
- header("Location: services_dhcpv6.php");
- exit;
-}
-
-if (!is_array($config['dhcpdv6'])) {
- $config['dhcpdv6'] = array();
-}
-if (!is_array($config['dhcpdv6'][$if])) {
- $config['dhcpdv6'][$if] = array();
-}
-if (!is_array($config['dhcpdv6'][$if]['staticmap'])) {
- $config['dhcpdv6'][$if]['staticmap'] = array();
-}
-
-$netboot_enabled = isset($config['dhcpdv6'][$if]['netboot']);
-$a_maps = &$config['dhcpdv6'][$if]['staticmap'];
-$ifcfgipv6 = get_interface_ipv6($if);
-$ifcfgsnv6 = get_interface_subnetv6($if);
-$ifcfgdescr = convert_friendly_interface_to_friendly_descr($if);
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_maps[$id]) {
- $pconfig['duid'] = $a_maps[$id]['duid'];
- $pconfig['hostname'] = $a_maps[$id]['hostname'];
- $pconfig['ipaddrv6'] = $a_maps[$id]['ipaddrv6'];
- $pconfig['filename'] = $a_maps[$id]['filename'];
- $pconfig['rootpath'] = $a_maps[$id]['rootpath'];
- $pconfig['descr'] = $a_maps[$id]['descr'];
-} else {
- $pconfig['duid'] = $_GET['duid'];
- $pconfig['hostname'] = $_GET['hostname'];
- $pconfig['filename'] = $_GET['filename'];
- $pconfig['rootpath'] = $a_maps[$id]['rootpath'];
- $pconfig['descr'] = $_GET['descr'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "duid");
- $reqdfieldsn = array(gettext("DUID"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if ($_POST['hostname']) {
- preg_match("/\-\$/", $_POST['hostname'], $matches);
- if ($matches) {
- $input_errors[] = gettext("The hostname cannot end with a hyphen according to RFC952");
- }
- if (!is_hostname($_POST['hostname'])) {
- $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'.");
- } else {
- if (!is_unqualified_hostname($_POST['hostname'])) {
- $input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted");
- }
- }
- }
- if (($_POST['ipaddrv6'] && !is_ipaddrv6($_POST['ipaddrv6']))) {
- $input_errors[] = gettext("A valid IPv6 address must be specified.");
- }
- if (empty($_POST['duid'])) {
- $input_errors[] = gettext("A valid DUID must be specified.");
- }
-
- /* check for overlaps */
- foreach ($a_maps as $mapent) {
- if (isset($id) && ($a_maps[$id]) && ($a_maps[$id] === $mapent)) {
- continue;
- }
-
- if ((($mapent['hostname'] == $_POST['hostname']) && $mapent['hostname']) || ($mapent['duid'] == $_POST['duid'])) {
- $input_errors[] = gettext("This Hostname, IP or DUID already exists.");
- break;
- }
- }
-
- /* make sure it's not within the dynamic subnet */
- if ($_POST['ipaddrv6']) {
- /* oh boy, we need to be able to somehow do this at some point. skip */
- }
-
- if (!$input_errors) {
- $mapent = array();
- $mapent['duid'] = $_POST['duid'];
- $mapent['ipaddrv6'] = $_POST['ipaddrv6'];
- $mapent['hostname'] = $_POST['hostname'];
- $mapent['descr'] = $_POST['descr'];
- $mapent['filename'] = $_POST['filename'];
- $mapent['rootpath'] = $_POST['rootpath'];
-
- if (isset($id) && $a_maps[$id]) {
- $a_maps[$id] = $mapent;
- } else {
- $a_maps[] = $mapent;
- }
- staticmaps_sort($if);
-
- write_config();
-
- if (isset($config['dhcpdv6'][$if]['enable'])) {
- mark_subsystem_dirty('staticmaps');
- if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstatic'])) {
- mark_subsystem_dirty('hosts');
- }
- if (isset($config['unbound']['enable']) && isset($config['unbound']['regdhcpstatic'])) {
- mark_subsystem_dirty('unbound');
- }
-
- }
-
- header("Location: services_dhcpv6.php?if={$if}");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("DHCPv6"), gettext("Edit static mapping"));
-$shortcut_section = "dhcp6";
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="services_dhcpv6_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="static mapping">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Static DHCPv6 Mapping");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("DUID");?></td>
- <td width="78%" class="vtable">
- <input name="duid" type="text" class="formfld unknown" id="duid" size="40" value="<?=htmlspecialchars($pconfig['duid']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Enter a DUID in the following format: ");?><br />
-"DUID-LLT - ETH -- TIME --- ---- address ----" <br />
-"xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 address");?></td>
- <td width="78%" class="vtable">
- <input name="ipaddrv6" type="text" class="formfld unknown" id="ipaddrv6" size="28" value="<?=htmlspecialchars($pconfig['ipaddrv6']);?>" />
- <br />
- <?=gettext("If an IPv6 address is entered, the address must be outside of the pool.");?>
- <br />
- <?=gettext("If no IPv6 address is given, one will be dynamically allocated from the pool.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Hostname");?></td>
- <td width="78%" class="vtable">
- <input name="hostname" type="text" class="formfld unknown" id="hostname" size="28" value="<?=htmlspecialchars($pconfig['hostname']);?>" />
- <br /> <span class="vexpl"><?=gettext("Name of the host, without domain part.");?></span>
- </td>
- </tr>
-<?php
- if ($netboot_enabled) {
-?>
- <tr>
- <td width="22%" valign="top" class="vncell">Netboot filename</td>
- <td width="78%" class="vtable">
- <input name="filename" type="text" class="formfld unknown" id="filename" size="28" value="<?=htmlspecialchars($pconfig['filename']);?>" />
- <br /> <span class="vexpl">Name of the file that should be loaded when this host boots off of the network, overrides setting on main page.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell">Root Path</td>
- <td width="78%" class="vtable">
- <input name="rootpath" type="text" class="formfld unknown" id="rootpath" size="90" value="<?=htmlspecialchars($pconfig['rootpath']);?>" />
- <br /> <span class="vexpl"><?=gettext("Enter the"); ?> <b><?=gettext("root-path"); ?></b>-<?=gettext("string");?>, overrides setting on main page.</span>
- </td>
- </tr>
-<?php
- }
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br /> <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_maps[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- <input name="if" type="hidden" value="<?=htmlspecialchars($if);?>" />
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_dhcpv6_relay.php b/usr/local/www/services_dhcpv6_relay.php
deleted file mode 100644
index c6e5daf..0000000
--- a/usr/local/www/services_dhcpv6_relay.php
+++ /dev/null
@@ -1,216 +0,0 @@
-<?php
-/*
- services_dhcpv6_relay.php
-
- Copyright (C) 2003-2004 Justin Ellison <justin@techadvise.com>.
- Copyright (C) 2010 Ermal Luçi
- Copyright (C) 2010 Seth Mos
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: dhcpv6relay
-*/
-
-##|+PRIV
-##|*IDENT=page-services-dhcpv6relay
-##|*NAME=Services: DHCPv6 Relay page
-##|*DESCR=Allow access to the 'Services: DHCPv6 Relay' page.
-##|*MATCH=services_dhcpv6_relay.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$pconfig['enable'] = isset($config['dhcrelay6']['enable']);
-if (empty($config['dhcrelay6']['interface'])) {
- $pconfig['interface'] = array();
-} else {
- $pconfig['interface'] = explode(",", $config['dhcrelay6']['interface']);
-}
-$pconfig['server'] = $config['dhcrelay6']['server'];
-$pconfig['agentoption'] = isset($config['dhcrelay6']['agentoption']);
-
-$iflist = get_configured_interface_with_descr();
-
-/* set the enabled flag which will tell us if DHCP server is enabled
- * on any interface. We will use this to disable dhcp-relay since
- * the two are not compatible with each other.
- */
-$dhcpd_enabled = false;
-if (is_array($config['dhcpdv6'])) {
- foreach ($config['dhcpdv6'] as $dhcp) {
- if (isset($dhcp['enable']) && isset($config['interfaces'][$dhcpif]['enable'])) {
- $dhcpd_enabled = true;
- break;
- }
- }
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if ($_POST['enable']) {
- $reqdfields = explode(" ", "server interface");
- $reqdfieldsn = array(gettext("Destination Server"), gettext("Interface"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if ($_POST['server']) {
- $checksrv = explode(",", $_POST['server']);
- foreach ($checksrv as $srv) {
- if (!is_ipaddrv6($srv)) {
- $input_errors[] = gettext("A valid Destination Server IPv6 address must be specified.");
- }
- }
- }
- }
-
- if (!$input_errors) {
- $config['dhcrelay6']['enable'] = $_POST['enable'] ? true : false;
- $config['dhcrelay6']['interface'] = implode(",", $_POST['interface']);
- $config['dhcrelay6']['agentoption'] = $_POST['agentoption'] ? true : false;
- $config['dhcrelay6']['server'] = $_POST['server'];
-
- write_config();
-
- $retval = 0;
- $retval = services_dhcrelay6_configure();
- $savemsg = get_std_save_message($retval);
- }
-}
-
-$closehead = false;
-$pgtitle = array(gettext("Services"), gettext("DHCPv6 Relay"));
-$shortcut_section = "dhcp6";
-include("head.inc");
-
-?>
-
-<script type="text/javascript">
-//<![CDATA[
-function enable_change(enable_over) {
- if (document.iform.enable.checked || enable_over) {
- document.iform.server.disabled = 0;
- document.iform.interface.disabled = 0;
- document.iform.agentoption.disabled = 0;
- } else {
- document.iform.server.disabled = 1;
- document.iform.interface.disabled = 1;
- document.iform.agentoption.disabled = 1;
- }
-}
-//]]>
-</script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_dhcpv6_relay.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcpv6 relay">
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
-<?php
- if ($dhcpd_enabled) {
- echo "<td>DHCPv6 Server is currently enabled. Cannot enable the DHCPv6 Relay service while the DHCPv6 Server is enabled on any interface.";
- echo "</td></tr></table></div></td></tr></table></form>";
- include("fend.inc");
- echo "</body></html>";
- exit;
- }
-?>
-
- <td colspan="2" valign="top" class="listtopic"><?=gettext("DHCPv6 Relay configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Enable</td>
- <td width="78%" class="vtable">
- <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
- <strong><?php printf(gettext("Enable DHCPv6 relay on interface"));?></strong>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Interface(s)</td>
- <td width="78%" class="vtable">
- <select id="interface" name="interface[]" multiple="multiple" class="formselect" size="3">
- <?php
- foreach ($iflist as $ifent => $ifdesc) {
- if (!is_ipaddrv6(get_interface_ipv6($ifent))) {
- continue;
- }
- echo "<option value=\"{$ifent}\"";
- if (in_array($ifent, $pconfig['interface'])) {
- echo " selected=\"selected\"";
- }
- echo ">{$ifdesc}</option>\n";
- }
- ?>
- </select>
- <br /><?=gettext("Interfaces without an IPv6 address will not be shown."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable">
- <input name="agentoption" type="checkbox" value="yes" <?php if ($pconfig['agentoption']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Append circuit ID and agent ID to requests"); ?></strong><br />
- <?php printf(gettext("If this is checked, the DHCPv6 relay will append the circuit ID (%s interface number) and the agent ID to the DHCPv6 request."), $g['product_name']); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Destination server");?></td>
- <td width="78%" class="vtable">
- <input name="server" type="text" class="formfld unknown" id="server" size="20" value="<?=htmlspecialchars($pconfig['server']);?>" />
- <br />
- <?=gettext("This is the IPv6 address of the server to which DHCPv6 requests are relayed. You can enter multiple server IPv6 addresses, separated by commas. ");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
-enable_change(false);
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_dnsmasq.php b/usr/local/www/services_dnsmasq.php
deleted file mode 100644
index 4abf4d7..0000000
--- a/usr/local/www/services_dnsmasq.php
+++ /dev/null
@@ -1,582 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_dnsmasq.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Bob Zoller <bob@kludgebox.com> and Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: dnsforwarder
-*/
-
-##|+PRIV
-##|*IDENT=page-services-dnsforwarder
-##|*NAME=Services: DNS Forwarder page
-##|*DESCR=Allow access to the 'Services: DNS Forwarder' page.
-##|*MATCH=services_dnsmasq.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("system.inc");
-
-$pconfig['enable'] = isset($config['dnsmasq']['enable']);
-$pconfig['regdhcp'] = isset($config['dnsmasq']['regdhcp']);
-$pconfig['regdhcpstatic'] = isset($config['dnsmasq']['regdhcpstatic']);
-$pconfig['dhcpfirst'] = isset($config['dnsmasq']['dhcpfirst']);
-$pconfig['strict_order'] = isset($config['dnsmasq']['strict_order']);
-$pconfig['domain_needed'] = isset($config['dnsmasq']['domain_needed']);
-$pconfig['no_private_reverse'] = isset($config['dnsmasq']['no_private_reverse']);
-$pconfig['port'] = $config['dnsmasq']['port'];
-$pconfig['custom_options'] = $config['dnsmasq']['custom_options'];
-
-$pconfig['strictbind'] = isset($config['dnsmasq']['strictbind']);
-if (!empty($config['dnsmasq']['interface'])) {
- $pconfig['interface'] = explode(",", $config['dnsmasq']['interface']);
-} else {
- $pconfig['interface'] = array();
-}
-
-if (!is_array($config['dnsmasq']['hosts'])) {
- $config['dnsmasq']['hosts'] = array();
-}
-
-if (!is_array($config['dnsmasq']['domainoverrides'])) {
- $config['dnsmasq']['domainoverrides'] = array();
-}
-
-$a_hosts = &$config['dnsmasq']['hosts'];
-$a_domainOverrides = &$config['dnsmasq']['domainoverrides'];
-
-if ($_POST) {
-
- $pconfig = $_POST;
- unset($input_errors);
-
- $config['dnsmasq']['enable'] = ($_POST['enable']) ? true : false;
- $config['dnsmasq']['regdhcp'] = ($_POST['regdhcp']) ? true : false;
- $config['dnsmasq']['regdhcpstatic'] = ($_POST['regdhcpstatic']) ? true : false;
- $config['dnsmasq']['dhcpfirst'] = ($_POST['dhcpfirst']) ? true : false;
- $config['dnsmasq']['strict_order'] = ($_POST['strict_order']) ? true : false;
- $config['dnsmasq']['domain_needed'] = ($_POST['domain_needed']) ? true : false;
- $config['dnsmasq']['no_private_reverse'] = ($_POST['no_private_reverse']) ? true : false;
- $config['dnsmasq']['custom_options'] = str_replace("\r\n", "\n", $_POST['custom_options']);
- $config['dnsmasq']['strictbind'] = ($_POST['strictbind']) ? true : false;
-
- if (isset($_POST['enable']) && isset($config['unbound']['enable'])) {
- if ($_POST['port'] == $config['unbound']['port']) {
- $input_errors[] = "The DNS Resolver is enabled using this port. Choose a non-conflicting port, or disable DNS Resolver.";
- }
- }
-
- if ($_POST['port']) {
- if (is_port($_POST['port'])) {
- $config['dnsmasq']['port'] = $_POST['port'];
- } else {
- $input_errors[] = gettext("You must specify a valid port number");
- }
- } else if (isset($config['dnsmasq']['port'])) {
- unset($config['dnsmasq']['port']);
- }
-
- if (is_array($_POST['interface'])) {
- $config['dnsmasq']['interface'] = implode(",", $_POST['interface']);
- } elseif (isset($config['dnsmasq']['interface'])) {
- unset($config['dnsmasq']['interface']);
- }
-
- if ($config['dnsmasq']['custom_options']) {
- $args = '';
- foreach (preg_split('/\s+/', $config['dnsmasq']['custom_options']) as $c) {
- $args .= escapeshellarg("--{$c}") . " ";
- }
- exec("/usr/local/sbin/dnsmasq --test $args", $output, $rc);
- if ($rc != 0) {
- $input_errors[] = gettext("Invalid custom options");
- }
- }
-
- if (!$input_errors) {
- write_config();
-
- $retval = 0;
- $retval = services_dnsmasq_configure();
- $savemsg = get_std_save_message($retval);
-
- // Reload filter (we might need to sync to CARP hosts)
- filter_configure();
- /* Update resolv.conf in case the interface bindings exclude localhost. */
- system_resolvconf_generate();
- /* Start or restart dhcpleases when it's necessary */
- system_dhcpleases_configure();
-
- if ($retval == 0) {
- clear_subsystem_dirty('hosts');
- }
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($_GET['type'] == 'host') {
- if ($a_hosts[$_GET['id']]) {
- unset($a_hosts[$_GET['id']]);
- write_config();
- mark_subsystem_dirty('hosts');
- header("Location: services_dnsmasq.php");
- exit;
- }
- }
- elseif ($_GET['type'] == 'doverride') {
- if ($a_domainOverrides[$_GET['id']]) {
- unset($a_domainOverrides[$_GET['id']]);
- write_config();
- mark_subsystem_dirty('hosts');
- header("Location: services_dnsmasq.php");
- exit;
- }
- }
-}
-
-$closehead = false;
-$pgtitle = array(gettext("Services"), gettext("DNS forwarder"));
-$shortcut_section = "forwarder";
-include("head.inc");
-
-?>
-
-<script type="text/javascript">
-//<![CDATA[
-function enable_change(enable_over) {
- var endis;
- endis = !(document.iform.enable.checked || enable_over);
- document.iform.regdhcp.disabled = endis;
- document.iform.regdhcpstatic.disabled = endis;
- document.iform.dhcpfirst.disabled = endis;
-}
-function show_advanced_dns() {
- document.getElementById("showadvbox").innerHTML='';
- aodiv = document.getElementById('showadv');
- aodiv.style.display = "block";
-}
-//]]>
-</script>
-</head>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_dnsmasq.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('hosts')): ?><br/>
-<?php print_info_box_np(gettext("The DNS forwarder configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="dns forwarder">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("General DNS Forwarder Options");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Enable");?></td>
- <td width="78%" class="vtable">
- <p>
- <input name="enable" type="checkbox" id="enable" value="yes" <?php if ($pconfig['enable'] == "yes") echo "checked=\"checked\"";?> onclick="enable_change(false)" />
- <strong>
- <?=gettext("Enable DNS forwarder");?><br />
- </strong>
- </p>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("DHCP Registration");?></td>
- <td width="78%" class="vtable">
- <p>
- <input name="regdhcp" type="checkbox" id="regdhcp" value="yes" <?php if ($pconfig['regdhcp'] == "yes") echo "checked=\"checked\"";?> />
- <strong>
- <?=gettext("Register DHCP leases in DNS forwarder");?><br />
- </strong>
- <?php printf(gettext("If this option is set, then machines that specify".
- " their hostname when requesting a DHCP lease will be registered".
- " in the DNS forwarder, so that their name can be resolved.".
- " You should also set the domain in %sSystem:".
- " General setup%s to the proper value."), '<a href="system.php">', '</a>')?>
- </p>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Static DHCP");?></td>
- <td width="78%" class="vtable">
- <p>
- <input name="regdhcpstatic" type="checkbox" id="regdhcpstatic" value="yes" <?php if ($pconfig['regdhcpstatic'] == "yes") echo "checked=\"checked\"";?> />
- <strong>
- <?=gettext("Register DHCP static mappings in DNS forwarder");?><br />
- </strong>
- <?php printf(gettext("If this option is set, then DHCP static mappings will ".
- "be registered in the DNS forwarder, so that their name can be ".
- "resolved. You should also set the domain in %s".
- "System: General setup%s to the proper value."), '<a href="system.php">', '</a>');?>
- </p>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Prefer DHCP");?></td>
- <td width="78%" class="vtable">
- <p>
- <input name="dhcpfirst" type="checkbox" id="dhcpfirst" value="yes" <?php if ($pconfig['dhcpfirst'] == "yes") echo "checked=\"checked\"";?> />
- <strong>
- <?=gettext("Resolve DHCP mappings first");?><br />
- </strong>
- <?php printf(gettext("If this option is set, then DHCP mappings will ".
- "be resolved before the manual list of names below. This only ".
- "affects the name given for a reverse lookup (PTR)."));?>
- </p>
- </td>
- </tr>
- <tr>
- <td rowspan="3" width="22%" valign="top" class="vncellreq"><?=gettext("DNS Query Forwarding");?></td>
- <td width="78%" class="vtable">
- <p>
- <input name="strict_order" type="checkbox" id="strict_order" value="yes" <?php if ($pconfig['strict_order'] == "yes") echo "checked=\"checked\"";?> />
- <strong>
- <?=gettext("Query DNS servers sequentially");?><br />
- </strong>
- <?php printf(gettext("If this option is set, %s DNS Forwarder (dnsmasq) will ".
- "query the DNS servers sequentially in the order specified (<i>System - General Setup - DNS Servers</i>), ".
- "rather than all at once in parallel. "), $g['product_name']); ?>
- </p>
- </td>
- </tr>
- <tr>
- <td width="78%" class="vtable">
- <p>
- <input name="domain_needed" type="checkbox" id="domain_needed" value="yes" <?php if ($pconfig['domain_needed'] == "yes") echo "checked=\"checked\"";?> />
- <strong>
- <?=gettext("Require domain");?><br />
- </strong>
- <?php printf(gettext("If this option is set, %s DNS Forwarder (dnsmasq) will ".
- "not forward A or AAAA queries for plain names, without dots or domain parts, to upstream name servers. ".
- "If the name is not known from /etc/hosts or DHCP then a \"not found\" answer is returned. "), $g['product_name']); ?>
- </p>
- </td>
- </tr>
- <tr>
- <td width="78%" class="vtable">
- <p>
- <input name="no_private_reverse" type="checkbox" id="no_private_reverse" value="yes" <?php if ($pconfig['no_private_reverse'] == "yes") echo "checked=\"checked\"";?> />
- <strong>
- <?=gettext("Do not forward private reverse lookups");?><br />
- </strong>
- <?php printf(gettext("If this option is set, %s DNS Forwarder (dnsmasq) will ".
- "not forward reverse DNS lookups (PTR) for private addresses (RFC 1918) to upstream name servers. ".
- "Any entries in the Domain Overrides section forwarding private \"n.n.n.in-addr.arpa\" names to a specific server are still forwarded. ".
- "If the IP to name is not known from /etc/hosts, DHCP or a specific domain override then a \"not found\" answer is immediately returned. "), $g['product_name']); ?>
- </p>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Listen Port");?></td>
- <td width="78%" class="vtable">
- <p>
- <input name="port" type="text" id="port" size="6" <?php if ($pconfig['port']) echo "value=\"" . htmlspecialchars($pconfig['port']) . "\"";?> />
- <br /><br />
- <?=gettext("The port used for responding to DNS queries. It should normally be left blank unless another service needs to bind to TCP/UDP port 53.");?>
- </p>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" rowspan="2" class="vncellreq"><?=gettext("Interfaces"); ?></td>
- <td width="78%" class="vtable">
- <?php
- $interface_addresses = get_possible_listen_ips(true);
- ?>
- <?=gettext("Interface IPs used by the DNS Forwarder for responding to queries from clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries to other interface IPs not selected below are discarded. The default behavior is to respond to queries on every available IPv4 and IPv6 address.");?>
- <br /><br />
- <select id="interface" name="interface[]" multiple="multiple" class="formselect" size="5">
- <option value="" <?php if (empty($pconfig['interface']) || empty($pconfig['interface'][0])) echo 'selected="selected"'; ?>>All</option>
- <?php
- foreach ($interface_addresses as $laddr => $ldescr):
- $selected = "";
- if (in_array($laddr, $pconfig['interface'])) {
- $selected = 'selected="selected"';
- }
- ?>
- <option value="<?=$laddr;?>" <?=$selected;?>>
- <?=htmlspecialchars($ldescr);?>
- </option>
- <?php
- endforeach;
- unset($interface_addresses);
- ?>
- </select>
- <br /><br />
- </td>
- </tr>
- <tr>
- <td width="78%" class="vtable">
- <p>
- <input name="strictbind" type="checkbox" id="strictbind" value="yes" <?php if ($pconfig['strictbind'] == "yes") echo "checked=\"checked\"";?> />
- <strong><?=gettext("Strict Interface Binding");?></strong>
- <br />
- <?= gettext("If this option is set, the DNS forwarder will only bind to the interfaces containing the IP addresses selected above, rather than binding to all interfaces and discarding queries to other addresses."); ?>
- <br /><br />
- <?= gettext("NOTE: This option does NOT work with IPv6. If set, dnsmasq will not bind to IPv6 addresses."); ?>
- </p>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Advanced");?></td>
- <td width="78%" class="vtable">
- <div id="showadvbox" <?php if ($pconfig['custom_options']) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_advanced_dns()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
- </div>
- <div id="showadv" <?php if (empty($pconfig['custom_options'])) echo "style='display:none'"; ?>>
- <strong><?=gettext("Advanced");?><br /></strong>
- <textarea rows="6" cols="78" name="custom_options" id="custom_options"><?=htmlspecialchars($pconfig['custom_options']);?></textarea><br />
- <?=gettext("Enter any additional options you would like to add to the dnsmasq configuration here, separated by a space or newline"); ?><br />
- </div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <input name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
- </td>
- </tr>
-</table>
-
-<p>
- <span class="vexpl">
- <span class="red">
- <strong>
- <?=gettext("Note:");?><br />
- </strong>
- </span>
- <?php printf(gettext("If the DNS forwarder is enabled, the DHCP".
- " service (if enabled) will automatically serve the LAN IP".
- " address as a DNS server to DHCP clients so they will use".
- " the forwarder. The DNS forwarder will use the DNS servers".
- " entered in %sSystem: General setup%s".
- " or those obtained via DHCP or PPP on WAN if the &quot;Allow".
- " DNS server list to be overridden by DHCP/PPP on WAN&quot;".
- " is checked. If you don't use that option (or if you use".
- " a static IP address on WAN), you must manually specify at".
- " least one DNS server on the %sSystem:".
- "General setup%s page."), '<a href="system.php">', '</a>', '<a href="system.php">', '</a>');?><br />
- </span>
-</p>
-
-&nbsp;<br />
-<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont" summary="host overrides">
- <tr>
- <td colspan="5" valign="top" class="listtopic"><?=gettext("Host Overrides");?></td>
- </tr>
- <tr>
- <td>
- <br />
- <?=gettext("Entries in this section override individual results from the forwarders.");?>
- <?=gettext("Use these for changing DNS results or for adding custom DNS records.");?>
- </td>
- </tr>
-</table>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont sortable" summary="results">
- <thead>
- <tr>
- <td width="20%" class="listhdrr"><?=gettext("Host");?></td>
- <td width="25%" class="listhdrr"><?=gettext("Domain");?></td>
- <td width="20%" class="listhdrr"><?=gettext("IP");?></td>
- <td width="25%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td width="17"></td>
- <td valign="middle">
- <a href="services_dnsmasq_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <td class="list" colspan="4"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17"></td>
- <td valign="middle">
- <a href="services_dnsmasq_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </tfoot>
- <tbody>
-<?php
- $i = 0;
- foreach ($a_hosts as $hostent):
-?>
- <tr>
- <td class="listlr" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
- <?=strtolower($hostent['host']);?>&nbsp;
- </td>
- <td class="listr" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
- <?=strtolower($hostent['domain']);?>&nbsp;
- </td>
- <td class="listr" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
- <?=$hostent['ip'];?>&nbsp;
- </td>
- <td class="listbg" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($hostent['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle"><a href="services_dnsmasq_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a></td>
- <td>
- <a href="services_dnsmasq.php?type=host&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this host?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- if ($hostent['aliases']['item'] && is_array($hostent['aliases']['item'])):
- foreach ($hostent['aliases']['item'] as $alias):
-?>
- <tr>
- <td class="listlr" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
- <?=strtolower($alias['host']);?>&nbsp;
- </td>
- <td class="listr" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
- <?=strtolower($alias['domain']);?>&nbsp;
- </td>
- <td class="listr" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
- Alias for <?=$hostent['host'] ? $hostent['host'] . '.' . $hostent['domain'] : $hostent['domain'];?>&nbsp;
- </td>
- <td class="listbg" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($alias['description']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <a href="services_dnsmasq_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
- </td>
- </tr>
-<?php
- endforeach;
- endif;
- $i++;
- endforeach;
-?>
- <tr style="display:none">
- <td></td>
- </tr>
- </tbody>
-</table>
-<br />
-<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont" summary="domain overrides">
- <tr>
- <td colspan="5" valign="top" class="listtopic"><?=gettext("Domain Overrides");?></td>
- </tr>
- <tr>
- <td>
- <p>
- <?=gettext("Entries in this area override an entire domain, and subdomains, by specifying an".
- " authoritative DNS server to be queried for that domain.");?>
- </p>
- </td>
- </tr>
-</table>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont sortable" summary="results">
- <thead>
- <tr>
- <td width="35%" class="listhdrr"><?=gettext("Domain");?></td>
- <td width="20%" class="listhdrr"><?=gettext("IP");?></td>
- <td width="35%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17" height="17"></td>
- <td>
- <a href="services_dnsmasq_domainoverride_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <td class="list" colspan="3"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17" height="17"></td>
- <td>
- <a href="services_dnsmasq_domainoverride_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </tfoot>
- <tbody>
-<?php
- $i = 0;
- foreach ($a_domainOverrides as $doment):
-?>
- <tr>
- <td class="listlr">
- <?=strtolower($doment['domain']);?>&nbsp;
- </td>
- <td class="listr">
- <?=$doment['ip'];?>&nbsp;
- </td>
- <td class="listbg">
- <?=htmlspecialchars($doment['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <a href="services_dnsmasq_domainoverride_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
- &nbsp;<a href="services_dnsmasq.php?act=del&amp;type=doverride&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this domain override?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr style="display:none">
- <td></td>
- </tr>
- </tbody>
-</table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
-enable_change(false);
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_dnsmasq_domainoverride_edit.php b/usr/local/www/services_dnsmasq_domainoverride_edit.php
deleted file mode 100644
index ca66b49..0000000
--- a/usr/local/www/services_dnsmasq_domainoverride_edit.php
+++ /dev/null
@@ -1,197 +0,0 @@
-<?php
-/*
- services_dnsmasq_domainoverride_edit.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2005 Bob Zoller <bob@kludgebox.com> and Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: dnsforwarder
-*/
-
-##|+PRIV
-##|*IDENT=page-services-dnsforwarder-editdomainoverride
-##|*NAME=Services: DNS Forwarder: Edit Domain Override page
-##|*DESCR=Allow access to the 'Services: DNS Forwarder: Edit Domain Override' page.
-##|*MATCH=services_dnsmasq_domainoverride_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_dnsmasq.php');
-}
-
-if (!is_array($config['dnsmasq']['domainoverrides'])) {
- $config['dnsmasq']['domainoverrides'] = array();
-}
-$a_domainOverrides = &$config['dnsmasq']['domainoverrides'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_domainOverrides[$id]) {
- $pconfig['domain'] = $a_domainOverrides[$id]['domain'];
- if (is_ipaddr($a_domainOverrides[$id]['ip']) && ($a_domainOverrides[$id]['ip'] != '#')) {
- $pconfig['ip'] = $a_domainOverrides[$id]['ip'];
- } else {
- $dnsmasqpieces = explode('@', $a_domainOverrides[$id]['ip'], 2);
- $pconfig['ip'] = $dnsmasqpieces[0];
- $pconfig['dnssrcip'] = $dnsmasqpieces[1];
- }
- $pconfig['descr'] = $a_domainOverrides[$id]['descr'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "domain ip");
- $reqdfieldsn = array(gettext("Domain"), gettext("IP address"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- function String_Begins_With($needle, $haystack) {
- return (substr($haystack, 0, strlen($needle)) == $needle);
- }
-
- if (String_Begins_With(_msdcs, $_POST['domain'])) {
- $subdomainstr = substr($_POST['domain'], 7);
- if ($subdomainstr && !is_domain($subdomainstr)) {
- $input_errors[] = gettext("A valid domain must be specified after _msdcs.");
- }
- } elseif ($_POST['domain'] && !is_domain($_POST['domain'])) {
- $input_errors[] = gettext("A valid domain must be specified.");
- }
- if ($_POST['ip'] && !is_ipaddr($_POST['ip']) && ($_POST['ip'] != '#') && ($_POST['ip'] != '!')) {
- $input_errors[] = gettext("A valid IP address must be specified, or # for an exclusion or ! to not forward at all.");
- }
- if ($_POST['dnssrcip'] && !in_array($_POST['dnssrcip'], get_configured_ip_addresses())) {
- $input_errors[] = gettext("An interface IP address must be specified for the DNS query source.");
- }
- if (!$input_errors) {
- $doment = array();
- $doment['domain'] = $_POST['domain'];
- if (empty($_POST['dnssrcip'])) {
- $doment['ip'] = $_POST['ip'];
- } else {
- $doment['ip'] = $_POST['ip'] . "@" . $_POST['dnssrcip'];
- }
- $doment['descr'] = $_POST['descr'];
-
- if (isset($id) && $a_domainOverrides[$id]) {
- $a_domainOverrides[$id] = $doment;
- } else {
- $a_domainOverrides[] = $doment;
- }
-
- $retval = services_dnsmasq_configure();
-
- write_config();
-
- header("Location: services_dnsmasq.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("DNS forwarder"), gettext("Edit Domain Override"));
-$shortcut_section = "forwarder";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="services_dnsmasq_domainoverride_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="domain override">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Domain");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="domain" type="text" class="formfld unknown" id="domain" size="40" value="<?=htmlspecialchars($pconfig['domain']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Domain to override (NOTE: this does not have to be a valid TLD!)"); ?><br />
- <?=gettext("e.g."); ?> <em><?=gettext("test"); ?></em> <?=gettext("or"); ?> <em>mycompany.localdomain</em> <?=gettext("or"); ?> <em>1.168.192.in-addr.arpa</em>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("IP address");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="ip" type="text" class="formfld unknown" id="ip" size="40" value="<?=htmlspecialchars($pconfig['ip']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("IP address of the authoritative DNS server for this domain"); ?><br />
- <?=gettext("e.g."); ?> <em>192.168.100.100</em><br /><?=gettext("Or enter # for an exclusion to pass through this host/subdomain to standard nameservers instead of a previous override."); ?><br /><?=gettext("Or enter ! for lookups for this host/subdomain to NOT be forwarded anywhere."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Source IP");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="dnssrcip" type="text" class="formfld unknown" id="dnssrcip" size="40" value="<?=htmlspecialchars($pconfig['dnssrcip']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Source IP address for queries to the DNS server for the override domain."); ?><br />
- <?=gettext("Leave blank unless your DNS server is accessed through a VPN tunnel."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed).");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_domainOverrides[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_dnsmasq_edit.php b/usr/local/www/services_dnsmasq_edit.php
deleted file mode 100644
index 4b4c1c4..0000000
--- a/usr/local/www/services_dnsmasq_edit.php
+++ /dev/null
@@ -1,345 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_dnsmasq_edit.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Bob Zoller <bob@kludgebox.com> and Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: dnsforwarder
-*/
-
-##|+PRIV
-##|*IDENT=page-services-dnsforwarder-edithost
-##|*NAME=Services: DNS Forwarder: Edit host page
-##|*DESCR=Allow access to the 'Services: DNS Forwarder: Edit host' page.
-##|*MATCH=services_dnsmasq_edit.php*
-##|-PRIV
-
-function hostcmp($a, $b) {
- return strcasecmp($a['host'], $b['host']);
-}
-
-function hosts_sort() {
- global $g, $config;
-
- if (!is_array($config['dnsmasq']['hosts'])) {
- return;
- }
-
- usort($config['dnsmasq']['hosts'], "hostcmp");
-}
-
-require("guiconfig.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_dnsmasq.php');
-}
-
-if (!is_array($config['dnsmasq']['hosts'])) {
- $config['dnsmasq']['hosts'] = array();
-}
-
-$a_hosts = &$config['dnsmasq']['hosts'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_hosts[$id]) {
- $pconfig['host'] = $a_hosts[$id]['host'];
- $pconfig['domain'] = $a_hosts[$id]['domain'];
- $pconfig['ip'] = $a_hosts[$id]['ip'];
- $pconfig['descr'] = $a_hosts[$id]['descr'];
- $pconfig['aliases'] = $a_hosts[$id]['aliases'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "domain ip");
- $reqdfieldsn = array(gettext("Domain"), gettext("IP address"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if ($_POST['host']) {
- if (!is_hostname($_POST['host'])) {
- $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'. It may not start or end with '-'.");
- } else {
- if (!is_unqualified_hostname($_POST['host'])) {
- $input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted");
- }
- }
- }
-
- if (($_POST['domain'] && !is_domain($_POST['domain']))) {
- $input_errors[] = gettext("A valid domain must be specified.");
- }
-
- if (($_POST['ip'] && !is_ipaddr($_POST['ip']))) {
- $input_errors[] = gettext("A valid IP address must be specified.");
- }
-
- /* collect aliases */
- $aliases = array();
- foreach ($_POST as $key => $value) {
- $entry = '';
- if (!substr_compare('aliashost', $key, 0, 9)) {
- $entry = substr($key, 9);
- $field = 'host';
- }
- elseif (!substr_compare('aliasdomain', $key, 0, 11)) {
- $entry = substr($key, 11);
- $field = 'domain';
- }
- elseif (!substr_compare('aliasdescription', $key, 0, 16)) {
- $entry = substr($key, 16);
- $field = 'description';
- }
- if (ctype_digit($entry)) {
- $aliases[$entry][$field] = $value;
- }
- }
- $pconfig['aliases']['item'] = $aliases;
-
- /* validate aliases */
- foreach ($aliases as $idx => $alias) {
- $aliasreqdfields = array('aliasdomain' . $idx);
- $aliasreqdfieldsn = array(gettext("Alias Domain"));
-
- do_input_validation($_POST, $aliasreqdfields, $aliasreqdfieldsn, $input_errors);
- if ($alias['host']) {
- if (!is_hostname($alias['host'])) {
- $input_errors[] = gettext("Hostnames in an alias list can only contain the characters A-Z, 0-9 and '-'. They may not start or end with '-'.");
- } else {
- if (!is_unqualified_hostname($alias['host'])) {
- $input_errors[] = gettext("A valid alias hostname is specified, but the domain name part should be omitted");
- }
- }
- }
- if (($alias['domain'] && !is_domain($alias['domain']))) {
- $input_errors[] = gettext("A valid domain must be specified in alias list.");
- }
- }
-
- /* check for overlaps */
- foreach ($a_hosts as $hostent) {
- if (isset($id) && ($a_hosts[$id]) && ($a_hosts[$id] === $hostent)) {
- continue;
- }
-
- if (($hostent['host'] == $_POST['host']) &&
- ($hostent['domain'] == $_POST['domain']) &&
- ((is_ipaddrv4($hostent['ip']) && is_ipaddrv4($_POST['ip'])) ||
- (is_ipaddrv6($hostent['ip']) && is_ipaddrv6($_POST['ip'])))) {
- $input_errors[] = gettext("This host/domain already exists.");
- break;
- }
- }
-
- if (!$input_errors) {
- $hostent = array();
- $hostent['host'] = $_POST['host'];
- $hostent['domain'] = $_POST['domain'];
- $hostent['ip'] = $_POST['ip'];
- $hostent['descr'] = $_POST['descr'];
- $hostent['aliases']['item'] = $aliases;
-
- if (isset($id) && $a_hosts[$id]) {
- $a_hosts[$id] = $hostent;
- } else {
- $a_hosts[] = $hostent;
- }
- hosts_sort();
-
- mark_subsystem_dirty('hosts');
-
- write_config();
-
- header("Location: services_dnsmasq.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("DNS forwarder"), gettext("Edit host"));
-$shortcut_section = "forwarder";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript" src="/javascript/row_helper.js">
-</script>
-
-<script type="text/javascript">
-//<![CDATA[
- rowname[0] = "aliashost";
- rowtype[0] = "textbox";
- rowsize[0] = "20";
- rowname[1] = "aliasdomain";
- rowtype[1] = "textbox";
- rowsize[1] = "20";
- rowname[2] = "aliasdescription";
- rowtype[2] = "textbox";
- rowsize[2] = "20";
-//]]>
-</script>
-
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="services_dnsmasq_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="dns edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit DNS Forwarder entry");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Host");?></td>
- <td width="78%" class="vtable">
- <input name="host" type="text" class="formfld unknown" id="host" size="40" value="<?=htmlspecialchars($pconfig['host']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Name of the host, without domain part"); ?><br />
- <?=gettext("e.g."); ?> <em><?=gettext("myhost"); ?></em>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Domain");?></td>
- <td width="78%" class="vtable">
- <input name="domain" type="text" class="formfld unknown" id="domain" size="40" value="<?=htmlspecialchars($pconfig['domain']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Domain of the host"); ?><br />
- <?=gettext("e.g."); ?> <em><?=gettext("example.com"); ?></em>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("IP address");?></td>
- <td width="78%" class="vtable">
- <input name="ip" type="text" class="formfld unknown" id="ip" size="40" value="<?=htmlspecialchars($pconfig['ip']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("IP address of the host"); ?><br />
- <?=gettext("e.g."); ?> <em>192.168.100.100</em> <?=gettext("or"); ?> <em>fd00:abcd::1</em>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed).");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><div id="addressnetworkport"><?=gettext("Aliases"); ?></div></td>
- <td width="78%" class="vtable">
- <table id="maintable" summary="aliases">
- <tbody>
- <tr>
- <td colspan="4">
- <div style="padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066; background-color: #ffffff; color: #000000; font-size: 8pt;" id="itemhelp">
- <?=gettext("Enter additional names for this host."); ?>
- </div>
- </td>
- </tr>
- <tr>
- <td><div id="onecolumn"><?=gettext("Host");?></div></td>
- <td><div id="twocolumn"><?=gettext("Domain");?></div></td>
- <td><div id="threecolumn"><?=gettext("Description");?></div></td>
- </tr>
-<?php
- $counter = 0;
- if ($pconfig['aliases']['item']):
- foreach ($pconfig['aliases']['item'] as $item):
- $host = $item['host'];
- $domain = $item['domain'];
- $description = $item['description'];
-?>
- <tr>
- <td>
- <input autocomplete="off" name="aliashost<?php echo $counter; ?>" type="text" class="formfld unknown" id="aliashost<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($host);?>" />
- </td>
- <td>
- <input autocomplete="off" name="aliasdomain<?php echo $counter; ?>" type="text" class="formfld unknown" id="aliasdomain<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($domain);?>" />
- </td>
- <td>
- <input name="aliasdescription<?php echo $counter; ?>" type="text" class="formfld unknown" id="aliasdescription<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($description);?>" />
- </td>
- <td>
- <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="" title="<?=gettext("remove this entry"); ?>" /></a>
- </td>
- </tr>
-<?php
- $counter++;
- endforeach;
- endif;
-?>
- </tbody>
- </table>
- <a onclick="javascript:addRowTo('maintable', 'formfldalias'); return false;" href="#">
- <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
- </a>
- <script type="text/javascript">
- //<![CDATA[
- field_counter_js = 3;
- rows = 1;
- totalrows = <?php echo $counter; ?>;
- loaded = <?php echo $counter; ?>;
- //]]>
- </script>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_hosts[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_dyndns.php b/usr/local/www/services_dyndns.php
deleted file mode 100644
index 5051f00..0000000
--- a/usr/local/www/services_dyndns.php
+++ /dev/null
@@ -1,229 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_dyndns.php
-
- Copyright (C) 2008 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/host
- pfSense_MODULE: dyndns
-*/
-
-##|+PRIV
-##|*IDENT=page-services-dynamicdnsclients
-##|*NAME=Services: Dynamic DNS clients page
-##|*DESCR=Allow access to the 'Services: Dynamic DNS clients' page.
-##|*MATCH=services_dyndns.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (!is_array($config['dyndnses']['dyndns'])) {
- $config['dyndnses']['dyndns'] = array();
-}
-
-$a_dyndns = &$config['dyndnses']['dyndns'];
-
-if ($_GET['act'] == "del") {
-
- $conf = $a_dyndns[$_GET['id']];
- @unlink("{$g['conf_path']}/dyndns_{$conf['interface']}{$conf['type']}" . escapeshellarg($conf['host']) . "{$conf['id']}.cache");
- unset($a_dyndns[$_GET['id']]);
-
- write_config();
- services_dyndns_configure();
-
- header("Location: services_dyndns.php");
- exit;
-}
-
-$pgtitle = array(gettext("Services"), gettext("Dynamic DNS clients"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_dyndns.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="dynamic dns">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("DynDns"), true, "services_dyndns.php");
- $tab_array[] = array(gettext("RFC 2136"), false, "services_rfc2136.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="5%" class="listhdrr"><?=gettext("Interface");?></td>
- <td width="15%" class="listhdrr"><?=gettext("Service");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Hostname");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Cached IP");?></td>
- <td width="50%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list"></td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_dyndns as $dyndns):
-?>
- <tr ondblclick="document.location='services_dyndns_edit.php?id=<?=$i;?>'">
- <td class="listlr">
-<?php
- $iflist = get_configured_interface_with_descr();
- foreach ($iflist as $if => $ifdesc) {
- if ($dyndns['interface'] == $if) {
- if (!isset($dyndns['enable'])) {
- echo "<span class=\"gray\">{$ifdesc}</span>";
- } else {
- echo "{$ifdesc}";
- }
- break;
- }
- }
- $groupslist = return_gateway_groups_array();
- foreach ($groupslist as $if => $group) {
- if ($dyndns['interface'] == $if) {
- if (!isset($dyndns['enable'])) {
- echo "<span class=\"gray\">{$if}</span>";
- } else {
- echo "{$if}";
- }
- break;
- }
- }
-?>
- </td>
- <td class="listr">
-<?php
- $types = explode(",", DYNDNS_PROVIDER_DESCRIPTIONS);
- $vals = explode(" ", DYNDNS_PROVIDER_VALUES);
- for ($j = 0; $j < count($vals); $j++) {
- if ($vals[$j] == $dyndns['type']) {
- if (!isset($dyndns['enable'])) {
- echo "<span class=\"gray\">" . htmlspecialchars($types[$j]) . "</span>";
- } else {
- echo htmlspecialchars($types[$j]);
- }
- break;
- }
- }
-?>
- </td>
- <td class="listr">
-<?php
- if (!isset($dyndns['enable'])) {
- echo "<span class=\"gray\">" . htmlspecialchars($dyndns['host']) . "</span>";
- } else {
- echo htmlspecialchars($dyndns['host']);
- }
-?>
- </td>
- <td class="listr">
-<?php
- $filename = "{$g['conf_path']}/dyndns_{$dyndns['interface']}{$dyndns['type']}" . escapeshellarg($dyndns['host']) . "{$dyndns['id']}.cache";
- $filename_v6 = "{$g['conf_path']}/dyndns_{$dyndns['interface']}{$dyndns['type']}" . escapeshellarg($dyndns['host']) . "{$dyndns['id']}_v6.cache";
- if (file_exists($filename)) {
- $ipaddr = dyndnsCheckIP($dyndns['interface']);
- $cached_ip_s = explode(":", file_get_contents($filename));
- $cached_ip = $cached_ip_s[0];
- if ($ipaddr <> $cached_ip) {
- echo "<font color='red'>";
- } else {
- echo "<font color='green'>";
- }
- echo htmlspecialchars($cached_ip);
- echo "</font>";
- } else if (file_exists($filename_v6)) {
- $ipv6addr = get_interface_ipv6($dyndns['interface']);
- $cached_ipv6_s = explode("|", file_get_contents($filename_v6));
- $cached_ipv6 = $cached_ipv6_s[0];
- if ($ipv6addr <> $cached_ipv6) {
- echo "<font color='red'>";
- } else {
- echo "<font color='green'>";
- }
- echo htmlspecialchars($cached_ipv6);
- echo "</font>";
- } else {
- echo "N/A";
- }
-?>
- </td>
- <td class="listbg">
-<?php
- if (!isset($dyndns['enable'])) {
- echo "<span class=\"gray\">".htmlspecialchars($dyndns['descr'])."</span>";
- } else {
- echo htmlspecialchars($dyndns['descr']);
- }
-?>
- </td>
- <td valign="middle" class="list nowrap">
- <a href="services_dyndns_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
- &nbsp;<a href="services_dyndns.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this entry?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="5"></td>
- <td class="list">
- <a href="services_dyndns_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- <tr>
- <td colspan="5" class="list">
- <p class="vexpl">
- <span class="red">
- <strong>
- <?=gettext("Note:");?><br />
- </strong>
- </span>
- <?=gettext("IP addresses appearing in green are up to date with Dynamic DNS provider.");?><br />
- <?=gettext("You can force an update for an IP address on the edit page for that service.");?>
- </p>
- </td>
- <td class="list">&nbsp;</td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_dyndns_edit.php b/usr/local/www/services_dyndns_edit.php
deleted file mode 100644
index a619ce9..0000000
--- a/usr/local/www/services_dyndns_edit.php
+++ /dev/null
@@ -1,485 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_dyndns_edit.php
-
- Copyright (C) 2008 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /bin/rm
- pfSense_MODULE: dyndns
-*/
-
-##|+PRIV
-##|*IDENT=page-services-dynamicdnsclient
-##|*NAME=Services: Dynamic DNS client page
-##|*DESCR=Allow access to the 'Services: Dynamic DNS client' page.
-##|*MATCH=services_dyndns_edit.php*
-##|-PRIV
-
-/* returns true if $uname is a valid DynDNS username */
-function is_dyndns_username($uname) {
- if (!is_string($uname)) {
- return false;
- }
-
- if (preg_match("/[^a-z0-9\-\+.@_:]/i", $uname)) {
- return false;
- } else {
- return true;
- }
-}
-
-require("guiconfig.inc");
-
-if (!is_array($config['dyndnses']['dyndns'])) {
- $config['dyndnses']['dyndns'] = array();
-}
-
-$a_dyndns = &$config['dyndnses']['dyndns'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && isset($a_dyndns[$id])) {
- $pconfig['username'] = $a_dyndns[$id]['username'];
- $pconfig['password'] = $a_dyndns[$id]['password'];
- $pconfig['host'] = $a_dyndns[$id]['host'];
- $pconfig['mx'] = $a_dyndns[$id]['mx'];
- $pconfig['type'] = $a_dyndns[$id]['type'];
- $pconfig['enable'] = !isset($a_dyndns[$id]['enable']);
- $pconfig['interface'] = $a_dyndns[$id]['interface'];
- $pconfig['wildcard'] = isset($a_dyndns[$id]['wildcard']);
- $pconfig['verboselog'] = isset($a_dyndns[$id]['verboselog']);
- $pconfig['curl_ipresolve_v4'] = isset($a_dyndns[$id]['curl_ipresolve_v4']);
- $pconfig['curl_ssl_verifypeer'] = isset($a_dyndns[$id]['curl_ssl_verifypeer']);
- $pconfig['zoneid'] = $a_dyndns[$id]['zoneid'];
- $pconfig['ttl'] = $a_dyndns[$id]['ttl'];
- $pconfig['updateurl'] = $a_dyndns[$id]['updateurl'];
- $pconfig['resultmatch'] = $a_dyndns[$id]['resultmatch'];
- $pconfig['requestif'] = $a_dyndns[$id]['requestif'];
- $pconfig['descr'] = $a_dyndns[$id]['descr'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- if (($pconfig['type'] == "freedns" || $pconfig['type'] == "namecheap") && $_POST['username'] == "") {
- $_POST['username'] = "none";
- }
-
- /* input validation */
- $reqdfields = array();
- $reqdfieldsn = array();
- $reqdfields = array("type");
- $reqdfieldsn = array(gettext("Service type"));
- if ($pconfig['type'] != "custom" && $pconfig['type'] != "custom-v6") {
- $reqdfields[] = "host";
- $reqdfieldsn[] = gettext("Hostname");
- $reqdfields[] = "passwordfld";
- $reqdfieldsn[] = gettext("Password");
- $reqdfields[] = "username";
- $reqdfieldsn[] = gettext("Username");
- } else {
- $reqdfields[] = "updateurl";
- $reqdfieldsn[] = gettext("Update URL");
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (isset($_POST['host']) && in_array("host", $reqdfields)) {
- /* Namecheap can have a @. in hostname */
- if ($pconfig['type'] == "namecheap" && substr($_POST['host'], 0, 2) == '@.') {
- $host_to_check = substr($_POST['host'], 2);
- } else {
- $host_to_check = $_POST['host'];
- }
-
- if ($pconfig['type'] != "custom" && $pconfig['type'] != "custom-v6") {
- if (!is_domain($host_to_check)) {
- $input_errors[] = gettext("The hostname contains invalid characters.");
- }
- }
-
- unset($host_to_check);
- }
- if (($_POST['mx'] && !is_domain($_POST['mx']))) {
- $input_errors[] = gettext("The MX contains invalid characters.");
- }
- if ((in_array("username", $reqdfields) && $_POST['username'] && !is_dyndns_username($_POST['username'])) || ((in_array("username", $reqdfields)) && ($_POST['username'] == ""))) {
- $input_errors[] = gettext("The username contains invalid characters.");
- }
-
- if (!$input_errors) {
- $dyndns = array();
- $dyndns['type'] = $_POST['type'];
- $dyndns['username'] = $_POST['username'];
- $dyndns['password'] = $_POST['passwordfld'];
- $dyndns['host'] = $_POST['host'];
- $dyndns['mx'] = $_POST['mx'];
- $dyndns['wildcard'] = $_POST['wildcard'] ? true : false;
- $dyndns['verboselog'] = $_POST['verboselog'] ? true : false;
- $dyndns['curl_ipresolve_v4'] = $_POST['curl_ipresolve_v4'] ? true : false;
- $dyndns['curl_ssl_verifypeer'] = $_POST['curl_ssl_verifypeer'] ? true : false;
- /* In this place enable means disabled */
- if ($_POST['enable']) {
- unset($dyndns['enable']);
- } else {
- $dyndns['enable'] = true;
- }
- $dyndns['interface'] = $_POST['interface'];
- $dyndns['zoneid'] = $_POST['zoneid'];
- $dyndns['ttl'] = $_POST['ttl'];
- $dyndns['updateurl'] = $_POST['updateurl'];
- // Trim hard-to-type but sometimes returned characters
- $dyndns['resultmatch'] = trim($_POST['resultmatch'], "\t\n\r");
- ($dyndns['type'] == "custom" || $dyndns['type'] == "custom-v6") ? $dyndns['requestif'] = $_POST['requestif'] : $dyndns['requestif'] = $_POST['interface'];
- $dyndns['descr'] = $_POST['descr'];
- $dyndns['force'] = isset($_POST['force']);
-
- if ($dyndns['username'] == "none") {
- $dyndns['username'] = "";
- }
-
- if (isset($id) && $a_dyndns[$id]) {
- $a_dyndns[$id] = $dyndns;
- } else {
- $a_dyndns[] = $dyndns;
- $id = count($a_dyndns) - 1;
- }
-
- $dyndns['id'] = $id;
- //Probably overkill, but its better to be safe
- for ($i = 0; $i < count($a_dyndns); $i++) {
- $a_dyndns[$i]['id'] = $i;
- }
-
- write_config();
-
- services_dyndns_configure_client($dyndns);
-
- header("Location: services_dyndns.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("Dynamic DNS client"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<script type="text/javascript">
-//<![CDATA[
-function _onTypeChange(type) {
- switch (type) {
- case "custom":
- case "custom-v6":
- document.getElementById("_resulttr").style.display = '';
- document.getElementById("_urltr").style.display = '';
- document.getElementById("_requestiftr").style.display = '';
- document.getElementById("_curloptions").style.display = '';
- document.getElementById("_hostnametr").style.display = 'none';
- document.getElementById("_mxtr").style.display = 'none';
- document.getElementById("_wildcardtr").style.display = 'none';
- document.getElementById("r53_zoneid").style.display='none';
- document.getElementById("r53_ttl").style.display='none';
- break;
- case "dnsimple":
- case "route53":
- document.getElementById("_resulttr").style.display = 'none';
- document.getElementById("_urltr").style.display = 'none';
- document.getElementById("_requestiftr").style.display = 'none';
- document.getElementById("_curloptions").style.display = 'none';
- document.getElementById("_hostnametr").style.display = '';
- document.getElementById("_mxtr").style.display = '';
- document.getElementById("_wildcardtr").style.display = '';
- document.getElementById("r53_zoneid").style.display='';
- document.getElementById("r53_ttl").style.display='';
- break;
- default:
- document.getElementById("_resulttr").style.display = 'none';
- document.getElementById("_urltr").style.display = 'none';
- document.getElementById("_requestiftr").style.display = 'none';
- document.getElementById("_curloptions").style.display = 'none';
- document.getElementById("_hostnametr").style.display = '';
- document.getElementById("_mxtr").style.display = '';
- document.getElementById("_wildcardtr").style.display = '';
- document.getElementById("r53_zoneid").style.display='none';
- document.getElementById("r53_ttl").style.display='none';
- }
-}
-//]]>
-</script>
-<form action="services_dyndns_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="dynamic dns edit">
- <tr>
- <td colspan="2" valign="top" class="optsect_t">
- <table border="0" cellspacing="0" cellpadding="0" width="100%" summary="title">
- <tr>
- <td class="optsect_s"><strong><?=gettext("Dynamic DNS client");?></strong></td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Disable");?></td>
- <td width="78%" class="vtable">
- <input name="enable" type="checkbox" id="enable" value="<?=gettext("yes");?>" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Service type");?></td>
- <td width="78%" class="vtable">
- <select name="type" class="formselect" id="type" onchange="_onTypeChange(this.options[this.selectedIndex].value);">
- <?php
- $types = explode(",", DYNDNS_PROVIDER_DESCRIPTIONS);
- $vals = explode(" ", DYNDNS_PROVIDER_VALUES);
- $j = 0;
- for ($j = 0; $j < count($vals); $j++):
- ?>
- <option value="<?=$vals[$j];?>" <?php if ($vals[$j] == $pconfig['type']) echo "selected=\"selected\"";?>>
- <?=htmlspecialchars($types[$j]);?>
- </option>
- <?php
- endfor;
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface to monitor");?></td>
- <td width="78%" class="vtable">
- <select name="interface" class="formselect" id="interface">
- <?php
- $iflist = get_configured_interface_with_descr();
- foreach ($iflist as $if => $ifdesc) {
- echo "<option value=\"{$if}\"";
- if ($pconfig['interface'] == $if) {
- echo "selected=\"selected\"";
- }
- echo ">{$ifdesc}</option>\n";
- }
- unset($iflist);
- $grouplist = return_gateway_groups_array();
- foreach ($grouplist as $name => $group) {
- echo "<option value=\"{$name}\"";
- if ($pconfig['interface'] == $name) {
- echo "selected=\"selected\"";
- }
- echo ">GW Group {$name}</option>\n";
- }
- unset($grouplist);
- ?>
- </select>
- </td>
- </tr>
- <tr id="_requestiftr">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface to send update from");?></td>
- <td width="78%" class="vtable">
- <select name="requestif" class="formselect" id="requestif">
- <?php
- $iflist = get_configured_interface_with_descr();
- foreach ($iflist as $if => $ifdesc) {
- echo "<option value=\"{$if}\"";
- if ($pconfig['requestif'] == $if) {
- echo "selected=\"selected\"";
- }
- echo ">{$ifdesc}</option>\n";
- }
- unset($iflist);
- $grouplist = return_gateway_groups_array();
- foreach ($grouplist as $name => $group) {
- echo "<option value=\"{$name}\"";
- if ($pconfig['requestif'] == $name) {
- echo "selected=\"selected\"";
- }
- echo ">GW Group {$name}</option>\n";
- }
- unset($grouplist);
- ?>
- </select>
- <br /><?=gettext("Note: This is almost always the same as the Interface to Monitor.");?>
- </td>
- </tr>
- <tr id="_hostnametr">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname");?></td>
- <td width="78%" class="vtable">
- <input name="host" type="text" class="formfld unknown" id="host" size="30" value="<?=htmlspecialchars($pconfig['host']);?>" />
- <br />
- <span class="vexpl">
- <span class="red">
- <strong><?=gettext("Note:");?><br /></strong>
- </span>
- <?=gettext("Enter the complete host/domain name. example: myhost.dyndns.org");?><br />
- <?=gettext("he.net tunnelbroker: Enter your tunnel ID");?><br />
- <?=gettext("GleSYS: Enter your record ID");?><br />
- <?=gettext("DNSimple: Enter only the domain name");?><br />
- <?=gettext("DNS Made Easy: Enter your record ID separated by commas if more than one at a time");?>
- </span>
- </td>
- </tr>
- <tr id="_mxtr">
- <td width="22%" valign="top" class="vncell"><?=gettext("MX"); ?></td>
- <td width="78%" class="vtable">
- <input name="mx" type="text" class="formfld unknown" id="mx" size="30" value="<?=htmlspecialchars($pconfig['mx']);?>" />
- <br />
- <?=gettext("Note: With DynDNS service you can only use a hostname, not an IP address.");?>
- <br />
- <?=gettext("Set this option only if you need a special MX record. Not all services support this.");?>
- </td>
- </tr>
- <tr id="_wildcardtr">
- <td width="22%" valign="top" class="vncell"><?=gettext("Wildcards"); ?></td>
- <td width="78%" class="vtable">
- <input name="wildcard" type="checkbox" id="wildcard" value="yes" <?php if ($pconfig['wildcard']) echo "checked=\"checked\""; ?> />
- <?=gettext("Enable ");?><?=gettext("Wildcard"); ?>
- </td>
- </tr>
- <tr id="_verboselogtr">
- <td width="22%" valign="top" class="vncell"><?=gettext("Verbose logging"); ?></td>
- <td width="78%" class="vtable">
- <input name="verboselog" type="checkbox" id="verboselog" value="yes" <?php if ($pconfig['verboselog']) echo "checked=\"checked\""; ?> />
- <?=gettext("Enable ");?><?=gettext("verbose logging"); ?>
- </td>
- </tr>
- <tr id="_curloptions">
- <td width="22%" valign="top" class="vncell"><?=gettext("CURL options"); ?></td>
- <td width="78%" class="vtable">
- <input name="curl_ipresolve_v4" type="checkbox" id="curl_ipresolve_v4" value="yes" <?php if ($pconfig['curl_ipresolve_v4']) echo "checked=\"checked\""; ?> />
- <?=gettext("Force IPv4 resolving"); ?><br />
- <input name="curl_ssl_verifypeer" type="checkbox" id="curl_ssl_verifypeer" value="yes" <?php if ($pconfig['curl_ssl_verifypeer']) echo "checked=\"checked\""; ?> />
- <?=gettext("Verify SSL peer"); ?>
- </td>
- </tr>
- <tr id="_usernametr">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Username");?></td>
- <td width="78%" class="vtable">
- <input name="username" type="text" class="formfld user" id="username" size="20" value="<?=htmlspecialchars($pconfig['username']);?>" />
- <br /><?=gettext("Username is required for all types except Namecheap, FreeDNS and Custom Entries.");?>
- <br /><?=gettext("Route 53: Enter your Access Key ID.");?>
- <br /><?=gettext("GleSYS: Enter your API user.");?>
- <br /><?=gettext("For Custom Entries, Username and Password represent HTTP Authentication username and passwords.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Password");?></td>
- <td width="78%" class="vtable">
- <input name="passwordfld" type="password" class="formfld pwd" id="passwordfld" size="20" value="<?=htmlspecialchars($pconfig['password']);?>" />
- <br />
- <?=gettext("FreeDNS (freedns.afraid.org): Enter your \"Authentication Token\" provided by FreeDNS.");?>
- <br /><?=gettext("Route 53: Enter your Secret Access Key.");?>
- <br /><?=gettext("GleSYS: Enter your API key.");?>
- <br /><?=gettext("DNSimple: Enter your API token.");?>
- </td>
- </tr>
- <tr id="r53_zoneid" style="display:none">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Zone ID");?></td>
- <td width="78%" class="vtable">
- <input name="zoneid" type="text" class="formfld user" id="zoneid" size="20" value="<?=htmlspecialchars($pconfig['zoneid']);?>" />
- <br /><?=gettext("Enter Zone ID that you received when you created your domain in Route 53.");?>
- <br /><?=gettext("DNSimple: Enter the Record ID of record to update.");?>
- </td>
- </tr>
- <tr id="_urltr">
- <td width="22%" valign="top" class="vncell"><?=gettext("Update URL");?></td>
- <td width="78%" class="vtable">
- <input name="updateurl" type="text" class="formfld unknown" id="updateurl" size="60" value="<?=htmlspecialchars($pconfig['updateurl']);?>" />
- <br /><?=gettext("This is the only field required by for Custom Dynamic DNS, and is only used by Custom Entries.");?>
- <br /><?=gettext("If you need the new IP to be included in the request, put %IP% in its place.");?>
- </td>
- </tr>
- <tr id="_resulttr">
- <td width="22%" valign="top" class="vncell"><?=gettext("Result Match");?></td>
- <td width="78%" class="vtable">
- <textarea name="resultmatch" class="formpre" id="resultmatch" cols="65" rows="7"><?=htmlspecialchars($pconfig['resultmatch']);?></textarea>
- <br /><?=gettext("This field is only used by Custom Dynamic DNS Entries.");?>
- <br /><?=gettext("This field should be identical to what your DDNS Provider will return if the update succeeds, leave it blank to disable checking of returned results.");?>
- <br /><?=gettext("If you need the new IP to be included in the request, put %IP% in its place.");?>
- <br /><?=gettext("If you need to include multiple possible values, separate them with a |. If your provider includes a |, escape it with \\|");?>
- <br /><?=gettext("Tabs (\\t), newlines (\\n) and carriage returns (\\r) at the beginning or end of the returned results are removed before comparison.");?>
- </td>
- </tr>
- <tr id="r53_ttl" style="display:none">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("TTL");?></td>
- <td width="78%" class="vtable">
- <input name="ttl" type="text" class="formfld user" id="ttl" size="20" value="<?=htmlspecialchars($pconfig['ttl']);?>" />
- <br /><?=gettext("Choose TTL for your dns record.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="60" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
- <a href="services_dyndns.php"><input name="cancel" type="button" class="formbtn" value="<?=gettext("Cancel");?>" /></a>
- <?php if (isset($id) && $a_dyndns[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <input name="force" type="submit" class="formbtn" value="<?=gettext("Save & Force Update");?>" onclick="enable_change(true)" />
- <?php endif; ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <span class="vexpl">
- <span class="red">
- <strong>
- <?=gettext("Note:");?><br />
- </strong>
- </span>
- <?php printf(gettext("You must configure a DNS server in %sSystem:
- General setup%s or allow the DNS server list to be overridden
- by DHCP/PPP on WAN for dynamic DNS updates to work."), '<a href="system.php">', '</a>');?>
- </span>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
-_onTypeChange("<?php echo $pconfig['type']; ?>");
-//]]>
-</script>
-
-</body>
-</html>
diff --git a/usr/local/www/services_igmpproxy.php b/usr/local/www/services_igmpproxy.php
deleted file mode 100644
index 8749b2d..0000000
--- a/usr/local/www/services_igmpproxy.php
+++ /dev/null
@@ -1,189 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_igmpproxy.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2009 Ermal Luçi
- Copyright (C) 2004 Scott Ullrich
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: igmpproxy
-*/
-
-##|+PRIV
-##|*IDENT=page-services-igmpproxy
-##|*NAME=Services: Igmpproxy page
-##|*DESCR=Allow access to the 'Services: Igmpproxy' page.
-##|*MATCH=services_igmpproxy.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (!is_array($config['igmpproxy']['igmpentry'])) {
- $config['igmpproxy']['igmpentry'] = array();
-}
-
-//igmpproxy_sort();
-$a_igmpproxy = &$config['igmpproxy']['igmpentry'];
-
-if ($_POST) {
-
- $pconfig = $_POST;
-
- $retval = 0;
- /* reload all components that use igmpproxy */
- $retval = services_igmpproxy_configure();
-
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message($retval);
- } else {
- $savemsg = $retval;
- }
-
- clear_subsystem_dirty('igmpproxy');
-}
-
-if ($_GET['act'] == "del") {
- if ($a_igmpproxy[$_GET['id']]) {
- unset($a_igmpproxy[$_GET['id']]);
- write_config();
- mark_subsystem_dirty('igmpproxy');
- header("Location: services_igmpproxy.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("IGMP Proxy"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_igmpproxy.php" method="post">
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('igmpproxy')): ?><br/>
-<?php print_info_box_np(gettext("The IGMP entry list has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?>
-<?php endif; ?>
-
-<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="igmp proxy">
- <tr>
- <td width="15%" class="listhdrr"><?=gettext("Name");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Type");?></td>
- <td width="25%" class="listhdrr"><?=gettext("Values");?></td>
- <td width="25%" class="listhdr"><?=gettext("Description");?></td>
- <td width="5%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td valign="middle" width="17">&nbsp;</td>
- <td valign="middle">
- <a href="services_igmpproxy_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new igmpentry");?>" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_igmpproxy as $igmpentry):
-?>
- <tr>
- <td class="listlr" ondblclick="document.location='services_igmpproxy_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars(convert_friendly_interface_to_friendly_descr($igmpentry['ifname']));?>
- </td>
- <td class="listlr" ondblclick="document.location='services_igmpproxy_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($igmpentry['type']);?>
- </td>
- <td class="listr" ondblclick="document.location='services_igmpproxy_edit.php?id=<?=$i;?>';">
-<?php
- $addresses = implode(", ", array_slice(explode(" ", $igmpentry['address']), 0, 10));
- echo $addresses;
- if (count($addresses) < 10) {
- echo " ";
- } else {
- echo "...";
- }
-?>
- </td>
- <td class="listbg" ondblclick="document.location='services_igmpproxy_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($igmpentry['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle"><a href="services_igmpproxy_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit igmpentry"); ?>" alt="edit" /></a></td>
- <td>
- <a href="services_igmpproxy.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this igmp entry? All elements that still use it will become invalid (e.g. filter rules)!");?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete igmpentry");?>" alt="delete" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="4"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1">
- <tr>
- <td valign="middle" width="17">&nbsp;</td>
- <td valign="middle"><a href="services_igmpproxy_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new igmpentry");?>" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td colspan="2" width="78%">
- <br />
- <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <br />
- </td>
- </tr>
- <tr>
- <td class="tabcont" colspan="4">
- <p>
- <span class="vexpl">
- <span class="red">
- <strong>
- <?=gettext("Note:");?><br />
- </strong>
- </span>
- <?=gettext("Please add the interface for upstream, the allowed subnets, and the downstream interfaces you would like the proxy to allow. Only one 'upstream' interface can be configured.");?>
- </span>
- </p>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_igmpproxy_edit.php b/usr/local/www/services_igmpproxy_edit.php
deleted file mode 100644
index 2d299c0..0000000
--- a/usr/local/www/services_igmpproxy_edit.php
+++ /dev/null
@@ -1,312 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_igmpproxy_edit.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2009 Ermal Luçi
- Copyright (C) 2004 Scott Ullrich
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: igmpproxy
-*/
-
-##|+PRIV
-##|*IDENT=page-services-igmpproxy-edit
-##|*NAME=Firewall: Igmpproxy: Edit page
-##|*DESCR=Allow access to the 'Services: Igmpproxy: Edit' page.
-##|*MATCH=services_igmpproxy_edit.php*
-##|-PRIV
-
-$pgtitle = array(gettext("Firewall"), gettext("IGMP Proxy"), gettext("Edit"));
-
-require("guiconfig.inc");
-
-if (!is_array($config['igmpproxy']['igmpentry'])) {
- $config['igmpproxy']['igmpentry'] = array();
-}
-
-//igmpproxy_sort();
-$a_igmpproxy = &$config['igmpproxy']['igmpentry'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_igmpproxy[$id]) {
- $pconfig['ifname'] = $a_igmpproxy[$id]['ifname'];
- $pconfig['threshold'] = $a_igmpproxy[$id]['threshold'];
- $pconfig['type'] = $a_igmpproxy[$id]['type'];
- $pconfig['address'] = $a_igmpproxy[$id]['address'];
- $pconfig['descr'] = html_entity_decode($a_igmpproxy[$id]['descr']);
-
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- if ($_POST['type'] == "upstream") {
- foreach ($a_igmpproxy as $pid => $proxyentry) {
- if (isset($id) && $id == $pid) {
- continue;
- }
- if ($proxyentry['type'] == "upstream" && $proxyentry['ifname'] != $_POST['interface']) {
- $input_errors[] = gettext("Only one 'upstream' interface can be configured.");
- }
- }
- }
- $igmpentry = array();
- $igmpentry['ifname'] = $_POST['ifname'];
- $igmpentry['threshold'] = $_POST['threshold'];
- $igmpentry['type'] = $_POST['type'];
- $address = "";
- $isfirst = 0;
- /* item is a normal igmpentry type */
- for ($x = 0; $x < 4999; $x++) {
- if ($_POST["address{$x}"] <> "") {
- if ($isfirst > 0) {
- $address .= " ";
- }
- $address .= $_POST["address{$x}"];
- $address .= "/" . $_POST["address_subnet{$x}"];
- $isfirst++;
- }
- }
-
- if (!$input_errors) {
- $igmpentry['address'] = $address;
- $igmpentry['descr'] = $_POST['descr'];
-
- if (isset($id) && $a_igmpproxy[$id]) {
- $a_igmpproxy[$id] = $igmpentry;
- } else {
- $a_igmpproxy[] = $igmpentry;
- }
-
- write_config();
-
- mark_subsystem_dirty('igmpproxy');
- header("Location: services_igmpproxy.php");
- exit;
- } else {
- //we received input errors, copy data to prevent retype
- $pconfig['descr'] = $_POST['descr'];
- $pconfig['address'] = $address;
- $pconfig['type'] = $_POST['type'];
- }
-}
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php
- include("fbegin.inc");
-?>
-
-<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js">
-</script>
-<script type="text/javascript" src="/javascript/row_helper.js">
-</script>
-
-<input type="hidden" name="address_type" value="textbox" class="formfld unknown" />
-<input type="hidden" name="address_subnet_type" value="select" />
-
-<script type="text/javascript">
-//<![CDATA[
- rowname[0] = "address";
- rowtype[0] = "textbox,ipv4v6";
- rowsize[0] = "30";
-
- rowname[1] = "address_subnet";
- rowtype[1] = "select,ipv4v6";
- rowsize[1] = "1";
-
- rowname[2] = "detail";
- rowtype[2] = "textbox";
- rowsize[2] = "50";
-//]]>
-</script>
-
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<div id="inputerrors"></div>
-
-<form action="services_igmpproxy_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="igmp proxy edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("IGMP Proxy Edit");?></td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Interface");?></td>
- <td class="vtable">
- <select name="ifname" id="ifname" >
-<?php
- $iflist = get_configured_interface_with_descr();
- foreach ($iflist as $ifnam => $ifdescr) {
- echo "<option value=\"{$ifnam}\"";
- if ($ifnam == $pconfig['ifname']) {
- echo " selected=\"selected\"";
- }
- echo ">{$ifdescr}</option>";
- }
-?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed).");?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Type");?></td>
- <td class="vtable">
- <select name="type" class="formselect" id="type" >
- <option value="upstream" <?php if ($pconfig['type'] == "upstream") echo "selected=\"selected\""; ?>><?=gettext("Upstream Interface");?></option>
- <option value="downstream" <?php if ($pconfig['type'] == "downstream") echo "selected=\"selected\""; ?>><?=gettext("Downstream Interface");?></option>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("The <b>upstream</b> network interface is the outgoing interface which is" .
- " responsible for communicating to available multicast data sources." .
- " There can only be one upstream interface.");?>
- </span>
- <br />
- <span class="vexpl">
- <b><?=gettext("Downstream"); ?></b>
- <?=gettext("network interfaces are the distribution interfaces to the" .
- " destination networks, where multicast clients can join groups and" .
- " receive multicast data. One or more downstream interfaces must be configured.");?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Threshold");?></td>
- <td class="vtable">
- <input name="threshold" class="formfld unknown" id="threshold" value="<?php echo htmlspecialchars($pconfig['threshold']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Defines the TTL threshold for the network interface. Packets" .
- " with a lower TTL than the threshold value will be ignored. This" .
- " setting is optional, and by default the threshold is 1.");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><div id="addressnetworkport"><?=gettext("Network (s)");?></div></td>
- <td width="78%" class="vtable">
- <table id="maintable">
- <tbody>
- <tr>
- <td><div id="onecolumn"><?=gettext("Network");?></div></td>
- <td><div id="twocolumn"><?=gettext("CIDR");?></div></td>
- </tr>
-
-<?php
- $counter = 0;
- $address = $pconfig['address'];
- if ($address <> "") {
- $item = explode(" ", $address);
- foreach ($item as $ww) {
- $address = $item[$counter];
- $address_subnet = "";
- $item2 = explode("/", $address);
- foreach ($item2 as $current) {
- if ($item2[1] <> "") {
- $address = $item2[0];
- $address_subnet = $item2[1];
- }
- }
- $item4 = $item3[$counter];
- $tracker = $counter;
-?>
- <tr>
- <td>
- <input name="address<?php echo $tracker; ?>" type="text" class="formfld unknown" id="address<?php echo $tracker; ?>" size="30" value="<?=htmlspecialchars($address);?>" />
- </td>
- <td>
- <select name="address_subnet<?php echo $tracker; ?>" class="formselect" id="address_subnet<?php echo $tracker; ?>">
- <option></option>
- <?php for ($i = 32; $i >= 1; $i--): ?>
- <option value="<?=$i;?>" <?php if ($i == $address_subnet) echo "selected=\"selected\""; ?>><?=$i;?></option>
- <?php endfor; ?>
- </select>
- </td>
- <td>
- <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="delete" /></a>
- </td>
- </tr>
-<?php
- $counter++;
-
- } // end foreach
- } // end if
-?>
- </tbody>
- </table>
- <a onclick="javascript:addRowTo('maintable'); return false;" href="#">
- <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="add" title="<?=gettext("add another entry");?>" />
- </a>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <a href="services_igmpproxy.php"><input id="cancelbutton" name="cancelbutton" type="button" class="formbtn" value="<?=gettext("Cancel");?>" /></a>
- <?php if (isset($id) && $a_igmpproxy[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-
-<script type="text/javascript">
-//<![CDATA[
- field_counter_js = 2;
- rows = 1;
- totalrows = <?php echo $counter; ?>;
- loaded = <?php echo $counter; ?>;
-//]]>
-</script>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_ntpd.php b/usr/local/www/services_ntpd.php
deleted file mode 100644
index 1f4dd86..0000000
--- a/usr/local/www/services_ntpd.php
+++ /dev/null
@@ -1,462 +0,0 @@
-<?php
-/*
- services_ntpd.php
-
- Copyright (C) 2013 Dagorlad
- Copyright (C) 2012 Jim Pingle
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: ntpd
-*/
-
-##|+PRIV
-##|*IDENT=page-services-ntpd
-##|*NAME=Services: NTP
-##|*DESCR=Allow access to the 'Services: NTP' page.
-##|*MATCH=services_ntpd.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once('rrd.inc');
-require_once("shaper.inc");
-
-if (!is_array($config['ntpd'])) {
- $config['ntpd'] = array();
-}
-
-if (empty($config['ntpd']['interface'])) {
- if (is_array($config['installedpackages']['openntpd']) && is_array($config['installedpackages']['openntpd']['config']) &&
- is_array($config['installedpackages']['openntpd']['config'][0]) && !empty($config['installedpackages']['openntpd']['config'][0]['interface'])) {
- $pconfig['interface'] = explode(",", $config['installedpackages']['openntpd']['config'][0]['interface']);
- unset($config['installedpackages']['openntpd']);
- write_config("Upgraded settings from openttpd");
- } else {
- $pconfig['interface'] = array();
- }
-} else {
- $pconfig['interface'] = explode(",", $config['ntpd']['interface']);
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- if (!$input_errors) {
- if (is_array($_POST['interface'])) {
- $config['ntpd']['interface'] = implode(",", $_POST['interface']);
- } elseif (isset($config['ntpd']['interface'])) {
- unset($config['ntpd']['interface']);
- }
-
- if (!empty($_POST['gpsport']) && file_exists('/dev/'.$_POST['gpsport'])) {
- $config['ntpd']['gpsport'] = $_POST['gpsport'];
- } elseif (isset($config['ntpd']['gpsport'])) {
- unset($config['ntpd']['gpsport']);
- }
-
- unset($config['ntpd']['prefer']);
- unset($config['ntpd']['noselect']);
- $timeservers = '';
- for ($i = 0; $i < 10; $i++) {
- $tserver = trim($_POST["server{$i}"]);
- if (!empty($tserver)) {
- $timeservers .= "{$tserver} ";
- if (!empty($_POST["servprefer{$i}"])) {
- $config['ntpd']['prefer'] .= "{$tserver} ";
- }
- if (!empty($_POST["servselect{$i}"])) {
- $config['ntpd']['noselect'] .= "{$tserver} ";
- }
- }
- }
- if (trim($timeservers) == "") {
- $timeservers = "pool.ntp.org";
- }
- $config['system']['timeservers'] = trim($timeservers);
-
- if (!empty($_POST['ntporphan']) && ($_POST['ntporphan'] < 17) && ($_POST['ntporphan'] != '12')) {
- $config['ntpd']['orphan'] = $_POST['ntporphan'];
- } elseif (isset($config['ntpd']['orphan'])) {
- unset($config['ntpd']['orphan']);
- }
-
- if (!empty($_POST['logpeer'])) {
- $config['ntpd']['logpeer'] = $_POST['logpeer'];
- } elseif (isset($config['ntpd']['logpeer'])) {
- unset($config['ntpd']['logpeer']);
- }
-
- if (!empty($_POST['logsys'])) {
- $config['ntpd']['logsys'] = $_POST['logsys'];
- } elseif (isset($config['ntpd']['logsys'])) {
- unset($config['ntpd']['logsys']);
- }
-
- if (!empty($_POST['clockstats'])) {
- $config['ntpd']['clockstats'] = $_POST['clockstats'];
- } elseif (isset($config['ntpd']['clockstats'])) {
- unset($config['ntpd']['clockstats']);
- }
-
- if (!empty($_POST['loopstats'])) {
- $config['ntpd']['loopstats'] = $_POST['loopstats'];
- } elseif (isset($config['ntpd']['loopstats'])) {
- unset($config['ntpd']['loopstats']);
- }
-
- if (!empty($_POST['peerstats'])) {
- $config['ntpd']['peerstats'] = $_POST['peerstats'];
- } elseif (isset($config['ntpd']['peerstats'])) {
- unset($config['ntpd']['peerstats']);
- }
-
- if (empty($_POST['kod'])) {
- $config['ntpd']['kod'] = 'on';
- } elseif (isset($config['ntpd']['kod'])) {
- unset($config['ntpd']['kod']);
- }
-
- if (empty($_POST['nomodify'])) {
- $config['ntpd']['nomodify'] = 'on';
- } elseif (isset($config['ntpd']['nomodify'])) {
- unset($config['ntpd']['nomodify']);
- }
-
- if (!empty($_POST['noquery'])) {
- $config['ntpd']['noquery'] = $_POST['noquery'];
- } elseif (isset($config['ntpd']['noquery'])) {
- unset($config['ntpd']['noquery']);
- }
-
- if (!empty($_POST['noserve'])) {
- $config['ntpd']['noserve'] = $_POST['noserve'];
- } elseif (isset($config['ntpd']['noserve'])) {
- unset($config['ntpd']['noserve']);
- }
-
- if (empty($_POST['nopeer'])) {
- $config['ntpd']['nopeer'] = 'on';
- } elseif (isset($config['ntpd']['nopeer'])) {
- unset($config['ntpd']['nopeer']);
- }
-
- if (empty($_POST['notrap'])) {
- $config['ntpd']['notrap'] = 'on';
- } elseif (isset($config['ntpd']['notrap'])) {
- unset($config['ntpd']['notrap']);
- }
-
- if ((empty($_POST['statsgraph'])) == (isset($config['ntpd']['statsgraph']))) {
- $enable_rrd_graphing = true;
- }
- if (!empty($_POST['statsgraph'])) {
- $config['ntpd']['statsgraph'] = $_POST['statsgraph'];
- } elseif (isset($config['ntpd']['statsgraph'])) {
- unset($config['ntpd']['statsgraph']);
- }
- if (isset($enable_rrd_graphing)) {
- enable_rrd_graphing();
- }
-
- if (!empty($_POST['leaptxt'])) {
- $config['ntpd']['leapsec'] = base64_encode($_POST['leaptxt']);
- } elseif (isset($config['ntpd']['leapsec'])) {
- unset($config['ntpd']['leapsec']);
- }
-
- if (is_uploaded_file($_FILES['leapfile']['tmp_name'])) {
- $config['ntpd']['leapsec'] = base64_encode(file_get_contents($_FILES['leapfile']['tmp_name']));
- }
-
- write_config("Updated NTP Server Settings");
-
- $retval = 0;
- $retval = system_ntp_configure();
- $savemsg = get_std_save_message($retval);
- }
-}
-$closehead = false;
-$pconfig = &$config['ntpd'];
-if (empty($pconfig['interface'])) {
- $pconfig['interface'] = array();
-} else {
- $pconfig['interface'] = explode(",", $pconfig['interface']);
-}
-$pgtitle = array(gettext("Services"), gettext("NTP"));
-$shortcut_section = "ntp";
-include("head.inc");
-
-?>
-
-<script type="text/javascript">
-//<![CDATA[
- //Generic show an advanced option function
- function show_advanced(showboxID, configvalueID) {
- document.getElementById(showboxID).innerHTML='';
- aodiv = document.getElementById(configvalueID);
- aodiv.style.display = "block";
- }
-
- //Insure only one of two mutually exclusive options are checked
- function CheckOffOther(clicked, checkOff) {
- if (document.getElementById(clicked).checked) {
- document.getElementById(checkOff).checked=false;
- }
- }
-
- //Show another time server line, limited to 10 servers
- function NewTimeServer(add) {
- //If the last line has a value
- var CheckServer = 'server' + (add - 1);
- var LastId = document.getElementById(CheckServer);
- if (document.getElementById(CheckServer).value != '') {
- if (add < 10) {
- var TimeServerID = 'timeserver' + add;
- document.getElementById(TimeServerID).style.display = 'block';
- //then revise the add another server line
- if (add < 9) {
- var next = add + 1;
- var newdiv = '<img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?php echo gettext("Add another Time server");?>" onclick="NewTimeServer(' + next + ')" alt="add" />\n';
- document.getElementById('addserver').innerHTML=newdiv;
- } else {
- document.getElementById('addserver').style.display = 'none';
- }
- }
- }
- }
-//]]>
-</script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_ntpd.php" method="post" name="iform" id="iform" enctype="multipart/form-data" accept-charset="utf-8">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="ntpd">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("NTP"), true, "services_ntpd.php");
- $tab_array[] = array(gettext("Serial GPS"), false, "services_ntpd_gps.php");
- $tab_array[] = array(gettext("PPS"), false, "services_ntpd_pps.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("NTP Server Configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Interface(s)</td>
- <td width="78%" class="vtable">
-<?php
- $interfaces = get_configured_interface_with_descr();
- $carplist = get_configured_carp_interface_list();
- foreach ($carplist as $cif => $carpip) {
- $interfaces[$cif] = $carpip." (".get_vip_descr($carpip).")";
- }
- $aliaslist = get_configured_ip_aliases_list();
- foreach ($aliaslist as $aliasip => $aliasif) {
- $interfaces[$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
- }
- $size = (count($interfaces) < 10) ? count($interfaces) : 10;
-?>
- <select id="interface" name="interface[]" multiple="multiple" class="formselect" size="<?php echo $size; ?>">
-<?php
- foreach ($interfaces as $iface => $ifacename) {
- if (!is_ipaddr(get_interface_ip($iface)) && !is_ipaddr($iface)) {
- continue;
- }
- echo "<option value='{$iface}'";
- if (is_array($pconfig['interface'])) {
- if (in_array($iface, $pconfig['interface'])) {
- echo " selected=\"selected\"";
- }
- }
- echo ">" . htmlspecialchars($ifacename) . "</option>\n";
- }
-?>
- </select>
- <br />
- <br /><?php echo gettext("Interfaces without an IP address will not be shown."); ?>
- <br />
- <br /><?php echo gettext("Selecting no interfaces will listen on all interfaces with a wildcard."); ?>
- <br /><?php echo gettext("Selecting all interfaces will explicitly listen on only the interfaces/IPs specified."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Time servers</td>
- <td width="78%" class="vtable">
- <?php
- $timeservers = explode(' ', $config['system']['timeservers']);
- for ($i = $j = 0; $i < 10; $i++) {
- echo "<div id=\"timeserver{$i}\"";
- if ((isset($timeservers[$i])) || ($i < 3)) {
- $j++;
- } else {
- echo " style=\"display:none\"";
- }
- echo ">\n";
-
- echo "<input name=\"server{$i}\" class=\"formfld unknown\" id=\"server{$i}\" size=\"30\" value=\"" . htmlspecialchars($timeservers[$i]) . "\" type=\"text\" />&emsp;";
- echo "\n<input name=\"servprefer{$i}\" class=\"formcheckbox\" id=\"servprefer{$i}\" onclick=\"CheckOffOther('servprefer{$i}', 'servselect{$i}')\" type=\"checkbox\"";
- if (isset($config['ntpd']['prefer']) && isset($timeservers[$i]) && substr_count($config['ntpd']['prefer'], $timeservers[$i])) {
- echo " checked=\"checked\"";
- }
- echo " />&nbsp;prefer&emsp;";
- echo "\n<input name=\"servselect{$i}\" class=\"formcheckbox\" id=\"servselect{$i}\" onclick=\"CheckOffOther('servselect{$i}', 'servprefer{$i}')\" type=\"checkbox\"";
- if (isset($config['ntpd']['noselect']) && isset($timeservers[$i]) && substr_count($config['ntpd']['noselect'], $timeservers[$i])) {
- echo " checked=\"checked\"";
- }
- echo " />&nbsp;noselect\n<br />\n</div>\n";
- }
- ?>
- <div id="addserver">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?php echo gettext("Add another Time server");?>" onclick="NewTimeServer(<?php echo $j;?>)" alt="add" />
- </div>
- <br />
- <?php echo gettext('For best results three to five servers should be configured here.'); ?>
- <br />
- <?php echo gettext('The <i>prefer</i> option indicates that NTP should favor the use of this server more than all others.'); ?>
- <br />
- <?php echo gettext('The <i>noselect</i> option indicates that NTP should not use this server for time, but stats for this server will be collected and displayed.'); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Orphan mode</td>
- <td width="78%" class="vtable">
- <input name="ntporphan" type="text" class="formfld unknown" id="ntporphan" min="1" max="16" size="20" value="<?=htmlspecialchars($pconfig['orphan']);?>" /><?php echo gettext("(0-15)");?><br />
- <?php echo gettext("Orphan mode allows the system clock to be used when no other clocks are available. The number here specifies the stratum reported during orphan mode and should normally be set to a number high enough to insure that any other servers available to clients are preferred over this server. (default: 12)."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">NTP graphs</td>
- <td width="78%" class="vtable">
- <input name="statsgraph" type="checkbox" class="formcheckbox" id="statsgraph" <?php if ($pconfig['statsgraph']) echo " checked=\"checked\""; ?> />
- <?php echo gettext("Enable RRD graphs of NTP statistics (default: disabled)."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Syslog logging</td>
- <td width="78%" class="vtable">
- <?php echo gettext("These options enable additional messages from NTP to be written to the System Log");?> (<a href="diag_logs_ntpd.php"><?php echo gettext("Status > System Logs > NTP"); ?></a>).
- <br /><br />
- <input name="logpeer" type="checkbox" class="formcheckbox" id="logpeer"<?php if ($pconfig['logpeer']) echo " checked=\"checked\""; ?> />
- <?php echo gettext("Enable logging of peer messages (default: disabled)."); ?>
- <br />
- <input name="logsys" type="checkbox" class="formcheckbox" id="logsys"<?php if ($pconfig['logsys']) echo " checked=\"checked\""; ?> />
- <?php echo gettext("Enable logging of system messages (default: disabled)."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Statistics logging</td>
- <td width="78%" class="vtable">
- <div id="showstatisticsbox">
- <input type="button" onclick="show_advanced('showstatisticsbox', 'showstatistics')" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show statistics logging options");?>
- </div>
- <div id="showstatistics" style="display:none">
- <strong><?php echo gettext("Warning: ")?></strong><?php echo gettext("these options will create persistent daily log files in /var/log/ntp."); ?>
- <br /><br />
- <input name="clockstats" type="checkbox" class="formcheckbox" id="clockstats"<?php if ($pconfig['clockstats']) echo " checked=\"checked\""; ?> />
- <?php echo gettext("Enable logging of reference clock statistics (default: disabled)."); ?>
- <br />
- <input name="loopstats" type="checkbox" class="formcheckbox" id="loopstats"<?php if ($pconfig['loopstats']) echo " checked=\"checked\""; ?> />
- <?php echo gettext("Enable logging of clock discipline statistics (default: disabled)."); ?>
- <br />
- <input name="peerstats" type="checkbox" class="formcheckbox" id="peerstats"<?php if ($pconfig['peerstats']) echo " checked=\"checked\""; ?> />
- <?php echo gettext("Enable logging of NTP peer statistics (default: disabled)."); ?>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Access restrictions</td>
- <td width="78%" class="vtable">
- <div id="showrestrictbox">
- <input type="button" onclick="show_advanced('showrestrictbox', 'showrestrict')" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show access restriction options");?>
- </div>
- <div id="showrestrict" style="display:none">
- <?php echo gettext("these options control access to NTP from the WAN."); ?>
- <br /><br />
- <input name="kod" type="checkbox" class="formcheckbox" id="kod"<?php if (!$pconfig['kod']) echo " checked=\"checked\""; ?> />
- <?php echo gettext("Enable Kiss-o'-death packets (default: enabled)."); ?>
- <br />
- <input name="nomodify" type="checkbox" class="formcheckbox" id="nomodify"<?php if (!$pconfig['nomodify']) echo " checked=\"checked\""; ?> />
- <?php echo gettext("Deny state modifications (i.e. run time configuration) by ntpq and ntpdc (default: enabled)."); ?>
- <br />
- <input name="noquery" type="checkbox" class="formcheckbox" id="noquery"<?php if ($pconfig['noquery']) echo " checked=\"checked\""; ?> />
- <?php echo gettext("Disable ntpq and ntpdc queries (default: disabled)."); ?>
- <br />
- <input name="noserve" type="checkbox" class="formcheckbox" id="noserve"<?php if ($pconfig['noserve']) echo " checked=\"checked\""; ?> />
- <?php echo gettext("Disable all except ntpq and ntpdc queries (default: disabled)."); ?>
- <br />
- <input name="nopeer" type="checkbox" class="formcheckbox" id="nopeer"<?php if (!$pconfig['nopeer']) echo " checked=\"checked\""; ?> />
- <?php echo gettext("Deny packets that attempt a peer association (default: enabled)."); ?>
- <br />
- <input name="notrap" type="checkbox" class="formcheckbox" id="notrap"<?php if (!$pconfig['notrap']) echo " checked=\"checked\""; ?> />
- <?php echo gettext("Deny mode 6 control message trap service (default: enabled)."); ?>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Leap seconds</td>
- <td width="78%" class="vtable">
- <div id="showleapsecbox">
- <input type="button" onclick="show_advanced('showleapsecbox', 'showleapsec')" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Leap second configuration");?>
- </div>
- <div id="showleapsec" style="display:none">
- <?php echo gettext("A leap second file allows NTP to advertise an upcoming leap second addition or subtraction.");?>
- <?php echo gettext("Normally this is only useful if this server is a stratum 1 time server.");?>
- <br /><br />
- <?php echo gettext("Enter Leap second configuration as text:");?><br />
- <textarea name="leaptxt" class="formpre" id="leaptxt" cols="65" rows="7"><?php $text = base64_decode(chunk_split($pconfig['leapsec'])); echo $text;?></textarea><br />
- <strong><?php echo gettext("Or");?></strong>, <?php echo gettext("select a file to upload:");?>
- <input type="file" name="leapfile" class="formfld file" id="leapfile" />
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_ntpd_gps.php b/usr/local/www/services_ntpd_gps.php
deleted file mode 100644
index c8098c1..0000000
--- a/usr/local/www/services_ntpd_gps.php
+++ /dev/null
@@ -1,619 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_ntpd_gps.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2013 Dagorlad
- Copyright (C) 2012 Jim Pingle
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: ntpd_gps
-*/
-
-##|+PRIV
-##|*IDENT=page-services-ntpd-gps
-##|*NAME=Services: NTP Serial GPS page
-##|*DESCR=Allow access to the 'Services: NTP Serial GPS' page..
-##|*MATCH=services_ntpd_gps.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-
-function set_default_gps() {
- global $config;
-
- if (!is_array($config['ntpd'])) {
- $config['ntpd'] = array();
- }
- if (is_array($config['ntpd']['gps'])) {
- unset($config['ntpd']['gps']);
- }
-
- $config['ntpd']['gps'] = array();
- $config['ntpd']['gps']['type'] = 'Default';
- /* copy an existing configured GPS port if it exists, the unset may be uncommented post production */
- if (!empty($config['ntpd']['gpsport']) && empty($config['ntpd']['gps']['port'])) {
- $config['ntpd']['gps']['port'] = $config['ntpd']['gpsport'];
- unset($config['ntpd']['gpsport']); /* this removes the original port config from config.xml */
- $config['ntpd']['gps']['speed'] = 0;
- $config['ntpd']['gps']['nmea'] = 0;
- }
-
- write_config("Setting default NTPd settings");
-}
-
-if ($_POST) {
-
- unset($input_errors);
-
- if (!empty($_POST['gpsport']) && file_exists('/dev/'.$_POST['gpsport'])) {
- $config['ntpd']['gps']['port'] = $_POST['gpsport'];
- } else {
- /* if port is not set, remove all the gps config */
- unset($config['ntpd']['gps']);
- }
-
- if (!empty($_POST['gpstype'])) {
- $config['ntpd']['gps']['type'] = $_POST['gpstype'];
- } elseif (isset($config['ntpd']['gps']['type'])) {
- unset($config['ntpd']['gps']['type']);
- }
-
- if (!empty($_POST['gpsspeed'])) {
- $config['ntpd']['gps']['speed'] = $_POST['gpsspeed'];
- } elseif (isset($config['ntpd']['gps']['speed'])) {
- unset($config['ntpd']['gps']['speed']);
- }
-
- if (!empty($_POST['gpsnmea']) && ($_POST['gpsnmea'][0] === "0")) {
- $config['ntpd']['gps']['nmea'] = "0";
- } else {
- $config['ntpd']['gps']['nmea'] = strval(array_sum($_POST['gpsnmea']));
- }
-
- if (!empty($_POST['gpsfudge1'])) {
- $config['ntpd']['gps']['fudge1'] = $_POST['gpsfudge1'];
- } elseif (isset($config['ntpd']['gps']['fudge1'])) {
- unset($config['ntpd']['gps']['fudge1']);
- }
-
- if (!empty($_POST['gpsfudge2'])) {
- $config['ntpd']['gps']['fudge2'] = $_POST['gpsfudge2'];
- } elseif (isset($config['ntpd']['gps']['fudge2'])) {
- unset($config['ntpd']['gps']['fudge2']);
- }
-
- if (!empty($_POST['gpsstratum']) && ($_POST['gpsstratum']) < 17) {
- $config['ntpd']['gps']['stratum'] = $_POST['gpsstratum'];
- } elseif (isset($config['ntpd']['gps']['stratum'])) {
- unset($config['ntpd']['gps']['stratum']);
- }
-
- if (empty($_POST['gpsprefer'])) {
- $config['ntpd']['gps']['prefer'] = 'on';
- } elseif (isset($config['ntpd']['gps']['prefer'])) {
- unset($config['ntpd']['gps']['prefer']);
- }
-
- if (!empty($_POST['gpsselect'])) {
- $config['ntpd']['gps']['noselect'] = $_POST['gpsselect'];
- } elseif (isset($config['ntpd']['gps']['noselect'])) {
- unset($config['ntpd']['gps']['noselect']);
- }
-
- if (!empty($_POST['gpsflag1'])) {
- $config['ntpd']['gps']['flag1'] = $_POST['gpsflag1'];
- } elseif (isset($config['ntpd']['gps']['flag1'])) {
- unset($config['ntpd']['gps']['flag1']);
- }
-
- if (!empty($_POST['gpsflag2'])) {
- $config['ntpd']['gps']['flag2'] = $_POST['gpsflag2'];
- } elseif (isset($config['ntpd']['gps']['flag2'])) {
- unset($config['ntpd']['gps']['flag2']);
- }
-
- if (!empty($_POST['gpsflag3'])) {
- $config['ntpd']['gps']['flag3'] = $_POST['gpsflag3'];
- } elseif (isset($config['ntpd']['gps']['flag3'])) {
- unset($config['ntpd']['gps']['flag3']);
- }
-
- if (!empty($_POST['gpsflag4'])) {
- $config['ntpd']['gps']['flag4'] = $_POST['gpsflag4'];
- } elseif (isset($config['ntpd']['gps']['flag4'])) {
- unset($config['ntpd']['gps']['flag4']);
- }
-
- if (!empty($_POST['gpssubsec'])) {
- $config['ntpd']['gps']['subsec'] = $_POST['gpssubsec'];
- } elseif (isset($config['ntpd']['gps']['subsec'])) {
- unset($config['ntpd']['gps']['subsec']);
- }
-
- if (!empty($_POST['gpsrefid'])) {
- $config['ntpd']['gps']['refid'] = $_POST['gpsrefid'];
- } elseif (isset($config['ntpd']['gps']['refid'])) {
- unset($config['ntpd']['gps']['refid']);
- }
-
- if (!empty($_POST['gpsinitcmd'])) {
- $config['ntpd']['gps']['initcmd'] = base64_encode($_POST['gpsinitcmd']);
- } elseif (isset($config['ntpd']['gps']['initcmd'])) {
- unset($config['ntpd']['gps']['initcmd']);
- }
-
- write_config("Updated NTP GPS Settings");
-
- $retval = system_ntp_configure();
- $savemsg = get_std_save_message($retval);
-} else {
- /* set defaults if they do not already exist */
- if (!is_array($config['ntpd']) || !is_array($config['ntpd']['gps']) || empty($config['ntpd']['gps']['type'])) {
- set_default_gps();
- }
-}
-$closehead = false;
-$pconfig = &$config['ntpd']['gps'];
-$pgtitle = array(gettext("Services"), gettext("NTP GPS"));
-$shortcut_section = "ntp";
-include("head.inc");
-?>
-
-<script type="text/javascript">
-//<![CDATA[
- function show_advanced(showboxID, configvalueID) {
- document.getElementById(showboxID).innerHTML='';
- aodiv = document.getElementById(configvalueID);
- aodiv.style.display = "block";
- }
-
- function ToggleOther(clicked, checkOff) {
- if (document.getElementById(clicked).checked) {
- document.getElementById(checkOff).checked=false;
- }
- }
-
-/*
-init commands are Base64 encoded
-Default = #Sponsored, probably a Ublox
- $PUBX,40,GSV,0,0,0,0*59
- $PUBX,40,GLL,0,0,0,0*5C
- $PUBX,40,ZDA,0,0,0,0*44
- $PUBX,40,VTG,0,0,0,0*5E
- $PUBX,40,GSV,0,0,0,0*59
- $PUBX,40,GSA,0,0,0,0*4E
- $PUBX,40,GGA,0,0,0,0
- $PUBX,40,TXT,0,0,0,0
- $PUBX,40,RMC,0,0,0,0*46
- $PUBX,41,1,0007,0003,4800,0
- $PUBX,40,ZDA,1,1,1,1
-
-Generic = #do nothing
-
-Garmin = #most Garmin
- $PGRMC,,,,,,,,,,3,,2,4*52 #enable PPS @ 100ms
- $PGRMC1,,1,,,,,,W,,,,,,,*30 #enable WAAS
- $PGRMO,,3*74 #turn off all sentences
- $PGRMO,GPRMC,1*3D #enable RMC
- $PGRMO,GPGGA,1*20 #enable GGA
- $PGRMO,GPGLL,1*26 #enable GLL
-
-MediaTek = #Adafruit, Fastrax, some Garmin and others
- $PMTK225,0*2B #normal power mode
- $PMTK314,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0*28 #enable GLL, RMC, GGA and ZDA
- $PMTK301,2*2E #enable WAAS
- $PMTK320,0*2F #power save off
- $PMTK330,0*2E #set WGS84 datum
- $PMTK386,0*23 #disable static navigation (MT333X)
- $PMTK397,0*23 #disable static navigation (MT332X)
- $PMTK251,4800*14 #4800 baud rate
-
-SiRF = #used by many devices
- $PSRF103,00,00,01,01*25 #turn on GGA
- $PSRF103,01,00,01,01*24 #turn on GLL
- $PSRF103,02,00,00,01*24 #turn off GSA
- $PSRF103,03,00,00,01*24 #turn off GSV
- $PSRF103,04,00,01,01*24 #turn on RMC
- $PSRF103,05,00,00,01*24 #turn off VTG
- $PSRF100,1,4800,8,1,0*0E #set port to 4800,N,8,1
-
-U-Blox = #U-Blox 5, 6 and probably 7
- $PUBX,40,GGA,1,1,1,1,0,0*5A #turn on GGA all ports
- $PUBX,40,GLL,1,1,1,1,0,0*5C #turn on GLL all ports
- $PUBX,40,GSA,0,0,0,0,0,0*4E #turn off GSA all ports
- $PUBX,40,GSV,0,0,0,0,0,0*59 #turn off GSV all ports
- $PUBX,40,RMC,1,1,1,1,0,0*47 #turn on RMC all ports
- $PUBX,40,VTG,0,0,0,0,0,0*5E #turn off VTG all ports
- $PUBX,40,GRS,0,0,0,0,0,0*5D #turn off GRS all ports
- $PUBX,40,GST,0,0,0,0,0,0*5B #turn off GST all ports
- $PUBX,40,ZDA,1,1,1,1,0,0*44 #turn on ZDA all ports
- $PUBX,40,GBS,0,0,0,0,0,0*4D #turn off GBS all ports
- $PUBX,40,DTM,0,0,0,0,0,0*46 #turn off DTM all ports
- $PUBX,40,GPQ,0,0,0,0,0,0*5D #turn off GPQ all ports
- $PUBX,40,TXT,0,0,0,0,0,0*43 #turn off TXT all ports
- $PUBX,40,THS,0,0,0,0,0,0*54 #turn off THS all ports (U-Blox 6)
- $PUBX,41,1,0007,0003,4800,0*13 # set port 1 to 4800 baud
-
-SureGPS = #Sure Electronics SKG16B
- $PMTK225,0*2B
- $PMTK314,1,1,0,1,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0*2D
- $PMTK301,2*2E
- $PMTK397,0*23
- $PMTK102*31
- $PMTK313,1*2E
- $PMTK513,1*28
- $PMTK319,0*25
- $PMTK527,0.00*00
- $PMTK251,9600*17 #really needs to work at 9600 baud
-
-*/
-
- function set_gps_default(form) {
- //This handles a new config and also a reset to a defined default config
- var gpsdef = new Object();
- //get the text description of the selected type
- var e = document.getElementById("gpstype");
- var type = e.options[e.selectedIndex].text;
-
- //stuff the JS object as needed for each type
- switch (type) {
- case "Default":
- gpsdef['nmea'] = 0;
- gpsdef['speed'] = 0;
- gpsdef['fudge1'] = "0.155";
- gpsdef['fudge2'] = "";
- gpsdef['inittxt'] = "JFBVQlgsNDAsR1NWLDAsMCwwLDAqNTkNCiRQVUJYLDQwLEdMTCwwLDAsMCwwKjVDDQokUFVCWCw0MCxaREEsMCwwLDAsMCo0NA0KJFBVQlgsNDAsVlRHLDAsMCwwLDAqNUUNCiRQVUJYLDQwLEdTViwwLDAsMCwwKjU5DQokUFVCWCw0MCxHU0EsMCwwLDAsMCo0RQ0KJFBVQlgsNDAsR0dBLDAsMCwwLDANCiRQVUJYLDQwLFRYVCwwLDAsMCwwDQokUFVCWCw0MCxSTUMsMCwwLDAsMCo0Ng0KJFBVQlgsNDEsMSwwMDA3LDAwMDMsNDgwMCwwDQokUFVCWCw0MCxaREEsMSwxLDEsMQ0K";
- break;
-
- case "Garmin":
- gpsdef['nmea'] = 0;
- gpsdef['speed'] = 0;
- gpsdef['fudge1'] = "";
- gpsdef['fudge2'] = "0.600";
- gpsdef['inittxt'] = "JFBHUk1DLCwsLCwsLCwsLDMsLDIsOCo1RQ0KJFBHUk1DMSwsMSwsLCwsLFcsLCwsLCwsKjMwDQokUEdSTU8sLDMqNzQNCiRQR1JNTyxHUFJNQywxKjNEDQokUEdSTU8sR1BHR0EsMSoyMA0KJFBHUk1PLEdQR0xMLDEqMjYNCg==";
- break;
-
- case "Generic":
- gpsdef['nmea'] = 0;
- gpsdef['speed'] = 0;
- gpsdef['fudge1'] = "";
- gpsdef['fudge2'] = "0.400";
- gpsdef['inittxt'] = "";
- break;
-
- case "MediaTek":
- gpsdef['nmea'] = 0;
- gpsdef['speed'] = 0;
- gpsdef['fudge1'] = "";
- gpsdef['fudge2'] = "0.400";
- gpsdef['inittxt'] = "JFBNVEsyMjUsMCoyQg0KJFBNVEszMTQsMSwxLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCoyOA0KJFBNVEszMDEsMioyRQ0KJFBNVEszMjAsMCoyRg0KJFBNVEszMzAsMCoyRQ0KJFBNVEszODYsMCoyMw0KJFBNVEszOTcsMCoyMw0KJFBNVEsyNTEsNDgwMCoxNA0K";
- break;
-
- case "SiRF":
- gpsdef['nmea'] = 0;
- gpsdef['speed'] = 0;
- gpsdef['fudge1'] = "";
- gpsdef['fudge2'] = "0.704"; //valid for 4800, 0.688 @ 9600, 0.640 @ USB
- gpsdef['inittxt'] = "JFBTUkYxMDMsMDAsMDAsMDEsMDEqMjUNCiRQU1JGMTAzLDAxLDAwLDAxLDAxKjI0DQokUFNSRjEwMywwMiwwMCwwMCwwMSoyNA0KJFBTUkYxMDMsMDMsMDAsMDAsMDEqMjQNCiRQU1JGMTAzLDA0LDAwLDAxLDAxKjI0DQokUFNSRjEwMywwNSwwMCwwMCwwMSoyNA0KJFBTUkYxMDAsMSw0ODAwLDgsMSwwKjBFDQo=";
- break;
-
- case "U-Blox":
- gpsdef['nmea'] = 0;
- gpsdef['speed'] = 0;
- gpsdef['fudge1'] = "";
- gpsdef['fudge2'] = "0.400";
- gpsdef['inittxt'] = "JFBVQlgsNDAsR0dBLDEsMSwxLDEsMCwwKjVBDQokUFVCWCw0MCxHTEwsMSwxLDEsMSwwLDAqNUMNCiRQVUJYLDQwLEdTQSwwLDAsMCwwLDAsMCo0RQ0KJFBVQlgsNDAsR1NWLDAsMCwwLDAsMCwwKjU5DQokUFVCWCw0MCxSTUMsMSwxLDEsMSwwLDAqNDcNCiRQVUJYLDQwLFZURywwLDAsMCwwLDAsMCo1RQ0KJFBVQlgsNDAsR1JTLDAsMCwwLDAsMCwwKjVEDQokUFVCWCw0MCxHU1QsMCwwLDAsMCwwLDAqNUINCiRQVUJYLDQwLFpEQSwxLDEsMSwxLDAsMCo0NA0KJFBVQlgsNDAsR0JTLDAsMCwwLDAsMCwwKjREDQokUFVCWCw0MCxEVE0sMCwwLDAsMCwwLDAqNDYNCiRQVUJYLDQwLEdQUSwwLDAsMCwwLDAsMCo1RA0KJFBVQlgsNDAsVFhULDAsMCwwLDAsMCwwKjQzDQokUFVCWCw0MCxUSFMsMCwwLDAsMCwwLDAqNTQNCiRQVUJYLDQxLDEsMDAwNywwMDAzLDQ4MDAsMCoxMw0K";
- break;
-
- case "SureGPS":
- gpsdef['nmea'] = 1;
- gpsdef['speed'] = 16;
- gpsdef['fudge1'] = "";
- gpsdef['fudge2'] = "0.407";
- gpsdef['inittxt'] = "JFBNVEsyMjUsMCoyQg0KJFBNVEszMTQsMSwxLDAsMSwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCoyRA0KJFBNVEszMDEsMioyRQ0KJFBNVEszOTcsMCoyMw0KJFBNVEsxMDIqMzENCiRQTVRLMzEzLDEqMkUNCiRQTVRLNTEzLDEqMjgNCiRQTVRLMzE5LDAqMjUNCiRQTVRLNTI3LDAuMDAqMDANCiRQTVRLMjUxLDk2MDAqMTcNCg==";
- break;
- default:
- return;
- }
-
- //then update the html and set the common stuff
- document.getElementById("gpsnmea").selectedIndex = gpsdef['nmea'];
- document.getElementById("gpsspeed").selectedIndex = gpsdef['speed'];
- form.gpsfudge1.value = gpsdef['fudge1'];
- form.gpsfudge2.value = gpsdef['fudge2'];
- form.gpsstratum.value = "";
- form.gpsrefid.value = "";
- form.gpsspeed.value = gpsdef['speed'];
- document.getElementById("gpsflag1").checked=true
- document.getElementById("gpsflag2").checked=false
- document.getElementById("gpsflag3").checked=true
- document.getElementById("gpsflag4").checked=false
- document.getElementById("gpssubsec").checked=false
- form.gpsinitcmd.value = atob(gpsdef['inittxt']);
- }
-
- //function to compute a NMEA checksum derived from the public domain function at http://www.hhhh.org/wiml/proj/nmeaxor.html
- function NMEAChecksum(cmd) {
- // Compute the checksum by XORing all the character values in the string.
- var checksum = 0;
- for (var i = 0; i < cmd.length; i++) {
- checksum = checksum ^ cmd.charCodeAt(i);
- }
- // Convert it to hexadecimal (base-16, upper case, most significant byte first).
- var hexsum = Number(checksum).toString(16).toUpperCase();
- if (hexsum.length < 2) {
- hexsum = ("00" + hexsum).slice(-2);
- }
- // Display the result
- document.getElementById("nmeachecksum").innerHTML = hexsum;
- }
-//]]>
-</script>
-</head>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_ntpd_gps.php" method="post" name="iform" id="iform" accept-charset="utf-8">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="ntpd gps">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("NTP"), false, "services_ntpd.php");
- $tab_array[] = array(gettext("Serial GPS"), true, "services_ntpd_gps.php");
- $tab_array[] = array(gettext("PPS"), false, "services_ntpd_pps.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("NTP Serial GPS Configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">
- </td>
- <td width="78%" class="vtable">A GPS connected via a serial port may be used as a reference clock for NTP. If the GPS also supports PPS and is properly configured, and connected, that GPS may also be used as a Pulse Per Second clock reference. NOTE: a USB GPS may work, but is not recommended due to USB bus timing issues.
- <br />
- <br /><?php echo gettext("For the best results, NTP should have at least three sources of time. So it is best to configure at least 2 servers under"); ?> <a href="services_ntpd.php"><?php echo gettext("Services > NTP"); ?></a> <?php echo gettext("to minimize clock drift if the GPS data is not valid over time. Otherwise ntpd may only use values from the unsynchronized local clock when providing time to clients."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("GPS"); ?></td>
- <td width="78%" valign="top" class="vtable">
- <!-- Start with the original "Default", list a "Generic" and then specific configs alphabetically -->
- <select id="gpstype" name="gpstype" class="formselect" onchange="set_gps_default(this.form)">
- <option value="Custom"<?php if ($pconfig['type'] == 'Custom') echo " selected=\"selected\""; ?>>Custom</option>
- <option value="Default"<?php if ($pconfig['type'] == 'Default') echo " selected=\"selected\""; ?>>Default</option>
- <option value="Generic" title="Generic"<?php if ($pconfig['type'] == 'Generic') echo " selected=\"selected\"";?>>Generic</option>
- <option value="Garmin" title="$PGRM... Most Garmin"<?php if ($pconfig['type'] == 'Garmin') echo " selected=\"selected\"";?>>Garmin</option>
- <option value="MediaTek" title="$PMTK... Adafruit, Fastrax, some Garmin and others"<?php if ($pconfig['type'] == 'MediaTek') echo " selected=\"selected\"";?>>MediaTek</option>
- <option value="SiRF" title="$PSRF... Used by many devices"<?php if ($pconfig['type'] == 'sirf') echo " selected=\"selected\"";?>>SiRF</option>
- <option value="U-Blox" title="$PUBX... U-Blox 5, 6 and probably 7"<?php if ($pconfig['type'] == 'U-Blox') echo " selected=\"selected\"";?>>U-Blox</option>
- <option value="SureGPS" title="$PMTK... Sure Electronics SKG16B"<?php if ($pconfig['type'] == 'SureGPS') echo " selected=\"selected\"";?>>SureGPS</option>
- </select>
- <?php echo gettext("This option allows you to select a predefined configuration.");?>
- <br />
- <br />
- <strong><?php echo gettext("Note: ");?></strong><?php echo gettext("Default is the configuration of pfSense 2.1 and earlier"); ?>
- <?php echo gettext(" (not recommended). Select Generic if your GPS is not listed.)"); ?><br />
- <strong><?php echo gettext("Note: ");?></strong><?php echo gettext("The perdefined configurations assume your GPS has already been set to NMEA mode."); ?>
- </td>
- </tr>
-<?php
- /* Probing would be nice, but much more complex. Would need to listen to each port for 1s+ and watch for strings. */
- $serialports = glob("/dev/cua?[0-9]{,.[0-9]}", GLOB_BRACE);
- if (!empty($serialports)):
-?>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Serial port</td>
- <td width="78%" class="vtable">
- <select name="gpsport" class="formselect">
- <option value="">none</option>
-<?php
- foreach ($serialports as $port):
- $shortport = substr($port, 5);
- $selected = ($shortport == $pconfig['port']) ? " selected=\"selected\"" : "";
-?>
- <option value="<?php echo $shortport;?>"<?php echo $selected;?>><?php echo $shortport;?></option>
-<?php
- endforeach;
-?>
- </select>&nbsp;
- <?php echo gettext("All serial ports are listed, be sure to pick the port with the GPS attached."); ?>
- <br /><br />
- <select id="gpsspeed" name="gpsspeed" class="formselect">
- <option value="0"<?php if (!$pconfig['speed']) echo " selected=\"selected\""; ?>>4800</option>
- <option value="16"<?php if ($pconfig['speed'] === '16') echo " selected=\"selected\"";?>>9600</option>
- <option value="32"<?php if ($pconfig['speed'] === '32') echo " selected=\"selected\"";?>>19200</option>
- <option value="48"<?php if ($pconfig['speed'] === '48') echo " selected=\"selected\"";?>>38400</option>
- <option value="64"<?php if ($pconfig['speed'] === '64') echo " selected=\"selected\"";?>>57600</option>
- <option value="80"<?php if ($pconfig['speed'] === '80') echo " selected=\"selected\"";?>>115200</option>
- </select>&nbsp;<?php echo gettext("Serial port baud rate."); ?>
- <br />
- <br />
- <?php echo gettext("Note: A higher baud rate is generally only helpful if the GPS is sending too many sentences. It is recommended to configure the GPS to send only one sentence at a baud rate of 4800 or 9600."); ?>
- </td>
- </tr>
-<?php
- endif;
-?>
- <tr>
- <!-- 1 = RMC, 2 = GGA, 4 = GLL, 8 = ZDA or ZDG -->
- <td width="22%" valign="top" class="vncellreq">NMEA sentences</td>
- <td width="78%" class="vtable">
- <select id="gpsnmea" name="gpsnmea[]" multiple="multiple" class="formselect" size="5">
- <option value="0"<?php if (!$pconfig['nmea']) echo " selected=\"selected\""; ?>>All</option>
- <option value="1"<?php if ($pconfig['nmea'] & 1) echo " selected=\"selected\"";?>>RMC</option>
- <option value="2"<?php if ($pconfig['nmea'] & 2) echo " selected=\"selected\"";?>>GGA</option>
- <option value="4"<?php if ($pconfig['nmea'] & 4) echo " selected=\"selected\"";?>>GLL</option>
- <option value="8"<?php if ($pconfig['nmea'] & 8) echo " selected=\"selected\"";?>>ZDA or ZDG</option>
- </select><br />
- <?php echo gettext("By default NTP will listen for all supported NMEA sentences. Here one or more sentences to listen for may be specified."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Fudge time 1</td>
- <td width="78%" class="vtable">
- <input name="gpsfudge1" type="text" class="formfld unknown" id="gpsfudge1" min="-1" max="1" size="20" value="<?=htmlspecialchars($pconfig['fudge1']);?>" />(<?php echo gettext("seconds");?>)<br />
- <?php echo gettext("Fudge time 1 is used to specify the GPS PPS signal offset");?> (<?php echo gettext("default");?>: 0.0).
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Fudge time 2</td>
- <td width="78%" class="vtable">
- <input name="gpsfudge2" type="text" class="formfld unknown" id="gpsfudge2" min="-1" max="1" size="20" value="<?=htmlspecialchars($pconfig['fudge2']);?>" />(<?php echo gettext("seconds");?>)<br />
- <?php echo gettext("Fudge time 2 is used to specify the GPS time offset");?> (<?php echo gettext("default");?>: 0.0).
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Stratum</td>
- <td width="78%" class="vtable">
- <input name="gpsstratum" type="text" class="formfld unknown" id="gpsstratum" max="16" size="20" value="<?=htmlspecialchars($pconfig['stratum']);?>" /><?php echo gettext("(0-16)");?><br />
- <?php echo gettext("This may be used to change the GPS Clock stratum");?> (<?php echo gettext("default");?>: 0). <?php echo gettext("This may be useful if, for some reason, you want ntpd to prefer a different clock"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Flags</td>
- <td width="78%" class="vtable">
- <table>
- <tr>
- <td>
- <?php echo gettext("Normally there should be no need to change these options from the defaults."); ?><br />
- </td>
- </tr>
- </table>
- <table>
- <tr>
- <td>
- <input name="gpsprefer" type="checkbox" class="formcheckbox" id="gpsprefer" onclick="ToggleOther('gpsprefer', 'gpsselect')"<?php if (!$pconfig['prefer']) echo " checked=\"checked\""; ?> />
- </td>
- <td>
- <span class="vexpl"><?php echo gettext("NTP should prefer this clock (default: enabled)."); ?></span>
- </td>
- </tr>
- <tr>
- <td>
- <input name="gpsselect" type="checkbox" class="formcheckbox" id="gpsselect" onclick="ToggleOther('gpsselect', 'gpsprefer')"<?php if ($pconfig['noselect']) echo " checked=\"checked\""; ?> />
- </td>
- <td>
- <span class="vexpl"><?php echo gettext("NTP should not use this clock, it will be displayed for reference only(default: disabled)."); ?></span>
- </td>
- </tr>
- <tr>
- <td>
- <input name="gpsflag1" type="checkbox" class="formcheckbox" id="gpsflag1"<?php if ($pconfig['flag1']) echo " checked=\"checked\""; ?> />
- </td>
- <td>
- <span class="vexpl"><?php echo gettext("Enable PPS signal processing (default: enabled)."); ?></span>
- </td>
- </tr>
- <tr>
- <td>
- <input name="gpsflag2" type="checkbox" class="formcheckbox" id="gpsflag2"<?php if ($pconfig['flag2']) echo " checked=\"checked\""; ?> />
- </td>
- <td>
- <span class="vexpl"><?php echo gettext("Enable falling edge PPS signal processing (default: rising edge)."); ?></span>
- </td>
- </tr>
- <tr>
- <td>
- <input name="gpsflag3" type="checkbox" class="formcheckbox" id="gpsflag3"<?php if ($pconfig['flag3']) echo " checked=\"checked\""; ?> />
- </td>
- <td>
- <span class="vexpl"><?php echo gettext("Enable kernel PPS clock discipline (default: enabled)."); ?></span>
- </td>
- </tr>
- <tr>
- <td>
- <input name="gpsflag4" type="checkbox" class="formcheckbox" id="gpsflag4"<?php if ($pconfig['flag4']) echo " checked=\"checked\""; ?> />
- </td>
- <td>
- <span class="vexpl"><?php echo gettext("Obscure location in timestamp (default: unobscured)."); ?></span>
- </td>
- </tr>
- <tr>
- <td>
- <input name="gpssubsec" type="checkbox" class="formcheckbox" id="gpssubsec"<?php if ($pconfig['subsec']) echo " checked=\"checked\""; ?> />
- </td>
- <td>
- <span class="vexpl"><?php echo gettext("Log the sub-second fraction of the received time stamp (default: Not logged).<br />Note: enabling this will rapidly fill the log, but is useful for tuning Fudge time 2."); ?></span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Clock ID</td>
- <td width="78%" class="vtable">
- <input name="gpsrefid" type="text" class="formfld unknown" id="gpsrefid" maxlength= "4" size="20" value="<?=htmlspecialchars($pconfig['refid']);?>" /><?php echo gettext("(1 to 4 charactors)");?><br />
- <?php echo gettext("This may be used to change the GPS Clock ID");?> (<?php echo gettext("default");?>: GPS).
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">GPS Initialization</td>
- <td width="78%" class="vtable">
- <div id="showgpsinitbox">
- <input type="button" onclick="show_advanced('showgpsinitbox', 'showgpsinit')" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show GPS Initialization commands");?>
- </div>
- <div id="showgpsinit" style="display:none">
- <p>
- <textarea name="gpsinitcmd" class="formpre" id="gpsinitcmd" cols="65" rows="7"><?=htmlspecialchars(base64_decode($pconfig['initcmd'])); /*resultmatch*/?></textarea><br />
- <?php echo gettext("Note: Commands entered here will be sent to the GPS during initialization. Please read and understand your GPS documentation before making any changes here.");?><br /><br />
- <strong><?php echo gettext("NMEA checksum calculator");?>:</strong>
- <br />
- <?php echo gettext("Enter the text between &quot;$&quot; and &quot;*&quot; of a NMEA command string:");?><br /> $<input name="nmeastring" type="text" class="formfld unknown" id="nmeastring" size="30" value="" />*<span id="nmeachecksum"><?php echo gettext("checksum");?></span>&nbsp;&nbsp;
- <input type="button" onclick="NMEAChecksum(nmeastring.value)" value="<?=gettext("Calculate NMEA checksum");?>" /><br />
- </p>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<script type="text/javascript">
-//<![CDATA[
-set_gps_default(this.form);
-//]]>
-</script>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_ntpd_pps.php b/usr/local/www/services_ntpd_pps.php
deleted file mode 100644
index e4abce0..0000000
--- a/usr/local/www/services_ntpd_pps.php
+++ /dev/null
@@ -1,251 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_ntpd_pps.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2013 Dagorlad
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: ntpd_pps
-*/
-
-##|+PRIV
-##|*IDENT=page-services-ntpd-pps
-##|*NAME=Services: NTP PPS page
-##|*DESCR=Allow access to the 'Services: NTP PPS' page..
-##|*MATCH=services_ntpd_pps.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-
-if (!is_array($config['ntpd'])) {
- $config['ntpd'] = array();
-}
-if (!is_array($config['ntpd']['pps'])) {
- $config['ntpd']['pps'] = array();
-}
-
-if ($_POST) {
-
- unset($input_errors);
-
- if (!$input_errors) {
- if (!empty($_POST['ppsport']) && file_exists('/dev/'.$_POST['ppsport'])) {
- $config['ntpd']['pps']['port'] = $_POST['ppsport'];
- } else {
- /* if port is not set, remove all the pps config */
- unset($config['ntpd']['pps']);
- }
-
- if (!empty($_POST['ppsfudge1'])) {
- $config['ntpd']['pps']['fudge1'] = $_POST['ppsfudge1'];
- } elseif (isset($config['ntpd']['pps']['fudge1'])) {
- unset($config['ntpd']['pps']['fudge1']);
- }
-
- if (!empty($_POST['ppsstratum']) && ($_POST['ppsstratum']) < 17) {
- $config['ntpd']['pps']['stratum'] = $_POST['ppsstratum'];
- } elseif (isset($config['ntpd']['pps']['stratum'])) {
- unset($config['ntpd']['pps']['stratum']);
- }
-
- if (!empty($_POST['ppsselect'])) {
- $config['ntpd']['pps']['noselect'] = $_POST['ppsselect'];
- } elseif (isset($config['ntpd']['pps']['noselect'])) {
- unset($config['ntpd']['pps']['noselect']);
- }
-
- if (!empty($_POST['ppsflag2'])) {
- $config['ntpd']['pps']['flag2'] = $_POST['ppsflag2'];
- } elseif (isset($config['ntpd']['pps']['flag2'])) {
- unset($config['ntpd']['pps']['flag2']);
- }
-
- if (!empty($_POST['ppsflag3'])) {
- $config['ntpd']['pps']['flag3'] = $_POST['ppsflag3'];
- } elseif (isset($config['ntpd']['pps']['flag3'])) {
- unset($config['ntpd']['pps']['flag3']);
- }
-
- if (!empty($_POST['ppsflag4'])) {
- $config['ntpd']['pps']['flag4'] = $_POST['ppsflag4'];
- } elseif (isset($config['ntpd']['pps']['flag4'])) {
- unset($config['ntpd']['pps']['flag4']);
- }
-
- if (!empty($_POST['ppsrefid'])) {
- $config['ntpd']['pps']['refid'] = $_POST['ppsrefid'];
- } elseif (isset($config['ntpd']['pps']['refid'])) {
- unset($config['ntpd']['pps']['refid']);
- }
-
- write_config("Updated NTP PPS Settings");
-
- $retval = 0;
- $retval = system_ntp_configure();
- $savemsg = get_std_save_message($retval);
- }
-}
-$pconfig = &$config['ntpd']['pps'];
-
-$pgtitle = array(gettext("Services"), gettext("NTP PPS"));
-$shortcut_section = "ntp";
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_ntpd_pps.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="ntpd pps">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("NTP"), false, "services_ntpd.php");
- $tab_array[] = array(gettext("Serial GPS"), false, "services_ntpd_gps.php");
- $tab_array[] = array(gettext("PPS"), true, "services_ntpd_pps.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("NTP PPS Configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">
- </td>
- <td width="78%" class="vtable"><?php echo gettext("Devices with a Pulse Per Second output such as radios that receive a time signal from DCF77 (DE), JJY (JP), MSF (GB) or WWVB (US) may be used as a PPS reference for NTP.");?>
- <?php echo gettext("A serial GPS may also be used, but the serial GPS driver would usually be the better option.");?>
- <?php echo gettext("A PPS signal only provides a reference to the change of a second, so at least one other source to number the seconds is required.");?>
- <br />
- <br /><strong><?php echo gettext("Note");?>:</strong> <?php echo gettext("At least 3 additional time sources should be configured under"); ?> <a href="services_ntpd.php"><?php echo gettext("Services > NTP"); ?></a> <?php echo gettext("to reliably supply the time of each PPS pulse."); ?>
- </td>
- </tr>
-<?php
- $serialports = glob("/dev/cua?[0-9]{,.[0-9]}", GLOB_BRACE);
- if (!empty($serialports)):
-?>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Serial port</td>
- <td width="78%" class="vtable">
- <select name="ppsport" class="formselect">
- <option value="">none</option>
- <?php
- foreach ($serialports as $port):
- $shortport = substr($port, 5);
- $selected = ($shortport == $pconfig['port']) ? " selected=\"selected\"" : "";?>
- <option value="<?php echo $shortport;?>"<?php echo $selected;?>><?php echo $shortport;?></option>
- <?php
- endforeach;
- ?>
- </select>&nbsp;
- <?php echo gettext("All serial ports are listed, be sure to pick the port with the PPS source attached."); ?>
- </td>
- </tr>
-<?php
- endif;
-?>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Fudge time</td>
- <td width="78%" class="vtable">
- <input name="ppsfudge1" type="text" class="formfld unknown" id="ppsfudge1" min="-1" max="1" size="20" value="<?=htmlspecialchars($pconfig['fudge1']);?>" />(<?php echo gettext("seconds");?>)<br />
- <?php echo gettext("Fudge time is used to specify the PPS signal offset from the actual second such as the transmission delay between the transmitter and the receiver.");?> (<?php echo gettext("default");?>: 0.0).
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Stratum</td>
- <td width="78%" class="vtable">
- <input name="ppsstratum" type="text" class="formfld unknown" id="ppsstratum" max="16" size="20" value="<?=htmlspecialchars($pconfig['stratum']);?>" /><?php echo gettext("(0-16)");?><br />
- <?php echo gettext("This may be used to change the PPS Clock stratum");?> (<?php echo gettext("default");?>: 0). <?php echo gettext("This may be useful if, for some reason, you want ntpd to prefer a different clock and just monitor this source."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Flags</td>
- <td width="78%" class="vtable">
- <table summary="flags">
- <tr>
- <td>
- <?php echo gettext("Normally there should be no need to change these options from the defaults."); ?><br />
- </td>
- </tr>
- </table>
- <table>
- <tr>
- <td>
- <input name="ppsflag2" type="checkbox" class="formcheckbox" id="ppsflag2"<?php if ($pconfig['flag2']) echo " checked=\"checked\""; ?> />
- </td>
- <td>
- <span class="vexpl"><?php echo gettext("Enable falling edge PPS signal processing (default: rising edge)."); ?></span>
- </td>
- </tr>
- <tr>
- <td>
- <input name="ppsflag3" type="checkbox" class="formcheckbox" id="ppsflag3"<?php if ($pconfig['flag3']) echo " checked=\"checked\""; ?> />
- </td>
- <td>
- <span class="vexpl"><?php echo gettext("Enable kernel PPS clock discipline (default: disabled)."); ?></span>
- </td>
- </tr>
- <tr>
- <td>
- <input name="ppsflag4" type="checkbox" class="formcheckbox" id="ppsflag4"<?php if ($pconfig['flag4']) echo " checked=\"checked\""; ?> />
- </td>
- <td>
- <span class="vexpl"><?php echo gettext("Record a timestamp once for each second, useful for constructing Allan deviation plots (default: disabled)."); ?></span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq">Clock ID</td>
- <td width="78%" class="vtable">
- <input name="ppsrefid" type="text" class="formfld unknown" id="ppsrefid" maxlength= "4" size="20" value="<?php htmlspecialchars($pconfig['refid']);?>" /><?php echo gettext("(1 to 4 charactors)");?><br />
- <?php echo gettext("This may be used to change the PPS Clock ID");?> (<?php echo gettext("default");?>: PPS).
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_rfc2136.php b/usr/local/www/services_rfc2136.php
deleted file mode 100644
index 87d4770..0000000
--- a/usr/local/www/services_rfc2136.php
+++ /dev/null
@@ -1,206 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_rfc2136.php
-
- Copyright (C) 2008 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: dnsupdate
-*/
-
-##|+PRIV
-##|*IDENT=page-services-rfc2136clients
-##|*NAME=Services: RFC 2136 clients page
-##|*DESCR=Allow access to the 'Services: RFC 2136 clients' page.
-##|*MATCH=services_rfc2136.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (!is_array($config['dnsupdates']['dnsupdate'])) {
- $config['dnsupdates']['dnsupdate'] = array();
-}
-
-$a_rfc2136 = &$config['dnsupdates']['dnsupdate'];
-
-if ($_GET['act'] == "del") {
- unset($a_rfc2136[$_GET['id']]);
-
- write_config();
-
- header("Location: services_rfc2136.php");
- exit;
-}
-
-$pgtitle = array(gettext("Services"), gettext("RFC 2136 clients"));
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="services_rfc2136.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="rfc2136">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("DynDns"), false, "services_dyndns.php");
- $tab_array[] = array(gettext("RFC 2136"), true, "services_rfc2136.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="5%" class="listhdrr"><?=gettext("If");?></td>
- <td width="15%" class="listhdrr"><?=gettext("Server");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Hostname");?></td>
- <td width="25%" class="listhdrr"><?=gettext("Cached IP");?></td>
- <td width="25%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list"></td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_rfc2136 as $rfc2136):
-?>
- <tr ondblclick="document.location='services_rfc2136_edit.php?id=<?=$i;?>'">
- <td class="listlr">
-<?php
- $iflist = get_configured_interface_with_descr();
- foreach ($iflist as $if => $ifdesc) {
- if ($rfc2136['interface'] == $if) {
- if (!isset($rfc2136['enable'])) {
- echo "<span class=\"gray\">{$ifdesc}</span>";
- } else {
- echo "{$ifdesc}";
- }
- break;
- }
- }
-?>
- </td>
- <td class="listr">
-<?php
- if (!isset($rfc2136['enable'])) {
- echo "<span class=\"gray\">" . htmlspecialchars($rfc2136['server']) . "</span>";
- } else {
- echo htmlspecialchars($rfc2136['server']);
- }
-?>
- </td>
- <td class="listr">
-<?php
- if (!isset($rfc2136['enable'])) {
- echo "<span class=\"gray\">" . htmlspecialchars($rfc2136['host']) . "</span>";
- } else {
- echo htmlspecialchars($rfc2136['host']);
- }
-?>
- </td>
- <td class="listr">
-<?php
- $filename = "{$g['conf_path']}/dyndns_{$rfc2136['interface']}_rfc2136_" . escapeshellarg($rfc2136['host']) . "_{$rfc2136['server']}.cache";
- if (file_exists($filename)) {
- echo "IPv4: ";
- if (isset($rfc2136['usepublicip'])) {
- $ipaddr = dyndnsCheckIP($rfc2136['interface']);
- } else {
- $ipaddr = get_interface_ip($rfc2136['interface']);
- }
- $cached_ip_s = explode("|", file_get_contents($filename));
- $cached_ip = $cached_ip_s[0];
- if ($ipaddr <> $cached_ip) {
- echo "<font color='red'>";
- } else {
- echo "<font color='green'>";
- }
- echo htmlspecialchars($cached_ip);
- echo "</font>";
- } else {
- echo "IPv4: N/A";
- }
- echo "<br />";
- if (file_exists("{$filename}.ipv6")) {
- echo "IPv6: ";
- $ipaddr = get_interface_ipv6($rfc2136['interface']);
- $cached_ip_s = explode("|", file_get_contents("{$filename}.ipv6"));
- $cached_ip = $cached_ip_s[0];
- if ($ipaddr <> $cached_ip) {
- echo "<font color='red'>";
- } else {
- echo "<font color='green'>";
- }
- echo htmlspecialchars($cached_ip);
- echo "</font>";
- } else {
- echo "IPv6: N/A";
- }
-?>
- </td>
- <td class="listbg">
-<?php
- if (!isset($rfc2136['enable'])) {
- echo "<span class=\"gray\">" . htmlspecialchars($rfc2136['descr']) . "</span>";
- } else {
- echo htmlspecialchars($rfc2136['descr']);
- }
-?>
- </td>
- <td valign="middle" class="list nowrap">
- <a href="services_rfc2136_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
- &nbsp;<a href="services_rfc2136.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this client?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="5">&nbsp;</td>
- <td class="list">
- <a href="services_rfc2136_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- <tr>
- <td colspan="3" class="list">
- <p class="vexpl"><span class="red"><strong><br /></strong></span></p>
- </td>
- <td class="list">&nbsp;</td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_rfc2136_edit.php b/usr/local/www/services_rfc2136_edit.php
deleted file mode 100644
index 686ca27..0000000
--- a/usr/local/www/services_rfc2136_edit.php
+++ /dev/null
@@ -1,276 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_rfc2136_edit.php
-
- Copyright (C) 2008 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: dnsupdate
-*/
-
-require("guiconfig.inc");
-
-if (!is_array($config['dnsupdates']['dnsupdate'])) {
- $config['dnsupdates']['dnsupdate'] = array();
-}
-
-$a_rfc2136 = &$config['dnsupdates']['dnsupdate'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && isset($a_rfc2136[$id])) {
- $pconfig['enable'] = isset($a_rfc2136[$id]['enable']);
- $pconfig['host'] = $a_rfc2136[$id]['host'];
- $pconfig['ttl'] = $a_rfc2136[$id]['ttl'];
- if (!$pconfig['ttl']) {
- $pconfig['ttl'] = 60;
- }
- $pconfig['keydata'] = $a_rfc2136[$id]['keydata'];
- $pconfig['keyname'] = $a_rfc2136[$id]['keyname'];
- $pconfig['keytype'] = $a_rfc2136[$id]['keytype'];
- if (!$pconfig['keytype']) {
- $pconfig['keytype'] = "zone";
- }
- $pconfig['server'] = $a_rfc2136[$id]['server'];
- $pconfig['interface'] = $a_rfc2136[$id]['interface'];
- $pconfig['usetcp'] = isset($a_rfc2136[$id]['usetcp']);
- $pconfig['usepublicip'] = isset($a_rfc2136[$id]['usepublicip']);
- $pconfig['recordtype'] = $a_rfc2136[$id]['recordtype'];
- if (!$pconfig['recordtype']) {
- $pconfig['recordtype'] = "both";
- }
- $pconfig['descr'] = $a_rfc2136[$id]['descr'];
-
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = array();
- $reqdfieldsn = array();
- $reqdfields = array_merge($reqdfields, explode(" ", "host ttl keyname keydata"));
- $reqdfieldsn = array_merge($reqdfieldsn, array(gettext("Hostname"), gettext("TTL"), gettext("Key name"), gettext("Key")));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (($_POST['host'] && !is_domain($_POST['host']))) {
- $input_errors[] = gettext("The DNS update host name contains invalid characters.");
- }
- if (($_POST['ttl'] && !is_numericint($_POST['ttl']))) {
- $input_errors[] = gettext("The DNS update TTL must be an integer.");
- }
- if (($_POST['keyname'] && !is_domain($_POST['keyname']))) {
- $input_errors[] = gettext("The DNS update key name contains invalid characters.");
- }
-
- if (!$input_errors) {
- $rfc2136 = array();
- $rfc2136['enable'] = $_POST['enable'] ? true : false;
- $rfc2136['host'] = $_POST['host'];
- $rfc2136['ttl'] = $_POST['ttl'];
- $rfc2136['keyname'] = $_POST['keyname'];
- $rfc2136['keytype'] = $_POST['keytype'];
- $rfc2136['keydata'] = $_POST['keydata'];
- $rfc2136['server'] = $_POST['server'];
- $rfc2136['usetcp'] = $_POST['usetcp'] ? true : false;
- $rfc2136['usepublicip'] = $_POST['usepublicip'] ? true : false;
- $rfc2136['recordtype'] = $_POST['recordtype'];
- $rfc2136['interface'] = $_POST['interface'];
- $rfc2136['descr'] = $_POST['descr'];
-
- if (isset($id) && $a_rfc2136[$id]) {
- $a_rfc2136[$id] = $rfc2136;
- } else {
- $a_rfc2136[] = $rfc2136;
- }
-
- write_config(gettext("New/Edited RFC2136 dnsupdate entry was posted."));
-
- if ($_POST['Submit'] == gettext("Save & Force Update")) {
- $retval = services_dnsupdate_process("", $rfc2136['host'], true);
- } else {
- $retval = services_dnsupdate_process();
- }
-
- header("Location: services_rfc2136.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("RFC 2136 client"), gettext("Edit"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<form action="services_rfc2136_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="rfs2136 edit">
- <tr>
- <td colspan="2" valign="top" class="optsect_t">
- <table border="0" cellspacing="0" cellpadding="0" width="100%" summary="title">
- <tr>
- <td class="optsect_s">
- <strong><?=gettext("RFC 2136 client");?></strong>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Enable");?></td>
- <td width="78%" class="vtable">
- <input name="enable" type="checkbox" id="enable" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface to monitor");?></td>
- <td width="78%" class="vtable">
- <select name="interface" class="formselect" id="interface">
- <?php
- $iflist = get_configured_interface_with_descr();
- foreach ($iflist as $if => $ifdesc):?>
- <option value="<?=$if;?>" <?php if ($pconfig['interface'] == $if) echo "selected=\"selected\"";?>><?=$ifdesc;?></option>
- <?php
- endforeach;
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname");?></td>
- <td width="78%" class="vtable">
- <input name="host" type="text" class="formfld unknown" id="host" size="30" value="<?=htmlspecialchars($pconfig['host']);?>" />
- <br /><span>Fully qualified hostname of the host to be updated</span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("TTL"); ?></td>
- <td class="vtable">
- <input name="ttl" type="text" class="formfld unknown" id="ttl" size="6" value="<?=htmlspecialchars($pconfig['ttl']);?>" />
- <?=gettext("seconds");?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Key name");?></td>
- <td class="vtable">
- <input name="keyname" type="text" class="formfld unknown" id="keyname" size="30" value="<?=htmlspecialchars($pconfig['keyname']);?>" />
- <br />
- <?=gettext("This must match the setting on the DNS server.");?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Key type");?> </td>
- <td class="vtable">
- <input name="keytype" type="radio" value="zone" <?php if ($pconfig['keytype'] == "zone") echo "checked=\"checked\""; ?> /> <?=gettext("Zone");?> &nbsp;
- <input name="keytype" type="radio" value="host" <?php if ($pconfig['keytype'] == "host") echo "checked=\"checked\""; ?> /> <?=gettext("Host");?> &nbsp;
- <input name="keytype" type="radio" value="user" <?php if ($pconfig['keytype'] == "user") echo "checked=\"checked\""; ?> /><?=gettext(" User");?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Key");?></td>
- <td class="vtable">
- <input name="keydata" type="text" class="formfld unknown" id="keydata" size="70" value="<?=htmlspecialchars($pconfig['keydata']);?>" />
- <br />
- <?=gettext("Paste an HMAC-MD5 key here.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Server");?></td>
- <td width="78%" class="vtable">
- <input name="server" type="text" class="formfld unknown" id="server" size="30" value="<?=htmlspecialchars($pconfig['server'])?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol");?></td>
- <td width="78%" class="vtable">
- <input name="usetcp" type="checkbox" id="usetcp" value="<?=gettext("yes");?>" <?php if ($pconfig['usetcp']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Use TCP instead of UDP");?></strong>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Use Public IP");?></td>
- <td width="78%" class="vtable">
- <input name="usepublicip" type="checkbox" id="usepublicip" value="<?=gettext("yes");?>" <?php if ($pconfig['usepublicip']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("If the interface IP is private, attempt to fetch and use the public IP instead.");?></strong>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Record Type");?> </td>
- <td class="vtable">
- <input name="recordtype" type="radio" value="A" <?php if ($pconfig['recordtype'] == "A") echo "checked=\"checked\""; ?> /> <?=gettext("A (IPv4)");?> &nbsp;
- <input name="recordtype" type="radio" value="AAAA" <?php if ($pconfig['recordtype'] == "AAAA") echo "checked=\"checked\""; ?> /> <?=gettext("AAAA (IPv6)");?> &nbsp;
- <input name="recordtype" type="radio" value="both" <?php if ($pconfig['recordtype'] == "both") echo "checked=\"checked\""; ?> /> <?=gettext("Both");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="60" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
- <a href="services_rfc2136.php"><input name="Cancel" type="button" class="formbtn" value="<?=gettext("Cancel");?>" /></a>
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save &amp; Force Update");?>" onclick="enable_change(true)" />
- <?php if (isset($id) && $a_rfc2136[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <span class="vexpl">
- <span class="red">
- <strong>
- <?=gettext("Note:");?><br />
- </strong>
- </span>
- <?php printf(gettext("You must configure a DNS server in %sSystem: " .
- "General setup %sor allow the DNS server list to be overridden " .
- "by DHCP/PPP on WAN for dynamic DNS updates to work."), '<a href="system.php">', '</a>');?>
- </span>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_router_advertisements.php b/usr/local/www/services_router_advertisements.php
deleted file mode 100644
index 3cf9dbb..0000000
--- a/usr/local/www/services_router_advertisements.php
+++ /dev/null
@@ -1,480 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_router_advertisements.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- part of pfSense (https://www.pfsense.org)
- Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /bin/rm
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-services-router-advertisements
-##|*NAME=Services: Router advertisementspage
-##|*DESCR=Allow access to the 'Services: Router Advertisements' page.
-##|*MATCH=services_router_advertisements.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (!$g['services_dhcp_server_enable']) {
- header("Location: /");
- exit;
-}
-
-/* Fix failover DHCP problem
- * http://article.gmane.org/gmane.comp.security.firewalls.pfsense.support/18749
- */
-ini_set("memory_limit", "64M");
-
-$if = $_GET['if'];
-if ($_POST['if']) {
- $if = $_POST['if'];
-}
-
-/* if OLSRD is enabled, allow WAN to house DHCP. */
-if ($config['installedpackages']['olsrd']) {
- foreach ($config['installedpackages']['olsrd']['config'] as $olsrd) {
- if ($olsrd['enable']) {
- $is_olsr_enabled = true;
- break;
- }
- }
-}
-
-if (!$_GET['if']) {
- $savemsg = "<p><b>" . gettext("The DHCPv6 Server can only be enabled on interfaces configured with static IP addresses") . ".</b></p>" .
- "<p><b>" . gettext("Only interfaces configured with a static IP will be shown") . ".</b></p>";
-}
-
-$iflist = get_configured_interface_with_descr();
-
-/* set the starting interface */
-if (!$if || !isset($iflist[$if])) {
- foreach ($iflist as $ifent => $ifname) {
- $oc = $config['interfaces'][$ifent];
- if ((is_array($config['dhcpdv6'][$ifent]) && !isset($config['dhcpdv6'][$ifent]['enable']) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6'])))) ||
- (!is_array($config['dhcpdv6'][$ifent]) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6']))))) {
- continue;
- }
- $if = $ifent;
- break;
- }
-}
-
-if (is_array($config['dhcpdv6'][$if])) {
- /* RA specific */
- $pconfig['ramode'] = $config['dhcpdv6'][$if]['ramode'];
- $pconfig['rapriority'] = $config['dhcpdv6'][$if]['rapriority'];
- if ($pconfig['rapriority'] == "") {
- $pconfig['rapriority'] = "medium";
- }
- $pconfig['rainterface'] = $config['dhcpdv6'][$if]['rainterface'];
- $pconfig['radomainsearchlist'] = $config['dhcpdv6'][$if]['radomainsearchlist'];
- list($pconfig['radns1'], $pconfig['radns2'], $pconfig['radns3'], $pconfig['radns4']) = $config['dhcpdv6'][$if]['radnsserver'];
- $pconfig['rasamednsasdhcp6'] = isset($config['dhcpdv6'][$if]['rasamednsasdhcp6']);
-
- $pconfig['subnets'] = $config['dhcpdv6'][$if]['subnets']['item'];
-}
-if (!is_array($pconfig['subnets'])) {
- $pconfig['subnets'] = array();
-}
-
-$advertise_modes = array("disabled" => "Disabled",
- "router" => "Router Only",
- "unmanaged" => "Unmanaged",
- "managed" => "Managed",
- "assist" => "Assisted",
- "stateless_dhcp" => "Stateless DHCP");
-$priority_modes = array("low" => "Low",
- "medium" => "Normal",
- "high" => "High");
-$carplist = get_configured_carp_interface_list();
-
-$subnets_help = gettext("Subnets are specified in CIDR format. " .
- "Select the CIDR mask that pertains to each entry. " .
- "/128 specifies a single IPv6 host; /64 specifies a normal IPv6 network; etc. " .
- "If no subnets are specified here, the Router Advertisement (RA) Daemon will advertise to the subnet to which the router's interface is assigned.");
-
-if ($_POST) {
- unset($input_errors);
-
- $pconfig = $_POST;
-
- /* input validation */
-
- $pconfig['subnets'] = array();
- for ($x = 0; $x < 5000; $x += 1) {
- $address = trim($_POST['subnet_address' . $x]);
- if ($address === "") {
- continue;
- }
-
- $bits = trim($_POST['subnet_bits' . $x]);
- if ($bits === "") {
- $bits = "128";
- }
-
- if (is_alias($address)) {
- $pconfig['subnets'][] = $address;
- } else {
- $pconfig['subnets'][] = $address . "/" . $bits;
- if (!is_ipaddrv6($address)) {
- $input_errors[] = sprintf(gettext("An invalid subnet or alias was specified. [%s/%s]"), $address, $bits);
- }
- }
- }
-
- if (($_POST['radns1'] && !is_ipaddrv6($_POST['radns1'])) || ($_POST['radns2'] && !is_ipaddrv6($_POST['radns2'])) || ($_POST['radns3'] && !is_ipaddrv6($_POST['radns3'])) || ($_POST['radns4'] && !is_ipaddrv6($_POST['radns4']))) {
- $input_errors[] = gettext("A valid IPv6 address must be specified for each of the DNS servers.");
- }
- if ($_POST['radomainsearchlist']) {
- $domain_array=preg_split("/[ ;]+/", $_POST['radomainsearchlist']);
- foreach ($domain_array as $curdomain) {
- if (!is_domain($curdomain)) {
- $input_errors[] = gettext("A valid domain search list must be specified.");
- break;
- }
- }
- }
-
- if (!$input_errors) {
- if (!is_array($config['dhcpdv6'][$if])) {
- $config['dhcpdv6'][$if] = array();
- }
-
- $config['dhcpdv6'][$if]['ramode'] = $_POST['ramode'];
- $config['dhcpdv6'][$if]['rapriority'] = $_POST['rapriority'];
- $config['dhcpdv6'][$if]['rainterface'] = $_POST['rainterface'];
-
- $config['dhcpdv6'][$if]['radomainsearchlist'] = $_POST['radomainsearchlist'];
- unset($config['dhcpdv6'][$if]['radnsserver']);
- if ($_POST['radns1']) {
- $config['dhcpdv6'][$if]['radnsserver'][] = $_POST['radns1'];
- }
- if ($_POST['radns2']) {
- $config['dhcpdv6'][$if]['radnsserver'][] = $_POST['radns2'];
- }
- if ($_POST['radns3']) {
- $config['dhcpdv6'][$if]['radnsserver'][] = $_POST['radns3'];
- }
- if ($_POST['radns4']) {
- $config['dhcpdv6'][$if]['radnsserver'][] = $_POST['radns4'];
- }
-
- $config['dhcpdv6'][$if]['rasamednsasdhcp6'] = ($_POST['rasamednsasdhcp6']) ? true : false;
-
- if (count($pconfig['subnets'])) {
- $config['dhcpdv6'][$if]['subnets']['item'] = $pconfig['subnets'];
- } else {
- unset($config['dhcpdv6'][$if]['subnets']);
- }
-
- write_config();
- $retval = services_radvd_configure();
- $savemsg = get_std_save_message($retval);
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("Router advertisements"));
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript" src="/javascript/row_helper.js">
-</script>
-<script type="text/javascript" src="/javascript/autosuggest.js?rev=1">
-</script>
-<script type="text/javascript" src="/javascript/suggestions.js">
-</script>
-<script type="text/javascript">
-//<![CDATA[
- rowname[0] = "subnet_address";
- rowtype[0] = "textbox";
- rowsize[0] = "30";
- rowname[1] = "subnet_bits";
- rowtype[1] = "select";
- rowsize[1] = "1";
- function add_alias_control() {
- var name = "subnet_address" + (totalrows - 1);
- obj = document.getElementById(name);
- obj.setAttribute('class', 'formfldalias');
- obj.setAttribute('autocomplete', 'off');
- objAlias[totalrows - 1] = new AutoSuggestControl(obj, new StateSuggestions(addressarray));
- }
-//]]>
-</script>
-
-<form action="services_router_advertisements.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="router advert">
- <tr>
- <td>
-<?php
- /* active tabs */
- $tab_array = array();
- $tabscounter = 0;
- $i = 0;
- foreach ($iflist as $ifent => $ifname) {
- $oc = $config['interfaces'][$ifent];
- if ((is_array($config['dhcpdv6'][$ifent]) && !isset($config['dhcpdv6'][$ifent]['enable']) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6'])))) ||
- (!is_array($config['dhcpdv6'][$ifent]) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6']))))) {
- continue;
- }
- if ($ifent == $if) {
- $active = true;
- } else {
- $active = false;
- }
- $tab_array[] = array($ifname, $active, "services_dhcpv6.php?if={$ifent}");
- $tabscounter++;
- }
- if ($tabscounter == 0) {
- echo "</td></tr></table></form>";
- include("fend.inc");
- echo "</body>";
- echo "</html>";
- exit;
- }
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("DHCPv6 Server"), false, "services_dhcpv6.php?if={$if}");
- $tab_array[] = array(gettext("Router Advertisements"), true, "services_router_advertisements.php?if={$if}");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Router Advertisements");?></td>
- <td width="78%" class="vtable">
- <select name="ramode" id="ramode">
- <?php foreach ($advertise_modes as $name => $value) { ?>
- <option value="<?=$name ?>" <?php if ($pconfig['ramode'] == $name) echo "selected=\"selected\""; ?> > <?=$value ?></option>
- <?php } ?>
- </select>
- <br />
- <strong><?php printf(gettext("Select the Operating Mode for the Router Advertisement (RA) Daemon."))?></strong>
- <?php printf(gettext("Use \"Router Only\" to only advertise this router, \"Unmanaged\" for Router Advertising with Stateless Autoconfig, \"Managed\" for assignment through (a) DHCPv6 Server, \"Assisted\" for DHCPv6 Server assignment combined with Stateless Autoconfig"));?>
- <?php printf(gettext("It is not required to activate this DHCPv6 server when set to \"Managed\", this can be another host on the network")); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Router Priority");?></td>
- <td width="78%" class="vtable">
- <select name="rapriority" id="rapriority">
- <?php foreach ($priority_modes as $name => $value) { ?>
- <option value="<?=$name ?>" <?php if ($pconfig['rapriority'] == $name) echo "selected=\"selected\""; ?> > <?=$value ?></option>
- <?php } ?>
- </select>
- <br />
- <strong><?php printf(gettext("Select the Priority for the Router Advertisement (RA) Daemon."))?></strong>
- </td>
- </tr>
-<?php
- $carplistif = array();
- if (count($carplist) > 0) {
- foreach ($carplist as $ifname => $vip) {
- if ((preg_match("/^{$if}_/", $ifname)) && (is_ipaddrv6($vip))) {
- $carplistif[$ifname] = $vip;
- }
- }
- }
- if (count($carplistif) > 0) {
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RA Interface");?></td>
- <td width="78%" class="vtable">
- <select name="rainterface" id="rainterface">
- <?php foreach ($carplistif as $ifname => $vip) { ?>
- <option value="interface" <?php if ($pconfig['rainterface'] == "interface") echo "selected=\"selected\""; ?> > <?=strtoupper($if); ?></option>
- <option value="<?=$ifname ?>" <?php if ($pconfig['rainterface'] == $ifname) echo "selected=\"selected\""; ?> > <?="$ifname - $vip"; ?></option>
- <?php } ?>
- </select>
- <br />
- <strong><?php printf(gettext("Select the Interface for the Router Advertisement (RA) Daemon."))?></strong>
- </td>
- </tr>
-<?php
- }
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RA Subnet(s)");?></td>
- <td width="78%" class="vtable">
- <div><?= htmlentities($subnets_help) ?></div>
- <table id="maintable" summary="subnets">
- <tbody>
-<?php
- $counter = 0;
- foreach ($pconfig['subnets'] as $subnet) {
- $address_name = "subnet_address" . $counter;
- $bits_name = "subnet_bits" . $counter;
- list($address, $subnet) = explode("/", $subnet);
-?>
- <tr>
- <td>
- <input autocomplete="off" name="<?= $address_name ?>" type="text" class="formfldalias" id="<?= $address_name ?>" size="30" value="<?= htmlentities($address) ?>" />
- </td>
- <td>
- <select name="<?= $bits_name ?>" class="formselect" id="<?= $bits_name ?>">
- <option value="">
- <?php for ($i = 128; $i >= 0; $i -= 1) { ?>
- <option value="<?= $i ?>" <?= ("$subnet" === "$i") ? "selected='selected'" : "" ?>><?= $i ?></option>
- <?php } ?>
- </select>
- </td>
- <td>
- <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="" title="<?=gettext("remove this entry"); ?>" /></a>
- </td>
- </tr>
-<?php
- $counter += 1;
- }
-?>
- <tr style="display:none">
- <td></td>
- </tr>
- </tbody>
- </table>
- <script type="text/javascript">
- //<![CDATA[
- field_counter_js = 2;
- totalrows = <?= $counter ?>;
- //]]>
- </script>
- <div id="addrowbutton">
- <a onclick="javascript:addRowTo('maintable'); add_alias_control(); return false;" href="#"><!--
- --><img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry"); ?>" /></a>
- </div>
- </td>
- </tr>
-
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
-
- <tr>
- <td colspan="2" valign="top" class="listtopic">DNS</td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("DNS servers");?></td>
- <td width="78%" class="vtable">
- <input name="radns1" type="text" class="formfld unknown" id="radns1" size="28" value="<?=htmlspecialchars($pconfig['radns1']);?>" /><br />
- <input name="radns2" type="text" class="formfld unknown" id="radns2" size="28" value="<?=htmlspecialchars($pconfig['radns2']);?>" /><br />
- <input name="radns3" type="text" class="formfld unknown" id="radns3" size="28" value="<?=htmlspecialchars($pconfig['radns3']);?>" /><br />
- <input name="radns4" type="text" class="formfld unknown" id="radns4" size="28" value="<?=htmlspecialchars($pconfig['radns4']);?>" /><br />
- <?=gettext("NOTE: leave blank to use the system default DNS servers - this interface's IP if DNS Forwarder or Resolver is enabled, otherwise the servers configured on the General page.");?>
- </td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Domain search list");?></td>
- <td width="78%" class="vtable">
- <input name="radomainsearchlist" type="text" class="formfld unknown" id="radomainsearchlist" size="28" value="<?=htmlspecialchars($pconfig['radomainsearchlist']);?>" /><br />
- <?=gettext("The RA server can optionally provide a domain search list. Use the semicolon character as separator");?>
- </td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncell">&nbsp;</td>
- <td width="78%" class="vtable">
- <input id="rasamednsasdhcp6" name="rasamednsasdhcp6" type="checkbox" value="yes" <?php if ($pconfig['rasamednsasdhcp6']) { echo "checked='checked'"; } ?> />
- <strong><?= gettext("Use same settings as DHCPv6 server"); ?></strong>
- </td>
- </tr>
-
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="if" type="hidden" value="<?=$if;?>" />
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-
-<script type="text/javascript">
-//<![CDATA[
- jQuery(function ($) {
- var $rasamednsasdhcp6 = $("#rasamednsasdhcp6");
- var $triggered_checkboxes = $("#radns1, #radns2, #radns3, #radns4, #radomainsearchlist");
- if ($rasamednsasdhcp6.length !== 1) { return; }
- var onchange = function () {
- var checked = $rasamednsasdhcp6.is(":checked");
- if (checked) {
- $triggered_checkboxes.each(function () { this.disabled = true; });
- } else {
- $triggered_checkboxes.each(function () { this.disabled = false; });
- }
- };
- $rasamednsasdhcp6.bind("change", onchange);
- onchange();
- });
-
- var addressarray = <?= json_encode(get_alias_list("host", "network", "openvpn", "urltable")); ?>;
- var objAlias = [];
- function createAutoSuggest () {
- <?php for ($i = 0; $i < $counter; $i += 1) { ?>
- objAlias.push(new AutoSuggestControl(document.getElementById('subnet_address<?= $i ?>'), new StateSuggestions(addressarray)));
- <?php } ?>
- new AutoSuggestControl(document.getElementById('radns1'), new StateSuggestions(addressarray));
- new AutoSuggestControl(document.getElementById('radns2'), new StateSuggestions(addressarray));
- new AutoSuggestControl(document.getElementById('radns3'), new StateSuggestions(addressarray));
- new AutoSuggestControl(document.getElementById('radns4'), new StateSuggestions(addressarray));
- }
- setTimeout(createAutoSuggest, 500);
-//]]>
-</script>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_snmp.php b/usr/local/www/services_snmp.php
deleted file mode 100644
index a29ade0..0000000
--- a/usr/local/www/services_snmp.php
+++ /dev/null
@@ -1,443 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_snmp.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- part of pfSense
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: snmp
-*/
-
-##|+PRIV
-##|*IDENT=page-services-snmp
-##|*NAME=Services: SNMP page
-##|*DESCR=Allow access to the 'Services: SNMP' page.
-##|*MATCH=services_snmp.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-
-if (!is_array($config['snmpd'])) {
- $config['snmpd'] = array();
- $config['snmpd']['rocommunity'] = "public";
- $config['snmpd']['pollport'] = "161";
-}
-
-if (!is_array($config['snmpd']['modules'])) {
- $config['snmpd']['modules'] = array();
- $config['snmpd']['modules']['mibii'] = true;
- $config['snmpd']['modules']['netgraph'] = true;
- $config['snmpd']['modules']['pf'] = true;
- $config['snmpd']['modules']['hostres'] = true;
- $config['snmpd']['modules']['bridge'] = true;
- $config['snmpd']['modules']['ucd'] = true;
- $config['snmpd']['modules']['regex'] = true;
-}
-$pconfig['enable'] = isset($config['snmpd']['enable']);
-$pconfig['pollport'] = $config['snmpd']['pollport'];
-$pconfig['syslocation'] = $config['snmpd']['syslocation'];
-$pconfig['syscontact'] = $config['snmpd']['syscontact'];
-$pconfig['rocommunity'] = $config['snmpd']['rocommunity'];
-/* disabled until some docs show up on what this does.
-$pconfig['rwenable'] = isset($config['snmpd']['rwenable']);
-$pconfig['rwcommunity'] = $config['snmpd']['rwcommunity'];
-*/
-$pconfig['trapenable'] = isset($config['snmpd']['trapenable']);
-$pconfig['trapserver'] = $config['snmpd']['trapserver'];
-$pconfig['trapserverport'] = $config['snmpd']['trapserverport'];
-$pconfig['trapstring'] = $config['snmpd']['trapstring'];
-
-$pconfig['mibii'] = isset($config['snmpd']['modules']['mibii']);
-$pconfig['netgraph'] = isset($config['snmpd']['modules']['netgraph']);
-$pconfig['pf'] = isset($config['snmpd']['modules']['pf']);
-$pconfig['hostres'] = isset($config['snmpd']['modules']['hostres']);
-$pconfig['bridge'] = isset($config['snmpd']['modules']['bridge']);
-$pconfig['ucd'] = isset($config['snmpd']['modules']['ucd']);
-$pconfig['regex'] = isset($config['snmpd']['modules']['regex']);
-$pconfig['bindip'] = $config['snmpd']['bindip'];
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if ($_POST['enable']) {
- if (strstr($_POST['syslocation'], "#")) {
- $input_errors[] = gettext("Invalid character '#' in system location");
- }
- if (strstr($_POST['syscontact'], "#")) {
- $input_errors[] = gettext("Invalid character '#' in system contact");
- }
- if (strstr($_POST['rocommunity'], "#")) {
- $input_errors[] = gettext("Invalid character '#' in read community string");
- }
-
- $reqdfields = explode(" ", "rocommunity");
- $reqdfieldsn = array(gettext("Community"));
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- $reqdfields = explode(" ", "pollport");
- $reqdfieldsn = array(gettext("Polling Port"));
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
-
- }
-
- if ($_POST['trapenable']) {
- if (strstr($_POST['trapstring'], "#")) {
- $input_errors[] = gettext("Invalid character '#' in SNMP trap string");
- }
-
- $reqdfields = explode(" ", "trapserver");
- $reqdfieldsn = array(gettext("Trap server"));
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- $reqdfields = explode(" ", "trapserverport");
- $reqdfieldsn = array(gettext("Trap server port"));
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- $reqdfields = explode(" ", "trapstring");
- $reqdfieldsn = array(gettext("Trap string"));
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- }
-
-
-/* disabled until some docs show up on what this does.
- if ($_POST['rwenable']) {
- $reqdfields = explode(" ", "rwcommunity");
- $reqdfieldsn = explode(",", "Write community string");
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- }
-*/
-
-
-
- if (!$input_errors) {
- $config['snmpd']['enable'] = $_POST['enable'] ? true : false;
- $config['snmpd']['pollport'] = $_POST['pollport'];
- $config['snmpd']['syslocation'] = $_POST['syslocation'];
- $config['snmpd']['syscontact'] = $_POST['syscontact'];
- $config['snmpd']['rocommunity'] = $_POST['rocommunity'];
- /* disabled until some docs show up on what this does.
- $config['snmpd']['rwenable'] = $_POST['rwenable'] ? true : false;
- $config['snmpd']['rwcommunity'] = $_POST['rwcommunity'];
- */
- $config['snmpd']['trapenable'] = $_POST['trapenable'] ? true : false;
- $config['snmpd']['trapserver'] = $_POST['trapserver'];
- $config['snmpd']['trapserverport'] = $_POST['trapserverport'];
- $config['snmpd']['trapstring'] = $_POST['trapstring'];
-
- $config['snmpd']['modules']['mibii'] = $_POST['mibii'] ? true : false;
- $config['snmpd']['modules']['netgraph'] = $_POST['netgraph'] ? true : false;
- $config['snmpd']['modules']['pf'] = $_POST['pf'] ? true : false;
- $config['snmpd']['modules']['hostres'] = $_POST['hostres'] ? true : false;
- $config['snmpd']['modules']['bridge'] = $_POST['bridge'] ? true : false;
- $config['snmpd']['modules']['ucd'] = $_POST['ucd'] ? true : false;
- $config['snmpd']['modules']['regex'] = $_POST['regex'] ? true : false;
- $config['snmpd']['bindip'] = $_POST['bindip'];
-
- write_config();
-
- $retval = 0;
- $retval = services_snmpd_configure();
- $savemsg = get_std_save_message($retval);
- }
-}
-
-$closehead = false;
-$pgtitle = array(gettext("Services"), gettext("SNMP"));
-$shortcut_section = "snmp";
-include("head.inc");
-
-?>
-<script type="text/javascript">
-//<![CDATA[
-function check_deps() {
- if (jQuery('#hostres').prop('checked') == true) {
- jQuery('#mibii').prop('checked', true);
- }
-}
-
-function enable_change(whichone) {
-
- if (whichone.name == "trapenable") {
- if (whichone.checked == true) {
- document.iform.trapserver.disabled = false;
- document.iform.trapserverport.disabled = false;
- document.iform.trapstring.disabled = false;
- } else {
- document.iform.trapserver.disabled = true;
- document.iform.trapserverport.disabled = true;
- document.iform.trapstring.disabled = true;
- }
- }
-
- /* disabled until some docs show up on what this does.
- if (whichone.name == "rwenable") {
- if (whichone.checked == true) {
- document.iform.rwcommunity.disabled = false;
- } else {
- document.iform.rwcommunity.disabled = true;
- }
- }
- */
-
- if (document.iform.enable.checked == true) {
- document.iform.pollport.disabled = false;
- document.iform.syslocation.disabled = false;
- document.iform.syscontact.disabled = false;
- document.iform.rocommunity.disabled = false;
- document.iform.trapenable.disabled = false;
- /* disabled until some docs show up on what this does.
- document.iform.rwenable.disabled = false;
- if (document.iform.rwenable.checked == true) {
- document.iform.rwcommunity.disabled = false;
- } else {
- document.iform.rwcommunity.disabled = true;
- }
- */
- if (document.iform.trapenable.checked == true) {
- document.iform.trapserver.disabled = false;
- document.iform.trapserverport.disabled = false;
- document.iform.trapstring.disabled = false;
- } else {
- document.iform.trapserver.disabled = true;
- document.iform.trapserverport.disabled = true;
- document.iform.trapstring.disabled = true;
- }
- document.iform.mibii.disabled = false;
- document.iform.netgraph.disabled = false;
- document.iform.pf.disabled = false;
- document.iform.hostres.disabled = false;
- document.iform.ucd.disabled = false;
- document.iform.regex.disabled = false;
- //document.iform.bridge.disabled = false;
- } else {
- document.iform.pollport.disabled = true;
- document.iform.syslocation.disabled = true;
- document.iform.syscontact.disabled = true;
- document.iform.rocommunity.disabled = true;
- /*
- document.iform.rwenable.disabled = true;
- document.iform.rwcommunity.disabled = true;
- */
- document.iform.trapenable.disabled = true;
- document.iform.trapserver.disabled = true;
- document.iform.trapserverport.disabled = true;
- document.iform.trapstring.disabled = true;
-
- document.iform.mibii.disabled = true;
- document.iform.netgraph.disabled = true;
- document.iform.pf.disabled = true;
- document.iform.hostres.disabled = true;
- document.iform.ucd.disabled = true;
- document.iform.regex.disabled = true;
- //document.iform.bridge.disabled = true;
- }
-}
-//]]>
-</script>
-</head>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<form action="services_snmp.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="snmp">
- <tr>
- <td colspan="2" valign="top" class="optsect_t">
- <table border="0" cellspacing="0" cellpadding="0" width="100%" summary="enable">
- <tr>
- <td class="optsect_s"><strong><?=gettext("SNMP Daemon");?></strong></td>
- <td align="right" class="optsect_s">
- <input name="enable" id="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(this)" /> <strong><?=gettext("Enable");?></strong>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Polling Port ");?></td>
- <td width="78%" class="vtable">
- <input name="pollport" type="text" class="formfld unknown" id="pollport" size="40" value="<?=htmlspecialchars($pconfig['pollport']) ? htmlspecialchars($pconfig['pollport']) : htmlspecialchars(161);?>" />
- <br /><?=gettext("Enter the port to accept polling events on (default 161)");?><br />
- </td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("System location");?></td>
- <td width="78%" class="vtable">
- <input name="syslocation" type="text" class="formfld unknown" id="syslocation" size="40" value="<?=htmlspecialchars($pconfig['syslocation']);?>" />
- </td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("System contact");?></td>
- <td width="78%" class="vtable">
- <input name="syscontact" type="text" class="formfld unknown" id="syscontact" size="40" value="<?=htmlspecialchars($pconfig['syscontact']);?>" />
- </td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Read Community String");?></td>
- <td width="78%" class="vtable">
- <input name="rocommunity" type="text" class="formfld unknown" id="rocommunity" size="40" value="<?=htmlspecialchars($pconfig['rocommunity']);?>" />
- <br /><?=gettext("The community string is like a password, restricting access to querying SNMP to hosts knowing the community string. Use a strong value here to protect from unauthorized information disclosure.");?><br />
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- </tr>
-
- <tr>
- <td colspan="2" valign="top" class="optsect_t">
- <table border="0" cellspacing="0" cellpadding="0" width="100%" summary="enable">
- <tr>
- <td class="optsect_s"><strong><?=gettext("SNMP Traps");?></strong></td>
- <td align="right" class="optsect_s">
- <input name="trapenable" id="trapenable" type="checkbox" value="yes" <?php if ($pconfig['trapenable']) echo "checked=\"checked\""; ?> onclick="enable_change(this)" /> <strong><?=gettext("Enable");?></strong>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Trap server");?></td>
- <td width="78%" class="vtable">
- <input name="trapserver" type="text" class="formfld unknown" id="trapserver" size="40" value="<?=htmlspecialchars($pconfig['trapserver']);?>" />
- <br /><?=gettext("Enter trap server name");?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Trap server port ");?></td>
- <td width="78%" class="vtable">
- <input name="trapserverport" type="text" class="formfld unknown" id="trapserverport" size="40" value="<?=htmlspecialchars($pconfig['trapserverport']) ? htmlspecialchars($pconfig['trapserverport']) : htmlspecialchars(162);?>" />
- <br /><?=gettext("Enter the port to send the traps to (default 162)");?><br />
- </td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Enter the SNMP trap string");?></td>
- <td width="78%" class="vtable">
- <input name="trapstring" type="text" class="formfld unknown" id="trapstring" size="40" value="<?=htmlspecialchars($pconfig['trapstring']);?>" />
- <br /><?=gettext("Trap string");?><br />
- </td>
- </tr>
-
- <tr>
- <td>&nbsp;</td>
- </tr>
-
- <tr>
- <td colspan="2" valign="top" class="optsect_t">
- <table border="0" cellspacing="0" cellpadding="0" width="100%" summary="modules">
- <tr>
- <td class="optsect_s"><strong><?=gettext("Modules");?></strong></td>
- <td align="right" class="optsect_s">&nbsp;</td>
- </tr>
- </table>
- </td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("SNMP Modules");?></td>
- <td width="78%" class="vtable">
- <input name="mibii" type="checkbox" id="mibii" value="yes" onclick="check_deps()" <?php if ($pconfig['mibii']) echo "checked=\"checked\""; ?> /><?=gettext("MibII"); ?>
- <br />
- <input name="netgraph" type="checkbox" id="netgraph" value="yes" <?php if ($pconfig['netgraph']) echo "checked=\"checked\""; ?> /><?=gettext("Netgraph"); ?>
- <br />
- <input name="pf" type="checkbox" id="pf" value="yes" <?php if ($pconfig['pf']) echo "checked=\"checked\""; ?> /><?=gettext("PF"); ?>
- <br />
- <input name="hostres" type="checkbox" id="hostres" value="yes" onclick="check_deps()" <?php if ($pconfig['hostres']) echo "checked=\"checked\""; ?> /><?=gettext("Host Resources (Requires MibII)");?>
- <br />
- <input name="ucd" type="checkbox" id="ucd" value="yes" <?php if ($pconfig['ucd']) echo "checked=\"checked\""; ?> /><?=gettext("UCD"); ?>
- <br />
- <input name="regex" type="checkbox" id="regex" value="yes" <?php if ($pconfig['regex']) echo "checked=\"checked\""; ?> /><?=gettext("Regex"); ?>
- <br />
- </td>
- </tr>
-
- <tr>
- <td>&nbsp;</td>
- </tr>
-
- <tr>
- <td colspan="2" valign="top" class="optsect_t">
- <table border="0" cellspacing="0" cellpadding="0" width="100%" summary="interface">
- <tr>
- <td class="optsect_s"><strong><?=gettext("Interface Binding");?></strong></td>
- <td align="right" class="optsect_s">&nbsp;</td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Bind Interface"); ?></td>
- <td width="78%" class="vtable">
- <select name="bindip" class="formselect">
- <option value="">All</option>
- <?php
- $listenips = get_possible_listen_ips();
- foreach ($listenips as $lip => $ldescr):
- $selected = "";
- if ($lip == $pconfig['bindip']) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$lip;?>" <?=$selected;?>>
- <?=htmlspecialchars($ldescr);?>
- </option>
- <?php
- endforeach;
- unset($listenips);
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
- </td>
- </tr>
- </table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
-enable_change(this);
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_unbound.php b/usr/local/www/services_unbound.php
deleted file mode 100644
index a197c8c..0000000
--- a/usr/local/www/services_unbound.php
+++ /dev/null
@@ -1,626 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_unbound.php
- part of the pfSense project (https://www.pfsense.org)
- Copyright (C) 2014 Warren Baker (warren@pfsense.org)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: dnsresolver
-*/
-
-##|+PRIV
-##|*IDENT=page-services-unbound
-##|*NAME=Services: DNS Resolver page
-##|*DESCR=Allow access to the 'Services: DNS Resolver' page.
-##|*MATCH=services_unbound.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("unbound.inc");
-require_once("system.inc");
-
-if (!is_array($config['unbound'])) {
- $config['unbound'] = array();
-}
-
-$a_unboundcfg =& $config['unbound'];
-
-if (!is_array($config['unbound']['hosts'])) {
- $config['unbound']['hosts'] = array();
-}
-
-$a_hosts =& $config['unbound']['hosts'];
-
-if (!is_array($config['unbound']['domainoverrides'])) {
- $config['unbound']['domainoverrides'] = array();
-}
-
-$a_domainOverrides = &$config['unbound']['domainoverrides'];
-
-if (isset($config['unbound']['enable'])) {
- $pconfig['enable'] = true;
-}
-if (isset($config['unbound']['dnssec'])) {
- $pconfig['dnssec'] = true;
-}
-if (isset($config['unbound']['forwarding'])) {
- $pconfig['forwarding'] = true;
-}
-if (isset($config['unbound']['regdhcp'])) {
- $pconfig['regdhcp'] = true;
-}
-if (isset($config['unbound']['regdhcpstatic'])) {
- $pconfig['regdhcpstatic'] = true;
-}
-if (isset($config['unbound']['txtsupport'])) {
- $pconfig['txtsupport'] = true;
-}
-
-$pconfig['port'] = $config['unbound']['port'];
-$pconfig['custom_options'] = base64_decode($config['unbound']['custom_options']);
-
-if (empty($config['unbound']['active_interface'])) {
- $pconfig['active_interface'] = array();
-} else {
- $pconfig['active_interface'] = explode(",", $config['unbound']['active_interface']);
-}
-if (empty($config['unbound']['outgoing_interface'])) {
- $pconfig['outgoing_interface'] = array();
-} else {
- $pconfig['outgoing_interface'] = explode(",", $config['unbound']['outgoing_interface']);
-}
-
-if ($_POST) {
- $pconfig = $_POST;
- unset($input_errors);
-
- if ($_POST['apply']) {
- $retval = services_unbound_configure();
- $savemsg = get_std_save_message($retval);
- if ($retval == 0) {
- clear_subsystem_dirty('unbound');
- }
- /* Update resolv.conf in case the interface bindings exclude localhost. */
- system_resolvconf_generate();
- /* Start or restart dhcpleases when it's necessary */
- system_dhcpleases_configure();
- } else {
- if (isset($_POST['enable']) && isset($config['dnsmasq']['enable'])) {
- if ($_POST['port'] == $config['dnsmasq']['port']) {
- $input_errors[] = "The DNS Forwarder is enabled using this port. Choose a non-conflicting port, or disable the DNS Forwarder.";
- }
- }
-
- if (empty($_POST['active_interface'])) {
- $input_errors[] = "One or more Network Interfaces must be selected for binding.";
- } else if (!isset($config['system']['dnslocalhost']) && (!in_array("lo0", $_POST['active_interface']) && !in_array("all", $_POST['active_interface']))) {
- $input_errors[] = "This system is configured to use the DNS Resolver as its DNS server, so Localhost or All must be selected in Network Interfaces.";
- }
-
- if (empty($_POST['outgoing_interface'])) {
- $input_errors[] = "One or more Outgoing Network Interfaces must be selected.";
- }
-
- if ($_POST['port']) {
- if (is_port($_POST['port'])) {
- $a_unboundcfg['port'] = $_POST['port'];
- } else {
- $input_errors[] = gettext("You must specify a valid port number.");
- }
- } else if (isset($config['unbound']['port'])) {
- unset($config['unbound']['port']);
- }
-
- if (isset($_POST['enable'])) {
- $a_unboundcfg['enable'] = true;
- } else {
- unset($a_unboundcfg['enable']);
- }
- if (isset($_POST['dnssec'])) {
- $a_unboundcfg['dnssec'] = true;
- } else {
- unset($a_unboundcfg['dnssec']);
- }
- if (isset($_POST['forwarding'])) {
- $a_unboundcfg['forwarding'] = true;
- } else {
- unset($a_unboundcfg['forwarding']);
- }
- if (isset($_POST['regdhcp'])) {
- $a_unboundcfg['regdhcp'] = true;
- } else {
- unset($a_unboundcfg['regdhcp']);
- }
- if (isset($_POST['regdhcpstatic'])) {
- $a_unboundcfg['regdhcpstatic'] = true;
- } else {
- unset($a_unboundcfg['regdhcpstatic']);
- }
- if (isset($_POST['txtsupport'])) {
- $a_unboundcfg['txtsupport'] = true;
- } else {
- unset($a_unboundcfg['txtsupport']);
- }
- if (is_array($_POST['active_interface']) && !empty($_POST['active_interface'])) {
- $a_unboundcfg['active_interface'] = implode(",", $_POST['active_interface']);
- }
-
- if (is_array($_POST['outgoing_interface']) && !empty($_POST['outgoing_interface'])) {
- $a_unboundcfg['outgoing_interface'] = implode(",", $_POST['outgoing_interface']);
- }
-
- $a_unboundcfg['custom_options'] = base64_encode(str_replace("\r\n", "\n", $_POST['custom_options']));
-
- if (!$input_errors) {
- write_config("DNS Resolver configured.");
- mark_subsystem_dirty('unbound');
- }
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($_GET['type'] == 'host') {
- if ($a_hosts[$_GET['id']]) {
- unset($a_hosts[$_GET['id']]);
- write_config();
- mark_subsystem_dirty('unbound');
- header("Location: services_unbound.php");
- exit;
- }
- } elseif ($_GET['type'] == 'doverride') {
- if ($a_domainOverrides[$_GET['id']]) {
- unset($a_domainOverrides[$_GET['id']]);
- write_config();
- mark_subsystem_dirty('unbound');
- header("Location: services_unbound.php");
- exit;
- }
- }
-}
-
-$closehead = false;
-$pgtitle = array(gettext("Services"), gettext("DNS Resolver"));
-$shortcut_section = "resolver";
-include_once("head.inc");
-
-?>
-
-<script type="text/javascript">
-//<![CDATA[
-function enable_change(enable_over) {
- var endis;
- endis = !(jQuery('#enable').is(":checked") || enable_over);
- jQuery("#active_interface,#outgoing_interface,#dnssec,#forwarding,#regdhcp,#regdhcpstatic,#dhcpfirst,#port,#txtsupport,#custom_options").prop('disabled', endis);
-}
-function show_advanced_dns() {
- jQuery("#showadv").show();
- jQuery("#showadvbox").hide();
-}
-//]]>
-</script>
-</head>
-
-<body>
-<?php include("fbegin.inc"); ?>
-<form action="services_unbound.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('unbound')): ?><br/>
-<?php print_info_box_np(gettext("The configuration of the DNS Resolver has been changed") . ".<br />" . gettext("You must apply changes for them to take effect."));?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="services unbound">
- <tbody>
- <tr>
- <td class="tabnavtbl">
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("General settings"), true, "services_unbound.php");
- $tab_array[] = array(gettext("Advanced settings"), false, "services_unbound_advanced.php");
- $tab_array[] = array(gettext("Access Lists"), false, "/services_unbound_acls.php");
- display_top_tabs($tab_array, true);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tbody>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("General DNS Resolver Options");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Enable");?></td>
- <td width="78%" class="vtable">
- <p>
- <input name="enable" type="checkbox" id="enable" value="yes" <?php if (isset($pconfig['enable'])) echo "checked=\"checked\"";?> onclick="enable_change(false)" />
- <strong>
- <?=gettext("Enable DNS Resolver");?><br />
- </strong>
- </p>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Listen Port");?></td>
- <td width="78%" class="vtable">
- <p>
- <input name="port" type="text" id="port" size="6" <?php if ($pconfig['port']) echo "value=\"" . htmlspecialchars($pconfig['port']) . "\"";?> />
- <br /><br />
- <?=gettext("The port used for responding to DNS queries. It should normally be left blank unless another service needs to bind to TCP/UDP port 53.");?>
- </p>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Network Interfaces"); ?></td>
- <td width="78%" class="vtable">
- <?php
- $interface_addresses = get_possible_listen_ips(true);
- ?>
- <?=gettext("Interface IPs used by the DNS Resolver for responding to queries from clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries to other interface IPs not selected below are discarded. The default behavior is to respond to queries on every available IPv4 and IPv6 address.");?>
- <br /><br />
- <select id="active_interface" name="active_interface[]" multiple="multiple" size="<?php echo $size; ?>">
- <option value="all" <?php if (empty($pconfig['active_interface']) || empty($pconfig['active_interface'][0]) || in_array("all", $pconfig['active_interface'], true)) echo 'selected="selected"'; ?>>All</option>
- <?php
- foreach ($interface_addresses as $laddr => $ldescr):
- $selected = "";
- if (in_array($laddr, $pconfig['active_interface'])) {
- $selected = 'selected="selected"';
- }
- ?>
- <option value="<?=$laddr;?>" <?=$selected;?>>
- <?=htmlspecialchars($ldescr);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br /><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Outgoing Network Interfaces"); ?></td>
- <td width="78%" class="vtable">
- <?=gettext("Utilize different network interface(s) that the DNS Resolver will use to send queries to authoritative servers and receive their replies. By default all interfaces are used.");?>
- <br /><br />
- <select id="outgoing_interface" name="outgoing_interface[]" multiple="multiple" size="<?php echo $size; ?>">
- <option value="" <?php if (empty($pconfig['outgoing_interface']) || empty($pconfig['outgoing_interface'][0])) echo 'selected="selected"'; ?>>All</option>
- <?php
- foreach ($interface_addresses as $laddr => $ldescr):
- $selected = "";
- if (in_array($laddr, $pconfig['outgoing_interface'])) {
- $selected = 'selected="selected"';
- }
- ?>
- <option value="<?=$laddr;?>" <?=$selected;?>>
- <?=htmlspecialchars($ldescr);?>
- </option>
- <?php
- endforeach;
- unset($interface_addresses);
- ?>
- </select>
- <br /><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("DNSSEC");?></td>
- <td width="78%" class="vtable">
- <p>
- <input name="dnssec" type="checkbox" id="dnssec" value="yes" <?php echo (isset($pconfig['dnssec']) ? "checked=\"checked\"" : "");?> />
- <strong>
- <?=gettext("Enable DNSSEC Support");?><br />
- </strong>
- </p>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("DNS Query Forwarding");?></td>
- <td width="78%" class="vtable">
- <p>
- <input name="forwarding" type="checkbox" id="forwarding" value="yes" <?php echo (isset($pconfig['forwarding']) ? "checked=\"checked\"" : "");?> />
- <strong><?=gettext("Enable Forwarding Mode");?></strong><br />
- </p>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("DHCP Registration");?></td>
- <td width="78%" class="vtable">
- <p>
- <input name="regdhcp" type="checkbox" id="regdhcp" value="yes" <?php if (isset($pconfig['regdhcp'])) echo "checked=\"checked\"";?> />
- <strong>
- <?=gettext("Register DHCP leases in the DNS Resolver");?><br />
- </strong>
- <?php printf(gettext("If this option is set, then machines that specify".
- " their hostname when requesting a DHCP lease will be registered".
- " in the DNS Resolver, so that their name can be resolved.".
- " You should also set the domain in %sSystem:".
- " General setup%s to the proper value."), '<a href="system.php">', '</a>')?>
- </p>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Static DHCP");?></td>
- <td width="78%" class="vtable">
- <p>
- <input name="regdhcpstatic" type="checkbox" id="regdhcpstatic" value="yes" <?php if (isset($pconfig['regdhcpstatic'])) echo "checked=\"checked\"";?> />
- <strong>
- <?=gettext("Register DHCP static mappings in the DNS Resolver");?><br />
- </strong>
- <?php printf(gettext("If this option is set, then DHCP static mappings will ".
- "be registered in the DNS Resolver, so that their name can be ".
- "resolved. You should also set the domain in %s".
- "System: General setup%s to the proper value."), '<a href="system.php">', '</a>');?>
- </p>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("TXT Comment Support");?></td>
- <td width="78%" class="vtable">
- <p>
- <input name="txtsupport" type="checkbox" id="txtsupport" value="yes" <?php echo (isset($pconfig['txtsupport']) ? "checked=\"checked\"" : "");?> />
- <strong>
- <?=gettext("If this option is set, then any descriptions associated with Host entries and DHCP Static mappings will create a corresponding TXT record.");?><br />
- </strong>
- </p>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Advanced");?></td>
- <td width="78%" class="vtable">
- <div id="showadvbox" <?php if ($pconfig['custom_options']) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_advanced_dns()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
- </div>
- <div id="showadv" <?php if (empty($pconfig['custom_options'])) echo "style='display:none'"; ?>>
- <strong><?=gettext("Advanced");?><br /></strong>
- <textarea rows="6" cols="78" name="custom_options" id="custom_options"><?=htmlspecialchars($pconfig['custom_options']);?></textarea><br />
- <?=gettext("Enter any additional configuration parameters to add to the DNS Resolver configuration here, separated by a newline"); ?><br />
- </div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <input name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- </td>
- </tr>
- </tbody>
-</table>
-
-
-<p>
- <span class="vexpl">
- <span class="red">
- <strong>
- <?=gettext("Note:");?><br />
- </strong>
- </span>
- <?php printf(gettext("If the DNS Resolver is enabled, the DHCP".
- " service (if enabled) will automatically serve the LAN IP".
- " address as a DNS server to DHCP clients so they will use".
- " the DNS Resolver. If Forwarding, is enabled, the DNS Resolver will use the DNS servers".
- " entered in %sSystem: General setup%s".
- " or those obtained via DHCP or PPP on WAN if the &quot;Allow".
- " DNS server list to be overridden by DHCP/PPP on WAN&quot;".
- " is checked."), '<a href="system.php">', '</a>');?>
- <br />
- </span>
-</p>
-
-&nbsp;<br />
-<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont" summary="host overrides">
- <tr>
- <td colspan="5" valign="top" class="listtopic"><?=gettext("Host Overrides");?></td>
- </tr>
- <tr>
- <td>
- <br />
- <?=gettext("Entries in this section override individual results from the forwarders.");?>
- <?=gettext("Use these for changing DNS results or for adding custom DNS records.");?>
- </td>
- </tr>
-</table>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont sortable" summary="results">
- <thead>
- <tr>
- <td width="20%" class="listhdrr"><?=gettext("Host");?></td>
- <td width="25%" class="listhdrr"><?=gettext("Domain");?></td>
- <td width="20%" class="listhdrr"><?=gettext("IP");?></td>
- <td width="30%" class="listhdr"><?=gettext("Description");?></td>
- <td width="5%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17"></td>
- <td valign="middle"><a href="services_unbound_host_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <td class="list" colspan="4"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17"></td>
- <td valign="middle"><a href="services_unbound_host_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- </tfoot>
- <tbody>
-<?php
- $i = 0;
- foreach ($a_hosts as $hostent):
-?>
- <tr>
- <td class="listlr" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
- <?=strtolower($hostent['host']);?>&nbsp;
- </td>
- <td class="listr" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
- <?=strtolower($hostent['domain']);?>&nbsp;
- </td>
- <td class="listr" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
- <?=$hostent['ip'];?>&nbsp;
- </td>
- <td class="listbg" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($hostent['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle"><a href="services_unbound_host_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a></td>
- <td><a href="services_unbound.php?type=host&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this host?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- if ($hostent['aliases']['item'] && is_array($hostent['aliases']['item'])):
- foreach ($hostent['aliases']['item'] as $alias):
-?>
- <tr>
- <td class="listlr" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
- <?=strtolower($alias['host']);?>&nbsp;
- </td>
- <td class="listr" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
- <?=strtolower($alias['domain']);?>&nbsp;
- </td>
- <td class="listr" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
- Alias for <?=$hostent['host'] ? $hostent['host'] . '.' . $hostent['domain'] : $hostent['domain'];?>&nbsp;
- </td>
- <td class="listbg" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($alias['description']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <a href="services_unbound_host_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
- </td>
- </tr>
-<?php
- endforeach;
- endif;
- $i++;
- endforeach;
-?>
- <tr style="display:none"><td></td></tr>
- </tbody>
-</table>
-<br />
-<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont" summary="domain overrides">
-<tr>
- <td colspan="5" valign="top" class="listtopic"><?=gettext("Domain Overrides");?></td>
-</tr>
-<tr>
- <td>
- <p>
- <?=gettext("Entries in this area override an entire domain by specifying an".
- " authoritative DNS server to be queried for that domain.");?>
- <?=gettext("If there are multiple authoritative DNS servers available for a domain then make a separate entry for each, using the same domain name.");?>
- </p>
- </td>
-</tr>
-</table>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont sortable" summary="results">
- <thead>
- <tr>
- <td width="35%" class="listhdrr"><?=gettext("Domain");?></td>
- <td width="20%" class="listhdrr"><?=gettext("IP");?></td>
- <td width="40%" class="listhdr"><?=gettext("Description");?></td>
- <td width="5%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17" height="17"></td>
- <td><a href="services_unbound_domainoverride_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <td class="list" colspan="3"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17" height="17"></td>
- <td><a href="services_unbound_domainoverride_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- </tfoot>
- <tbody>
-<?php
- $i = 0;
- foreach ($a_domainOverrides as $doment):
-?>
- <tr>
- <td class="listlr">
- <?=strtolower($doment['domain']);?>&nbsp;
- </td>
- <td class="listr">
- <?=$doment['ip'];?>&nbsp;
- </td>
- <td class="listbg">
- <?=htmlspecialchars($doment['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle">
- <a href="services_unbound_domainoverride_edit.php?id=<?=$i;?>">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" />
- </a>
- </td>
- <td valign="middle">
- <a href="services_unbound.php?act=del&amp;type=doverride&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this domain override?");?>')">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr style="display:none"><td></td></tr>
- </tbody>
-</table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
-enable_change(false);
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_unbound_acls.php b/usr/local/www/services_unbound_acls.php
deleted file mode 100644
index 3a51b3e..0000000
--- a/usr/local/www/services_unbound_acls.php
+++ /dev/null
@@ -1,421 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_unbound_acls.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2011 Warren Baker <warren@decoy.co.za>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-require("guiconfig.inc");
-require("unbound.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_unbound_acls.php');
-}
-
-if (!is_array($config['unbound']['acls'])) {
- $config['unbound']['acls'] = array();
-}
-
-$a_acls = &$config['unbound']['acls'];
-
-$id = $_GET['id'];
-if (isset($_POST['aclid'])) {
- $id = $_POST['aclid'];
-}
-
-if (!empty($id) && !is_numeric($id)) {
- pfSenseHeader("services_unbound_acls.php");
- exit;
-}
-
-$act = $_GET['act'];
-if (isset($_POST['act'])) {
- $act = $_POST['act'];
-}
-
-if ($act == "del") {
- if (!$a_acls[$id]) {
- pfSenseHeader("services_unbound_acls.php");
- exit;
- }
-
- unset($a_acls[$id]);
- write_config();
- mark_subsystem_dirty('unbound');
-}
-
-if ($act == "new") {
- $id = unbound_get_next_id();
-}
-
-if ($act == "edit") {
- if (isset($id) && $a_acls[$id]) {
- $pconfig = $a_acls[$id];
- $networkacl = $a_acls[$id]['row'];
- }
-}
-
-if ($_POST) {
- unset($input_errors);
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
- $retval = services_unbound_configure();
- $savemsg = get_std_save_message($retval);
- if ($retval == 0) {
- clear_subsystem_dirty('unbound');
- }
- } else {
-
- // input validation - only allow 50 entries in a single ACL
- for ($x = 0; $x < 50; $x++) {
- if (isset($pconfig["acl_network{$x}"])) {
- $networkacl[$x] = array();
- $networkacl[$x]['acl_network'] = $pconfig["acl_network{$x}"];
- $networkacl[$x]['mask'] = $pconfig["mask{$x}"];
- $networkacl[$x]['description'] = $pconfig["description{$x}"];
- if (!is_ipaddr($networkacl[$x]['acl_network'])) {
- $input_errors[] = gettext("You must enter a valid IP address for each row under Networks.");
- }
-
- if (is_ipaddr($networkacl[$x]['acl_network'])) {
- if (!is_subnet($networkacl[$x]['acl_network']."/".$networkacl[$x]['mask'])) {
- $input_errors[] = gettext("You must enter a valid IPv4 netmask for each IPv4 row under Networks.");
- }
- } else if (function_exists("is_ipaddrv6")) {
- if (!is_ipaddrv6($networkacl[$x]['acl_network'])) {
- $input_errors[] = gettext("You must enter a valid IPv6 address for {$networkacl[$x]['acl_network']}.");
- } else if (!is_subnetv6($networkacl[$x]['acl_network']."/".$networkacl[$x]['mask'])) {
- $input_errors[] = gettext("You must enter a valid IPv6 netmask for each IPv6 row under Networks.");
- }
- } else {
- $input_errors[] = gettext("You must enter a valid IP address for each row under Networks.");
- }
- } else if (isset($networkacl[$x])) {
- unset($networkacl[$x]);
- }
- }
-
- if (!$input_errors) {
- if ($pconfig['Submit'] == gettext("Save")) {
- $acl_entry = array();
- $acl_entry['aclid'] = $pconfig['aclid'];
- $acl_entry['aclname'] = $pconfig['aclname'];
- $acl_entry['aclaction'] = $pconfig['aclaction'];
- $acl_entry['description'] = $pconfig['description'];
- $acl_entry['aclid'] = $pconfig['aclid'];
- $acl_entry['row'] = array();
- foreach ($networkacl as $acl) {
- $acl_entry['row'][] = $acl;
- }
-
- if (isset($id) && $a_acls[$id]) {
- $a_acls[$id] = $acl_entry;
- } else {
- $a_acls[] = $acl_entry;
- }
-
- mark_subsystem_dirty("unbound");
- write_config();
-
- pfSenseHeader("/services_unbound_acls.php");
- exit;
- }
- }
- }
-}
-
-$closehead = false;
-$pgtitle = "Services: DNS Resolver: Access Lists";
-$shortcut_section = "resolver";
-include("head.inc");
-
-?>
-
-<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
-<script type="text/javascript" src="/javascript/row_helper.js"></script>
-
-<script type="text/javascript">
-//<![CDATA[
- rowname[0] = "acl_network";
- rowtype[0] = "textbox,ipv4v6";
- rowsize[0] = "30";
-
- rowname[1] = "mask";
- rowtype[1] = "select,ipv4v6";
- rowsize[1] = "1";
-
- rowname[2] = "description";
- rowtype[2] = "textbox";
- rowsize[2] = "40";
-//]]>
-</script>
-</head>
-
-<body>
-
-<?php include("fbegin.inc"); ?>
-<form action="services_unbound_acls.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('unbound')): ?><br/>
-<?php print_info_box_np(gettext("The configuration of the DNS Resolver, has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
-<?php endif; ?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="services unbound acls">
- <tbody>
- <tr>
- <td class="tabnavtbl">
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("General Settings"), false, "/services_unbound.php");
- $tab_array[] = array(gettext("Advanced settings"), false, "services_unbound_advanced.php");
- $tab_array[] = array(gettext("Access Lists"), true, "/services_unbound_acls.php");
- display_top_tabs($tab_array, true);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
-<?php
- if ($act == "new" || $act == "edit"):
-?>
- <input name="aclid" type="hidden" value="<?=$id;?>" />
- <input name="act" type="hidden" value="<?=$act;?>" />
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=ucwords(sprintf(gettext("%s Access List"), $act));?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Access List name");?></td>
- <td width="78%" class="vtable">
- <input name="aclname" type="text" class="formfld" id="aclname" size="30" maxlength="30" value="<?=htmlspecialchars($pconfig['aclname']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Provide an Access List name.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Action");?></td>
- <td width="78%" class="vtable">
- <select name="aclaction" class="formselect">
- <?php
- $types = explode(",", "Allow,Deny,Refuse,Allow Snoop");
- foreach ($types as $type):
- ?>
- <option value="<?=strtolower($type);?>" <?php if (strtolower($type) == strtolower($pconfig['aclaction'])) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($type);?>
- </option>
- <?php
- endforeach;
- ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Choose what to do with DNS requests that match the criteria specified below.");?> <br />
- <?=gettext("<b>Deny:</b> This action stops queries from hosts within the netblock defined below.");?> <br />
- <?=gettext("<b>Refuse:</b> This action also stops queries from hosts within the netblock defined below, but sends a DNS rcode REFUSED error message back to the client.");?> <br />
- <?=gettext("<b>Allow:</b> This action allows queries from hosts within the netblock defined below.");?> <br />
- <?=gettext("<b>Allow Snoop:</b> This action allows recursive and nonrecursive access from hosts within the netblock defined below. Used for cache snooping and ideally should only be configured for your administrative host.");?> <br />
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Networks");?></td>
- <td width="78%" class="vtable">
- <table id="maintable" summary="networks">
- <tbody>
- <tr>
- <td><div id="onecolumn"><?=gettext("Network");?></div></td>
- <td><div id="twocolumn"><?=gettext("CIDR");?></div></td>
- <td><div id="threecolumn"><?=gettext("Description");?></div></td>
- </tr>
- <?php
- $counter = 0;
- if ($networkacl) {
- foreach ($networkacl as $item):
- $network = $item['acl_network'];
- $cidr = $item['mask'];
- $description = $item['description'];
- ?>
- <tr>
- <td>
- <input name="acl_network<?=$counter;?>" type="text" class="formfld unknown ipv4v6" id="acl_network<?=$counter;?>" size="30" value="<?=htmlspecialchars($network);?>" />
- </td>
- <td>
- <select name="mask<?=$counter;?>" class="formselect ipv4v6" id="mask<?=$counter;?>">
- <?php
- for ($i = 128; $i > 0; $i--) {
- echo "<option value=\"$i\" ";
- if ($i == $cidr) echo "selected=\"selected\"";
- echo ">" . $i . "</option>";
- }
- ?>
- </select>
- </td>
- <td>
- <input name="description<?=$counter;?>" type="text" class="formfld unknown" id="description<?=$counter;?>" size="40" value="<?=htmlspecialchars($description);?>" />
- </td>
- <td>
- <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" alt="delete" /></a>
- </td>
- </tr>
- <?php
- $counter++;
- endforeach;
- }
- ?>
- </tbody>
- </table>
- <a onclick="javascript:addRowTo('maintable', 'formfldalias'); return false;" href="#">
- <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
- </a>
- <script type="text/javascript">
- //<![CDATA[
- field_counter_js = 3;
- rows = 1;
- totalrows = <?php echo $counter; ?>;
- loaded = <?php echo $counter; ?>;
- //]]>
- </script>
-
- </td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="description" type="text" class="formfld unknown" id="description" size="52" maxlength="52" value="<?=htmlspecialchars($pconfig['description']);?>" />
- <br />
- <span class="vexpl"><?=gettext("You may enter a description here for your reference.");?></span>
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- &nbsp;<br />&nbsp;
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- </td>
- </tr>
- </table>
-<?php
- else:
-?>
- <table class="sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="results">
- <thead>
- <tr>
- <td width="25%" class="listhdrr"><?=gettext("Access List Name"); ?></td>
- <td width="25%" class="listhdrr"><?=gettext("Action"); ?></td>
- <td width="45%" class="listhdr"><?=gettext("Description"); ?></td>
- <td width="5%" class="list">&nbsp;</td>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <td class="list" colspan="3">&nbsp;</td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td width="17">&nbsp;</td>
- <td valign="middle">
- <a href="services_unbound_acls.php?act=new">
- <img src="./themes/<?=$g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("Add new Access List"); ?>" border="0" alt="add" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td colspan="4">
- <p>
- <?=gettext("Access Lists to control access to the DNS Resolver can be defined here.");?>
- </p>
- </td>
- </tr>
- </tfoot>
- <tbody>
- <?php
- $i = 0;
- foreach ($a_acls as $acl):
- ?>
- <tr ondblclick="document.location='services_unbound_acls.php?act=edit&amp;id=<?=$i;?>'">
- <td class="listlr">
- <?=htmlspecialchars($acl['aclname']);?>
- </td>
- <td class="listr">
- <?=htmlspecialchars($acl['aclaction']);?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($acl['description']);?>
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle">
- <a href="services_unbound_acls.php?act=edit&amp;id=<?=$i;?>">
- <img src="./themes/<?=$g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("edit access list"); ?>" width="17" height="17" border="0" alt="edit" />
- </a>
- </td>
- <td valign="middle">
- <a href="services_unbound_acls.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this access list?"); ?>')">
- <img src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete access list"); ?>" width="17" height="17" border="0" alt="delete" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <?php
- $i++;
- endforeach;
- ?>
- <tr style="display:none"><td></td></tr>
- </tbody>
- </table>
-<?php
- endif;
-?>
- </div>
- </td>
- </tr>
- </tbody>
-</table>
-</form>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_unbound_advanced.php b/usr/local/www/services_unbound_advanced.php
deleted file mode 100644
index 5fc4aed..0000000
--- a/usr/local/www/services_unbound_advanced.php
+++ /dev/null
@@ -1,469 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_unbound_advanced.php
- part of the pfSense project (https://www.pfsense.org)
- Copyright (C) 2015 Warren Baker (warren@percol8.co.za)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: dnsresolver
-*/
-
-##|+PRIV
-##|*IDENT=page-services-unbound
-##|*NAME=Services: DNS Resolver Advanced page
-##|*DESCR=Allow access to the 'Services: DNS Resolver Advanced' page.
-##|*MATCH=services_unbound.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("unbound.inc");
-
-if (!is_array($config['unbound'])) {
- $config['unbound'] = array();
-}
-
-if (isset($config['unbound']['hideidentity'])) {
- $pconfig['hideidentity'] = true;
-}
-if (isset($config['unbound']['hideversion'])) {
- $pconfig['hideversion'] = true;
-}
-if (isset($config['unbound']['prefetch'])) {
- $pconfig['prefetch'] = true;
-}
-if (isset($config['unbound']['prefetchkey'])) {
- $pconfig['prefetchkey'] = true;
-}
-if (isset($config['unbound']['dnssecstripped'])) {
- $pconfig['dnssecstripped'] = true;
-}
-
-$pconfig['msgcachesize'] = $config['unbound']['msgcachesize'];
-$pconfig['outgoing_num_tcp'] = isset($config['unbound']['outgoing_num_tcp']) ? $config['unbound']['outgoing_num_tcp'] : '10';
-$pconfig['incoming_num_tcp'] = isset($config['unbound']['incoming_num_tcp']) ? $config['unbound']['incoming_num_tcp'] : '10';
-$pconfig['edns_buffer_size'] = isset($config['unbound']['edns_buffer_size']) ? $config['unbound']['edns_buffer_size'] : '4096';
-$pconfig['num_queries_per_thread'] = $config['unbound']['num_queries_per_thread'];
-$pconfig['jostle_timeout'] = isset($config['unbound']['jostle_timeout']) ? $config['unbound']['jostle_timeout'] : '200';
-$pconfig['cache_max_ttl'] = isset($config['unbound']['cache_max_ttl']) ? $config['unbound']['cache_max_ttl'] : '86400';
-$pconfig['cache_min_ttl'] = isset($config['unbound']['cache_min_ttl']) ? $config['unbound']['cache_min_ttl'] : '0';
-$pconfig['infra_host_ttl'] = isset($config['unbound']['infra_host_ttl']) ? $config['unbound']['infra_host_ttl'] : '900';
-$pconfig['infra_cache_numhosts'] = isset($config['unbound']['infra_cache_numhosts']) ? $config['unbound']['infra_cache_numhosts'] : '10000';
-$pconfig['unwanted_reply_threshold'] = isset($config['unbound']['unwanted_reply_threshold']) ? $config['unbound']['unwanted_reply_threshold'] : 'disabled';
-$pconfig['log_verbosity'] = isset($config['unbound']['log_verbosity']) ? $config['unbound']['log_verbosity'] : "1";
-
-if (isset($config['unbound']['disable_auto_added_access_control'])) {
- $pconfig['disable_auto_added_access_control'] = true;
-}
-
-if (isset($config['unbound']['use_caps'])) {
- $pconfig['use_caps'] = true;
-}
-
-if ($_POST) {
- unset($input_errors);
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
- $retval = services_unbound_configure();
- $savemsg = get_std_save_message($retval);
- if ($retval == 0) {
- clear_subsystem_dirty('unbound');
- }
- } else {
- if (isset($_POST['msgcachesize']) && !in_array($_POST['msgcachesize'], array('4', '10', '20', '50', '100', '250', '512'), true)) {
- $input_errors[] = "A valid value for Message Cache Size must be specified.";
- }
- if (isset($_POST['outgoing_num_tcp']) && !in_array($_POST['outgoing_num_tcp'], array('0', '10', '20', '30', '40', '50'), true)) {
- $input_errors[] = "A valid value must be specified for Outgoing TCP Buffers.";
- }
- if (isset($_POST['outgoing_num_tcp']) && !in_array($_POST['incoming_num_tcp'], array('0', '10', '20', '30', '40', '50'), true)) {
- $input_errors[] = "A valid value must be specified for Incoming TCP Buffers.";
- }
- if (isset($_POST['edns_buffer_size']) && !in_array($_POST['edns_buffer_size'], array('512', '1480', '4096'), true)) {
- $input_errors[] = "A valid value must be specified for EDNS Buffer Size.";
- }
- if (isset($_POST['num_queries_per_thread']) && !in_array($_POST['num_queries_per_thread'], array('512', '1024', '2048'), true)) {
- $input_errors[] = "A valid value must be specified for Number of queries per thread.";
- }
- if (isset($_POST['jostle_timeout']) && !in_array($_POST['jostle_timeout'], array('100', '200', '500', '1000'), true)) {
- $input_errors[] = "A valid value must be specified for Jostle Timeout.";
- }
- if (isset($_POST['cache_max_ttl']) && (!is_numericint($_POST['cache_max_ttl']) || ($_POST['cache_max_ttl'] < 0))) {
- $input_errors[] = "'Maximum TTL for RRsets and messages' must be a positive integer.";
- }
- if (isset($_POST['cache_min_ttl']) && (!is_numericint($_POST['cache_min_ttl']) || ($_POST['cache_min_ttl'] < 0))) {
- $input_errors[] = "'Minimum TTL for RRsets and messages' must be a positive integer.";
- }
- if (isset($_POST['infra_host_ttl']) && !in_array($_POST['infra_host_ttl'], array('60', '120', '300', '600', '900'), true)) {
- $input_errors[] = "A valid value must be specified for TTL for Host cache entries.";
- }
- if (isset($_POST['infra_cache_numhosts']) && !in_array($_POST['infra_cache_numhosts'], array('1000', '5000', '10000', '20000', '50000'), true)) {
- $input_errors[] = "A valid value must be specified for Number of Hosts to cache.";
- }
- if (isset($_POST['unwanted_reply_threshold']) && !in_array($_POST['unwanted_reply_threshold'], array('disabled', '5000000', '10000000', '20000000', '40000000', '50000000'), true)) {
- $input_errors[] = "A valid value must be specified for Unwanted Reply Threshold.";
- }
- if (isset($_POST['log_verbosity']) && !in_array($_POST['log_verbosity'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for Log level verbosity.";
- }
- if (isset($_POST['dnssecstripped']) && !isset($config['unbound']['dnssec'])) {
- $input_errors[] = "Harden DNSSEC Data option can only be enabled if DNSSEC support is enabled.";
- }
-
- if (!$input_errors) {
-
- if (isset($_POST['hideidentity'])) {
- $config['unbound']['hideidentity'] = true;
- } else {
- unset($config['unbound']['hideidentity']);
- }
- if (isset($_POST['hideversion'])) {
- $config['unbound']['hideversion'] = true;
- } else {
- unset($config['unbound']['hideversion']);
- }
- if (isset($_POST['prefetch'])) {
- $config['unbound']['prefetch'] = true;
- } else {
- unset($config['unbound']['prefetch']);
- }
- if (isset($_POST['prefetchkey'])) {
- $config['unbound']['prefetchkey'] = true;
- } else {
- unset($config['unbound']['prefetchkey']);
- }
- if (isset($_POST['dnssecstripped'])) {
- $config['unbound']['dnssecstripped'] = true;
- } else {
- unset($config['unbound']['dnssecstripped']);
- }
- $config['unbound']['msgcachesize'] = $_POST['msgcachesize'];
- $config['unbound']['outgoing_num_tcp'] = $_POST['outgoing_num_tcp'];
- $config['unbound']['incoming_num_tcp'] = $_POST['incoming_num_tcp'];
- $config['unbound']['edns_buffer_size'] = $_POST['edns_buffer_size'];
- $config['unbound']['num_queries_per_thread'] = $_POST['num_queries_per_thread'];
- $config['unbound']['jostle_timeout'] = $_POST['jostle_timeout'];
- $config['unbound']['cache_max_ttl'] = $_POST['cache_max_ttl'];
- $config['unbound']['cache_min_ttl'] = $_POST['cache_min_ttl'];
- $config['unbound']['infra_host_ttl'] = $_POST['infra_host_ttl'];
- $config['unbound']['infra_cache_numhosts'] = $_POST['infra_cache_numhosts'];
- $config['unbound']['unwanted_reply_threshold'] = $_POST['unwanted_reply_threshold'];
- $config['unbound']['log_verbosity'] = $_POST['log_verbosity'];
- if (isset($_POST['disable_auto_added_access_control'])) {
- $config['unbound']['disable_auto_added_access_control'] = true;
- } else {
- unset($config['unbound']['disable_auto_added_access_control']);
- }
- if (isset($_POST['use_caps'])) {
- $config['unbound']['use_caps'] = true;
- } else {
- unset($config['unbound']['use_caps']);
- }
- write_config("DNS Resolver configured.");
-
- mark_subsystem_dirty('unbound');
- }
- }
-}
-
-$closehead = false;
-$pgtitle = array(gettext("Services"), gettext("DNS Resolver"), gettext("Advanced"));
-$shortcut_section = "resolver";
-include_once("head.inc");
-
-?>
-
-</head>
-
-<body>
-<?php include("fbegin.inc"); ?>
-<form action="services_unbound_advanced.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('unbound')): ?><br/>
-<?php print_info_box_np(gettext("The configuration of the DNS Resolver, has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="services unbound advanced">
- <tbody>
- <tr>
- <td class="tabnavtbl">
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("General settings"), false, "services_unbound.php");
- $tab_array[] = array(gettext("Advanced settings"), true, "services_unbound_advanced.php");
- $tab_array[] = array(gettext("Access Lists"), false, "/services_unbound_acls.php");
- display_top_tabs($tab_array, true);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tbody>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Advanced Resolver Options");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Hide Identity");?></td>
- <td width="78%" class="vtable">
- <input name="hideidentity" type="checkbox" id="hideidentity" value="yes" <?php if (isset($pconfig['hideidentity'])) echo "checked=\"checked\"";?> /><br />
- <?=gettext("If enabled, id.server and hostname.bind queries are refused.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Hide Version");?></td>
- <td width="78%" class="vtable">
- <input name="hideversion" type="checkbox" id="hideversion" value="yes" <?php if (isset($pconfig['hideversion'])) echo "checked=\"checked\"";?> /><br />
- <?=gettext("If enabled, version.server and version.bind queries are refused.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Prefetch Support");?></td>
- <td width="78%" class="vtable">
- <input name="prefetch" type="checkbox" id="prefetch" value="yes" <?php if (isset($pconfig['prefetch'])) echo "checked=\"checked\"";?> /><br />
- <?=gettext("Message cache elements are prefetched before they expire to help keep the cache up to date. When enabled, this option can cause an increase of around 10% more DNS traffic and load on the server, but frequently requested items will not expire from the cache.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Prefetch DNS Key Support");?></td>
- <td width="78%" class="vtable">
- <input name="prefetchkey" type="checkbox" id="prefetchkey" value="yes" <?php if (isset($pconfig['prefetchkey'])) echo "checked=\"checked\"";?> /><br />
- <?=sprintf(gettext("DNSKEYs are fetched earlier in the validation process when a %sDelegation signer%s is encountered. This helps lower the latency of requests but does utilize a little more CPU."), "<a href='http://en.wikipedia.org/wiki/List_of_DNS_record_types'>", "</a>");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Harden DNSSEC data");?></td>
- <td width="78%" class="vtable">
- <input name="dnssecstripped" type="checkbox" id="dnssecstripped" value="yes" <?php if (isset($pconfig['dnssecstripped'])) echo "checked=\"checked\"";?> /><br />
- <?=gettext("DNSSEC data is required for trust-anchored zones. If such data is absent, the zone becomes bogus. If this is disabled and no DNSSEC data is received, then the zone is made insecure.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Message Cache Size");?></td>
- <td width="78%" class="vtable">
- <select id="msgcachesize" name="msgcachesize">
-<?php
- foreach (array("4", "10", "20", "50", "100", "250", "512") as $size) :
-?>
- <option value="<?php echo $size; ?>" <?php if ($pconfig['msgcachesize'] == "{$size}") echo "selected=\"selected\""; ?>>
- <?php echo $size; ?>MB
- </option>
-<?php
- endforeach;
-?>
- </select><br />
- <?=gettext("Size of the message cache. The message cache stores DNS rcodes and validation statuses. The RRSet cache will automatically be set to twice this amount. The RRSet cache contains the actual RR data. The default is 4 megabytes.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Outgoing TCP Buffers");?></td>
- <td width="78%" class="vtable">
- <select id="outgoing_num_tcp" name="outgoing_num_tcp">
-<?php
- for ($num_tcp = 0; $num_tcp <= 50; $num_tcp += 10):
-?>
- <option value="<?php echo $num_tcp; ?>" <?php if ($pconfig['outgoing_num_tcp'] == "{$num_tcp}") echo "selected=\"selected\""; ?>>
- <?php echo $num_tcp; ?>
- </option>
-<?php
- endfor;
-?>
- </select><br />
- <?=gettext("The number of outgoing TCP buffers to allocate per thread. The default value is 10. If 0 is selected then no TCP queries, to authoritative servers, are done.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Incoming TCP Buffers");?></td>
- <td width="78%" class="vtable">
- <select id="incoming_num_tcp" name="incoming_num_tcp">
-<?php
- for ($num_tcp = 0; $num_tcp <= 50; $num_tcp += 10):
-?>
- <option value="<?php echo $num_tcp; ?>" <?php if ($pconfig['incoming_num_tcp'] == "{$num_tcp}") echo "selected=\"selected\""; ?>>
- <?php echo $num_tcp; ?>
- </option>
-<?php
- endfor;
-?>
- </select><br />
- <?=gettext("The number of incoming TCP buffers to allocate per thread. The default value is 10. If 0 is selected then no TCP queries, from clients, are accepted.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("EDNS Buffer Size");?></td>
- <td width="78%" class="vtable">
- <select id="edns_buffer_size" name="edns_buffer_size">
-<?php
- foreach (array("512", "1480", "4096") as $size) :
-?>
- <option value="<?php echo $size; ?>" <?php if ($pconfig['edns_buffer_size'] == "{$size}") echo "selected=\"selected\""; ?>>
- <?php echo $size; ?>
- </option>
-<?php
- endforeach;
-?>
- </select><br />
- <?=gettext("Number of bytes size to advertise as the EDNS reassembly buffer size. This is the value that is used in UDP datagrams sent to peers. RFC recommendation is 4096 (which is the default). If you have fragmentation reassemble problems, usually seen as timeouts, then a value of 1480 should help. The 512 value bypasses most MTU path problems, but it can generate an excessive amount of TCP fallback.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Number of queries per thread");?></td>
- <td width="78%" class="vtable">
- <select id="num_queries_per_thread" name="num_queries_per_thread">
-<?php
- foreach (array("512", "1024", "2048") as $queries) :
-?>
- <option value="<?php echo $queries; ?>" <?php if ($pconfig['num_queries_per_thread'] == "{$queries}") echo "selected=\"selected\""; ?>>
- <?php echo $queries; ?>
- </option>
-<?php
- endforeach;
-?>
- </select><br />
- <?=gettext("The number of queries that every thread will service simultaneously. If more queries arrive that need to be serviced, and no queries can be jostled, then these queries are dropped.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Jostle Timeout");?></td>
- <td width="78%" class="vtable">
- <select id="jostle_timeout" name="jostle_timeout">
-<?php
- foreach (array("100", "200", "500", "1000") as $timeout) :
-?>
- <option value="<?php echo $timeout; ?>" <?php if ($pconfig['jostle_timeout'] == "{$timeout}") echo "selected=\"selected\""; ?>>
- <?php echo $timeout; ?>
- </option>
-<?php
- endforeach;
-?>
- </select><br />
- <?=gettext("This timeout is used for when the server is very busy. This protects against denial of service by slow queries or high query rates. The default value is 200 milliseconds.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Maximum TTL for RRsets and messages");?></td>
- <td width="78%" class="vtable">
- <input type="text" id="cache_max_ttl" name="cache_max_ttl" size="5" value="<?php if (isset($pconfig['cache_max_ttl'])) echo htmlspecialchars($pconfig['cache_max_ttl']); ?>" /><br />
- <?=gettext("Configure a maximum Time to live for RRsets and messages in the cache. The default is 86400 seconds (1 day). When the internal TTL expires the cache item is expired. This can be configured to force the resolver to query for data more often and not trust (very large) TTL values.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Minimum TTL for RRsets and messages");?></td>
- <td width="78%" class="vtable">
- <input type="text" id="cache_min_ttl" name="cache_min_ttl" size="5" value="<?php if (isset($pconfig['cache_min_ttl'])) echo htmlspecialchars($pconfig['cache_min_ttl']); ?>" /><br />
- <?=gettext("Configure a minimum Time to live for RRsets and messages in the cache. The default is 0 seconds. If the minimum value kicks in, the data is cached for longer than the domain owner intended, and thus less queries are made to look up the data. The 0 value ensures the data in the cache is as the domain owner intended. High values can lead to trouble as the data in the cache might not match up with the actual data anymore.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("TTL for Host cache entries");?></td>
- <td width="78%" class="vtable">
- <select id="infra_host_ttl" name="infra_host_ttl">
- <option value="60" <?php if ($pconfig['infra_host_ttl'] == "60") echo "selected=\"selected\""; ?>>1 minute</option>
- <option value="120" <?php if ($pconfig['infra_host_ttl'] == "120") echo "selected=\"selected\""; ?>>2 minutes</option>
- <option value="300" <?php if ($pconfig['infra_host_ttl'] == "300") echo "selected=\"selected\""; ?>>5 minutes</option>
- <option value="600" <?php if ($pconfig['infra_host_ttl'] == "600") echo "selected=\"selected\""; ?>>10 minutes</option>
- <option value="900" <?php if ($pconfig['infra_host_ttl'] == "900") echo "selected=\"selected\""; ?>>15 minutes</option>
- </select><br />
- <?=gettext("Time to live for entries in the host cache. The host cache contains roundtrip timing, lameness and EDNS support information. The default is 15 minutes.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Number of Hosts to cache");?></td>
- <td width="78%" class="vtable">
- <select id="infra_cache_numhosts" name="infra_cache_numhosts">
- <option value="1000" <?php if ($pconfig['infra_cache_numhosts'] == "1000") echo "selected=\"selected\""; ?>>1000</option>
- <option value="5000" <?php if ($pconfig['infra_cache_numhosts'] == "5000") echo "selected=\"selected\""; ?>>5000</option>
- <option value="10000" <?php if ($pconfig['infra_cache_numhosts'] == "10000") echo "selected=\"selected\""; ?>>10 000</option>
- <option value="20000" <?php if ($pconfig['infra_cache_numhosts'] == "20000") echo "selected=\"selected\""; ?>>20 000</option>
- <option value="50000" <?php if ($pconfig['infra_cache_numhosts'] == "50000") echo "selected=\"selected\""; ?>>50 000</option>
- </select><br />
- <?=gettext("Number of hosts for which information is cached. The default is 10,000.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Unwanted Reply Threshold");?></td>
- <td width="78%" class="vtable">
- <select id="unwanted_reply_threshold" name="unwanted_reply_threshold">
- <option value="disabled" <?php if ($pconfig['unwanted_reply_threshold'] == "disabled") echo "selected=\"selected\""; ?>>disabled</option>
- <option value="5000000" <?php if ($pconfig['unwanted_reply_threshold'] == "5000000") echo "selected=\"selected\""; ?>>5 million</option>
- <option value="10000000" <?php if ($pconfig['unwanted_reply_threshold'] == "10000000") echo "selected=\"selected\""; ?>>10 million</option>
- <option value="20000000" <?php if ($pconfig['unwanted_reply_threshold'] == "20000000") echo "selected=\"selected\""; ?>>20 million</option>
- <option value="40000000" <?php if ($pconfig['unwanted_reply_threshold'] == "40000000") echo "selected=\"selected\""; ?>>40 million</option>
- <option value="50000000" <?php if ($pconfig['unwanted_reply_threshold'] == "50000000") echo "selected=\"selected\""; ?>>50 million</option>
- </select><br />
- <?=gettext("If enabled, a total number of unwanted replies is kept track of in every thread. When it reaches the threshold, a defensive action is taken and a warning is printed to the log file. This defensive action is to clear the RRSet and message caches, hopefully flushing away any poison. The default is disabled, but if enabled a value of 10 million is suggested.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Log level verbosity");?></td>
- <td width="78%" class="vtable">
- <select id="log_verbosity" name="log_verbosity">
-<?php
- for ($level = 0; $level <= 5; $level++):
-?>
- <option value="<?php echo $level; ?>" <?php if ($pconfig['log_verbosity'] == "{$level}") echo "selected=\"selected\""; ?>>
- Level <?php echo $level; ?>
- </option>
-<?php
- endfor;
-?>
- </select><br />
- <?=gettext("Select the log verbosity.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Disable auto-added access control");?></td>
- <td width="78%" class="vtable">
- <input name="disable_auto_added_access_control" type="checkbox" id="disable_auto_added_access_control" value="yes" <?php if (isset($pconfig['disable_auto_added_access_control'])) echo "checked=\"checked\"";?> />
- <?=gettext("Check this box to disable the automatically-added access control entries. By default, IPv4 and IPv6 networks residing on internal interfaces of this system are permitted. Allowed networks must be manually configured on the Access Lists tab if the auto-added entries are disabled.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Experimental Bit 0x20 Support");?></td>
- <td width="78%" class="vtable">
- <input name="use_caps" type="checkbox" id="use_caps" value="yes" <?php if (isset($pconfig['use_caps'])) echo "checked=\"checked\"";?> /> <br />
- <?=sprintf(gettext("Use 0x-20 encoded random bits in the DNS query to foil spoofing attempts. See the implementation %sdraft dns-0x20%s for more information."), "<a href='https://tools.ietf.org/html/draft-vixie-dnsext-dns0x20-00'>", "</a>");?>
- </td>
- </tr>
- <tr>
- <td width="22%"></td>
- <td width="78%">
- <input type="submit" name="Save" class="formbtn" id="save" value="Save" />
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- </td>
- </tr>
- </tbody>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_unbound_domainoverride_edit.php b/usr/local/www/services_unbound_domainoverride_edit.php
deleted file mode 100644
index 28a8424..0000000
--- a/usr/local/www/services_unbound_domainoverride_edit.php
+++ /dev/null
@@ -1,183 +0,0 @@
-<?php
-/*
- services_unbound_domainoverride_edit.php
- part of the pfSense project (https://www.pfsense.org)
- Copyright (C) 2014 Warren Baker (warren@decoy.co.za)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Copyright (C) 2003-2005 Bob Zoller <bob@kludgebox.com> and Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: dnsresolver
-*/
-
-##|+PRIV
-##|*IDENT=page-services-dnsresolver-editdomainoverride
-##|*NAME=Services: DNS Resolver: Edit Domain Override page
-##|*DESCR=Allow access to the 'Services: DNS Resolver: Edit Domain Override' page.
-##|*MATCH=services_unbound_domainoverride_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_unbound.php');
-}
-
-if (!is_array($config['unbound']['domainoverrides'])) {
- $config['unbound']['domainoverrides'] = array();
-}
-
-$a_domainOverrides = &$config['unbound']['domainoverrides'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_domainOverrides[$id]) {
- $pconfig['domain'] = $a_domainOverrides[$id]['domain'];
- $pconfig['ip'] = $a_domainOverrides[$id]['ip'];
- $pconfig['descr'] = $a_domainOverrides[$id]['descr'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "domain ip");
- $reqdfieldsn = array(gettext("Domain"), gettext("IP address"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- function String_Begins_With($needle, $haystack) {
- return (substr($haystack, 0, strlen($needle)) == $needle);
- }
-
- if (String_Begins_With(_msdcs, $_POST['domain'])) {
- $subdomainstr = substr($_POST['domain'], 7);
- if ($subdomainstr && !is_domain($subdomainstr)) {
- $input_errors[] = gettext("A valid domain must be specified after _msdcs.");
- }
- } elseif ($_POST['domain'] && !is_domain($_POST['domain'])) {
- $input_errors[] = gettext("A valid domain must be specified.");
- }
-
- if ($_POST['ip']) {
- if (strpos($_POST['ip'], '@') !== false) {
- $ip_details = explode("@", $_POST['ip']);
- if (!is_ipaddr($ip_details[0]) || !is_port($ip_details[1])) {
- $input_errors[] = gettext("A valid IP address and port must be specified, for example 192.168.100.10@5353.");
- }
- } else if (!is_ipaddr($_POST['ip'])) {
- $input_errors[] = gettext("A valid IP address must be specified, for example 192.168.100.10.");
- }
- }
-
- if (!$input_errors) {
- $doment = array();
- $doment['domain'] = $_POST['domain'];
- $doment['ip'] = $_POST['ip'];
- $doment['descr'] = $_POST['descr'];
-
- if (isset($id) && $a_domainOverrides[$id]) {
- $a_domainOverrides[$id] = $doment;
- } else {
- $a_domainOverrides[] = $doment;
- }
-
- mark_subsystem_dirty('unbound');
-
- write_config();
-
- header("Location: services_unbound.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("DNS Resolver"), gettext("Edit Domain Override"));
-$shortcut_section = "resolver";
-include("head.inc");
-
-?>
-
-<body>
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
- <form action="services_unbound_domainoverride_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="domain override">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Domain");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="domain" type="text" class="formfld unknown" id="domain" size="40" value="<?=htmlspecialchars($pconfig['domain']);?>" /><br />
- <span class="vexpl">
- <?=gettext("Domain to override (NOTE: this does not have to be a valid TLD!)"); ?><br />
- <?=gettext("e.g."); ?> <em><?=gettext("test"); ?></em> <?=gettext("or"); ?> <em>mycompany.localdomain</em> <?=gettext("or"); ?> <em>1.168.192.in-addr.arpa</em>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("IP address");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="ip" type="text" class="formfld unknown" id="ip" size="40" value="<?=htmlspecialchars($pconfig['ip']);?>" /><br />
- <span class="vexpl">
- <?=gettext("IP address of the authoritative DNS server for this domain"); ?><br />
- <?=gettext("e.g."); ?> <em>192.168.100.100</em><br />
- <?=gettext("To use a nondefault port for communication, append an '@' with the port number."); ?><br />
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" /><br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed).");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_domainOverrides[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_unbound_host_edit.php b/usr/local/www/services_unbound_host_edit.php
deleted file mode 100644
index 6b365f2..0000000
--- a/usr/local/www/services_unbound_host_edit.php
+++ /dev/null
@@ -1,337 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_unbound_host_edit.php
- part of the pfSense project (https://www.pfsense.org)
- Copyright (C) 2014 Warren Baker (warren@decoy.co.za)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Copyright (C) 2003-2004 Bob Zoller <bob@kludgebox.com> and Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: dnsresolver
-*/
-
-##|+PRIV
-##|*IDENT=page-services-dnsresolver-edithost
-##|*NAME=Services: DNS Resolver: Edit host page
-##|*DESCR=Allow access to the 'Services: DNS Resolver: Edit host' page.
-##|*MATCH=services_unbound_host_edit.php*
-##|-PRIV
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_unbound.php');
-}
-
-function hostcmp($a, $b) {
- return strcasecmp($a['host'], $b['host']);
-}
-
-function hosts_sort() {
- global $g, $config;
-
- if (!is_array($config['unbound']['hosts'])) {
- return;
- }
-
- usort($config['unbound']['hosts'], "hostcmp");
-}
-
-require("guiconfig.inc");
-
-if (!is_array($config['unbound']['hosts'])) {
- $config['unbound']['hosts'] = array();
-}
-
-$a_hosts = &$config['unbound']['hosts'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_hosts[$id]) {
- $pconfig['host'] = $a_hosts[$id]['host'];
- $pconfig['domain'] = $a_hosts[$id]['domain'];
- $pconfig['ip'] = $a_hosts[$id]['ip'];
- $pconfig['descr'] = $a_hosts[$id]['descr'];
- $pconfig['aliases'] = $a_hosts[$id]['aliases'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "domain ip");
- $reqdfieldsn = array(gettext("Domain"), gettext("IP address"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if ($_POST['host']) {
- if (!is_hostname($_POST['host'])) {
- $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9, '_' and '-'. It may not start or end with '-'.");
- } else {
- if (!is_unqualified_hostname($_POST['host'])) {
- $input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted");
- }
- }
- }
-
- if (($_POST['domain'] && !is_domain($_POST['domain']))) {
- $input_errors[] = gettext("A valid domain must be specified.");
- }
-
- if (($_POST['ip'] && !is_ipaddr($_POST['ip']))) {
- $input_errors[] = gettext("A valid IP address must be specified.");
- }
-
- /* collect aliases */
- $aliases = array();
- foreach ($_POST as $key => $value) {
- $entry = '';
- if (!substr_compare('aliashost', $key, 0, 9)) {
- $entry = substr($key, 9);
- $field = 'host';
- } elseif (!substr_compare('aliasdomain', $key, 0, 11)) {
- $entry = substr($key, 11);
- $field = 'domain';
- } elseif (!substr_compare('aliasdescription', $key, 0, 16)) {
- $entry = substr($key, 16);
- $field = 'description';
- }
- if (ctype_digit($entry)) {
- $aliases[$entry][$field] = $value;
- }
- }
- $pconfig['aliases']['item'] = $aliases;
-
- /* validate aliases */
- foreach ($aliases as $idx => $alias) {
- $aliasreqdfields = array('aliasdomain' . $idx);
- $aliasreqdfieldsn = array(gettext("Alias Domain"));
-
- do_input_validation($_POST, $aliasreqdfields, $aliasreqdfieldsn, $input_errors);
- if ($alias['host']) {
- if (!is_hostname($alias['host'])) {
- $input_errors[] = gettext("Hostnames in an alias list can only contain the characters A-Z, 0-9 and '-'. They may not start or end with '-'.");
- } else {
- if (!is_unqualified_hostname($alias['host'])) {
- $input_errors[] = gettext("A valid alias hostname is specified, but the domain name part should be omitted");
- }
- }
- }
- if (($alias['domain'] && !is_domain($alias['domain']))) {
- $input_errors[] = gettext("A valid domain must be specified in alias list.");
- }
- }
-
- /* check for overlaps */
- foreach ($a_hosts as $hostent) {
- if (isset($id) && ($a_hosts[$id]) && ($a_hosts[$id] === $hostent)) {
- continue;
- }
-
- if (($hostent['host'] == $_POST['host']) &&
- ($hostent['domain'] == $_POST['domain']) &&
- ((is_ipaddrv4($hostent['ip']) && is_ipaddrv4($_POST['ip'])) || (is_ipaddrv6($hostent['ip']) && is_ipaddrv6($_POST['ip'])))) {
- $input_errors[] = gettext("This host/domain already exists.");
- break;
- }
- }
-
- if (!$input_errors) {
- $hostent = array();
- $hostent['host'] = $_POST['host'];
- $hostent['domain'] = $_POST['domain'];
- $hostent['ip'] = $_POST['ip'];
- $hostent['descr'] = $_POST['descr'];
- $hostent['aliases']['item'] = $aliases;
-
- if (isset($id) && $a_hosts[$id]) {
- $a_hosts[$id] = $hostent;
- } else {
- $a_hosts[] = $hostent;
- }
- hosts_sort();
-
- mark_subsystem_dirty('unbound');
-
- write_config();
-
- header("Location: services_unbound.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("DNS Resolver"), gettext("Edit host"));
-$shortcut_section = "resolver";
-include("head.inc");
-
-?>
-
-<body onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript" src="/javascript/row_helper.js">
-</script>
-
-<script type="text/javascript">
-//<![CDATA[
- rowname[0] = "aliashost";
- rowtype[0] = "textbox";
- rowsize[0] = "20";
- rowname[1] = "aliasdomain";
- rowtype[1] = "textbox";
- rowsize[1] = "20";
- rowname[2] = "aliasdescription";
- rowtype[2] = "textbox";
- rowsize[2] = "20";
-//]]>
-</script>
-
-<?php if ($input_errors) print_input_errors($input_errors); ?>
- <form action="services_unbound_host_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="host edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit DNS Resolver entry");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Host");?></td>
- <td width="78%" class="vtable">
- <input name="host" type="text" class="formfld unknown" id="host" size="40" value="<?=htmlspecialchars($pconfig['host']);?>" /><br />
- <span class="vexpl"><?=gettext("Name of the host, without domain part"); ?><br />
- <?=gettext("e.g."); ?> <em><?=gettext("myhost"); ?></em>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Domain");?></td>
- <td width="78%" class="vtable">
- <input name="domain" type="text" class="formfld unknown" id="domain" size="40" value="<?=htmlspecialchars($pconfig['domain']);?>" /><br />
- <span class="vexpl"><?=gettext("Domain of the host"); ?><br />
- <?=gettext("e.g."); ?> <em><?=gettext("example.com"); ?></em>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("IP address");?></td>
- <td width="78%" class="vtable">
- <input name="ip" type="text" class="formfld unknown" id="ip" size="40" value="<?=htmlspecialchars($pconfig['ip']);?>" /><br />
- <span class="vexpl"><?=gettext("IP address of the host"); ?><br />
- <?=gettext("e.g."); ?> <em>192.168.100.100</em> <?=gettext("or"); ?> <em>fd00:abcd::1</em>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" /><br />
- <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><div id="addressnetworkport"><?=gettext("Aliases"); ?></div></td>
- <td width="78%" class="vtable">
- <table id="maintable" summary="aliases">
- <tbody>
- <tr>
- <td colspan="4">
- <div style="padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066; background-color: #ffffff; color: #000000; font-size: 8pt;" id="itemhelp">
- <?=gettext("Enter additional names for this host."); ?>
- </div>
- </td>
- </tr>
- <tr>
- <td><div id="onecolumn"><?=gettext("Host");?></div></td>
- <td><div id="twocolumn"><?=gettext("Domain");?></div></td>
- <td><div id="threecolumn"><?=gettext("Description");?></div></td>
- </tr>
- <?php
- $counter = 0;
- if ($pconfig['aliases']['item']):
- foreach ($pconfig['aliases']['item'] as $item):
- $host = $item['host'];
- $domain = $item['domain'];
- $description = $item['description'];
- ?>
- <tr>
- <td>
- <input autocomplete="off" name="aliashost<?php echo $counter; ?>" type="text" class="formfld unknown" id="aliashost<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($host);?>" />
- </td>
- <td>
- <input autocomplete="off" name="aliasdomain<?php echo $counter; ?>" type="text" class="formfld unknown" id="aliasdomain<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($domain);?>" />
- </td>
- <td>
- <input name="aliasdescription<?php echo $counter; ?>" type="text" class="formfld unknown" id="aliasdescription<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($description);?>" />
- </td>
- <td>
- <a onclick="removeRow(this); return false;" href="#">
- <img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="" title="<?=gettext("remove this entry"); ?>" />
- </a>
- </td>
- </tr>
- <?php
- $counter++;
- endforeach;
- endif;
- ?>
- </tbody>
- </table>
- <a onclick="javascript:addRowTo('maintable', 'formfldalias'); return false;" href="#">
- <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
- </a>
- <script type="text/javascript">
- //<![CDATA[
- field_counter_js = 3;
- rows = 1;
- totalrows = <?php echo $counter; ?>;
- loaded = <?php echo $counter; ?>;
- //]]>
- </script>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_hosts[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_wol.php b/usr/local/www/services_wol.php
deleted file mode 100644
index e443ab0..0000000
--- a/usr/local/www/services_wol.php
+++ /dev/null
@@ -1,233 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_wol.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/local/bin/wol
- pfSense_MODULE: wol
-*/
-
-##|+PRIV
-##|*IDENT=page-services-wakeonlan
-##|*NAME=Services: Wake on LAN page
-##|*DESCR=Allow access to the 'Services: Wake on LAN' page.
-##|*MATCH=services_wol.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (!is_array($config['wol']['wolentry'])) {
- $config['wol']['wolentry'] = array();
-}
-$a_wol = &$config['wol']['wolentry'];
-
-if ($_GET['wakeall'] <> "") {
- $i = 0;
- $savemsg = "";
- foreach ($a_wol as $wolent) {
- $mac = $wolent['mac'];
- $if = $wolent['interface'];
- $description = $wolent['descr'];
- $ipaddr = get_interface_ip($if);
- if (!is_ipaddr($ipaddr)) {
- continue;
- }
- $bcip = gen_subnet_max($ipaddr, get_interface_subnet($if));
- /* Execute wol command and check return code. */
- if (!mwexec("/usr/local/bin/wol -i {$bcip} {$mac}")) {
- $savemsg .= sprintf(gettext('Sent magic packet to %1$s (%2$s)%3$s'), $mac, $description, ".<br />");
- } else {
- $savemsg .= sprintf(gettext('Please check the %1$ssystem log%2$s, the wol command for %3$s (%4$s) did not complete successfully%5$s'), '<a href="/diag_logs.php">', '</a>', $description, $mac, ".<br />");
- }
- }
-}
-
-if ($_POST || $_GET['mac']) {
- unset($input_errors);
-
- if ($_GET['mac']) {
- /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */
- $_GET['mac'] = strtolower(str_replace("-", ":", $_GET['mac']));
- $mac = $_GET['mac'];
- $if = $_GET['if'];
- } else {
- /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */
- $_POST['mac'] = strtolower(str_replace("-", ":", $_POST['mac']));
- $mac = $_POST['mac'];
- $if = $_POST['interface'];
- }
-
- /* input validation */
- if (!$mac || !is_macaddr($mac)) {
- $input_errors[] = gettext("A valid MAC address must be specified.");
- }
- if (!$if) {
- $input_errors[] = gettext("A valid interface must be specified.");
- }
-
- if (!$input_errors) {
- /* determine broadcast address */
- $ipaddr = get_interface_ip($if);
- if (!is_ipaddr($ipaddr)) {
- $input_errors[] = gettext("A valid ip could not be found!");
- } else {
- $bcip = gen_subnet_max($ipaddr, get_interface_subnet($if));
- /* Execute wol command and check return code. */
- if (!mwexec("/usr/local/bin/wol -i {$bcip} " . escapeshellarg($mac))) {
- $savemsg .= sprintf(gettext("Sent magic packet to %s."), $mac);
- } else {
- $savemsg .= sprintf(gettext('Please check the %1$ssystem log%2$s, the wol command for %3$s did not complete successfully%4$s'), '<a href="/diag_logs.php">', '</a>', $mac, ".<br />");
- }
- }
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($a_wol[$_GET['id']]) {
- unset($a_wol[$_GET['id']]);
- write_config();
- header("Location: services_wol.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("Wake on LAN"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<form action="services_wol.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="wake on lan">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Wake on LAN");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface");?></td>
- <td width="78%" class="vtable">
- <select name="interface" class="formselect">
- <?php
- $interfaces = get_configured_interface_with_descr();
- foreach ($interfaces as $iface => $ifacename): ?>
- <option value="<?=$iface;?>" <?php if (!link_interface_to_bridge($iface) && $iface == $if) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Choose which interface the host to be woken up is connected to.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("MAC address");?></td>
- <td width="78%" class="vtable">
- <input name="mac" type="text" class="formfld unknown" id="mac" size="20" value="<?=htmlspecialchars($mac);?>" />
- <br />
- <?=gettext("Enter a MAC address ");?><span class="vexpl"> <?=gettext("in the following format: xx:xx:xx:xx:xx:xx");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Send");?>" />
- </td>
- </tr>
- </table>
- &nbsp;<br />
- <?=gettext("Wake all clients at once: ");?><a href="services_wol.php?wakeall=true"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_wol_all.gif" width="17" height="17" border="0" alt="wol all" /></a><br/>
- <?=gettext("Or Click the MAC address to wake up an individual device:");?>
- <table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont" summary="clients">
- <tr>
- <td width="15%" class="listhdrr"><?=gettext("Interface");?></td>
- <td width="25%" class="listhdrr"><?=gettext("MAC address");?></td>
- <td width="50%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td valign="middle" width="17"></td>
- <td valign="middle"><a href="services_wol_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_wol as $wolent):
-?>
- <tr>
- <td class="listlr" ondblclick="document.location='services_wol_edit.php?id=<?=$i;?>';">
- <?=convert_friendly_interface_to_friendly_descr($wolent['interface']);?>
- </td>
- <td class="listr" ondblclick="document.location='services_wol_edit.php?id=<?=$i;?>';">
- <a href="?mac=<?=$wolent['mac'];?>&amp;if=<?=$wolent['interface'];?>"><?=strtolower($wolent['mac']);?></a>
- </td>
- <td class="listbg" ondblclick="document.location='services_wol_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($wolent['descr']);?>
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle"><a href="services_wol_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a></td>
- <td valign="middle"><a href="services_wol.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this entry?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="3"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td valign="middle" width="17"></td>
- <td valign="middle"><a href="services_wol_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <span class="vexpl">
- <span class="red">
- <strong>
- <?=gettext("Note:");?><br />
- </strong>
- </span>
- <?=gettext("This service can be used to wake up (power on) computers by sending special"); ?> &quot;<?=gettext("Magic Packets"); ?>&quot;. <?=gettext("The NIC in the computer that is to be woken up must support Wake on LAN and has to be configured properly (WOL cable, BIOS settings). ");?>
- </span>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/services_wol_edit.php b/usr/local/www/services_wol_edit.php
deleted file mode 100644
index 031ba83..0000000
--- a/usr/local/www/services_wol_edit.php
+++ /dev/null
@@ -1,180 +0,0 @@
-<?php
-/* $Id$ */
-/*
- services_wol_edit.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: wol
-*/
-
-##|+PRIV
-##|*IDENT=page-services-wakeonlan-edit
-##|*NAME=Services: Wake on LAN: Edit page
-##|*DESCR=Allow access to the 'Services: Wake on LAN: Edit' page.
-##|*MATCH=services_wol_edit.php*
-##|-PRIV
-
-function wolcmp($a, $b) {
- return strcmp($a['descr'], $b['descr']);
-}
-
-function wol_sort() {
- global $config;
-
- usort($config['wol']['wolentry'], "wolcmp");
-}
-
-require("guiconfig.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_wol.php');
-}
-
-if (!is_array($config['wol']['wolentry'])) {
- $config['wol']['wolentry'] = array();
-}
-$a_wol = &$config['wol']['wolentry'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_wol[$id]) {
- $pconfig['interface'] = $a_wol[$id]['interface'];
- $pconfig['mac'] = $a_wol[$id]['mac'];
- $pconfig['descr'] = $a_wol[$id]['descr'];
-} else {
- $pconfig['interface'] = $_GET['if'];
- $pconfig['mac'] = $_GET['mac'];
- $pconfig['descr'] = $_GET['descr'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "interface mac");
- $reqdfieldsn = array(gettext("Interface"), gettext("MAC address"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */
- $_POST['mac'] = strtolower(str_replace("-", ":", $_POST['mac']));
-
- if (($_POST['mac'] && !is_macaddr($_POST['mac']))) {
- $input_errors[] = gettext("A valid MAC address must be specified.");
- }
-
- if (!$input_errors) {
- $wolent = array();
- $wolent['interface'] = $_POST['interface'];
- $wolent['mac'] = $_POST['mac'];
- $wolent['descr'] = $_POST['descr'];
-
- if (isset($id) && $a_wol[$id]) {
- $a_wol[$id] = $wolent;
- } else {
- $a_wol[] = $wolent;
- }
- wol_sort();
-
- write_config();
-
- header("Location: services_wol.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("Wake on LAN"), gettext("Edit"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="services_wol_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="wol edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit WOL entry");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface");?></td>
- <td width="78%" class="vtable">
- <select name="interface" class="formfld">
- <?php
- $interfaces = get_configured_interface_with_descr();
- foreach ($interfaces as $iface => $ifacename): ?>
- <option value="<?=$iface;?>" <?php if (!link_interface_to_bridge($iface) && $iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Choose which interface this host is connected to.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("MAC address");?></td>
- <td width="78%" class="vtable">
- <input name="mac" type="text" class="formfld unknown" id="mac" size="20" value="<?=htmlspecialchars($pconfig['mac']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br /> <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_wol[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/shortcuts.inc b/usr/local/www/shortcuts.inc
deleted file mode 100644
index c4bf48e..0000000
--- a/usr/local/www/shortcuts.inc
+++ /dev/null
@@ -1,289 +0,0 @@
-<?php
-/* $Id$ */
-/*
- Copyright (C) 2012 Jim Pingle
- All rights reserved.
-
- Copyright (C) 2007, 2008 Scott Ullrich <sullrich@gmail.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-/*
- pfSense_MODULE: system
-*/
-
-// On the page, add in like so:
-// $shortcut_section = "relayd";
-
-$shortcuts = array();
-
-/* Load and process custom shortcuts. */
-function get_shortcut_files($directory) {
- $dir_array = array();
- if (!is_dir($directory)) {
- return;
- }
- if ($dh = opendir($directory)) {
- while (($file = readdir($dh)) !== false) {
- $canadd = 0;
- if ($file == ".") {
- $canadd = 1;
- }
- if ($file == "..") {
- $canadd = 1;
- }
- if ($canadd == 0) {
- array_push($dir_array, $file);
- }
- }
- closedir($dh);
- }
- if (!is_array($dir_array)) {
- return;
- }
- return $dir_array;
-}
-
-function get_shortcut_by_service_name($servicename) {
- global $shortcuts;
- foreach ($shortcuts as $name => $shortcut) {
- if (!empty($shortcut['service']) && ($shortcut['service'] == $servicename)) {
- return $name;
- }
- }
- return null;
-}
-
-function get_shortcut_main_link($shortcut_section, $addspace = true, $service = array()) {
- global $g, $shortcuts;
- if (empty($shortcut_section)) {
- return "";
- }
- $space = ($addspace) ? "&nbsp;" : "" ;
- switch ($shortcut_section) {
- case "openvpn":
- if (!empty($service['mode']) && is_numeric($service['id'])) {
- $link = "vpn_openvpn_{$service['mode']}.php?act=edit&amp;id={$service['id']}";
- } else {
- $link = $shortcuts[$shortcut_section]['main'];
- }
- break;
- case "captiveportal":
- if (!empty($service['zone'])) {
- $link = "services_captiveportal.php?zone={$service['zone']}";
- } else {
- $link = $shortcuts[$shortcut_section]['main'];
- }
- break;
- default:
- $link = $shortcuts[$shortcut_section]['main'];
- break;
- }
- if (!empty($link) && ($_SERVER['REQUEST_URI'] != "/{$link}")) {
- return "{$space}<a href=\"{$link}\" title=\"" . gettext("Main page for this section") . "\"><img style=\"vertical-align:middle\" src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" border=\"0\" alt=\"plus\" /></a>";
- }
-}
-
-function get_shortcut_status_link($shortcut_section, $addspace = true, $service = array()) {
- global $g, $shortcuts, $cpzone;
- if (empty($shortcut_section)) {
- return "";
- }
- $space = ($addspace) ? "&nbsp;" : "" ;
- if (!empty($cpzone)) {
- $zone = $cpzone;
- } elseif (!empty($service['zone'])) {
- $zone = $service['zone'];
- }
- switch ($shortcut_section) {
- case "captiveportal":
- if (!empty($zone)) {
- $link = "status_captiveportal.php?zone={$zone}";
- } else {
- $link = $shortcuts[$shortcut_section]['status'];
- }
- break;
- default:
- $link = $shortcuts[$shortcut_section]['status'];
- break;
- }
- if (!empty($link)) {
- return "{$space}<a href=\"{$link}\" title=\"" . gettext("Status of items on this page") . "\"><img style=\"vertical-align:middle\" src=\"/themes/{$g['theme']}/images/icons/icon_service_status.gif\" border=\"0\" alt=\"status\" /></a>";
- }
-}
-
-function get_shortcut_log_link($shortcut_section, $addspace = true) {
- global $g, $shortcuts;
- $space = ($addspace) ? "&nbsp;" : "" ;
- if (!empty($shortcut_section) && !empty($shortcuts[$shortcut_section]['log'])) {
- return "{$space}<a href=\"{$shortcuts[$shortcut_section]['log']}\" title=\"" . gettext("Log entries for items on this page") . "\"><img style=\"vertical-align:middle\" src=\"/themes/{$g['theme']}/images/icons/icon_logs.gif\" border=\"0\" alt=\"logs\" /></a>";
- }
-}
-
-// Load shortcuts
-$dir_array = get_shortcut_files("/usr/local/www/shortcuts");
-foreach ($dir_array as $file) {
- if (!is_dir("/usr/local/www/shortcuts/{$file}") && stristr($file, ".inc")) {
- include("/usr/local/www/shortcuts/{$file}");
- }
-}
-if (is_dir("/usr/local/pkg/shortcuts")) {
- $dir_array = get_shortcut_files("/usr/local/pkg/shortcuts");
- foreach ($dir_array as $file) {
- if (!is_dir("/usr/local/pkg/shortcuts/{$file}") && stristr($file, ".inc")) {
- include("/usr/local/pkg/shortcuts/{$file}");
- }
- }
-}
-
-$shortcuts['relayd'] = array();
-$shortcuts['relayd']['main'] = "load_balancer_pool.php";
-$shortcuts['relayd']['log'] = "diag_logs_relayd.php";
-$shortcuts['relayd']['status'] = "status_lb_pool.php";
-$shortcuts['relayd']['service'] = "relayd";
-
-$shortcuts['relayd-virtualservers'] = array();
-$shortcuts['relayd-virtualservers']['main'] = "load_balancer_virtual_server.php";
-$shortcuts['relayd-virtualservers']['log'] = "diag_logs_relayd.php";
-$shortcuts['relayd-virtualservers']['status'] = "status_lb_vs.php";
-$shortcuts['relayd-virtualservers']['service'] = "relayd";
-
-$shortcuts['captiveportal'] = array();
-$shortcuts['captiveportal']['main'] = "services_captiveportal_zones.php";
-$shortcuts['captiveportal']['log'] = "diag_logs_auth.php";
-$shortcuts['captiveportal']['status'] = "status_captiveportal.php";
-$shortcuts['captiveportal']['service'] = "captiveportal";
-
-$shortcuts['captiveportal-vouchers'] = array();
-$shortcuts['captiveportal-vouchers']['log'] = "diag_logs_auth.php";
-$shortcuts['captiveportal-vouchers']['status'] = "status_captiveportal_vouchers.php";
-$shortcuts['captiveportal-vouchers']['service'] = "captiveportal";
-
-$shortcuts['dhcp'] = array();
-$shortcuts['dhcp']['main'] = "services_dhcp.php";
-$shortcuts['dhcp']['log'] = "diag_logs_dhcp.php";
-$shortcuts['dhcp']['status'] = "status_dhcp_leases.php";
-$shortcuts['dhcp']['service'] = "dhcpd";
-
-$shortcuts['dhcp6'] = array();
-$shortcuts['dhcp6']['main'] = "services_dhcpv6.php";
-$shortcuts['dhcp6']['log'] = "diag_logs_dhcp.php";
-$shortcuts['dhcp6']['status'] = "status_dhcpv6_leases.php";
-
-
-$shortcuts['ipsec'] = array();
-$shortcuts['ipsec']['main'] = "vpn_ipsec.php";
-$shortcuts['ipsec']['log'] = "diag_logs_ipsec.php";
-$shortcuts['ipsec']['status'] = "diag_ipsec.php";
-$shortcuts['ipsec']['service'] = "ipsec";
-
-$shortcuts['openvpn'] = array();
-$shortcuts['openvpn']['main'] = "vpn_openvpn_server.php";
-$shortcuts['openvpn']['log'] = "diag_logs_openvpn.php";
-$shortcuts['openvpn']['status'] = "status_openvpn.php";
-$shortcuts['openvpn']['service'] = "openvpn";
-
-$shortcuts['firewall'] = array();
-$shortcuts['firewall']['main'] = "firewall_rules.php";
-$shortcuts['firewall']['log'] = "diag_logs_filter.php";
-$shortcuts['firewall']['status'] = "status_filter_reload.php";
-
-$shortcuts['routing'] = array();
-$shortcuts['routing']['main'] = "system_routes.php";
-$shortcuts['routing']['log'] = "diag_logs_routing.php";
-$shortcuts['routing']['status'] = "diag_routes.php";
-
-$shortcuts['gateways'] = array();
-$shortcuts['gateways']['main'] = "system_gateways.php";
-$shortcuts['gateways']['log'] = "diag_logs_gateways.php";
-$shortcuts['gateways']['status'] = "status_gateways.php";
-$shortcuts['gateways']['service'] = "apinger";
-
-$shortcuts['gateway-groups'] = array();
-$shortcuts['gateway-groups']['main'] = "system_gateway_groups.php";
-$shortcuts['gateway-groups']['log'] = "diag_logs_gateways.php";
-$shortcuts['gateway-groups']['status'] = "status_gateway_groups.php";
-
-$shortcuts['interfaces'] = array();
-$shortcuts['interfaces']['main'] = "interfaces_assign.php";
-$shortcuts['interfaces']['status'] = "status_interfaces.php";
-
-$shortcuts['trafficshaper'] = array();
-$shortcuts['trafficshaper']['main'] = "firewall_shaper.php";
-$shortcuts['trafficshaper']['status'] = "status_queues.php";
-
-$shortcuts['trafficshaper-limiters'] = array();
-$shortcuts['trafficshaper-limiters']['main'] = "firewall_shaper_vinterface.php";
-$shortcuts['trafficshaper-limiters']['status'] = "diag_limiter_info.php";
-
-$shortcuts['forwarder'] = array();
-$shortcuts['forwarder']['main'] = "services_dnsmasq.php";
-$shortcuts['forwarder']['log'] = "diag_logs_resolver.php";
-$shortcuts['forwarder']['service'] = "dnsmasq";
-
-$shortcuts['resolver'] = array();
-$shortcuts['resolver']['main'] = "services_unbound.php";
-$shortcuts['resolver']['log'] = "diag_logs_resolver.php";
-$shortcuts['resolver']['service'] = "unbound";
-
-$shortcuts['wireless'] = array();
-$shortcuts['wireless']['main'] = "interfaces_wireless.php";
-$shortcuts['wireless']['log'] = "diag_logs_wireless.php";
-$shortcuts['wireless']['status'] = "status_wireless.php";
-
-$shortcuts['ntp'] = array();
-$shortcuts['ntp']['main'] = "services_ntpd.php";
-$shortcuts['ntp']['log'] = "diag_logs_ntpd.php";
-$shortcuts['ntp']['status'] = "status_ntpd.php";
-$shortcuts['ntp']['service'] = "ntpd";
-
-$shortcuts['pptps'] = array();
-$shortcuts['pptps']['main'] = "vpn_pptp.php";
-$shortcuts['pptps']['log'] = "diag_logs_vpn.php";
-
-$shortcuts['pppoes'] = array();
-$shortcuts['pppoes']['main'] = "vpn_pppoe.php";
-$shortcuts['pppoes']['log'] = "diag_logs_vpn.php?vpntype=poes";
-
-$shortcuts['l2tps'] = array();
-$shortcuts['l2tps']['main'] = "vpn_l2tp.php";
-$shortcuts['l2tps']['log'] = "diag_logs_vpn.php?vpntype=l2tp";
-
-$shortcuts['carp'] = array();
-$shortcuts['carp']['main'] = "system_hasync.php";
-$shortcuts['carp']['status'] = "carp_status.php";
-
-$shortcuts['snmp'] = array();
-$shortcuts['snmp']['main'] = "services_snmp.php";
-$shortcuts['snmp']['service'] = "bsnmpd";
-
-$shortcuts['authentication'] = array();
-$shortcuts['authentication']['main'] = "system_authservers.php";
-$shortcuts['authentication']['status'] = "diag_authentication.php";
-
-$shortcuts['aliases'] = array();
-$shortcuts['aliases']['main'] = "firewall_aliases.php";
-$shortcuts['aliases']['status'] = "diag_tables.php";
-?>
diff --git a/usr/local/www/shortcuts/pkg_upnp.inc b/usr/local/www/shortcuts/pkg_upnp.inc
deleted file mode 100644
index 2b068a7..0000000
--- a/usr/local/www/shortcuts/pkg_upnp.inc
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-global $shortcuts;
-
-$shortcuts['upnp'] = array();
-$shortcuts['upnp']['main'] = "pkg_edit.php?xml=miniupnpd.xml";
-$shortcuts['upnp']['log'] = "diag_logs_routing.php";
-$shortcuts['upnp']['status'] = "status_upnp.php";
-$shortcuts['upnp']['service'] = "miniupnpd";
-
-?>
diff --git a/usr/local/www/stats.php b/usr/local/www/stats.php
deleted file mode 100644
index 6f34673..0000000
--- a/usr/local/www/stats.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/*
- $Id$
- part of pfSense (https://www.pfsense.org)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2007 Scott Ullrich <sullrich@gmail.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-cpuutilization
-##|*NAME=Diagnostics: CPU Utilization page
-##|*DESCR=Allow access to the 'Diagnostics: CPU Utilization' page.
-##|*MATCH=stats.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("includes/functions.inc.php");
-
-$cpu = cpu_usage();
-
-echo $cpu;
-exit;
-
-?>
diff --git a/usr/local/www/status.php b/usr/local/www/status.php
deleted file mode 100755
index 6561c98..0000000
--- a/usr/local/www/status.php
+++ /dev/null
@@ -1,281 +0,0 @@
-<?php
-/* $Id$ */
-/* Run various commands and collect their output into HTML tables.
- * Jim McBeath <jimmc@macrovision.com> Nov 2003
- *
- * (modified for m0n0wall by Manuel Kasper <mk@neon1.net>)
- * (modified for pfSense by Scott Ullrich geekgod@pfsense.com)
- *
- */
-/*
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/vmstat /usr/bin/netstat /sbin/dmesg /sbin/mount /sbin/setkey /usr/local/sbin/pftop
- pfSense_BUILDER_BINARIES: /sbin/pfctl /sbin/sysctl /usr/bin/top /usr/bin/netstat /sbin/pfctl /sbin/ifconfig
- pfSense_MODULE: support
-*/
-
-##|+PRIV
-##|*IDENT=page-hidden-detailedstatus
-##|*NAME=Hidden: Detailed Status page
-##|*DESCR=Allow access to the 'Hidden: Detailed Status' page.
-##|*MATCH=status.php*
-##|-PRIV
-
-/* Execute a command, with a title, and generate an HTML table
- * showing the results.
- */
-
-/* include all configuration functions */
-require_once("guiconfig.inc");
-require_once("functions.inc");
-$output_path = "/tmp/status_output/";
-$output_file = "/tmp/status_output.tgz";
-
-if (is_dir($output_path)) {
- unlink_if_exists("{$output_path}/*");
- @rmdir($output_path);
-}
-unlink_if_exists($output_file);
-mkdir($output_path);
-
-function doCmdT($title, $command) {
- global $output_path, $output_file;
- /* Fixup output directory */
-
- $rubbish = array('|', '-', '/', '.', ' '); /* fixes the <a> tag to be W3C compliant */
- echo "\n<a name=\"" . str_replace($rubbish, '', $title) . "\" id=\"" . str_replace($rubbish, '', $title) . "\"></a>\n";
- echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"" . $title . "\">\n";
- echo "\t<tr><td class=\"listtopic\">" . $title . "</td></tr>\n";
- echo "\t<tr>\n\t\t<td class=\"listlr\">\n\t\t\t<pre>"; /* no newline after pre */
-
- if ($command == "dumpconfigxml") {
- $ofd = @fopen("{$output_path}/config-sanitized.xml", "w");
- $fd = @fopen("/conf/config.xml", "r");
- if ($fd) {
- while (!feof($fd)) {
- $line = fgets($fd);
- /* remove sensitive contents */
- $line = preg_replace("/<password>.*?<\\/password>/", "<password>xxxxx</password>", $line);
- $line = preg_replace("/<pre-shared-key>.*?<\\/pre-shared-key>/", "<pre-shared-key>xxxxx</pre-shared-key>", $line);
- $line = preg_replace("/<rocommunity>.*?<\\/rocommunity>/", "<rocommunity>xxxxx</rocommunity>", $line);
- $line = preg_replace("/<prv>.*?<\\/prv>/", "<prv>xxxxx</prv>", $line);
- $line = preg_replace("/<shared_key>.*?<\\/shared_key>/", "<shared_key>xxxxx</shared_key>", $line);
- $line = preg_replace("/<tls>.*?<\\/tls>/", "<tls>xxxxx</tls>", $line);
- $line = preg_replace("/<ipsecpsk>.*?<\\/ipsecpsk>/", "<ipsecpsk>xxxxx</ipsecpsk>", $line);
- $line = preg_replace("/<md5-hash>.*?<\\/md5-hash>/", "<md5-hash>xxxxx</md5-hash>", $line);
- $line = preg_replace("/<md5password>.*?<\\/md5password>/", "<md5password>xxxxx</md5password>", $line);
- $line = preg_replace("/<radius_secret>.*?<\\/radius_secret>/", "<radius_secret>xxxxx</radius_secret>", $line);
- $line = preg_replace("/<ldap_bindpw>.*?<\\/ldap_bindpw>/", "<ldap_bindpw>xxxxx</ldap_bindpw>", $line);
- $line = preg_replace("/<passwordagain>.*?<\\/passwordagain>/", "<passwordagain>xxxxx</passwordagain>", $line);
- $line = preg_replace("/<crypto_password>.*?<\\/crypto_password>/", "<crypto_password>xxxxx</crypto_password>", $line);
- $line = preg_replace("/<crypto_password2>.*?<\\/crypto_password2>/", "<crypto_password2>xxxxx</crypto_password2>", $line);
- $line = str_replace("\t", " ", $line);
- echo htmlspecialchars($line, ENT_NOQUOTES);
- fwrite($ofd, $line);
- }
- }
- fclose($fd);
- fclose($ofd);
- } else {
- $ofd = @fopen("{$output_path}/{$title}.txt", "w");
- $execOutput = "";
- $execStatus = "";
- exec ($command . " 2>&1", $execOutput, $execStatus);
- for ($i = 0; isset($execOutput[$i]); $i++) {
- if ($i > 0) {
- echo "\n";
- }
- echo htmlspecialchars($execOutput[$i], ENT_NOQUOTES);
- fwrite($ofd, $execOutput[$i] . "\n");
- }
- fclose($ofd);
- }
- echo "\n\t\t\t</pre>\n\t\t</td>\n\t</tr>\n";
- echo "</table>\n";
-}
-
-/* Define a command, with a title, to be executed later. */
-function defCmdT($title, $command) {
- global $commands;
- $title = htmlspecialchars($title, ENT_NOQUOTES);
- $commands[] = array($title, $command);
-}
-
-/* List all of the commands as an index. */
-function listCmds() {
- global $commands;
- $rubbish = array('|', '-', '/', '.', ' '); /* fixes the <a> tag to be W3C compliant */
- echo "\n<p>" . gettext("This status page includes the following information") . ":\n";
- echo "<ul>\n";
- for ($i = 0; isset($commands[$i]); $i++) {
- echo "\t<li><strong><a href=\"#" . str_replace($rubbish, '', $commands[$i][0]) . "\">" . $commands[$i][0] . "</a></strong></li>\n";
- }
- echo "</ul>\n";
-}
-
-/* Execute all of the commands which were defined by a call to defCmd. */
-function execCmds() {
- global $commands;
- for ($i = 0; isset($commands[$i]); $i++) {
- doCmdT($commands[$i][0], $commands[$i][1]);
- }
-}
-
-global $g, $config;
-
-/* Set up all of the commands we want to execute. */
-
-/* System stats/info */
-defCmdT("System uptime", "/usr/bin/uptime");
-defCmdT("Interfaces", "/sbin/ifconfig -a");
-defCmdT("Interface Statistics","/usr/bin/netstat -ni");
-defCmdT("Top Process Info", "/usr/bin/top | /usr/bin/head -n5");
-defCmdT("Processes", "/bin/ps xauww");
-defCmdT("Mounted Filesystems", "/sbin/mount");
-defCmdT("Free Disk Space", "/bin/df -hi");
-defCmdT("Routing tables", "/usr/bin/netstat -nWr");
-defCmdT("Mbuf Usage", "/usr/bin/netstat -mb");
-defCmdT("VMStat", "/usr/bin/vmstat -afimsz");
-defCmdT("Sockets", "/usr/bin/sockstat");
-
-/* Firewall rules and info */
-defCmdT("Generated Ruleset", "/bin/cat {$g['tmp_path']}/rules.debug");
-defCmdT("Generated Ruleset Limiters", "/bin/cat {$g['tmp_path']}/rules.limiter");
-defCmdT("Generated Ruleset Limits", "/bin/cat {$g['tmp_path']}/rules.limits");
-defCmdT("pf NAT Rules", "/sbin/pfctl -vvsn");
-defCmdT("pf Firewall Rules", "/sbin/pfctl -vvsr");
-defCmdT("pf Tables", "/sbin/pfctl -vs Tables");
-defCmdT("pf State Table Contents", "/sbin/pfctl -ss");
-defCmdT("pf Info", "/sbin/pfctl -si");
-defCmdT("pf Show All", "/sbin/pfctl -sa");
-defCmdT("pf Queues", "/sbin/pfctl -s queue -v");
-defCmdT("pf OSFP", "/sbin/pfctl -s osfp");
-defCmdT("pfsync stats", "/usr/bin/netstat -s -ppfsync");
-defCmdT("pftop Default", "/usr/local/sbin/pftop -a -b");
-defCmdT("pftop Long", "/usr/local/sbin/pftop -w 150 -a -b -v long");
-defCmdT("pftop Queue", "/usr/local/sbin/pftop -w 150 -a -b -v queue");
-defCmdT("pftop Rules", "/usr/local/sbin/pftop -w 150 -a -b -v rules");
-defCmdT("pftop Size", "/usr/local/sbin/pftop -w 150 -a -b -v size");
-defCmdT("pftop Speed", "/usr/local/sbin/pftop -w 150 -a -b -v speed");
-if (isset($config['captiveportal']) && is_array($config['captiveportal'])) {
- foreach ($config['captiveportal'] as $cpZone => $cpdata) {
- if (isset($cpdata['enable'])) {
- defCmdT("IPFW rules for {$cpdata['zoneid']}", "/sbin/ipfw -x " . escapeshellarg($cpdata['zoneid']) . " show");
- }
- }
-}
-
-/* Configuration Files */
-defCmdT("Contents of /var/run", "/bin/ls /var/run");
-defCmdT("Contents of /conf", "/bin/ls /conf");
-defCmdT("config.xml", "dumpconfigxml");
-defCmdT("resolv.conf", "/bin/cat /etc/resolv.conf");
-defCmdT("DHCP Configuration", "/bin/cat /var/dhcpd/etc/dhcpd.conf");
-defCmdT("DHCPv6 Configuration", "/bin/cat /var/dhcpd/etc/dhcpdv6.conf");
-defCmdT("strongSwan config", "/bin/cat /var/etc/ipsec/strongswan.conf");
-defCmdT("IPsec config", "/bin/cat /var/etc/ipsec/ipsec.conf");
-defCmdT("SPD", "/sbin/setkey -DP");
-defCmdT("SAD", "/sbin/setkey -D");
-if (file_exists("/cf/conf/upgrade_log.txt")) {
- defCmdT("Upgrade Log", "/bin/cat /cf/conf/upgrade_log.txt");
-}
-if (file_exists("/boot/loader.conf")) {
- defCmdT("Loader Configuration", "/bin/cat /boot/loader.conf");
-}
-if (file_exists("/boot/loader.conf.local")) {
- defCmdT("Loader Configuration (Local)", "/bin/cat /boot/loader.conf.local");
-}
-if (file_exists("/var/run/apinger.status")) {
- defCmdT("Gateway Status", "/bin/cat /var/run/apinger.status");
-}
-if (file_exists("/var/etc/apinger.conf")) {
- defCmdT("Gateway Monitoring Config", "/bin/cat /var/etc/apinger.conf");
-}
-if (file_exists("/var/etc/filterdns.conf")) {
- defCmdT("Filter DNS Daemon Config", "/bin/cat /var/etc/filterdns.conf");
-}
-if (isset($config['system']['usefifolog'])) {
- defCmdT("last 200 system log entries", "/usr/sbin/fifolog_reader /var/log/system.log 2>&1 | tail -n 200");
- defCmdT("last 50 filter log entries", "/usr/sbin/fifolog_reader /var/log/filter.log 2>&1 | tail -n 50");
-} else {
- defCmdT("last 200 system log entries", "/usr/local/sbin/clog /var/log/system.log 2>&1 | tail -n 200");
- defCmdT("last 50 filter log entries", "/usr/local/sbin/clog /var/log/filter.log 2>&1 | tail -n 50");
-}
-if (file_exists("/tmp/PHP_errors.log")) {
- defCmdT("PHP Error Log", "/bin/cat /tmp/PHP_errors.log");
-}
-defCmdT("System Message Buffer", "/sbin/dmesg -a");
-defCmdT("System Message Buffer (Boot)", "/bin/cat /var/log/dmesg.boot");
-defCmdT("sysctl values", "/sbin/sysctl -a");
-
-exec("/bin/date", $dateOutput, $dateStatus);
-$currentDate = $dateOutput[0];
-
-$pgtitle = array("{$g['product_name']}", "status");
-include("head.inc");
-
-?>
-<style type="text/css">
-/*<![CDATA[*/
-pre {
- margin: 0px;
- font-family: courier new, courier;
- font-weight: normal;
- font-size: 9pt;
-}
-/*]]>*/
-</style>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<strong><?=$currentDate;?></strong>
-<p><span class="red"><strong><?=gettext("Note: make sure to remove any sensitive information " .
-"(passwords, maybe also IP addresses) before posting " .
-"information from this page in public places (like mailing lists)"); ?>!</strong></span><br />
-<?=gettext("Passwords in config.xml have been automatically removed"); ?>.<br /><br />
-<?=gettext("When the page has finished loading, the output will be stored in {$output_file}. It may be downloaded via scp or "); ?>
-<a href="/exec.php?dlPath=<?= $output_file ?>"><?=gettext("Diagnostics > Command Prompt")?></a>
-
-<div id="cmdspace" style="width:700px">
-<?php listCmds(); ?>
-
-<?php execCmds(); ?>
-</div>
-<br />
-<?=gettext("Saving output to archive...");?>
-<?php
-if (is_dir($output_path)) {
- mwexec("/usr/bin/tar czpf " . escapeshellarg($output_file) . " -C " . escapeshellarg(dirname($output_path)) . " " . escapeshellarg(basename($output_path)));
- unlink_if_exists("{$output_path}/*");
- @rmdir($output_path);
-}
-?>
-<?=gettext("Done.");?>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_captiveportal.php b/usr/local/www/status_captiveportal.php
deleted file mode 100644
index d88a452..0000000
--- a/usr/local/www/status_captiveportal.php
+++ /dev/null
@@ -1,260 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_captiveportal.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-status-captiveportal
-##|*NAME=Status: Captive portal page
-##|*DESCR=Allow access to the 'Status: Captive portal' page.
-##|*MATCH=status_captiveportal.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-$pgtitle = array(gettext("Status: Captive portal"));
-$shortcut_section = "captiveportal";
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-if (count($a_cp) == 1) {
- $cpzone = current(array_keys($a_cp));
-}
-
-/* If the zone does not exist, do not display the invalid zone */
-if (!array_key_exists($cpzone, $a_cp)) {
- $cpzone = "";
-}
-
-if (isset($cpzone) && !empty($cpzone) && isset($a_cp[$cpzone]['zoneid'])) {
- $cpzoneid = $a_cp[$cpzone]['zoneid'];
-}
-
-if ($_GET['act'] == "del" && !empty($cpzone) && isset($cpzoneid) && isset($_GET['id'])) {
- captiveportal_disconnect_client($_GET['id']);
- header("Location: status_captiveportal.php?zone={$cpzone}");
- exit;
-}
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php
-
-flush();
-
-function clientcmp($a, $b) {
- global $order;
- return strcmp($a[$order], $b[$order]);
-}
-
-if (!empty($cpzone)) {
- $cpdb = captiveportal_read_db();
-
- if ($_GET['order']) {
- if ($_GET['order'] == "ip") {
- $order = 2;
- } else if ($_GET['order'] == "mac") {
- $order = 3;
- } else if ($_GET['order'] == "user") {
- $order = 4;
- } else if ($_GET['order'] == "lastact") {
- $order = 5;
- } else {
- $order = 0;
- }
- usort($cpdb, "clientcmp");
- }
-}
-
-// Load MAC-Manufacturer table
-$mac_man = load_mac_manufacturer_table();
-
-?>
-
-<?php if (!empty($cpzone) && isset($config['voucher'][$cpzone]['enable'])): ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tab pane">
- <tr><td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Active Users"), true, "status_captiveportal.php?zone=" . htmlspecialchars($cpzone));
- $tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone=" . htmlspecialchars($cpzone));
- $tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone=" . htmlspecialchars($cpzone));
- $tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone=" . htmlspecialchars($cpzone));
- $tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone=" . htmlspecialchars($cpzone));
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td class="tabcont">
-<?php endif; ?>
-
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="20%" class="vncell" valign="top">
- <br /><?=gettext("Captive Portal Zone"); ?><br/><br />
- </td>
- <td class="vncell" width="30%" align="center">
-<?php
- if (count($a_cp) > 1) {
-?>
- <form action="status_captiveportal.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
- <select name="zone" class="formselect" onchange="document.form1.submit()">
- <option value="">none</option>
-<?php
- foreach ($a_cp as $cpkey => $cp) {
- echo "<option value=\"" . htmlspecialchars($cpkey) . "\" ";
- if ($cpzone == $cpkey) {
- echo "selected=\"selected\"";
- }
- echo ">" . htmlspecialchars($cp['zone']) . "</option>\n";
- }
-?>
- </select>
- <br />
- </form>
-<?php
- } else {
- echo htmlspecialchars($a_cp[$cpzone]['zone']);
- }
-?>
- </td>
- <td colspan="3" width="50%"></td>
- </tr>
- <tr>
- <td colspan="5"><br /></td>
- </tr>
-<?php
- if (!empty($cpzone)):
-?>
- <tr>
- <td colspan="5" valign="top" class="listtopic"><?=gettext("Captive Portal status");?></td>
- </tr>
- <tr>
- <td class="listhdrr"><a href="?zone=<?=htmlspecialchars($cpzone)?>&amp;order=ip&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("IP address");?></a></td>
- <td class="listhdrr"><a href="?zone=<?=htmlspecialchars($cpzone)?>&amp;order=mac&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("MAC address");?></a></td>
- <td class="listhdrr"><a href="?zone=<?=htmlspecialchars($cpzone)?>&amp;order=user&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Username");?></a></td>
-<?php
- if ($_GET['showact']):
-?>
- <td class="listhdrr"><a href="?zone=<?=htmlspecialchars($cpzone)?>&amp;order=start&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Session start");?></a></td>
- <td class="listhdr"><a href="?zone=<?=htmlspecialchars($cpzone)?>&amp;order=lastact&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Last activity");?></a></td>
-<?php
- else:
-?>
- <td class="listhdr" colspan="2"><a href="?zone=<?=htmlspecialchars($cpzone)?>&amp;order=start&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Session start");?></a></td>
-<?php
- endif;
-?>
- <td class="list sort_ignore"></td>
- </tr>
-<?php
- foreach ($cpdb as $cpent):
-?>
- <tr>
- <td class="listlr"><?=$cpent[2];?></td>
- <td class="listr">
-<?php
- $mac=trim($cpent[3]);
- if (!empty($mac)) {
- $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
- print htmlentities($mac);
- if (isset($mac_man[$mac_hi])) {
- print "<br /><font size=\"-2\"><i>{$mac_man[$mac_hi]}</i></font>";
- }
- }
-?>
- &nbsp;
- </td>
- <td class="listr"><?=htmlspecialchars($cpent[4]);?>&nbsp;</td>
-<?php
- if ($_GET['showact']):
- $last_act = captiveportal_get_last_activity($cpent[2], $cpent[3]);
-?>
- <td class="listr"><?=htmlspecialchars(date("m/d/Y H:i:s", $cpent[0]));?></td>
- <td class="listr"><?php if ($last_act != 0) echo htmlspecialchars(date("m/d/Y H:i:s", $last_act));?></td>
-<?php
- else:
-?>
- <td class="listr" colspan="2"><?=htmlspecialchars(date("m/d/Y H:i:s", $cpent[0]));?></td>
-<?php
- endif;
-?>
- <td valign="middle" class="list nowrap">
- <a href="?zone=<?=htmlspecialchars($cpzone);?>&amp;order=<?=$_GET['order'];?>&amp;showact=<?=htmlspecialchars($_GET['showact']);?>&amp;act=del&amp;id=<?=$cpent[5];?>" onclick="return confirm('<?=gettext("Do you really want to disconnect this client?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("Disconnect");?>"></a>
- </td>
- </tr>
-<?php
- endforeach;
- endif;
-?>
- </table>
-
-<?php if (!empty($cpzone) && isset($config['voucher'][$cpzone]['enable'])): ?>
- </td>
- </tr>
-</table>
-<?php endif; ?>
-
-<form action="status_captiveportal.php" method="get" style="margin: 14px;">
- <input type="hidden" name="order" value="<?=htmlspecialchars($_GET['order']);?>" />
-<?php if (!empty($cpzone)): ?>
-<?php if ($_GET['showact']): ?>
- <input type="hidden" name="showact" value="0" />
- <input type="submit" class="formbtn" value="<?=gettext("Don't show last activity");?>" />
-<?php else: ?>
- <input type="hidden" name="showact" value="1" />
- <input type="submit" class="formbtn" value="<?=gettext("Show last activity");?>" />
-<?php endif; ?>
- <input type="hidden" name="zone" value="<?=htmlspecialchars($cpzone);?>" />
-<?php endif; ?>
-</form>
-<?php include("fend.inc"); ?>
-
-</body>
-</html>
diff --git a/usr/local/www/status_captiveportal_expire.php b/usr/local/www/status_captiveportal_expire.php
deleted file mode 100644
index 7d786b4..0000000
--- a/usr/local/www/status_captiveportal_expire.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-/*
- Copyright (C) 2007 Marcel Wiget <mwiget@mac.com>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-status-captiveportal-expire
-##|*NAME=Status: Captive portal Expire Vouchers page
-##|*DESCR=Allow access to the 'Status: Captive portal Expire Vouchers' page.
-##|*MATCH=status_captiveportal_expire.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-require_once("voucher.inc");
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-if (empty($cpzone)) {
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Expire Vouchers"), $a_cp[$cpzone]['zone']);
-
-include("head.inc");
-?>
-<body>
-<?php include("fbegin.inc"); ?>
-
-<form action="status_captiveportal_expire.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tab pane">
- <tr><td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Expire Vouchers"), true, "status_captiveportal_expire.php?zone={$cpzone}");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td class="tabcont">
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="content pane">
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Voucher(s)"); ?></td>
- <td class="vtable">
- <textarea name="vouchers" cols="65" rows="3" id="vouchers" class="formpre"><?=htmlspecialchars($_POST['vouchers']);?></textarea>
- <br />
- <?=gettext("Enter multiple vouchers separated by space or newline. All valid vouchers will be marked as expired"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Submit"); ?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</form>
-<br/>
-<?php
-if ($_POST) {
- if ($_POST['vouchers']) {
- $result = voucher_expire($_POST['vouchers']);
- echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"4\" width=\"100%\" summary=\"results\">\n";
- if ($result) {
- echo "<tr><td bgcolor=\"#D9DEE8\"><img src=\"/themes/{$g['theme']}/images/icons/icon_pass.gif\" alt=\"pass\" /></td>";
- echo "<td bgcolor=\"#D9DEE8\">Success</td></tr>";
- } else {
- echo "<tr><td bgcolor=\"#FFD9D1\"><img src=\"/themes/{$g['theme']}/images/icons/icon_block.gif\" alt=\"block\" /></td>";
- echo "<td bgcolor=\"#FFD9D1\">Error</td></tr>";
- }
- echo "</table>";
- }
-}
-
-include("fend.inc");
-?>
-</body>
-</html>
diff --git a/usr/local/www/status_captiveportal_test.php b/usr/local/www/status_captiveportal_test.php
deleted file mode 100644
index 2a3dfc3..0000000
--- a/usr/local/www/status_captiveportal_test.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-/*
- status_captiveportal_test.php
- Copyright (C) 2007 Marcel Wiget <mwiget@mac.com>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-status-captiveportal-test
-##|*NAME=Status: Captive portal test Vouchers page
-##|*DESCR=Allow access to the 'Status: Captive portal Test Vouchers' page.
-##|*MATCH=status_captiveportal_test.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-require_once("voucher.inc");
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-if (empty($cpzone)) {
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Test Vouchers"), $a_cp[$cpzone]['zone']);
-$shortcut_section = "captiveportal-vouchers";
-
-include("head.inc");
-?>
-<body>
-<?php include("fbegin.inc"); ?>
-
-<form action="status_captiveportal_test.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tab pane">
- <tr><td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Test Vouchers"), true, "status_captiveportal_test.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone={$cpzone}");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="content pane">
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Voucher(s)"); ?></td>
- <td class="vtable">
- <textarea name="vouchers" cols="65" rows="3" id="vouchers" class="formpre"><?=htmlspecialchars($_POST['vouchers']);?></textarea>
- <br />
- <?=gettext("Enter multiple vouchers separated by space or newline. The remaining time, if valid, will be shown for each voucher"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Submit"); ?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</form>
-<br/>
-<?php
-if ($_POST) {
- if ($_POST['vouchers']) {
- $test_results = voucher_auth($_POST['vouchers'], 1);
- echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"4\" width=\"100%\" summary=\"results\">\n";
- foreach ($test_results as $result) {
- if (strpos($result, " good ") || strpos($result, " granted ")) {
- echo "<tr><td bgcolor=\"#D9DEE8\"><img src=\"/themes/{$g['theme']}/images/icons/icon_pass.gif\" alt=\"pass\" /></td>";
- echo "<td bgcolor=\"#D9DEE8\">$result</td></tr>";
- } else {
- echo "<tr><td bgcolor=\"#FFD9D1\"><img src=\"/themes/{$g['theme']}/images/icons/icon_block.gif\" alt=\"block\" /></td>";
- echo "<td bgcolor=\"#FFD9D1\">$result</td></tr>";
- }
- }
- echo "</table>";
- }
-}
-
-include("fend.inc");
-?>
-</body>
-</html>
diff --git a/usr/local/www/status_captiveportal_voucher_rolls.php b/usr/local/www/status_captiveportal_voucher_rolls.php
deleted file mode 100644
index 512356b..0000000
--- a/usr/local/www/status_captiveportal_voucher_rolls.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-/*
- status_captiveportal_voucher_rolls.php
-
- Copyright (C) 2007 Marcel Wiget <mwiget@mac.com>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-status-captiveportal-voucher-rolls
-##|*NAME=Status: Captive portal Voucher Rolls page
-##|*DESCR=Allow access to the 'Status: Captive portal Voucher Rolls' page.
-##|*MATCH=status_captiveportal_voucher_rolls.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-require_once("voucher.inc");
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-if (empty($cpzone)) {
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Voucher Rolls"), $a_cp[$cpzone]['zone']);
-$shortcut_section = "captiveportal-vouchers";
-
-if (!is_array($config['voucher'][$cpzone]['roll'])) {
- $config['voucher'][$cpzone]['roll'] = array();
-}
-$a_roll = &$config['voucher'][$cpzone]['roll'];
-
-include("head.inc");
-?>
-<body>
-<?php include("fbegin.inc"); ?>
-
-<form action="status_captiveportal_voucher_rolls.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tab pane">
- <tr>
- <td class="tabnavtbl">
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Voucher Rolls"), true, "status_captiveportal_voucher_rolls.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone={$cpzone}");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td class="tabcont">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="content pane">
- <tr>
- <td class="listhdrr"><?=gettext("Roll#"); ?></td>
- <td class="listhdrr"><?=gettext("Minutes/Ticket"); ?></td>
- <td class="listhdrr"><?=gettext("# of Tickets"); ?></td>
- <td class="listhdrr"><?=gettext("Comment"); ?></td>
- <td class="listhdrr"><?=gettext("used"); ?></td>
- <td class="listhdrr"><?=gettext("active"); ?></td>
- <td class="listhdr"><?=gettext("ready"); ?></td>
- </tr>
- <?php
- $voucherlck = lock("vouche{$cpzone}r");
- $i = 0;
- foreach ($a_roll as $rollent):
- $used = voucher_used_count($rollent['number']);
- $active = count(voucher_read_active_db($rollent['number']), $rollent['minutes']);
- $ready = $rollent['count'] - $used;
- /* used also count active vouchers, remove them */
- $used = $used - $active;
- ?>
- <tr>
- <td class="listlr">
- <?=htmlspecialchars($rollent['number']); ?>&nbsp;
- </td>
- <td class="listr">
- <?=htmlspecialchars($rollent['minutes']);?>&nbsp;
- </td>
- <td class="listr">
- <?=htmlspecialchars($rollent['count']);?>&nbsp;
- </td>
- <td class="listr">
- <?=htmlspecialchars($rollent['comment']); ?>&nbsp;
- </td>
- <td class="listr">
- <?=htmlspecialchars($used); ?>&nbsp;
- </td>
- <td class="listr">
- <?=htmlspecialchars($active); ?>&nbsp;
- </td>
- <td class="listr">
- <?=htmlspecialchars($ready); ?>&nbsp;
- </td>
- </tr>
- <?php
- $i++;
- endforeach;
- unlock($voucherlck);
- ?>
- </table>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_captiveportal_vouchers.php b/usr/local/www/status_captiveportal_vouchers.php
deleted file mode 100644
index a7ab959..0000000
--- a/usr/local/www/status_captiveportal_vouchers.php
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-/*
- status_captiveportal_vouchers.php
- Copyright (C) 2007 Marcel Wiget <mwiget@mac.com>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: captiveportal
-*/
-
-##|+PRIV
-##|*IDENT=page-status-captiveportal-vouchers
-##|*NAME=Status: Captive portal Vouchers page
-##|*DESCR=Allow access to the 'Status: Captive portal Vouchers' page.
-##|*MATCH=status_captiveportal_vouchers.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require("captiveportal.inc");
-require_once("voucher.inc");
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-if (empty($cpzone)) {
- header("Location: services_captiveportal_zones.php");
- exit;
-}
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Vouchers"), $a_cp[$cpzone]['zone']);
-$shortcut_section = "captiveportal-vouchers";
-
-function clientcmp($a, $b) {
- global $order;
- return strcmp($a[$order], $b[$order]);
-}
-
-if (!is_array($config['voucher'][$cpzone]['roll'])) {
- $config['voucher'][$cpzone]['roll'] = array();
-}
-$a_roll = $config['voucher'][$cpzone]['roll'];
-
-$db = array();
-
-foreach ($a_roll as $rollent) {
- $roll = $rollent['number'];
- $minutes = $rollent['minutes'];
-
- if (!file_exists("{$g['vardb_path']}/voucher_{$cpzone}_active_$roll.db")) {
- continue;
- }
-
- $active_vouchers = file("{$g['vardb_path']}/voucher_{$cpzone}_active_$roll.db", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
- foreach ($active_vouchers as $voucher => $line) {
- list($voucher, $timestamp, $minutes) = explode(",", $line);
- $remaining = (($timestamp + 60*$minutes) - time());
- if ($remaining > 0) {
- $dbent[0] = $voucher;
- $dbent[1] = $roll;
- $dbent[2] = $timestamp;
- $dbent[3] = intval($remaining/60);
- $dbent[4] = $timestamp + 60*$minutes; // expires at
- $db[] = $dbent;
- }
- }
-}
-
-if ($_GET['order']) {
- $order = $_GET['order'];
- usort($db, "clientcmp");
-}
-
-include("head.inc");
-?>
-<body>
-<?php include("fbegin.inc"); ?>
-
-<form action="status_captiveportal_vouchers.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tab pane">
- <tr><td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Active Vouchers"), true, "status_captiveportal_vouchers.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone={$cpzone}");
- $tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone={$cpzone}");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td class="tabcont">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="content pane">
- <tr>
- <td class="listhdrr"><a href="?order=0&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Voucher"); ?></a></td>
- <td class="listhdrr"><a href="?order=1&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Roll"); ?></a></td>
- <td class="listhdrr"><a href="?order=2&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Activated at"); ?></a></td>
- <td class="listhdrr"><a href="?order=3&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Expires in"); ?></a></td>
- <td class="listhdr"><a href="?order=4&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Expires at"); ?></a></td>
- <td class="list"></td>
- </tr>
-<?php foreach ($db as $dbent): ?>
- <tr>
- <td class="listlr"><?=$dbent[0];?></td>
- <td class="listr"><?=$dbent[1];?></td>
- <td class="listr"><?=htmlspecialchars(date("m/d/Y H:i:s", $dbent[2]));?></td>
- <td class="listr"><?=$dbent[3];?> <?=gettext("min"); ?></td>
- <td class="listr"><?=htmlspecialchars(date("m/d/Y H:i:s", $dbent[4]));?></td>
- <td class="list"></td>
- </tr>
-<?php endforeach; ?>
- </table>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_dhcp_leases.php b/usr/local/www/status_dhcp_leases.php
deleted file mode 100644
index 4c37f21..0000000
--- a/usr/local/www/status_dhcp_leases.php
+++ /dev/null
@@ -1,457 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_dhcp_leases.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004-2009 Scott Ullrich
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/awk /bin/cat /usr/sbin/arp /usr/bin/wc /usr/bin/grep
- pfSense_MODULE: dhcpserver
-*/
-
-##|+PRIV
-##|*IDENT=page-status-dhcpleases
-##|*NAME=Status: DHCP leases page
-##|*DESCR=Allow access to the 'Status: DHCP leases' page.
-##|*MATCH=status_dhcp_leases.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("config.inc");
-
-$pgtitle = array(gettext("Status"), gettext("DHCP leases"));
-$shortcut_section = "dhcp";
-
-$leasesfile = "{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases";
-
-if (($_GET['deleteip']) && (is_ipaddr($_GET['deleteip']))) {
- /* Stop DHCPD */
- killbyname("dhcpd");
-
- /* Read existing leases */
- /* $leases_contents has the lines of the file, including the newline char at the end of each line. */
- $leases_contents = file($leasesfile);
- $newleases_contents = array();
- $i = 0;
- while ($i < count($leases_contents)) {
- /* Find the lease(s) we want to delete */
- if ($leases_contents[$i] == "lease {$_GET['deleteip']} {\n") {
- /* Skip to the end of the lease declaration */
- do {
- $i++;
- } while ($leases_contents[$i] != "}\n");
- } else {
- /* It's a line we want to keep, copy it over. */
- $newleases_contents[] = $leases_contents[$i];
- }
- $i++;
- }
-
- /* Write out the new leases file */
- $fd = fopen($leasesfile, 'w');
- fwrite($fd, implode("\n", $newleases_contents));
- fclose($fd);
-
- /* Restart DHCP Service */
- services_dhcpd_configure();
- header("Location: status_dhcp_leases.php?all={$_GET['all']}");
-}
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php
-
-function leasecmp($a, $b) {
- return strcmp($a[$_GET['order']], $b[$_GET['order']]);
-}
-
-function adjust_gmt($dt) {
- global $config;
- $dhcpd = $config['dhcpd'];
- foreach ($dhcpd as $dhcpditem) {
- $dhcpleaseinlocaltime = $dhcpditem['dhcpleaseinlocaltime'];
- if ($dhcpleaseinlocaltime == "yes") {
- break;
- }
- }
- if ($dhcpleaseinlocaltime == "yes") {
- $ts = strtotime($dt . " GMT");
- if ($ts !== false) {
- return strftime("%Y/%m/%d %I:%M:%S%p", $ts);
- }
- }
- /* If we did not need to convert to local time or the conversion failed, just return the input. */
- return $dt;
-}
-
-function remove_duplicate($array, $field) {
- foreach ($array as $sub) {
- $cmp[] = $sub[$field];
- }
- $unique = array_unique(array_reverse($cmp, true));
- foreach ($unique as $k => $rien) {
- $new[] = $array[$k];
- }
- return $new;
-}
-
-$awk = "/usr/bin/awk";
-/* this pattern sticks comments into a single array item */
-$cleanpattern = "'{ gsub(\"#.*\", \"\");} { gsub(\";\", \"\"); print;}'";
-/* We then split the leases file by } */
-$splitpattern = "'BEGIN { RS=\"}\";} {for (i=1; i<=NF; i++) printf \"%s \", \$i; printf \"}\\n\";}'";
-
-/* stuff the leases file in a proper format into a array by line */
-exec("/bin/cat {$leasesfile} | {$awk} {$cleanpattern} | {$awk} {$splitpattern}", $leases_content);
-$leases_count = count($leases_content);
-exec("/usr/sbin/arp -an", $rawdata);
-$arpdata_ip = array();
-$arpdata_mac = array();
-foreach ($rawdata as $line) {
- $elements = explode(' ', $line);
- if ($elements[3] != "(incomplete)") {
- $arpent = array();
- $arpdata_ip[] = trim(str_replace(array('(', ')'), '', $elements[1]));
- $arpdata_mac[] = strtolower(trim($elements[3]));
- }
-}
-unset($rawdata);
-$pools = array();
-$leases = array();
-$i = 0;
-$l = 0;
-$p = 0;
-
-// Put everything together again
-foreach ($leases_content as $lease) {
- /* split the line by space */
- $data = explode(" ", $lease);
- /* walk the fields */
- $f = 0;
- $fcount = count($data);
- /* with less than 20 fields there is nothing useful */
- if ($fcount < 20) {
- $i++;
- continue;
- }
- while ($f < $fcount) {
- switch ($data[$f]) {
- case "failover":
- $pools[$p]['name'] = trim($data[$f+2], '"');
- $pools[$p]['name'] = "{$pools[$p]['name']} (" . convert_friendly_interface_to_friendly_descr(substr($pools[$p]['name'], 5)) . ")";
- $pools[$p]['mystate'] = $data[$f+7];
- $pools[$p]['peerstate'] = $data[$f+14];
- $pools[$p]['mydate'] = $data[$f+10];
- $pools[$p]['mydate'] .= " " . $data[$f+11];
- $pools[$p]['peerdate'] = $data[$f+17];
- $pools[$p]['peerdate'] .= " " . $data[$f+18];
- $p++;
- $i++;
- continue 3;
- case "lease":
- $leases[$l]['ip'] = $data[$f+1];
- $leases[$l]['type'] = "dynamic";
- $f = $f+2;
- break;
- case "starts":
- $leases[$l]['start'] = $data[$f+2];
- $leases[$l]['start'] .= " " . $data[$f+3];
- $f = $f+3;
- break;
- case "ends":
- if ($data[$f+1] == "never") {
- // Quote from dhcpd.leases(5) man page:
- // If a lease will never expire, date is never instead of an actual date.
- $leases[$l]['end'] = gettext("Never");
- $f = $f+1;
- } else {
- $leases[$l]['end'] = $data[$f+2];
- $leases[$l]['end'] .= " " . $data[$f+3];
- $f = $f+3;
- }
- break;
- case "tstp":
- $f = $f+3;
- break;
- case "tsfp":
- $f = $f+3;
- break;
- case "atsfp":
- $f = $f+3;
- break;
- case "cltt":
- $f = $f+3;
- break;
- case "binding":
- switch ($data[$f+2]) {
- case "active":
- $leases[$l]['act'] = "active";
- break;
- case "free":
- $leases[$l]['act'] = "expired";
- $leases[$l]['online'] = "offline";
- break;
- case "backup":
- $leases[$l]['act'] = "reserved";
- $leases[$l]['online'] = "offline";
- break;
- }
- $f = $f+1;
- break;
- case "next":
- /* skip the next binding statement */
- $f = $f+3;
- break;
- case "rewind":
- /* skip the rewind binding statement */
- $f = $f+3;
- break;
- case "hardware":
- $leases[$l]['mac'] = $data[$f+2];
- /* check if it's online and the lease is active */
- if (in_array($leases[$l]['ip'], $arpdata_ip)) {
- $leases[$l]['online'] = 'online';
- } else {
- $leases[$l]['online'] = 'offline';
- }
- $f = $f+2;
- break;
- case "client-hostname":
- if ($data[$f+1] <> "") {
- $leases[$l]['hostname'] = preg_replace('/"/', '', $data[$f+1]);
- } else {
- $hostname = gethostbyaddr($leases[$l]['ip']);
- if ($hostname <> "") {
- $leases[$l]['hostname'] = $hostname;
- }
- }
- $f = $f+1;
- break;
- case "uid":
- $f = $f+1;
- break;
- }
- $f++;
- }
- $l++;
- $i++;
- /* slowly chisel away at the source array */
- array_shift($leases_content);
-}
-/* remove the old array */
-unset($lease_content);
-
-/* remove duplicate items by mac address */
-if (count($leases) > 0) {
- $leases = remove_duplicate($leases, "ip");
-}
-
-if (count($pools) > 0) {
- $pools = remove_duplicate($pools, "name");
- asort($pools);
-}
-
-foreach ($config['interfaces'] as $ifname => $ifarr) {
- if (is_array($config['dhcpd'][$ifname]) &&
- is_array($config['dhcpd'][$ifname]['staticmap'])) {
- $staticmap_array_index = 0;
- foreach ($config['dhcpd'][$ifname]['staticmap'] as $static) {
- $slease = array();
- $slease['ip'] = $static['ipaddr'];
- $slease['type'] = "static";
- $slease['mac'] = $static['mac'];
- $slease['if'] = $ifname;
- $slease['start'] = "";
- $slease['end'] = "";
- $slease['hostname'] = htmlentities($static['hostname']);
- $slease['act'] = "static";
- $slease['online'] = in_array(strtolower($slease['mac']), $arpdata_mac) ? 'online' : 'offline';
- $slease['staticmap_array_index'] = $staticmap_array_index;
- $leases[] = $slease;
- $staticmap_array_index++;
- }
- }
-}
-
-if ($_GET['order']) {
- usort($leases, "leasecmp");
-}
-
-/* only print pool status when we have one */
-if (count($pools) > 0) {
-?>
-<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcp leases">
- <tr>
- <td class="listhdrr"><?=gettext("Failover Group"); ?></a></td>
- <td class="listhdrr"><?=gettext("My State"); ?></a></td>
- <td class="listhdrr"><?=gettext("Since"); ?></a></td>
- <td class="listhdrr"><?=gettext("Peer State"); ?></a></td>
- <td class="listhdrr"><?=gettext("Since"); ?></a></td>
- </tr>
-<?php
- foreach ($pools as $data) {
- echo "<tr>\n";
- echo "<td class=\"listlr\">{$fspans}{$data['name']}{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}{$data['mystate']}{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['mydate']) . "{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}{$data['peerstate']}{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['peerdate']) . "{$fspane}</td>\n";
- echo "<td class=\"list\" valign=\"middle\" width=\"17\">&nbsp;</td>\n";
- echo "<td class=\"list\" valign=\"middle\" width=\"17\">&nbsp;</td>\n";
- echo "</tr>\n";
- }
-?>
-</table>
-
-<?php
-/* only print pool status when we have one */
-}
-?>
-
-<br/>
-
-<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcp leases">
- <tr>
- <td class="listhdrr"><a href="#"><?=gettext("IP address"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("MAC address"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("Hostname"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("Start"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("End"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("Online"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("Lease Type"); ?></a></td>
- </tr>
-<?php
-// Load MAC-Manufacturer table
-$mac_man = load_mac_manufacturer_table();
-foreach ($leases as $data) {
- if (($data['act'] == "active") || ($data['act'] == "static" && !empty($data['ip'])) || ($_GET['all'] == 1)) {
- if ($data['act'] != "active" && $data['act'] != "static") {
- $fspans = "<span class=\"gray\">";
- $fspane = "&nbsp;</span>";
- } else {
- $fspans = "";
- $fspane = "&nbsp;";
- }
- $lip = ip2ulong($data['ip']);
- if ($data['act'] != "static") {
- foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) {
- if (!is_array($dhcpifconf['range'])) {
- continue;
- }
- if (($lip >= ip2ulong($dhcpifconf['range']['from'])) && ($lip <= ip2ulong($dhcpifconf['range']['to']))) {
- $data['if'] = $dhcpif;
- break;
- }
- // Check if the IP is in the range of any DHCP pools
- if (is_array($dhcpifconf['pool'])) {
- foreach ($dhcpifconf['pool'] as $dhcppool) {
- if (is_array($dhcppool['range'])) {
- if (($lip >= ip2ulong($dhcppool['range']['from'])) && ($lip <= ip2ulong($dhcppool['range']['to']))) {
- $data['if'] = $dhcpif;
- break 2;
- }
- }
- }
- }
- }
- }
- echo "<tr>\n";
- echo "<td class=\"listlr\">{$fspans}{$data['ip']}{$fspane}</td>\n";
- $mac=$data['mac'];
- $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
- if ($data['online'] != "online") {
- if (isset($mac_man[$mac_hi])) { // Manufacturer for this MAC is defined
- echo "<td class=\"listr\">{$fspans}<a href=\"services_wol.php?if={$data['if']}&amp;mac=$mac\" title=\"" . gettext("$mac - send Wake on LAN packet to this MAC address") ."\">{$mac}</a><br /><font size=\"-2\"><i>{$mac_man[$mac_hi]}</i></font>{$fspane}</td>\n";
- } else {
- echo "<td class=\"listr\">{$fspans}<a href=\"services_wol.php?if={$data['if']}&amp;mac={$data['mac']}\" title=\"" . gettext("send Wake on LAN packet to this MAC address") ."\">{$data['mac']}</a>{$fspane}</td>\n";
- }
- } else {
- if (isset($mac_man[$mac_hi])) { // Manufacturer for this MAC is defined
- echo "<td class=\"listr\">{$fspans}{$mac}<br /><font size=\"-2\"><i>{$mac_man[$mac_hi]}</i></font>{$fspane}</td>\n";
- } else {
- echo "<td class=\"listr\">{$fspans}{$data['mac']}{$fspane}</td>\n";
- }
- }
- echo "<td class=\"listr\">{$fspans}" . htmlentities($data['hostname']) . "{$fspane}</td>\n";
- if ($data['type'] != "static") {
- echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['start']) . "{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['end']) . "{$fspane}</td>\n";
- } else {
- echo "<td class=\"listr\">{$fspans} n/a {$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans} n/a {$fspane}</td>\n";
- }
- echo "<td class=\"listr\">{$fspans}{$data['online']}{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}{$data['act']}{$fspane}</td>\n";
- echo "<td valign=\"middle\">&nbsp;";
- if ($data['type'] == "dynamic") {
- echo "<a href=\"services_dhcp_edit.php?if={$data['if']}&amp;mac={$data['mac']}&amp;hostname={$data['hostname']}\">";
- echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("add a static mapping for this MAC address") ."\" alt=\"add\" /></a>&nbsp;\n";
- } else {
- echo "<a href=\"services_dhcp_edit.php?if={$data['if']}&amp;id={$data['staticmap_array_index']}\">";
- echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_e.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("edit the static mapping for this entry") ."\" alt=\"add\" />&nbsp;\n";
- }
-
- echo "<a href=\"services_wol_edit.php?if={$data['if']}&amp;mac={$data['mac']}&amp;descr={$data['hostname']}\">";
- echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_wol_all.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("add a Wake on LAN mapping for this MAC address") ."\" alt=\"add\" /></a>&nbsp;\n";
-
- /* Only show the button for offline dynamic leases */
- if (($data['type'] == "dynamic") && ($data['online'] != "online")) {
- echo "<a href=\"status_dhcp_leases.php?deleteip={$data['ip']}&amp;all=" . htmlspecialchars($_GET['all']) . "\">";
- echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_x.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("delete this DHCP lease") . "\" alt=\"delete\" /></a>&nbsp;\n";
- }
- echo "</td></tr>\n";
- }
-}
-
-?>
-</table>
-<br/>
-<form action="status_dhcp_leases.php" method="get">
- <input type="hidden" name="order" value="<?=htmlspecialchars($_GET['order']);?>" />
-<?php if ($_GET['all']): ?>
- <input type="hidden" name="all" value="0" />
- <input type="submit" class="formbtn" value="<?=gettext("Show active and static leases only"); ?>" />
-<?php else: ?>
- <input type="hidden" name="all" value="1" />
- <input type="submit" class="formbtn" value="<?=gettext("Show all configured leases"); ?>" />
-<?php endif; ?>
-</form>
-<?php if ($leases == 0): ?>
-<p><strong><?=gettext("No leases file found. Is the DHCP server active"); ?>?</strong></p>
-<?php endif; ?>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_dhcpv6_leases.php b/usr/local/www/status_dhcpv6_leases.php
deleted file mode 100644
index 63f1946..0000000
--- a/usr/local/www/status_dhcpv6_leases.php
+++ /dev/null
@@ -1,581 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_dhcpv6_leases.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2011 Seth Mos
- Copyright (C) 2004-2009 Scott Ullrich
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/awk /bin/cat /usr/sbin/ndp /usr/bin/wc /usr/bin/grep
- pfSense_MODULE: dhcpserver
-*/
-
-##|+PRIV
-##|*IDENT=page-status-dhcpv6leases
-##|*NAME=Status: DHCPv6 leases page
-##|*DESCR=Allow access to the 'Status: DHCPv6 leases' page.
-##|*MATCH=status_dhcpv6_leases.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("config.inc");
-
-$pgtitle = array(gettext("Status"), gettext("DHCPv6 leases"));
-$shortcut_section = "dhcp6";
-
-$leasesfile = "{$g['dhcpd_chroot_path']}/var/db/dhcpd6.leases";
-
-if (($_GET['deleteip']) && (is_ipaddr($_GET['deleteip']))) {
- /* Stop DHCPD */
- killbyname("dhcpd");
-
- /* Read existing leases */
- $leases_contents = explode("\n", file_get_contents($leasesfile));
- $newleases_contents = array();
- $i = 0;
- while ($i < count($leases_contents)) {
- /* Find the lease(s) we want to delete */
- if ($leases_contents[$i] == " iaaddr {$_GET['deleteip']} {") {
- /* The iaaddr line is two lines down from the start of the lease, so remove those two lines. */
- array_pop($newleases_contents);
- array_pop($newleases_contents);
- /* Skip to the end of the lease declaration */
- do {
- $i++;
- } while ($leases_contents[$i] != "}");
- } else {
- /* It's a line we want to keep, copy it over. */
- $newleases_contents[] = $leases_contents[$i];
- }
- $i++;
- }
-
- /* Write out the new leases file */
- $fd = fopen($leasesfile, 'w');
- fwrite($fd, implode("\n", $newleases_contents));
- fclose($fd);
-
- /* Restart DHCP Service */
- services_dhcpd_configure();
- header("Location: status_dhcpv6_leases.php?all={$_GET['all']}");
-}
-
-// Load MAC-Manufacturer table
-$mac_man = load_mac_manufacturer_table();
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php
-
-function leasecmp($a, $b) {
- return strcmp($a[$_GET['order']], $b[$_GET['order']]);
-}
-
-function adjust_gmt($dt) {
- global $config;
-
- $dhcpv6leaseinlocaltime == "no";
- if (is_array($config['dhcpdv6'])) {
- $dhcpdv6 = $config['dhcpdv6'];
- foreach ($dhcpdv6 as $dhcpv6leaseinlocaltime) {
- $dhcpv6leaseinlocaltime = $dhcpv6leaseinlocaltime['dhcpv6leaseinlocaltime'];
- if ($dhcpv6leaseinlocaltime == "yes") {
- break;
- }
- }
- }
-
- $timezone = $config['system']['timezone'];
- $ts = strtotime($dt . " GMT");
- if ($dhcpv6leaseinlocaltime == "yes") {
- $this_tz = new DateTimeZone($timezone);
- $dhcp_lt = new DateTime(strftime("%I:%M:%S%p", $ts), $this_tz);
- $offset = $this_tz->getOffset($dhcp_lt);
- $ts = $ts + $offset;
- return strftime("%Y/%m/%d %I:%M:%S%p", $ts);
- } else {
- return strftime("%Y/%m/%d %H:%M:%S", $ts);
- }
-}
-
-function remove_duplicate($array, $field) {
- foreach ($array as $sub) {
- $cmp[] = $sub[$field];
- }
- $unique = array_unique(array_reverse($cmp, true));
- foreach ($unique as $k => $rien) {
- $new[] = $array[$k];
- }
- return $new;
-}
-
-function parse_duid($duid_string) {
- $parsed_duid = array();
- for ($i = 0; $i < strlen($duid_string); $i++) {
- $s = substr($duid_string, $i, 1);
- if ($s == '\\') {
- $n = substr($duid_string, $i+1, 1);
- if (($n == '\\') || ($n == '"')) {
- $parsed_duid[] = sprintf("%02x", ord($n));
- } elseif (is_numeric($n)) {
- $parsed_duid[] = sprintf("%02x", octdec(substr($duid_string, $i+1, 3)));
- $i += 3;
- }
- } else {
- $parsed_duid[] = sprintf("%02x", ord($s));
- }
- }
- $iaid = array_slice($parsed_duid, 0, 4);
- $duid = array_slice($parsed_duid, 4);
- return array($iaid, $duid);
-}
-
-$awk = "/usr/bin/awk";
-
-/* this pattern sticks comments into a single array item */
-$cleanpattern = "'{ gsub(\"^#.*\", \"\");} { gsub(\"^server-duid.*\", \"\");} { gsub(\";$\", \"\"); print;}'";
-/* We then split the leases file by } */
-$splitpattern = "'BEGIN { RS=\"}\";} {for (i=1; i<=NF; i++) printf \"%s \", \$i; printf \"}\\n\";}'";
-
-/* stuff the leases file in a proper format into a array by line */
-exec("/bin/cat {$leasesfile} | {$awk} {$cleanpattern} | {$awk} {$splitpattern} | /usr/bin/grep '^ia-.. '", $leases_content);
-$leases_count = count($leases_content);
-exec("/usr/sbin/ndp -an", $rawdata);
-$ndpdata = array();
-foreach ($rawdata as $line) {
- $elements = preg_split('/\s+/ ', $line);
- if ($elements[1] != "(incomplete)") {
- $ndpent = array();
- $ip = trim(str_replace(array('(', ')'), '', $elements[0]));
- $ndpent['mac'] = trim($elements[1]);
- $ndpent['interface'] = trim($elements[2]);
- $ndpdata[$ip] = $ndpent;
- }
-}
-
-$pools = array();
-$leases = array();
-$prefixes = array();
-$mappings = array();
-$i = 0;
-$l = 0;
-$p = 0;
-
-// Put everything together again
-while ($i < $leases_count) {
- $entry = array();
- /* split the line by space */
- $duid_split = array();
- preg_match('/ia-.. "(.*)" { (.*)/ ', $leases_content[$i], $duid_split);
- if (!empty($duid_split[1])) {
- $iaid_duid = parse_duid($duid_split[1]);
- $entry['iaid'] = hexdec(implode("", array_reverse($iaid_duid[0])));
- $entry['duid'] = implode(":", $iaid_duid[1]);
- $data = explode(" ", $duid_split[2]);
- } else {
- $data = explode(" ", $leases_content[$i]);
- }
- /* walk the fields */
- $f = 0;
- $fcount = count($data);
- /* with less then 12 fields there is nothing useful */
- if ($fcount < 12) {
- $i++;
- continue;
- }
- while ($f < $fcount) {
- switch ($data[$f]) {
- case "failover":
- $pools[$p]['name'] = $data[$f+2];
- $pools[$p]['mystate'] = $data[$f+7];
- $pools[$p]['peerstate'] = $data[$f+14];
- $pools[$p]['mydate'] = $data[$f+10];
- $pools[$p]['mydate'] .= " " . $data[$f+11];
- $pools[$p]['peerdate'] = $data[$f+17];
- $pools[$p]['peerdate'] .= " " . $data[$f+18];
- $p++;
- $i++;
- continue 3;
- case "ia-pd":
- $is_prefix = true;
- case "ia-na":
- $entry['iaid'] = $tmp_iaid;
- $entry['duid'] = $tmp_duid;
- if ($data[$f+1][0] == '"') {
- $duid = "";
- /* FIXME: This needs a safety belt to prevent an infinite loop */
- while ($data[$f][strlen($data[$f])-1] != '"') {
- $duid .= " " . $data[$f+1];
- $f++;
- }
- $entry['duid'] = $duid;
- } else {
- $entry['duid'] = $data[$f+1];
- }
- $entry['type'] = "dynamic";
- $f = $f+2;
- break;
- case "iaaddr":
- $entry['ip'] = $data[$f+1];
- $entry['type'] = "dynamic";
- if (in_array($entry['ip'], array_keys($ndpdata))) {
- $entry['online'] = 'online';
- } else {
- $entry['online'] = 'offline';
- }
- $f = $f+2;
- break;
- case "iaprefix":
- $is_prefix = true;
- $entry['prefix'] = $data[$f+1];
- $entry['type'] = "dynamic";
- $f = $f+2;
- break;
- case "starts":
- $entry['start'] = $data[$f+2];
- $entry['start'] .= " " . $data[$f+3];
- $f = $f+3;
- break;
- case "ends":
- $entry['end'] = $data[$f+2];
- $entry['end'] .= " " . $data[$f+3];
- $f = $f+3;
- break;
- case "tstp":
- $f = $f+3;
- break;
- case "tsfp":
- $f = $f+3;
- break;
- case "atsfp":
- $f = $f+3;
- break;
- case "cltt":
- $entry['start'] = $data[$f+2];
- $entry['start'] .= " " . $data[$f+3];
- $f = $f+3;
- break;
- case "binding":
- switch ($data[$f+2]) {
- case "active":
- $entry['act'] = "active";
- break;
- case "free":
- $entry['act'] = "expired";
- $entry['online'] = "offline";
- break;
- case "backup":
- $entry['act'] = "reserved";
- $entry['online'] = "offline";
- break;
- case "released":
- $entry['act'] = "released";
- $entry['online'] = "offline";
- }
- $f = $f+1;
- break;
- case "next":
- /* skip the next binding statement */
- $f = $f+3;
- break;
- case "hardware":
- $f = $f+2;
- break;
- case "client-hostname":
- if ($data[$f+1] <> "") {
- $entry['hostname'] = preg_replace('/"/', '', $data[$f+1]);
- } else {
- $hostname = gethostbyaddr($entry['ip']);
- if ($hostname <> "") {
- $entry['hostname'] = $hostname;
- }
- }
- $f = $f+1;
- break;
- case "uid":
- $f = $f+1;
- break;
- }
- $f++;
- }
- if ($is_prefix) {
- $prefixes[] = $entry;
- } else {
- $leases[] = $entry;
- $mappings[$entry['iaid'] . $entry['duid']] = $entry['ip'];
- }
- $l++;
- $i++;
- $is_prefix = false;
-}
-
-if (count($leases) > 0) {
- $leases = remove_duplicate($leases, "ip");
-}
-
-if (count($prefixes) > 0) {
- $prefixes = remove_duplicate($prefixes, "prefix");
-}
-
-if (count($pools) > 0) {
- $pools = remove_duplicate($pools, "name");
- asort($pools);
-}
-
-foreach ($config['interfaces'] as $ifname => $ifarr) {
- if (is_array($config['dhcpdv6'][$ifname]) &&
- is_array($config['dhcpdv6'][$ifname]['staticmap'])) {
- foreach ($config['dhcpdv6'][$ifname]['staticmap'] as $static) {
- $slease = array();
- $slease['ip'] = $static['ipaddrv6'];
- $slease['type'] = "static";
- $slease['duid'] = $static['duid'];
- $slease['start'] = "";
- $slease['end'] = "";
- $slease['hostname'] = htmlentities($static['hostname']);
- $slease['act'] = "static";
- if (in_array($slease['ip'], array_keys($ndpdata))) {
- $slease['online'] = 'online';
- } else {
- $slease['online'] = 'offline';
- }
-
- $leases[] = $slease;
- }
- }
-}
-
-if ($_GET['order']) {
- usort($leases, "leasecmp");
-}
-
-/* only print pool status when we have one */
-if (count($pools) > 0) {
-?>
-<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcp leases">
- <tr>
- <td class="listhdrr"><?=gettext("Failover Group"); ?></a></td>
- <td class="listhdrr"><?=gettext("My State"); ?></a></td>
- <td class="listhdrr"><?=gettext("Since"); ?></a></td>
- <td class="listhdrr"><?=gettext("Peer State"); ?></a></td>
- <td class="listhdrr"><?=gettext("Since"); ?></a></td>
- </tr>
-<?php
- foreach ($pools as $data) {
- echo "<tr>\n";
- echo "<td class=\"listlr\">{$fspans}{$data['name']}{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}{$data['mystate']}{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['mydate']) . "{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}{$data['peerstate']}{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['peerdate']) . "{$fspane}</td>\n";
- echo "<td class=\"list\" valign=\"middle\" width=\"17\">&nbsp;</td>\n";
- echo "<td class=\"list\" valign=\"middle\" width=\"17\">&nbsp;</td>\n";
- echo "</tr>\n";
- }
-?>
-</table>
-
-<?php
-/* only print pool status when we have one */
-}
-?>
-
-<br/>
-
-<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcp leases">
- <tr>
- <td class="listhdrr"><a href="#"><?=gettext("IPv6 address"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("IAID"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("DUID"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("Hostname/MAC"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("Start"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("End"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("Online"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("Lease Type"); ?></a></td>
- </tr>
-<?php
-foreach ($leases as $data) {
- if (($data['act'] == "active") || ($data['act'] == "static") || ($_GET['all'] == 1)) {
- if ($data['act'] != "active" && $data['act'] != "static") {
- $fspans = "<span class=\"gray\">";
- $fspane = "&nbsp;</span>";
- } else {
- $fspans = "";
- $fspane = "&nbsp;";
- }
-
- if ($data['act'] == "static") {
- foreach ($config['dhcpdv6'] as $dhcpif => $dhcpifconf) {
- if (is_array($dhcpifconf['staticmap'])) {
- foreach ($dhcpifconf['staticmap'] as $staticent) {
- if ($data['ip'] == $staticent['ipaddr']) {
- $data['if'] = $dhcpif;
- break;
- }
- }
- }
- /* exit as soon as we have an interface */
- if ($data['if'] != "") {
- break;
- }
- }
- } else {
- $data['if'] = convert_real_interface_to_friendly_interface_name(guess_interface_from_ip($data['ip']));
- }
- echo "<tr>\n";
- echo "<td class=\"listlr\">{$fspans}{$data['ip']}{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}{$data['iaid']}{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}{$data['duid']}{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}";
- if (!empty($data['hostname'])) {
- echo htmlentities($data['hostname']) . "<br />";
- }
-
- $mac=trim($ndpdata[$data['ip']]['mac']);
- if (!empty($mac)) {
- $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
- print htmlentities($mac);
- if (isset($mac_man[$mac_hi])) {
- print "<br /><font size=\"-2\"><i>{$mac_man[$mac_hi]}</i></font>";
- }
- }
-
- echo "{$fspane}&nbsp;</td>\n";
- if ($data['type'] != "static") {
- echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['start']) . "{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['end']) . "{$fspane}</td>\n";
- } else {
- echo "<td class=\"listr\">{$fspans} n/a {$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans} n/a {$fspane}</td>\n";
- }
- echo "<td class=\"listr\">{$fspans}{$data['online']}{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}{$data['act']}{$fspane}</td>\n";
-
- if ($data['type'] == "dynamic") {
- echo "<td valign=\"middle\"><a href=\"services_dhcpv6_edit.php?if={$data['if']}&amp;duid={$data['duid']}&amp;hostname={$data['hostname']}\">";
- echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("add a static mapping for this MAC address") ."\" alt=\"add\" /></a></td>\n";
- } else {
- echo "<td class=\"list\" valign=\"middle\">";
- echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_plus_mo.gif\" width=\"17\" height=\"17\" border=\"0\" alt=\"add\" /></td>\n";
- }
-
- /* Only show the button for offline dynamic leases */
- if (($data['type'] == "dynamic") && ($data['online'] != "online")) {
- echo "<td class=\"list\" valign=\"middle\"><a href=\"status_dhcpv6_leases.php?deleteip={$data['ip']}&amp;all=" . htmlspecialchars($_GET['all']) . "\">";
- echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_x.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("delete this DHCP lease") . "\" alt=\"delete\" /></a></td>\n";
- }
- echo "</tr>\n";
- }
-}
-?>
-</table>
-<br/>
-<h3>Delegated Prefixes</h3>
-<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="prefixes">
- <tr>
- <td class="listhdrr"><a href="#"><?=gettext("IPv6 Prefix"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("IAID"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("DUID"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("Start"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("End"); ?></a></td>
- <td class="listhdrr"><a href="#"><?=gettext("State"); ?></a></td>
- </tr>
-<?php
-foreach ($prefixes as $data) {
- if (($data['act'] == "active") || ($data['act'] == "static") || ($_GET['all'] == 1)) {
- if ($data['act'] != "active" && $data['act'] != "static") {
- $fspans = "<span class=\"gray\">";
- $fspane = "&nbsp;</span>";
- } else {
- $fspans = "";
- $fspane = "&nbsp;";
- }
-
- if ($data['act'] == "static") {
- foreach ($config['dhcpdv6'] as $dhcpif => $dhcpifconf) {
- if (is_array($dhcpifconf['staticmap'])) {
- foreach ($dhcpifconf['staticmap'] as $staticent) {
- if ($data['ip'] == $staticent['ipaddr']) {
- $data['if'] = $dhcpif;
- break;
- }
- }
- }
- /* exit as soon as we have an interface */
- if ($data['if'] != "") {
- break;
- }
- }
- } else {
- $data['if'] = convert_real_interface_to_friendly_interface_name(guess_interface_from_ip($data['ip']));
- }
- echo "<tr>\n";
- if ($mappings[$data['iaid'] . $data['duid']]) {
- $dip = "<br />Routed To: {$mappings[$data['iaid'] . $data['duid']]}";
- }
- echo "<td class=\"listlr\">{$fspans}{$data['prefix']}{$dip}{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}{$data['iaid']}{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}{$data['duid']}{$fspane}</td>\n";
- if ($data['type'] != "static") {
- echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['start']) . "{$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['end']) . "{$fspane}</td>\n";
- } else {
- echo "<td class=\"listr\">{$fspans} n/a {$fspane}</td>\n";
- echo "<td class=\"listr\">{$fspans} n/a {$fspane}</td>\n";
- }
- echo "<td class=\"listr\">{$fspans}{$data['act']}{$fspane}</td>\n";
- echo "</tr>\n";
- }
-}
-?>
-</table>
-<br/>
-<form action="status_dhcpv6_leases.php" method="get">
- <input type="hidden" name="order" value="<?=htmlspecialchars($_GET['order']);?>" />
-<?php if ($_GET['all']): ?>
- <input type="hidden" name="all" value="0" />
- <input type="submit" class="formbtn" value="<?=gettext("Show active and static leases only"); ?>" />
-<?php else: ?>
- <input type="hidden" name="all" value="1" />
- <input type="submit" class="formbtn" value="<?=gettext("Show all configured leases"); ?>" />
-<?php endif; ?>
-</form>
-<?php if ($leases == 0): ?>
-<p><strong><?=gettext("No leases file found. Is the DHCP server active"); ?>?</strong></p>
-<?php endif; ?>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_filter_reload.php b/usr/local/www/status_filter_reload.php
deleted file mode 100644
index 8844a48..0000000
--- a/usr/local/www/status_filter_reload.php
+++ /dev/null
@@ -1,179 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_filter_reload.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2006 Scott Ullrich
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: filter
-*/
-
-##|+PRIV
-##|*IDENT=page-status-filterreloadstatus
-##|*NAME=Status: Filter Reload Status page
-##|*DESCR=Allow access to the 'Status: Filter Reload Status' page.
-##|*MATCH=status_filter_reload.php*
-##|-PRIV
-
-require_once("globals.inc");
-require_once("guiconfig.inc");
-require_once("functions.inc");
-
-$pgtitle = array(gettext("Status"), gettext("Filter Reload Status"));
-$shortcut_section = "firewall";
-
-if (file_exists("{$g['varrun_path']}/filter_reload_status")) {
- $status = file_get_contents("{$g['varrun_path']}/filter_reload_status");
-}
-
-if ($_GET['getstatus']) {
- echo "|{$status}|";
- exit;
-}
-if ($_POST['reloadfilter']) {
- send_event("filter reload");
- header("Location: status_filter_reload.php");
- exit;
-}
-if ($_POST['syncfilter']) {
- send_event("filter sync");
- header("Location: status_filter_reload.php");
- exit;
-}
-
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-
-<?php include("fbegin.inc"); ?>
-<br />
-<form action="status_filter_reload.php" method="post" name="filter">
- <input type="submit" value="Reload Filter" name="reloadfilter" id="reloadfilter" />
-<?php if ($config['hasync'] && $config['hasync']["synchronizetoip"] != ""): ?>
- &nbsp;&nbsp;&nbsp;&nbsp;
- <input type="submit" value="Force Config Sync" name="syncfilter" id="syncfilter" />
-<?php endif; ?>
-</form>
-<br /><br /><br />
-<div id="status" style="padding:5px; border:1px dashed #990000; background-color: #ffffff; color: #000000;">
- <?php echo $status; ?>
-</div>
-
-<div id="doneurl">
-</div>
-
-<br/>
-
-<div id="reloadinfo"><?=gettext("This page will automatically refresh every 3 seconds until the filter is done reloading"); ?>.</div>
-
-<script type="text/javascript">
-//<![CDATA[
-/* init update "thread */
-function update_status_thread() {
- getURL('status_filter_reload.php?getstatus=true', update_data);
-}
-function update_data(obj) {
- var result_text = obj.content;
- var result_text_split = result_text.split("|");
- result_text = result_text_split[1];
- result_text = result_text.replace("\n", "");
- result_text = result_text.replace("\r", "");
- if (result_text) {
- jQuery('#status').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" /> ' + result_text + '...');
- } else {
- jQuery('#status').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" /> Obtaining filter status...');
- }
- if (result_text == "Initializing") {
- jQuery('#status').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" /> Initializing...');
- } else if (result_text == "Done") {
- jQuery('#status').effect('highlight');
- jQuery('#status').html('Done. The filter rules have been reloaded.');
- jQuery('#reloadinfo').css("visibility", "hidden");
- jQuery('#doneurl').css("visibility", "visible");
- jQuery('#doneurl').html("<p><a href='status_queues.php'>Queue Status<\/a><\/p>");
- }
- window.setTimeout('update_status_thread()', 2500);
-}
-//]]>
-</script>
-
-<script type="text/javascript">
-//<![CDATA[
-/*
- * getURL is a proprietary Adobe function, but it's simplicity has made it very
- * popular. If getURL is undefined we spin our own by wrapping XMLHttpRequest.
- */
-if (typeof getURL == 'undefined') {
- getURL = function(url, callback) {
- if (!url) {
- throw 'No URL for getURL';
- }
-
- try {
- if (typeof callback.operationComplete == 'function') {
- callback = callback.operationComplete;
- }
- } catch (e) {}
- if (typeof callback != 'function') {
- throw 'No callback function for getURL';
- }
-
- var http_request = null;
- if (typeof XMLHttpRequest != 'undefined') {
- http_request = new XMLHttpRequest();
- } else if (typeof ActiveXObject != 'undefined') {
- try {
- http_request = new ActiveXObject('Msxml2.XMLHTTP');
- } catch (e) {
- try {
- http_request = new ActiveXObject('Microsoft.XMLHTTP');
- } catch (e) {}
- }
- }
- if (!http_request) {
- throw 'Both getURL and XMLHttpRequest are undefined';
- }
-
- http_request.onreadystatechange = function() {
- if (http_request.readyState == 4) {
- callback( { success : true,
- content : http_request.responseText,
- contentType : http_request.getResponseHeader("Content-Type") } );
- }
- }
- http_request.open('GET', url, true);
- http_request.send(null);
- }
-}
-window.setTimeout('update_status_thread()', 2500);
-//]]>
-</script>
-
-<?php include("fend.inc"); ?>
-
-</body>
-</html>
diff --git a/usr/local/www/status_gateway_groups.php b/usr/local/www/status_gateway_groups.php
deleted file mode 100755
index e9011c8..0000000
--- a/usr/local/www/status_gateway_groups.php
+++ /dev/null
@@ -1,173 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_gateway_groups.php
- part of pfSense (https://www.pfsense.org)
-
- Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-status-gatewaygroups
-##|*NAME=Status: Gateway Groups page
-##|*DESCR=Allow access to the 'Status: Gateway Groups' page.
-##|*MATCH=status_gateway_groups.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (!is_array($config['gateways']['gateway_group'])) {
- $config['gateways']['gateway_group'] = array();
-}
-
-$a_gateway_groups = &$config['gateways']['gateway_group'];
-$changedesc = gettext("Gateway Groups") . ": ";
-
-$gateways_status = return_gateways_status();
-
-$pgtitle = array(gettext("Status"), gettext("Gateway Groups"));
-$shortcut_section = "gateway-groups";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Gateways"), false, "status_gateways.php");
- $tab_array[1] = array(gettext("Gateway Groups"), true, "status_gateway_groups.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td width="20%" class="listhdrr"><?=gettext("Group Name"); ?></td>
- <td width="50%" class="listhdrr"><?=gettext("Gateways"); ?></td>
- <td width="30%" class="listhdr"><?=gettext("Description"); ?></td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_gateway_groups as $gateway_group):
-?>
- <tr>
- <td class="listlr">
-<?php
- echo $gateway_group['name'];
-?>
- </td>
- <td class="listr">
- <table border='0'>
-<?php
- /* process which priorities we have */
- $priorities = array();
- foreach ($gateway_group['item'] as $item) {
- $itemsplit = explode("|", $item);
- $priorities[$itemsplit[1]] = true;
- }
- $priority_count = count($priorities);
- ksort($priorities);
-
- echo "<tr>";
- foreach ($priorities as $number => $tier) {
- echo "<td width='120'>" . sprintf(gettext("Tier %s"), $number) . "</td>";
- }
- echo "</tr>\n";
-
- /* inverse gateway group to gateway priority */
- $priority_arr = array();
- foreach ($gateway_group['item'] as $item) {
- $itemsplit = explode("|", $item);
- $priority_arr[$itemsplit[1]][] = $itemsplit[0];
- }
- ksort($priority_arr);
- $p = 1;
- foreach ($priority_arr as $number => $tier) {
- /* for each priority process the gateways */
- foreach ($tier as $member) {
- /* we always have $priority_count fields */
- echo "<tr>";
- $c = 1;
- while ($c <= $priority_count) {
- $monitor = lookup_gateway_monitor_ip_by_name($member);
- if ($p == $c) {
- $status = $gateways_status[$monitor]['status'];
- if (stristr($status, "down")) {
- $online = gettext("Offline");
- $bgcolor = "#F08080"; // lightcoral
- } elseif (stristr($status, "loss")) {
- $online = gettext("Warning, Packetloss");
- $bgcolor = "#F0E68C"; // khaki
- } elseif (stristr($status, "delay")) {
- $online = gettext("Warning, Latency");
- $bgcolor = "#F0E68C"; // khaki
- } elseif ($status == "none") {
- $online = gettext("Online");
- $bgcolor = "#90EE90"; // lightgreen
- } else {
- $online = gettext("Gathering data");
- $bgcolor = "#ADD8E6"; // lightblue
- }
- echo "<td bgcolor='$bgcolor'>&nbsp;". htmlspecialchars($member) .", $online&nbsp;</td>";
- } else {
- echo "<td>&nbsp;</td>";
- }
- $c++;
- }
- echo "</tr>\n";
- }
- $p++;
- }
-?>
- </table>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($gateway_group['descr']);?>&nbsp;
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
-
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_gateways.php b/usr/local/www/status_gateways.php
deleted file mode 100644
index e6fcf9d..0000000
--- a/usr/local/www/status_gateways.php
+++ /dev/null
@@ -1,169 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_gateways.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-status-gateways
-##|*NAME=Status: Gateways page
-##|*DESCR=Allow access to the 'Status: Gateways' page.
-##|*MATCH=status_gateways.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$a_gateways = return_gateways_array();
-$gateways_status = array();
-$gateways_status = return_gateways_status(true);
-
-$now = time();
-$year = date("Y");
-
-$pgtitle = array(gettext("Status"), gettext("Gateways"));
-$shortcut_section = "gateways";
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr><td class="tabnavtbl">
- <?php
- /* active tabs */
- $tab_array = array();
- $tab_array[] = array(gettext("Gateways"), true, "status_gateways.php");
- $tab_array[] = array(gettext("Gateway Groups"), false, "status_gateway_groups.php");
- display_top_tabs($tab_array);
- ?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td width="10%" class="listhdrr"><?=gettext("Name"); ?></td>
- <td width="10%" class="listhdrr"><?=gettext("Gateway"); ?></td>
- <td width="10%" class="listhdrr"><?=gettext("Monitor"); ?></td>
- <td width="8%" class="listhdrr"><?=gettext("RTT"); ?></td>
- <td width="7%" class="listhdrr"><?=gettext("Loss"); ?></td>
- <td width="35%" class="listhdrr"><?=gettext("Status"); ?></td>
- <td width="20%" class="listhdr"><?=gettext("Description"); ?></td>
- </tr>
-<?php
- foreach ($a_gateways as $gname => $gateway) {
-?>
- <tr>
- <td class="listlr">
- <?=$gateway['name'];?>
- </td>
- <td class="listr" align="center" >
- <?php echo lookup_gateway_ip_by_name($gname);?>
- </td>
- <td class="listr" align="center" >
- <?php
- if ($gateways_status[$gname]) {
- echo $gateways_status[$gname]['monitorip'];
- } else {
- echo $gateway['monitorip'];
- }
- ?>
- </td>
- <td class="listr" align="center">
- <?php
- if ($gateways_status[$gname]) {
- echo $gateways_status[$gname]['delay'];
- } else {
- echo gettext("Pending");
- }
- ?>
- </td>
- <td class="listr" align="center">
- <?php
- if ($gateways_status[$gname]) {
- echo $gateways_status[$gname]['loss'];
- } else {
- echo gettext("Pending");
- }
- ?>
- </td>
- <td class="listr" >
- <table border="0" cellpadding="0" cellspacing="2">
- <?php
- if ($gateways_status[$gname]) {
- $status = $gateways_status[$gname];
- if (stristr($status['status'], "force_down")) {
- $online = gettext("Offline (forced)");
- $bgcolor = "#F08080"; // lightcoral
- } elseif (stristr($status['status'], "down")) {
- $online = gettext("Offline");
- $bgcolor = "#F08080"; // lightcoral
- } elseif (stristr($status['status'], "loss")) {
- $online = gettext("Warning, Packetloss").': '.$status['loss'];
- $bgcolor = "#F0E68C"; // khaki
- } elseif (stristr($status['status'], "delay")) {
- $online = gettext("Warning, Latency").': '.$status['delay'];
- $bgcolor = "#F0E68C"; // khaki
- } elseif ($status['status'] == "none") {
- $online = gettext("Online");
- $bgcolor = "#90EE90"; // lightgreen
- }
- } else if (isset($gateway['monitor_disable'])) {
- $online = gettext("Online");
- $bgcolor = "#90EE90"; // lightgreen
- } else {
- $online = gettext("Pending");
- $bgcolor = "#D3D3D3"; // lightgray
- }
- echo "<tr><td><table width='100%'><tr><td bgcolor=\"$bgcolor\">&nbsp;$online&nbsp;</td></tr><tr><td>";
- $lastchange = $gateways_status[$gname]['lastcheck'];
- if (!empty($lastchange)) {
- echo gettext("Last check:") . '<br />' . $lastchange;
- }
- echo "</td></tr></table></td></tr>";
- ?>
- </table>
- </td>
- <td class="listbg"> <?=$gateway['descr']; ?></td>
- </tr>
-<?php
- } // foreach gateway
-?>
- </table>
- </div>
- </td>
- </tr>
-</table>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_graph.php b/usr/local/www/status_graph.php
deleted file mode 100644
index 056c297..0000000
--- a/usr/local/www/status_graph.php
+++ /dev/null
@@ -1,352 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_graph.php
- Part of pfSense
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2004 Scott Ullrich
- All rights reserved.
-
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-status-trafficgraph
-##|*NAME=Status: Traffic Graph page
-##|*DESCR=Allow access to the 'Status: Traffic Graph' page.
-##|*MATCH=status_graph.php*
-##|*MATCH=bandwidth_by_ip.php*
-##|*MATCH=graph.php*
-##|*MATCH=ifstats.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if ($_POST['width']) {
- $width = $_POST['width'];
-} else {
- $width = "100%";
-}
-
-if ($_POST['height']) {
- $height = $_POST['height'];
-} else {
- $height = "200";
-}
-
-// Get configured interface list
-$ifdescrs = get_configured_interface_with_descr();
-if (isset($config['ipsec']['enable'])) {
- $ifdescrs['enc0'] = "IPsec";
-}
-foreach (array('server', 'client') as $mode) {
- if (is_array($config['openvpn']["openvpn-{$mode}"])) {
- foreach ($config['openvpn']["openvpn-{$mode}"] as $id => $setting) {
- if (!isset($setting['disable'])) {
- $ifdescrs['ovpn' . substr($mode, 0, 1) . $setting['vpnid']] = gettext("OpenVPN") . " ".$mode.": ".htmlspecialchars($setting['description']);
- }
- }
- }
-}
-
-if ($_GET['if']) {
- $curif = $_GET['if'];
- $found = false;
- foreach ($ifdescrs as $descr => $ifdescr) {
- if ($descr == $curif) {
- $found = true;
- break;
- }
- }
- if ($found === false) {
- header("Location: status_graph.php");
- exit;
- }
-} else {
- if (empty($ifdescrs["wan"])) {
- /* Handle the case when WAN has been disabled. Use the first key in ifdescrs. */
- reset($ifdescrs);
- $curif = key($ifdescrs);
- } else {
- $curif = "wan";
- }
-}
-if ($_GET['sort']) {
- $cursort = $_GET['sort'];
-} else {
- $cursort = "";
-}
-if ($_GET['filter']) {
- $curfilter = $_GET['filter'];
-} else {
- $curfilter = "";
-}
-if ($_GET['hostipformat']) {
- $curhostipformat = $_GET['hostipformat'];
-} else {
- $curhostipformat = "";
-}
-
-$pgtitle = array(gettext("Status"), gettext("Traffic Graph"));
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
-function updateBandwidth() {
- var hostinterface = jQuery("#if").val();
- var sorting = jQuery("#sort").val();
- var filter = jQuery("#filter").val();
- var hostipformat = jQuery("#hostipformat").val();
- bandwidthAjax(hostinterface, sorting, filter, hostipformat);
-}
-
-function bandwidthAjax(hostinterface, sorting, filter, hostipformat) {
- uri = "bandwidth_by_ip.php?if=" + hostinterface + "&sort=" + sorting + "&filter=" + filter + "&hostipformat=" + hostipformat;
- var opt = {
- // Use GET
- type: 'get',
- error: function(req) {
- /* XXX: Leave this for debugging purposes: Handle 404
- if (req.status == 404)
- alert('Error 404: location "' + uri + '" was not found.');
- */
- /* Handle other errors
- else
- alert('Error ' + req.status + ' -- ' + req.statusText + ' -- ' + uri);
- */
- },
- success: function(data) {
- updateBandwidthHosts(data);
- }
- }
- jQuery.ajax(uri, opt);
-}
-
-function updateBandwidthHosts(data) {
- var hosts_split = data.split("|");
- d = document;
- //parse top ten bandwidth abuser hosts
- for (var y = 0; y < 10; y++) {
- if ((y < hosts_split.length) && (hosts_split[y] != "") && (hosts_split[y] != "no info")) {
- hostinfo = hosts_split[y].split(";");
-
- //update host ip info
- var HostIpID = "hostip" + y;
- var hostip = d.getElementById(HostIpID);
- hostip.innerHTML = hostinfo[0];
-
- //update bandwidth inbound to host
- var hostbandwidthInID = "bandwidthin" + y;
- var hostbandwidthin = d.getElementById(hostbandwidthInID);
- hostbandwidthin.innerHTML = hostinfo[1] + " Bits/sec";
-
- //update bandwidth outbound from host
- var hostbandwidthOutID = "bandwidthout" + y;
- var hostbandwidthOut = d.getElementById(hostbandwidthOutID);
- hostbandwidthOut.innerHTML = hostinfo[2] + " Bits/sec";
-
- //make the row appear if hidden
- var rowid = "#host" + y;
- if (jQuery(rowid).css('display') == "none") {
- //hide rows that contain no data
- jQuery(rowid).show(1000);
- }
- } else {
- var rowid = "#host" + y;
- if (jQuery(rowid).css('display') != "none") {
- //hide rows that contain no data
- jQuery(rowid).fadeOut(2000);
- }
- }
- }
-
- setTimeout('updateBandwidth()', 1000);
-}
-//]]>
-</script>
-
-<?php
-
-/* link the ipsec interface magically */
-if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
- $ifdescrs['enc0'] = "IPsec";
-}
-
-?>
-<form name="form1" action="status_graph.php" method="get" style="padding-bottom: 10px; margin-bottom: 14px; border-bottom: 1px solid #999999">
-<?=gettext("Interface"); ?>:
- <select id="if" name="if" class="formselect" style="z-index: -10;" onchange="document.form1.submit()">
-<?php
- foreach ($ifdescrs as $ifn => $ifd) {
- echo "<option value=\"$ifn\"";
- if ($ifn == $curif) {
- echo " selected=\"selected\"";
- }
- echo ">" . htmlspecialchars($ifd) . "</option>\n";
- }
-?>
- </select>
-, Sort by:
- <select id="sort" name="sort" class="formselect" style="z-index: -10;" onchange="document.form1.submit()">
- <option value="">Bw In</option>
- <option value="out"<?php if ($cursort == "out") echo " selected=\"selected\"";?>>Bw Out</option>
- </select>
-, Filter:
- <select id="filter" name="filter" class="formselect" style="z-index: -10;" onchange="document.form1.submit()">
- <option value="local"<?php if ($curfilter == "local") echo " selected=\"selected\"";?>>Local</option>
- <option value="remote"<?php if ($curfilter == "remote") echo " selected=\"selected\"";?>>Remote</option>
- <option value="all"<?php if ($curfilter == "all") echo " selected=\"selected\"";?>>All</option>
- </select>
-, Display:
- <select id="hostipformat" name="hostipformat" class="formselect" style="z-index: -10;" onchange="document.form1.submit()">
- <option value="">IP Address</option>
- <option value="hostname"<?php if ($curhostipformat == "hostname") echo " selected";?>>Host Name</option>
- <option value="descr"<?php if ($curhostipformat == "descr") echo " selected=\"selected\"";?>>Description</option>
- <option value="fqdn"<?php if ($curhostipformat == "fqdn") echo " selected=\"selected\"";?>>FQDN</option>
- </select>
-</form>
-<p>&nbsp;</p>
-<div id="niftyOutter">
- <div id="col1" style="float: left; width: 46%; padding: 5px; position: relative;">
- <object data="graph.php?ifnum=<?=htmlspecialchars($curif);?>&amp;ifname=<?=rawurlencode($ifdescrs[htmlspecialchars($curif)]);?>">
- <param name="id" value="graph" />
- <param name="type" value="image/svg+xml" />
- <param name="width" value="<? echo $width; ?>" />
- <param name="height" value="<? echo $height; ?>" />
- <param name="pluginspage" value="http://www.adobe.com/svg/viewer/install/auto" />
- </object>
- </div>
- <div id="col2" style="float: right; width: 48%; padding: 5px; position: relative;">
- <table width="100%" border="0" cellspacing="0" cellpadding="0" summary="status">
- <tr>
- <td class="listtopic" valign="top"><?=(($curhostipformat == "") ? gettext("Host IP") : gettext("Host Name or IP")); ?></td>
- <td class="listtopic" valign="top"><?=gettext("Bandwidth In"); ?></td>
- <td class="listtopic" valign="top"><?=gettext("Bandwidth Out"); ?></td>
- </tr>
- <tr id="host0" style="display:none">
- <td id="hostip0" class="vncell">
- </td>
- <td id="bandwidthin0" class="listr">
- </td>
- <td id="bandwidthout0" class="listr">
- </td>
- </tr>
- <tr id="host1" style="display:none">
- <td id="hostip1" class="vncell">
- </td>
- <td id="bandwidthin1" class="listr">
- </td>
- <td id="bandwidthout1" class="listr">
- </td>
- </tr>
- <tr id="host2" style="display:none">
- <td id="hostip2" class="vncell">
- </td>
- <td id="bandwidthin2" class="listr">
- </td>
- <td id="bandwidthout2" class="listr">
- </td>
- </tr>
- <tr id="host3" style="display:none">
- <td id="hostip3" class="vncell">
- </td>
- <td id="bandwidthin3" class="listr">
- </td>
- <td id="bandwidthout3" class="listr">
- </td>
- </tr>
- <tr id="host4" style="display:none">
- <td id="hostip4" class="vncell">
- </td>
- <td id="bandwidthin4" class="listr">
- </td>
- <td id="bandwidthout4" class="listr">
- </td>
- </tr>
- <tr id="host5" style="display:none">
- <td id="hostip5" class="vncell">
- </td>
- <td id="bandwidthin5" class="listr">
- </td>
- <td id="bandwidthout5" class="listr">
- </td>
- </tr>
- <tr id="host6" style="display:none">
- <td id="hostip6" class="vncell">
- </td>
- <td id="bandwidthin6" class="listr">
- </td>
- <td id="bandwidthout6" class="listr">
- </td>
- </tr>
- <tr id="host7" style="display:none">
- <td id="hostip7" class="vncell">
- </td>
- <td id="bandwidthin7" class="listr">
- </td>
- <td id="bandwidthout7" class="listr">
- </td>
- </tr>
- <tr id="host8" style="display:none">
- <td id="hostip8" class="vncell">
- </td>
- <td id="bandwidthin8" class="listr">
- </td>
- <td id="bandwidthout8" class="listr">
- </td>
- </tr>
- <tr id="host9" style="display:none">
- <td id="hostip9" class="vncell">
- </td>
- <td id="bandwidthin9" class="listr">
- </td>
- <td id="bandwidthout9" class="listr">
- </td>
- </tr>
- </table>
- </div>
- <div style="clear: both;"></div>
-</div>
-<p><span class="red"><strong><?=gettext("Note"); ?>:</strong></span> <?=gettext("the"); ?> <a href="http://www.adobe.com/svg/viewer/install/" target="_blank"><?=gettext("Adobe SVG Viewer"); ?></a>, <?=gettext("Firefox 1.5 or later or other browser supporting SVG is required to view the graph"); ?>.</p>
-
-<?php include("fend.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
-jQuery(document).ready(updateBandwidth);
-//]]>
-</script>
-</body>
-</html>
diff --git a/usr/local/www/status_graph_cpu.php b/usr/local/www/status_graph_cpu.php
deleted file mode 100644
index 6712508..0000000
--- a/usr/local/www/status_graph_cpu.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/*
- $Id$
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-status-cpuload
-##|*NAME=Status: CPU load page
-##|*DESCR=Allow access to the 'Status: CPU load' page.
-##|*MATCH=status_graph_cpu.php*
-##|-PRIV
-
-$pgtitle = array(gettext("Status"), gettext("CPU load"));
-require("guiconfig.inc");
-include("head.inc");
-include("fbegin.inc");
-
-$pgtitle = gettext("Status: CPU Graph");
-
-?>
-<div align="center">
- <embed src="graph_cpu.php" type="image/svg+xml"
- width="550" height="275" pluginspage="http://www.adobe.com/svg/viewer/install/auto" />
-</div>
-<br /><span class="red"><strong><?=gettext("Note"); ?>:</strong></span> <?=gettext("if you can't see the graph, you may have to install the"); ?> <a href="http://www.adobe.com/svg/viewer/install/" target="_blank"><?=gettext("Adobe SVG viewer"); ?></a>.
-<?php include("fend.inc"); ?>
diff --git a/usr/local/www/status_interfaces.php b/usr/local/www/status_interfaces.php
deleted file mode 100644
index 67ab96f..0000000
--- a/usr/local/www/status_interfaces.php
+++ /dev/null
@@ -1,607 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_interfaces.php
- part of pfSense
- Copyright (C) 2009 Scott Ullrich <sullrich@gmail.com>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-status-interfaces
-##|*NAME=Status: Interfaces page
-##|*DESCR=Allow access to the 'Status: Interfaces' page.
-##|*MATCH=status_interfaces.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("shaper.inc");
-require_once("filter.inc");
-
-if ($_POST['if'] && $_POST['submit']) {
- $interface = $_POST['if'];
- if ($_POST['status'] == "up") {
- interface_bring_down($interface);
- } else {
- interface_configure($interface);
- }
- header("Location: status_interfaces.php");
- exit;
-}
-
-$pgtitle = array(gettext("Status"), gettext("Interfaces"));
-$shortcut_section = "interfaces";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="status interfaces">
-<?php
- $i = 0;
- $ifdescrs = get_configured_interface_with_descr(false, true);
- foreach ($ifdescrs as $ifdescr => $ifname):
- $ifinfo = get_interface_info($ifdescr);
- // Load MAC-Manufacturer table
- $mac_man = load_mac_manufacturer_table();
-?>
-<?php
- if ($i):
-?>
- <tr>
- <td colspan="8" class="list" height="12"></td>
- </tr>
-<?php
- endif;
-?>
- <tr>
- <td colspan="2" class="listtopic">
- <?=htmlspecialchars($ifname);?> <?=gettext("interface"); ?> (<?=htmlspecialchars($ifdescr);?>, <?=htmlspecialchars($ifinfo['hwif']);?>)
- </td>
- </tr>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Status"); ?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['status']);?>
- </td>
- </tr>
-<?php
- if ($ifinfo['dhcplink']):
-?>
- <tr>
- <td width="22%" class="vncellt">
- DHCP
- </td>
- <td width="78%" class="listr">
- <form name="dhcplink_form" action="status_interfaces.php" method="post">
- <input type="hidden" name="if" value="<?php echo $ifdescr; ?>" />
- <input type="hidden" name="status" value="<?php echo $ifinfo['dhcplink']; ?>" />
- <?=htmlspecialchars($ifinfo['dhcplink']);?>&nbsp;&nbsp;
- <?php $action = ($ifinfo['dhcplink'] == "up" ? gettext("Release") : gettext("Renew")); ?>
- <input type="submit" name="submit" class="formbtn" value="<?php echo $action; ?>" />
- </form>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['dhcp6link']):
-?>
- <tr>
- <td width="22%" class="vncellt">
- DHCP6
- </td>
- <td width="78%" class="listr">
- <form name="dhcp6link_form" action="status_interfaces.php" method="post">
- <input type="hidden" name="if" value="<?php echo $ifdescr; ?>" />
- <input type="hidden" name="status" value="<?php echo $ifinfo['dhcp6link']; ?>" />
- <?=htmlspecialchars($ifinfo['dhcp6link']);?>&nbsp;&nbsp;
- <?php $action = ($ifinfo['dhcp6link'] == "up" ? gettext("Release") : gettext("Renew")); ?>
- <input type="submit" name="submit" class="formbtn" value="<?php echo $action; ?>" />
- </form>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['pppoelink']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("PPPoE"); ?></td>
- <td width="78%" class="listr">
- <form name="pppoelink_form" action="status_interfaces.php" method="post">
- <input type="hidden" name="if" value="<?php echo $ifdescr; ?>" />
- <input type="hidden" name="status" value="<?php echo $ifinfo['pppoelink']; ?>" />
- <?=htmlspecialchars($ifinfo['pppoelink']);?>&nbsp;&nbsp;
- <?php $action = ($ifinfo['pppoelink'] == "up" ? gettext("Disconnect") : gettext("Connect")); ?>
- <input type="submit" name="submit" class="formbtn" value="<?php echo $action; ?>" />
- </form>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['pptplink']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("PPTP"); ?></td>
- <td width="78%" class="listr">
- <form name="pptplink_form" action="status_interfaces.php" method="post">
- <input type="hidden" name="if" value="<?php echo $ifdescr; ?>" />
- <input type="hidden" name="status" value="<?php echo $ifinfo['pptplink']; ?>" />
- <?=htmlspecialchars($ifinfo['pptplink']);?>&nbsp;&nbsp;
- <?php $action = ($ifinfo['pptplink'] == "up" ? gettext("Disconnect") : gettext("Connect")); ?>
- <input type="submit" name="submit" class="formbtn" value="<?php echo $action; ?>" />
- </form>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['l2tplink']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("L2TP"); ?></td>
- <td width="78%" class="listr">
- <form name="l2tplink_form" action="status_interfaces.php" method="post">
- <input type="hidden" name="if" value="<?php echo $ifdescr; ?>" />
- <input type="hidden" name="status" value="<?php echo $ifinfo['l2tplink']; ?>" />
- <?=htmlspecialchars($ifinfo['l2tplink']);?>&nbsp;&nbsp;
- <?php $action = ($ifinfo['l2tplink'] == "up" ? gettext("Disconnect") : gettext("Connect")); ?>
- <input type="submit" name="submit" class="formbtn" value="<?php echo $action; ?>" />
- </form>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['ppplink']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("PPP"); ?></td>
- <td width="78%" class="listr">
- <form name="ppplink_form" action="status_interfaces.php" method="post">
- <input type="hidden" name="if" value="<?php echo $ifdescr; ?>" />
- <input type="hidden" name="status" value="<?php echo $ifinfo['ppplink']; ?>" />
- <?=htmlspecialchars($ifinfo['ppplink']);?>
- <?php if ($ifinfo['ppplink'] == "up"): ?>
- <input type="submit" name="submit" class="formbtn" value="<?php echo gettext("Disconnect"); ?>" />
- <?php else: ?>
- <?php if (!$ifinfo['nodevice']): ?>
- <input type="submit" name="submit" class="formbtn" value="<?php echo gettext("Connect"); ?>" />
- <?php endif; ?>
- <?php endif; ?>
- </form>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['ppp_uptime'] || $ifinfo['ppp_uptime_accumulated']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Uptime ");?><?php if ($ifinfo['ppp_uptime_accumulated']) echo "(historical)"; ?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['ppp_uptime']);?> <?=htmlspecialchars($ifinfo['ppp_uptime_accumulated']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['cell_rssi']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Cell Signal (RSSI)");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['cell_rssi']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['cell_mode']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Cell Mode");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['cell_mode']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['cell_simstate']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Cell SIM State");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['cell_simstate']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['cell_service']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Cell Service");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['cell_service']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['cell_bwupstream']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Cell Upstream");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['cell_bwupstream']);?> kbit/s
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['cell_bwdownstream']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Cell Downstream");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['cell_bwdownstream']);?> kbit/s
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['cell_upstream']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Cell Current Up");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['cell_upstream']);?> kbit/s
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['cell_downstream']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Cell Current Down");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['cell_downstream']);?> kbit/s
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['macaddr']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("MAC address");?></td>
- <td width="78%" class="listr">
- <?php
- $mac=$ifinfo['macaddr'];
- $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
- if (isset($mac_man[$mac_hi])) {
- print "<span>" . $mac . " - " . htmlspecialchars($mac_man[$mac_hi]); print "</span>";
- } else {
- print htmlspecialchars($mac);
- }
- ?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['status'] != "down"):
-?>
-<?php
- if ($ifinfo['dhcplink'] != "down" && $ifinfo['pppoelink'] != "down" && $ifinfo['pptplink'] != "down"):
- if ($ifinfo['ipaddr']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("IPv4 address");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['ipaddr']);?>
- &nbsp;
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['subnet']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Subnet mask IPv4");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['subnet']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['gateway']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Gateway IPv4");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($config['interfaces'][$ifdescr]['gateway']);?>
- <?=htmlspecialchars($ifinfo['gateway']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['linklocal']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("IPv6 Link Local");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['linklocal']);?>
- &nbsp;
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['ipaddrv6']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("IPv6 address");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['ipaddrv6']);?>
- &nbsp;
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['subnetv6']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Subnet mask IPv6");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['subnetv6']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['gatewayv6']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Gateway IPv6");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($config['interfaces'][$ifdescr]['gatewayv6']);?>
- <?=htmlspecialchars($ifinfo['gatewayv6']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifdescr == "wan" && file_exists("{$g['varetc_path']}/resolv.conf")):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("ISP DNS servers");?></td>
- <td width="78%" class="listr">
- <?php
- $dns_servers = get_dns_servers();
- foreach ($dns_servers as $dns) {
- echo "{$dns}<br />";
- }
- ?>
- </td>
- </tr>
-<?php
- endif;
- endif;
- if ($ifinfo['mtu']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("MTU");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['mtu']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['media']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Media");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['media']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['laggproto']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("LAGG Protocol");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['laggproto']);?>
- </td>
- </tr>
-<?php
- endif;
- if (is_array($ifinfo['laggport'])):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("LAGG Ports");?></td>
- <td width="78%" class="listr">
- <?php
- foreach ($ifinfo['laggport'] as $laggport) {
- echo htmlspecialchars($laggport);
- ?>
- <br />
- <?php
- }
- ?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['channel']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Channel");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['channel']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['ssid']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("SSID");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['ssid']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['bssid']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("BSSID");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['bssid']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['rate']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Rate");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['rate']);?>
- </td>
- </tr>
-<?php
- endif;
- if ($ifinfo['rssi']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("RSSI");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['rssi']);?>
- </td>
- </tr>
-<?php
- endif;
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("In/out packets");?></td>
- <td width="78%" class="listr">
- <?php
- echo htmlspecialchars($ifinfo['inpkts'] . "/" . $ifinfo['outpkts'] . " (");
- echo htmlspecialchars(format_bytes($ifinfo['inbytes']) . "/" . format_bytes($ifinfo['outbytes']) . ")");
- ?>
- </td>
- </tr>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("In/out packets (pass)");?></td>
- <td width="78%" class="listr">
- <?php
- echo htmlspecialchars($ifinfo['inpktspass'] . "/" . $ifinfo['outpktspass'] . " (");
- echo htmlspecialchars(format_bytes($ifinfo['inbytespass']) . "/" . format_bytes($ifinfo['outbytespass']) . ")");
- ?>
- </td>
- </tr>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("In/out packets (block)");?></td>
- <td width="78%" class="listr">
- <?php
- echo htmlspecialchars($ifinfo['inpktsblock'] . "/" . $ifinfo['outpktsblock'] . " (");
- echo htmlspecialchars(format_bytes($ifinfo['inbytesblock']) . "/" . format_bytes($ifinfo['outbytesblock']) . ")");
- ?>
- </td>
- </tr>
-<?php
- if (isset($ifinfo['inerrs'])):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("In/out errors");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['inerrs'] . "/" . $ifinfo['outerrs']);?>
- </td>
- </tr>
-<?php
- endif;
- if (isset($ifinfo['collisions'])):
-?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Collisions");?></td>
- <td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['collisions']);?>
- </td>
- </tr>
-<?php
- endif;
- endif;
-?>
-<?php
- if ($ifinfo['bridge']):
-?>
- <tr>
- <td width="22%" class="vncellt"><?php printf(gettext("Bridge (%s)"), $ifinfo['bridgeint']);?></td>
- <td width="78%" class="listr">
- <?=$ifinfo['bridge'];?>
- </td>
- </tr>
-<?php
- endif;
- if (file_exists("/usr/bin/vmstat")):
- $real_interface = "";
- $interrupt_total = "";
- $interrupt_sec = "";
- $real_interface = $ifinfo['hwif'];
- $interrupt_total = `vmstat -i | grep $real_interface | awk '{ print $3 }'`;
- $interrupt_sec = `vmstat -i | grep $real_interface | awk '{ print $4 }'`;
- if (strstr($interrupt_total, "hci")) {
- $interrupt_total = `vmstat -i | grep $real_interface | awk '{ print $4 }'`;
- $interrupt_sec = `vmstat -i | grep $real_interface | awk '{ print $5 }'`;
- }
- unset($interrupt_total); // XXX: FIX ME! Need a regex and parse correct data 100% of the time.
- if ($interrupt_total): ?>
- <tr>
- <td width="22%" class="vncellt"><?=gettext("Interrupts/Second");?></td>
- <td width="78%" class="listr">
- <?php
- echo $interrupt_total . " " . gettext("total");
- echo "<br />";
- echo $interrupt_sec . " " . gettext("rate");
- ?>
- </td>
- </tr>
-<?php
- endif;
- endif;
- $i++;
- endforeach;
-?>
-</table>
-
-<br />
-
-<?php printf(gettext("Using dial-on-demand will bring the connection up again if any packet ".
-"triggers it. To substantiate this point: disconnecting manually ".
-"will %snot%s prevent dial-on-demand from making connections ".
-"to the outside! Don't use dial-on-demand if you want to make sure that the line ".
-"is kept disconnected."), '<strong>', '</strong>')?>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_lb_pool.php b/usr/local/www/status_lb_pool.php
deleted file mode 100644
index 984ab9e..0000000
--- a/usr/local/www/status_lb_pool.php
+++ /dev/null
@@ -1,231 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_lb_pool.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-status-loadbalancer-pool
-##|*NAME=Status: Load Balancer: Pool page
-##|*DESCR=Allow access to the 'Status: Load Balancer: Pool' page.
-##|*MATCH=status_lb_pool.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("vslb.inc");
-
-if (!is_array($config['load_balancer']['lbpool'])) {
- $config['load_balancer']['lbpool'] = array();
-}
-$a_pool = &$config['load_balancer']['lbpool'];
-
-$lb_logfile = "{$g['varlog_path']}/relayd.log";
-
-$now = time();
-$year = date("Y");
-
-$pgtitle = array(gettext("Status"), gettext("Load Balancer"), gettext("Pool"));
-$shortcut_section = "relayd";
-include("head.inc");
-
-$relay_hosts = get_lb_summary();
-
-if ($_POST) {
- if ($_POST['apply']) {
- $retval = 0;
- $retval |= filter_configure();
- $retval |= relayd_configure();
- $savemsg = get_std_save_message($retval);
- clear_subsystem_dirty('loadbalancer');
- } else {
- /* Keep a list of servers we find in POST variables */
- $newservers = array();
- foreach ($_POST as $name => $value) {
- /* Look through the POST vars to find the pool data */
- if (strpos($name, '|') !== false) {
- list($poolname, $ip) = explode("|", $name);
- $ip = str_replace('_', '.', $ip);
- $newservers[$poolname][] = $ip;
- } elseif (is_ipaddr($value)) {
- $newservers[$name][] = $value;
- }
- }
- foreach ($a_pool as & $pool) {
- if (is_array($pool['servers']) && is_array($pool['serversdisabled'])) {
- $oldservers = array_merge($pool['servers'], $pool['serversdisabled']);
- } elseif (is_array($pool['servers'])) {
- $oldservers = $pool['servers'];
- } elseif (is_array($pool['serversdisabled'])) {
- $oldservers = $pool['serversdisabled'];
- } else {
- $oldservers = array();
- }
- if (is_array($newservers[$pool['name']])) {
- $pool['servers'] = $newservers[$pool['name']];
- $pool['serversdisabled'] = array_diff($oldservers, $newservers[$pool['name']]);
- }
- }
- mark_subsystem_dirty('loadbalancer');
- write_config("Updated load balancer pools via status screen.");
- }
-}
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="status_lb_pool.php" method="post">
-<?php if (is_subsystem_dirty('loadbalancer')): ?><br/>
-<?php print_info_box_np(sprintf(gettext("The load balancer configuration has been changed%sYou must apply the changes in order for them to take effect."), "<br />"));?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="status load balancer pools">
- <tr><td class="tabnavtbl">
- <?php
- /* active tabs */
- $tab_array = array();
- $tab_array[] = array(gettext("Pools"), true, "status_lb_pool.php");
- $tab_array[] = array(gettext("Virtual Servers"), false, "status_lb_vs.php");
- display_top_tabs($tab_array);
- ?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont sortable" id="sortabletable" summary="main area">
- <tr>
- <td width="10%" class="listhdrr"><?=gettext("Name");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Mode");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Servers");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Monitor");?></td>
- <td width="30%" class="listhdr"><?=gettext("Description");?></td>
- </tr>
-<?php
- foreach ($a_pool as & $pool):
-?>
- <tr>
- <td class="listlr">
- <?=$pool['name'];?>
- </td>
- <td class="listr" align="center" >
-<?php
- switch ($pool['mode']) {
- case "loadbalance":
- echo "Load balancing";
- break;
- case "failover":
- echo "Manual failover";
- break;
- default:
- echo "(default)";
- }
-?>
- </td>
- <td class="listr" align="center">
- <table border="0" cellpadding="2" cellspacing="0" summary="status">
-<?php
- $pool_hosts = array();
- foreach ((array) $pool['servers'] as $server) {
- $svr['ip']['addr'] = $server;
- $svr['ip']['state'] = $relay_hosts[$pool['name'] . ":" . $pool['port']][$server]['state'];
- $svr['ip']['avail'] = $relay_hosts[$pool['name'] . ":" . $pool['port']][$server]['avail'];
- $pool_hosts[]=$svr;
- }
- foreach ((array) $pool['serversdisabled'] as $server) {
- $svr['ip']['addr'] = "$server";
- $svr['ip']['state'] = 'disabled';
- $svr['ip']['avail'] = 'disabled';
- $pool_hosts[]=$svr;
- }
- asort($pool_hosts);
-
- foreach ((array) $pool_hosts as $server) {
- if ($server['ip']['addr'] != "") {
- switch ($server['ip']['state']) {
- case 'up':
- $bgcolor = "#90EE90"; // lightgreen
- $checked = "checked=\"checked\"";
- break;
- case 'disabled':
- $bgcolor = "white";
- $checked = "";
- break;
- default:
- $bgcolor = "#F08080"; // lightcoral
- $checked = "checked=\"checked\"";
- }
- echo "<tr>";
- switch ($pool['mode']) {
- case 'loadbalance':
- echo "<td><input type=\"checkbox\" name=\"{$pool['name']}|" . str_replace('.', '_', $server['ip']['addr']) . "\" {$checked} /></td>\n";
- break;
- case 'failover':
- echo "<td><input type=\"radio\" name=\"{$pool['name']}\" value=\"{$server['ip']['addr']}\" {$checked} /></td>\n";
- break;
- }
- echo "<td bgcolor=\"{$bgcolor}\">&nbsp;{$server['ip']['addr']}:{$pool['port']}&nbsp;</td><td bgcolor=\"{$bgcolor}\">&nbsp;";
-# echo "<td bgcolor=\"{$bgcolor}\">&nbsp;{$server['ip']['addr']}:{$pool['port']} ";
- if ($server['ip']['avail']) {
- echo " ({$server['ip']['avail']}) ";
- }
- echo "&nbsp;</td></tr>";
- }
- }
-?>
- </table>
- </td>
- <td class="listr" >
- <?php echo $pool['monitor']; ?>
- </td>
- <td class="listbg" >
- <?=$pool['descr'];?>
- </td>
- </tr>
-<?php
- endforeach;
-?>
- <tr>
- <td colspan="5">
- <input name="Submit" type="submit" class="formbtn" value="<?= gettext("Save"); ?>" />
- <input name="Reset" type="reset" class="formbtn" value="<?= gettext("Reset"); ?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_lb_vs.php b/usr/local/www/status_lb_vs.php
deleted file mode 100644
index 0d0bd60..0000000
--- a/usr/local/www/status_lb_vs.php
+++ /dev/null
@@ -1,158 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_lb_vs.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/local/sbin/relayctl
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-status-loadbalancer-virtualserver
-##|*NAME=Status: Load Balancer: Virtual Server page
-##|*DESCR=Allow access to the 'Status: Load Balancer: Virtual Server' page.
-##|*MATCH=status_lb_vs.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("vslb.inc");
-
-if (!is_array($config['load_balancer']['lbpool'])) {
- $config['load_balancer']['lbpool'] = array();
-}
-if (!is_array($config['load_balancer']['virtual_server'])) {
- $config['load_balancer']['virtual_server'] = array();
-}
-$a_vs = &$config['load_balancer']['virtual_server'];
-$a_pool = &$config['load_balancer']['lbpool'];
-$rdr_a = get_lb_redirects();
-
-$pgtitle = array(gettext("Status"), gettext("Load Balancer"), gettext("Virtual Server"));
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="status load balancer virtual servers">
- <tr><td class="tabnavtbl">
- <?php
- /* active tabs */
- $tab_array = array();
- $tab_array[] = array(gettext("Pools"), false, "status_lb_pool.php");
- $tab_array[] = array(gettext("Virtual Servers"), true, "status_lb_vs.php");
- display_top_tabs($tab_array);
- ?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td width="10%" class="listhdrr"><?=gettext("Name"); ?></td>
- <td width="20%" class="listhdrr"><?=gettext("Address"); ?></td>
- <td width="10%" class="listhdrr"><?=gettext("Servers"); ?></td>
- <td width="25%" class="listhdrr"><?=gettext("Status"); ?></td>
- <td width="25%" class="listhdr"><?=gettext("Description"); ?></td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_vs as $vsent):
-?>
- <tr>
- <td class="listlr">
- <?=$vsent['name'];?>
- </td>
- <td class="listr" align="center" >
- <?=$vsent['ipaddr']." : ".$vsent['port'];?>
- <br />
- </td>
- <td class="listr" align="center" >
- <table border="0" cellpadding="0" cellspacing="2" summary="servers">
-<?php
- foreach ($a_pool as $vipent) {
- if ($vipent['name'] == $vsent['poolname']) {
- foreach ((array) $vipent['servers'] as $server) {
- print "<tr><td> {$server} </td></tr>";
- }
- }
- }
- ?>
- </table>
- </td>
-<?php
- switch (trim($rdr_a[$vsent['name']]['status'])) {
- case 'active':
- $bgcolor = "#90EE90"; // lightgreen
- $rdr_a[$vsent['name']]['status'] = "Active";
- break;
- case 'down':
- $bgcolor = "#F08080"; // lightcoral
- $rdr_a[$vsent['name']]['status'] = "Down";
- break;
- default:
- $bgcolor = "#D3D3D3"; // lightgray
- $rdr_a[$vsent['name']]['status'] = 'Unknown - relayd not running?';
- }
-?>
- <td class="listr nowrap">
- <table border="0" cellpadding="3" cellspacing="2" summary="status">
- <tr>
- <td bgcolor="<?=$bgcolor?>"><?=$rdr_a[$vsent['name']]['status']?> </td>
- </tr>
- </table>
-<?php
- if (!empty($rdr_a[$vsent['name']]['total'])) {
- echo "Total Sessions: {$rdr_a[$vsent['name']]['total']}\n";
- }
- if (!empty($rdr_a[$vsent['name']]['last'])) {
- echo "<br />Last: {$rdr_a[$vsent['name']]['last']}\n";
- }
- if (!empty($rdr_a[$vsent['name']]['average'])) {
- echo "<br />Average: {$rdr_a[$vsent['name']]['average']}\n";
- }
-?>
- </td>
- <td class="listbg" >
- <?=$vsent['descr'];?>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- </table>
- </div>
- </td>
- </tr>
-</table>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_ntpd.php b/usr/local/www/status_ntpd.php
deleted file mode 100644
index 329764b..0000000
--- a/usr/local/www/status_ntpd.php
+++ /dev/null
@@ -1,320 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_ntpd.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2013 Dagorlad
- Copyright (C) 2012 Jim Pingle
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/local/sbin/ntpd /usr/local/sbin/ntpq
- pfSense_MODULE: ntpd
-*/
-
-##|+PRIV
-##|*IDENT=page-status-ntp
-##|*NAME=Status: NTP page
-##|*DESCR=Allow access to the 'Status: NTP' page.
-##|*MATCH=status_ntpd.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-
-if (!isset($config['ntpd']['noquery'])) {
- if (isset($config['system']['ipv6allow'])) {
- $inet_version = "";
- } else {
- $inet_version = " -4";
- }
-
- exec("/usr/local/sbin/ntpq -pn $inet_version | /usr/bin/tail +3", $ntpq_output);
-
- $ntpq_servers = array();
- foreach ($ntpq_output as $line) {
- $server = array();
-
- switch (substr($line, 0, 1)) {
- case " ":
- $server['status'] = "Unreach/Pending";
- break;
- case "*":
- $server['status'] = "Active Peer";
- break;
- case "+":
- $server['status'] = "Candidate";
- break;
- case "o":
- $server['status'] = "PPS Peer";
- break;
- case "#":
- $server['status'] = "Selected";
- break;
- case ".":
- $server['status'] = "Excess Peer";
- break;
- case "x":
- $server['status'] = "False Ticker";
- break;
- case "-":
- $server['status'] = "Outlier";
- break;
- }
-
- $line = substr($line, 1);
- $peerinfo = preg_split("/[\s\t]+/", $line);
-
- $server['server'] = $peerinfo[0];
- $server['refid'] = $peerinfo[1];
- $server['stratum'] = $peerinfo[2];
- $server['type'] = $peerinfo[3];
- $server['when'] = $peerinfo[4];
- $server['poll'] = $peerinfo[5];
- $server['reach'] = $peerinfo[6];
- $server['delay'] = $peerinfo[7];
- $server['offset'] = $peerinfo[8];
- $server['jitter'] = $peerinfo[9];
-
- $ntpq_servers[] = $server;
- }
-
- exec("/usr/local/sbin/ntpq -c clockvar $inet_version", $ntpq_clockvar_output);
- foreach ($ntpq_clockvar_output as $line) {
- if (substr($line, 0, 9) == "timecode=") {
- $tmp = explode('"', $line);
- $tmp = $tmp[1];
- if (substr($tmp, 0, 6) == '$GPRMC') {
- $gps_vars = explode(",", $tmp);
- $gps_ok = ($gps_vars[2] == "A");
- $gps_lat_deg = substr($gps_vars[3], 0, 2);
- $gps_lat_min = substr($gps_vars[3], 2) / 60.0;
- $gps_lon_deg = substr($gps_vars[5], 0, 3);
- $gps_lon_min = substr($gps_vars[5], 3) / 60.0;
- $gps_lat = $gps_lat_deg + $gps_lat_min;
- $gps_lat = $gps_lat * (($gps_vars[4] == "N") ? 1 : -1);
- $gps_lon = $gps_lon_deg + $gps_lon_min;
- $gps_lon = $gps_lon * (($gps_vars[6] == "E") ? 1 : -1);
- } elseif (substr($tmp, 0, 6) == '$GPGGA') {
- $gps_vars = explode(",", $tmp);
- $gps_ok = $gps_vars[6];
- $gps_lat_deg = substr($gps_vars[2], 0, 2);
- $gps_lat_min = substr($gps_vars[2], 2) / 60.0;
- $gps_lon_deg = substr($gps_vars[4], 0, 3);
- $gps_lon_min = substr($gps_vars[4], 3) / 60.0;
- $gps_lat = $gps_lat_deg + $gps_lat_min;
- $gps_lat = $gps_lat * (($gps_vars[3] == "N") ? 1 : -1);
- $gps_lon = $gps_lon_deg + $gps_lon_min;
- $gps_lon = $gps_lon * (($gps_vars[5] == "E") ? 1 : -1);
- $gps_alt = $gps_vars[9];
- $gps_alt_unit = $gps_vars[10];
- $gps_sat = $gps_vars[7];
- } elseif (substr($tmp, 0, 6) == '$GPGLL') {
- $gps_vars = explode(",", $tmp);
- $gps_ok = ($gps_vars[6] == "A");
- $gps_lat_deg = substr($gps_vars[1], 0, 2);
- $gps_lat_min = substr($gps_vars[1], 2) / 60.0;
- $gps_lon_deg = substr($gps_vars[3], 0, 3);
- $gps_lon_min = substr($gps_vars[3], 3) / 60.0;
- $gps_lat = $gps_lat_deg + $gps_lat_min;
- $gps_lat = $gps_lat * (($gps_vars[2] == "N") ? 1 : -1);
- $gps_lon = $gps_lon_deg + $gps_lon_min;
- $gps_lon = $gps_lon * (($gps_vars[4] == "E") ? 1 : -1);
- }
- }
- }
-
-}
-
-if (isset($config['ntpd']['gps']['type']) && ($config['ntpd']['gps']['type'] == 'SureGPS') && (isset($gps_ok))) {
- //GSV message is only enabled by init commands in services_ntpd_gps.php for SureGPS board
- $gpsport = fopen("/dev/gps0", "r+");
- while ($gpsport) {
- $buffer = fgets($gpsport);
- if (substr($buffer, 0, 6) == '$GPGSV') {
- //echo $buffer."\n";
- $gpgsv = explode(',', $buffer);
- $gps_satview = $gpgsv[3];
- break;
- }
- }
-}
-
-$pgtitle = array(gettext("Status"), gettext("NTP"));
-$shortcut_section = "ntp";
-include("head.inc");
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="status ntpd">
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="heading">
- <tr>
- <td class="listtopic">Network Time Protocol Status</td>
- </tr>
- </table>
- <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <thead>
- <tr>
- <th class="listhdrr"><?=gettext("Status"); ?></th>
- <th class="listhdrr"><?=gettext("Server"); ?></th>
- <th class="listhdrr"><?=gettext("Ref ID"); ?></th>
- <th class="listhdrr"><?=gettext("Stratum"); ?></th>
- <th class="listhdrr"><?=gettext("Type"); ?></th>
- <th class="listhdrr"><?=gettext("When"); ?></th>
- <th class="listhdrr"><?=gettext("Poll"); ?></th>
- <th class="listhdrr"><?=gettext("Reach"); ?></th>
- <th class="listhdrr"><?=gettext("Delay"); ?></th>
- <th class="listhdrr"><?=gettext("Offset"); ?></th>
- <th class="listhdr"><?=gettext("Jitter"); ?></th>
- </tr>
- </thead>
- <tbody>
-<?php
- if (isset($config['ntpd']['noquery'])):
-?>
- <tr>
- <td class="listlr" colspan="11" align="center">
- Statistics unavailable because ntpq and ntpdc queries are disabled in the <a href="services_ntpd.php">NTP service settings</a>.
- </td>
- </tr>
-<?php
- elseif (count($ntpq_servers) == 0):
-?>
- <tr>
- <td class="listlr" colspan="11" align="center">
- No peers found, <a href="status_services.php">is the ntp service running?</a>.
- </td>
- </tr>
-<?php
- else:
- $i = 0;
- foreach ($ntpq_servers as $server):
-?>
- <tr>
- <td class="listlr nowrap">
- <?=$server['status'];?>
- </td>
- <td class="listr">
- <?=$server['server'];?>
- </td>
- <td class="listr">
- <?=$server['refid'];?>
- </td>
- <td class="listr">
- <?=$server['stratum'];?>
- </td>
- <td class="listr">
- <?=$server['type'];?>
- </td>
- <td class="listr">
- <?=$server['when'];?>
- </td>
- <td class="listr">
- <?=$server['poll'];?>
- </td>
- <td class="listr">
- <?=$server['reach'];?>
- </td>
- <td class="listr">
- <?=$server['delay'];?>
- </td>
- <td class="listr">
- <?=$server['offset'];?>
- </td>
- <td class="listr">
- <?=$server['jitter'];?>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
- endif;
-?>
- </tbody>
- </table>
-<?php
- if (($gps_ok) && ($gps_lat) && ($gps_lon)):
- $gps_goo_lnk = 2;
-?>
- <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="gps status">
- <thead>
- <tr>
- <th class="listhdrr"><?=gettext("Clock Latitude"); ?></th>
- <th class="listhdrr"><?=gettext("Clock Longitude"); ?></th>
-<?php
- if (isset($gps_alt)) {
- echo '<th class="listhdrr">' . gettext("Clock Altitude") . '</th>';
- $gps_goo_lnk++;
- }
-
- if (isset($gps_sat) || isset($gps_satview)) {
- echo '<th class="listhdrr">' . gettext("Satellites") . '</th>';
- $gps_goo_lnk++;
- }
-?>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td class="listlr" align="center"><?php echo sprintf("%.5f", $gps_lat); ?> (<?php echo sprintf("%d", $gps_lat_deg); ?>&deg; <?php echo sprintf("%.5f", $gps_lat_min*60); ?><?php echo $gps_vars[4]; ?>)</td>
- <td class="listlr" align="center"><?php echo sprintf("%.5f", $gps_lon); ?> (<?php echo sprintf("%d", $gps_lon_deg); ?>&deg; <?php echo sprintf("%.5f", $gps_lon_min*60); ?><?php echo $gps_vars[6]; ?>)</td>
-<?php
- if (isset($gps_alt)) {
- echo '<td class="listlr" align="center">' . $gps_alt . ' ' . $gps_alt_unit . '</td>';
- }
-
- if (isset($gps_sat) || isset($gps_satview)) {
- echo '<td class="listr" align="center">';
- if (isset($gps_satview)) {
- echo 'in view ' . intval($gps_satview);
- }
- if (isset($gps_sat) && isset($gps_satview)) {
- echo ', ';
- }
- if (isset($gps_sat)) {
- echo 'in use ' . $gps_sat;
- }
- echo '</td>';
- }
-?>
- </tr>
- <tr>
- <td class="listlr" colspan="<?php echo $gps_goo_lnk; ?>" align="center"><a target="_gmaps" href="http://maps.google.com/?q=<?php echo $gps_lat; ?>,<?php echo $gps_lon; ?>">Google Maps Link</a></td>
- </tr>
- </tbody>
- </table>
-<?php
- endif;
-?>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_openvpn.php b/usr/local/www/status_openvpn.php
deleted file mode 100644
index e9d2073..0000000
--- a/usr/local/www/status_openvpn.php
+++ /dev/null
@@ -1,443 +0,0 @@
-<?php
-/*
- status_openvpn.php
-
- Copyright (C) 2005 Scott Ullrich, Colin Smith
- Copyright (C) 2008 Shrew Soft Inc.
- Copyright (C) 2010 Jim Pingle
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- AJAX bits borrowed from diag_dump_states.php
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: openvpn
-*/
-
-##|+PRIV
-##|*IDENT=page-status-openvpn
-##|*NAME=Status: OpenVPN page
-##|*DESCR=Allow access to the 'Status: OpenVPN' page.
-##|*MATCH=status_openvpn.php*
-##|-PRIV
-
-$pgtitle = array(gettext("Status"), gettext("OpenVPN"));
-$shortcut_section = "openvpn";
-
-require("guiconfig.inc");
-require_once("openvpn.inc");
-require_once("shortcuts.inc");
-require_once("service-utils.inc");
-
-/* Handle AJAX */
-if ($_GET['action']) {
- if ($_GET['action'] == "kill") {
- $port = $_GET['port'];
- $remipp = $_GET['remipp'];
- if (!empty($port) and !empty($remipp)) {
- $retval = kill_client($port, $remipp);
- echo htmlentities("|{$port}|{$remipp}|{$retval}|");
- } else {
- echo gettext("invalid input");
- }
- exit;
- }
-}
-
-
-function kill_client($port, $remipp) {
- global $g;
-
- //$tcpsrv = "tcp://127.0.0.1:{$port}";
- $tcpsrv = "unix://{$g['varetc_path']}/openvpn/{$port}.sock";
- $errval;
- $errstr;
-
- /* open a tcp connection to the management port of each server */
- $fp = @stream_socket_client($tcpsrv, $errval, $errstr, 1);
- $killed = -1;
- if ($fp) {
- stream_set_timeout($fp, 1);
- fputs($fp, "kill {$remipp}\n");
- while (!feof($fp)) {
- $line = fgets($fp, 1024);
-
- $info = stream_get_meta_data($fp);
- if ($info['timed_out']) {
- break;
- }
-
- /* parse header list line */
- if (strpos($line, "INFO:") !== false) {
- continue;
- }
- if (strpos($line, "SUCCESS") !== false) {
- $killed = 0;
- }
- break;
- }
- fclose($fp);
- }
- return $killed;
-}
-
-$servers = openvpn_get_active_servers();
-$sk_servers = openvpn_get_active_servers("p2p");
-$clients = openvpn_get_active_clients();
-
-include("head.inc"); ?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?=$jsevents["body"]["onload"];?>">
-<?php include("fbegin.inc"); ?>
-<form action="status_openvpn.php" method="get" name="iform">
-<script type="text/javascript">
-//<![CDATA[
- function killClient(mport, remipp) {
- var busy = function(index, icon) {
- jQuery(icon).bind("onclick", "");
- jQuery(icon).attr('src', jQuery(icon).attr('src').replace("\.gif", "_d.gif"));
- jQuery(icon).css("cursor", "wait");
- }
-
- jQuery('img[name="i:' + mport + ":" + remipp + '"]').each(busy);
-
- jQuery.ajax(
- "<?=$_SERVER['SCRIPT_NAME'];?>" +
- "?action=kill&port=" + mport + "&remipp=" + remipp,
- { type: "get", complete: killComplete }
- );
- }
-
- function killComplete(req) {
- var values = req.responseText.split("|");
- if (values[3] != "0") {
- alert('<?=gettext("An error occurred.");?>' + ' (' + values[3] + ')');
- return;
- }
-
- jQuery('tr[name="r:' + values[1] + ":" + values[2] + '"]').each(
- function(index, row) { jQuery(row).fadeOut(1000); }
- );
- }
-//]]>
-</script>
-<?php
- $i = 0;
- foreach ($servers as $server):
-?>
-
-<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0" summary="status openvpn">
- <tr>
- <td colspan="6" class="listtopic">
- <?=$server['name'];?> <?=gettext("Client connections"); ?>
- </td>
- </tr>
- <tr>
- <td>
- <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="connections">
- <tr>
- <td class="listhdrr"><?=gettext("Common Name"); ?></td>
- <td class="listhdrr"><?=gettext("Real Address"); ?></td>
- <td class="listhdrr"><?=gettext("Virtual Address"); ?></td>
- <td class="listhdrr"><?=gettext("Connected Since"); ?></td>
- <td class="listhdrr"><?=gettext("Bytes Sent"); ?></td>
- <td class="listhdrr"><?=gettext("Bytes Received"); ?></td>
- </tr>
-<?php
- foreach ($server['conns'] as $conn):
-?>
- <tr id="<?php echo "r:{$server['mgmt']}:{$conn['remote_host']}"; ?>">
- <td class="listlr">
- <?=$conn['common_name'];?>
- </td>
- <td class="listr">
- <?=$conn['remote_host'];?>
- </td>
- <td class="listr">
- <?=$conn['virtual_addr'];?>
- </td>
- <td class="listr">
- <?=$conn['connect_time'];?>
- </td>
- <td class="listr">
- <?=format_bytes($conn['bytes_sent']);?>
- </td>
- <td class="listr">
- <?=format_bytes($conn['bytes_recv']);?>
- </td>
- <td class="list">
- <img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" height="17" width="17" border="0"
- onclick="killClient('<?php echo $server['mgmt']; ?>', '<?php echo $conn['remote_host']; ?>');" style="cursor:pointer;"
- id="<?php echo "i:{$server['mgmt']}:{$conn['remote_host']}"; ?>"
- title="<?php echo gettext("Kill client connection from") . " " . $conn['remote_host']; ?>" alt="delete" />
- </td>
- </tr>
-<?php
- endforeach;
-?>
- <tfoot>
- <tr>
- <td colspan="2" class="list" height="12">
- <table>
- <tr>
- <td><?php $ssvc = find_service_by_openvpn_vpnid($server['vpnid']); ?>
- <?= get_service_status_icon($ssvc, true, true); ?>
- <?= get_service_control_links($ssvc, true); ?></td>
- </tr>
- </table>
- </td>
- <td colspan="4" class="list" height="12">&nbsp;</td>
- </tr>
- </tfoot>
- </table>
- </td>
- </tr>
-</table>
-<?php
- if (is_array($server['routes']) && count($server['routes'])):
-?>
-<div id="shroutebut-<?= $i ?>">
- <input type="button" onClick="show_routes('tabroute-<?= $i ?>', 'shroutebut-<?= $i ?>')" value="<?php echo gettext("Show Routing Table"); ?>" /> - <?= gettext("Display OpenVPN's internal routing table for this server.") ?>
- <br /><br />
-</div>
-<table style="display: none; padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0" id="tabroute-<?= $i ?>" summary="routing table">
- <tr>
- <td colspan="6" class="listtopic">
- <?=$server['name'];?> <?=gettext("Routing Table"); ?>
- </td>
- </tr>
- <tr>
- <td>
- <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="results">
- <tr>
- <td class="listhdrr"><?=gettext("Common Name"); ?></td>
- <td class="listhdrr"><?=gettext("Real Address"); ?></td>
- <td class="listhdrr"><?=gettext("Target Network"); ?></td>
- <td class="listhdrr"><?=gettext("Last Used"); ?></td>
- </tr>
-
-<?php
- foreach ($server['routes'] as $conn):
-?>
- <tr id="<?php echo "r:{$server['mgmt']}:{$conn['remote_host']}"; ?>">
- <td class="listlr">
- <?=$conn['common_name'];?>
- </td>
- <td class="listr">
- <?=$conn['remote_host'];?>
- </td>
- <td class="listr">
- <?=$conn['virtual_addr'];?>
- </td>
- <td class="listr">
- <?=$conn['last_time'];?>
- </td>
- </tr>
-<?php
- endforeach;
-?>
- <tfoot>
- <tr>
- <td colspan="6" class="list" height="12"><?= gettext("An IP address followed by C indicates a host currently connected through the VPN.") ?></td>
- </tr>
- </tfoot>
- </table>
- </td>
- </tr>
-</table>
-<?php
- endif;
-?>
-<br />
-<?php
- $i++;
- endforeach;
-?>
-<br />
-
-<?php
- if (!empty($sk_servers)) {
-?>
-<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0" summary="peer to peer stats">
- <tr>
- <td colspan="6" class="listtopic">
- <?=gettext("Peer to Peer Server Instance Statistics"); ?>
- </td>
- </tr>
- <tr>
- <td>
- <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="results">
- <tr>
- <td class="listhdrr"><?=gettext("Name"); ?></td>
- <td class="listhdrr"><?=gettext("Status"); ?></td>
- <td class="listhdrr"><?=gettext("Connected Since"); ?></td>
- <td class="listhdrr"><?=gettext("Virtual Addr"); ?></td>
- <td class="listhdrr"><?=gettext("Remote Host"); ?></td>
- <td class="listhdrr"><?=gettext("Bytes Sent"); ?></td>
- <td class="listhdrr"><?=gettext("Bytes Rcvd"); ?></td>
- <td class="listhdrr"><?=gettext("Service"); ?></td>
- </tr>
-
-<?php
- foreach ($sk_servers as $sk_server):
-?>
- <tr id="<?php echo "r:{$sk_server['port']}:{$sk_server['vpnid']}"; ?>">
- <td class="listlr">
- <?=$sk_server['name'];?>
- </td>
- <td class="listr">
- <?=$sk_server['status'];?>
- </td>
- <td class="listr">
- <?=$sk_server['connect_time'];?>
- </td>
- <td class="listr">
- <?=$sk_server['virtual_addr'];?>
- </td>
- <td class="listr">
- <?=$sk_server['remote_host'];?>
- </td>
- <td class="listr">
- <?=format_bytes($sk_server['bytes_sent']);?>
- </td>
- <td class="listr">
- <?=format_bytes($sk_server['bytes_recv']);?>
- </td>
- <td class="listr">
- <table>
- <tr>
- <td><?php $ssvc = find_service_by_openvpn_vpnid($sk_server['vpnid']); ?>
- <?= get_service_status_icon($ssvc, false, true); ?>
- <?= get_service_control_links($ssvc, true); ?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- endforeach;
-?>
- </table>
- </td>
- </tr>
-</table>
-
-<?php
- }
-?>
-<br />
-<?php
- if (!empty($clients)) {
-?>
-<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0" summary="client stats">
- <tr>
- <td colspan="6" class="listtopic">
- <?=gettext("Client Instance Statistics"); ?>
- </td>
- </tr>
- <tr>
- <td>
- <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="results">
- <tr>
- <td class="listhdrr"><?=gettext("Name"); ?></td>
- <td class="listhdrr"><?=gettext("Status"); ?></td>
- <td class="listhdrr"><?=gettext("Connected Since"); ?></td>
- <td class="listhdrr"><?=gettext("Virtual Addr"); ?></td>
- <td class="listhdrr"><?=gettext("Remote Host"); ?></td>
- <td class="listhdrr"><?=gettext("Bytes Sent"); ?></td>
- <td class="listhdrr"><?=gettext("Bytes Rcvd"); ?></td>
- <td class="listhdrr"><?=gettext("Service"); ?></td>
- </tr>
-
-<?php
- foreach ($clients as $client):
-?>
- <tr id="<?php echo "r:{$client['port']}:{$client['vpnid']}"; ?>">
- <td class="listlr">
- <?=$client['name'];?>
- </td>
- <td class="listr">
- <?=$client['status'];?>
- </td>
- <td class="listr">
- <?=$client['connect_time'];?>
- </td>
- <td class="listr">
- <?=$client['virtual_addr'];?>
- </td>
- <td class="listr">
- <?=$client['remote_host'];?>
- </td>
- <td class="listr">
- <?=format_bytes($client['bytes_sent']);?>
- </td>
- <td class="listr">
- <?=format_bytes($client['bytes_recv']);?>
- </td>
- <td class="listr" height="12">
- <table>
- <tr>
- <td>
- <?php $ssvc = find_service_by_openvpn_vpnid($client['vpnid']); ?>
- <?= get_service_status_icon($ssvc, false, true); ?>
- <?= get_service_control_links($ssvc, true); ?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- endforeach;
-?>
- </table>
- </td>
- </tr>
-</table>
-
-<?php
- }
-
- if ($DisplayNote) {
- echo "<br /><b>" . gettext("NOTE") . ":</b> " . gettext("If you have custom options that override the management features of OpenVPN on a client or server, they will cause that OpenVPN instance to not work correctly with this status page.");
- }
-
- if ((empty($clients)) && (empty($servers)) && (empty($sk_servers))) {
- echo gettext("No OpenVPN instances defined");
- }
-?>
-</form>
-
-<?php include("fend.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-function show_routes(id, buttonid) {
- document.getElementById(buttonid).innerHTML='';
- aodiv = document.getElementById(id);
- aodiv.style.display = "block";
-}
-//]]>
-</script>
-</body>
-</html>
diff --git a/usr/local/www/status_queues.php b/usr/local/www/status_queues.php
deleted file mode 100644
index 42789bf..0000000
--- a/usr/local/www/status_queues.php
+++ /dev/null
@@ -1,310 +0,0 @@
-#!/usr/local/bin/php
-<?php
-/* $Id$ */
-/*
- status_queues.php
- Part of the pfSense project
- Copyright (C) 2004, 2005 Scott Ullrich
- Copyright (C) 2009 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/pfctl
- pfSense_MODULE: shaper
-*/
-
-##|+PRIV
-##|*IDENT=page-status-trafficshaper-queues
-##|*NAME=Status: Traffic shaper: Queues page
-##|*DESCR=Allow access to the 'Status: Traffic shaper: Queues' page.
-##|*MATCH=status_queues.php*
-##|-PRIV
-
-header("Last-Modified: " . gmdate("D, j M Y H:i:s") . " GMT");
-header("Expires: " . gmdate("D, j M Y H:i:s", time()) . " GMT");
-header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP/1.1
-header("Pragma: no-cache"); // HTTP/1.0
-
-require("guiconfig.inc");
-class QueueStats {
- public $queuename;
- public $queuelength;
- public $pps;
- public $bandwidth;
- public $borrows;
- public $suspends;
- public $drops;
-}
-if (!file_exists("{$g['varrun_path']}/qstats.pid") || !isvalidpid("{$g['varrun_path']}/qstats.pid")) {
- /* Start in the background so we don't hang up the GUI */
- mwexec_bg("/usr/local/sbin/qstats -p {$g['varrun_path']}/qstats.pid");
- /* Give it a moment to start up */
- sleep(1);
-}
-$fd = @fsockopen("unix://{$g['varrun_path']}/qstats");
-if (!$fd) {
- $error = "Something wrong happened during communication with stat gathering";
-} else {
- $stats = "";
- while (!feof($fd)) {
- $stats .= fread($fd, 4096);
- }
- fclose($fd);
- @file_put_contents("{$g['tmp_path']}/qstats", $stats);
- $altqstats = @parse_xml_config("{$g['tmp_path']}/qstats", array("altqstats"));
- if ($altqstats == -1) {
- $error = "No queue statistics could be read.";
- }
-}
-if ($_REQUEST['getactivity']) {
- $statistics = array();
- $bigger_stat = 0;
- $stat_type = $_REQUEST['stats'];
- /* build the queue stats. */
- foreach ($altqstats['queue'] as $q) {
- statsQueues($q);
- }
- /* calculate the bigger amount of packets or bandwidth being moved through all queues. */
- if ($stat_type == "0") {
- foreach ($statistics as $q) {
- if ($bigger_stat < $q->pps) {
- $bigger_stat = $q->pps;
- }
- }
- } else {
- foreach ($statistics as $q) {
- if ($bigger_stat < $q->bandwidth) {
- $bigger_stat = $q->bandwidth;
- }
- }
- }
- $finscript = "";
- foreach ($statistics as $q) {
- if ($stat_type == "0") {
- $packet_s = round(150 * (1 - $q->pps / $bigger_stat), 0);
- } else {
- $packet_s = round(150 * (1 - $q->bandwidth / $bigger_stat), 0);
- }
- if ($packet_s < 0) {
- $packet_s = 0;
- }
- $finscript .= "jQuery('#queue{$q->queuename}widthb').width('{$packet_s}');";
- $finscript .= "jQuery('#queue{$q->queuename}widtha').width('" . (150 - $packet_s) . "');";
- $finscript .= "jQuery('#queue{$q->queuename}pps').val('" . number_format($q->pps, 1) . "');";
- $finscript .= "jQuery('#queue{$q->queuename}bps').val('" . format_bits($q->bandwidth) . "');";
- $finscript .= "jQuery('#queue{$q->queuename}borrows').val('{$q->borrows}');";
- $finscript .= "jQuery('#queue{$q->queuename}suspends').val('{$q->suspends}');";
- $finscript .= "jQuery('#queue{$q->queuename}drops').val('{$q->drops}');";
- $finscript .= "jQuery('#queue{$q->queuename}length').val('{$q->queuelength}');";
- }
- unset($statistics, $altqstats);
- header("Content-type: text/javascript");
- echo $finscript;
- exit;
-}
-$pgtitle = array(gettext("Status"), gettext("Traffic shaper"), gettext("Queues"));
-$shortcut_section = "trafficshaper";
-include("head.inc");
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php
-if (!is_array($config['shaper']['queue']) || count($config['shaper']['queue']) < 1) {
- echo gettext("Traffic shaping is not configured.");
- include("fend.inc");
- echo "</body></html>";
- exit;
-}
-?>
-<?php if (!$error): ?>
-<form action="status_queues.php" method="post">
-<script type="text/javascript">
-//<![CDATA[
- function getqueueactivity() {
- var url = "/status_queues.php";
- var pars = "getactivity=yes&stats=" + jQuery("#selStatistic").val();
- jQuery.ajax(
- url,
- {
- type: 'post',
- data: pars,
- complete: activitycallback
- });
- }
- function activitycallback(transport) {
- setTimeout('getqueueactivity()', 5100);
- }
- jQuery(document).ready(function() {
- setTimeout('getqueueactivity()', 150);
- });
-//]]>
-</script>
-<?php endif; ?>
-<table width="100%" border="1" cellpadding="0" cellspacing="0" summary="status queues">
-<?php if ($error): ?>
- <tr><td><?php echo $error; ?></td></tr>
-<?php else: ?>
- <tr>
- <td class="listhdr"><?=gettext("Queue"); ?></td>
- <td class="listhdr">
- <?=gettext("Statistics"); ?>
- <select id="selStatistic">
- <option value="0">PPS</option>
- <option value="1">Bandwidth</option>
- </select>
- </td>
- <td class="listhdr" width="1%"><?=gettext("PPS"); ?></td>
- <td class="listhdr" width="1%"><?=gettext("Bandwidth"); ?></td>
- <td class="listhdr" width="1%"><?=gettext("Borrows"); ?></td>
- <td class="listhdr" width="1%"><?=gettext("Suspends"); ?></td>
- <td class="listhdr" width="1%"><?=gettext("Drops"); ?></td>
- <td class="listhdr" width="1%"><?=gettext("Length"); ?></td>
- </tr>
-<?php
- $if_queue_list = get_configured_interface_list_by_realif(false, true);
- processQueues($altqstats, 0, "");
-?>
-<?php endif; ?>
-</table>
-<p>
- <strong><span class="red"><?=gettext("Note"); ?>:</span></strong><br />
- <?=gettext("Queue graphs take 5 seconds to sample data"); ?>.<br />
- <?=gettext("You can configure the Traffic Shaper"); ?> <a href="/firewall_shaper_wizards.php"><?=gettext("here"); ?></a>.
-</p>
-<script type="text/javascript">
-//<![CDATA[
- function StatsShowHide(classname) {
- var firstrow = jQuery("." + classname).first();
- if (firstrow.is(':visible')) {
- jQuery("." + classname).hide();
- } else {
- jQuery("." + classname).show();
- }
- }
-//]]>
-</script>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
-<?php
-function processQueues($altqstats, $level, $parent_name) {
- global $g;
- global $if_queue_list;
- $gray_value = 190 + $level * 10;
- if ($gray_value > 250) {
- $gray_value = 255;
- }
- $row_background = str_repeat(dechex($gray_value), 3);
- $parent_name = $parent_name . " queuerow" . $altqstats['name'] . $altqstats['interface'];
- $prev_if = $altqstats['interface'];
- foreach ($altqstats['queue'] as $q) {
- $if_name = "";
- foreach ($if_queue_list as $oif => $real_name) {
- if ($oif == $q['interface']) {
- $if_name = $real_name;
- break;
- }
- }
- if ($prev_if != $q['interface']) {
- echo "<tr><td colspan=\"8\" style=\"padding: 2px;\"><b>Interface ". htmlspecialchars(convert_real_interface_to_friendly_descr($q['interface'])) . "</b></td></tr>";
- $prev_if = $q['interface'];
- }
-?>
- <tr class="<?php echo $parent_name?>">
- <td bgcolor="#<?php echo $row_background?>" style="padding-left: <?php echo $level * 20?>px;">
- <font color="#000000">
- <?
- if (strstr($q['name'], "root_")) {
- echo "<a href=\"firewall_shaper.php?interface={$if_name}&amp;queue={$if_name}&amp;action=show\">Root queue</a>";
- } else {
- echo "<a href=\"firewall_shaper.php?interface={$if_name}&amp;queue={$q['name']}&amp;action=show\">" . htmlspecialchars($q['name']) . "</a>";
- }
- ?>
- </font>
- </td>
-<?php
- $cpuUsage = 0;
- echo "<td class=\"nowrap\" width=\"1%\" bgcolor=\"#{$row_background}\">";
- echo "<img src='./themes/".$g['theme']."/images/misc/bar_left.gif' height='10' width='4' border='0' align='middle' alt='' />";
- echo "<img src='./themes/".$g['theme']."/images/misc/bar_blue.gif' height='10' name='queue{$q['name']}{$q['interface']}widtha' id='queue{$q['name']}{$q['interface']}widtha' width='" . $cpuUsage . "' border='0' align='middle' alt='" . htmlspecialchars($q['name']) . "' />";
- echo "<img src='./themes/".$g['theme']."/images/misc/bar_gray.gif' height='10' name='queue{$q['name']}{$q['interface']}widthb' id='queue{$q['name']}{$q['interface']}widthb' width='" . (150 - $cpuUsage) . "' border='0' align='middle' alt='" . htmlspecialchars($q['name']) . "' />";
- echo "<img src='./themes/".$g['theme']."/images/misc/bar_right.gif' height='10' width='5' border='0' align='middle' alt='' /> ";
- if (is_array($q['queue'])) {
- echo "<a href=\"#\" onclick=\"StatsShowHide('queuerow{$q['name']}{$q['interface']}');return false\">+/-</a> ";
- }
- echo " </td>";
- echo "<td width=\"1%\" bgcolor=\"#{$row_background}\"><input style='border: 0px solid white; background-color:#{$row_background}; color:#000000;width:70px;text-align:right;' size='10' name='queue{$q['name']}{$q['interface']}pps' id='queue{$q['name']}{$q['interface']}pps' value='(" . gettext("Loading") . ")' align='left' /></td>";
- echo "<td width=\"1%\" bgcolor=\"#{$row_background}\"><input style='border: 0px solid white; background-color:#{$row_background}; color:#000000;width:80px;text-align:right;' size='10' name='queue{$q['name']}{$q['interface']}bps' id='queue{$q['name']}{$q['interface']}bps' value='' align='right' /></td>";
- echo "<td width=\"1%\" bgcolor=\"#{$row_background}\"><input style='border: 0px solid white; background-color:#{$row_background}; color:#000000;width:70px;text-align:right;' size='10' name='queue{$q['name']}{$q['interface']}borrows' id='queue{$q['name']}{$q['interface']}borrows' value='' align='right' /></td>";
- echo "<td width=\"1%\" bgcolor=\"#{$row_background}\"><input style='border: 0px solid white; background-color:#{$row_background}; color:#000000;width:70px;text-align:right;' size='10' name='queue{$q['name']}{$q['interface']}suspends' id='queue{$q['name']}{$q['interface']}suspends' value='' align='right' /></td>";
- echo "<td width=\"1%\" bgcolor=\"#{$row_background}\"><input style='border: 0px solid white; background-color:#{$row_background}; color:#000000;width:70px;text-align:right;' size='10' name='queue{$q['name']}{$q['interface']}drops' id='queue{$q['name']}{$q['interface']}drops' value='' align='right' /></td>";
- echo "<td width=\"1%\" bgcolor=\"#{$row_background}\"><input style='border: 0px solid white; background-color:#{$row_background}; color:#000000;width:70px;text-align:right;' size='10' name='queue{$q['name']}{$q['interface']}length' id='queue{$q['name']}{$q['interface']}length' value='' align='right' /></td>";
-?>
- </tr>
-<?php
- if (is_array($q['queue'])) {
- processQueues($q, $level + 1, $parent_name);
- }
- };
-}
-function statsQueues($xml) {
- global $statistics;
-
- $current = new QueueStats();
- $child = new QueueStats();
- $current->queuename = $xml['name'] . $xml['interface'];
- $current->queuelength = $xml['qlength'];
- $current->pps = $xml['measured'];
- $current->bandwidth = $xml['measuredspeedint'];
- $current->borrows = intval($xml['borrows']);
- $current->suspends = intval($xml['suspends']);
- $current->drops = intval($xml['droppedpkts']);
- if (is_array($xml['queue'])) {
- foreach ($xml['queue'] as $q) {
- $child = statsQueues($q);
- $current->pps += $child->pps;
- $current->bandwidth += $child->bandwidth;
- $current->borrows += $child->borrows;
- $current->suspends += $child->suspends;
- $current->drops += $child->drops;
- }
- }
- unset($child);
- $statistics[] = $current;
- return $current;
-}
-function format_bits($bits) {
- if ($bits >= 1000000000) {
- return sprintf("%.2f Gbps", $bits/1000000000);
- } else if ($bits >= 1000000) {
- return sprintf("%.2f Mbps", $bits/1000000);
- } else if ($bits >= 1000) {
- return sprintf("%.2f Kbps", $bits/1000);
- } else {
- return sprintf("%d bps", $bits);
- }
-}
-?>
diff --git a/usr/local/www/status_rrd_graph.php b/usr/local/www/status_rrd_graph.php
deleted file mode 100644
index ae9c709..0000000
--- a/usr/local/www/status_rrd_graph.php
+++ /dev/null
@@ -1,834 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_rrd_graph.php
- Part of pfSense
- Copyright (C) 2007 Seth Mos <seth.mos@dds.nl>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-status-rrdgraphs
-##|*NAME=Status: RRD Graphs page
-##|*DESCR=Allow access to the 'Status: RRD Graphs' page.
-##|*MATCH=status_rrd_graph.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require_once("rrd.inc");
-
-unset($input_errors);
-
-/* if the rrd graphs are not enabled redirect to settings page */
-if (!isset($config['rrd']['enable'])) {
- header("Location: status_rrd_graph_settings.php");
-}
-
-$rrddbpath = "/var/db/rrd/";
-chdir($rrddbpath);
-$databases = glob("*.rrd");
-
-
-if ($_GET['cat']) {
- $curcat = htmlspecialchars($_GET['cat']);
-} else {
- if (!empty($config['rrd']['category'])) {
- $curcat = $config['rrd']['category'];
- } else {
- $curcat = "system";
- }
-}
-
-if ($_GET['zone']) {
- $curzone = $_GET['zone'];
-} else {
- $curzone = '';
-}
-
-if ($_GET['period']) {
- $curperiod = $_GET['period'];
-} else {
- if (!empty($config['rrd']['period'])) {
- $curperiod = $config['rrd']['period'];
- } else {
- $curperiod = "absolute";
- }
-}
-
-if ($_GET['option']) {
- $curoption = $_GET['option'];
-} else {
- switch ($curcat) {
- case "system":
- $curoption = "processor";
- break;
- case "queues":
- $curoption = "queues";
- break;
- case "queuedrops":
- $curoption = "queuedrops";
- break;
- case "quality":
- foreach ($databases as $database) {
- if (preg_match("/[-]quality\.rrd/i", $database)) {
- /* pick off the 1st database we find that matches the quality graph */
- $name = explode("-", $database);
- $curoption = "$name[0]";
- continue 2;
- }
- }
- case "wireless":
- foreach ($databases as $database) {
- if (preg_match("/[-]wireless\.rrd/i", $database)) {
- /* pick off the 1st database we find that matches the wireless graph */
- $name = explode("-", $database);
- $curoption = "$name[0]";
- continue 2;
- }
- }
- case "cellular":
- foreach ($databases as $database) {
- if (preg_match("/[-]cellular\.rrd/i", $database)) {
- /* pick off the 1st database we find that matches the celullar graph */
- $name = explode("-", $database);
- $curoption = "$name[0]";
- continue 2;
- }
- }
- case "vpnusers":
- foreach ($databases as $database) {
- if (preg_match("/[-]vpnusers\.rrd/i", $database)) {
- /* pick off the 1st database we find that matches the VPN graphs */
- $name = explode("-", $database);
- $curoption = "$name[0]";
- continue 2;
- }
- }
- case "captiveportal":
- $curoption = "allgraphs";
- break;
- case "ntpd":
- if (isset($config['ntpd']['statsgraph'])) {
- $curoption = "allgraphs";
- } else {
- $curoption = "processor";
- $curcat = "system";
- }
- break;
- default:
- $curoption = "wan";
- break;
- }
-}
-
-$now = time();
-if ($curcat == "custom") {
- if (is_numeric($_GET['start'])) {
- if ($start < ($now - (3600 * 24 * 365 * 5))) {
- $start = $now - (8 * 3600);
- }
- $start = $_GET['start'];
- } else if ($_GET['start']) {
- $start = strtotime($_GET['start']);
- if ($start === FALSE || $start === -1) {
- $input_errors[] = gettext("Invalid start date/time:") . " '{$_GET['start']}'";
- $start = $now - (8 * 3600);
- }
- } else {
- $start = $now - (8 * 3600);
- }
-}
-
-if (is_numeric($_GET['end'])) {
- $end = $_GET['end'];
-} else if ($_GET['end']) {
- $end = strtotime($_GET['end']);
- if ($end === FALSE || $end === -1) {
- $input_errors[] = gettext("Invalid end date/time:") . " '{$_GET['end']}'";
- $end = $now;
- }
-} else {
- $end = $now;
-}
-
-/* this should never happen */
-if ($end < $start) {
- log_error("start $start is smaller than end $end");
- $end = $now;
-}
-
-$seconds = $end - $start;
-
-$styles = array('inverse' => gettext('Inverse'),
- 'absolute' => gettext('Absolute'));
-
-// Set default and override later
-$curstyle = "inverse";
-
-if ($_GET['style']) {
- foreach ($styles as $style) {
- if (strtoupper($style) == strtoupper($_GET['style'])) {
- $curstyle = $_GET['style'];
- }
- }
-} else {
- if (!empty($config['rrd']['style'])) {
- $curstyle = $config['rrd']['style'];
- } else {
- $curstyle = "inverse";
- }
-}
-
-/* sort names reverse so WAN comes first */
-rsort($databases);
-
-/* these boilerplate databases are required for the other menu choices */
-$dbheader = array("allgraphs-traffic.rrd",
- "allgraphs-quality.rrd",
- "allgraphs-wireless.rrd",
- "allgraphs-cellular.rrd",
- "allgraphs-vpnusers.rrd",
- "allgraphs-packets.rrd",
- "system-allgraphs.rrd",
- "system-throughput.rrd",
- "outbound-quality.rrd",
- "outbound-packets.rrd",
- "outbound-traffic.rrd");
-
-/* additional menu choices for the custom tab */
-$dbheader_custom = array("system-throughput.rrd");
-
-foreach ($databases as $database) {
- if (stristr($database, "-wireless")) {
- $wireless = true;
- }
- if (stristr($database, "-queues")) {
- $queues = true;
- }
- if (stristr($database, "-cellular") && !empty($config['ppps'])) {
- $cellular = true;
- }
- if (stristr($database, "-vpnusers")) {
- $vpnusers = true;
- }
- if (stristr($database, "captiveportal-") && is_array($config['captiveportal'])) {
- $captiveportal = true;
- }
- if (stristr($database, "ntpd") && isset($config['ntpd']['statsgraph'])) {
- $ntpd = true;
- }
-}
-/* append the existing array to the header */
-$ui_databases = array_merge($dbheader, $databases);
-$custom_databases = array_merge($dbheader_custom, $databases);
-
-$graphs = array("eighthour", "day", "week", "month", "quarter", "year", "fouryear");
-$periods = array("absolute" => gettext("Absolute Timespans"), "current" => gettext("Current Period"), "previous" => gettext("Previous Period"));
-$graph_length = array(
- "eighthour" => 28800,
- "day" => 86400,
- "week" => 604800,
- "month" => 2678400,
- "quarter" => 7948800,
- "year" => 31622400,
- "fouryear" => 126230400);
-
-$pgtitle = array(gettext("Status"), gettext("RRD Graphs"));
-
-$closehead = false;
-
-/* Load all CP zones */
-if ($captiveportal && is_array($config['captiveportal'])) {
- $cp_zones_tab_array = array();
- foreach ($config['captiveportal'] as $cpkey => $cp) {
- if (!isset($cp['enable'])) {
- continue;
- }
-
- if ($curzone == '') {
- $tabactive = true;
- $curzone = $cpkey;
- } elseif ($curzone == $cpkey) {
- $tabactive = true;
- } else {
- $tabactive = false;
- }
-
- $cp_zones_tab_array[] = array($cp['zone'], $tabactive, "status_rrd_graph.php?cat=captiveportal&zone=$cpkey");
- }
-}
-
-include("head.inc");
-?>
-
-<?php if ($curcat === "custom") { ?>
- <link rel="stylesheet" type="text/css" href="/javascript/jquery-ui-timepicker-addon/css/jquery-ui-timepicker-addon.css" />
- <?php if (file_exists("{$g['www_path']}/themes/{$g['theme']}/jquery-ui-1.11.1.css")) { ?>
- <link rel="stylesheet" type="text/css" href="/themes/<?= $g['theme'] ?>/jquery-ui-1.11.1.css" />
- <?php } else { ?>
- <link rel="stylesheet" type="text/css" href="/javascript/jquery/jquery-ui-1.11.1.css" />
- <?php } ?>
- <script type="text/javascript" src="/javascript/jquery-ui-timepicker-addon/js/jquery-ui-timepicker-addon.js"></script>
- <script type="text/javascript">
- //<![CDATA[
- jQuery(function ($) {
- var options = {
- dateFormat: 'mm/dd/yy',
- timeFormat: 'hh:mm:ss',
- showSecond: true
- };
- $("#startDateTime").datetimepicker(options);
- $("#endDateTime").datetimepicker(options);
- });
- //]]>
- </script>
-<?php } ?>
-
-<?php
-
-function get_dates($curperiod, $graph) {
- global $graph_length;
- $now = time();
- $end = $now;
-
- if ($curperiod == "absolute") {
- $start = $end - $graph_length[$graph];
- } else {
- $curyear = date('Y', $now);
- $curmonth = date('m', $now);
- $curweek = date('W', $now);
- $curweekday = date('N', $now) - 1; // We want to start on monday
- $curday = date('d', $now);
- $curhour = date('G', $now);
-
- switch ($curperiod) {
- case "previous":
- $offset = -1;
- break;
- default:
- $offset = 0;
- }
- switch ($graph) {
- case "eighthour":
- if ($curhour < 24) {
- $starthour = 16;
- }
- if ($curhour < 16) {
- $starthour = 8;
- }
- if ($curhour < 8) {
- $starthour = 0;
- }
-
- switch ($offset) {
- case 0:
- $houroffset = $starthour;
- break;
- default:
- $houroffset = $starthour + ($offset * 8);
- break;
- }
- $start = mktime($houroffset, 0, 0, $curmonth, $curday, $curyear);
- if ($offset != 0) {
- $end = mktime(($houroffset + 8), 0, 0, $curmonth, $curday, $curyear);
- }
- break;
- case "day":
- $start = mktime(0, 0, 0, $curmonth, ($curday + $offset), $curyear);
- if ($offset != 0) {
- $end = mktime(0, 0, 0, $curmonth, (($curday + $offset) + 1), $curyear);
- }
- break;
- case "week":
- switch ($offset) {
- case 0:
- $weekoffset = 0;
- break;
- default:
- $weekoffset = ($offset * 7) - 7;
- break;
- }
- $start = mktime(0, 0, 0, $curmonth, (($curday - $curweekday) + $weekoffset), $curyear);
- if ($offset != 0) {
- $end = mktime(0, 0, 0, $curmonth, (($curday - $curweekday) + $weekoffset + 7), $curyear);
- }
- break;
- case "month":
- $start = mktime(0, 0, 0, ($curmonth + $offset), 0, $curyear);
- if ($offset != 0) {
- $end = mktime(0, 0, 0, (($curmonth + $offset) + 1), 0, $curyear);
- }
- break;
- case "quarter":
- $start = mktime(0, 0, 0, (($curmonth - 2) + $offset), 0, $curyear);
- if ($offset != 0) {
- $end = mktime(0, 0, 0, (($curmonth + $offset) + 1), 0, $curyear);
- }
- break;
- case "year":
- $start = mktime(0, 0, 0, 1, 0, ($curyear + $offset));
- if ($offset != 0) {
- $end = mktime(0, 0, 0, 1, 0, (($curyear + $offset) +1));
- }
- break;
- case "fouryear":
- $start = mktime(0, 0, 0, 1, 0, (($curyear - 3) + $offset));
- if ($offset != 0) {
- $end = mktime(0, 0, 0, 1, 0, (($curyear + $offset) +1));
- }
- break;
- }
- }
- // echo "start $start ". date('l jS \of F Y h:i:s A', $start) .", end $end ". date('l jS \of F Y h:i:s A', $end) ."<br />";
- $dates = array();
- $dates['start'] = $start;
- $dates['end'] = $end;
- return $dates;
-}
-
-?>
-</head>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors && count($input_errors)) { print_input_errors($input_errors); } ?>
-<form name="form1" action="status_rrd_graph.php" method="get">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="rrd graphs">
- <tr>
- <td>
- <input type="hidden" name="cat" value="<?php echo "$curcat"; ?>" />
- <?php
- $tab_array = array();
- if ($curcat == "system") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("System"), $tabactive, "status_rrd_graph.php?cat=system");
- if ($curcat == "traffic") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Traffic"), $tabactive, "status_rrd_graph.php?cat=traffic");
- if ($curcat == "packets") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Packets"), $tabactive, "status_rrd_graph.php?cat=packets");
- if ($curcat == "quality") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Quality"), $tabactive, "status_rrd_graph.php?cat=quality");
- if ($queues) {
- if ($curcat == "queues") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Queues"), $tabactive, "status_rrd_graph.php?cat=queues");
- if ($curcat == "queuedrops") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("QueueDrops"), $tabactive, "status_rrd_graph.php?cat=queuedrops");
- }
- if ($wireless) {
- if ($curcat == "wireless") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Wireless"), $tabactive, "status_rrd_graph.php?cat=wireless");
- }
- if ($cellular) {
- if ($curcat == "cellular") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Cellular"), $tabactive, "status_rrd_graph.php?cat=cellular");
- }
- if ($vpnusers) {
- if ($curcat == "vpnusers") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array("VPN", $tabactive, "status_rrd_graph.php?cat=vpnusers");
- }
- if ($captiveportal) {
- if ($curcat == "captiveportal") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array("Captive Portal", $tabactive, "status_rrd_graph.php?cat=captiveportal");
- }
- if ($ntpd) {
- if ($curcat == "ntpd") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array("NTP", $tabactive, "status_rrd_graph.php?cat=ntpd");
- }
- if ($curcat == "custom") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Custom"), $tabactive, "status_rrd_graph.php?cat=custom");
- if ($curcat == "settings") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Settings"), $tabactive, "status_rrd_graph_settings.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
-<?php if ($curcat == "captiveportal") : ?>
- <tr>
- <td class="tabnavtbl">
- <?php display_top_tabs($cp_zones_tab_array); ?>
- </td>
- </tr>
-<?php endif; ?>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
- <tr>
- <td colspan="2" class="list"><p><b><?=gettext("Note: Change of color and/or style may not take effect until the next refresh");?></b></p></td>
- </tr>
- <tr>
- <td colspan="2" class="list">
- <?=gettext("Graphs:");?>
- <?php if (!empty($curzone)): ?>
- <input type="hidden" name="zone" value="<?= htmlspecialchars($curzone) ?>" />
- <?php endif; ?>
- <select name="option" class="formselect" style="z-index: -10;" onchange="document.form1.submit()">
- <?php
- if ($curcat == "custom") {
- foreach ($custom_databases as $db => $database) {
- $optionc = explode("-", $database);
- $friendly = convert_friendly_interface_to_friendly_descr(strtolower($optionc[0]));
- if (empty($friendly)) {
- $friendly = $optionc[0];
- }
- $search = array("-", ".rrd", $optionc[0]);
- $replace = array(" :: ", "", $friendly);
- echo "<option value=\"{$database}\"";
- $prettyprint = ucwords(str_replace($search, $replace, $database));
- if ($curoption == $database) {
- echo " selected=\"selected\"";
- }
- echo ">" . htmlspecialchars($prettyprint) . "</option>\n";
- }
- }
- foreach ($ui_databases as $db => $database) {
- if (!preg_match("/($curcat)/i", $database)) {
- continue;
- }
-
- if (($curcat == "captiveportal") && !empty($curzone) && !preg_match("/captiveportal-{$curzone}/i", $database)) {
- continue;
- }
-
- $optionc = explode("-", $database);
- $search = array("-", ".rrd", $optionc);
- $replace = array(" :: ", "", $friendly);
-
- switch ($curcat) {
- case "captiveportal":
- $optionc = str_replace($search, $replace, $optionc[2]);
- echo "<option value=\"$optionc\"";
- $prettyprint = ucwords(str_replace($search, $replace, $optionc));
- break;
- case "system":
- $optionc = str_replace($search, $replace, $optionc[1]);
- echo "<option value=\"$optionc\"";
- $prettyprint = ucwords(str_replace($search, $replace, $optionc));
- break;
- default:
- /* Deduce a interface if possible and use the description */
- $optionc = "$optionc[0]";
- $friendly = convert_friendly_interface_to_friendly_descr(strtolower($optionc));
- if (empty($friendly)) {
- $friendly = $optionc;
- }
- $search = array("-", ".rrd", $optionc);
- $replace = array(" :: ", "", $friendly);
- echo "<option value=\"$optionc\"";
- $prettyprint = ucwords(str_replace($search, $replace, $friendly));
- }
- if ($curoption == $optionc) {
- echo " selected=\"selected\"";
- }
- echo ">" . htmlspecialchars($prettyprint) . "</option>\n";
- }
- ?>
- </select>
-
- <?=gettext("Style:");?>
- <select name="style" class="formselect" style="z-index: -10;" onchange="document.form1.submit()">
- <?php
- foreach ($styles as $style => $styled) {
- echo "<option value=\"$style\"";
- if ($style == $curstyle) {
- echo " selected=\"selected\"";
- }
- echo ">" . htmlspecialchars($styled) . "</option>\n";
- }
- ?>
- </select>
-
-<?php
- if ($curcat == "custom") {
- // Custom tab displays start and end time selectors.
- $tz = date_default_timezone_get();
- $tz_msg = gettext("Enter date and/or time. Current timezone:") . " $tz";
- $start_fmt = strftime("%m/%d/%Y %H:%M:%S", $start);
- $end_fmt = strftime("%m/%d/%Y %H:%M:%S", $end);
-?>
- <?=gettext("Start:");?>
- <input id="startDateTime" title="<?= htmlentities($tz_msg); ?>." type="text" name="start" class="formfld unknown" size="24" value="<?= htmlentities($start_fmt); ?>" />
- <?=gettext("End:");?>
- <input id="endDateTime" title="<?= htmlentities($tz_msg); ?>." type="text" name="end" class="formfld unknown" size="24" value="<?= htmlentities($end_fmt); ?>" />
- <input type="submit" name="Submit" value="<?=gettext("Go"); ?>" />
-<?php
- } else {
- // Not on the custom tab - show the Period selector
-?>
- <?=gettext("Period:");?>
- <select name="period" class="formselect" style="z-index: -10;" onchange="document.form1.submit()">
- <?php
- foreach ($periods as $period => $value) {
- echo "<option value=\"$period\"";
- if ($period == $curperiod) {
- echo " selected=\"selected\"";
- }
- echo ">" . htmlspecialchars($value) . "</option>\n";
- }
- ?>
- </select>
-<?php
- }
-?>
- </td>
- </tr>
-<?php
- if ($curcat == "custom") {
- // Insert the chosen graph
- $curdatabase = $curoption;
- $graph = "custom-$curdatabase";
- if (in_array($curdatabase, $custom_databases)) {
- $id = "{$graph}-{$curoption}-{$curdatabase}";
- $id = preg_replace('/\./', '_', $id);
-
- echo "<tr><td colspan=\"2\" class=\"list\">\n";
- echo "<img border=\"0\" name=\"{$id}\" ";
- echo "id=\"{$id}\" alt=\"$prettydb Graph\" ";
- echo "src=\"status_rrd_graph_img.php?start={$start}&amp;end={$end}&amp;database={$curdatabase}&amp;style={$curstyle}&amp;graph={$graph}\" />\n";
- echo "<br /><hr /><br />\n";
- echo "</td></tr>\n";
- }
- } else {
- // Insert each of the graphs for the various set time periods
- foreach ($graphs as $graph) {
- /* check which databases are valid for our category */
- foreach ($ui_databases as $curdatabase) {
- if (!preg_match("/($curcat)/i", $curdatabase)) {
- continue;
- }
-
- if (($curcat == "captiveportal") && !empty($curzone) && !preg_match("/captiveportal-{$curzone}/i", $curdatabase)) {
- continue;
- }
-
- $optionc = explode("-", $curdatabase);
- $search = array("-", ".rrd", $optionc);
- $replace = array(" :: ", "", $friendly);
- switch ($curoption) {
- case "outbound":
- /* make sure we do not show the placeholder databases in the outbound view */
- if ((stristr($curdatabase, "outbound")) || (stristr($curdatabase, "allgraphs"))) {
- continue 2;
- }
- /* only show interfaces with a gateway */
- $optionc = "$optionc[0]";
- if (!interface_has_gateway($optionc)) {
- if (!isset($gateways_arr)) {
- if (preg_match("/quality/i", $curdatabase)) {
- $gateways_arr = return_gateways_array();
- } else {
- $gateways_arr = array();
- }
- }
- $found_gateway = false;
- foreach ($gateways_arr as $gw) {
- if ($gw['name'] == $optionc) {
- $found_gateway = true;
- break;
- }
- }
- if (!$found_gateway) {
- continue 2;
- }
- }
- if (!preg_match("/(^$optionc-|-$optionc\\.)/i", $curdatabase)) {
- continue 2;
- }
- break;
- case "allgraphs":
- /* make sure we do not show the placeholder databases in the all view */
- if ((stristr($curdatabase, "outbound")) || (stristr($curdatabase, "allgraphs"))) {
- continue 2;
- }
- break;
- default:
- /* just use the name here */
- if (!preg_match("/(^$curoption-|-$curoption\\.)/i", $curdatabase)) {
- continue 2;
- }
- }
- if (in_array($curdatabase, $ui_databases)) {
- $id = "{$graph}-{$curoption}-{$curdatabase}";
- $id = preg_replace('/\./', '_', $id);
-
- $dates = get_dates($curperiod, $graph);
- $start = $dates['start'];
- $end = $dates['end'];
- echo "<tr><td colspan=\"2\" class=\"list\">\n";
- echo "<img border=\"0\" name=\"{$id}\" ";
- echo "id=\"{$id}\" alt=\"$prettydb Graph\" ";
- echo "src=\"status_rrd_graph_img.php?start={$start}&amp;end={$end}&amp;database={$curdatabase}&amp;style={$curstyle}&amp;graph={$graph}\" />\n";
- echo "<br /><hr /><br />\n";
- echo "</td></tr>\n";
- }
- }
- }
- }
-?>
- <tr>
- <td colspan="2" class="list">
- <script type="text/javascript">
- //<![CDATA[
- function update_graph_images() {
- //alert('updating');
- var randomid = Math.floor(Math.random()*11);
- <?php
- foreach ($graphs as $graph) {
- /* check which databases are valid for our category */
- foreach ($ui_databases as $curdatabase) {
- if (!stristr($curdatabase, $curcat)) {
- continue;
- }
- $optionc = explode("-", $curdatabase);
- $search = array("-", ".rrd", $optionc);
- $replace = array(" :: ", "", $friendly);
- switch ($curoption) {
- case "outbound":
- /* make sure we do not show the placeholder databases in the outbound view */
- if ((stristr($curdatabase, "outbound")) || (stristr($curdatabase, "allgraphs"))) {
- continue 2;
- }
- /* only show interfaces with a gateway */
- $optionc = "$optionc[0]";
- if (!interface_has_gateway($optionc)) {
- if (!isset($gateways_arr)) {
- if (preg_match("/quality/i", $curdatabase)) {
- $gateways_arr = return_gateways_array();
- } else {
- $gateways_arr = array();
- }
- }
- $found_gateway = false;
- foreach ($gateways_arr as $gw) {
- if ($gw['name'] == $optionc) {
- $found_gateway = true;
- break;
- }
- }
- if (!$found_gateway) {
- continue 2;
- }
- }
- if (!preg_match("/(^$optionc-|-$optionc\\.)/i", $curdatabase)) {
- continue 2;
- }
- break;
- case "allgraphs":
- /* make sure we do not show the placeholder databases in the all view */
- if ((stristr($curdatabase, "outbound")) || (stristr($curdatabase, "allgraphs"))) {
- continue 2;
- }
- break;
- default:
- /* just use the name here */
- if (!preg_match("/(^$curoption-|-$curoption\\.)/i", $curdatabase)) {
- continue 2;
- }
- }
- $dates = get_dates($curperiod, $graph);
- $start = $dates['start'];
- if ($curperiod == "current") {
- $end = $dates['end'];
- }
- /* generate update events utilizing jQuery('') feature */
- $id = "{$graph}-{$curoption}-{$curdatabase}";
- $id = preg_replace('/\./', '_', $id);
-
- echo "\n";
- echo "\t\tjQuery('#{$id}').attr('src','status_rrd_graph_img.php?start={$start}&graph={$graph}&database={$curdatabase}&style={$curstyle}&tmp=' + randomid);\n";
- }
- }
- ?>
- window.setTimeout('update_graph_images()', 355000);
- }
- window.setTimeout('update_graph_images()', 355000);
- //]]>
- </script>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_rrd_graph_img.php b/usr/local/www/status_rrd_graph_img.php
deleted file mode 100644
index d28472f..0000000
--- a/usr/local/www/status_rrd_graph_img.php
+++ /dev/null
@@ -1,1278 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_rrd_graph_img.php
- Part of pfSense
- Copyright (C) 2009 Seth Mos <seth.mos@dds.nl>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /bin/rm /usr/local/bin/rrdtool
- pfSense_MODULE: system
-*/
-
-require_once("globals.inc");
-require_once("guiconfig.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("rrd.inc");
-
-global $g;
-
-$pgtitle = array(gettext("System"), gettext("RRD Graphs"), gettext("Image viewer"));
-
-if ($_GET['database']) {
- $curdatabase = basename($_GET['database']);
- $curdatabase = str_replace(array("<", ">", ";", "&", "'", '"'), "", htmlspecialchars_decode($curdatabase, ENT_QUOTES | ENT_HTML401));
-} else {
- $curdatabase = "wan-traffic.rrd";
-}
-
-if ($_GET['style']) {
- $curstyle = $_GET['style'];
-} else {
- $curstyle = "inverse";
-}
-
-/* this is used for temp name */
-if ($_GET['graph']) {
- $curgraph = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_GET['graph'], ENT_QUOTES | ENT_HTML401));
-} else {
- $curgraph = "custom";
-}
-
-$now = time();
-
-if (is_numeric($_GET['start'])) {
- $start = $_GET['start'];
-} else {
- $start = $now - (8 * 3600);
-}
-
-if (is_numeric($_GET['end'])) {
- $end = $_GET['end'];
-} else {
- $end = $now;
-}
-
-/* this should never happen */
-if ($end < $start) {
- log_error("start $start is smaller than end $end");
- $end = $now;
-}
-
-$seconds = $end - $start;
-
-$scales = array();
-$scales[14400] = "MINUTE:5:MINUTE:10:MINUTE:30:0:%H%:%M";
-$scales[57600] = "MINUTE:30:HOUR:1:HOUR:1:0:%H";
-$scales[172800] = "HOUR:1:HOUR:6:HOUR:2:0:%H";
-$scales[691200] = "HOUR:2:HOUR:12:DAY:1:0:%D %d";
-$scales[2764800] = "DAY:1:WEEK:1:WEEK:1:0:Week %W";
-$scales[16070400] = "WEEK:1:MONTH:1:MONTH:1:0:%b";
-$scales[42854400] = "MONTH:1:MONTH:1:MONTH:1:0:%b";
-
-$archives = array();
-$archives[1] = 1200;
-$archives[5] = 720;
-$archives[60] = 1860;
-$archives[1440] = 2284;
-
-$defOptions = array(
- 'to' => 1,
- 'parts' => 1,
- 'precision' => 'minute',
- 'distance' => FALSE,
- 'separator' => ', '
-);
-
-/* always set the average to the highest value as a fallback */
-$average = 1440 * 60;
-foreach ($archives as $rra => $value) {
- $archivestart = $now - ($rra * 60 * $value);
- if ($archivestart <= $start) {
- $average = $rra * 60;
- break;
- }
-}
-
-foreach ($scales as $scalelength => $value) {
- if ($scalelength >= $seconds) {
- $scale = $value;
- break;
- }
-}
-
-// log_error("start $start, end $end, archivestart $archivestart, average $average, scale $scale, seconds $seconds");
-
-/* Deduce a interface if possible and use the description */
-$curif = explode("-", $curdatabase);
-$curif = "$curif[0]";
-$friendly = convert_friendly_interface_to_friendly_descr(strtolower($curif));
-if ($friendly == "") {
- $friendly = $curif;
-}
-$search = array("-", ".rrd", $curif);
-$replace = array(" :: ", "", $friendly);
-$prettydb = ucwords(str_replace($search, $replace, $curdatabase));
-
-$rrddbpath = "/var/db/rrd/";
-$rrdtmppath = "/tmp/";
-$rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool";
-$uptime = "/usr/bin/uptime";
-$sed = "/usr/bin/sed";
-
-$havg = timeDiff($average, $defOptions);
-$hperiod = timeDiff($seconds, $defOptions);
-$data = true;
-
-/* Don't leave it up to RRD Tool to select the RRA and resolution to use. */
-/* Specify the RRA and resolution to use per the graph havg value. */
-switch ($havg) {
- case "1 minute": $step = 60; break;
- case "5 minutes": $step = 300; break;
- case "1 hour": $step = 3600; break;
- case "1 day": $step = 86400; break;
- default: $step = 0; break;
-}
-
-$rrddbpath = "/var/db/rrd/";
-chdir($rrddbpath);
-$databases = glob("*.rrd");
-rsort($databases);
-
-/* compare bytes/sec counters, divide bps by 8 */
-read_altq_config();
-if ($altq_list_queues[$curif]) {
- $altq =& $altq_list_queues[$curif];
- switch ($altq->GetBwscale()) {
- case "Gb":
- $factor = 1024 * 1024 * 1024;
- break;
- case "Mb":
- $factor = 1024 * 1024;
- break;
- case "Kb":
- $factor = 1024;
- break;
- case "b":
- default:
- $factor = 1;
- break;
- }
- $upstream = (($altq->GetBandwidth()*$factor)/8);
- if ($upstream != 0) {
- $downstream = $upstream; /* XXX: Ugly hack */
- } else {
- $downstream = $upstream = 12500000;
- }
- $upif = $curif;
- $downif = "lan"; /* XXX should this be set to something else?! */
-} else {
- $altq = null;
- $downstream = 12500000;
- $upstream = 12500000;
- $upif = "wan";
- $downif = "lan";
-}
-
-$speedlimit = ($upstream + $downstream);
-
-/* Set default colors explicitly, the theme can then override them below.
- This prevents missing colors in themes from crashing the graphs. */
-/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* 95th Percentile Lines Out, In */
-$colortraffic95 = array('660000', 'FF0000');
-
-/* State Table pfrate, pfstates, pfnat, srcip, dstip */
-$colorstates = array('00AA00', '990000', '0000FF', '000000', 'DD9B00');
-
-/* Processor Usage user, nice, system, int, processes */
-$colorprocessor = array('00AA00', '990000', '0000FF', 'DD9B00', '000000');
-
-/* Memory Usage active, inact, free, cache, wire */
-$colormemory = array('00AA00', '990000', '0000FF', '666666', 'DD9B00');
-
-/* MBUF Usage current, cache, total, max */
-$colormbuf = array('0080FF', '00E344', 'FF0000', '000000');
-
-/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
-$colorqueuesup = array('000000', '7B0000', '0080FF', '00E344', 'FF0000', '2217AA', 'FFC875', 'FF9900', 'CC0000');
-$colorqueuesdown = array('000000', '7B7B7B', '999999', 'BBBBBB', 'CCCCCC', 'D9D9D9', 'EEEEEE', 'FFFFFF', 'CCCCCC');
-
-$colorqueuesdropup = array('000000', '7B0000', '0080FF', '00E344', 'FF0000', '2217AA', 'FFC875', 'FF9900', 'CC0000');
-$colorqueuesdropdown = array('000000', '7B7B7B', '999999', 'BBBBBB', 'CCCCCC', 'D9D9D9', 'EEEEEE', 'FFFFFF', 'CCCCCC');
-
-/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
-$colorqualityrtt = array('990000', 'a83c3c', 'b36666', 'bd9090', 'cccccc', '000000');
-/* Quality Graph Loss */
-$colorqualityloss = 'ee0000';
-
-/* Wireless Graph SNR, Rate, Channel*/
-/* Cellular Graph RSSI, */
-$colorwireless = array('333333', 'a83c3c', '999999');
-
-/* SPAMD Times min area, avg area, max area, Time line */
-$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
-/* SPAMD Connections max area, min area, min line, max line, avg line */
-$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
-
-/* OpenVPN Users Online Users */
-$colorvpnusers = array('990000');
-
-/* NTPD stats offset, clk jit, sys jit, wander */
-$colorntpd = array('0080FF', '00E344', 'FF0000', '000000');
-
-/* Captive Portal Total Users Total Users */
-/* Captive Portal Concurrent Concurrent Users */
-$colorcaptiveportalusers = array('990000');
-
-/* select theme colors if the inclusion file exists */
-$rrdcolors = "{$g['www_path']}/themes/{$g['theme']}/rrdcolors.inc.php";
-if (file_exists($rrdcolors)) {
- include($rrdcolors);
-} else {
- log_error(sprintf(gettext("rrdcolors.inc.php for theme %s does not exist, using defaults!"), $g['theme']));
-}
-
-switch ($curstyle) {
- case "absolute":
- $multiplier = 1;
- $AREA = "LINE1";
- break;
- default:
- $multiplier = -1;
- $AREA = "AREA";
- break;
-}
-
-function timeDiff($time, $opt = array()) {
- // The default values
- $defOptions = array(
- 'to' => 0,
- 'parts' => 1,
- 'precision' => 'second',
- 'distance' => TRUE,
- 'separator' => ', '
- );
- $opt = array_merge($defOptions, $opt);
- // Default to current time if no to point is given
- (!$opt['to']) && ($opt['to'] = time());
- // Init an empty string
- $str = '';
- // To or From computation
- $diff = ($opt['to'] > $time) ? $opt['to'] - $time : $time - $opt['to'];
- // An array of label => periods of seconds;
- $periods = array(
- 'decade' => 315569260,
- 'year' => 31539600,
- 'month' => 2629744,
- 'week' => 604800,
- 'day' => 86400,
- 'hour' => 3600,
- 'minute' => 60,
- 'second' => 1
- );
- // 31539600, 31556926, 31622400
- // Round to precision
- if ($opt['precision'] != 'second') {
- $diff = round(($diff / $periods[$opt['precision']])) * $periods[$opt['precision']];
- }
- // Report the value is 'less than 1 ' precision period away
- (0 == $diff) && ($str = 'less than 1 ' . $opt['precision']);
- // Loop over each period
- foreach ($periods as $label => $value) {
- // Stitch together the time difference string
- (($x = round($diff / $value)) && $opt['parts']--) && $str .= ($str ? $opt['separator'] : '') . ($x .' '. $label. ($x > 1 ? 's' : ''));
- // Stop processing if no more parts are going to be reported.
- if ($opt['parts'] == 0 || $label == $opt['precision']) {
- break;
- }
- // Get ready for the next pass
- $diff -= $x * $value;
- }
- $opt['distance'] && $str .= ($str && $opt['to'] >= $time) ? ' ago' : ' away';
- return $str;
-}
-
-
-if ((strstr($curdatabase, "-traffic.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* define graphcmd for traffic stats */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start $start --end $end --step $step --vertical-label \"bits/sec\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--height 200 --width 620 ";
- $graphcmd .= "DEF:$curif-in_bytes_pass=$rrddbpath$curdatabase:inpass:AVERAGE:step=$step ";
- $graphcmd .= "DEF:$curif-out_bytes_pass=$rrddbpath$curdatabase:outpass:AVERAGE:step=$step ";
- $graphcmd .= "DEF:$curif-in_bytes_block=$rrddbpath$curdatabase:inblock:AVERAGE:step=$step ";
- $graphcmd .= "DEF:$curif-out_bytes_block=$rrddbpath$curdatabase:outblock:AVERAGE:step=$step ";
-
- $graphcmd .= "DEF:$curif-in6_bytes_pass=$rrddbpath$curdatabase:inpass6:AVERAGE:step=$step ";
- $graphcmd .= "DEF:$curif-out6_bytes_pass=$rrddbpath$curdatabase:outpass6:AVERAGE:step=$step ";
- $graphcmd .= "DEF:$curif-in6_bytes_block=$rrddbpath$curdatabase:inblock6:AVERAGE:step=$step ";
- $graphcmd .= "DEF:$curif-out6_bytes_block=$rrddbpath$curdatabase:outblock6:AVERAGE:step=$step ";
-
- $graphcmd .= "CDEF:\"$curif-in_bits_pass=$curif-in_bytes_pass,8,*\" ";
- $graphcmd .= "CDEF:\"$curif-out_bits_pass=$curif-out_bytes_pass,8,*\" ";
- $graphcmd .= "CDEF:\"$curif-in_bits_block=$curif-in_bytes_block,8,*\" ";
- $graphcmd .= "CDEF:\"$curif-out_bits_block=$curif-out_bytes_block,8,*\" ";
-
- $graphcmd .= "CDEF:\"$curif-in6_bits_pass=$curif-in6_bytes_pass,8,*\" ";
- $graphcmd .= "CDEF:\"$curif-out6_bits_pass=$curif-out6_bytes_pass,8,*\" ";
- $graphcmd .= "CDEF:\"$curif-in6_bits_block=$curif-in6_bytes_block,8,*\" ";
- $graphcmd .= "CDEF:\"$curif-out6_bits_block=$curif-out6_bytes_block,8,*\" ";
-
- $graphcmd .= "CDEF:\"$curif-in_bytes=$curif-in_bytes_pass,$curif-in_bytes_block,+\" ";
- $graphcmd .= "CDEF:\"$curif-out_bytes=$curif-out_bytes_pass,$curif-out_bytes_block,+\" ";
- $graphcmd .= "CDEF:\"$curif-in_bits=$curif-in_bits_pass,$curif-in_bits_block,+\" ";
- $graphcmd .= "CDEF:\"$curif-out_bits=$curif-out_bits_pass,$curif-out_bits_block,+\" ";
-
- $graphcmd .= "CDEF:\"$curif-in6_bytes=$curif-in6_bytes_pass,$curif-in6_bytes_block,+\" ";
- $graphcmd .= "CDEF:\"$curif-out6_bytes=$curif-out6_bytes_pass,$curif-out6_bytes_block,+\" ";
- $graphcmd .= "CDEF:\"$curif-in6_bits=$curif-in6_bits_pass,$curif-in6_bits_block,+\" ";
- $graphcmd .= "CDEF:\"$curif-out6_bits=$curif-out6_bits_pass,$curif-out6_bits_block,+\" ";
-
- $graphcmd .= "CDEF:\"$curif-bits_io=$curif-in_bits,$curif-out_bits,+\" ";
- $graphcmd .= "CDEF:\"$curif-out_bits_block_neg=$curif-out_bits_block,$multiplier,*\" ";
- $graphcmd .= "CDEF:\"$curif-out_bits_pass_neg=$curif-out_bits_pass,$multiplier,*\" ";
-
- $graphcmd .= "CDEF:\"$curif-bits6_io=$curif-in6_bits,$curif-out6_bits,+\" ";
- $graphcmd .= "CDEF:\"$curif-out6_bits_block_neg=$curif-out6_bits_block,$multiplier,*\" ";
- $graphcmd .= "CDEF:\"$curif-out6_bits_pass_neg=$curif-out6_bits_pass,$multiplier,*\" ";
-
- $graphcmd .= "CDEF:\"$curif-bytes_in_pass=$curif-in_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_pass,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_out_pass=$curif-out_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_pass,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_in_block=$curif-in_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_block,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_out_block=$curif-out_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_block,IF,$average,*\" ";
-
- $graphcmd .= "CDEF:\"$curif-bytes_in6_pass=$curif-in6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_pass,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_out6_pass=$curif-out6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_pass,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_in6_block=$curif-in6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_block,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_out6_block=$curif-out6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_block,IF,$average,*\" ";
-
- $graphcmd .= "CDEF:\"$curif-bytes_pass=$curif-bytes_in_pass,$curif-bytes_out_pass,+\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_block=$curif-bytes_in_block,$curif-bytes_out_block,+\" ";
-
- $graphcmd .= "CDEF:\"$curif-bytes_pass6=$curif-bytes_in6_pass,$curif-bytes_out6_pass,+\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_block6=$curif-bytes_in6_block,$curif-bytes_out6_block,+\" ";
-
- $graphcmd .= "CDEF:\"$curif-bytes_in_t_pass=$curif-in_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_pass,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_out_t_pass=$curif-out_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_pass,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_in_t_block=$curif-in_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_block,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_out_t_block=$curif-out_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_block,IF,$seconds,*\" ";
-
- $graphcmd .= "CDEF:\"$curif-bytes_in6_t_pass=$curif-in6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_pass,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_out6_t_pass=$curif-out6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_pass,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_in6_t_block=$curif-in6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_block,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_out6_t_block=$curif-out6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_block,IF,$seconds,*\" ";
-
- $graphcmd .= "CDEF:\"$curif-bytes_t_pass=$curif-bytes_in_t_pass,$curif-bytes_out_t_pass,+\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_t_block=$curif-bytes_in_t_block,$curif-bytes_out_t_block,+\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_t=$curif-bytes_t_pass,$curif-bytes_t_block,+\" ";
-
- $graphcmd .= "CDEF:\"$curif-bytes_t_pass6=$curif-bytes_in6_t_pass,$curif-bytes_out6_t_pass,+\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_t_block6=$curif-bytes_in6_t_block,$curif-bytes_out6_t_block,+\" ";
- $graphcmd .= "CDEF:\"$curif-bytes_t6=$curif-bytes_t_pass6,$curif-bytes_t_block6,+\" ";
- $graphcmd .= "VDEF:\"$curif-in_bits_95=$curif-in_bits,95,PERCENT\" ";
- $graphcmd .= "CDEF:\"$curif-out_bits_mul=$curif-out_bits,$multiplier,*\" ";
- $perc = $multiplier > 0 ? "95" : "5";
- $graphcmd .= "VDEF:\"$curif-out_bits_95=$curif-out_bits_mul,{$perc},PERCENT\" ";
-
- $graphcmd .= "AREA:\"$curif-in_bits_block#{$colortrafficdown[1]}:$curif-in-block\" ";
- $graphcmd .= "AREA:\"$curif-in_bits_pass#{$colortrafficdown[0]}:$curif-in-pass:STACK\" ";
- $graphcmd .= "AREA:\"$curif-in6_bits_block#{$colortrafficdown[3]}:$curif-in6-block:STACK\" ";
- $graphcmd .= "AREA:\"$curif-in6_bits_pass#{$colortrafficdown[2]}:$curif-in6-pass:STACK\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
-
- $graphcmd .= "{$AREA}:\"$curif-out_bits_block_neg#{$colortrafficup[1]}:$curif-out-block\" ";
- $graphcmd .= "{$AREA}:\"$curif-out_bits_pass_neg#{$colortrafficup[0]}:$curif-out-pass:STACK\" ";
- $graphcmd .= "{$AREA}:\"$curif-out6_bits_block_neg#{$colortrafficup[3]}:$curif-out6-block:STACK\" ";
- $graphcmd .= "{$AREA}:\"$curif-out6_bits_pass_neg#{$colortrafficup[2]}:$curif-out6-pass:STACK\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "HRULE:\"$curif-in_bits_95#{$colortraffic95[1]}:$curif-in (95%)\" ";
- $graphcmd .= "HRULE:\"$curif-out_bits_95#{$colortraffic95[0]}:$curif-out (95%)\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t maximum\t average\t\t current\t period\t 95th percentile\\n\" ";
- $graphcmd .= "COMMENT:\"IPv4 in-pass\t\" ";
- $graphcmd .= "GPRINT:\"$curif-in_bits_pass:MAX:%7.2lf %sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-in_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-in_bits_pass:LAST:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-bytes_in_t_pass:AVERAGE:%7.2lf %sB i\" ";
- $graphcmd .= "GPRINT:\"$curif-in_bits_95:%7.2lf %sb/s\" ";
-
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"IPv4 out-pass\t\" ";
- $graphcmd .= "GPRINT:\"$curif-out_bits_pass:MAX:%7.2lf %sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-out_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-out_bits_pass:LAST:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-bytes_out_t_pass:AVERAGE:%7.2lf %sB o\" ";
- $graphcmd .= "GPRINT:\"$curif-out_bits_95:%7.2lf %sb/s\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"IPv4 in-block\t\" ";
- $graphcmd .= "GPRINT:\"$curif-in_bits_block:MAX:%7.2lf %sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-in_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-in_bits_block:LAST:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-bytes_in_t_block:AVERAGE:%7.2lf %sB i\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"IPv4 out-block\t\" ";
- $graphcmd .= "GPRINT:\"$curif-out_bits_block:MAX:%7.2lf %sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-out_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-out_bits_block:LAST:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-bytes_out_t_block:AVERAGE:%7.2lf %sB o\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"IPv6 in-pass\t\" ";
- $graphcmd .= "GPRINT:\"$curif-in6_bits_pass:MAX:%7.2lf %sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-in6_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-in6_bits_pass:LAST:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-bytes_in6_t_pass:AVERAGE:%7.2lf %sB i\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"IPv6 out-pass\t\" ";
- $graphcmd .= "GPRINT:\"$curif-out6_bits_pass:MAX:%7.2lf %sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-out6_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-out6_bits_pass:LAST:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-bytes_out6_t_pass:AVERAGE:%7.2lf %sB o\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"IPv6 in-block\t\" ";
- $graphcmd .= "GPRINT:\"$curif-in6_bits_block:MAX:%7.2lf %sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-in6_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-in6_bits_block:LAST:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-bytes_in6_t_block:AVERAGE:%7.2lf %sB i\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"IPv6 out-block\t\" ";
- $graphcmd .= "GPRINT:\"$curif-out6_bits_block:MAX:%7.2lf %sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-out6_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-out6_bits_block:LAST:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"$curif-bytes_out6_t_block:AVERAGE:%7.2lf %sB o\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif (strstr($curdatabase, "-throughput.rrd")) {
- /* define graphcmd for throughput stats */
- /* this gathers all interface statistics, the database does not actually exist */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start $start --end $end --step $step ";
- $graphcmd .= "--vertical-label \"bits/sec\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--height 200 --width 620 ";
-
- $iflist = get_configured_interface_list();
- $g = 0;
- $operand = "";
- $comma = "";
- $graphtputbip = "";
- $graphtputbop = "";
- $graphtputbtp = "";
- $graphtputbib = "";
- $graphtputbob = "";
- $graphtputbtb = "";
- $graphtputbyip = "";
- $graphtputbyop = "";
- $graphtputbytp = "";
- $graphtputbyib = "";
- $graphtputbyob = "";
- $graphtputbytb = "";
- foreach ($iflist as $ifname) {
- /* collect all interface stats */
- $graphcmd .= "DEF:\"{$ifname}-in_bytes_pass={$rrddbpath}{$ifname}-traffic.rrd:inpass:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"{$ifname}-out_bytes_pass={$rrddbpath}{$ifname}-traffic.rrd:outpass:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"{$ifname}-in_bytes_block={$rrddbpath}{$ifname}-traffic.rrd:inblock:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"{$ifname}-out_bytes_block={$rrddbpath}{$ifname}-traffic.rrd:outblock:AVERAGE:step=$step\" ";
-
- $graphcmd .= "CDEF:\"{$ifname}-in_bytes={$ifname}-in_bytes_pass,{$ifname}-in_bytes_block,+\" ";
- $graphcmd .= "CDEF:\"{$ifname}-out_bytes={$ifname}-out_bytes_pass,{$ifname}-out_bytes_block,+\" ";
-
- $graphcmd .= "CDEF:\"{$ifname}-in_bits_pass={$ifname}-in_bytes_pass,8,*\" ";
- $graphcmd .= "CDEF:\"{$ifname}-out_bits_pass={$ifname}-out_bytes_pass,8,*\" ";
- $graphcmd .= "CDEF:\"{$ifname}-bits_io_pass={$ifname}-in_bits_pass,{$ifname}-out_bits_pass,+\" ";
-
- $graphcmd .= "CDEF:\"{$ifname}-in_bits_block={$ifname}-in_bytes_block,8,*\" ";
- $graphcmd .= "CDEF:\"{$ifname}-out_bits_block={$ifname}-out_bytes_block,8,*\" ";
- $graphcmd .= "CDEF:\"{$ifname}-bits_io_block={$ifname}-in_bits_block,{$ifname}-out_bits_block,+\" ";
-
- $graphcmd .= "CDEF:\"{$ifname}-bytes_in_pass={$ifname}-in_bytes_pass,0,$speedlimit,LIMIT,UN,0,{$ifname}-in_bytes_pass,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"{$ifname}-bytes_out_pass={$ifname}-out_bytes_pass,0,$speedlimit,LIMIT,UN,0,{$ifname}-out_bytes_pass,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"{$ifname}-bytes_in_block={$ifname}-in_bytes_block,0,$speedlimit,LIMIT,UN,0,{$ifname}-in_bytes_block,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"{$ifname}-bytes_out_block={$ifname}-out_bytes_block,0,$speedlimit,LIMIT,UN,0,{$ifname}-out_bytes_block,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"{$ifname}-bytes_pass={$ifname}-bytes_in_pass,{$ifname}-bytes_out_pass,+\" ";
- $graphcmd .= "CDEF:\"{$ifname}-bytes_block={$ifname}-bytes_in_pass,{$ifname}-bytes_out_block,+\" ";
-
- $graphcmd .= "CDEF:\"{$ifname}-bytes_in_t_pass={$ifname}-in_bytes,0,$speedlimit,LIMIT,UN,0,{$ifname}-in_bytes_pass,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"{$ifname}-bytes_in_t_block={$ifname}-in_bytes,0,$speedlimit,LIMIT,UN,0,{$ifname}-in_bytes_block,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"{$ifname}-bytes_out_t_pass={$ifname}-out_bytes,0,$speedlimit,LIMIT,UN,0,{$ifname}-out_bytes_pass,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"{$ifname}-bytes_out_t_block={$ifname}-out_bytes,0,$speedlimit,LIMIT,UN,0,{$ifname}-out_bytes_block,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"{$ifname}-bytes_t_pass={$ifname}-bytes_in_t_pass,{$ifname}-bytes_out_t_pass,+\" ";
- $graphcmd .= "CDEF:\"{$ifname}-bytes_t_block={$ifname}-bytes_in_t_block,{$ifname}-bytes_out_t_block,+\" ";
- if ($g > 0) {
- $operand .= ",+";
- $comma = ",";
- }
- $graphtputbip .= "{$comma}{$ifname}-in_bits_pass";
- $graphtputbop .= "{$comma}{$ifname}-out_bits_pass";
- $graphtputbtp .= "{$comma}{$ifname}-bits_io_pass";
- $graphtputbib .= "{$comma}{$ifname}-in_bits_block";
- $graphtputbob .= "{$comma}{$ifname}-out_bits_block";
- $graphtputbtb .= "{$comma}{$ifname}-bits_io_block";
- $graphtputbyip .= "{$comma}{$ifname}-bytes_in_t_pass";
- $graphtputbyop .= "{$comma}{$ifname}-bytes_out_t_pass";
- $graphtputbyib .= "{$comma}{$ifname}-bytes_in_t_block";
- $graphtputbyob .= "{$comma}{$ifname}-bytes_out_t_block";
- $graphtputbytp .= "{$comma}{$ifname}-bytes_t_pass";
- $graphtputbytb .= "{$comma}{$ifname}-bytes_t_block";
- $g++;
- }
- $graphcmd .= "CDEF:\"tput-in_bits_pass={$graphtputbip}{$operand}\" ";
- $graphcmd .= "CDEF:\"tput-out_bits_pass={$graphtputbop}{$operand}\" ";
- $graphcmd .= "CDEF:\"tput-bits_io_pass={$graphtputbtp}{$operand}\" ";
-
- $graphcmd .= "CDEF:\"tput-in_bits_block={$graphtputbib}{$operand}\" ";
- $graphcmd .= "CDEF:\"tput-out_bits_block={$graphtputbob}{$operand}\" ";
- $graphcmd .= "CDEF:\"tput-bits_io_block={$graphtputbtb}{$operand}\" ";
-
- $graphcmd .= "CDEF:\"tput-out_bits_pass_neg=tput-out_bits_pass,$multiplier,*\" ";
- $graphcmd .= "CDEF:\"tput-out_bits_block_neg=tput-out_bits_block,$multiplier,*\" ";
-
- $graphcmd .= "CDEF:\"tput-bytes_in_t_pass={$graphtputbyip}{$operand}\" ";
- $graphcmd .= "CDEF:\"tput-bytes_out_t_pass={$graphtputbyop}{$operand}\" ";
- $graphcmd .= "CDEF:\"tput-bytes_t_pass={$graphtputbytp}{$operand}\" ";
-
- $graphcmd .= "CDEF:\"tput-bytes_in_t_block={$graphtputbyib}{$operand}\" ";
- $graphcmd .= "CDEF:\"tput-bytes_out_t_block={$graphtputbyob}{$operand}\" ";
- $graphcmd .= "CDEF:\"tput-bytes_t_block={$graphtputbytb}{$operand}\" ";
-
- $graphcmd .= "AREA:\"tput-in_bits_block#{$colortrafficdown[0]}:in-block \" ";
- $graphcmd .= "AREA:\"tput-in_bits_pass#{$colortrafficdown[1]}:in-pass \" ";
-
- $graphcmd .= "{$AREA}:\"tput-out_bits_block_neg#{$colortrafficup[1]}:out-block \" ";
- $graphcmd .= "{$AREA}:\"tput-out_bits_pass_neg#{$colortrafficup[0]}:out-pass \" ";
-
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t maximum average current period\\n\" ";
- $graphcmd .= "COMMENT:\"in-pass\t\" ";
- $graphcmd .= "GPRINT:\"tput-in_bits_pass:MAX:%7.2lf %sb/s\" ";
- $graphcmd .= "GPRINT:\"tput-in_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"tput-in_bits_pass:LAST:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"tput-bytes_in_t_pass:AVERAGE:%7.2lf %sB i\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"out-pass\t\" ";
- $graphcmd .= "GPRINT:\"tput-out_bits_pass:MAX:%7.2lf %sb/s\" ";
- $graphcmd .= "GPRINT:\"tput-out_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"tput-out_bits_pass:LAST:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"tput-bytes_out_t_pass:AVERAGE:%7.2lf %sB o\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"in-block\t\" ";
- $graphcmd .= "GPRINT:\"tput-in_bits_block:MAX:%7.2lf %sb/s\" ";
- $graphcmd .= "GPRINT:\"tput-in_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"tput-in_bits_block:LAST:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"tput-bytes_in_t_block:AVERAGE:%7.2lf %sB i\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"out-block\t\" ";
- $graphcmd .= "GPRINT:\"tput-out_bits_block:MAX:%7.2lf %sb/s\" ";
- $graphcmd .= "GPRINT:\"tput-out_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"tput-out_bits_block:LAST:%7.2lf %Sb/s\" ";
- $graphcmd .= "GPRINT:\"tput-bytes_out_t_block:AVERAGE:%7.2lf %sB o\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif ((strstr($curdatabase, "-packets.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* define graphcmd for packets stats */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start $start --end $end --step $step ";
- $graphcmd .= "--vertical-label \"packets/sec\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--height 200 --width 620 ";
- $graphcmd .= "DEF:\"$curif-in_pps_pass=$rrddbpath$curdatabase:inpass:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"$curif-out_pps_pass=$rrddbpath$curdatabase:outpass:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"$curif-in_pps_block=$rrddbpath$curdatabase:inblock:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"$curif-out_pps_block=$rrddbpath$curdatabase:outblock:AVERAGE:step=$step\" ";
-
- $graphcmd .= "DEF:\"$curif-in6_pps_pass=$rrddbpath$curdatabase:inpass6:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"$curif-out6_pps_pass=$rrddbpath$curdatabase:outpass6:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"$curif-in6_pps_block=$rrddbpath$curdatabase:inblock6:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"$curif-out6_pps_block=$rrddbpath$curdatabase:outblock6:AVERAGE:step=$step\" ";
-
- $graphcmd .= "CDEF:\"$curif-in_pps=$curif-in_pps_pass,$curif-in_pps_block,+\" ";
- $graphcmd .= "CDEF:\"$curif-out_pps=$curif-out_pps_pass,$curif-out_pps_block,+\" ";
- $graphcmd .= "CDEF:\"$curif-out_pps_pass_neg=$curif-out_pps_pass,$multiplier,*\" ";
- $graphcmd .= "CDEF:\"$curif-out_pps_block_neg=$curif-out_pps_block,$multiplier,*\" ";
-
- $graphcmd .= "CDEF:\"$curif-in6_pps=$curif-in6_pps_pass,$curif-in6_pps_block,+\" ";
- $graphcmd .= "CDEF:\"$curif-out6_pps=$curif-out6_pps_pass,$curif-out6_pps_block,+\" ";
- $graphcmd .= "CDEF:\"$curif-out6_pps_pass_neg=$curif-out6_pps_pass,$multiplier,*\" ";
- $graphcmd .= "CDEF:\"$curif-out6_pps_block_neg=$curif-out6_pps_block,$multiplier,*\" ";
-
- $graphcmd .= "CDEF:\"$curif-pps_in_pass=$curif-in_pps_pass,0,12500000,LIMIT,UN,0,$curif-in_pps_pass,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"$curif-pps_out_pass=$curif-out_pps_pass,0,12500000,LIMIT,UN,0,$curif-out_pps_pass,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"$curif-pps_in_block=$curif-in_pps_block,0,12500000,LIMIT,UN,0,$curif-in_pps_block,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"$curif-pps_out_block=$curif-out_pps_block,0,12500000,LIMIT,UN,0,$curif-out_pps_block,IF,$average,*\" ";
-
- $graphcmd .= "CDEF:\"$curif-pps_in6_pass=$curif-in6_pps_pass,0,12500000,LIMIT,UN,0,$curif-in6_pps_pass,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"$curif-pps_out6_pass=$curif-out6_pps_pass,0,12500000,LIMIT,UN,0,$curif-out6_pps_pass,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"$curif-pps_in6_block=$curif-in6_pps_block,0,12500000,LIMIT,UN,0,$curif-in6_pps_block,IF,$average,*\" ";
- $graphcmd .= "CDEF:\"$curif-pps_out6_block=$curif-out6_pps_block,0,12500000,LIMIT,UN,0,$curif-out6_pps_block,IF,$average,*\" ";
-
- $graphcmd .= "CDEF:\"$curif-pps_io=$curif-in_pps,$curif-out_pps,+\" ";
- $graphcmd .= "CDEF:\"$curif-pps_pass=$curif-pps_in_pass,$curif-pps_out_pass,+\" ";
- $graphcmd .= "CDEF:\"$curif-pps_block=$curif-pps_in_block,$curif-pps_out_block,+\" ";
-
- $graphcmd .= "CDEF:\"$curif-pps_io6=$curif-in6_pps,$curif-out6_pps,+\" ";
- $graphcmd .= "CDEF:\"$curif-pps_pass6=$curif-pps_in6_pass,$curif-pps_out6_pass,+\" ";
- $graphcmd .= "CDEF:\"$curif-pps_block6=$curif-pps_in6_block,$curif-pps_out6_block,+\" ";
-
- $graphcmd .= "CDEF:\"$curif-pps_in_t_pass=$curif-in_pps_pass,0,12500000,LIMIT,UN,0,$curif-in_pps_pass,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"$curif-pps_out_t_pass=$curif-out_pps_pass,0,12500000,LIMIT,UN,0,$curif-out_pps_pass,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"$curif-pps_in_t_block=$curif-in_pps_block,0,12500000,LIMIT,UN,0,$curif-in_pps_block,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"$curif-pps_out_t_block=$curif-out_pps_block,0,12500000,LIMIT,UN,0,$curif-out_pps_block,IF,$seconds,*\" ";
-
- $graphcmd .= "CDEF:\"$curif-pps_in6_t_pass=$curif-in6_pps_pass,0,12500000,LIMIT,UN,0,$curif-in6_pps_pass,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"$curif-pps_out6_t_pass=$curif-out6_pps_pass,0,12500000,LIMIT,UN,0,$curif-out6_pps_pass,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"$curif-pps_in6_t_block=$curif-in6_pps_block,0,12500000,LIMIT,UN,0,$curif-in6_pps_block,IF,$seconds,*\" ";
- $graphcmd .= "CDEF:\"$curif-pps_out6_t_block=$curif-out6_pps_block,0,12500000,LIMIT,UN,0,$curif-out6_pps_block,IF,$seconds,*\" ";
-
- $graphcmd .= "CDEF:\"$curif-pps_t_pass=$curif-pps_in_t_pass,$curif-pps_out_t_pass,+\" ";
- $graphcmd .= "CDEF:\"$curif-pps_t_block=$curif-pps_in_t_block,$curif-pps_out_t_block,+\" ";
-
- $graphcmd .= "CDEF:\"$curif-pps_t_pass6=$curif-pps_in6_t_pass,$curif-pps_out6_t_pass,+\" ";
- $graphcmd .= "CDEF:\"$curif-pps_t_block6=$curif-pps_in6_t_block,$curif-pps_out6_t_block,+\" ";
-
- $graphcmd .= "AREA:\"$curif-in_pps_block#{$colorpacketsdown[1]}:$curif-in-block\" ";
- $graphcmd .= "AREA:\"$curif-in_pps_pass#{$colorpacketsdown[0]}:$curif-in-pass:STACK\" ";
- $graphcmd .= "AREA:\"$curif-in6_pps_block#{$colorpacketsdown[3]}:$curif-in6-block:STACK\" ";
- $graphcmd .= "AREA:\"$curif-in6_pps_pass#{$colorpacketsdown[2]}:$curif-in6-pass:STACK\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "$AREA:\"$curif-out_pps_block_neg#{$colorpacketsup[1]}:$curif-out-block\" ";
- $graphcmd .= "$AREA:\"$curif-out_pps_pass_neg#{$colorpacketsup[0]}:$curif-out-pass:STACK\" ";
- $graphcmd .= "$AREA:\"$curif-out6_pps_block_neg#{$colorpacketsup[3]}:$curif-out6-block:STACK\" ";
- $graphcmd .= "$AREA:\"$curif-out6_pps_pass_neg#{$colorpacketsup[2]}:$curif-out6-pass:STACK\" ";
-
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t maximum\t\t average\t current\t period\\n\" ";
- $graphcmd .= "COMMENT:\"in-pass\t\" ";
- $graphcmd .= "GPRINT:\"$curif-in_pps_pass:MAX:%7.2lf %s pps\" ";
- $graphcmd .= "GPRINT:\"$curif-in_pps_pass:AVERAGE:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-in_pps_pass:LAST:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-pps_in_t_pass:AVERAGE:%7.2lf %s pkts\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"out-pass\t\" ";
- $graphcmd .= "GPRINT:\"$curif-out_pps_pass:MAX:%7.2lf %s pps\" ";
- $graphcmd .= "GPRINT:\"$curif-out_pps_pass:AVERAGE:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-out_pps_pass:LAST:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-pps_out_t_pass:AVERAGE:%7.2lf %s pkts\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"in-block\t\" ";
- $graphcmd .= "GPRINT:\"$curif-in_pps_block:MAX:%7.2lf %s pps\" ";
- $graphcmd .= "GPRINT:\"$curif-in_pps_block:AVERAGE:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-in_pps_block:LAST:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-pps_in_t_block:AVERAGE:%7.2lf %s pkts\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"out-block\t\" ";
- $graphcmd .= "GPRINT:\"$curif-out_pps_block:MAX:%7.2lf %s pps\" ";
- $graphcmd .= "GPRINT:\"$curif-out_pps_block:AVERAGE:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-out_pps_block:LAST:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-pps_out_t_block:AVERAGE:%7.2lf %s pkts\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
-
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"in-pass6\t\" ";
- $graphcmd .= "GPRINT:\"$curif-in6_pps_pass:MAX:%7.2lf %s pps\" ";
- $graphcmd .= "GPRINT:\"$curif-in6_pps_pass:AVERAGE:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-in6_pps_pass:LAST:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-pps_in6_t_pass:AVERAGE:%7.2lf %s pkts\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"out-pass6\t\" ";
- $graphcmd .= "GPRINT:\"$curif-out6_pps_pass:MAX:%7.2lf %s pps\" ";
- $graphcmd .= "GPRINT:\"$curif-out6_pps_pass:AVERAGE:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-out6_pps_pass:LAST:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-pps_out6_t_pass:AVERAGE:%7.2lf %s pkts\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"in-block6\t\" ";
- $graphcmd .= "GPRINT:\"$curif-in6_pps_block:MAX:%7.2lf %s pps\" ";
- $graphcmd .= "GPRINT:\"$curif-in6_pps_block:AVERAGE:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-in6_pps_block:LAST:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-pps_in6_t_block:AVERAGE:%7.2lf %s pkts\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"out-pass6\t\" ";
- $graphcmd .= "GPRINT:\"$curif-out6_pps_block:MAX:%7.2lf %s pps\" ";
- $graphcmd .= "GPRINT:\"$curif-out6_pps_block:AVERAGE:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-out6_pps_block:LAST:%7.2lf %S pps\" ";
- $graphcmd .= "GPRINT:\"$curif-pps_out6_t_block:AVERAGE:%7.2lf %s pkts\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif ((strstr($curdatabase, "-wireless.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* define graphcmd for packets stats */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start $start --end $end --step $step ";
- $graphcmd .= "--vertical-label \"snr/channel/rate\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--height 200 --width 620 ";
- $graphcmd .= "DEF:\"$curif-snr=$rrddbpath$curdatabase:snr:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"$curif-rate=$rrddbpath$curdatabase:rate:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"$curif-channel=$rrddbpath$curdatabase:channel:AVERAGE:step=$step\" ";
- $graphcmd .= "LINE2:\"$curif-snr#{$colorwireless[0]}:$curif-snr\" ";
- $graphcmd .= "LINE2:\"$curif-rate#{$colorwireless[1]}:$curif-rate\" ";
- $graphcmd .= "LINE2:\"$curif-channel#{$colorwireless[2]}:$curif-channel\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t maximum\t\t average\t current\\n\" ";
- $graphcmd .= "COMMENT:\"SNR\t\t\" ";
- $graphcmd .= "GPRINT:\"$curif-snr:MAX:%7.2lf dBi \" ";
- $graphcmd .= "GPRINT:\"$curif-snr:AVERAGE:%7.2lf dBi \" ";
- $graphcmd .= "GPRINT:\"$curif-snr:LAST:%7.2lf dBi\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"RATE\t\t\" ";
- $graphcmd .= "GPRINT:\"$curif-rate:MAX:%7.2lf Mb \" ";
- $graphcmd .= "GPRINT:\"$curif-rate:AVERAGE:%7.2lf Mb \" ";
- $graphcmd .= "GPRINT:\"$curif-rate:LAST:%7.2lf Mb\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Channel\t\" ";
- $graphcmd .= "GPRINT:\"$curif-channel:MAX:%7.2lf \" ";
- $graphcmd .= "GPRINT:\"$curif-channel:AVERAGE:%7.2lf \" ";
- $graphcmd .= "GPRINT:\"$curif-channel:LAST:%7.2lf\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif ((strstr($curdatabase, "-vpnusers.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* define graphcmd for vpn users stats */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start $start --end $end --step $step ";
- $graphcmd .= "--vertical-label \"users\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--height 200 --width 620 ";
- $graphcmd .= "DEF:\"$curif-users=$rrddbpath$curdatabase:users:AVERAGE:step=$step\" ";
- $graphcmd .= "LINE2:\"$curif-users#{$colorvpnusers[0]}:$curif-users\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t maximum\t\t average\t current\\n\" ";
- $graphcmd .= "COMMENT:\"Users Online\t\" ";
- $graphcmd .= "GPRINT:\"$curif-users:MAX:%7.2lf \" ";
- $graphcmd .= "GPRINT:\"$curif-users:AVERAGE:%7.2lf \" ";
- $graphcmd .= "GPRINT:\"$curif-users:LAST:%7.2lf \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif ((strstr($curdatabase, "-states.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* define graphcmd for states stats */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start -$seconds -e -$average --step $step ";
- $graphcmd .= "--vertical-label \"states, ip\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--height 200 --width 620 ";
- $graphcmd .= "DEF:\"$curif-pfrate=$rrddbpath$curdatabase:pfrate:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"$curif-pfstates=$rrddbpath$curdatabase:pfstates:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"$curif-pfnat=$rrddbpath$curdatabase:pfnat:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"$curif-srcip=$rrddbpath$curdatabase:srcip:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"$curif-dstip=$rrddbpath$curdatabase:dstip:AVERAGE:step=$step\" ";
- $graphcmd .= "CDEF:\"$curif-pfrate_t=$curif-pfrate,0,1000000,LIMIT,UN,0,$curif-pfrate,IF,$seconds,*\" ";
- $graphcmd .= "LINE1:\"$curif-pfrate#{$colorstates[0]}:$curif-pfrate\" ";
- $graphcmd .= "LINE1:\"$curif-pfstates#{$colorstates[1]}:$curif-pfstates\" ";
- $graphcmd .= "LINE1:\"$curif-pfnat#{$colorstates[2]}:$curif-pfnat\" ";
- $graphcmd .= "LINE1:\"$curif-srcip#{$colorstates[3]}:$curif-srcip\" ";
- $graphcmd .= "LINE1:\"$curif-dstip#{$colorstates[4]}:$curif-dstip\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t minimum average maximum current period\\n\" ";
- $graphcmd .= "COMMENT:\"state changes\" ";
- $graphcmd .= "GPRINT:\"$curif-pfrate:MIN:%7.2lf %s cps\" ";
- $graphcmd .= "GPRINT:\"$curif-pfrate:AVERAGE:%7.2lf %s cps\" ";
- $graphcmd .= "GPRINT:\"$curif-pfrate:MAX:%7.2lf %s cps\" ";
- $graphcmd .= "GPRINT:\"$curif-pfrate:LAST:%7.2lf %S cps\" ";
- $graphcmd .= "GPRINT:\"$curif-pfrate_t:AVERAGE:%7.2lf %s chg\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"filter states\" ";
- $graphcmd .= "GPRINT:\"$curif-pfstates:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"$curif-pfstates:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"$curif-pfstates:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"$curif-pfstates:LAST:%7.2lf %s \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"nat states \" ";
- $graphcmd .= "GPRINT:\"$curif-pfnat:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"$curif-pfnat:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"$curif-pfnat:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"$curif-pfnat:LAST:%7.2lf %s \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Source addr. \" ";
- $graphcmd .= "GPRINT:\"$curif-srcip:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"$curif-srcip:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"$curif-srcip:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"$curif-srcip:LAST:%7.2lf %s \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Dest. addr. \" ";
- $graphcmd .= "GPRINT:\"$curif-dstip:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"$curif-dstip:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"$curif-dstip:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"$curif-dstip:LAST:%7.2lf %s \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif ((strstr($curdatabase, "-processor.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* define graphcmd for processor stats */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start $start --end $end --step $step ";
- $graphcmd .= "--vertical-label \"utilization, number\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--height 200 --width 620 ";
- $graphcmd .= "DEF:\"user=$rrddbpath$curdatabase:user:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"nice=$rrddbpath$curdatabase:nice:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"system=$rrddbpath$curdatabase:system:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"interrupt=$rrddbpath$curdatabase:interrupt:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"processes=$rrddbpath$curdatabase:processes:AVERAGE:step=$step\" ";
- $graphcmd .= "AREA:\"user#{$colorprocessor[0]}:user\" ";
- $graphcmd .= "AREA:\"nice#{$colorprocessor[1]}:nice:STACK\" ";
- $graphcmd .= "AREA:\"system#{$colorprocessor[2]}:system:STACK\" ";
- $graphcmd .= "AREA:\"interrupt#{$colorprocessor[3]}:interrupt:STACK\" ";
- $graphcmd .= "LINE2:\"processes#{$colorprocessor[4]}:processes\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t minimum average maximum current\\n\" ";
- $graphcmd .= "COMMENT:\"User util. \" ";
- $graphcmd .= "GPRINT:\"user:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"user:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"user:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"user:LAST:%7.2lf %S \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Nice util. \" ";
- $graphcmd .= "GPRINT:\"nice:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"nice:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"nice:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"nice:LAST:%7.2lf %s \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"System util. \" ";
- $graphcmd .= "GPRINT:\"system:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"system:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"system:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"system:LAST:%7.2lf %s \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Interrupt \" ";
- $graphcmd .= "GPRINT:\"interrupt:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"interrupt:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"interrupt:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"interrupt:LAST:%7.2lf %s \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Processes \" ";
- $graphcmd .= "GPRINT:\"processes:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"processes:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"processes:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"processes:LAST:%7.2lf %s \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif ((strstr($curdatabase, "-memory.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* define graphcmd for memory usage stats */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start $start --end $end --step $step ";
- $graphcmd .= "--vertical-label \"utilization, percent\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--height 200 --width 620 ";
- $graphcmd .= "DEF:\"active=$rrddbpath$curdatabase:active:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"inactive=$rrddbpath$curdatabase:inactive:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"free=$rrddbpath$curdatabase:free:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"cache=$rrddbpath$curdatabase:cache:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"wire=$rrddbpath$curdatabase:wire:AVERAGE:step=$step\" ";
- $graphcmd .= "LINE2:\"active#{$colormemory[0]}:active\" ";
- $graphcmd .= "LINE2:\"inactive#{$colormemory[1]}:inactive\" ";
- $graphcmd .= "LINE2:\"free#{$colormemory[2]}:free\" ";
- $graphcmd .= "LINE2:\"cache#{$colormemory[3]}:cache\" ";
- $graphcmd .= "LINE2:\"wire#{$colormemory[4]}:wire\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t minimum average maximum current\\n\" ";
- $graphcmd .= "COMMENT:\"Active. \" ";
- $graphcmd .= "GPRINT:\"active:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"active:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"active:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"active:LAST:%7.2lf %S \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Inactive. \" ";
- $graphcmd .= "GPRINT:\"inactive:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"inactive:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"inactive:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"inactive:LAST:%7.2lf %S \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Free. \" ";
- $graphcmd .= "GPRINT:\"free:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"free:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"free:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"free:LAST:%7.2lf %S \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Cached. \" ";
- $graphcmd .= "GPRINT:\"cache:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"cache:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"cache:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"cache:LAST:%7.2lf %S \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Wired. \" ";
- $graphcmd .= "GPRINT:\"wire:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"wire:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"wire:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"wire:LAST:%7.2lf %S \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif ((strstr($curdatabase, "-mbuf.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* define graphcmd for mbuf usage stats */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start $start --end $end --step $step ";
- $graphcmd .= "--vertical-label \"utilization, percent\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} clusters - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--height 200 --width 620 ";
- $graphcmd .= "DEF:\"current=$rrddbpath$curdatabase:current:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"cache=$rrddbpath$curdatabase:cache:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"total=$rrddbpath$curdatabase:total:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"max=$rrddbpath$curdatabase:max:AVERAGE:step=$step\" ";
- $graphcmd .= "LINE2:\"current#{$colormbuf[0]}:current\" ";
- $graphcmd .= "LINE2:\"cache#{$colormbuf[1]}:cache\" ";
- $graphcmd .= "LINE2:\"total#{$colormbuf[2]}:total\" ";
- $graphcmd .= "LINE2:\"max#{$colormbuf[3]}:max\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t minimum average maximum current\\n\" ";
- $graphcmd .= "COMMENT:\"Current. \" ";
- $graphcmd .= "GPRINT:\"current:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"current:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"current:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"current:LAST:%7.2lf %S \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Cache. \" ";
- $graphcmd .= "GPRINT:\"cache:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"cache:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"cache:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"cache:LAST:%7.2lf %S \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Total. \" ";
- $graphcmd .= "GPRINT:\"total:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"total:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"total:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"total:LAST:%7.2lf %S \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Max. \" ";
- $graphcmd .= "GPRINT:\"max:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"max:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"max:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"max:LAST:%7.2lf %S \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif ((strstr($curdatabase, "-queues.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* define graphcmd for queue stats */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start $start --end $end --step $step ";
- $graphcmd .= "--vertical-label \"bits/sec\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--height 200 --width 620 ";
- if ($altq) {
- $a_queues =& $altq->get_queue_list();
- $t = 0;
- } else {
- $a_queues = array();
- $i = 0;
- $t = 0;
- }
- foreach ($a_queues as $name => $q) {
- $color = "$colorqueuesup[$t]";
- if ($t > 0) {
- $stack = ":STACK";
- }
- $graphcmd .= "DEF:\"$name=$rrddbpath$curdatabase:$name:AVERAGE:step=$step\" ";
- $graphcmd .= "CDEF:\"$name-bytes_out=$name,0,$speedlimit,LIMIT,UN,0,$name,IF\" ";
- $graphcmd .= "CDEF:\"$name-bits_out=$name-bytes_out,8,*\" ";
- $graphcmd .= "$AREA:\"$name-bits_out#${color}:$name$stack\" ";
- $t++;
- if ($t > 7) {
- $t = 0;
- }
- }
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif ((strstr($curdatabase, "-queuedrops.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* define graphcmd for queuedrop stats */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start $start --end $end --step $step ";
- $graphcmd .= "--vertical-label \"drops / sec\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--height 200 --width 620 ";
- if ($altq) {
- $a_queues =& $altq->get_queue_list();
- $t = 0;
- } else {
- $a_queues = array();
- $i = 0;
- $t = 0;
- }
- foreach ($a_queues as $name => $q) {
- $color = "$colorqueuesdropup[$t]";
- if ($t > 0) {
- $stack = ":STACK";
- }
- $graphcmd .= "DEF:\"$name=$rrddbpath$curdatabase:$name:AVERAGE:step=$step\" ";
- $graphcmd .= "CDEF:\"$name-bytes_out=$name,0,$speedlimit,LIMIT,UN,0,$name,IF\" ";
- $graphcmd .= "CDEF:\"$name-bits_out=$name-bytes_out,8,*\" ";
- $graphcmd .= "CDEF:\"$name-bits_out_neg=$name-bits_out,$multiplier,*\" ";
- $graphcmd .= "$AREA:\"$name-bits_out_neg#${color}:$name$stack\" ";
- $t++;
- if ($t > 7) {
- $t = 0;
- }
- }
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif ((strstr($curdatabase, "-quality.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* make a link quality graphcmd */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png \\
- --start $start --end $end --step $step \\
- --title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" \\
- --color SHADEA#eeeeee --color SHADEB#eeeeee \\
- --vertical-label \"ms / %\" \\
- --height 200 --width 620 \\
- --lower-limit 0 \\
- DEF:delayraw=$rrddbpath$curdatabase:delay:AVERAGE:step=$step \\
- DEF:loss=$rrddbpath$curdatabase:loss:AVERAGE:step=$step \\
- \"CDEF:delay=delayraw,1000,*\" \\
- \"CDEF:roundavg=delay,PREV(delay),+,2,/\" \\
- \"CDEF:loss10=loss,$multiplier,*\" \\
- \"CDEF:r0=delay,20,MIN\" \\
- \"CDEF:r1=delay,60,MIN\" \\
- \"CDEF:r2=delay,180,MIN\" \\
- \"CDEF:r3=delay,420,MIN\" \\
- COMMENT:\"\t\t\t\t\tDelay\t\t\tPacket loss\\n\" \\
- AREA:delay#$colorqualityrtt[0]:\"> 420 ms\" \\
- GPRINT:delay:MIN:\"\t\tMin\\: %7.2lf ms\" \\
- GPRINT:loss:MIN:\"\tMin\\: %3.1lf %%\\n\" \\
- AREA:r3#$colorqualityrtt[1]:\"180-420 ms\" \\
- GPRINT:delay:AVERAGE:\"\t\tAvg\\: %7.2lf ms\" \\
- GPRINT:loss:AVERAGE:\"\tAvg\\: %3.1lf %%\\n\" \\
- AREA:r2#$colorqualityrtt[2]:\"60-180 ms\" \\
- GPRINT:delay:MAX:\"\t\tMax\\: %7.2lf ms\" \\
- GPRINT:loss:MAX:\"\tMax\\: %3.1lf %%\\n\" \\
- AREA:r1#$colorqualityrtt[3]:\"20-60 ms\\n\" \\
- AREA:r0#$colorqualityrtt[4]:\"< 20 ms\" \\
- GPRINT:delay:LAST:\"\t\tLast\\: %7.2lf ms\" \\
- GPRINT:loss:LAST:\"\tLast\: %3.1lf %%\\n\" \\
- AREA:loss10#$colorqualityloss:\"Packet loss\\n\" \\
- LINE1:delay#$colorqualityrtt[5]:\"Delay average\\n\" \\
- COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\"";
-} elseif ((strstr($curdatabase, "spamd.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* graph a spamd statistics graph */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png \\
- --start $start --end $end --step $step \\
- --title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" \\
- --color SHADEA#eeeeee --color SHADEB#eeeeee \\
- --vertical-label=\"Conn / Time, sec.\" \\
- --height 200 --width 620 --no-gridfit \\
- --lower-limit 0 \\
- DEF:consmin=$rrddbpath$curdatabase:conn:MIN:step=$step \\
- DEF:consavg=$rrddbpath$curdatabase:conn:AVERAGE:step=$step \\
- DEF:consmax=$rrddbpath$curdatabase:conn:MAX:step=$step \\
- DEF:timemin=$rrddbpath$curdatabase:time:MIN:step=$step \\
- DEF:timeavg=$rrddbpath$curdatabase:time:AVERAGE:step=$step \\
- DEF:timemax=$rrddbpath$curdatabase:time:MAX:step=$step \\
- \"CDEF:timeminadj=timemin,0,86400,LIMIT,UN,0,timemin,IF\" \\
- \"CDEF:timeavgadj=timeavg,0,86400,LIMIT,UN,0,timeavg,IF\" \\
- \"CDEF:timemaxadj=timemax,0,86400,LIMIT,UN,0,timemax,IF\" \\
- \"CDEF:t1=timeminadj,timeavgadj,+,2,/,timeminadj,-\" \\
- \"CDEF:t2=timeavgadj,timemaxadj,+,2,/,timeminadj,-,t1,-\" \\
- \"CDEF:t3=timemaxadj,timeminadj,-,t1,-,t2,-\" \\
- AREA:timeminadj \\
- AREA:t1#$colorspamdtime[0]::STACK \\
- AREA:t2#$colorspamdtime[1]::STACK \\
- AREA:t3#$colorspamdtime[2]::STACK \\
- LINE2:timeavgadj#$colorspamdtime[3]:\"Time \" \\
- GPRINT:timeminadj:MIN:\"Min\\:%6.2lf\\t\" \\
- GPRINT:timeavgadj:AVERAGE:\"Avg\\:%6.2lf\\t\" \\
- GPRINT:timemaxadj:MAX:\"Max\\:%6.2lf\\n\" \\
- AREA:consmax#$colorspamdconn[0] \\
- AREA:consmin#$colorspamdconn[1] \\
- LINE1:consmin#$colorspamdconn[2] \\
- LINE1:consmax#$colorspamdconn[3] \\
- LINE1:consavg#$colorspamdconn[4]:\"Cons \" \\
- GPRINT:consmin:MIN:\"Min\\:%6.2lf\\t\" \\
- GPRINT:consavg:AVERAGE:\"Avg\\:%6.2lf\\t\" \\
- GPRINT:consmax:MAX:\"Max\\:%6.2lf\\n\" \\
- COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif ((strstr($curdatabase, "-cellular.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start $start --end $end --step $step ";
- $graphcmd .= "--vertical-label \"signal\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--height 200 --width 620 ";
- $graphcmd .= "DEF:\"$curif-rssi=$rrddbpath$curdatabase:rssi:AVERAGE:step=$step\" ";
- $graphcmd .= "LINE2:\"$curif-rssi#{$colorwireless[0]}:$curif-rssi\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t maximum\t\t average\t current\\n\" ";
- $graphcmd .= "COMMENT:\"RSSI\t\t\" ";
- $graphcmd .= "GPRINT:\"$curif-rssi:MAX:%7.2lf \" ";
- $graphcmd .= "GPRINT:\"$curif-rssi:AVERAGE:%7.2lf \" ";
- $graphcmd .= "GPRINT:\"$curif-rssi:LAST:%7.2lf \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif ((strstr($curdatabase, "-loggedin.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* define graphcmd for online Captive Portal users stats */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start $start --end $end --step $step ";
- $graphcmd .= "--vertical-label \"Captive Portal Users\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--base=1000 ";
- $graphcmd .= "--lower-limit=0 ";
- $graphcmd .= "--slope-mode ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--height 200 --width 620 ";
- $graphcmd .= "DEF:\"$curif-loggedinusers=$rrddbpath$curdatabase:loggedinusers:AVERAGE:step=$step\" ";
- $graphcmd .= "CDEF:\"$curif-totalusers_t=PREV,UN,0,PREV,IF,$curif-loggedinusers,+\" ";
- $graphcmd .= "CDEF:\"$curif-totalusers_d=$curif-totalusers_t,FLOOR\" ";
- $graphcmd .= "AREA:\"$curif-totalusers_d#{$colorcaptiveportalusers[0]}:Total logged in users\" ";
- $graphcmd .= "GPRINT:\"$curif-totalusers_d:MAX:%8.0lf \\n\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif ((strstr($curdatabase, "-concurrent.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* define graphcmd for online Captive Portal users stats */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start $start --end $end --step $step ";
- $graphcmd .= "--vertical-label \"Captive Portal Users\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--base=1000 ";
- $graphcmd .= "--lower-limit=0 ";
- $graphcmd .= "--slope-mode ";
- $graphcmd .= "--height 200 --width 620 ";
- $graphcmd .= "DEF:\"$curif-concurrentusers=$rrddbpath$curdatabase:concurrentusers:AVERAGE:step=$step\" ";
- $graphcmd .= "AREA:\"$curif-concurrentusers#{$colorcaptiveportalusers[0]}:Concurrent Users\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t current\t\t average\t maximum\\n\" ";
- $graphcmd .= "COMMENT:\"Users Online\t\" ";
- $graphcmd .= "GPRINT:\"$curif-concurrentusers:LAST:%8.0lf \" ";
- $graphcmd .= "GPRINT:\"$curif-concurrentusers:AVERAGE:%8.0lf \" ";
- $graphcmd .= "GPRINT:\"$curif-concurrentusers:MAX:%8.0lf \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} elseif ((strstr($curdatabase, "ntpd.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
- /* define graphcmd for ntpd (was: mbuf) usage stats */
- $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
- $graphcmd .= "--start $start --end $end --step $step ";
- $graphcmd .= "--vertical-label \"time\" ";
- $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
- $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
- $graphcmd .= "--height 200 --width 620 ";
- $graphcmd .= "DEF:\"offset=$rrddbpath$curdatabase:offset:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"sjit=$rrddbpath$curdatabase:sjit:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"cjit=$rrddbpath$curdatabase:cjit:AVERAGE:step=$step\" ";
- $graphcmd .= "DEF:\"wander=$rrddbpath$curdatabase:wander:AVERAGE:step=$step\" ";
- $graphcmd .= "LINE2:\"offset#{$colorntpd[0]}:offset\" ";
- $graphcmd .= "LINE2:\"sjit#{$colorntpd[1]}:sjit\" ";
- $graphcmd .= "LINE2:\"cjit#{$colorntpd[2]}:cjit\" ";
- $graphcmd .= "LINE2:\"wander#{$colorntpd[3]}:wander\" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t minimum average maximum current\\n\" ";
- $graphcmd .= "COMMENT:\"Offset \" ";
- $graphcmd .= "GPRINT:\"offset:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"offset:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"offset:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"offset:LAST:%7.2lf %S \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"System jitter \" ";
- $graphcmd .= "GPRINT:\"sjit:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"sjit:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"sjit:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"sjit:LAST:%7.2lf %S \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Clock jitter \" ";
- $graphcmd .= "GPRINT:\"cjit:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"cjit:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"cjit:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"cjit:LAST:%7.2lf %S \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"Clk freq wander\" ";
- $graphcmd .= "GPRINT:\"wander:MIN:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"wander:AVERAGE:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"wander:MAX:%7.2lf %s \" ";
- $graphcmd .= "GPRINT:\"wander:LAST:%7.2lf %S \" ";
- $graphcmd .= "COMMENT:\"\\n\" ";
- $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
-} else {
- $data = false;
- log_error(sprintf(gettext("Sorry we do not have data to graph for %s"),$curdatabase));
-}
-
-/* check modification time to see if we need to generate image */
-if (file_exists("$rrdtmppath$curdatabase-$curgraph.png")) {
- if ((time() - filemtime("$rrdtmppath$curdatabase-$curgraph.png")) >= 15) {
- if ($data) {
- $_gb = exec("$graphcmd 2>&1", $graphcmdoutput, $graphcmdreturn);
- $graphcmdoutput = implode(" ", $graphcmdoutput) . $graphcmd;
- flush();
- usleep(500);
- }
- }
-} else {
- if ($data) {
- $_gb = exec("$graphcmd 2>&1", $graphcmdoutput, $graphcmdreturn);
- $graphcmdoutput = implode(" ", $graphcmdoutput) . $graphcmd;
- flush();
- usleep(500);
- }
-}
-if (($graphcmdreturn <> 0) || (!$data)) {
- log_error(sprintf(gettext('Failed to create graph with error code %1$s, the error is: %2$s'), $graphcmdreturn, $graphcmdoutput));
- if (strstr($curdatabase, "queues")) {
- log_error(sprintf(gettext("failed to create graph from %s%s, removing database"), $rrddbpath, $curdatabase));
- unlink_if_exists($rrddbpath . $curif . $queues);
- flush();
- usleep(500);
- enable_rrd_graphing();
- }
- if (strstr($curdatabase, "queuesdrop")) {
- log_error(sprintf(gettext("failed to create graph from %s%s, removing database"), $rrddbpath, $curdatabase));
- unlink_if_exists($rrddbpath . $curdatabase);
- flush();
- usleep(500);
- enable_rrd_graphing();
- }
- header("Content-type: image/png");
- header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
- header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
- header("Cache-Control: no-cache, no-store, must-revalidate");
- header("Pragma: no-cache");
- $file= "/usr/local/www/themes/{$g['theme']}/images/misc/rrd_error.png";
- readfile($file);
-} else {
- $file = "$rrdtmppath$curdatabase-$curgraph.png";
- if (file_exists("$file")) {
- header("Content-type: image/png");
- header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
- header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
- header("Cache-Control: no-cache, no-store, must-revalidate");
- header("Pragma: no-cache");
- readfile($file);
- }
-}
-
-?>
diff --git a/usr/local/www/status_rrd_graph_settings.php b/usr/local/www/status_rrd_graph_settings.php
deleted file mode 100644
index ede9f41..0000000
--- a/usr/local/www/status_rrd_graph_settings.php
+++ /dev/null
@@ -1,316 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_rrd_graph_settings.php
- Part of pfSense
- Copyright (C) 2007 Seth Mos <seth.mos@dds.nl>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/find
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-status-rrdgraph-settings
-##|*NAME=Status: RRD Graphs settings page
-##|*DESCR=Allow access to the 'Status: RRD Graphs: settings' page.
-##|*MATCH=status_rrd_graph_settings.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require_once("rrd.inc");
-
-$pconfig['enable'] = isset($config['rrd']['enable']);
-$pconfig['category'] = $config['rrd']['category'];
-$pconfig['style'] = $config['rrd']['style'];
-$pconfig['period'] = $config['rrd']['period'];
-
-$curcat = "settings";
-$categories = array('system' => gettext("System"),
- 'traffic' => gettext("Traffic"),
- 'packets' => gettext("Packets"),
- 'quality' => gettext("Quality"),
- 'queues' => gettext("Queues"),
- 'captiveportal' => gettext("Captive Portal"));
-
-if (isset($config['ntpd']['statsgraph'])) {
- $categories['ntpd'] = gettext("NTP");
-}
-
-$styles = array('inverse' => gettext("Inverse"),
- 'absolute' => gettext("Absolute"));
-$periods = array("absolute" => gettext("Absolute Timespans"),
- "current" => gettext("Current Period"),
- "previous" => gettext("Previous Period"));
-
-if ($_POST['ResetRRD']) {
- mwexec('/bin/rm /var/db/rrd/*');
- enable_rrd_graphing();
- setup_gateways_monitor();
- $savemsg = "RRD data has been cleared. New RRD files have been generated.";
-} elseif ($_POST) {
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- /* none */
-
- if (!$input_errors) {
- $config['rrd']['enable'] = $_POST['enable'] ? true : false;
- $config['rrd']['category'] = $_POST['category'];
- $config['rrd']['style'] = $_POST['style'];
- $config['rrd']['period'] = $_POST['period'];
- write_config();
-
- $retval = 0;
- $retval = enable_rrd_graphing();
- $savemsg = get_std_save_message($retval);
- }
-}
-
-$rrddbpath = "/var/db/rrd/";
-chdir($rrddbpath);
-$databases = glob("*.rrd");
-
-foreach ($databases as $database) {
- if (stristr($database, "wireless")) {
- $wireless = true;
- }
- if (stristr($database, "queues")) {
- $queues = true;
- }
- if (stristr($database, "-cellular") && !empty($config['ppps'])) {
- $cellular = true;
- }
- if (stristr($database, "-vpnusers")) {
- $vpnusers = true;
- }
- if (stristr($database, "captiveportal-") && is_array($config['captiveportal'])) {
- $captiveportal = true;
- }
-}
-
-$pgtitle = array(gettext("Status"), gettext("RRD Graphs"));
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<form action="status_rrd_graph_settings.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="rrd graph settings">
- <tr>
- <td>
- <?php
- $tab_array = array();
- if ($curcat == "system") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("System"), $tabactive, "status_rrd_graph.php?cat=system");
- if ($curcat == "traffic") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Traffic"), $tabactive, "status_rrd_graph.php?cat=traffic");
- if ($curcat == "packets") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Packets"), $tabactive, "status_rrd_graph.php?cat=packets");
- if ($curcat == "quality") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Quality"), $tabactive, "status_rrd_graph.php?cat=quality");
- if ($queues) {
- if ($curcat == "queues") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Queues"), $tabactive, "status_rrd_graph.php?cat=queues");
- if ($curcat == "queuedrops") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("QueueDrops"), $tabactive, "status_rrd_graph.php?cat=queuedrops");
- }
- if ($wireless) {
- if ($curcat == "wireless") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Wireless"), $tabactive, "status_rrd_graph.php?cat=wireless");
- }
- if ($cellular) {
- if ($curcat == "cellular") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Cellular"), $tabactive, "status_rrd_graph.php?cat=cellular");
- }
- if ($vpnusers) {
- if ($curcat == "vpnusers") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("VPN"), $tabactive, "status_rrd_graph.php?cat=vpnusers");
- }
- if ($captiveportal) {
- if ($curcat == "captiveportal") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Captive Portal"), $tabactive, "status_rrd_graph.php?cat=captiveportal");
- }
- if (isset($config['ntpd']['statsgraph'])) {
- if ($curcat == "ntpd") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array("NTP", $tabactive, "status_rrd_graph.php?cat=ntpd");
- }
- if ($curcat == "custom") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Custom"), $tabactive, "status_rrd_graph.php?cat=custom");
- if ($curcat == "settings") {
- $tabactive = True;
- } else {
- $tabactive = False;
- }
- $tab_array[] = array(gettext("Settings"), $tabactive, "status_rrd_graph_settings.php");
-
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="6" summary="main area">
- <tr>
- <td width="22%" valign="top" class="vtable"><?=gettext("RRD Graphs");?></td>
- <td width="78%" class="vtable">
- <input name="enable" type="checkbox" id="enable" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\"" ?> onclick="enable_change(false)" />
- <b><?=gettext("Enables the RRD graphing backend.");?></b>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vtable"><?=gettext("Default category");?></td>
- <td width="78%" class="vtable">
- <select name="category" id="category" class="formselect" style="z-index: -10;" >
- <?php
- foreach ($categories as $category => $categoryd) {
- echo "<option value=\"$category\"";
- if ($category == $pconfig['category']) {
- echo " selected=\"selected\"";
- }
- echo ">" . htmlspecialchars($categoryd) . "</option>\n";
- }
- ?>
- </select>
- <b><?=gettext("This selects default category.");?></b>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vtable"><?=gettext("Default style");?></td>
- <td width="78%" class="vtable">
- <select name="style" class="formselect" style="z-index: -10;" >
- <?php
- foreach ($styles as $style => $styled) {
- echo "<option value=\"$style\"";
- if ($style == $pconfig['style']) {
- echo " selected=\"selected\"";
- }
- echo ">" . htmlspecialchars($styled) . "</option>\n";
- }
- ?>
- </select>
- <b><?=gettext("This selects the default style.");?></b>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vtable"><?=gettext("Default period");?></td>
- <td width="78%" class="vtable">
- <select name="period" class="formselect" style="z-index: -10;" >
- <?php
- foreach ($periods as $period => $periodd) {
- echo "<option value=\"$period\"";
- if ($period == $pconfig['period']) {
- echo " selected=\"selected\"";
- }
- echo ">" . htmlspecialchars($periodd) . "</option>\n";
- }
- ?>
- </select>
- <b><?=gettext("This selects the default period.");?></b>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="ResetRRD" type="submit" class="formbtn" value="<?=gettext("Reset RRD Data");?>" onclick="return confirm('<?=gettext('Do you really want to reset the RRD graphs? This will erase all graph data.');?>')" />
- </td>
- </tr>
- <tr>
- <td width="22%" height="53" valign="top">&nbsp;</td>
- <td width="78%"><strong><span class="red"><?=gettext("Note:");?></span></strong><br />
- <?=gettext("Graphs will not be allowed to be recreated within a 1 minute interval, please " .
- "take this into account after changing the style.");?>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_services.php b/usr/local/www/status_services.php
deleted file mode 100755
index ac13b32..0000000
--- a/usr/local/www/status_services.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-/*
- status_services.php
- Copyright (C) 2004, 2005 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INClUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/local/sbin/openvpn /usr/bin/killall /bin/ps
- pfSense_MODULE: services
-*/
-
-##|+PRIV
-##|*IDENT=page-status-services
-##|*NAME=Status: Services page
-##|*DESCR=Allow access to the 'Status: Services' page.
-##|*MATCH=status_services.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("service-utils.inc");
-require_once("shortcuts.inc");
-
-$service_name = '';
-if (isset($_GET['service'])) {
- $service_name = htmlspecialchars($_GET['service']);
-}
-
-if (!empty($service_name)) {
- switch ($_GET['mode']) {
- case "restartservice":
- $savemsg = service_control_restart($service_name, $_GET);
- break;
- case "startservice":
- $savemsg = service_control_start($service_name, $_GET);
- break;
- case "stopservice":
- $savemsg = service_control_stop($service_name, $_GET);
- break;
- }
- sleep(5);
-}
-
-/* batch mode, allow other scripts to call this script */
-if ($_GET['batch']) {
- exit;
-}
-
-$pgtitle = array(gettext("Status"), gettext("Services"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php
-include("fbegin.inc");
-?>
-<form action="status_services.php" method="post">
-<?php if ($savemsg) print_info_box($savemsg); ?>
-
-<div id="boxarea">
-<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="status services">
- <thead>
- <tr>
- <td class="listhdrr" align="center"><?=gettext("Service");?></td>
- <td class="listhdrr" align="center"><?=gettext("Description");?></td>
- <td class="listhdrr" align="center"><?=gettext("Status");?></td>
- </tr>
- </thead>
- <tbody>
-<?php
-
-$services = get_services();
-
-if (count($services) > 0) {
- uasort($services, "service_name_compare");
- foreach ($services as $service) {
- if (empty($service['name'])) {
- continue;
- }
- if (empty($service['description'])) {
- $service['description'] = get_pkg_descr($service['name']);
- }
- echo "<tr><td class=\"listlr\" width=\"20%\">" . $service['name'] . "</td>\n";
- echo "<td class=\"listr\" width=\"55%\">" . $service['description'] . "</td>\n";
- // if service is running then listr else listbg
- $bgclass = null;
- if (get_service_status($service)) {
- $bgclass = "listr";
- } else {
- $bgclass = "listbg";
- }
- echo "<td class=\"" . $bgclass . "\" align=\"center\">" . get_service_status_icon($service, true, true) . "</td>\n";
- echo "<td valign=\"middle\" class=\"list nowrap\">" . get_service_control_links($service);
- $scut = get_shortcut_by_service_name($service['name']);
- if (!empty($scut)) {
- echo get_shortcut_main_link($scut, true, $service);
- echo get_shortcut_status_link($scut, true, $service);
- echo get_shortcut_log_link($scut, true);
- }
- echo "</td></tr>\n";
- }
-} else {
- echo "<tr><td colspan=\"3\" align=\"center\">" . gettext("No services found") . " . </td></tr>\n";
-}
-
-?>
- </tbody>
-</table>
-</div>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_upnp.php b/usr/local/www/status_upnp.php
deleted file mode 100644
index 62349df..0000000
--- a/usr/local/www/status_upnp.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-/* $Id$ */
-/*
- status_upnp.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /sbin/pfctl
- pfSense_MODULE: upnp
-*/
-
-##|+PRIV
-##|*IDENT=page-status-upnpstatus
-##|*NAME=Status: UPnP Status page
-##|*DESCR=Allow access to the 'Status: UPnP Status' page.
-##|*MATCH=status_upnp.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if ($_POST) {
- if ($_POST['clear'] == "Clear") {
- upnp_action('restart');
- $savemsg = gettext("Rules have been cleared and the daemon restarted");
- }
-}
-
-$rdr_entries = array();
-exec("/sbin/pfctl -aminiupnpd -sn", $rdr_entries, $pf_ret);
-
-$now = time();
-$year = date("Y");
-
-$pgtitle = array(gettext("Status"), gettext("UPnP &amp; NAT-PMP Status"));
-$shortcut_section = "upnp";
-include("head.inc");
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php
-if (!$config['installedpackages'] || !$config['installedpackages']['miniupnpd']['config'][0]['iface_array'] ||
- !$config['installedpackages']['miniupnpd']['config'][0]['enable']) {
- echo gettext("UPnP is currently disabled.");
- include("fend.inc");
- exit;
-}
-?>
-<div id="mainlevel">
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td class="tabcont" >
- <form action="status_upnp.php" method="post">
- <input type="submit" name="clear" id="clear" value="<?=gettext("Clear");?>" /> <?=gettext("all currently connected sessions");?>.
- </form>
- </td>
- </tr>
- <tr>
- <td class="tabcont" >
- <table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont">
- <tr>
- <td width="10%" class="listhdrr"><?=gettext("Port");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Protocol");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Internal IP");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Int. Port");?></td>
- <td width="50%" class="listhdr"><?=gettext("Description");?></td>
- </tr>
-<?php
- foreach ($rdr_entries as $rdr_entry) {
- if (preg_match("/on (.*) inet proto (.*) from any to any port = (.*) keep state label \"(.*)\" rtable [0-9] -> (.*) port (.*)/", $rdr_entry, $matches)) {
- $rdr_proto = $matches[2];
- $rdr_port = $matches[3];
- $rdr_label =$matches[4];
- $rdr_ip = $matches[5];
- $rdr_iport = $matches[6];
-?>
- <tr>
- <td class="listlr">
- <?php print $rdr_port;?>
- </td>
- <td class="listr">
- <?php print $rdr_proto;?>
- </td>
- <td class="listr">
- <?php print $rdr_ip;?>
- </td>
- <td class="listr">
- <?php print $rdr_iport;?>
- </td>
- <td class="listr">
- <?php print $rdr_label;?>
- </td>
- </tr>
-<?php
- }
- }
-?>
- </table>
- </td>
- </tr>
-</table>
-</div>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/status_wireless.php b/usr/local/www/status_wireless.php
deleted file mode 100644
index be51458..0000000
--- a/usr/local/www/status_wireless.php
+++ /dev/null
@@ -1,201 +0,0 @@
-<?php
-/*
- status_wireless.php
- Copyright (C) 2004 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: interfaces
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-wirelessstatus
-##|*NAME=Status: Wireless page
-##|*DESCR=Allow access to the 'Status: Wireless' page.
-##|*MATCH=status_wireless.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-
-$pgtitle = array(gettext("Status"), gettext("Wireless"));
-$shortcut_section = "wireless";
-include("head.inc");
-
-$if = $_POST['if'];
-if ($_GET['if'] <> "") {
- $if = $_GET['if'];
-}
-
-$ciflist = get_configured_interface_with_descr();
-if (empty($if)) {
- /* Find the first interface
- that is wireless */
- foreach ($ciflist as $interface => $ifdescr) {
- if (is_interface_wireless(get_real_interface($interface))) {
- $if = $interface;
- break;
- }
- }
-}
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php
-include("fbegin.inc");
-?>
-<form action="status_wireless.php" method="post">
-<?php if ($savemsg) print_info_box($savemsg); ?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr><td>
-<?php
- $tab_array = array();
- foreach ($ciflist as $interface => $ifdescr) {
- if (is_interface_wireless(get_real_interface($interface))) {
- $enabled = false;
- if ($if == $interface) {
- $enabled = true;
- }
- $tab_array[] = array(gettext("Status") . " ({$ifdescr})", $enabled, "status_wireless.php?if={$interface}");
- }
- }
- $rwlif = get_real_interface($if);
- if ($_POST['rescanwifi'] <> "") {
- mwexec_bg("/sbin/ifconfig {$rwlif} scan 2>&1");
- $savemsg = gettext("Rescan has been initiated in the background. Refresh this page in 10 seconds to see the results.");
- }
- if ($savemsg) print_info_box($savemsg);
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea" class="tabcont">
- <input type="hidden" name="if" id="if" value="<?php echo htmlspecialchars($if); ?>">
- <b><input type="submit" name="rescanwifi" id="rescanwifi" value="Rescan"></b><br /><br />
- <b><?php echo gettext("Nearby access points or ad-hoc peers"); ?></b>
- <table class="tabcont sortable" colspan="3" cellpadding="3" width="100%">
- <thead>
- <tr bgcolor='#990000'>
- <td><b><font color='#ffffff'>SSID</font></b></td>
- <td><b><font color='#ffffff'>BSSID</font></b></td>
- <td><b><font color='#ffffff'>CHAN</font></b></td>
- <td><b><font color='#ffffff'>RATE</font></b></td>
- <td><b><font color='#ffffff'>RSSI</font></b></td>
- <td><b><font color='#ffffff'>INT</font></b></td>
- <td><b><font color='#ffffff'>CAPS</font></b></td>
- </tr>
- </thead>
- <tbody>
-<?php
- exec("/sbin/ifconfig {$rwlif} list scan 2>&1", $states, $ret);
- /* Skip Header */
- array_shift($states);
-
- $counter = 0;
- foreach ($states as $state) {
- /* Split by Mac address for the SSID Field */
- $split = preg_split("/([0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f])/i", $state);
- preg_match("/([0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f])/i", $state, $bssid);
- $ssid = htmlspecialchars($split[0]);
- $bssid = $bssid[0];
- /* Split the rest by using spaces for this line using the 2nd part */
- $split = preg_split("/[ ]+/i", $split[1]);
- $channel = $split[1];
- $rate = $split[2];
- $rssi = $split[3];
- $int = $split[4];
- $caps = "$split[5] $split[6] $split[7] $split[8] $split[9] $split[10] $split[11] ";
-
- print "<tr>";
- print "<td>{$ssid}</td>";
- print "<td>{$bssid}</td>";
- print "<td>{$channel}</td>";
- print "<td>{$rate}</td>";
- print "<td>{$rssi}</td>";
- print "<td>{$int}</td>";
- print "<td>{$caps}</td>";
- print "</tr>\n";
- }
-?>
- </tbody>
- </table>
- <b><?php echo gettext("Associated or ad-hoc peers"); ?></b><br />
- <table class="tabcont sortable" colspan="3" cellpadding="3" width="100%">
- <thead>
- <tr bgcolor='#990000'>
- <td><b><font color='#ffffff'>ADDR</font></b></td>
- <td><b><font color='#ffffff'>AID</font></b></td>
- <td><b><font color='#ffffff'>CHAN</font></b></td>
- <td><b><font color='#ffffff'>RATE</font></b></td>
- <td><b><font color='#ffffff'>RSSI</font></b></td>
- <td><b><font color='#ffffff'>IDLE</font></b></td>
- <td><b><font color='#ffffff'>TXSEQ</font></b></td>
- <td><b><font color='#ffffff'>RXSEQ</font></b></td>
- <td><b><font color='#ffffff'>CAPS</font></b></td>
- <td><b><font color='#ffffff'>ERP</font></b></td>
- </tr>
- </thead>
- <tbody>
-
-<?php
- $states = array();
- exec("/sbin/ifconfig {$rwlif} list sta 2>&1", $states, $ret);
- array_shift($states);
-
- $counter = 0;
- foreach ($states as $state) {
- $split = preg_split("/[ ]+/i", $state);
- /* Split the rest by using spaces for this line using the 2nd part */
- print "<tr>";
- print "<td>{$split[0]}</td>";
- print "<td>{$split[1]}</td>";
- print "<td>{$split[2]}</td>";
- print "<td>{$split[3]}</td>";
- print "<td>{$split[4]}</td>";
- print "<td>{$split[5]}</td>";
- print "<td>{$split[6]}</td>";
- print "<td>{$split[7]}</td>";
- print "<td>{$split[8]}</td>";
- print "<td>{$split[9]}</td>";
- print "</tr>\n";
- }
-
-/* XXX: what stats to we get for adhoc mode? */
-
-?>
- </tbody>
- </table>
- </div>
- <br />
- <b>Flags:</b> A = Authorized, E = Extended Rate (802.11g), P = Power save mode, H = High Throughput (HT), Q = QoS (WME)<br />
- <b>Capabilities:</b> WME = Wireless Multimedia Extensions (QoS), WPA = Wi-Fi Protected Access, RSN = 802.11i, HTCAP = 802.11n High Throughput, ATH = Atheros protocol extensions<br />
- </td>
- </tr>
-</table>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system.php b/usr/local/www/system.php
deleted file mode 100644
index b275129..0000000
--- a/usr/local/www/system.php
+++ /dev/null
@@ -1,565 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /bin/kill /usr/bin/tar
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-system-generalsetup
-##|*NAME=System: General Setup page
-##|*DESCR=Allow access to the 'System: General Setup' page.
-##|*MATCH=system.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-$pconfig['hostname'] = $config['system']['hostname'];
-$pconfig['domain'] = $config['system']['domain'];
-list($pconfig['dns1'], $pconfig['dns2'], $pconfig['dns3'], $pconfig['dns4']) = $config['system']['dnsserver'];
-
-$arr_gateways = return_gateways_array();
-
-$pconfig['dns1gw'] = $config['system']['dns1gw'];
-$pconfig['dns2gw'] = $config['system']['dns2gw'];
-$pconfig['dns3gw'] = $config['system']['dns3gw'];
-$pconfig['dns4gw'] = $config['system']['dns4gw'];
-
-$pconfig['dnsallowoverride'] = isset($config['system']['dnsallowoverride']);
-$pconfig['timezone'] = $config['system']['timezone'];
-$pconfig['timeupdateinterval'] = $config['system']['time-update-interval'];
-$pconfig['timeservers'] = $config['system']['timeservers'];
-$pconfig['theme'] = $config['system']['theme'];
-$pconfig['language'] = $config['system']['language'];
-
-$pconfig['dnslocalhost'] = isset($config['system']['dnslocalhost']);
-
-if (!isset($pconfig['timeupdateinterval'])) {
- $pconfig['timeupdateinterval'] = 300;
-}
-if (!$pconfig['timezone']) {
- $pconfig['timezone'] = "Etc/UTC";
-}
-if (!$pconfig['timeservers']) {
- $pconfig['timeservers'] = "pool.ntp.org";
-}
-
-$changedesc = gettext("System") . ": ";
-$changecount = 0;
-
-function is_timezone($elt) {
- return !preg_match("/\/$/", $elt);
-}
-
-if ($pconfig['timezone'] <> $_POST['timezone']) {
- filter_pflog_start(true);
-}
-
-exec('/usr/bin/tar -tzf /usr/share/zoneinfo.tgz', $timezonelist);
-$timezonelist = array_filter($timezonelist, 'is_timezone');
-sort($timezonelist);
-
-$multiwan = false;
-$interfaces = get_configured_interface_list();
-foreach ($interfaces as $interface) {
- if (interface_has_gateway($interface)) {
- $multiwan = true;
- }
-}
-
-if ($_POST) {
-
- $changecount++;
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "hostname domain");
- $reqdfieldsn = array(gettext("Hostname"), gettext("Domain"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if ($_POST['hostname']) {
- if (!is_hostname($_POST['hostname'])) {
- $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'. It may not start or end with '-'.");
- } else {
- if (!is_unqualified_hostname($_POST['hostname'])) {
- $input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted");
- }
- }
- }
- if ($_POST['domain'] && !is_domain($_POST['domain'])) {
- $input_errors[] = gettext("The domain may only contain the characters a-z, 0-9, '-' and '.'.");
- }
-
- $ignore_posted_dnsgw = array();
-
- for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
- $dnsname="dns{$dnscounter}";
- $dnsgwname="dns{$dnscounter}gw";
- if (($_POST[$dnsname] && !is_ipaddr($_POST[$dnsname]))) {
- $input_errors[] = gettext("A valid IP address must be specified for DNS server $dnscounter.");
- } else {
- if (($_POST[$dnsgwname] <> "") && ($_POST[$dnsgwname] <> "none")) {
- // A real gateway has been selected.
- if (is_ipaddr($_POST[$dnsname])) {
- if ((is_ipaddrv4($_POST[$dnsname])) && (validate_address_family($_POST[$dnsname], $_POST[$dnsgwname]) === false)) {
- $input_errors[] = gettext("You can not specify IPv6 gateway '{$_POST[$dnsgwname]}' for IPv4 DNS server '{$_POST[$dnsname]}'");
- }
- if ((is_ipaddrv6($_POST[$dnsname])) && (validate_address_family($_POST[$dnsname], $_POST[$dnsgwname]) === false)) {
- $input_errors[] = gettext("You can not specify IPv4 gateway '{$_POST[$dnsgwname]}' for IPv6 DNS server '{$_POST[$dnsname]}'");
- }
- } else {
- // The user selected a gateway but did not provide a DNS address. Be nice and set the gateway back to "none".
- $ignore_posted_dnsgw[$dnsgwname] = true;
- }
- }
- }
- }
-
- $direct_networks_list = explode(" ", filter_get_direct_networks_list());
- for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
- $dnsitem = "dns{$dnscounter}";
- $dnsgwitem = "dns{$dnscounter}gw";
- if ($_POST[$dnsgwitem]) {
- if (interface_has_gateway($_POST[$dnsgwitem])) {
- foreach ($direct_networks_list as $direct_network) {
- if (ip_in_subnet($_POST[$dnsitem], $direct_network)) {
- $input_errors[] = sprintf(gettext("You can not assign a gateway to DNS '%s' server which is on a directly connected network."), $_POST[$dnsitem]);
- }
- }
- }
- }
- }
-
- $t = (int)$_POST['timeupdateinterval'];
- if (($t < 0) || (($t > 0) && ($t < 6)) || ($t > 1440)) {
- $input_errors[] = gettext("The time update interval must be either 0 (disabled) or between 6 and 1440.");
- }
- # it's easy to have a little too much whitespace in the field, clean it up for the user before processing.
- $_POST['timeservers'] = preg_replace('/[[:blank:]]+/', ' ', $_POST['timeservers']);
- $_POST['timeservers'] = trim($_POST['timeservers']);
- foreach (explode(' ', $_POST['timeservers']) as $ts) {
- if (!is_domain($ts)) {
- $input_errors[] = gettext("A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'.");
- }
- }
-
- if (!$input_errors) {
- update_if_changed("hostname", $config['system']['hostname'], $_POST['hostname']);
- update_if_changed("domain", $config['system']['domain'], $_POST['domain']);
-
- update_if_changed("timezone", $config['system']['timezone'], $_POST['timezone']);
- update_if_changed("NTP servers", $config['system']['timeservers'], strtolower($_POST['timeservers']));
- update_if_changed("NTP update interval", $config['system']['time-update-interval'], $_POST['timeupdateinterval']);
-
- if ($_POST['language'] && $_POST['language'] != $config['system']['language']) {
- $config['system']['language'] = $_POST['language'];
- set_language($config['system']['language']);
- }
-
- /* pfSense themes */
- if (!$g['disablethemeselection']) {
- update_if_changed("System Theme", $config['theme'], $_POST['theme']);
- }
-
- /* XXX - billm: these still need updating after figuring out how to check if they actually changed */
- $olddnsservers = $config['system']['dnsserver'];
- unset($config['system']['dnsserver']);
- if ($_POST['dns1']) {
- $config['system']['dnsserver'][] = $_POST['dns1'];
- }
- if ($_POST['dns2']) {
- $config['system']['dnsserver'][] = $_POST['dns2'];
- }
- if ($_POST['dns3']) {
- $config['system']['dnsserver'][] = $_POST['dns3'];
- }
- if ($_POST['dns4']) {
- $config['system']['dnsserver'][] = $_POST['dns4'];
- }
-
- $olddnsallowoverride = $config['system']['dnsallowoverride'];
-
- unset($config['system']['dnsallowoverride']);
- $config['system']['dnsallowoverride'] = $_POST['dnsallowoverride'] ? true : false;
-
- if ($_POST['dnslocalhost'] == "yes") {
- $config['system']['dnslocalhost'] = true;
- } else {
- unset($config['system']['dnslocalhost']);
- }
-
- /* which interface should the dns servers resolve through? */
- $outdnscounter = 0;
- for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
- $dnsname="dns{$dnscounter}";
- $dnsgwname="dns{$dnscounter}gw";
- $olddnsgwname = $config['system'][$dnsgwname];
-
- if ($ignore_posted_dnsgw[$dnsgwname]) {
- $thisdnsgwname = "none";
- } else {
- $thisdnsgwname = $pconfig[$dnsgwname];
- }
-
- // "Blank" out the settings for this index, then we set them below using the "outdnscounter" index.
- $config['system'][$dnsgwname] = "none";
- $pconfig[$dnsgwname] = "none";
- $pconfig[$dnsname] = "";
-
- if ($_POST[$dnsname]) {
- // Only the non-blank DNS servers were put into the config above.
- // So we similarly only add the corresponding gateways sequentially to the config (and to pconfig), as we find non-blank DNS servers.
- // This keeps the DNS server IP and corresponding gateway "lined up" when the user blanks out a DNS server IP in the middle of the list.
- $outdnscounter++;
- $outdnsname="dns{$outdnscounter}";
- $outdnsgwname="dns{$outdnscounter}gw";
- $pconfig[$outdnsname] = $_POST[$dnsname];
- if ($_POST[$dnsgwname]) {
- $config['system'][$outdnsgwname] = $thisdnsgwname;
- $pconfig[$outdnsgwname] = $thisdnsgwname;
- } else {
- // Note: when no DNS GW name is chosen, the entry is set to "none", so actually this case never happens.
- unset($config['system'][$outdnsgwname]);
- $pconfig[$outdnsgwname] = "";
- }
- }
- if (($olddnsgwname != "") && ($olddnsgwname != "none") && (($olddnsgwname != $thisdnsgwname) || ($olddnsservers[$dnscounter-1] != $_POST[$dnsname]))) {
- // A previous DNS GW name was specified. It has now gone or changed, or the DNS server address has changed.
- // Remove the route. Later calls will add the correct new route if needed.
- if (is_ipaddrv4($olddnsservers[$dnscounter-1])) {
- mwexec("/sbin/route delete " . escapeshellarg($olddnsservers[$dnscounter-1]));
- } else {
- if (is_ipaddrv6($olddnsservers[$dnscounter-1])) {
- mwexec("/sbin/route delete -inet6 " . escapeshellarg($olddnsservers[$dnscounter-1]));
- }
- }
- }
- }
-
- if ($changecount > 0) {
- write_config($changedesc);
- }
-
- $retval = 0;
- $retval = system_hostname_configure();
- $retval |= system_hosts_generate();
- $retval |= system_resolvconf_generate();
- if (isset($config['dnsmasq']['enable'])) {
- $retval |= services_dnsmasq_configure();
- } elseif (isset($config['unbound']['enable'])) {
- $retval |= services_unbound_configure();
- }
- $retval |= system_timezone_configure();
- $retval |= system_ntp_configure();
-
- if ($olddnsallowoverride != $config['system']['dnsallowoverride']) {
- $retval |= send_event("service reload dns");
- }
-
- // Reload the filter - plugins might need to be run.
- $retval |= filter_configure();
-
- $savemsg = get_std_save_message($retval);
- }
-
- unset($ignore_posted_dnsgw);
-}
-
-$pgtitle = array(gettext("System"), gettext("General Setup"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php
- include("fbegin.inc");
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
-?>
- <form action="system.php" method="post">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="general setup">
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("System"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname"); ?></td>
- <td width="78%" class="vtable"> <input name="hostname" type="text" class="formfld unknown" id="hostname" size="40" value="<?=htmlspecialchars($pconfig['hostname']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Name of the firewall host, without domain part"); ?>
- <br />
- <?=gettext("e.g."); ?> <em>firewall</em>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Domain"); ?></td>
- <td width="78%" class="vtable"> <input name="domain" type="text" class="formfld unknown" id="domain" size="40" value="<?=htmlspecialchars($pconfig['domain']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Do not use 'local' as a domain name. It will cause local hosts running mDNS (avahi, bonjour, etc.) to be unable to resolve local hosts not running mDNS."); ?>
- <br />
- <?=gettext("e.g."); ?> <em><?=gettext("mycorp.com, home, office, private, etc."); ?></em>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("DNS servers"); ?></td>
- <td width="78%" class="vtable">
- <br />
- <table summary="dns servers and gateways">
- <tr>
- <td><b><?=gettext("DNS Server"); ?></b></td>
- <?php if ($multiwan): ?>
- <td><b><?=gettext("Use gateway"); ?></b></td>
- <?php endif; ?>
- </tr>
-<?php
- for ($dnscounter = 1; $dnscounter < 5; $dnscounter++):
- $fldname="dns{$dnscounter}gw";
-?>
- <tr>
- <td>
- <input name="dns<?php echo $dnscounter;?>" type="text" class="formfld unknown" id="dns<?php echo $dnscounter;?>" size="28" value="<?php echo $pconfig['dns'.$dnscounter];?>" />
- </td>
- <td>
-<?php
- if ($multiwan):
-?>
- <select name='<?=$fldname;?>'>
-<?php
- $gwname = "none";
- $dnsgw = "dns{$dnscounter}gw";
- if ($pconfig[$dnsgw] == $gwname) {
- $selected = "selected=\"selected\"";
- } else {
- $selected = "";
- }
- echo "<option value='$gwname' $selected>$gwname</option>\n";
- foreach ($arr_gateways as $gwname => $gwitem) {
- //echo $pconfig[$dnsgw];
- if ((is_ipaddrv4(lookup_gateway_ip_by_name($pconfig[$dnsgw])) && (is_ipaddrv6($gwitem['gateway'])))) {
- continue;
- }
- if ((is_ipaddrv6(lookup_gateway_ip_by_name($pconfig[$dnsgw])) && (is_ipaddrv4($gwitem['gateway'])))) {
- continue;
- }
- if ($pconfig[$dnsgw] == $gwname) {
- $selected = "selected=\"selected\"";
- } else {
- $selected = "";
- }
- echo "<option value='$gwname' $selected>$gwname - {$gwitem['friendlyiface']} - {$gwitem['gateway']}</option>\n";
- }
-?>
- </select>
-<?php
- endif;
-?>
- </td>
- </tr>
-<?php
- endfor;
-?>
- </table>
- <br />
- <span class="vexpl">
- <?=gettext("Enter IP addresses to be used by the system for DNS resolution. " .
- "These are also used for the DHCP service, DNS forwarder and for PPTP VPN clients."); ?>
- <br />
- <?php if ($multiwan): ?>
- <br />
- <?=gettext("In addition, optionally select the gateway for each DNS server. " .
- "When using multiple WAN connections there should be at least one unique DNS server per gateway."); ?>
- <br />
- <?php endif; ?>
- <br />
- <input name="dnsallowoverride" type="checkbox" id="dnsallowoverride" value="yes" <?php if ($pconfig['dnsallowoverride']) echo "checked=\"checked\""; ?> />
- <strong>
- <?=gettext("Allow DNS server list to be overridden by DHCP/PPP on WAN"); ?>
- </strong>
- <br />
- <?php printf(gettext("If this option is set, %s will " .
- "use DNS servers assigned by a DHCP/PPP server on WAN " .
- "for its own purposes (including the DNS forwarder). " .
- "However, they will not be assigned to DHCP and PPTP " .
- "VPN clients."), $g['product_name']); ?>
- <br />
- <br />
- <input name="dnslocalhost" type="checkbox" id="dnslocalhost" value="yes" <?php if ($pconfig['dnslocalhost']) echo "checked=\"checked\""; ?> />
- <strong>
- <?=gettext("Do not use the DNS Forwarder or Resolver as a DNS server for the firewall"); ?>
- </strong>
- <br />
- <?=gettext("By default localhost (127.0.0.1) will be used as the first DNS server where the DNS Forwarder or DNS Resolver is enabled and set to listen on Localhost, so system can use the local DNS service to perform lookups. ".
- "Checking this box omits localhost from the list of DNS servers."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Time zone"); ?></td>
- <td width="78%" class="vtable">
- <select name="timezone" id="timezone">
- <?php foreach ($timezonelist as $value): ?>
- <?php if (strstr($value, "GMT")) continue; ?>
- <option value="<?=htmlspecialchars($value);?>" <?php if ($value == $pconfig['timezone']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($value);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Select the location closest to you"); ?>
- </span>
- </td>
- </tr>
-<!--
- <tr>
- <td width="22%" valign="top" class="vncell">Time update interval</td>
- <td width="78%" class="vtable">
- <input name="timeupdateinterval" type="text" class="formfld unknown" id="timeupdateinterval" size="4" value="<?=htmlspecialchars($pconfig['timeupdateinterval']);?>" />
- <br />
- <span class="vexpl">
- Minutes between network time sync. 300 recommended,
- or 0 to disable
- </span>
- </td>
- </tr>
--->
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("NTP time server"); ?></td>
- <td width="78%" class="vtable">
- <input name="timeservers" type="text" class="formfld unknown" id="timeservers" size="40" value="<?=htmlspecialchars($pconfig['timeservers']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Use a space to separate multiple hosts (only one " .
- "required). Remember to set up at least one DNS server " .
- "if you enter a host name here!"); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?php echo gettext("Language");?></td>
- <td width="78%" class="vtable">
- <select name="language">
- <?php
- foreach (get_locale_list() as $lcode => $ldesc) {
- $selected = ' selected="selected"';
- if ($lcode != $pconfig['language']) {
- $selected = '';
- }
- echo "<option value=\"{$lcode}\"{$selected}>{$ldesc}</option>";
- }
- ?>
- </select>
- <strong>
- <?=gettext("Choose a language for the webConfigurator"); ?>
- </strong>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
-<?php
- if (!$g['disablethemeselection']):
-?>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Theme"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell">&nbsp;</td>
- <td width="78%" class="vtable">
- <select name="theme">
-<?php
- $files = return_dir_as_array("/usr/local/www/themes/");
- foreach ($files as $f):
- if ((substr($f, 0, 1) == "_") && !isset($config['system']['developer'])) {
- continue;
- }
- if ($f == "CVS") {
- continue;
- }
- $curtheme = "pfsense";
- if ($config['theme']) {
- $curtheme = $config['theme'];
- }
- $selected = "";
- if ($f == $curtheme) {
- $selected = " selected=\"selected\"";
- }
-?>
- <option <?=$selected;?>><?=$f;?></option>
-<?php
- endforeach;
-?>
- </select>
- <strong>
- <?=gettext("This will change the look and feel of"); ?>
- <?=$g['product_name'];?>.
- </strong>
- </td>
- </tr>
-<?php
- endif;
-?>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
- </form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_advanced_admin.php b/usr/local/www/system_advanced_admin.php
deleted file mode 100644
index a449452..0000000
--- a/usr/local/www/system_advanced_admin.php
+++ /dev/null
@@ -1,657 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_advanced_admin.php
- part of pfSense
- Copyright (C) 2005-2010 Scott Ullrich
- Copyright (C) 2008 Shrew Soft Inc
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/killall
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-system-advanced-admin
-##|*NAME=System: Advanced: Admin Access Page
-##|*DESCR=Allow access to the 'System: Advanced: Admin Access' page.
-##|*MATCH=system_advanced_admin.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-$pconfig['webguiproto'] = $config['system']['webgui']['protocol'];
-$pconfig['webguiport'] = $config['system']['webgui']['port'];
-$pconfig['max_procs'] = ($config['system']['webgui']['max_procs']) ? $config['system']['webgui']['max_procs'] : 2;
-$pconfig['ssl-certref'] = $config['system']['webgui']['ssl-certref'];
-$pconfig['disablehttpredirect'] = isset($config['system']['webgui']['disablehttpredirect']);
-$pconfig['disableconsolemenu'] = isset($config['system']['disableconsolemenu']);
-$pconfig['noantilockout'] = isset($config['system']['webgui']['noantilockout']);
-$pconfig['nodnsrebindcheck'] = isset($config['system']['webgui']['nodnsrebindcheck']);
-$pconfig['nohttpreferercheck'] = isset($config['system']['webgui']['nohttpreferercheck']);
-$pconfig['pagenamefirst'] = isset($config['system']['webgui']['pagenamefirst']);
-$pconfig['loginautocomplete'] = isset($config['system']['webgui']['loginautocomplete']);
-$pconfig['althostnames'] = $config['system']['webgui']['althostnames'];
-$pconfig['enableserial'] = $config['system']['enableserial'];
-$pconfig['serialspeed'] = $config['system']['serialspeed'];
-$pconfig['primaryconsole'] = $config['system']['primaryconsole'];
-$pconfig['enablesshd'] = $config['system']['enablesshd'];
-$pconfig['sshport'] = $config['system']['ssh']['port'];
-$pconfig['sshdkeyonly'] = isset($config['system']['ssh']['sshdkeyonly']);
-$pconfig['quietlogin'] = isset($config['system']['webgui']['quietlogin']);
-
-$a_cert =& $config['cert'];
-
-$certs_available = false;
-if (is_array($a_cert) && count($a_cert)) {
- $certs_available = true;
-}
-
-if (!$pconfig['webguiproto'] || !$certs_available) {
- $pconfig['webguiproto'] = "http";
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if ($_POST['webguiport']) {
- if (!is_port($_POST['webguiport'])) {
- $input_errors[] = gettext("You must specify a valid webConfigurator port number");
- }
- }
-
- if ($_POST['max_procs']) {
- if (!is_numericint($_POST['max_procs']) || ($_POST['max_procs'] < 1) || ($_POST['max_procs'] > 500)) {
- $input_errors[] = gettext("Max Processes must be a number 1 or greater");
- }
- }
-
- if ($_POST['althostnames']) {
- $althosts = explode(" ", $_POST['althostnames']);
- foreach ($althosts as $ah) {
- if (!is_hostname($ah)) {
- $input_errors[] = sprintf(gettext("Alternate hostname %s is not a valid hostname."), htmlspecialchars($ah));
- }
- }
- }
-
- if ($_POST['sshport']) {
- if (!is_port($_POST['sshport'])) {
- $input_errors[] = gettext("You must specify a valid port number");
- }
- }
-
- if ($_POST['sshdkeyonly'] == "yes") {
- $config['system']['ssh']['sshdkeyonly'] = "enabled";
- } else if (isset($config['system']['ssh']['sshdkeyonly'])) {
- unset($config['system']['ssh']['sshdkeyonly']);
- }
-
- ob_flush();
- flush();
-
- if (!$input_errors) {
-
- if (update_if_changed("webgui protocol", $config['system']['webgui']['protocol'], $_POST['webguiproto'])) {
- $restart_webgui = true;
- }
- if (update_if_changed("webgui port", $config['system']['webgui']['port'], $_POST['webguiport'])) {
- $restart_webgui = true;
- }
- if (update_if_changed("webgui certificate", $config['system']['webgui']['ssl-certref'], $_POST['ssl-certref'])) {
- $restart_webgui = true;
- }
- if (update_if_changed("webgui max processes", $config['system']['webgui']['max_procs'], $_POST['max_procs'])) {
- $restart_webgui = true;
- }
-
- if ($_POST['disablehttpredirect'] == "yes") {
- $config['system']['webgui']['disablehttpredirect'] = true;
- $restart_webgui = true;
- } else {
- unset($config['system']['webgui']['disablehttpredirect']);
- $restart_webgui = true;
- }
- if ($_POST['quietlogin'] == "yes") {
- $config['system']['webgui']['quietlogin'] = true;
- } else {
- unset($config['system']['webgui']['quietlogin']);
- }
-
- if ($_POST['disableconsolemenu'] == "yes") {
- $config['system']['disableconsolemenu'] = true;
- } else {
- unset($config['system']['disableconsolemenu']);
- }
-
- if ($_POST['noantilockout'] == "yes") {
- $config['system']['webgui']['noantilockout'] = true;
- } else {
- unset($config['system']['webgui']['noantilockout']);
- }
-
- if ($_POST['enableserial'] == "yes" || $g['enableserial_force']) {
- $config['system']['enableserial'] = true;
- } else {
- unset($config['system']['enableserial']);
- }
-
- if (is_numericint($_POST['serialspeed'])) {
- $config['system']['serialspeed'] = $_POST['serialspeed'];
- } else {
- unset($config['system']['serialspeed']);
- }
-
- if ($_POST['primaryconsole']) {
- $config['system']['primaryconsole'] = $_POST['primaryconsole'];
- } else {
- unset($config['system']['primaryconsole']);
- }
-
- if ($_POST['nodnsrebindcheck'] == "yes") {
- $config['system']['webgui']['nodnsrebindcheck'] = true;
- } else {
- unset($config['system']['webgui']['nodnsrebindcheck']);
- }
-
- if ($_POST['nohttpreferercheck'] == "yes") {
- $config['system']['webgui']['nohttpreferercheck'] = true;
- } else {
- unset($config['system']['webgui']['nohttpreferercheck']);
- }
-
- if ($_POST['pagenamefirst'] == "yes") {
- $config['system']['webgui']['pagenamefirst'] = true;
- } else {
- unset($config['system']['webgui']['pagenamefirst']);
- }
-
- if ($_POST['loginautocomplete'] == "yes") {
- $config['system']['webgui']['loginautocomplete'] = true;
- } else {
- unset($config['system']['webgui']['loginautocomplete']);
- }
-
- if ($_POST['althostnames']) {
- $config['system']['webgui']['althostnames'] = $_POST['althostnames'];
- } else {
- unset($config['system']['webgui']['althostnames']);
- }
-
- $sshd_enabled = $config['system']['enablesshd'];
- if ($_POST['enablesshd']) {
- $config['system']['enablesshd'] = "enabled";
- } else {
- unset($config['system']['enablesshd']);
- }
-
- $sshd_keyonly = isset($config['system']['sshdkeyonly']);
- if ($_POST['sshdkeyonly']) {
- $config['system']['sshdkeyonly'] = true;
- } else {
- unset($config['system']['sshdkeyonly']);
- }
-
- $sshd_port = $config['system']['ssh']['port'];
- if ($_POST['sshport']) {
- $config['system']['ssh']['port'] = $_POST['sshport'];
- } else if (isset($config['system']['ssh']['port'])) {
- unset($config['system']['ssh']['port']);
- }
-
- if (($sshd_enabled != $config['system']['enablesshd']) ||
- ($sshd_keyonly != $config['system']['sshdkeyonly']) ||
- ($sshd_port != $config['system']['ssh']['port'])) {
- $restart_sshd = true;
- }
-
- if ($restart_webgui) {
- global $_SERVER;
- $http_host_port = explode("]", $_SERVER['HTTP_HOST']);
- /* IPv6 address check */
- if (strstr($_SERVER['HTTP_HOST'], "]")) {
- if (count($http_host_port) > 1) {
- array_pop($http_host_port);
- $host = str_replace(array("[", "]"), "", implode(":", $http_host_port));
- $host = "[{$host}]";
- } else {
- $host = str_replace(array("[", "]"), "", implode(":", $http_host_port));
- $host = "[{$host}]";
- }
- } else {
- list($host) = explode(":", $_SERVER['HTTP_HOST']);
- }
- $prot = $config['system']['webgui']['protocol'];
- $port = $config['system']['webgui']['port'];
- if ($port) {
- $url = "{$prot}://{$host}:{$port}/system_advanced_admin.php";
- } else {
- $url = "{$prot}://{$host}/system_advanced_admin.php";
- }
- }
-
- write_config();
-
- $retval = filter_configure();
- $savemsg = get_std_save_message($retval);
-
- if ($restart_webgui) {
- $savemsg .= sprintf("<br />" . gettext("One moment...redirecting to %s in 20 seconds."), $url);
- }
-
- conf_mount_rw();
- setup_serial_port();
- // Restart DNS in case dns rebinding toggled
- if (isset($config['dnsmasq']['enable'])) {
- services_dnsmasq_configure();
- } elseif (isset($config['unbound']['enable'])) {
- services_unbound_configure();
- }
- conf_mount_ro();
- }
-}
-
-$pgtitle = array(gettext("System"), gettext("Advanced: Admin Access"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-
-function prot_change() {
-
- if (document.iform.https_proto.checked) {
- document.getElementById("ssl_opts").style.display="";
- } else {
- document.getElementById("ssl_opts").style.display="none";
- }
-}
-
-//]]>
-</script>
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
-?>
- <form action="system_advanced_admin.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system advanced admin">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <span class="vexpl">
- <span class="red">
- <strong><?=gettext("NOTE:"); ?>&nbsp;</strong>
- </span>
- <?=gettext("The options on this page are intended for use by advanced users only."); ?>
- <br />
- </span>
- <br />
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("webConfigurator"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Protocol"); ?></td>
- <td width="78%" class="vtable">
- <?php
- if ($pconfig['webguiproto'] == "http") {
- $http_chk = "checked=\"checked\"";
- }
- if ($pconfig['webguiproto'] == "https") {
- $https_chk = "checked=\"checked\"";
- }
- if (!$certs_available) {
- $https_disabled = "disabled=\"disabled\"";
- }
- ?>
- <input name="webguiproto" id="http_proto" type="radio" value="http" <?=$http_chk;?> onclick="prot_change()" />
- <?=gettext("HTTP"); ?>
- &nbsp;&nbsp;&nbsp;
- <input name="webguiproto" id="https_proto" type="radio" value="https" <?=$https_chk;?> <?=$https_disabled;?> onclick="prot_change()" />
- <?=gettext("HTTPS"); ?>
- <?php if (!$certs_available): ?>
- <br />
- <?=gettext("No Certificates have been defined. You must"); ?>
- <a href="system_certmanager.php"><?=gettext("Create or Import"); ?></a>
- <?=gettext("a Certificate before SSL can be enabled."); ?>
- <?php endif; ?>
- </td>
- </tr>
- <tr id="ssl_opts">
- <td width="22%" valign="top" class="vncell"><?=gettext("SSL Certificate"); ?></td>
- <td width="78%" class="vtable">
- <select name="ssl-certref" id="ssl-certref" class="formselect">
- <?php
- foreach ($a_cert as $cert):
- $selected = "";
- if ($pconfig['ssl-certref'] == $cert['refid']) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$cert['refid'];?>" <?=$selected;?>><?=htmlspecialchars($cert['descr']);?></option>
- <?php
- endforeach;
- if (!count($a_cert)) {
- echo "<option></option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("TCP port"); ?></td>
- <td class="vtable">
- <input name="webguiport" type="text" class="formfld unknown" id="webguiport" size="5" value="<?=htmlspecialchars($config['system']['webgui']['port']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Enter a custom port number for the webConfigurator " .
- "above if you want to override the default (80 for HTTP, 443 " .
- "for HTTPS). Changes will take effect immediately after save."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Max Processes"); ?></td>
- <td class="vtable">
- <input name="max_procs" type="text" class="formfld unknown" id="max_procs" size="5" value="<?=htmlspecialchars($pconfig['max_procs']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("Enter the number of webConfigurator processes you " .
- "want to run. This defaults to 2. Increasing this will allow more " .
- "users/browsers to access the GUI concurrently."); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("WebGUI redirect"); ?></td>
- <td width="78%" class="vtable">
- <input name="disablehttpredirect" type="checkbox" id="disablehttpredirect" value="yes" <?php if ($pconfig['disablehttpredirect']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable webConfigurator redirect rule"); ?></strong>
- <br />
- <?php echo gettext("When this is unchecked, access to the webConfigurator " .
- "is always permitted even on port 80, regardless of the listening port configured. " .
- "Check this box to disable this automatically added redirect rule. ");
- ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("WebGUI Login Autocomplete"); ?></td>
- <td width="78%" class="vtable">
- <input name="loginautocomplete" type="checkbox" id="loginautocomplete" value="yes" <?php if ($pconfig['loginautocomplete']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable webConfigurator login autocomplete"); ?></strong>
- <br />
- <?php echo gettext("When this is checked, login credentials for the webConfigurator " .
- "may be saved by the browser. While convenient, some security standards require this to be disabled. " .
- "Check this box to enable autocomplete on the login form so that browsers will prompt to save credentials (NOTE: Some browsers do not respect this option). ");
- ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("WebGUI login messages"); ?></td>
- <td width="78%" class="vtable">
- <input name="quietlogin" type="checkbox" id="quietlogin" value="yes" <?php if ($pconfig['quietlogin']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable logging of webConfigurator successful logins"); ?></strong>
- <br />
- <?php echo gettext("When this is checked, successful logins to the webConfigurator " .
- "will not be logged.");
- ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Anti-lockout"); ?></td>
- <td width="78%" class="vtable">
- <?php
- if ($config['interfaces']['lan']) {
- $lockout_interface = "LAN";
- } else {
- $lockout_interface = "WAN";
- }
- ?>
- <input name="noantilockout" type="checkbox" id="noantilockout" value="yes" <?php if ($pconfig['noantilockout']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable webConfigurator anti-lockout rule"); ?></strong>
- <br />
- <?php printf(gettext("When this is unchecked, access to the webConfigurator " .
- "on the %s interface is always permitted, regardless of the user-defined firewall " .
- "rule set. Check this box to disable this automatically added rule, so access " .
- "to the webConfigurator is controlled by the user-defined firewall rules " .
- "(ensure you have a firewall rule in place that allows you in, or you will " .
- "lock yourself out!)"), $lockout_interface); ?>
- <em> <?=gettext("Hint: the &quot;Set interface(s) IP address&quot; option in the console menu resets this setting as well."); ?> </em>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("DNS Rebind Check"); ?></td>
- <td width="78%" class="vtable">
- <input name="nodnsrebindcheck" type="checkbox" id="nodnsrebindcheck" value="yes" <?php if ($pconfig['nodnsrebindcheck']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable DNS Rebinding Checks"); ?></strong>
- <br />
- <?php echo gettext("When this is unchecked, your system " .
- "is protected against <a href=\"http://en.wikipedia.org/wiki/DNS_rebinding\">DNS Rebinding attacks</a>. " .
- "This blocks private IP responses from your configured DNS servers. Check this box to disable this protection if it interferes with " .
- "webConfigurator access or name resolution in your environment. "); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Alternate Hostnames"); ?></td>
- <td width="78%" class="vtable">
- <input name="althostnames" type="text" class="formfld unknown" id="althostnames" size="75" value="<?=htmlspecialchars($pconfig['althostnames']);?>"/>
- <br />
- <strong><?=gettext("Alternate Hostnames for DNS Rebinding and HTTP_REFERER Checks"); ?></strong>
- <br />
- <?php echo gettext("Here you can specify alternate hostnames by which the router may be queried, to " .
- "bypass the DNS Rebinding Attack checks. Separate hostnames with spaces."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Browser HTTP_REFERER enforcement"); ?></td>
- <td width="78%" class="vtable">
- <input name="nohttpreferercheck" type="checkbox" id="nohttpreferercheck" value="yes" <?php if ($pconfig['nohttpreferercheck']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable HTTP_REFERER enforcement check"); ?></strong>
- <br />
- <?php echo gettext("When this is unchecked, access to the webConfigurator " .
- "is protected against HTTP_REFERER redirection attempts. " .
- "Check this box to disable this protection if you find that it interferes with " .
- "webConfigurator access in certain corner cases such as using external scripts to interact with this system. More information on HTTP_REFERER is available from <a target='_blank' href='http://en.wikipedia.org/wiki/HTTP_referrer'>Wikipedia</a>."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Browser tab text"); ?></td>
- <td width="78%" class="vtable">
- <input name="pagenamefirst" type="checkbox" id="pagenamefirst" value="yes" <?php if ($pconfig['pagenamefirst']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Display page name first in browser tab"); ?></strong>
- <br />
- <?php echo gettext("When this is unchecked, the browser tab shows the host name followed by the current page. "); ?>
- <br />
- <?php echo gettext("Check this box to display the current page followed by the host name."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Secure Shell"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Secure Shell Server"); ?></td>
- <td width="78%" class="vtable">
- <input name="enablesshd" type="checkbox" id="enablesshd" value="yes" <?php if (isset($pconfig['enablesshd'])) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable Secure Shell"); ?></strong>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Authentication Method"); ?></td>
- <td width="78%" class="vtable">
- <input name="sshdkeyonly" type="checkbox" id="sshdkeyonly" value="yes" <?php if ($pconfig['sshdkeyonly']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable password login for Secure Shell (RSA/DSA key only)"); ?></strong>
- <br />
- <?=gettext("When enabled, authorized keys need to be configured for each"); ?>
- <a href="system_usermanager.php"><?=gettext("user"); ?></a>
- <?=gettext("that has been granted secure shell access."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("SSH port"); ?></td>
- <td width="78%" class="vtable">
- <input name="sshport" type="text" id="sshport" value="<?php echo htmlspecialchars($pconfig['sshport']); ?>" />
- <br />
- <span class="vexpl"><?=gettext("Note: Leave this blank for the default of 22."); ?></span>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Serial Communications"); ?></td>
- </tr>
- <?php if (!$g['enableserial_force'] && ($g['platform'] == "pfSense" || $g['platform'] == "cdrom" || file_exists("/etc/nano_use_vga.txt"))): ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Serial Terminal"); ?></td>
- <td width="78%" class="vtable">
- <input name="enableserial" type="checkbox" id="enableserial" value="yes" <?php if (isset($pconfig['enableserial'])) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enables the first serial port with 115200/8/N/1 by default, or another speed selectable below."); ?></strong>
- <span class="vexpl"><?=gettext("Note: This will redirect the console output and messages to the serial port. You can still access the console menu from the internal video card/keyboard. A <b>null modem</b> serial cable or adapter is required to use the serial console."); ?></span>
- </td>
- </tr>
- <?php endif; ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Serial Speed")?></td>
- <td width="78%" class="vtable">
- <select name="serialspeed" id="serialspeed" class="formselect">
- <option value="115200" <?php if ($pconfig['serialspeed'] == "115200") echo "selected=\"selected\"";?>>115200</option>
- <option value="57600" <?php if ($pconfig['serialspeed'] == "57600") echo "selected=\"selected\"";?>>57600</option>
- <option value="38400" <?php if ($pconfig['serialspeed'] == "38400") echo "selected=\"selected\"";?>>38400</option>
- <option value="19200" <?php if ($pconfig['serialspeed'] == "19200") echo "selected=\"selected\"";?>>19200</option>
- <option value="14400" <?php if ($pconfig['serialspeed'] == "14400") echo "selected=\"selected\"";?>>14400</option>
- <option value="9600" <?php if ($pconfig['serialspeed'] == "9600") echo "selected=\"selected\"";?>>9600</option>
- </select> bps
- <br /><?=gettext("Allows selection of different speeds for the serial console port."); ?>
- </td>
- </tr>
- <?php if (!$g['primaryconsole_force'] && ($g['platform'] == "pfSense" || $g['platform'] == "cdrom" || file_exists("/etc/nano_use_vga.txt"))): ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Primary Console")?></td>
- <td width="78%" class="vtable">
- <select name="primaryconsole" id="primaryconsole" class="formselect">
- <option value="serial" <?php if ($pconfig['primaryconsole'] == "serial") echo "selected=\"selected\"";?>>Serial Console</option>
- <option value="video" <?php if ($pconfig['primaryconsole'] == "video") echo "selected=\"selected\"";?>>VGA Console</option>
- </select>
- <br /><?=gettext("Select the preferred console if multiple consoles are present. The preferred console will show pfSense boot script output. All consoles display OS boot messages, console messages, and the console menu."); ?>
- </td>
- </tr>
- <?php endif; ?>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Console Options"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Console menu"); ?></td>
- <td width="78%" class="vtable">
- <input name="disableconsolemenu" type="checkbox" id="disableconsolemenu" value="yes" <?php if ($pconfig['disableconsolemenu']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Password protect the console menu"); ?></strong>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%"><input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" /></td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
- </form>
- <script type="text/javascript">
- //<![CDATA[
- prot_change();
- //]]>
- </script>
-
-<?php include("fend.inc"); ?>
-<?php
- if ($restart_webgui) {
- echo "<meta http-equiv=\"refresh\" content=\"20;url={$url}\" />";
- }
-?>
-</body>
-</html>
-
-<?php
-if ($restart_sshd) {
-
- killbyname("sshd");
- log_error(gettext("secure shell configuration has changed. Stopping sshd."));
-
- if ($config['system']['enablesshd']) {
- log_error(gettext("secure shell configuration has changed. Restarting sshd."));
- send_event("service restart sshd");
- }
-}
-if ($restart_webgui) {
- ob_flush();
- flush();
- log_error(gettext("webConfigurator configuration has changed. Restarting webConfigurator."));
- send_event("service restart webgui");
-}
-
-?>
diff --git a/usr/local/www/system_advanced_firewall.php b/usr/local/www/system_advanced_firewall.php
deleted file mode 100644
index fc6b0ed..0000000
--- a/usr/local/www/system_advanced_firewall.php
+++ /dev/null
@@ -1,807 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_advanced_firewall.php
- part of pfSense
- Copyright (C) 2005-2007 Scott Ullrich
- Copyright (C) 2008 Shrew Soft Inc
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-system-advanced-firewall
-##|*NAME=System: Advanced: Firewall and NAT page
-##|*DESCR=Allow access to the 'System: Advanced: Firewall and NAT' page.
-##|*MATCH=system_advanced_firewall.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-$pconfig['disablefilter'] = $config['system']['disablefilter'];
-$pconfig['rfc959workaround'] = $config['system']['rfc959workaround'];
-$pconfig['scrubnodf'] = $config['system']['scrubnodf'];
-$pconfig['scrubrnid'] = $config['system']['scrubrnid'];
-$pconfig['tcpidletimeout'] = $config['filter']['tcpidletimeout'];
-$pconfig['optimization'] = $config['filter']['optimization'];
-$pconfig['adaptivestart'] = $config['system']['adaptivestart'];
-$pconfig['adaptiveend'] = $config['system']['adaptiveend'];
-$pconfig['maximumstates'] = $config['system']['maximumstates'];
-$pconfig['aliasesresolveinterval'] = $config['system']['aliasesresolveinterval'];
-$old_aliasesresolveinterval = $config['system']['aliasesresolveinterval'];
-$pconfig['checkaliasesurlcert'] = isset($config['system']['checkaliasesurlcert']);
-$pconfig['maximumtableentries'] = $config['system']['maximumtableentries'];
-$pconfig['maximumfrags'] = $config['system']['maximumfrags'];
-$pconfig['disablereplyto'] = isset($config['system']['disablereplyto']);
-$pconfig['disablenegate'] = isset($config['system']['disablenegate']);
-$pconfig['bogonsinterval'] = $config['system']['bogons']['interval'];
-$pconfig['disablenatreflection'] = $config['system']['disablenatreflection'];
-$pconfig['enablebinatreflection'] = $config['system']['enablebinatreflection'];
-$pconfig['reflectiontimeout'] = $config['system']['reflectiontimeout'];
-$pconfig['bypassstaticroutes'] = isset($config['filter']['bypassstaticroutes']);
-$pconfig['disablescrub'] = isset($config['system']['disablescrub']);
-$pconfig['tftpinterface'] = explode(",", $config['system']['tftpinterface']);
-$pconfig['disablevpnrules'] = isset($config['system']['disablevpnrules']);
-$pconfig['tcpfirsttimeout'] = $config['system']['tcpfirsttimeout'];
-$pconfig['tcpopeningtimeout'] = $config['system']['tcpopeningtimeout'];
-$pconfig['tcpestablishedtimeout'] = $config['system']['tcpestablishedtimeout'];
-$pconfig['tcpclosingtimeout'] = $config['system']['tcpclosingtimeout'];
-$pconfig['tcpfinwaittimeout'] = $config['system']['tcpfinwaittimeout'];
-$pconfig['tcpclosedtimeout'] = $config['system']['tcpclosedtimeout'];
-$pconfig['udpfirsttimeout'] = $config['system']['udpfirsttimeout'];
-$pconfig['udpsingletimeout'] = $config['system']['udpsingletimeout'];
-$pconfig['udpmultipletimeout'] = $config['system']['udpmultipletimeout'];
-$pconfig['icmpfirsttimeout'] = $config['system']['icmpfirsttimeout'];
-$pconfig['icmperrortimeout'] = $config['system']['icmperrortimeout'];
-$pconfig['otherfirsttimeout'] = $config['system']['otherfirsttimeout'];
-$pconfig['othersingletimeout'] = $config['system']['othersingletimeout'];
-$pconfig['othermultipletimeout'] = $config['system']['othermultipletimeout'];
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if ((empty($_POST['adaptivestart']) && !empty($_POST['adaptiveend'])) || (!empty($_POST['adaptivestart']) && empty($_POST['adaptiveend']))) {
- $input_errors[] = gettext("The Firewall Adaptive values must be set together.");
- }
- if (!empty($_POST['adaptivestart']) && !is_numericint($_POST['adaptivestart'])) {
- $input_errors[] = gettext("The Firewall Adaptive Start value must be an integer.");
- }
- if (!empty($_POST['adaptiveend']) && !is_numericint($_POST['adaptiveend'])) {
- $input_errors[] = gettext("The Firewall Adaptive End value must be an integer.");
- }
- if ($_POST['maximumstates'] && !is_numericint($_POST['maximumstates'])) {
- $input_errors[] = gettext("The Firewall Maximum States value must be an integer.");
- }
- if ($_POST['aliasesresolveinterval'] && !is_numericint($_POST['aliasesresolveinterval'])) {
- $input_errors[] = gettext("The Aliases Hostname Resolve Interval value must be an integer.");
- }
- if ($_POST['maximumtableentries'] && !is_numericint($_POST['maximumtableentries'])) {
- $input_errors[] = gettext("The Firewall Maximum Table Entries value must be an integer.");
- }
- if ($_POST['maximumfrags'] && !is_numericint($_POST['maximumfrags'])) {
- $input_errors[] = gettext("The Firewall Maximum Fragment Entries value must be an integer.");
- }
- if ($_POST['tcpidletimeout'] && !is_numericint($_POST['tcpidletimeout'])) {
- $input_errors[] = gettext("The TCP idle timeout must be an integer.");
- }
- if ($_POST['reflectiontimeout'] && !is_numericint($_POST['reflectiontimeout'])) {
- $input_errors[] = gettext("The Reflection timeout must be an integer.");
- }
- if ($_POST['tcpfirsttimeout'] && !is_numericint($_POST['tcpfirsttimeout'])) {
- $input_errors[] = gettext("The TCP first timeout value must be an integer.");
- }
- if ($_POST['tcpopeningtimeout'] && !is_numericint($_POST['tcpopeningtimeout'])) {
- $input_errors[] = gettext("The TCP opening timeout value must be an integer.");
- }
- if ($_POST['tcpestablishedtimeout'] && !is_numericint($_POST['tcpestablishedtimeout'])) {
- $input_errors[] = gettext("The TCP established timeout value must be an integer.");
- }
- if ($_POST['tcpclosingtimeout'] && !is_numericint($_POST['tcpclosingtimeout'])) {
- $input_errors[] = gettext("The TCP closing timeout value must be an integer.");
- }
- if ($_POST['tcpfinwaittimeout'] && !is_numericint($_POST['tcpfinwaittimeout'])) {
- $input_errors[] = gettext("The TCP FIN wait timeout value must be an integer.");
- }
- if ($_POST['tcpclosedtimeout'] && !is_numericint($_POST['tcpclosedtimeout'])) {
- $input_errors[] = gettext("The TCP closed timeout value must be an integer.");
- }
- if ($_POST['udpfirsttimeout'] && !is_numericint($_POST['udpfirsttimeout'])) {
- $input_errors[] = gettext("The UDP first timeout value must be an integer.");
- }
- if ($_POST['udpsingletimeout'] && !is_numericint($_POST['udpsingletimeout'])) {
- $input_errors[] = gettext("The UDP single timeout value must be an integer.");
- }
- if ($_POST['udpmultipletimeout'] && !is_numericint($_POST['udpmultipletimeout'])) {
- $input_errors[] = gettext("The UDP multiple timeout value must be an integer.");
- }
- if ($_POST['icmpfirsttimeout'] && !is_numericint($_POST['icmpfirsttimeout'])) {
- $input_errors[] = gettext("The ICMP first timeout value must be an integer.");
- }
- if ($_POST['icmperrortimeout'] && !is_numericint($_POST['icmperrortimeout'])) {
- $input_errors[] = gettext("The ICMP error timeout value must be an integer.");
- }
- if ($_POST['otherfirsttimeout'] && !is_numericint($_POST['otherfirsttimeout'])) {
- $input_errors[] = gettext("The Other first timeout value must be an integer.");
- }
- if ($_POST['othersingletimeout'] && !is_numericint($_POST['othersingletimeout'])) {
- $input_errors[] = gettext("The Other single timeout value must be an integer.");
- }
- if ($_POST['othermultipletimeout'] && !is_numericint($_POST['othermultipletimeout'])) {
- $input_errors[] = gettext("The Other multiple timeout value must be an integer.");
- }
-
- ob_flush();
- flush();
-
- if (!$input_errors) {
-
- if ($_POST['disablefilter'] == "yes") {
- $config['system']['disablefilter'] = "enabled";
- } else {
- unset($config['system']['disablefilter']);
- }
-
- if ($_POST['disablevpnrules'] == "yes") {
- $config['system']['disablevpnrules'] = true;
- } else {
- unset($config['system']['disablevpnrules']);
- }
- if ($_POST['rfc959workaround'] == "yes") {
- $config['system']['rfc959workaround'] = "enabled";
- } else {
- unset($config['system']['rfc959workaround']);
- }
-
- if ($_POST['scrubnodf'] == "yes") {
- $config['system']['scrubnodf'] = "enabled";
- } else {
- unset($config['system']['scrubnodf']);
- }
-
- if ($_POST['scrubrnid'] == "yes") {
- $config['system']['scrubrnid'] = "enabled";
- } else {
- unset($config['system']['scrubrnid']);
- }
-
- if (!empty($_POST['adaptiveend'])) {
- $config['system']['adaptiveend'] = $_POST['adaptiveend'];
- } else {
- unset($config['system']['adaptiveend']);
- }
- if (!empty($_POST['adaptivestart'])) {
- $config['system']['adaptivestart'] = $_POST['adaptivestart'];
- } else {
- unset($config['system']['adaptivestart']);
- }
-
- if ($_POST['checkaliasesurlcert'] == "yes") {
- $config['system']['checkaliasesurlcert'] = true;
- } else {
- unset($config['system']['checkaliasesurlcert']);
- }
-
- $config['system']['optimization'] = $_POST['optimization'];
- $config['system']['maximumstates'] = $_POST['maximumstates'];
- $config['system']['aliasesresolveinterval'] = $_POST['aliasesresolveinterval'];
- $config['system']['maximumtableentries'] = $_POST['maximumtableentries'];
- $config['system']['maximumfrags'] = $_POST['maximumfrags'];
-
- if (!empty($_POST['tcpfirsttimeout'])) {
- $config['system']['tcpfirsttimeout'] = $_POST['tcpfirsttimeout'];
- } else {
- unset($config['system']['tcpfirsttimeout']);
- }
- if (!empty($_POST['tcpopeningtimeout'])) {
- $config['system']['tcpopeningtimeout'] = $_POST['tcpopeningtimeout'];
- } else {
- unset($config['system']['tcpopeningtimeout']);
- }
- if (!empty($_POST['tcpestablishedtimeout'])) {
- $config['system']['tcpestablishedtimeout'] = $_POST['tcpestablishedtimeout'];
- } else {
- unset($config['system']['tcpestablishedtimeout']);
- }
- if (!empty($_POST['tcpclosingtimeout'])) {
- $config['system']['tcpclosingtimeout'] = $_POST['tcpclosingtimeout'];
- } else {
- unset($config['system']['tcpclosingtimeout']);
- }
- if (!empty($_POST['tcpfinwaittimeout'])) {
- $config['system']['tcpfinwaittimeout'] = $_POST['tcpfinwaittimeout'];
- } else {
- unset($config['system']['tcpfinwaittimeout']);
- }
- if (!empty($_POST['tcpclosedtimeout'])) {
- $config['system']['tcpclosedtimeout'] = $_POST['tcpclosedtimeout'];
- } else {
- unset($config['system']['tcpclosedtimeout']);
- }
- if (!empty($_POST['udpfirsttimeout'])) {
- $config['system']['udpfirsttimeout'] = $_POST['udpfirsttimeout'];
- } else {
- unset($config['system']['udpfirsttimeout']);
- }
- if (!empty($_POST['udpsingletimeout'])) {
- $config['system']['udpsingletimeout'] = $_POST['udpsingletimeout'];
- } else {
- unset($config['system']['udpsingletimeout']);
- }
- if (!empty($_POST['udpmultipletimeout'])) {
- $config['system']['udpmultipletimeout'] = $_POST['udpmultipletimeout'];
- } else {
- unset($config['system']['udpmultipletimeout']);
- }
- if (!empty($_POST['icmpfirsttimeout'])) {
- $config['system']['icmpfirsttimeout'] = $_POST['icmpfirsttimeout'];
- } else {
- unset($config['system']['icmpfirsttimeout']);
- }
- if (!empty($_POST['icmperrortimeout'])) {
- $config['system']['icmperrortimeout'] = $_POST['icmperrortimeout'];
- } else {
- unset($config['system']['icmperrortimeout']);
- }
- if (!empty($_POST['otherfirsttimeout'])) {
- $config['system']['otherfirsttimeout'] = $_POST['otherfirsttimeout'];
- } else {
- unset($config['system']['otherfirsttimeout']);
- }
- if (!empty($_POST['othersingletimeout'])) {
- $config['system']['othersingletimeout'] = $_POST['othersingletimeout'];
- } else {
- unset($config['system']['othersingletimeout']);
- }
- if (!empty($_POST['othermultipletimeout'])) {
- $config['system']['othermultipletimeout'] = $_POST['othermultipletimeout'];
- } else {
- unset($config['system']['othermultipletimeout']);
- }
-
- if ($_POST['natreflection'] == "proxy") {
- unset($config['system']['disablenatreflection']);
- unset($config['system']['enablenatreflectionpurenat']);
- } else if ($_POST['natreflection'] == "purenat") {
- unset($config['system']['disablenatreflection']);
- $config['system']['enablenatreflectionpurenat'] = "yes";
- } else {
- $config['system']['disablenatreflection'] = "yes";
- unset($config['system']['enablenatreflectionpurenat']);
- }
-
- if ($_POST['enablebinatreflection'] == "yes") {
- $config['system']['enablebinatreflection'] = "yes";
- } else {
- unset($config['system']['enablebinatreflection']);
- }
-
- if ($_POST['disablereplyto'] == "yes") {
- $config['system']['disablereplyto'] = $_POST['disablereplyto'];
- } else {
- unset($config['system']['disablereplyto']);
- }
-
- if ($_POST['disablenegate'] == "yes") {
- $config['system']['disablenegate'] = $_POST['disablenegate'];
- } else {
- unset($config['system']['disablenegate']);
- }
-
- if ($_POST['enablenatreflectionhelper'] == "yes") {
- $config['system']['enablenatreflectionhelper'] = "yes";
- } else {
- unset($config['system']['enablenatreflectionhelper']);
- }
-
- $config['system']['reflectiontimeout'] = $_POST['reflectiontimeout'];
-
- if ($_POST['bypassstaticroutes'] == "yes") {
- $config['filter']['bypassstaticroutes'] = $_POST['bypassstaticroutes'];
- } elseif (isset($config['filter']['bypassstaticroutes'])) {
- unset($config['filter']['bypassstaticroutes']);
- }
-
- if ($_POST['disablescrub'] == "yes") {
- $config['system']['disablescrub'] = $_POST['disablescrub'];
- } else {
- unset($config['system']['disablescrub']);
- }
-
- if ($_POST['tftpinterface']) {
- $config['system']['tftpinterface'] = implode(",", $_POST['tftpinterface']);
- } else {
- unset($config['system']['tftpinterface']);
- }
-
- if ($_POST['bogonsinterval'] != $config['system']['bogons']['interval']) {
- switch ($_POST['bogonsinterval']) {
- case 'daily':
- install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "*", "*", "*");
- break;
- case 'weekly':
- install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "*", "*", "0");
- break;
- case 'monthly':
- // fall through
- default:
- install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "1", "*", "*");
- }
- $config['system']['bogons']['interval'] = $_POST['bogonsinterval'];
- }
-
- write_config();
-
- // Kill filterdns when value changes, filter_configure() will restart it
- if (($old_aliasesresolveinterval != $config['system']['aliasesresolveinterval']) &&
- isvalidpid("{$g['varrun_path']}/filterdns.pid")) {
- killbypid("{$g['varrun_path']}/filterdns.pid");
- }
-
- $retval = 0;
- $retval = filter_configure();
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message($retval);
- } else {
- $savemsg = $retval;
- }
- }
-}
-
-$pgtitle = array(gettext("System"), gettext("Advanced: Firewall and NAT"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
-
-var descs=new Array(5);
-descs[0]="<?=gettext("as the name says, it's the normal optimization algorithm");?>";
-descs[1]="<?=gettext("used for high latency links, such as satellite links. Expires idle connections later than default");?>";
-descs[2]="<?=gettext("expires idle connections quicker. More efficient use of CPU and memory but can drop legitimate idle connections");?>";
-descs[3]="<?=gettext("tries to avoid dropping any legitimate idle connections at the expense of increased memory usage and CPU utilization.");?>";
-
-function update_description(itemnum) {
- document.forms[0].info.value=descs[itemnum];
-
-}
-
-//]]>
-</script>
-
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
-?>
- <form action="system_advanced_firewall.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system advanced firewall/nat">
- <tr>
- <td class="tabnavtbl">
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), false, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), true, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <span class="vexpl">
- <span class="red">
- <strong><?=gettext("NOTE:");?>&nbsp;</strong>
- </span>
- <?=gettext("The options on this page are intended for use by advanced users only.");?>
- <br />
- </span>
- <br />
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Firewall Advanced");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IP Do-Not-Fragment compatibility");?></td>
- <td width="78%" class="vtable">
- <input name="scrubnodf" type="checkbox" id="scrubnodf" value="yes" <?php if (isset($config['system']['scrubnodf'])) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Clear invalid DF bits instead of dropping the packets");?></strong><br />
- <?=gettext("This allows for communications with hosts that generate fragmented " .
- "packets with the don't fragment (DF) bit set. Linux NFS is known to " .
- "do this. This will cause the filter to not drop such packets but " .
- "instead clear the don't fragment bit.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IP Random id generation");?></td>
- <td width="78%" class="vtable">
- <input name="scrubrnid" type="checkbox" id="scrubrnid" value="yes" <?php if (isset($config['system']['scrubrnid'])) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Insert a stronger id into IP header of packets passing through the filter.");?></strong><br />
- <?=gettext("Replaces the IP identification field of packets with random values to " .
- "compensate for operating systems that use predictable values. " .
- "This option only applies to packets that are not fragmented after the " .
- "optional packet reassembly.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Firewall Optimization Options");?></td>
- <td width="78%" class="vtable">
- <select onchange="update_description(this.selectedIndex);" name="optimization" id="optimization">
- <option value="normal"<?php if ($config['system']['optimization'] == "normal") echo " selected=\"selected\""; ?>><?=gettext("normal");?></option>
- <option value="high-latency"<?php if ($config['system']['optimization'] == "high-latency") echo " selected=\"selected\""; ?>><?=gettext("high-latency");?></option>
- <option value="aggressive"<?php if ($config['system']['optimization'] == "aggressive") echo " selected=\"selected\""; ?>><?=gettext("aggressive");?></option>
- <option value="conservative"<?php if ($config['system']['optimization'] == "conservative") echo " selected=\"selected\""; ?>><?=gettext("conservative");?></option>
- </select>
- <br />
- <textarea readonly="readonly" cols="60" rows="2" id="info" name="info" style="padding:5px; border:1px dashed #990000; background-color: #ffffff; color: #000000; font-size: 8pt;"></textarea>
- <script type="text/javascript">
- //<![CDATA[
- update_description(document.forms[0].optimization.selectedIndex);
- //]]>
- </script>
- <br />
- <?=gettext("Select the type of state table optimization to use");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Disable Firewall");?></td>
- <td width="78%" class="vtable">
- <input name="disablefilter" type="checkbox" id="disablefilter" value="yes" <?php if (isset($config['system']['disablefilter'])) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable all packet filtering.");?></strong>
- <br />
- <span class="vexpl"><?php printf(gettext("Note: This converts %s into a routing only platform!"), $g['product_name']);?><br />
- <?=gettext("Note: This will also turn off NAT!");?>
- <br /><?=gettext("If you only want to disable NAT, and not firewall rules, visit the");?> <a href="firewall_nat_out.php"><?=gettext("Outbound NAT");?></a> <?=gettext("page");?>.
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Disable Firewall Scrub");?></td>
- <td width="78%" class="vtable">
- <input name="disablescrub" type="checkbox" id="disablescrub" value="yes" <?php if (isset($config['system']['disablescrub'])) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disables the PF scrubbing option which can sometimes interfere with NFS and PPTP traffic.");?></strong>
- <br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Firewall Adaptive Timeouts");?></td>
- <td width="78%" class="vtable">
- <strong><?=gettext("Timeouts for states can be scaled adaptively as the number of state table entries grows.");?></strong>
- <br />
- <input name="adaptivestart" type="text" id="adaptivestart" value="<?php echo htmlspecialchars($pconfig['adaptivestart']); ?>" />
- <br /><?=gettext("When the number of state entries exceeds this value, adaptive scaling begins. All timeout values are scaled linearly with factor (adaptive.end - number of states) / (adaptive.end - adaptive.start).");?>
-
- <br />
- <input name="adaptiveend" type="text" id="adaptiveend" value="<?php echo htmlspecialchars($pconfig['adaptiveend']); ?>" />
- <br /><?=gettext("When reaching this number of state entries, all timeout values become zero, effectively purging all state entries immediately. This value is used to define the scale factor, it should not actually be reached (set a lower state limit, see below).");?>
- <br />
- <span class="vexpl"><?=gettext("Note: Leave this blank for the default, which auto-calculates these values from your maximum state table size. Adaptive start is 60% and end is 120% of the state table size by default.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Firewall Maximum States");?></td>
- <td width="78%" class="vtable">
- <input name="maximumstates" type="text" id="maximumstates" value="<?php echo htmlspecialchars($pconfig['maximumstates']); ?>" />
- <br />
- <strong><?=gettext("Maximum number of connections to hold in the firewall state table.");?></strong>
- <br />
- <span class="vexpl"><?=gettext("Note: Leave this blank for the default. On your system the default size is:");?> <?= pfsense_default_state_size() ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Firewall Maximum Table Entries");?></td>
- <td width="78%" class="vtable">
- <input name="maximumtableentries" type="text" id="maximumtableentries" value="<?php echo htmlspecialchars($pconfig['maximumtableentries']); ?>" />
- <br />
- <strong><?=gettext("Maximum number of table entries for systems such as aliases, sshlockout, snort, etc, combined.");?></strong>
- <br />
- <span class="vexpl">
- <?=gettext("Note: Leave this blank for the default.");?>
- <?php if (empty($pconfig['maximumtableentries'])): ?>
- <?= gettext("On your system the default size is:");?> <?= pfsense_default_table_entries_size(); ?>
- <?php endif; ?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Firewall Maximum Fragment Entries");?></td>
- <td width="78%" class="vtable">
- <input name="maximumfrags" type="text" id="maximumfrags" value="<?php echo htmlspecialchars($pconfig['maximumfrags']); ?>" />
- <br />
- <strong><?=gettext("Maximum number of packet fragments to hold for reassembly by scrub rules.");?></strong>
- <br />
- <span class="vexpl">
- <?=gettext("Note: Leave this blank for the default (5000).");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Static route filtering");?></td>
- <td width="78%" class="vtable">
- <input name="bypassstaticroutes" type="checkbox" id="bypassstaticroutes" value="yes" <?php if ($pconfig['bypassstaticroutes']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Bypass firewall rules for traffic on the same interface");?></strong>
- <br />
- <?=gettext("This option only applies if you have defined one or more static routes. If it is enabled, traffic that enters and " .
- "leaves through the same interface will not be checked by the firewall. This may be desirable in some situations where " .
- "multiple subnets are connected to the same interface.");?>
- <br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell">Disable Auto-added VPN rules</td>
- <td width="78%" class="vtable">
- <input name="disablevpnrules" type="checkbox" id="disablevpnrules" value="yes" <?php if (isset($config['system']['disablevpnrules'])) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable all auto-added VPN rules.");?></strong>
- <br />
- <span class="vexpl">
- <?=gettext("Note: This disables automatically added rules for IPsec, PPTP.");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell">Disable reply-to</td>
- <td width="78%" class="vtable">
- <input name="disablereplyto" type="checkbox" id="disablereplyto" value="yes" <?php if ($pconfig['disablereplyto']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable reply-to on WAN rules");?></strong>
- <br />
- <?=gettext("With Multi-WAN you generally want to ensure traffic leaves the same interface it arrives on, hence reply-to is added automatically by default. " .
- "When using bridging, you must disable this behavior if the WAN gateway IP is different from the gateway IP of the hosts behind the bridged interface.");?>
- <br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell">Disable Negate rules</td>
- <td width="78%" class="vtable">
- <input name="disablenegate" type="checkbox" id="disablenegate" value="yes" <?php if ($pconfig['disablenegate']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable Negate rule on policy routing rules");?></strong>
- <br />
- <?=gettext("With Multi-WAN you generally want to ensure traffic reaches directly connected networks and VPN networks when using policy routing. You can disable this for special purposes but it requires manually creating rules for these networks");?>
- <br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Aliases Hostnames Resolve Interval");?></td>
- <td width="78%" class="vtable">
- <input name="aliasesresolveinterval" type="text" id="aliasesresolveinterval" value="<?php echo htmlspecialchars($pconfig['aliasesresolveinterval']); ?>" />
- <br />
- <strong><?=gettext("Interval, in seconds, that will be used to resolve hostnames configured on aliases.");?></strong>
- <br />
- <span class="vexpl"><?=gettext("Note: Leave this blank for the default (300s).");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Check certificate of aliases URLs");?></td>
- <td width="78%" class="vtable">
- <input name="checkaliasesurlcert" type="checkbox" id="checkaliasesurlcert" value="yes" <?php if ($pconfig['checkaliasesurlcert']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Verify HTTPS certificates when downloading alias URLs");?></strong>
- <br />
- <?=gettext("Make sure the certificate is valid for all HTTPS addresses on aliases. If it's not valid or is revoked, do not download it.");?>
- <br />
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Bogon Networks");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Update Frequency");?></td>
- <td width="78%" class="vtable">
- <select name="bogonsinterval" class="formselect">
- <option value="monthly" <?php if (empty($pconfig['bogonsinterval']) || $pconfig['bogonsinterval'] == 'monthly') echo "selected=\"selected\""; ?>><?=gettext("Monthly"); ?></option>
- <option value="weekly" <?php if ($pconfig['bogonsinterval'] == 'weekly') echo "selected=\"selected\""; ?>><?=gettext("Weekly"); ?></option>
- <option value="daily" <?php if ($pconfig['bogonsinterval'] == 'daily') echo "selected=\"selected\""; ?>><?=gettext("Daily"); ?></option>
- </select>
- <br />
- <?=gettext("The frequency of updating the lists of IP addresses that are reserved (but not RFC 1918) or not yet assigned by IANA.");?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
-<?php
- if (count($config['interfaces']) > 1):
-?>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Network Address Translation");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("NAT Reflection mode for port forwards");?></td>
- <td width="78%" class="vtable">
- <select name="natreflection" class="formselect">
- <option value="disable" <?php if (isset($config['system']['disablenatreflection'])) echo "selected=\"selected\""; ?>><?=gettext("Disable"); ?></option>
- <option value="proxy" <?php if (!isset($config['system']['disablenatreflection']) && !isset($config['system']['enablenatreflectionpurenat'])) echo "selected=\"selected\""; ?>><?=gettext("Enable (NAT + Proxy)"); ?></option>
- <option value="purenat" <?php if (!isset($config['system']['disablenatreflection']) && isset($config['system']['enablenatreflectionpurenat'])) echo "selected=\"selected\""; ?>><?=gettext("Enable (Pure NAT)"); ?></option>
- </select>
- <br />
- <strong><?=gettext("When enabled, this automatically creates additional NAT redirect rules for access to port forwards on your external IP addresses from within your internal networks.");?></strong>
- <br /><br />
- <?=gettext("The NAT + proxy mode uses a helper program to send packets to the target of the port forward. It is useful in setups where the interface and/or gateway IP used for communication with the target cannot be accurately determined at the time the rules are loaded. Reflection rules are not created for ranges larger than 500 ports and will not be used for more than 1000 ports total between all port forwards. Only TCP and UDP protocols are supported.");?>
- <br /><br />
- <?=gettext("The pure NAT mode uses a set of NAT rules to direct packets to the target of the port forward. It has better scalability, but it must be possible to accurately determine the interface and gateway IP used for communication with the target at the time the rules are loaded. There are no inherent limits to the number of ports other than the limits of the protocols. All protocols available for port forwards are supported.");?>
- <br /><br />
- <?=gettext("Individual rules may be configured to override this system setting on a per-rule basis.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Reflection Timeout");?></td>
- <td width="78%" class="vtable">
- <input name="reflectiontimeout" id="reflectiontimeout" value="<?php echo $config['system']['reflectiontimeout']; ?>" /><br />
- <strong><?=gettext("Enter value for Reflection timeout in seconds.");?></strong>
- <br /><br />
- <?=gettext("Note: Only applies to Reflection on port forwards in NAT + proxy mode.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Enable NAT Reflection for 1:1 NAT");?></td>
- <td width="78%" class="vtable">
- <input name="enablebinatreflection" type="checkbox" id="enablebinatreflection" value="yes" <?php if (isset($config['system']['enablebinatreflection'])) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enables the automatic creation of additional NAT redirect rules for access to 1:1 mappings of your external IP addresses from within your internal networks.");?></strong>
- <br /><br />
- <?=gettext("Note: Reflection on 1:1 mappings is only for the inbound component of the 1:1 mappings. This functions the same as the pure NAT mode for port forwards. For more details, refer to the pure NAT mode description above.");?>
- <br /><br />
- <?=gettext("Individual rules may be configured to override this system setting on a per-rule basis.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Enable automatic outbound NAT for Reflection");?></td>
- <td width="78%" class="vtable">
- <input name="enablenatreflectionhelper" type="checkbox" id="enablenatreflectionhelper" value="yes" <?php if (isset($config['system']['enablenatreflectionhelper'])) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Automatically create outbound NAT rules which assist inbound NAT rules that direct traffic back out to the same subnet it originated from.");?></strong>
- <br />
- <?=gettext("Required for full functionality of the pure NAT mode of NAT Reflection for port forwards or NAT Reflection for 1:1 NAT.");?>
- <br /><br />
- <?=gettext("Note: This only works for assigned interfaces. Other interfaces require manually creating the outbound NAT rules that direct the reply packets back through the router.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("TFTP Proxy");?></td>
- <td width="78%" class="vtable">
- <select name="tftpinterface[]" multiple="multiple" class="formselect" size="3">
-<?php
- $ifdescs = get_configured_interface_with_descr();
- $rowIndex = 0;
- foreach ($ifdescs as $ifent => $ifdesc):
- $rowIndex++;
-?>
- <option value="<?=$ifent;?>" <?php if (in_array($ifent, $pconfig['tftpinterface'])) echo "selected=\"selected\""; ?>><?=gettext($ifdesc);?></option>
-<?php endforeach;
- if ($rowIndex == 0) {
- echo "<option></option>";
- }
- ?>
- </select>
- <br/><strong><?=gettext("Choose the interfaces where you want TFTP proxy helper to be enabled.");?></strong>
- </td>
- </tr>
-<?php
- endif;
-?>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("State Timeouts");?></td>
- </tr>
- <tr>
- <td colspan="2">
- <strong><?=gettext("NOTE: The options below should usually be left at their defaults, as chosen by Firewall Optimization Options above. Click the Help link on this page for information.");?>&nbsp;</strong>
- </td>
- <br />
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("TCP Timeouts");?></td>
- <td width="78%" class="vtable">
- <strong><?=gettext("TCP First: ");?></strong><input name="tcpfirsttimeout" id="tcpfirsttimeout" value="<?php echo $config['system']['tcpfirsttimeout']; ?>" /> <br/>
- <?=gettext("Enter value for TCP first timeout in seconds. Leave blank for default (recommended).");?>
- <br/><br/>
- <strong><?=gettext("TCP Opening: ");?></strong><input name="tcpopeningtimeout" id="tcpopeningtimeout" value="<?php echo $config['system']['tcpopeningtimeout']; ?>" /><br />
- <?=gettext("Enter value for TCP opening timeout in seconds. Leave blank for default (recommended).");?>
- <br/><br/>
- <strong><?=gettext("TCP Established: ");?></strong><input name="tcpestablishedtimeout" id="tcpestablishedtimeout" value="<?php echo $config['system']['tcpestablishedtimeout']; ?>" /><br />
- <?=gettext("Enter value for TCP established timeout in seconds. Leave blank for default (recommended).");?>
- <br/><br/>
- <strong><?=gettext("TCP Closing: ");?></strong><input name="tcpclosingtimeout" id="tcpclosingtimeout" value="<?php echo $config['system']['tcpclosingtimeout']; ?>" /><br />
- <?=gettext("Enter value for TCP closing timeout in seconds. Leave blank for default (recommended).");?>
- <br/><br/>
- <strong><?=gettext("TCP FIN Wait: ");?></strong><input name="tcpfinwaittimeout" id="tcpfinwaittimeout" value="<?php echo $config['system']['tcpfinwaittimeout']; ?>" /><br />
- <?=gettext("Enter value for TCP FIN wait timeout in seconds. Leave blank for default (recommended).");?>
- <br/><br/>
- <strong><?=gettext("TCP Closed: ");?></strong><input name="tcpclosedtimeout" id="tcpclosedtimeout" value="<?php echo $config['system']['tcpclosedtimeout']; ?>" /><br />
- <?=gettext("Enter value for TCP closed timeout in seconds. Leave blank for default (recommended).");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("UDP Timeouts");?></td>
- <td width="78%" class="vtable">
- <strong><?=gettext("UDP First: ");?></strong><input name="udpfirsttimeout" id="udpfirsttimeout" value="<?php echo $config['system']['udpfirsttimeout']; ?>" /><br />
- <?=gettext("Enter value for UDP first timeout in seconds. Leave blank for default (recommended).");?>
- <br /><br />
- <strong><?=gettext("UDP Single: ");?></strong><input name="udpsingletimeout" id="udpsingletimeout" value="<?php echo $config['system']['udpsingletimeout']; ?>" /><br />
- <?=gettext("Enter value for UDP single timeout in seconds. Leave blank for default (recommended).");?>
- <br /><br />
- <strong><?=gettext("UDP Multiple: ");?></strong><input name="udpmultipletimeout" id="udpmultipletimeout" value="<?php echo $config['system']['udpmultipletimeout']; ?>" /><br />
- <?=gettext("Enter value for UDP multiple timeout in seconds. Leave blank for default (recommended).");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("ICMP Timeouts");?></td>
- <td width="78%" class="vtable">
- <strong><?=gettext("ICMP First: ");?></strong><input name="icmpfirsttimeout" id="icmpfirsttimeout" value="<?php echo $config['system']['icmpfirsttimeout']; ?>" /><br />
- <?=gettext("Enter value for ICMP first timeout in seconds. Leave blank for default (recommended).");?>
- <br /><br />
- <strong><?=gettext("ICMP Error: ");?></strong><input name="icmperrortimeout" id="icmperrortimeout" value="<?php echo $config['system']['icmperrortimeout']; ?>" /><br />
- <?=gettext("Enter value for ICMP error timeout in seconds. Leave blank for default (recommended).");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Other Timeouts");?></td>
- <td width="78%" class="vtable">
- <strong><?=gettext("Other First: ");?></strong><input name="otherfirsttimeout" id="otherfirsttimeout" value="<?php echo $config['system']['otherfirsttimeout']; ?>" /><br />
- <?=gettext("Enter value for Other first timeout in seconds. Leave blank for default (recommended).");?>
- <br /><br />
- <strong><?=gettext("Other Single: ");?></strong><input name="othersingletimeout" id="othersingletimeout" value="<?php echo $config['system']['othersingletimeout']; ?>" /><br />
- <?=gettext("Enter value for Other single timeout in seconds. Leave blank for default (recommended).");?>
- <br /><br />
- <strong><?=gettext("Other Multiple: ");?></strong><input name="othermultipletimeout" id="othermultipletimeout" value="<?php echo $config['system']['othermultipletimeout']; ?>" /><br />
- <?=gettext("Enter value for Other multiple timeout in seconds. Leave blank for default (recommended).");?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%"><input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" /></td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
- </form>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_advanced_misc.php b/usr/local/www/system_advanced_misc.php
deleted file mode 100644
index 72f4833..0000000
--- a/usr/local/www/system_advanced_misc.php
+++ /dev/null
@@ -1,738 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_advanced_misc.php
- part of pfSense
- Copyright (C) 2005-2007 Scott Ullrich
- Copyright (C) 2008 Shrew Soft Inc
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-system-advanced-misc
-##|*NAME=System: Advanced: Miscellaneous page
-##|*DESCR=Allow access to the 'System: Advanced: Miscellaneous' page.
-##|*MATCH=system_advanced_misc.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("vpn.inc");
-require_once("vslb.inc");
-
-$pconfig['proxyurl'] = $config['system']['proxyurl'];
-$pconfig['proxyport'] = $config['system']['proxyport'];
-$pconfig['proxyuser'] = $config['system']['proxyuser'];
-$pconfig['proxypass'] = $config['system']['proxypass'];
-$pconfig['harddiskstandby'] = $config['system']['harddiskstandby'];
-$pconfig['lb_use_sticky'] = isset($config['system']['lb_use_sticky']);
-$pconfig['srctrack'] = $config['system']['srctrack'];
-$pconfig['gw_switch_default'] = isset($config['system']['gw_switch_default']);
-$pconfig['powerd_enable'] = isset($config['system']['powerd_enable']);
-$pconfig['crypto_hardware'] = $config['system']['crypto_hardware'];
-$pconfig['thermal_hardware'] = $config['system']['thermal_hardware'];
-$pconfig['schedule_states'] = isset($config['system']['schedule_states']);
-$pconfig['kill_states'] = isset($config['system']['kill_states']);
-$pconfig['skip_rules_gw_down'] = isset($config['system']['skip_rules_gw_down']);
-$pconfig['apinger_debug'] = isset($config['system']['apinger_debug']);
-$pconfig['use_mfs_tmpvar'] = isset($config['system']['use_mfs_tmpvar']);
-$pconfig['use_mfs_tmp_size'] = $config['system']['use_mfs_tmp_size'];
-$pconfig['use_mfs_var_size'] = $config['system']['use_mfs_var_size'];
-$pconfig['pkg_nochecksig'] = isset($config['system']['pkg_nochecksig']);
-$pconfig['host_uuid'] = !isset($config['system']['host_uuid']);
-
-$pconfig['powerd_ac_mode'] = "hadp";
-if (!empty($config['system']['powerd_ac_mode'])) {
- $pconfig['powerd_ac_mode'] = $config['system']['powerd_ac_mode'];
-}
-
-$pconfig['powerd_battery_mode'] = "hadp";
-if (!empty($config['system']['powerd_battery_mode'])) {
- $pconfig['powerd_battery_mode'] = $config['system']['powerd_battery_mode'];
-}
-
-$pconfig['powerd_normal_mode'] = "hadp";
-if (!empty($config['system']['powerd_normal_mode'])) {
- $pconfig['powerd_normal_mode'] = $config['system']['powerd_normal_mode'];
-}
-
-$crypto_modules = array(
- 'glxsb' => gettext("AMD Geode LX Security Block"),
- 'aesni' => gettext("AES-NI CPU-based Acceleration"));
-
-$thermal_hardware_modules = array(
- 'coretemp' => gettext("Intel Core* CPU on-die thermal sensor"),
- 'amdtemp' => gettext("AMD K8, K10 and K11 CPU on-die thermal sensor"));
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- ob_flush();
- flush();
-
- if (!empty($_POST['crypto_hardware']) && !array_key_exists($_POST['crypto_hardware'], $crypto_modules)) {
- $input_errors[] = gettext("Please select a valid Cryptographic Accelerator.");
- }
-
- if (!empty($_POST['thermal_hardware']) && !array_key_exists($_POST['thermal_hardware'], $thermal_hardware_modules)) {
- $input_errors[] = gettext("Please select a valid Thermal Hardware Sensor.");
- }
-
- if (!empty($_POST['use_mfs_tmp_size']) && (!is_numeric($_POST['use_mfs_tmp_size']) || ($_POST['use_mfs_tmp_size'] < 40))) {
- $input_errors[] = gettext("/tmp Size must be numeric and should not be less than 40MB.");
- }
-
- if (!empty($_POST['use_mfs_var_size']) && (!is_numeric($_POST['use_mfs_var_size']) || ($_POST['use_mfs_var_size'] < 60))) {
- $input_errors[] = gettext("/var Size must be numeric and should not be less than 60MB.");
- }
-
- if (!empty($_POST['proxyport']) && !is_port($_POST['proxyport'])) {
- $input_errors[] = gettext("Proxy port must be a valid port number, 1-65535.");
- }
-
- if (!empty($_POST['proxyurl']) && !is_fqdn($_POST['proxyurl']) && !is_ipaddr($_POST['proxyurl'])) {
- $input_errors[] = gettext("Proxy URL must be a valid IP address or FQDN.");
- }
-
- if (!empty($_POST['proxyuser']) && preg_match("/[^a-zA-Z0-9\.\-_@]/", $_POST['proxyuser'])) {
- $input_errors[] = gettext("The proxy username contains invalid characters.");
- }
-
- if (!$input_errors) {
-
- if ($_POST['harddiskstandby'] <> "") {
- $config['system']['harddiskstandby'] = $_POST['harddiskstandby'];
- system_set_harddisk_standby();
- } else {
- unset($config['system']['harddiskstandby']);
- }
-
- if ($_POST['proxyurl'] <> "") {
- $config['system']['proxyurl'] = $_POST['proxyurl'];
- } else {
- unset($config['system']['proxyurl']);
- }
-
- if ($_POST['proxyport'] <> "") {
- $config['system']['proxyport'] = $_POST['proxyport'];
- } else {
- unset($config['system']['proxyport']);
- }
-
- if ($_POST['proxyuser'] <> "") {
- $config['system']['proxyuser'] = $_POST['proxyuser'];
- } else {
- unset($config['system']['proxyuser']);
- }
-
- if ($_POST['proxypass'] <> "") {
- $config['system']['proxypass'] = $_POST['proxypass'];
- } else {
- unset($config['system']['proxypass']);
- }
-
- $need_relayd_restart = false;
- if ($_POST['lb_use_sticky'] == "yes") {
- if (!isset($config['system']['lb_use_sticky'])) {
- $config['system']['lb_use_sticky'] = true;
- $need_relayd_restart = true;
- }
- if ($config['system']['srctrack'] != $_POST['srctrack']) {
- $config['system']['srctrack'] = $_POST['srctrack'];
- $need_relayd_restart = true;
- }
- } else {
- if (isset($config['system']['lb_use_sticky'])) {
- unset($config['system']['lb_use_sticky']);
- $need_relayd_restart = true;
- }
- }
-
- if ($_POST['gw_switch_default'] == "yes") {
- $config['system']['gw_switch_default'] = true;
- } else {
- unset($config['system']['gw_switch_default']);
- }
-
- if ($_POST['pkg_nochecksig'] == "yes") {
- $config['system']['pkg_nochecksig'] = true;
- } elseif (isset($config['system']['pkg_nochecksig'])) {
- unset($config['system']['pkg_nochecksig']);
- }
-
- if ($_POST['host_uuid'] == "yes") {
- unset($config['system']['host_uuid']);
- } else {
- $config['system']['host_uuid'] = true;
- }
-
- if ($_POST['powerd_enable'] == "yes") {
- $config['system']['powerd_enable'] = true;
- } else {
- unset($config['system']['powerd_enable']);
- }
-
- $config['system']['powerd_ac_mode'] = $_POST['powerd_ac_mode'];
- $config['system']['powerd_battery_mode'] = $_POST['powerd_battery_mode'];
- $config['system']['powerd_normal_mode'] = $_POST['powerd_normal_mode'];
-
- if ($_POST['crypto_hardware']) {
- $config['system']['crypto_hardware'] = $_POST['crypto_hardware'];
- } else {
- unset($config['system']['crypto_hardware']);
- }
-
- if ($_POST['thermal_hardware']) {
- $config['system']['thermal_hardware'] = $_POST['thermal_hardware'];
- } else {
- unset($config['system']['thermal_hardware']);
- }
-
- if ($_POST['schedule_states'] == "yes") {
- $config['system']['schedule_states'] = true;
- } else {
- unset($config['system']['schedule_states']);
- }
-
- if ($_POST['kill_states'] == "yes") {
- $config['system']['kill_states'] = true;
- } else {
- unset($config['system']['kill_states']);
- }
-
- if ($_POST['skip_rules_gw_down'] == "yes") {
- $config['system']['skip_rules_gw_down'] = true;
- } else {
- unset($config['system']['skip_rules_gw_down']);
- }
-
- $need_apinger_restart = false;
- if ($_POST['apinger_debug'] == "yes") {
- if (!isset($config['system']['apinger_debug'])) {
- $need_apinger_restart = true;
- }
- $config['system']['apinger_debug'] = true;
- } else {
- if (isset($config['system']['apinger_debug'])) {
- $need_apinger_restart = true;
- }
- unset($config['system']['apinger_debug']);
- }
-
- if ($_POST['use_mfs_tmpvar'] == "yes") {
- $config['system']['use_mfs_tmpvar'] = true;
- } else {
- unset($config['system']['use_mfs_tmpvar']);
- }
-
- $config['system']['use_mfs_tmp_size'] = $_POST['use_mfs_tmp_size'];
- $config['system']['use_mfs_var_size'] = $_POST['use_mfs_var_size'];
-
- if (isset($_POST['rrdbackup'])) {
- $config['system']['rrdbackup'] = $_POST['rrdbackup'];
- install_cron_job("/etc/rc.backup_rrd.sh", ($config['system']['rrdbackup'] > 0), $minute="0", "*/{$config['system']['rrdbackup']}");
- }
- if (isset($_POST['dhcpbackup'])) {
- $config['system']['dhcpbackup'] = $_POST['dhcpbackup'];
- install_cron_job("/etc/rc.backup_dhcpleases.sh", ($config['system']['dhcpbackup'] > 0), $minute="0", "*/{$config['system']['dhcpbackup']}");
- }
-
- write_config();
-
- $retval = 0;
- system_resolvconf_generate(true);
- $retval = filter_configure();
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message(gettext($retval));
- } else {
- $savemsg = gettext($retval);
- }
-
- activate_powerd();
- load_crypto();
- load_thermal_hardware();
- if ($need_relayd_restart) {
- relayd_configure();
- }
- if ($need_apinger_restart) {
- setup_gateways_monitor();
- }
- }
-}
-
-$pgtitle = array(gettext("System"), gettext("Advanced: Miscellaneous"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php
- include("fbegin.inc");
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
-?>
-<script type="text/javascript">
-//<![CDATA[
-function sticky_checked(obj) {
- if (obj.checked) {
- jQuery('#srctrack').attr('disabled', false);
- } else {
- jQuery('#srctrack').attr('disabled', 'true');
- }
-}
-function tmpvar_checked(obj) {
- if (obj.checked) {
- jQuery('#use_mfs_tmp_size').attr('disabled', false);
- jQuery('#use_mfs_var_size').attr('disabled', false);
- jQuery('#rrdbackup').attr('disabled', false);
- jQuery('#dhcpbackup').attr('disabled', false);
- } else {
- jQuery('#use_mfs_tmp_size').attr('disabled', 'true');
- jQuery('#use_mfs_var_size').attr('disabled', 'true');
- jQuery('#rrdbackup').attr('disabled', 'true');
- jQuery('#dhcpbackup').attr('disabled', 'true');
- }
-}
-//]]>
-</script>
- <form action="system_advanced_misc.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system advanced misc">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), false, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), true, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <span class="vexpl">
- <span class="red">
- <strong><?=gettext("NOTE:"); ?>&nbsp;</strong>
- </span>
- <?=gettext("The options on this page are intended for use by advanced users only."); ?>
- <br />
- </span>
- <br />
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Proxy support"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Proxy URL"); ?></td>
- <td width="78%" class="vtable">
- <input name="proxyurl" id="proxyurl" value="<?php if ($pconfig['proxyurl'] <> "") echo htmlspecialchars($pconfig['proxyurl']); ?>" class="formfld unknown" />
- <br />
- <?php printf(gettext("Hostname or IP address of proxy server this system will use for its outbound Internet access.")); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Proxy Port"); ?></td>
- <td width="78%" class="vtable">
- <input name="proxyport" id="proxyport" value="<?php if ($pconfig['proxyport'] <> "") echo htmlspecialchars($pconfig['proxyport']); ?>" class="formfld unknown" />
- <br />
- <?php printf(gettext("Port where proxy server is listening.")); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Proxy Username"); ?></td>
- <td width="78%" class="vtable">
- <input name="proxyuser" id="proxyuser" value="<?php if ($pconfig['proxyuser'] <> "") echo htmlspecialchars($pconfig['proxyuser']); ?>" class="formfld unknown" />
- <br />
- <?php printf(gettext("Username for authentication to proxy server. Optional, leave blank to not use authentication.")); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Proxy Password"); ?></td>
- <td width="78%" class="vtable">
- <input type="password" name="proxypass" id="proxypass" value="<?php if ($pconfig['proxypass'] <> "") echo htmlspecialchars($pconfig['proxypass']); ?>" class="formfld unknown" />
- <br />
- <?php printf(gettext("Password for authentication to proxy server.")); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Load Balancing"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Load Balancing"); ?></td>
- <td width="78%" class="vtable">
- <input name="lb_use_sticky" type="checkbox" id="lb_use_sticky" value="yes" <?php if ($pconfig['lb_use_sticky']) echo "checked=\"checked\""; ?> onclick="sticky_checked(this)" />
- <strong><?=gettext("Use sticky connections"); ?></strong><br />
- <?=gettext("Successive connections will be redirected to the servers " .
- "in a round-robin manner with connections from the same " .
- "source being sent to the same web server. This 'sticky " .
- "connection' will exist as long as there are states that " .
- "refer to this connection. Once the states expire, so will " .
- "the sticky connection. Further connections from that host " .
- "will be redirected to the next web server in the round " .
- "robin. Changing this option will restart the Load Balancing service."); ?>
- <br />
- <input name="srctrack" id="srctrack" value="<?php if ($pconfig['srctrack'] <> "") echo htmlspecialchars($pconfig['srctrack']); else "1400"; ?>" class="formfld unknown" <?php if ($pconfig['lb_use_sticky'] == false) echo "disabled=\"disabled\""; ?> />
- <br />
- <?=gettext("Set the source tracking timeout for sticky connections. " .
- "By default this is 0, so source tracking is removed as soon as the state expires. " .
- "Setting this timeout higher will cause the source/destination relationship to persist for longer periods of time."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Load Balancing"); ?></td>
- <td width="78%" class="vtable">
- <input name="gw_switch_default" type="checkbox" id="gw_switch_default" value="yes" <?php if ($pconfig['gw_switch_default']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable default gateway switching"); ?></strong><br />
- <?=gettext("If the default gateway goes down, switch the default gateway to another available one. This is not enabled by default, as it's unnecessary in most all scenarios, which instead use gateway groups."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Power savings"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("PowerD"); ?></td>
- <td width="78%" class="vtable">
- <input name="powerd_enable" type="checkbox" id="powerd_enable" value="yes" <?php if ($pconfig['powerd_enable']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Use PowerD"); ?></strong><br />
- <br />
- <table border="0" cellspacing="0" cellpadding="2" summary="powerd">
- <tr>
- <td><?=gettext("On AC Power Mode:");?> &nbsp;</td>
- <td>
- <select name="powerd_ac_mode" id="powerd_ac_mode">
- <option value="hadp"<?php if ($pconfig['powerd_ac_mode'] == "hadp") echo " selected=\"selected\""; ?>><?=gettext("Hiadaptive");?></option>
- <option value="adp"<?php if ($pconfig['powerd_ac_mode'] == "adp") echo " selected=\"selected\""; ?>><?=gettext("Adaptive");?></option>
- <option value="min"<?php if ($pconfig['powerd_ac_mode'] == "min") echo " selected=\"selected\""; ?>><?=gettext("Minimum");?></option>
- <option value="max"<?php if ($pconfig['powerd_ac_mode'] == "max") echo " selected=\"selected\""; ?>><?=gettext("Maximum");?></option>
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("On Battery Power Mode:");?> &nbsp;</td>
- <td>
- <select name="powerd_battery_mode" id="powerd_battery_mode">
- <option value="hadp"<?php if ($pconfig['powerd_battery_mode'] == "hadp") echo " selected=\"selected\""; ?>><?=gettext("Hiadaptive");?></option>
- <option value="adp"<?php if ($pconfig['powerd_battery_mode'] == "adp") echo " selected=\"selected\""; ?>><?=gettext("Adaptive");?></option>
- <option value="min"<?php if ($pconfig['powerd_battery_mode'] == "min") echo " selected=\"selected\""; ?>><?=gettext("Minimum");?></option>
- <option value="max"<?php if ($pconfig['powerd_battery_mode'] == "max") echo " selected=\"selected\""; ?>><?=gettext("Maximum");?></option>
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("On Unknown Power Mode:");?> &nbsp;</td>
- <td>
- <select name="powerd_normal_mode" id="powerd_normal_mode">
- <option value="hadp"<?php if ($pconfig['powerd_normal_mode'] == "hadp") echo " selected=\"selected\""; ?>><?=gettext("Hiadaptive");?></option>
- <option value="adp"<?php if ($pconfig['powerd_normal_mode'] == "adp") echo " selected=\"selected\""; ?>><?=gettext("Adaptive");?></option>
- <option value="min"<?php if ($pconfig['powerd_normal_mode'] == "min") echo " selected=\"selected\""; ?>><?=gettext("Minimum");?></option>
- <option value="max"<?php if ($pconfig['powerd_normal_mode'] == "max") echo " selected=\"selected\""; ?>><?=gettext("Maximum");?></option>
- </select>
- </td>
- </tr>
- </table>
- <br />
- <?=gettext("The powerd utility monitors the system state and sets various power control " .
- "options accordingly. It offers four modes (maximum, minimum, adaptive " .
- "and hiadaptive) that can be individually selected while on AC power or batteries. " .
- "The modes maximum, minimum, adaptive and hiadaptive may be abbreviated max, " .
- "min, adp, hadp. Maximum mode chooses the highest performance values. Minimum " .
- "mode selects the lowest performance values to get the most power savings. " .
- "Adaptive mode attempts to strike a balance by degrading performance when " .
- "the system appears idle and increasing it when the system is busy. It " .
- "offers a good balance between a small performance loss for greatly " .
- "increased power savings. Hiadaptive mode is alike adaptive mode, but " .
- "tuned for systems where performance and interactivity are more important " .
- "than power consumption. It raises frequency faster, drops slower and " .
- "keeps twice lower CPU load."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Cryptographic Hardware Acceleration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Cryptographic Hardware"); ?></td>
- <td width="78%" class="vtable">
- <select name="crypto_hardware" id="crypto_hardware">
- <option value=""><?php echo gettext("None"); ?></option>
- <?php foreach ($crypto_modules as $cryptomod_name => $cryptomod_descr): ?>
- <option value="<?php echo $cryptomod_name; ?>" <?php if ($pconfig['crypto_hardware'] == $cryptomod_name) echo " selected=\"selected\""; ?>><?php echo "{$cryptomod_descr} ({$cryptomod_name})"; ?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <?=gettext("A cryptographic accelerator module will use hardware support to speed up some " .
- "cryptographic functions on systems which have the chip. Do not enable this " .
- "option if you have a Hifn cryptographic acceleration card, as this will take " .
- "precedence and the Hifn card will not be used. Acceleration should be automatic " .
- "for IPsec when using a cipher supported by your chip, such as AES-128. OpenVPN " .
- "should be set for AES-128-CBC and have cryptodev enabled for hardware " .
- "acceleration."); ?>
- <br /><br />
- <?=gettext("If you do not have a crypto chip in your system, this option will have no " .
- "effect. To unload the selected module, set this option to 'none' and then reboot."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Thermal Sensors"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Thermal Sensors"); ?></td>
- <td width="78%" class="vtable">
- <select name="thermal_hardware" id="thermal_hardware">
- <option value=""><?php echo gettext("None/ACPI"); ?></option>
- <?php foreach ($thermal_hardware_modules as $themalmod_name => $themalmod_descr): ?>
- <option value="<?php echo $themalmod_name; ?>" <?php if ($pconfig['thermal_hardware'] == $themalmod_name) echo " selected=\"selected\""; ?>><?php echo "{$themalmod_descr} ({$themalmod_name})"; ?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <?=gettext("If you have a supported CPU, selecting a themal sensor will load the appropriate " .
- "driver to read its temperature. Setting this to 'None' will attempt to read the " .
- "temperature from an ACPI-compliant motherboard sensor instead, if one is present."); ?>
- <br /><br />
- <?=gettext("If you do not have a supported thermal sensor chip in your system, this option will have no " .
- "effect. To unload the selected module, set this option to 'none' and then reboot."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("IP Security"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell">&nbsp;</td>
- <td width="78%" class="vtable">
- <?=gettext("These settings have moved to <a href=\"vpn_ipsec_settings.php\">VPN &gt; IPsec on the Advanced Settings tab</a>."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Schedules"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Schedule States"); ?></td>
- <td width="78%" class="vtable">
- <input name="schedule_states" type="checkbox" id="schedule_states" value="yes" <?php if ($pconfig['schedule_states']) echo "checked=\"checked\""; ?> />
- <br />
- <?=gettext("By default, when a schedule expires, connections permitted by that schedule are killed. ".
- "This option overrides that behavior by not clearing states for existing connections."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Gateway Monitoring"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("State Killing on Gateway Failure"); ?></td>
- <td width="78%" class="vtable">
- <input name="kill_states" type="checkbox" id="kill_states" value="yes" <?php if ($pconfig['kill_states']) echo "checked=\"checked\""; ?> />
- <br />
- <?=gettext("The monitoring process will flush states for a gateway that goes down if this box is not checked. Check this box to disable this behavior."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Skip rules when gateway is down"); ?></td>
- <td width="78%" class="vtable">
- <input name="skip_rules_gw_down" type="checkbox" id="skip_rules_gw_down" value="yes" <?php if ($pconfig['skip_rules_gw_down']) echo "checked=\"checked\""; ?> />
- <br />
- <?=gettext("By default, when a rule has a gateway specified and this gateway is down, ".
- "the rule is created omitting the gateway. This option overrides that behavior by omitting ".
- "the entire rule instead."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Enable gateway monitoring debug logging"); ?></td>
- <td width="78%" class="vtable">
- <input name="apinger_debug" type="checkbox" id="apinger_debug" value="yes" <?php if ($pconfig['apinger_debug']) echo "checked=\"checked\""; ?> />
- <br />
- <?=gettext("Enable this setting to log debug information from the gateway monitoring process to the system logs."); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("RAM Disk Settings (Reboot to Apply Changes)"); ?></td>
- </tr>
- <?php if ($g['platform'] == "pfSense"): ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Use RAM Disks"); ?></td>
- <td width="78%" class="vtable">
- <input name="use_mfs_tmpvar" type="checkbox" id="use_mfs_tmpvar" value="yes" <?php if ($pconfig['use_mfs_tmpvar']) echo "checked=\"checked\""; ?> onclick="tmpvar_checked(this)" />
- <strong><?=gettext("Use memory file system for /tmp and /var"); ?></strong><br />
- <?=gettext("Set this if you wish to use /tmp and /var as RAM disks (memory file system disks) on a full install " .
- "rather than use the hard disk. Setting this will cause the data in /tmp and /var to be lost at reboot, including log data. RRD and DHCP Leases will be retained."); ?>
- </td>
- </tr>
- <?php endif; ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("/tmp RAM Disk Size"); ?></td>
- <td width="78%" class="vtable">
- <input name="use_mfs_tmp_size" id="use_mfs_tmp_size" value="<?php if ($pconfig['use_mfs_tmp_size'] <> "") echo htmlspecialchars($pconfig['use_mfs_tmp_size']); ?>" class="formfld unknown" <?php if (($g['platform'] == "pfSense") && ($pconfig['use_mfs_tmpvar'] == false)) echo "disabled=\"disabled\""; ?> /> MB
- <br />
- <?=gettext("Set the size, in MB, for the /tmp RAM disk. " .
- "Leave blank for 40MB. Do not set lower than 40."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("/var RAM Disk Size"); ?></td>
- <td width="78%" class="vtable">
- <input name="use_mfs_var_size" id="use_mfs_var_size" value="<?php if ($pconfig['use_mfs_var_size'] <> "") echo htmlspecialchars($pconfig['use_mfs_var_size']); ?>" class="formfld unknown" <?php if (($g['platform'] == "pfSense") && ($pconfig['use_mfs_tmpvar'] == false)) echo "disabled=\"disabled\""; ?> /> MB
- <br />
- <?=gettext("Set the size, in MB, for the /var RAM disk. " .
- "Leave blank for 60MB. Do not set lower than 60."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Periodic RRD Backup");?></td>
- <td width="78%" class="vtable">
- <?=gettext("Frequency:");?>
- <select name="rrdbackup" id="rrdbackup" <?php if (($g['platform'] == "pfSense") && ($pconfig['use_mfs_tmpvar'] == false)) echo "disabled=\"disabled\""; ?> >
- <option value='0' <?php if (!isset($config['system']['rrdbackup']) || ($config['system']['rrdbackup'] == 0)) echo "selected='selected'"; ?>><?=gettext("Disable"); ?></option>
- <?php for ($x=1; $x<=24; $x++) { ?>
- <option value='<?= $x ?>' <?php if ($config['system']['rrdbackup'] == $x) echo "selected='selected'"; ?>><?= $x ?> <?=gettext("hour"); ?><?php if ($x>1) echo "s"; ?></option>
- <?php } ?>
- </select>
- <br />
- <?=gettext("This will periodically backup the RRD data so it can be restored automatically on the next boot. Keep in mind that the more frequent the backup, the more writes will happen to your media.");?>
- <br />
- <br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Periodic DHCP Leases Backup");?></td>
- <td width="78%" class="vtable">
- <?=gettext("Frequency:");?>
- <select name="dhcpbackup" id="dhcpbackup" <?php if (($g['platform'] == "pfSense") && ($pconfig['use_mfs_tmpvar'] == false)) echo "disabled=\"disabled\""; ?> >
- <option value='0' <?php if (!isset($config['system']['dhcpbackup']) || ($config['system']['dhcpbackup'] == 0)) echo "selected='selected'"; ?>><?=gettext("Disable"); ?></option>
- <?php for ($x=1; $x<=24; $x++) { ?>
- <option value='<?= $x ?>' <?php if ($config['system']['dhcpbackup'] == $x) echo "selected='selected'"; ?>><?= $x ?> <?=gettext("hour"); ?><?php if ($x>1) echo "s"; ?></option>
- <?php } ?>
- </select>
- <br />
- <?=gettext("This will periodically backup the DHCP leases data so it can be restored automatically on the next boot. Keep in mind that the more frequent the backup, the more writes will happen to your media.");?>
- <br />
- <br />
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <?php if ($g['platform'] == "pfSenseDISABLED"): ?>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Hardware Settings"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Hard disk standby time "); ?></td>
- <td width="78%" class="vtable">
- <select name="harddiskstandby" class="formselect">
- <?php
- ## Values from ATA-2 http://www.t13.org/project/d0948r3-ATA-2.pdf (Page 66)
- $sbvals = explode(" ", "0.5,6 1,12 2,24 3,36 4,48 5,60 7.5,90 10,120 15,180 20,240 30,241 60,242");
- ?>
- <option value="" <?php if (!$pconfig['harddiskstandby']) echo('selected="selected"');?>><?=gettext("Always on"); ?></option>
- <?php
- foreach ($sbvals as $sbval):
- list($min, $val) = explode(",", $sbval);
- ?>
- <option value="<?=$val;?>" <?php if ($pconfig['harddiskstandby'] == $val) echo('selected="selected"');?>><?=$min;?> <?=gettext("minutes"); ?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <?=gettext("Puts the hard disk into standby mode when the selected amount of time after the last ".
- "access has elapsed."); ?> <em><?=gettext("Do not set this for CF cards."); ?></em>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <?php endif; ?>
-
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Package settings"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Package signature"); ?></td>
- <td width="78%" class="vtable">
- <input name="pkg_nochecksig" type="checkbox" id="pkg_nochecksig" value="yes" <?php if ($pconfig['pkg_nochecksig']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Do NOT check package signature"); ?></strong><br />
- <?=gettext("Enable this option to allow pfSense to install any package without checking its signature."); ?>
- </td>
- </tr>
-
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Installation Feedback"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Host UUID"); ?></td>
- <td width="78%" class="vtable">
- <input name="host_uuid" type="checkbox" id="host_uuid" value="yes" <?php if ($pconfig['host_uuid']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Do NOT send HOST UUID with user agent"); ?></strong><br />
- <?=gettext("Enable this option to not send HOST UUID to pfSense as part of User-Agent header."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
- </form>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_advanced_network.php b/usr/local/www/system_advanced_network.php
deleted file mode 100644
index 4b3b7ce..0000000
--- a/usr/local/www/system_advanced_network.php
+++ /dev/null
@@ -1,320 +0,0 @@
-<?php
-/*
- system_advanced_network.php
- part of pfSense
- Copyright (C) 2005-2007 Scott Ullrich
- Copyright (C) 2008 Shrew Soft Inc
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-system-advanced-network
-##|*NAME=System: Advanced: Network page
-##|*DESCR=Allow access to the 'System: Advanced: Networking' page.
-##|*MATCH=system_advanced_network.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-
-$pconfig['ipv6nat_enable'] = isset($config['diag']['ipv6nat']['enable']);
-$pconfig['ipv6nat_ipaddr'] = $config['diag']['ipv6nat']['ipaddr'];
-$pconfig['ipv6allow'] = isset($config['system']['ipv6allow']);
-$pconfig['prefer_ipv4'] = isset($config['system']['prefer_ipv4']);
-$pconfig['polling_enable'] = isset($config['system']['polling']);
-$pconfig['sharednet'] = $config['system']['sharednet'];
-$pconfig['disablechecksumoffloading'] = isset($config['system']['disablechecksumoffloading']);
-$pconfig['disablesegmentationoffloading'] = isset($config['system']['disablesegmentationoffloading']);
-$pconfig['disablelargereceiveoffloading'] = isset($config['system']['disablelargereceiveoffloading']);
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- if ($_POST['ipv6nat_enable'] && !is_ipaddr($_POST['ipv6nat_ipaddr'])) {
- $input_errors[] = gettext("You must specify an IP address to NAT IPv6 packets.");
- }
-
- ob_flush();
- flush();
- if (!$input_errors) {
-
- if ($_POST['ipv6nat_enable'] == "yes") {
- $config['diag']['ipv6nat']['enable'] = true;
- $config['diag']['ipv6nat']['ipaddr'] = $_POST['ipv6nat_ipaddr'];
- } else {
- if ($config['diag']) {
- if ($config['diag']['ipv6nat']) {
- unset($config['diag']['ipv6nat']['enable']);
- unset($config['diag']['ipv6nat']['ipaddr']);
- }
- }
- }
-
- if ($_POST['ipv6allow'] == "yes") {
- $config['system']['ipv6allow'] = true;
- } else {
- unset($config['system']['ipv6allow']);
- }
-
- if ($_POST['prefer_ipv4'] == "yes") {
- $config['system']['prefer_ipv4'] = true;
- } else {
- unset($config['system']['prefer_ipv4']);
- }
-
- if ($_POST['sharednet'] == "yes") {
- $config['system']['sharednet'] = true;
- system_disable_arp_wrong_if();
- } else {
- unset($config['system']['sharednet']);
- system_enable_arp_wrong_if();
- }
-
- if ($_POST['polling_enable'] == "yes") {
- $config['system']['polling'] = true;
- setup_polling();
- } else {
- unset($config['system']['polling']);
- setup_polling();
- }
-
- if ($_POST['disablechecksumoffloading'] == "yes") {
- $config['system']['disablechecksumoffloading'] = true;
- } else {
- unset($config['system']['disablechecksumoffloading']);
- }
-
- if ($_POST['disablesegmentationoffloading'] == "yes") {
- $config['system']['disablesegmentationoffloading'] = true;
- } else {
- unset($config['system']['disablesegmentationoffloading']);
- }
-
- if ($_POST['disablelargereceiveoffloading'] == "yes") {
- $config['system']['disablelargereceiveoffloading'] = true;
- } else {
- unset($config['system']['disablelargereceiveoffloading']);
- }
-
- setup_microcode();
-
- // Write out configuration (config.xml)
- write_config();
-
- // Set preferred protocol
- prefer_ipv4_or_ipv6();
-
- $retval = filter_configure();
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message(gettext($retval));
- } else {
- $savemsg = gettext($retval);
- }
- }
-}
-
-$pgtitle = array(gettext("System"), gettext("Advanced: Networking"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
-
-function enable_change(enable_over) {
- if (document.iform.ipv6nat_enable.checked || enable_over) {
- document.iform.ipv6nat_ipaddr.disabled = 0;
- } else {
- document.iform.ipv6nat_ipaddr.disabled = 1;
- }
-}
-
-//]]>
-</script>
-
-
-<?
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
-?>
- <form action="system_advanced_network.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system advanced newtwork">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), false, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), true, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <span class="vexpl">
- <span class="red">
- <strong><?=gettext("NOTE:"); ?>&nbsp;</strong>
- </span>
- <?=gettext("The options on this page are intended for use by advanced users only."); ?>
- <br />
- </span>
- <br />
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("IPv6 Options"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Allow IPv6"); ?></td>
- <td width="78%" class="vtable">
- <input name="ipv6allow" type="checkbox" id="ipv6allow" value="yes" <?php if ($pconfig['ipv6allow']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
- <strong><?=gettext("Allow IPv6"); ?></strong><br />
- <?=gettext("All IPv6 traffic will be blocked by the firewall unless this box is checked."); ?><br />
- <?=gettext("NOTE: This does not disable any IPv6 features on the firewall, it only blocks traffic."); ?><br />
- <br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 over IPv4 Tunneling"); ?></td>
- <td width="78%" class="vtable">
- <input name="ipv6nat_enable" type="checkbox" id="ipv6nat_enable" value="yes" <?php if ($pconfig['ipv6nat_enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
- <strong><?=gettext("Enable IPv4 NAT encapsulation of IPv6 packets"); ?></strong><br />
- <?=gettext("This provides an RFC 2893 compatibility mechanism ".
- "that can be used to tunnel IPv6 packets over IPv4 ".
- "routing infrastructures. If enabled, don't forget to ".
- "add a firewall rule to permit IPv6 packets."); ?><br />
- <br />
- <?=gettext("IP address"); ?>&nbsp;:&nbsp;
- <input name="ipv6nat_ipaddr" type="text" class="formfld unknown" id="ipv6nat_ipaddr" size="20" value="<?=htmlspecialchars($pconfig['ipv6nat_ipaddr']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Prefer IPv4 over IPv6"); ?></td>
- <td width="78%" class="vtable">
- <input name="prefer_ipv4" type="checkbox" id="prefer_ipv4" value="yes" <?php if ($pconfig['prefer_ipv4']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Prefer to use IPv4 even if IPv6 is available"); ?></strong><br />
- <?=gettext("By default, if a hostname resolves IPv6 and IPv4 addresses IPv6 will be used. " .
- "If you check this option, IPv4 will be used instead of IPv6."); ?><br />
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Network Interfaces"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Device polling"); ?></td>
- <td width="78%" class="vtable">
- <input name="polling_enable" type="checkbox" id="polling_enable" value="yes" <?php if ($pconfig['polling_enable']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable device polling"); ?></strong><br />
- <?php printf(gettext("Device polling is a technique that lets the system periodically poll network devices for new data instead of relying on interrupts. This prevents your webConfigurator, SSH, etc. from being inaccessible due to interrupt floods when under extreme load. Generally this is not recommended. Not all NICs support polling; see the %s homepage for a list of supported cards."), $g['product_name']); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Hardware Checksum Offloading"); ?></td>
- <td width="78%" class="vtable">
- <input name="disablechecksumoffloading" type="checkbox" id="disablechecksumoffloading" value="yes" <?php if (isset($config['system']['disablechecksumoffloading'])) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable hardware checksum offload"); ?></strong><br />
- <?=gettext("Checking this option will disable hardware checksum offloading. Checksum offloading is broken in some hardware, particularly some Realtek cards. Rarely, drivers may have problems with checksum offloading and some specific NICs."); ?>
- <br />
- <span class="red"><strong><?=gettext("Note:");?>&nbsp;</strong></span>
- <?=gettext("This will take effect after you reboot the machine or re-configure each interface.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Hardware TCP Segmentation Offloading"); ?></td>
- <td width="78%" class="vtable">
- <input name="disablesegmentationoffloading" type="checkbox" id="disablesegmentationoffloading" value="yes" <?php if (isset($config['system']['disablesegmentationoffloading'])) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable hardware TCP segmentation offload"); ?></strong><br />
- <?=gettext("Checking this option will disable hardware TCP segmentation offloading (TSO, TSO4, TSO6). This offloading is broken in some hardware drivers, and may impact performance with some specific NICs."); ?>
- <br />
- <span class="red"><strong><?=gettext("Note:");?>&nbsp;</strong></span>
- <?=gettext("This will take effect after you reboot the machine or re-configure each interface.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Hardware Large Receive Offloading"); ?></td>
- <td width="78%" class="vtable">
- <input name="disablelargereceiveoffloading" type="checkbox" id="disablelargereceiveoffloading" value="yes" <?php if (isset($config['system']['disablelargereceiveoffloading'])) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable hardware large receive offload"); ?></strong><br />
- <?=gettext("Checking this option will disable hardware large receive offloading (LRO). This offloading is broken in some hardware drivers, and may impact performance with some specific NICs."); ?>
- <br />
- <span class="red"><strong><?=gettext("Note:");?>&nbsp;</strong></span>
- <?=gettext("This will take effect after you reboot the machine or re-configure each interface.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("ARP Handling"); ?></td>
- <td width="78%" class="vtable">
- <input name="sharednet" type="checkbox" id="sharednet" value="yes" <?php if (isset($pconfig['sharednet'])) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Suppress ARP messages"); ?></strong><br />
- <?=gettext("This option will suppress ARP log messages when multiple interfaces reside on the same broadcast domain"); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%"><input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" /></td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
- </form>
- <script type="text/javascript">
- //<![CDATA[
- enable_change(false);
- //]]>
- </script>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_advanced_notifications.php b/usr/local/www/system_advanced_notifications.php
deleted file mode 100644
index 45ac501..0000000
--- a/usr/local/www/system_advanced_notifications.php
+++ /dev/null
@@ -1,413 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_advanced_notifications.php
- part of pfSense
- Copyright (C) 2009 Scott Ullrich <sullrich@gmail.com>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-system-advanced-notifications
-##|*NAME=System: Advanced: Notifications page
-##|*DESCR=Allow access to the 'System: Advanced: Notifications' page.
-##|*MATCH=system_advanced_notifications.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("notices.inc");
-
-// Growl
-$pconfig['disable_growl'] = isset($config['notifications']['growl']['disable']);
-if ($config['notifications']['growl']['password']) {
- $pconfig['password'] = $config['notifications']['growl']['password'];
-}
-if ($config['notifications']['growl']['ipaddress']) {
- $pconfig['ipaddress'] = $config['notifications']['growl']['ipaddress'];
-}
-
-if ($config['notifications']['growl']['notification_name']) {
- $pconfig['notification_name'] = $config['notifications']['growl']['notification_name'];
-} else {
- $pconfig['notification_name'] = "{$g['product_name']} growl alert";
-}
-
-if ($config['notifications']['growl']['name']) {
- $pconfig['name'] = $config['notifications']['growl']['name'];
-} else {
- $pconfig['name'] = 'PHP-Growl';
-}
-
-
-// SMTP
-$pconfig['disable_smtp'] = isset($config['notifications']['smtp']['disable']);
-if ($config['notifications']['smtp']['ipaddress']) {
- $pconfig['smtpipaddress'] = $config['notifications']['smtp']['ipaddress'];
-}
-if ($config['notifications']['smtp']['port']) {
- $pconfig['smtpport'] = $config['notifications']['smtp']['port'];
-}
-if (isset($config['notifications']['smtp']['ssl'])) {
- $pconfig['smtpssl'] = true;
-}
-if (isset($config['notifications']['smtp']['tls'])) {
- $pconfig['smtptls'] = true;
-}
-if ($config['notifications']['smtp']['notifyemailaddress']) {
- $pconfig['smtpnotifyemailaddress'] = $config['notifications']['smtp']['notifyemailaddress'];
-}
-if ($config['notifications']['smtp']['username']) {
- $pconfig['smtpusername'] = $config['notifications']['smtp']['username'];
-}
-if ($config['notifications']['smtp']['password']) {
- $pconfig['smtppassword'] = $config['notifications']['smtp']['password'];
-}
-if ($config['notifications']['smtp']['authentication_mechanism']) {
- $pconfig['smtpauthmech'] = $config['notifications']['smtp']['authentication_mechanism'];
-}
-if ($config['notifications']['smtp']['fromaddress']) {
- $pconfig['smtpfromaddress'] = $config['notifications']['smtp']['fromaddress'];
-}
-
-// System Sounds
-$pconfig['disablebeep'] = isset($config['system']['disablebeep']);
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* if this is an AJAX caller then handle via JSON */
- if (isAjax() && is_array($input_errors)) {
- input_errors2Ajax($input_errors);
- exit;
- }
-
- if ($_POST['apply']) {
- $retval = 0;
- system_setup_sysctl();
- $savemsg = get_std_save_message($retval);
- }
-
- if ($_POST['Submit'] == gettext("Save")) {
- $tunableent = array();
-
- // Growl
- $config['notifications']['growl']['ipaddress'] = $_POST['ipaddress'];
- $config['notifications']['growl']['password'] = $_POST['password'];
- $config['notifications']['growl']['name'] = $_POST['name'];
- $config['notifications']['growl']['notification_name'] = $_POST['notification_name'];
-
- if ($_POST['disable_growl'] == "yes") {
- $config['notifications']['growl']['disable'] = true;
- } else {
- unset($config['notifications']['growl']['disable']);
- }
-
- // SMTP
- $config['notifications']['smtp']['ipaddress'] = $_POST['smtpipaddress'];
- $config['notifications']['smtp']['port'] = $_POST['smtpport'];
- if (isset($_POST['smtpssl'])) {
- $config['notifications']['smtp']['ssl'] = true;
- } else {
- unset($config['notifications']['smtp']['ssl']);
- }
- if (isset($_POST['smtptls'])) {
- $config['notifications']['smtp']['tls'] = true;
- } else {
- unset($config['notifications']['smtp']['tls']);
- }
- $config['notifications']['smtp']['notifyemailaddress'] = $_POST['smtpnotifyemailaddress'];
- $config['notifications']['smtp']['username'] = $_POST['smtpusername'];
- $config['notifications']['smtp']['password'] = $_POST['smtppassword'];
- $config['notifications']['smtp']['authentication_mechanism'] = $_POST['smtpauthmech'];
- $config['notifications']['smtp']['fromaddress'] = $_POST['smtpfromaddress'];
-
- if ($_POST['disable_smtp'] == "yes") {
- $config['notifications']['smtp']['disable'] = true;
- } else {
- unset($config['notifications']['smtp']['disable']);
- }
-
- // System Sounds
- if ($_POST['disablebeep'] == "yes") {
- $config['system']['disablebeep'] = true;
- } else {
- unset($config['system']['disablebeep']);
- }
-
- write_config();
- pfSenseHeader("system_advanced_notifications.php");
- return;
-
- }
- if ($_POST['test_growl'] == gettext("Test Growl")) {
- // Send test message via growl
- if ($config['notifications']['growl']['ipaddress'] &&
- $config['notifications']['growl']['password'] = $_POST['password']) {
- unlink_if_exists($g['vardb_path'] . "/growlnotices_lastmsg.txt");
- register_via_growl();
- notify_via_growl(sprintf(gettext("This is a test message from %s. It is safe to ignore this message."), $g['product_name']), true);
- }
- }
- if ($_POST['test_smtp'] == gettext("Test SMTP")) {
- // Send test message via smtp
- if (file_exists("/var/db/notices_lastmsg.txt")) {
- unlink("/var/db/notices_lastmsg.txt");
- }
- $savemsg = notify_via_smtp(sprintf(gettext("This is a test message from %s. It is safe to ignore this message."), $g['product_name']), true);
- }
-}
-
-$pgtitle = array(gettext("System"), gettext("Advanced: Notifications"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
- <form action="system_advanced_notifications.php" method="post">
- <?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
- ?>
- </form>
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system advanced notifications">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), false, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), true, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <form action="system_advanced_notifications.php" method="post" name="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <!-- GROWL -->
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Growl"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Disable Growl Notifications"); ?></td>
- <td width="78%" class="vtable">
- <input type='checkbox' name='disable_growl' value="yes" <?php if ($pconfig['disable_growl']) {?>checked="checked"<?php } ?> /><br />
- <?=gettext("Check this option to disable growl notifications but preserve the settings below."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Registration Name"); ?></td>
- <td width="78%" class="vtable">
- <input name='name' value='<?php echo htmlspecialchars($pconfig['name'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
- <?=gettext("Enter the name to register with the Growl server (default: PHP-Growl)."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Notification Name"); ?></td>
- <td width="78%" class="vtable">
- <input name='notification_name' value='<?php echo htmlspecialchars($pconfig['notification_name'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
- <?=sprintf(gettext("Enter a name for the Growl notifications (default: %s growl alert)."), $g['product_name']); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IP Address"); ?></td>
- <td width="78%" class="vtable">
- <input name='ipaddress' value='<?php echo htmlspecialchars($pconfig['ipaddress'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
- <?=gettext("This is the IP address that you would like to send growl notifications to."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Password"); ?></td>
- <td width="78%" class="vtable">
- <input name='password' type='password' value='<?php echo htmlspecialchars($pconfig['password'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
- <?=gettext("Enter the password of the remote growl notification device."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="">
- &nbsp;
- </td>
- <td>
- <input type='submit' id='test_growl' name='test_growl' value='<?=gettext("Test Growl"); ?>' />
- <br /><?= gettext("NOTE: A test notification will be sent even if the service is marked as disabled.") ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <!-- SMTP -->
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("SMTP E-Mail"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Disable SMTP Notifications"); ?></td>
- <td width="78%" class="vtable">
- <input type='checkbox' name='disable_smtp' value="yes" <?php if ($pconfig['disable_smtp']) {?>checked="checked"<?php } ?> /><br />
- <?=gettext("Check this option to disable SMTP notifications but preserve the settings below. Some other mechanisms, such as packages, may need these settings in place to function."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("E-Mail server"); ?></td>
- <td width="78%" class="vtable">
- <input name='smtpipaddress' value='<?php echo htmlspecialchars($pconfig['smtpipaddress'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
- <?=gettext("This is the FQDN or IP address of the SMTP E-Mail server to which notifications will be sent."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("SMTP Port of E-Mail server"); ?></td>
- <td width="78%" class="vtable">
- <input name='smtpport' value='<?php echo htmlspecialchars($pconfig['smtpport'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
- <?=gettext("This is the port of the SMTP E-Mail server, typically 25, 587 (submission) or 465 (smtps)"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Secure SMTP Connection"); ?></td>
- <td width="78%" class="vtable">
- <input type='checkbox' id='smtpssl' name='smtpssl' <?php if (isset($pconfig['smtpssl'])) echo "checked=\"checked\""; ?> />Enable SMTP over SSL/TLS<br />
- <input type='checkbox' id='smtptls' name='smtptls' <?php if (isset($pconfig['smtptls'])) echo "checked=\"checked\""; ?> />Enable STARTTLS<br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("From e-mail address"); ?></td>
- <td width="78%" class="vtable">
- <input name='smtpfromaddress' type='text' value='<?php echo htmlspecialchars($pconfig['smtpfromaddress'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
- <?=gettext("This is the e-mail address that will appear in the from field."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Notification E-Mail address"); ?></td>
- <td width="78%" class="vtable">
- <input name='smtpnotifyemailaddress' type='text' value='<?php echo htmlspecialchars($pconfig['smtpnotifyemailaddress'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
- <?=gettext("Enter the e-mail address that you would like email notifications sent to."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Notification E-Mail auth username (optional)"); ?></td>
- <td width="78%" class="vtable">
- <input name='smtpusername' type='text' value='<?php echo htmlspecialchars($pconfig['smtpusername'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
- <?=gettext("Enter the e-mail address username for SMTP authentication."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Notification E-Mail auth password"); ?></td>
- <td width="78%" class="vtable">
- <input name='smtppassword' type='password' value='<?php echo htmlspecialchars($pconfig['smtppassword'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
- <?=gettext("Enter the e-mail address password for SMTP authentication."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Notification E-Mail auth mechanism"); ?></td>
- <td width="78%" class="vtable">
- <select name='smtpauthmech' id='smtpauthmech' class="formselect">
- <?php
- foreach ($smtp_authentication_mechanisms as $name => $desc):
- $selected = "";
- if ($pconfig['smtpauthmech'] == $name) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$name;?>" <?=$selected;?>><?=$desc;?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <?=gettext("Select the authentication mechanism used by the SMTP server. Most work with PLAIN, some servers like Exchange or Office365 might require LOGIN."); ?>
- </td>
- </tr>
- <tr>
- <td valign="top" class="">
- &nbsp;
- </td>
- <td>
- <input type='submit' id='test_smtp' name='test_smtp' value='<?=gettext("Test SMTP"); ?>' />
- <br /><?= gettext("NOTE: A test message will be sent even if the service is marked as disabled.") ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <!-- System Sounds -->
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("System Sounds"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Startup/Shutdown Sound"); ?></td>
- <td width="78%" class="vtable">
- <input name="disablebeep" type="checkbox" id="disablebeep" value="yes" <?php if ($pconfig['disablebeep']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable the startup/shutdown beep"); ?></strong>
- <br />
- <span class="vexpl"><?=gettext("When this is checked, startup and shutdown sounds will no longer play."); ?></span>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td valign="top" class="">
- &nbsp;
- </td>
- <td>
- <input type='submit' id='Submit' name='Submit' value='<?=gettext("Save"); ?>' />
- </td>
- </tr>
- </table>
- </form>
- </div>
- </td>
- </tr>
- </table>
-<script type="text/javascript">
-//<![CDATA[
- jQuery(document).ready(function() {
- if (jQuery('#smtpssl').is(':checked')) {
- jQuery('#smtptls').prop('disabled', true);
- } else if (jQuery('#smtptls').is(':checked')) {
- jQuery('#smtpssl').prop('disabled', true);
- }
- });
- jQuery('#smtpssl').change( function() {
- jQuery('#smtptls').prop('disabled', this.checked);
- });
- jQuery('#smtptls').change( function() {
- jQuery('#smtpssl').prop('disabled', this.checked);
- });
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_advanced_sysctl.php b/usr/local/www/system_advanced_sysctl.php
deleted file mode 100644
index 1992cc1..0000000
--- a/usr/local/www/system_advanced_sysctl.php
+++ /dev/null
@@ -1,305 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_advanced_sysctl.php
- part of pfSense
- Copyright (C) 2005-2007 Scott Ullrich
- Copyright (C) 2008 Shrew Soft Inc
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-system-advanced-sysctl
-##|*NAME=System: Advanced: Tunables page
-##|*DESCR=Allow access to the 'System: Advanced: Tunables' page.
-##|*MATCH=system_advanced_sysctl.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_advanced_sysctl.php');
-}
-
-if (!is_array($config['sysctl'])) {
- $config['sysctl'] = array();
-}
-if (!is_array($config['sysctl']['item'])) {
- $config['sysctl']['item'] = array();
-}
-
-$a_tunable = &$config['sysctl']['item'];
-$tunables = system_get_sysctls();
-
-if (isset($_GET['id'])) {
- $id = htmlspecialchars_decode($_GET['id']);
-}
-if (isset($_POST['id'])) {
- $id = htmlspecialchars_decode($_POST['id']);
-}
-
-$act = $_GET['act'];
-if (isset($_POST['act'])) {
- $act = $_POST['act'];
-}
-
-if ($act == "edit") {
- if (isset($a_tunable[$id])) {
- $pconfig['tunable'] = $a_tunable[$id]['tunable'];
- $pconfig['value'] = $a_tunable[$id]['value'];
- $pconfig['descr'] = $a_tunable[$id]['descr'];
- } else if (isset($tunables[$id])) {
- $pconfig['tunable'] = $tunables[$id]['tunable'];
- $pconfig['value'] = $tunables[$id]['value'];
- $pconfig['descr'] = $tunables[$id]['descr'];
- }
-}
-
-if ($act == "del") {
- if ($a_tunable[$id]) {
- /* if this is an AJAX caller then handle via JSON */
- if (isAjax() && is_array($input_errors)) {
- input_errors2Ajax($input_errors);
- exit;
- }
- if (!$input_errors) {
- unset($a_tunable[$id]);
- write_config();
- mark_subsystem_dirty('sysctl');
- pfSenseHeader("system_advanced_sysctl.php");
- exit;
- }
- }
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* if this is an AJAX caller then handle via JSON */
- if (isAjax() && is_array($input_errors)) {
- input_errors2Ajax($input_errors);
- exit;
- }
-
- if ($_POST['apply']) {
- $retval = 0;
- system_setup_sysctl();
- $savemsg = get_std_save_message($retval);
- clear_subsystem_dirty('sysctl');
- }
-
- if ($_POST['Submit'] == gettext("Save")) {
- $tunableent = array();
-
- $tunableent['tunable'] = $_POST['tunable'];
- $tunableent['value'] = $_POST['value'];
- $tunableent['descr'] = $_POST['descr'];
-
- if (isset($id) && isset($a_tunable[$id])) {
- $a_tunable[$id] = $tunableent;
- } else {
- $a_tunable[] = $tunableent;
- }
-
- mark_subsystem_dirty('sysctl');
-
- write_config();
-
- pfSenseHeader("system_advanced_sysctl.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("System"), gettext("Advanced: System Tunables"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
- <form action="system_advanced_sysctl.php" method="post">
- <?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
- if (is_subsystem_dirty('sysctl') && ($act != "edit")) {
- print_info_box_np(gettext("The firewall tunables have changed. You must apply the configuration to take affect."));
- }
- ?>
- </form>
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system advanced tunables">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), false, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), true, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <?php if ($act != "edit"): ?>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <span class="vexpl">
- <span class="red">
- <strong><?=gettext("NOTE:"); ?>&nbsp;</strong>
- </span>
- <?=gettext("The options on this page are intended for use by advanced users only."); ?>
- <br />
- </span>
- <br />
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="20%" class="listhdrr"><?=gettext("Tunable Name"); ?></td>
- <td width="60%" class="listhdrr"><?=gettext("Description"); ?></td>
- <td width="20%" class="listhdrr"><?=gettext("Value"); ?></td>
- </tr>
- <?php foreach ($tunables as $i => $tunable):
-
- if (!isset($tunable['modified'])) {
- $i = urlencode($tunable['tunable']);
- }
- ?>
- <tr>
- <td class="listlr" ondblclick="document.location='system_advanced_sysctl.php?act=edit&amp;id=<?=$i;?>';">
- <?php echo htmlspecialchars($tunable['tunable']); ?>
- </td>
- <td class="listr" align="left" ondblclick="document.location='system_advanced_sysctl.php?act=edit&amp;id=<?=$i;?>';">
- <?php echo htmlspecialchars($tunable['descr']); ?>
- </td>
- <td class="listr" align="left" ondblclick="document.location='system_advanced_sysctl.php?act=edit&amp;id=<?=$i;?>';">
- <?php echo htmlspecialchars($tunable['value']); ?>
- <?php
- if ($tunable['value'] == "default") {
- echo "(" . get_default_sysctl_value($tunable['tunable']) . ")";
- }
- ?>
- </td>
- <td class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="edit delete">
- <tr>
- <td valign="middle">
- <a href="system_advanced_sysctl.php?act=edit&amp;id=<?=$i;?>">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="" />
- </a>
- </td>
- <?php if (isset($tunable['modified'])): ?>
- <td valign="middle">
- <a href="system_advanced_sysctl.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this entry?"); ?>')">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="" />
- </a>
- </td>
- <?php endif; ?>
- </tr>
- </table>
- </td>
- </tr>
- <?php endforeach; unset($tunables); ?>
- <tr>
- <td class="list" colspan="3">
- </td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="edit">
- <tr>
- <td valign="middle">
- <a href="system_advanced_sysctl.php?act=edit">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- <?php else: ?>
- <tr>
- <td>
- <div id="mainarea">
- <form action="system_advanced_sysctl.php" method="post" name="iform" id="iform">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="edit system tunable">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit system tunable"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Tunable"); ?></td>
- <td width="78%" class="vtable">
- <input size="65" name="tunable" value="<?php echo htmlspecialchars($pconfig['tunable']); ?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <textarea rows="7" cols="50" name="descr"><?php echo htmlspecialchars($pconfig['descr']); ?></textarea>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Value"); ?></td>
- <td width="78%" class="vtable">
- <input size="65" name="value" value="<?php echo htmlspecialchars($pconfig['value']); ?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_tunable[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </form>
- </div>
- </td>
- </tr>
- <?php endif; ?>
- </table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_authservers.php b/usr/local/www/system_authservers.php
deleted file mode 100644
index 0b7c81d..0000000
--- a/usr/local/www/system_authservers.php
+++ /dev/null
@@ -1,912 +0,0 @@
-<?php
-/*
- system_authservers.php
-
- Copyright (C) 2008 Shrew Soft Inc.
- Copyright (C) 2010 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: auth
-*/
-
-##|+PRIV
-##|*IDENT=page-system-authservers
-##|*NAME=System: Authentication Servers
-##|*DESCR=Allow access to the 'System: Authentication Servers' page.
-##|*MATCH=system_authservers.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("auth.inc");
-
-$pgtitle = array(gettext("System"), gettext("Authentication Servers"));
-$shortcut_section = "authentication";
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (!is_array($config['system']['authserver'])) {
- $config['system']['authserver'] = array();
-}
-
-$a_servers = auth_get_authserver_list();
-foreach ($a_servers as $servers) {
- $a_server[] = $servers;
-}
-
-if (!is_array($config['ca'])) {
- $config['ca'] = array();
-}
-$a_ca =& $config['ca'];
-
-$act = $_GET['act'];
-if ($_POST['act']) {
- $act = $_POST['act'];
-}
-
-if ($act == "del") {
-
- if (!$a_server[$_GET['id']]) {
- pfSenseHeader("system_authservers.php");
- exit;
- }
-
- /* Remove server from main list. */
- $serverdeleted = $a_server[$_GET['id']]['name'];
- foreach ($config['system']['authserver'] as $k => $as) {
- if ($config['system']['authserver'][$k]['name'] == $serverdeleted) {
- unset($config['system']['authserver'][$k]);
- }
- }
-
- /* Remove server from temp list used later on this page. */
- unset($a_server[$_GET['id']]);
-
- $savemsg = gettext("Authentication Server") . " " . htmlspecialchars($serverdeleted) . " " . gettext("deleted") . "<br />";
- write_config($savemsg);
-}
-
-if ($act == "edit") {
- if (isset($id) && $a_server[$id]) {
-
- $pconfig['type'] = $a_server[$id]['type'];
- $pconfig['name'] = $a_server[$id]['name'];
-
- if ($pconfig['type'] == "ldap") {
- $pconfig['ldap_caref'] = $a_server[$id]['ldap_caref'];
- $pconfig['ldap_host'] = $a_server[$id]['host'];
- $pconfig['ldap_port'] = $a_server[$id]['ldap_port'];
- $pconfig['ldap_urltype'] = $a_server[$id]['ldap_urltype'];
- $pconfig['ldap_protver'] = $a_server[$id]['ldap_protver'];
- $pconfig['ldap_scope'] = $a_server[$id]['ldap_scope'];
- $pconfig['ldap_basedn'] = $a_server[$id]['ldap_basedn'];
- $pconfig['ldap_authcn'] = $a_server[$id]['ldap_authcn'];
- $pconfig['ldap_extended_enabled'] = $a_server[$id]['ldap_extended_enabled'];
- $pconfig['ldap_extended_query'] = $a_server[$id]['ldap_extended_query'];
- $pconfig['ldap_binddn'] = $a_server[$id]['ldap_binddn'];
- $pconfig['ldap_bindpw'] = $a_server[$id]['ldap_bindpw'];
- $pconfig['ldap_attr_user'] = $a_server[$id]['ldap_attr_user'];
- $pconfig['ldap_attr_group'] = $a_server[$id]['ldap_attr_group'];
- $pconfig['ldap_attr_member'] = $a_server[$id]['ldap_attr_member'];
- $pconfig['ldap_utf8'] = isset($a_server[$id]['ldap_utf8']);
- $pconfig['ldap_nostrip_at'] = isset($a_server[$id]['ldap_nostrip_at']);
-
- if (!$pconfig['ldap_binddn'] || !$pconfig['ldap_bindpw']) {
- $pconfig['ldap_anon'] = true;
- }
- }
-
- if ($pconfig['type'] == "radius") {
- $pconfig['radius_host'] = $a_server[$id]['host'];
- $pconfig['radius_auth_port'] = $a_server[$id]['radius_auth_port'];
- $pconfig['radius_acct_port'] = $a_server[$id]['radius_acct_port'];
- $pconfig['radius_secret'] = $a_server[$id]['radius_secret'];
- $pconfig['radius_timeout'] = $a_server[$id]['radius_timeout'];
-
- if ($pconfig['radius_auth_port'] &&
- $pconfig['radius_acct_port']) {
- $pconfig['radius_srvcs'] = "both";
- }
-
- if ($pconfig['radius_auth_port'] &&
- !$pconfig['radius_acct_port']) {
- $pconfig['radius_srvcs'] = "auth";
- $pconfig['radius_acct_port'] = 1813;
- }
-
- if (!$pconfig['radius_auth_port'] &&
- $pconfig['radius_acct_port']) {
- $pconfig['radius_srvcs'] = "acct";
- $pconfig['radius_auth_port'] = 1812;
- }
-
- }
- }
-}
-
-if ($act == "new") {
- $pconfig['ldap_protver'] = 3;
- $pconfig['ldap_anon'] = true;
- $pconfig['radius_srvcs'] = "both";
- $pconfig['radius_auth_port'] = "1812";
- $pconfig['radius_acct_port'] = "1813";
-}
-
-if ($_POST) {
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
-
- if ($pconfig['type'] == "ldap") {
- $reqdfields = explode(" ",
- "name type ldap_host ldap_port " .
- "ldap_urltype ldap_protver ldap_scope " .
- "ldap_attr_user ldap_attr_group ldap_attr_member ldapauthcontainers");
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Type"),
- gettext("Hostname or IP"),
- gettext("Port value"),
- gettext("Transport"),
- gettext("Protocol version"),
- gettext("Search level"),
- gettext("User naming Attribute"),
- gettext("Group naming Attribute"),
- gettext("Group member attribute"),
- gettext("Authentication container"));
-
- if (!$pconfig['ldap_anon']) {
- $reqdfields[] = "ldap_binddn";
- $reqdfields[] = "ldap_bindpw";
- $reqdfieldsn[] = gettext("Bind user DN");
- $reqdfieldsn[] = gettext("Bind Password");
- }
- }
-
- if ($pconfig['type'] == "radius") {
- $reqdfields = explode(" ", "name type radius_host radius_srvcs");
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Type"),
- gettext("Hostname or IP"),
- gettext("Services"));
-
- if ($pconfig['radisu_srvcs'] == "both" ||
- $pconfig['radisu_srvcs'] == "auth") {
- $reqdfields[] = "radius_auth_port";
- $reqdfieldsn[] = gettext("Authentication port value");
- }
-
- if ($pconfig['radisu_srvcs'] == "both" ||
- $pconfig['radisu_srvcs'] == "acct") {
- $reqdfields[] = "radius_acct_port";
- $reqdfieldsn[] = gettext("Accounting port value");
- }
-
- if (!isset($id)) {
- $reqdfields[] = "radius_secret";
- $reqdfieldsn[] = gettext("Shared Secret");
- }
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['host'])) {
- $input_errors[] = gettext("The host name contains invalid characters.");
- }
-
- if (auth_get_authserver($pconfig['name']) && !isset($id)) {
- $input_errors[] = gettext("An authentication server with the same name already exists.");
- }
-
- if (($pconfig['type'] == "radius") && isset($_POST['radius_timeout']) && !empty($_POST['radius_timeout']) && (!is_numeric($_POST['radius_timeout']) || (is_numeric($_POST['radius_timeout']) && ($_POST['radius_timeout'] <= 0)))) {
- $input_errors[] = gettext("RADIUS Timeout value must be numeric and positive.");
- }
-
- /* if this is an AJAX caller then handle via JSON */
- if (isAjax() && is_array($input_errors)) {
- input_errors2Ajax($input_errors);
- exit;
- }
-
- if (!$input_errors) {
- $server = array();
- $server['refid'] = uniqid();
- if (isset($id) && $a_server[$id]) {
- $server = $a_server[$id];
- }
-
- $server['type'] = $pconfig['type'];
- $server['name'] = $pconfig['name'];
-
- if ($server['type'] == "ldap") {
-
- if (!empty($pconfig['ldap_caref'])) {
- $server['ldap_caref'] = $pconfig['ldap_caref'];
- }
- $server['host'] = $pconfig['ldap_host'];
- $server['ldap_port'] = $pconfig['ldap_port'];
- $server['ldap_urltype'] = $pconfig['ldap_urltype'];
- $server['ldap_protver'] = $pconfig['ldap_protver'];
- $server['ldap_scope'] = $pconfig['ldap_scope'];
- $server['ldap_basedn'] = $pconfig['ldap_basedn'];
- $server['ldap_authcn'] = $pconfig['ldapauthcontainers'];
- $server['ldap_extended_enabled'] = $pconfig['ldap_extended_enabled'];
- $server['ldap_extended_query'] = $pconfig['ldap_extended_query'];
- $server['ldap_attr_user'] = $pconfig['ldap_attr_user'];
- $server['ldap_attr_group'] = $pconfig['ldap_attr_group'];
- $server['ldap_attr_member'] = $pconfig['ldap_attr_member'];
- if ($pconfig['ldap_utf8'] == "yes") {
- $server['ldap_utf8'] = true;
- } else {
- unset($server['ldap_utf8']);
- }
- if ($pconfig['ldap_nostrip_at'] == "yes") {
- $server['ldap_nostrip_at'] = true;
- } else {
- unset($server['ldap_nostrip_at']);
- }
-
-
- if (!$pconfig['ldap_anon']) {
- $server['ldap_binddn'] = $pconfig['ldap_binddn'];
- $server['ldap_bindpw'] = $pconfig['ldap_bindpw'];
- } else {
- unset($server['ldap_binddn']);
- unset($server['ldap_bindpw']);
- }
- }
-
- if ($server['type'] == "radius") {
-
- $server['host'] = $pconfig['radius_host'];
-
- if ($pconfig['radius_secret']) {
- $server['radius_secret'] = $pconfig['radius_secret'];
- }
-
- if ($pconfig['radius_timeout']) {
- $server['radius_timeout'] = $pconfig['radius_timeout'];
- } else {
- $server['radius_timeout'] = 5;
- }
-
- if ($pconfig['radius_srvcs'] == "both") {
- $server['radius_auth_port'] = $pconfig['radius_auth_port'];
- $server['radius_acct_port'] = $pconfig['radius_acct_port'];
- }
-
- if ($pconfig['radius_srvcs'] == "auth") {
- $server['radius_auth_port'] = $pconfig['radius_auth_port'];
- unset($server['radius_acct_port']);
- }
-
- if ($pconfig['radius_srvcs'] == "acct") {
- $server['radius_acct_port'] = $pconfig['radius_acct_port'];
- unset($server['radius_auth_port']);
- }
- }
-
- if (isset($id) && $config['system']['authserver'][$id]) {
- $config['system']['authserver'][$id] = $server;
- } else {
- $config['system']['authserver'][] = $server;
- }
-
- write_config();
-
- pfSenseHeader("system_authservers.php");
- }
-}
-
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-
-function server_typechange(typ) {
-
- var idx = 0;
- if (!typ) {
- idx = document.getElementById("type").selectedIndex;
- typ = document.getElementById("type").options[idx].value;
- }
-
- switch (typ) {
- case "ldap":
- document.getElementById("ldap").style.display="";
- document.getElementById("radius").style.display="none";
- break;
- case "radius":
- document.getElementById("ldap").style.display="none";
- document.getElementById("radius").style.display="";
- break;
- }
-}
-
-function ldap_urlchange() {
- switch (document.getElementById("ldap_urltype").selectedIndex) {
-<?php
- $index = 0;
- foreach ($ldap_urltypes as $urltype => $urlport):
-?>
- case <?=$index;?>:
- document.getElementById("ldap_port").value = "<?=$urlport;?>";
- break;
-<?php
- $index++;
- endforeach;
-?>
- }
-}
-
-function ldap_bindchange() {
-
- if (document.getElementById("ldap_anon").checked) {
- document.getElementById("ldap_bind").style.display="none";
- } else {
- document.getElementById("ldap_bind").style.display="";
- }
-}
-
-function ldap_tmplchange() {
- switch (document.getElementById("ldap_tmpltype").selectedIndex) {
-<?php
- $index = 0;
- foreach ($ldap_templates as $tmpldata):
-?>
- case <?=$index;?>:
- document.getElementById("ldap_attr_user").value = "<?=$tmpldata['attr_user'];?>";
- document.getElementById("ldap_attr_group").value = "<?=$tmpldata['attr_group'];?>";
- document.getElementById("ldap_attr_member").value = "<?=$tmpldata['attr_member'];?>";
- break;
-<?php
- $index++;
- endforeach;
-?>
- }
-}
-
-function radius_srvcschange() {
- switch (document.getElementById("radius_srvcs").selectedIndex) {
- case 0: // both
- document.getElementById("radius_auth").style.display="";
- document.getElementById("radius_acct").style.display="";
- break;
- case 1: // authentication
- document.getElementById("radius_auth").style.display="";
- document.getElementById("radius_acct").style.display="none";
- break;
- case 2: // accounting
- document.getElementById("radius_auth").style.display="none";
- document.getElementById("radius_acct").style.display="";
- break;
- }
-}
-
-function select_clicked() {
- if (document.getElementById("ldap_port").value == '' ||
- document.getElementById("ldap_host").value == '' ||
- document.getElementById("ldap_scope").value == '' ||
- document.getElementById("ldap_basedn").value == '' ||
- document.getElementById("ldapauthcontainers").value == '') {
- alert("<?=gettext("Please fill the required values.");?>");
- return;
- }
- if (!document.getElementById("ldap_anon").checked) {
- if (document.getElementById("ldap_binddn").value == '' ||
- document.getElementById("ldap_bindpw").value == '') {
- alert("<?=gettext("Please fill the bind username/password.");?>");
- return;
- }
- }
- var url = 'system_usermanager_settings_ldapacpicker.php?';
- url += 'port=' + document.getElementById("ldap_port").value;
- url += '&host=' + document.getElementById("ldap_host").value;
- url += '&scope=' + document.getElementById("ldap_scope").value;
- url += '&basedn=' + document.getElementById("ldap_basedn").value;
- url += '&binddn=' + document.getElementById("ldap_binddn").value;
- url += '&bindpw=' + document.getElementById("ldap_bindpw").value;
- url += '&urltype=' + document.getElementById("ldap_urltype").value;
- url += '&proto=' + document.getElementById("ldap_protver").value;
- url += '&authcn=' + document.getElementById("ldapauthcontainers").value;
- <?php if (count($a_ca) > 0): ?>
- url += '&cert=' + document.getElementById("ldap_caref").value;
- <?php else: ?>
- url += '&cert=';
- <?php endif; ?>
-
- var oWin = window.open(url, "pfSensePop", "width=620,height=400,top=150,left=150");
- if (oWin == null || typeof(oWin) == "undefined") {
- alert("<?=gettext('Popup blocker detected. Action aborted.');?>");
- }
-}
-//]]>
-</script>
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="auth servers">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Users"), false, "system_usermanager.php");
- $tab_array[] = array(gettext("Groups"), false, "system_groupmanager.php");
- $tab_array[] = array(gettext("Settings"), false, "system_usermanager_settings.php");
- $tab_array[] = array(gettext("Servers"), true, "system_authservers.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
-
- <?php if ($act == "new" || $act == "edit" || $input_errors): ?>
-
- <form action="system_authservers.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Descriptive name");?></td>
- <td width="78%" class="vtable">
- <?php if (!isset($id)): ?>
- <input name="name" type="text" class="formfld unknown" id="name" size="20" value="<?=htmlspecialchars($pconfig['name']);?>"/>
- <?php else: ?>
- <strong><?=htmlspecialchars($pconfig['name']);?></strong>
- <input name='name' type='hidden' id='name' value="<?=htmlspecialchars($pconfig['name']);?>"/>
- <?php endif; ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Type");?></td>
- <td width="78%" class="vtable">
- <?php if (!isset($id)): ?>
- <select name='type' id='type' class="formselect" onchange='server_typechange()'>
- <?php
- foreach ($auth_server_types as $typename => $typedesc):
- $selected = "";
- if ($pconfig['type'] == $typename) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$typename;?>" <?=$selected;?>><?=$typedesc;?></option>
- <?php endforeach; ?>
- </select>
- <?php else: ?>
- <strong><?=$auth_server_types[$pconfig['type']];?></strong>
- <input name='type' type='hidden' id='type' value="<?=htmlspecialchars($pconfig['type']);?>"/>
- <?php endif; ?>
- </td>
- </tr>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" id="ldap" style="display:none" summary="">
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("LDAP Server Settings");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname or IP address");?></td>
- <td width="78%" class="vtable">
- <input name="ldap_host" type="text" class="formfld unknown" id="ldap_host" size="20" value="<?=htmlspecialchars($pconfig['ldap_host']);?>"/>
- <br /><?= gettext("NOTE: When using SSL, this hostname MUST match the Common Name (CN) of the LDAP server's SSL Certificate."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Port value");?></td>
- <td width="78%" class="vtable">
- <input name="ldap_port" type="text" class="formfld unknown" id="ldap_port" size="5" value="<?=htmlspecialchars($pconfig['ldap_port']);?>"/>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Transport");?></td>
- <td width="78%" class="vtable">
- <select name='ldap_urltype' id='ldap_urltype' class="formselect" onchange='ldap_urlchange()'>
- <?php
- foreach ($ldap_urltypes as $urltype => $urlport):
- $selected = "";
- if ($pconfig['ldap_urltype'] == $urltype) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$urltype;?>" <?=$selected;?>><?=$urltype;?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr id="tls_ca">
- <td width="22%" valign="top" class="vncell"><?=gettext("Peer Certificate Authority"); ?></td>
- <td width="78%" class="vtable">
- <?php if (count($a_ca)): ?>
- <select id='ldap_caref' name='ldap_caref' class="formselect">
- <?php
- foreach ($a_ca as $ca):
- $selected = "";
- if ($pconfig['ldap_caref'] == $ca['refid']) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$ca['refid'];?>" <?=$selected;?>><?=htmlspecialchars($ca['descr']);?></option>
- <?php endforeach; ?>
- </select>
- <br /><span><?=gettext("This option is used if 'SSL Encrypted' option is chosen.");?> <br />
- <?=gettext("It must match with the CA in the AD otherwise problems will arise.");?></span>
- <?php else: ?>
- <b>No Certificate Authorities defined.</b> <br />Create one under <a href="system_camanager.php">System &gt; Cert Manager</a>.
- <?php endif; ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol version");?></td>
- <td width="78%" class="vtable">
- <select name='ldap_protver' id='ldap_protver' class="formselect">
- <?php
- foreach ($ldap_protvers as $version):
- $selected = "";
- if ($pconfig['ldap_protver'] == $version) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$version;?>" <?=$selected;?>><?=$version;?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Search scope");?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="2" summary="search scope">
- <tr>
- <td><?=gettext("Level:");?> &nbsp;</td>
- <td>
- <select name='ldap_scope' id='ldap_scope' class="formselect">
- <?php
- foreach ($ldap_scopes as $scopename => $scopedesc):
- $selected = "";
- if ($pconfig['ldap_scope'] == $scopename) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$scopename;?>" <?=$selected;?>><?=$scopedesc;?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Base DN:");?> &nbsp;</td>
- <td>
- <input name="ldap_basedn" type="text" class="formfld unknown" id="ldap_basedn" size="40" value="<?=htmlspecialchars($pconfig['ldap_basedn']);?>"/>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Authentication containers");?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="2" summary="auth containers">
- <tr>
- <td><?=gettext("Containers:");?> &nbsp;</td>
- <td>
- <input name="ldapauthcontainers" type="text" class="formfld unknown" id="ldapauthcontainers" size="40" value="<?=htmlspecialchars($pconfig['ldap_authcn']);?>"/>
- <input type="button" onclick="select_clicked();" value="<?=gettext("Select");?>" />
- <br /><?=gettext("Note: Semi-Colon separated. This will be prepended to the search base dn above or you can specify full container path containing a dc= component.");?>
- <br /><?=gettext("Example:");?> CN=Users;DC=example,DC=com
- <br /><?=gettext("Example:");?> OU=Staff;OU=Freelancers
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Extended Query");?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="2" summary="query">
- <tr>
- <td>
- <input name="ldap_extended_enabled" type="checkbox" id="ldap_extended_enabled" value="no" <?php if ($pconfig['ldap_extended_enabled']) echo "checked=\"checked\""; ?> />
- </td>
- <td>
-
- <input name="ldap_extended_query" type="text" class="formfld unknown" id="ldap_extended_query" size="40" value="<?=htmlspecialchars($pconfig['ldap_extended_query']);?>"/>
- <br /><?=gettext("Example:");?> &amp;(objectClass=inetOrgPerson)(mail=*@example.com)
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Bind credentials");?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="2" summary="bind credentials">
- <tr>
- <td>
- <input name="ldap_anon" type="checkbox" id="ldap_anon" value="yes" <?php if ($pconfig['ldap_anon']) echo "checked=\"checked\""; ?> onclick="ldap_bindchange()" />
- </td>
- <td>
- <?=gettext("Use anonymous binds to resolve distinguished names");?>
- </td>
- </tr>
- </table>
- <table border="0" cellspacing="0" cellpadding="2" id="ldap_bind" summary="bind">
- <tr>
- <td colspan="2"></td>
- </tr>
- <tr>
- <td><?=gettext("User DN:");?> &nbsp;</td>
- <td>
- <input name="ldap_binddn" type="text" class="formfld unknown" id="ldap_binddn" size="40" value="<?=htmlspecialchars($pconfig['ldap_binddn']);?>"/><br />
- </td>
- </tr>
- <tr>
- <td><?=gettext("Password:");?> &nbsp;</td>
- <td>
- <input name="ldap_bindpw" type="password" class="formfld pwd" id="ldap_bindpw" size="20" value="<?=htmlspecialchars($pconfig['ldap_bindpw']);?>"/><br />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <?php if (!isset($id)): ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Initial Template");?></td>
- <td width="78%" class="vtable">
- <select name='ldap_tmpltype' id='ldap_tmpltype' class="formselect" onchange='ldap_tmplchange()'>
- <?php
- foreach ($ldap_templates as $tmplname => $tmpldata):
- $selected = "";
- if ($pconfig['ldap_template'] == $tmplname) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$tmplname;?>" <?=$selected;?>><?=$tmpldata['desc'];?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <?php endif; ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("User naming attribute");?></td>
- <td width="78%" class="vtable">
- <input name="ldap_attr_user" type="text" class="formfld unknown" id="ldap_attr_user" size="20" value="<?=htmlspecialchars($pconfig['ldap_attr_user']);?>"/>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Group naming attribute");?></td>
- <td width="78%" class="vtable">
- <input name="ldap_attr_group" type="text" class="formfld unknown" id="ldap_attr_group" size="20" value="<?=htmlspecialchars($pconfig['ldap_attr_group']);?>"/>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Group member attribute");?></td>
- <td width="78%" class="vtable">
- <input name="ldap_attr_member" type="text" class="formfld unknown" id="ldap_attr_member" size="20" value="<?=htmlspecialchars($pconfig['ldap_attr_member']);?>"/>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("UTF8 Encode");?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="2" summary="utf8 encoding">
- <tr>
- <td>
- <input name="ldap_utf8" type="checkbox" id="ldap_utf8" value="yes" <?php if ($pconfig['ldap_utf8']) echo "checked=\"checked\""; ?> />
- </td>
- <td>
- <?=gettext("UTF8 encode LDAP parameters before sending them to the server. Required to support international characters, but may not be supported by every LDAP server.");?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Username Alterations");?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="2" summary="username alterations">
- <tr>
- <td>
- <input name="ldap_nostrip_at" type="checkbox" id="ldap_nostrip_at" value="yes" <?php if ($pconfig['ldap_nostrip_at']) echo "checked=\"checked\""; ?> />
- </td>
- <td>
- <?=gettext("Do not strip away parts of the username after the @ symbol, e.g. user@host becomes user when unchecked.");?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" id="radius" style="display:none" summary="">
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Radius Server Settings");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname or IP address");?></td>
- <td width="78%" class="vtable">
- <input name="radius_host" type="text" class="formfld unknown" id="radius_host" size="20" value="<?=htmlspecialchars($pconfig['radius_host']);?>"/>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Shared Secret");?></td>
- <td width="78%" class="vtable">
- <input name="radius_secret" type="password" class="formfld pwd" id="radius_secret" size="20" value="<?=htmlspecialchars($pconfig['radius_secret']);?>"/>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Services offered");?></td>
- <td width="78%" class="vtable">
- <select name='radius_srvcs' id='radius_srvcs' class="formselect" onchange='radius_srvcschange()'>
- <?php
- foreach ($radius_srvcs as $srvcname => $srvcdesc):
- $selected = "";
- if ($pconfig['radius_srvcs'] == $srvcname) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$srvcname;?>" <?=$selected;?>><?=$srvcdesc;?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr id="radius_auth">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Authentication port value");?></td>
- <td width="78%" class="vtable">
- <input name="radius_auth_port" type="text" class="formfld unknown" id="radius_auth_port" size="5" value="<?=htmlspecialchars($pconfig['radius_auth_port']);?>"/>
- </td>
- </tr>
- <tr id="radius_acct">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Accounting port value");?></td>
- <td width="78%" class="vtable">
- <input name="radius_acct_port" type="text" class="formfld unknown" id="radius_acct_port" size="5" value="<?=htmlspecialchars($pconfig['radius_acct_port']);?>"/>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Authentication Timeout");?></td>
- <td width="78%" class="vtable">
- <input name="radius_timeout" type="text" class="formfld unknown" id="radius_timeout" size="20" value="<?=htmlspecialchars($pconfig['radius_timeout']);?>"/>
- <br /><?= gettext("This value controls how long, in seconds, that the RADIUS server may take to respond to an authentication request.") ?>
- <br /><?= gettext("If left blank, the default value is 5 seconds.") ?>
- <br /><br /><?= gettext("NOTE: If you are using an interactive two-factor authentication system, increase this timeout to account for how long it will take the user to receive and enter a token.") ?>
- </td>
- </tr>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="">
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submit" name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <?php if (isset($id) && $a_server[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif;?>
- </td>
- </tr>
- </table>
- </form>
-
- <?php else: ?>
-
- <table class="sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="">
- <thead>
- <tr>
- <th width="25%" class="listhdrr"><?=gettext("Server Name");?></th>
- <th width="25%" class="listhdrr"><?=gettext("Type");?></th>
- <th width="35%" class="listhdrr"><?=gettext("Host Name");?></th>
- <th width="10%" class="list"></th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <td class="list" colspan="3"></td>
- <td class="list">
- <a href="system_authservers.php?act=new">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("add server");?>" alt="<?=gettext("add server");?>" width="17" height="17" border="0" />
- </a>
- </td>
- </tr>
- <tr>
- <td colspan="3">
- <p>
- <?=gettext("Additional authentication servers can be added here.");?>
- </p>
- </td>
- </tr>
- </tfoot>
- <tbody>
- <?php
- $i = 0;
- foreach ($a_server as $server):
- $name = htmlspecialchars($server['name']);
- $type = htmlspecialchars($auth_server_types[$server['type']]);
- $host = htmlspecialchars($server['host']);
- ?>
- <tr <?php if ($i < (count($a_server) - 1)): ?> ondblclick="document.location='system_authservers.php?act=edit&amp;id=<?=$i;?>'" <?php endif; ?>>
- <td class="listlr"><?=$name?>&nbsp;</td>
- <td class="listr"><?=$type;?>&nbsp;</td>
- <td class="listr"><?=$host;?>&nbsp;</td>
- <td valign="middle" class="list nowrap">
- <?php if ($i < (count($a_server) - 1)): ?>
- <a href="system_authservers.php?act=edit&amp;id=<?=$i;?>">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("edit server");?>" alt="<?=gettext("edit server");?>" width="17" height="17" border="0" />
- </a>
- &nbsp;
- <a href="system_authservers.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this Server?");?>')">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete server");?>" alt="<?=gettext("delete server");?>" width="17" height="17" border="0" />
- </a>
- <?php endif; ?>
- </td>
- </tr>
- <?php
- $i++;
- endforeach;
- ?>
- </tbody>
- </table>
-
- <?php endif; ?>
-
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-server_typechange('<?=htmlspecialchars($pconfig['type']);?>');
-<?php if (!isset($id) || $pconfig['type'] == "ldap"): ?>
-ldap_bindchange();
-if (document.getElementById("ldap_port").value == "") {
- ldap_urlchange();
-}
-<?php if (!isset($id)): ?>
-ldap_tmplchange();
-<?php endif; ?>
-<?php endif; ?>
-<?php if (!isset($id) || $pconfig['type'] == "radius"): ?>
-radius_srvcschange();
-<?php endif; ?>
-//]]>
-</script>
-</body>
-</html>
diff --git a/usr/local/www/system_camanager.php b/usr/local/www/system_camanager.php
deleted file mode 100644
index 368b30c..0000000
--- a/usr/local/www/system_camanager.php
+++ /dev/null
@@ -1,770 +0,0 @@
-<?php
-/*
- system_camanager.php
-
- Copyright (C) 2008 Shrew Soft Inc.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: certificate_manager
-*/
-
-##|+PRIV
-##|*IDENT=page-system-camanager
-##|*NAME=System: CA Manager
-##|*DESCR=Allow access to the 'System: CA Manager' page.
-##|*MATCH=system_camanager.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("certs.inc");
-
-$ca_methods = array(
- "existing" => gettext("Import an existing Certificate Authority"),
- "internal" => gettext("Create an internal Certificate Authority"),
- "intermediate" => gettext("Create an intermediate Certificate Authority"));
-
-$ca_keylens = array("512", "1024", "2048", "4096");
-$openssl_digest_algs = array("sha1", "sha224", "sha256", "sha384", "sha512");
-
-$pgtitle = array(gettext("System"), gettext("Certificate Authority Manager"));
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (!is_array($config['ca'])) {
- $config['ca'] = array();
-}
-
-$a_ca =& $config['ca'];
-
-if (!is_array($config['cert'])) {
- $config['cert'] = array();
-}
-
-$a_cert =& $config['cert'];
-
-if (!is_array($config['crl'])) {
- $config['crl'] = array();
-}
-
-$a_crl =& $config['crl'];
-
-$act = $_GET['act'];
-if ($_POST['act']) {
- $act = $_POST['act'];
-}
-
-if ($act == "del") {
-
- if (!isset($a_ca[$id])) {
- pfSenseHeader("system_camanager.php");
- exit;
- }
-
- $index = count($a_cert) - 1;
- for (;$index >= 0; $index--) {
- if ($a_cert[$index]['caref'] == $a_ca[$id]['refid']) {
- unset($a_cert[$index]);
- }
- }
-
- $index = count($a_crl) - 1;
- for (;$index >= 0; $index--) {
- if ($a_crl[$index]['caref'] == $a_ca[$id]['refid']) {
- unset($a_crl[$index]);
- }
- }
-
- $name = $a_ca[$id]['descr'];
- unset($a_ca[$id]);
- write_config();
- $savemsg = sprintf(gettext("Certificate Authority %s and its CRLs (if any) successfully deleted"), htmlspecialchars($name)) . "<br />";
- pfSenseHeader("system_camanager.php");
- exit;
-}
-
-if ($act == "edit") {
- if (!$a_ca[$id]) {
- pfSenseHeader("system_camanager.php");
- exit;
- }
- $pconfig['descr'] = $a_ca[$id]['descr'];
- $pconfig['refid'] = $a_ca[$id]['refid'];
- $pconfig['cert'] = base64_decode($a_ca[$id]['crt']);
- $pconfig['serial'] = $a_ca[$id]['serial'];
- if (!empty($a_ca[$id]['prv'])) {
- $pconfig['key'] = base64_decode($a_ca[$id]['prv']);
- }
-}
-
-if ($act == "new") {
- $pconfig['method'] = $_GET['method'];
- $pconfig['keylen'] = "2048";
- $pconfig['digest_alg'] = "sha256";
- $pconfig['lifetime'] = "3650";
- $pconfig['dn_commonname'] = "internal-ca";
-}
-
-if ($act == "exp") {
-
- if (!$a_ca[$id]) {
- pfSenseHeader("system_camanager.php");
- exit;
- }
-
- $exp_name = urlencode("{$a_ca[$id]['descr']}.crt");
- $exp_data = base64_decode($a_ca[$id]['crt']);
- $exp_size = strlen($exp_data);
-
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename={$exp_name}");
- header("Content-Length: $exp_size");
- echo $exp_data;
- exit;
-}
-
-if ($act == "expkey") {
-
- if (!$a_ca[$id]) {
- pfSenseHeader("system_camanager.php");
- exit;
- }
-
- $exp_name = urlencode("{$a_ca[$id]['descr']}.key");
- $exp_data = base64_decode($a_ca[$id]['prv']);
- $exp_size = strlen($exp_data);
-
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename={$exp_name}");
- header("Content-Length: $exp_size");
- echo $exp_data;
- exit;
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $input_errors = array();
- $pconfig = $_POST;
-
- /* input validation */
- if ($pconfig['method'] == "existing") {
- $reqdfields = explode(" ", "descr cert");
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Certificate data"));
- if ($_POST['cert'] && (!strstr($_POST['cert'], "BEGIN CERTIFICATE") || !strstr($_POST['cert'], "END CERTIFICATE"))) {
- $input_errors[] = gettext("This certificate does not appear to be valid.");
- }
- if ($_POST['key'] && strstr($_POST['key'], "ENCRYPTED")) {
- $input_errors[] = gettext("Encrypted private keys are not yet supported.");
- }
- }
- if ($pconfig['method'] == "internal") {
- $reqdfields = explode(" ",
- "descr keylen lifetime dn_country dn_state dn_city ".
- "dn_organization dn_email dn_commonname");
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Key length"),
- gettext("Lifetime"),
- gettext("Distinguished name Country Code"),
- gettext("Distinguished name State or Province"),
- gettext("Distinguished name City"),
- gettext("Distinguished name Organization"),
- gettext("Distinguished name Email Address"),
- gettext("Distinguished name Common Name"));
- }
- if ($pconfig['method'] == "intermediate") {
- $reqdfields = explode(" ",
- "descr caref keylen lifetime dn_country dn_state dn_city ".
- "dn_organization dn_email dn_commonname");
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Signing Certificate Authority"),
- gettext("Key length"),
- gettext("Lifetime"),
- gettext("Distinguished name Country Code"),
- gettext("Distinguished name State or Province"),
- gettext("Distinguished name City"),
- gettext("Distinguished name Organization"),
- gettext("Distinguished name Email Address"),
- gettext("Distinguished name Common Name"));
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- if ($pconfig['method'] != "existing") {
- /* Make sure we do not have invalid characters in the fields for the certificate */
- if (preg_match("/[\?\>\<\&\/\\\"\']/", $_POST['descr'])) {
- array_push($input_errors, "The field 'Descriptive Name' contains invalid characters.");
- }
-
- for ($i = 0; $i < count($reqdfields); $i++) {
- if ($reqdfields[$i] == 'dn_email') {
- if (preg_match("/[\!\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST["dn_email"])) {
- array_push($input_errors, "The field 'Distinguished name Email Address' contains invalid characters.");
- }
- } else if ($reqdfields[$i] == 'dn_commonname') {
- if (preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST["dn_commonname"])) {
- array_push($input_errors, "The field 'Distinguished name Common Name' contains invalid characters.");
- }
- } else if (($reqdfields[$i] != "descr") && preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\.\"\']/", $_POST["$reqdfields[$i]"])) {
- array_push($input_errors, "The field '" . $reqdfieldsn[$i] . "' contains invalid characters.");
- }
- }
- if (!in_array($_POST["keylen"], $ca_keylens)) {
- array_push($input_errors, gettext("Please select a valid Key Length."));
- }
- if (!in_array($_POST["digest_alg"], $openssl_digest_algs)) {
- array_push($input_errors, gettext("Please select a valid Digest Algorithm."));
- }
- }
-
- /* if this is an AJAX caller then handle via JSON */
- if (isAjax() && is_array($input_errors)) {
- input_errors2Ajax($input_errors);
- exit;
- }
-
- /* save modifications */
- if (!$input_errors) {
-
- $ca = array();
- if (!isset($pconfig['refid']) || empty($pconfig['refid'])) {
- $ca['refid'] = uniqid();
- } else {
- $ca['refid'] = $pconfig['refid'];
- }
-
- if (isset($id) && $a_ca[$id]) {
- $ca = $a_ca[$id];
- }
-
- $ca['descr'] = $pconfig['descr'];
-
- if ($_POST['edit'] == "edit") {
- $ca['descr'] = $pconfig['descr'];
- $ca['refid'] = $pconfig['refid'];
- $ca['serial'] = $pconfig['serial'];
- $ca['crt'] = base64_encode($pconfig['cert']);
- if (!empty($pconfig['key'])) {
- $ca['prv'] = base64_encode($pconfig['key']);
- }
- } else {
- $old_err_level = error_reporting(0); /* otherwise openssl_ functions throw warnings directly to a page screwing menu tab */
- if ($pconfig['method'] == "existing") {
- ca_import($ca, $pconfig['cert'], $pconfig['key'], $pconfig['serial']);
- } else if ($pconfig['method'] == "internal") {
- $dn = array(
- 'countryName' => $pconfig['dn_country'],
- 'stateOrProvinceName' => $pconfig['dn_state'],
- 'localityName' => $pconfig['dn_city'],
- 'organizationName' => $pconfig['dn_organization'],
- 'emailAddress' => $pconfig['dn_email'],
- 'commonName' => $pconfig['dn_commonname']);
- if (!ca_create($ca, $pconfig['keylen'], $pconfig['lifetime'], $dn, $pconfig['digest_alg'])) {
- while ($ssl_err = openssl_error_string()) {
- $input_errors = array();
- array_push($input_errors, "openssl library returns: " . $ssl_err);
- }
- }
- }
- else if ($pconfig['method'] == "intermediate") {
- $dn = array(
- 'countryName' => $pconfig['dn_country'],
- 'stateOrProvinceName' => $pconfig['dn_state'],
- 'localityName' => $pconfig['dn_city'],
- 'organizationName' => $pconfig['dn_organization'],
- 'emailAddress' => $pconfig['dn_email'],
- 'commonName' => $pconfig['dn_commonname']);
- if (!ca_inter_create($ca, $pconfig['keylen'], $pconfig['lifetime'], $dn, $pconfig['caref'], $pconfig['digest_alg'])) {
- while ($ssl_err = openssl_error_string()) {
- $input_errors = array();
- array_push($input_errors, "openssl library returns: " . $ssl_err);
- }
- }
- }
- error_reporting($old_err_level);
- }
-
- if (isset($id) && $a_ca[$id]) {
- $a_ca[$id] = $ca;
- } else {
- $a_ca[] = $ca;
- }
-
- if (!$input_errors) {
- write_config();
- }
-
-// pfSenseHeader("system_camanager.php");
- }
-}
-
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-
-function method_change() {
-
- method = document.iform.method.selectedIndex;
-
- switch (method) {
- case 0:
- document.getElementById("existing").style.display="";
- document.getElementById("internal").style.display="none";
- document.getElementById("intermediate").style.display="none";
- break;
- case 1:
- document.getElementById("existing").style.display="none";
- document.getElementById("internal").style.display="";
- document.getElementById("intermediate").style.display="none";
- break;
- case 2:
- document.getElementById("existing").style.display="none";
- document.getElementById("internal").style.display="";
- document.getElementById("intermediate").style.display="";
- break;
- }
-}
-
-//]]>
-</script>
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
-
- // Load valid country codes
- $dn_cc = array();
- if (file_exists("/etc/ca_countries")) {
- $dn_cc_file=file("/etc/ca_countries");
- foreach ($dn_cc_file as $line) {
- if (preg_match('/^(\S*)\s(.*)$/', $line, $matches)) {
- array_push($dn_cc, $matches[1]);
- }
- }
- }
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="CA manager">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("CAs"), true, "system_camanager.php");
- $tab_array[] = array(gettext("Certificates"), false, "system_certmanager.php");
- $tab_array[] = array(gettext("Certificate Revocation"), false, "system_crlmanager.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
-
- <?php if ($act == "new" || $act == "edit" || $act == gettext("Save") || $input_errors): ?>
-
- <form action="system_camanager.php" method="post" name="iform" id="iform">
- <?php if ($act == "edit"): ?>
- <input type="hidden" name="edit" value="edit" id="edit" />
- <input type="hidden" name="id" value="<?php echo htmlspecialchars($id); ?>" id="id" />
- <input type="hidden" name="refid" value="<?php echo $pconfig['refid']; ?>" id="refid" />
- <?php endif; ?>
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Descriptive name");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="20" value="<?=htmlspecialchars($pconfig['descr']);?>"/>
- </td>
- </tr>
- <?php if (!isset($id) || $act == "edit"): ?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Method");?></td>
- <td width="78%" class="vtable">
- <select name='method' id='method' class="formselect" onchange='method_change()'>
- <?php
- foreach ($ca_methods as $method => $desc):
- $selected = "";
- if ($pconfig['method'] == $method) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$method;?>"<?=$selected;?>><?=$desc;?></option>
- <?php
- endforeach;
- ?>
- </select>
- </td>
- </tr>
- <?php endif; ?>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" id="existing" summary="existing">
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Existing Certificate Authority");?></td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Certificate data");?></td>
- <td width="78%" class="vtable">
- <textarea name="cert" id="cert" cols="65" rows="7" class="formfld_cert"><?=htmlspecialchars($pconfig['cert']);?></textarea>
- <br />
- <?=gettext("Paste a certificate in X.509 PEM format here.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Certificate Private Key");?><br /><?=gettext("(optional)");?></td>
- <td width="78%" class="vtable">
- <textarea name="key" id="key" cols="65" rows="7" class="formfld_cert"><?=htmlspecialchars($pconfig['key']);?></textarea>
- <br />
- <?=gettext("Paste the private key for the above certificate here. This is optional in most cases, but required if you need to generate a Certificate Revocation List (CRL).");?>
- </td>
- </tr>
-
- <?php if (!isset($id) || $act == "edit"): ?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Serial for next certificate");?></td>
- <td width="78%" class="vtable">
- <input name="serial" type="text" class="formfld unknown" id="serial" size="20" value="<?=htmlspecialchars($pconfig['serial']);?>"/>
- <br /><?=gettext("Enter a decimal number to be used as the serial number for the next certificate to be created using this CA.");?>
- </td>
- </tr>
- <?php endif; ?>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" id="internal" summary="internal">
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Internal Certificate Authority");?></td>
- </tr>
- <tr id='intermediate'>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Signing Certificate Authority");?></td>
- <td width="78%" class="vtable">
- <select name='caref' id='caref' class="formselect" onchange='internalca_change()'>
- <?php
- foreach ($a_ca as $ca):
- if (!$ca['prv']) {
- continue;
- }
- $selected = "";
- if ($pconfig['caref'] == $ca['refid']) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$ca['refid'];?>"<?=$selected;?>><?=htmlspecialchars($ca['descr']);?></option>
- <?php
- endforeach;
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Key length");?></td>
- <td width="78%" class="vtable">
- <select name='keylen' id='keylen' class="formselect">
- <?php
- foreach ($ca_keylens as $len):
- $selected = "";
- if ($pconfig['keylen'] == $len) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$len;?>"<?=$selected;?>><?=$len;?></option>
- <?php
- endforeach;
- ?>
- </select>
- <?=gettext("bits");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Digest Algorithm");?></td>
- <td width="78%" class="vtable">
- <select name='digest_alg' id='digest_alg' class="formselect">
- <?php
- foreach ($openssl_digest_algs as $digest_alg):
- $selected = "";
- if ($pconfig['digest_alg'] == $digest_alg) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$digest_alg;?>"<?=$selected;?>><?=strtoupper($digest_alg);?></option>
- <?php
- endforeach;
- ?>
- </select>
- <br /><?= gettext("NOTE: It is recommended to use an algorithm stronger than SHA1 when possible.") ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Lifetime");?></td>
- <td width="78%" class="vtable">
- <input name="lifetime" type="text" class="formfld unknown" id="lifetime" size="5" value="<?=htmlspecialchars($pconfig['lifetime']);?>"/>
- <?=gettext("days");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Distinguished name");?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="2" summary="name">
- <tr>
- <td align="right"><?=gettext("Country Code");?> : &nbsp;</td>
- <td align="left">
- <select name='dn_country' class="formselect">
- <?php
- foreach ($dn_cc as $cc) {
- $selected = "";
- if ($pconfig['dn_country'] == $cc) {
- $selected = " selected=\"selected\"";
- }
- print "<option value=\"$cc\"$selected>$cc</option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("State or Province");?> : &nbsp;</td>
- <td align="left">
- <input name="dn_state" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['dn_state']);?>"/>
- &nbsp;
- <em><?=gettext("ex:");?></em>
- &nbsp;
- <?=gettext("Texas");?>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("City");?> : &nbsp;</td>
- <td align="left">
- <input name="dn_city" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['dn_city']);?>"/>
- &nbsp;
- <em><?=gettext("ex:");?></em>
- &nbsp;
- <?=gettext("Austin");?>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("Organization");?> : &nbsp;</td>
- <td align="left">
- <input name="dn_organization" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['dn_organization']);?>"/>
- &nbsp;
- <em><?=gettext("ex:");?></em>
- &nbsp;
- <?=gettext("My Company Inc.");?>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("Email Address");?> : &nbsp;</td>
- <td align="left">
- <input name="dn_email" type="text" class="formfld unknown" size="25" value="<?=htmlspecialchars($pconfig['dn_email']);?>"/>
- &nbsp;
- <em><?=gettext("ex:");?></em>
- &nbsp;
- <?=gettext("admin@mycompany.com");?>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("Common Name");?> : &nbsp;</td>
- <td align="left">
- <input name="dn_commonname" type="text" class="formfld unknown" size="25" value="<?=htmlspecialchars($pconfig['dn_commonname']);?>"/>
- &nbsp;
- <em><?=gettext("ex:");?></em>
- &nbsp;
- <?=gettext("internal-ca");?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="save">
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submit" name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <?php if (isset($id) && $a_ca[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif;?>
- </td>
- </tr>
- </table>
- </form>
-
- <?php else: ?>
-
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="">
- <tr>
- <td width="20%" class="listhdrr"><?=gettext("Name");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Internal");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Issuer");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Certificates");?></td>
- <td width="40%" class="listhdrr"><?=gettext("Distinguished Name");?></td>
- <td width="10%" class="list"></td>
- </tr>
- <?php
- $i = 0;
- foreach ($a_ca as $ca):
- $name = htmlspecialchars($ca['descr']);
- $subj = cert_get_subject($ca['crt']);
- $issuer = cert_get_issuer($ca['crt']);
- list($startdate, $enddate) = cert_get_dates($ca['crt']);
- if ($subj == $issuer) {
- $issuer_name = "<em>" . gettext("self-signed") . "</em>";
- } else {
- $issuer_name = "<em>" . gettext("external") . "</em>";
- }
- $subj = htmlspecialchars($subj);
- $issuer = htmlspecialchars($issuer);
- $certcount = 0;
-
- $issuer_ca = lookup_ca($ca['caref']);
- if ($issuer_ca) {
- $issuer_name = htmlspecialchars($issuer_ca['descr']);
- }
-
- // TODO : Need gray certificate icon
-
- if ($ca['prv']) {
- $caimg = "/themes/{$g['theme']}/images/icons/icon_frmfld_cert.png";
- $internal = "YES";
-
- } else {
- $caimg = "/themes/{$g['theme']}/images/icons/icon_frmfld_cert.png";
- $internal = "NO";
- }
- foreach ($a_cert as $cert) {
- if ($cert['caref'] == $ca['refid']) {
- $certcount++;
- }
- }
- foreach ($a_ca as $cert) {
- if ($cert['caref'] == $ca['refid']) {
- $certcount++;
- }
- }
- ?>
- <tr>
- <td class="listlr">
- <table border="0" cellpadding="0" cellspacing="0" summary="icon">
- <tr>
- <td align="left" valign="middle">
- <img src="<?=$caimg;?>" alt="CA" title="CA" border="0" height="16" width="16" />
- </td>
- <td align="left" valign="middle">
- <?=$name;?>
- </td>
- </tr>
- </table>
- </td>
- <td class="listr"><?=$internal;?>&nbsp;</td>
- <td class="listr"><?=$issuer_name;?>&nbsp;</td>
- <td class="listr"><?=$certcount;?>&nbsp;</td>
- <td class="listr"><?=$subj;?><br />
- <table width="100%" style="font-size: 9px" summary="valid">
- <tr>
- <td width="10%">&nbsp;</td>
- <td width="20%"><?=gettext("Valid From")?>:</td>
- <td width="70%"><?= $startdate ?></td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td><?=gettext("Valid Until")?>:</td>
- <td><?= $enddate ?></td>
- </tr>
- </table>
- </td>
- <td valign="middle" class="list nowrap">
- <a href="system_camanager.php?act=edit&amp;id=<?=$i;?>">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("edit CA");?>" alt="<?=gettext("edit CA");?>" width="17" height="17" border="0" />
- </a>
- <a href="system_camanager.php?act=exp&amp;id=<?=$i;?>">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_down.gif" title="<?=gettext("export CA cert");?>" alt="<?=gettext("export CA cert");?>" width="17" height="17" border="0" />
- </a>
- <?php if ($ca['prv']): ?>
- <a href="system_camanager.php?act=expkey&amp;id=<?=$i;?>">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_down.gif" title="<?=gettext("export CA private key");?>" alt="<?=gettext("export CA private key");?>" width="17" height="17" border="0" />
- </a>
- <?php endif; ?>
- <a href="system_camanager.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this Certificate Authority and its CRLs, and unreference any associated certificates?");?>')">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete ca");?>" alt="<?=gettext("delete ca"); ?>" width="17" height="17" border="0" />
- </a>
- </td>
- </tr>
- <?php
- $i++;
- endforeach;
- ?>
- <tr>
- <td class="list" colspan="5"></td>
- <td class="list">
- <a href="system_camanager.php?act=new">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("add or import ca");?>" alt="<?=gettext("add ca");?>" width="17" height="17" border="0" />
- </a>
- </td>
- </tr>
- <tr>
- <td colspan="5">
- <p>
- <?=gettext("Additional trusted Certificate Authorities can be added here.");?>
- </p>
- </td>
- </tr>
- </table>
-
- <?php endif; ?>
-
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc");?>
-<script type="text/javascript">
-//<![CDATA[
-
-method_change();
-
-//]]>
-</script>
-
-</body>
-</html>
diff --git a/usr/local/www/system_certmanager.php b/usr/local/www/system_certmanager.php
deleted file mode 100644
index cd553e6..0000000
--- a/usr/local/www/system_certmanager.php
+++ /dev/null
@@ -1,1349 +0,0 @@
-<?php
-/*
- system_certmanager.php
-
- Copyright (C) 2008 Shrew Soft Inc.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: certificate_manager
-*/
-
-##|+PRIV
-##|*IDENT=page-system-certmanager
-##|*NAME=System: Certificate Manager
-##|*DESCR=Allow access to the 'System: Certificate Manager' page.
-##|*MATCH=system_certmanager.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("certs.inc");
-
-$cert_methods = array(
- "import" => gettext("Import an existing Certificate"),
- "internal" => gettext("Create an internal Certificate"),
- "external" => gettext("Create a Certificate Signing Request"),
-);
-
-$cert_keylens = array("512", "1024", "2048", "4096");
-$cert_types = array(
- "ca" => "Certificate Authority",
- "server" => "Server Certificate",
- "user" => "User Certificate");
-
-$altname_types = array("DNS", "IP", "email", "URI");
-$openssl_digest_algs = array("sha1", "sha224", "sha256", "sha384", "sha512");
-
-$pgtitle = array(gettext("System"), gettext("Certificate Manager"));
-
-if (is_numericint($_GET['userid'])) {
- $userid = $_GET['userid'];
-}
-if (isset($_POST['userid']) && is_numericint($_POST['userid'])) {
- $userid = $_POST['userid'];
-}
-
-if (isset($userid)) {
- $cert_methods["existing"] = gettext("Choose an existing certificate");
- if (!is_array($config['system']['user'])) {
- $config['system']['user'] = array();
- }
- $a_user =& $config['system']['user'];
-}
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (!is_array($config['ca'])) {
- $config['ca'] = array();
-}
-
-$a_ca =& $config['ca'];
-
-if (!is_array($config['cert'])) {
- $config['cert'] = array();
-}
-
-$a_cert =& $config['cert'];
-
-$internal_ca_count = 0;
-foreach ($a_ca as $ca) {
- if ($ca['prv']) {
- $internal_ca_count++;
- }
-}
-
-$act = $_GET['act'];
-if ($_POST['act']) {
- $act = $_POST['act'];
-}
-
-if ($act == "del") {
-
- if (!isset($a_cert[$id])) {
- pfSenseHeader("system_certmanager.php");
- exit;
- }
-
- unset($a_cert[$id]);
- write_config();
- $savemsg = sprintf(gettext("Certificate %s successfully deleted"), htmlspecialchars($a_cert[$id]['descr'])) . "<br />";
- pfSenseHeader("system_certmanager.php");
- exit;
-}
-
-if ($act == "new") {
- $pconfig['method'] = $_GET['method'];
- $pconfig['keylen'] = "2048";
- $pconfig['digest_alg'] = "sha256";
- $pconfig['csr_keylen'] = "2048";
- $pconfig['csr_digest_alg'] = "sha256";
- $pconfig['type'] = "user";
- $pconfig['lifetime'] = "3650";
-}
-
-if ($act == "exp") {
-
- if (!$a_cert[$id]) {
- pfSenseHeader("system_certmanager.php");
- exit;
- }
-
- $exp_name = urlencode("{$a_cert[$id]['descr']}.crt");
- $exp_data = base64_decode($a_cert[$id]['crt']);
- $exp_size = strlen($exp_data);
-
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename={$exp_name}");
- header("Content-Length: $exp_size");
- echo $exp_data;
- exit;
-}
-
-if ($act == "key") {
-
- if (!$a_cert[$id]) {
- pfSenseHeader("system_certmanager.php");
- exit;
- }
-
- $exp_name = urlencode("{$a_cert[$id]['descr']}.key");
- $exp_data = base64_decode($a_cert[$id]['prv']);
- $exp_size = strlen($exp_data);
-
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename={$exp_name}");
- header("Content-Length: $exp_size");
- echo $exp_data;
- exit;
-}
-
-if ($act == "p12") {
- if (!$a_cert[$id]) {
- pfSenseHeader("system_certmanager.php");
- exit;
- }
-
- $exp_name = urlencode("{$a_cert[$id]['descr']}.p12");
- $args = array();
- $args['friendly_name'] = $a_cert[$id]['descr'];
-
- $ca = lookup_ca($a_cert[$id]['caref']);
- if ($ca) {
- $args['extracerts'] = openssl_x509_read(base64_decode($ca['crt']));
- }
-
- $res_crt = openssl_x509_read(base64_decode($a_cert[$id]['crt']));
- $res_key = openssl_pkey_get_private(array(0 => base64_decode($a_cert[$id]['prv']) , 1 => ""));
-
- $exp_data = "";
- openssl_pkcs12_export($res_crt, $exp_data, $res_key, null, $args);
- $exp_size = strlen($exp_data);
-
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename={$exp_name}");
- header("Content-Length: $exp_size");
- echo $exp_data;
- exit;
-}
-
-if ($act == "csr") {
-
- if (!$a_cert[$id]) {
- pfSenseHeader("system_certmanager.php");
- exit;
- }
-
- $pconfig['descr'] = $a_cert[$id]['descr'];
- $pconfig['csr'] = base64_decode($a_cert[$id]['csr']);
-}
-
-if ($_POST) {
- if ($_POST['save'] == gettext("Save")) {
- $input_errors = array();
- $pconfig = $_POST;
-
- /* input validation */
- if ($pconfig['method'] == "import") {
- $reqdfields = explode(" ",
- "descr cert key");
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Certificate data"),
- gettext("Key data"));
- if ($_POST['cert'] && (!strstr($_POST['cert'], "BEGIN CERTIFICATE") || !strstr($_POST['cert'], "END CERTIFICATE"))) {
- $input_errors[] = gettext("This certificate does not appear to be valid.");
- }
- }
-
- if ($pconfig['method'] == "internal") {
- $reqdfields = explode(" ",
- "descr caref keylen type lifetime dn_country dn_state dn_city ".
- "dn_organization dn_email dn_commonname");
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Certificate authority"),
- gettext("Key length"),
- gettext("Certificate Type"),
- gettext("Lifetime"),
- gettext("Distinguished name Country Code"),
- gettext("Distinguished name State or Province"),
- gettext("Distinguished name City"),
- gettext("Distinguished name Organization"),
- gettext("Distinguished name Email Address"),
- gettext("Distinguished name Common Name"));
- }
-
- if ($pconfig['method'] == "external") {
- $reqdfields = explode(" ",
- "descr csr_keylen csr_dn_country csr_dn_state csr_dn_city ".
- "csr_dn_organization csr_dn_email csr_dn_commonname");
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Key length"),
- gettext("Distinguished name Country Code"),
- gettext("Distinguished name State or Province"),
- gettext("Distinguished name City"),
- gettext("Distinguished name Organization"),
- gettext("Distinguished name Email Address"),
- gettext("Distinguished name Common Name"));
- }
-
- if ($pconfig['method'] == "existing") {
- $reqdfields = array("certref");
- $reqdfieldsn = array(gettext("Existing Certificate Choice"));
- }
-
- $altnames = array();
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- if ($pconfig['method'] != "import" && $pconfig['method'] != "existing") {
- /* subjectAltNames */
- foreach ($_POST as $key => $value) {
- $entry = '';
- if (!substr_compare('altname_type', $key, 0, 12)) {
- $entry = substr($key, 12);
- $field = 'type';
- }
- elseif (!substr_compare('altname_value', $key, 0, 13)) {
- $entry = substr($key, 13);
- $field = 'value';
- }
- if (ctype_digit($entry)) {
- $altnames[$entry][$field] = $value;
- }
- }
- $pconfig['altnames']['item'] = $altnames;
-
- /* Input validation for subjectAltNames */
- foreach ($altnames as $idx => $altname) {
- switch ($altname['type']) {
- case "DNS":
- if (!is_hostname($altname['value'])) {
- array_push($input_errors, "DNS subjectAltName values must be valid hostnames or FQDNs");
- }
- break;
- case "IP":
- if (!is_ipaddr($altname['value'])) {
- array_push($input_errors, "IP subjectAltName values must be valid IP Addresses");
- }
- break;
- case "email":
- if (empty($altname['value'])) {
- array_push($input_errors, "You must provide an e-mail address for this type of subjectAltName");
- }
- if (preg_match("/[\!\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $altname['value'])) {
- array_push($input_errors, "The e-mail provided in a subjectAltName contains invalid characters.");
- }
- break;
- case "URI":
- /* Close enough? */
- if (!is_URL($altname['value'])) {
- $input_errors[] = "URI subjectAltName types must be a valid URI";
- }
- break;
- default:
- $input_errors[] = "Unrecognized subjectAltName type.";
- }
- }
-
- /* Make sure we do not have invalid characters in the fields for the certificate */
-
- if (preg_match("/[\?\>\<\&\/\\\"\']/", $_POST['descr'])) {
- array_push($input_errors, "The field 'Descriptive Name' contains invalid characters.");
- }
-
- for ($i = 0; $i < count($reqdfields); $i++) {
- if (preg_match('/email/', $reqdfields[$i])) { /* dn_email or csr_dn_name */
- if (preg_match("/[\!\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST[$reqdfields[$i]])) {
- array_push($input_errors, "The field 'Distinguished name Email Address' contains invalid characters.");
- }
- } else if (preg_match('/commonname/', $reqdfields[$i])) { /* dn_commonname or csr_dn_commonname */
- if (preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST[$reqdfields[$i]])) {
- array_push($input_errors, "The field 'Distinguished name Common Name' contains invalid characters.");
- }
- } else if (($reqdfields[$i] != "descr") && preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\.\"\']/", $_POST[$reqdfields[$i]])) {
- array_push($input_errors, "The field '" . $reqdfieldsn[$i] . "' contains invalid characters.");
- }
- }
-
- if (($pconfig['method'] != "external") && isset($_POST["keylen"]) && !in_array($_POST["keylen"], $cert_keylens)) {
- array_push($input_errors, gettext("Please select a valid Key Length."));
- }
- if (($pconfig['method'] != "external") && !in_array($_POST["digest_alg"], $openssl_digest_algs)) {
- array_push($input_errors, gettext("Please select a valid Digest Algorithm."));
- }
-
- if (($pconfig['method'] == "external") && isset($_POST["csr_keylen"]) && !in_array($_POST["csr_keylen"], $cert_keylens)) {
- array_push($input_errors, gettext("Please select a valid Key Length."));
- }
- if (($pconfig['method'] == "external") && !in_array($_POST["csr_digest_alg"], $openssl_digest_algs)) {
- array_push($input_errors, gettext("Please select a valid Digest Algorithm."));
- }
- }
-
- /* if this is an AJAX caller then handle via JSON */
- if (isAjax() && is_array($input_errors)) {
- input_errors2Ajax($input_errors);
- exit;
- }
-
- /* save modifications */
- if (!$input_errors) {
-
- if ($pconfig['method'] == "existing") {
- $cert = lookup_cert($pconfig['certref']);
- if ($cert && $a_user) {
- $a_user[$userid]['cert'][] = $cert['refid'];
- }
- } else {
- $cert = array();
- $cert['refid'] = uniqid();
- if (isset($id) && $a_cert[$id]) {
- $cert = $a_cert[$id];
- }
-
- $cert['descr'] = $pconfig['descr'];
-
- $old_err_level = error_reporting(0); /* otherwise openssl_ functions throw warnings directly to a page screwing menu tab */
-
- if ($pconfig['method'] == "import") {
- cert_import($cert, $pconfig['cert'], $pconfig['key']);
- }
-
- if ($pconfig['method'] == "internal") {
- $dn = array(
- 'countryName' => $pconfig['dn_country'],
- 'stateOrProvinceName' => $pconfig['dn_state'],
- 'localityName' => $pconfig['dn_city'],
- 'organizationName' => $pconfig['dn_organization'],
- 'emailAddress' => $pconfig['dn_email'],
- 'commonName' => $pconfig['dn_commonname']);
- if (count($altnames)) {
- $altnames_tmp = "";
- foreach ($altnames as $altname) {
- $altnames_tmp[] = "{$altname['type']}:{$altname['value']}";
- }
- $dn['subjectAltName'] = implode(",", $altnames_tmp);
- }
- if (!cert_create($cert, $pconfig['caref'], $pconfig['keylen'],
- $pconfig['lifetime'], $dn, $pconfig['type'], $pconfig['digest_alg'])) {
- while ($ssl_err = openssl_error_string()) {
- $input_errors = array();
- array_push($input_errors, "openssl library returns: " . $ssl_err);
- }
- }
- }
-
- if ($pconfig['method'] == "external") {
- $dn = array(
- 'countryName' => $pconfig['csr_dn_country'],
- 'stateOrProvinceName' => $pconfig['csr_dn_state'],
- 'localityName' => $pconfig['csr_dn_city'],
- 'organizationName' => $pconfig['csr_dn_organization'],
- 'emailAddress' => $pconfig['csr_dn_email'],
- 'commonName' => $pconfig['csr_dn_commonname']);
- if (count($altnames)) {
- $altnames_tmp = "";
- foreach ($altnames as $altname) {
- $altnames_tmp[] = "{$altname['type']}:{$altname['value']}";
- }
- $dn['subjectAltName'] = implode(",", $altnames_tmp);
- }
- if (!csr_generate($cert, $pconfig['csr_keylen'], $dn, $pconfig['csr_digest_alg'])) {
- while ($ssl_err = openssl_error_string()) {
- $input_errors = array();
- array_push($input_errors, "openssl library returns: " . $ssl_err);
- }
- }
- }
- error_reporting($old_err_level);
-
- if (isset($id) && $a_cert[$id]) {
- $a_cert[$id] = $cert;
- } else {
- $a_cert[] = $cert;
- }
- if (isset($a_user) && isset($userid)) {
- $a_user[$userid]['cert'][] = $cert['refid'];
- }
- }
-
- if (!$input_errors) {
- write_config();
- }
-
- if ($userid) {
- post_redirect("system_usermanager.php", array('act' => 'edit', 'userid' => $userid));
- exit;
- }
- }
- }
-
- if ($_POST['save'] == gettext("Update")) {
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "descr cert");
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Final Certificate data"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (preg_match("/[\?\>\<\&\/\\\"\']/", $_POST['descr'])) {
- array_push($input_errors, "The field 'Descriptive Name' contains invalid characters.");
- }
-
-// old way
- /* make sure this csr and certificate subjects match */
-// $subj_csr = csr_get_subject($pconfig['csr'], false);
-// $subj_cert = cert_get_subject($pconfig['cert'], false);
-//
-// if (!isset($_POST['ignoresubjectmismatch']) && !($_POST['ignoresubjectmismatch'] == "yes")) {
-// if (strcmp($subj_csr, $subj_cert)) {
-// $input_errors[] = sprintf(gettext("The certificate subject '%s' does not match the signing request subject."), $subj_cert);
-// $subject_mismatch = true;
-// }
-// }
- $mod_csr = csr_get_modulus($pconfig['csr'], false);
- $mod_cert = cert_get_modulus($pconfig['cert'], false);
-
- if (strcmp($mod_csr, $mod_cert)) {
- // simply: if the moduli don't match, then the private key and public key won't match
- $input_errors[] = sprintf(gettext("The certificate modulus does not match the signing request modulus."), $subj_cert);
- $subject_mismatch = true;
- }
-
- /* if this is an AJAX caller then handle via JSON */
- if (isAjax() && is_array($input_errors)) {
- input_errors2Ajax($input_errors);
- exit;
- }
-
- /* save modifications */
- if (!$input_errors) {
-
- $cert = $a_cert[$id];
-
- $cert['descr'] = $pconfig['descr'];
-
- csr_complete($cert, $pconfig['cert']);
-
- $a_cert[$id] = $cert;
-
- write_config();
-
- pfSenseHeader("system_certmanager.php");
- }
- }
-}
-
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-
-function method_change() {
-
-<?php
- if ($internal_ca_count) {
- $submit_style = "";
- } else {
- $submit_style = "none";
- }
-?>
-
- method = document.iform.method.selectedIndex;
-
- switch (method) {
- case 0:
- document.getElementById("import").style.display="";
- document.getElementById("internal").style.display="none";
- document.getElementById("external").style.display="none";
- document.getElementById("existing").style.display="none";
- document.getElementById("descriptivename").style.display="";
- document.getElementById("submit").style.display="";
- break;
- case 1:
- document.getElementById("import").style.display="none";
- document.getElementById("internal").style.display="";
- document.getElementById("external").style.display="none";
- document.getElementById("existing").style.display="none";
- document.getElementById("descriptivename").style.display="";
- document.getElementById("submit").style.display="<?=$submit_style;?>";
- break;
- case 2:
- document.getElementById("import").style.display="none";
- document.getElementById("internal").style.display="none";
- document.getElementById("external").style.display="";
- document.getElementById("existing").style.display="none";
- document.getElementById("descriptivename").style.display="";
- document.getElementById("submit").style.display="";
- break;
- case 3:
- document.getElementById("import").style.display="none";
- document.getElementById("internal").style.display="none";
- document.getElementById("external").style.display="none";
- document.getElementById("existing").style.display="";
- document.getElementById("descriptivename").style.display="none";
- document.getElementById("submit").style.display="";
- break;
- }
-}
-
-<?php if ($internal_ca_count): ?>
-function internalca_change() {
-
- index = document.iform.caref.selectedIndex;
- caref = document.iform.caref[index].value;
-
- switch (caref) {
-<?php
- foreach ($a_ca as $ca):
- if (!$ca['prv']) {
- continue;
- }
- $subject = cert_get_subject_array($ca['crt']);
-?>
- case "<?=$ca['refid'];?>":
- document.iform.dn_country.value = "<?=$subject[0]['v'];?>";
- document.iform.dn_state.value = "<?=$subject[1]['v'];?>";
- document.iform.dn_city.value = "<?=$subject[2]['v'];?>";
- document.iform.dn_organization.value = "<?=$subject[3]['v'];?>";
- document.iform.dn_email.value = "<?=$subject[4]['v'];?>";
- break;
-<?php
- endforeach;
-?>
- }
-}
-<?php endif; ?>
-
-//]]>
-</script>
-<script type="text/javascript" src="/javascript/row_helper_dynamic.js"></script>
-<input type='hidden' name='altname_value_type' value='select' />
-<input type='hidden' name='altname_type_type' value='textbox' />
-<script type="text/javascript">
-//<![CDATA[
- rowname[0] = "altname_type";
- rowtype[0] = "textbox";
- rowsize[0] = "10";
- rowname[1] = "altname_value";
- rowtype[1] = "textbox";
- rowsize[1] = "30";
-//]]>
-</script>
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
-
- // Load valid country codes
- $dn_cc = array();
- if (file_exists("/etc/ca_countries")) {
- $dn_cc_file=file("/etc/ca_countries");
- foreach ($dn_cc_file as $line) {
- if (preg_match('/^(\S*)\s(.*)$/', $line, $matches)) {
- array_push($dn_cc, $matches[1]);
- }
- }
- }
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="cert manager">
- <tr>
- <td class="tabnavtbl">
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("CAs"), false, "system_camanager.php");
- $tab_array[] = array(gettext("Certificates"), true, "system_certmanager.php");
- $tab_array[] = array(gettext("Certificate Revocation"), false, "system_crlmanager.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
-
- <?php if ($act == "new" || (($_POST['save'] == gettext("Save")) && $input_errors)): ?>
-
- <form action="system_certmanager.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <?php if (!isset($id)): ?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Method");?></td>
- <td width="78%" class="vtable">
- <select name='method' id='method' class="formselect" onchange='method_change()'>
- <?php
- foreach ($cert_methods as $method => $desc):
- $selected = "";
- if ($pconfig['method'] == $method) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$method;?>"<?=$selected;?>><?=$desc;?></option>
- <?php
- endforeach;
- ?>
- </select>
- </td>
- </tr>
- <?php endif; ?>
- <tr id="descriptivename">
- <?php
- if ($a_user && empty($pconfig['descr'])) {
- $pconfig['descr'] = $a_user[$userid]['name'];
- }
- ?>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Descriptive name");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="20" value="<?=htmlspecialchars($pconfig['descr']);?>"/>
- </td>
- </tr>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" id="import" summary="import">
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Import Certificate");?></td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Certificate data");?></td>
- <td width="78%" class="vtable">
- <textarea name="cert" id="cert" cols="65" rows="7" class="formfld_cert"><?=htmlspecialchars($pconfig['cert']);?></textarea>
- <br />
- <?=gettext("Paste a certificate in X.509 PEM format here.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Private key data");?></td>
- <td width="78%" class="vtable">
- <textarea name="key" id="key" cols="65" rows="7" class="formfld_cert"><?=htmlspecialchars($pconfig['key']);?></textarea>
- <br />
- <?=gettext("Paste a private key in X.509 PEM format here.");?>
- </td>
- </tr>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" id="internal" summary="internal">
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Internal Certificate");?></td>
- </tr>
-
- <?php if (!$internal_ca_count): ?>
-
- <tr>
- <td colspan="2" align="center" class="vtable">
- <?=gettext("No internal Certificate Authorities have been defined. You must");?>
- <a href="system_camanager.php?act=new&amp;method=internal"><?=gettext("create");?></a>
- <?=gettext("an internal CA before creating an internal certificate.");?>
- </td>
- </tr>
-
- <?php else: ?>
-
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Certificate authority");?></td>
- <td width="78%" class="vtable">
- <select name='caref' id='caref' class="formselect" onchange='internalca_change()'>
- <?php
- foreach ($a_ca as $ca):
- if (!$ca['prv']) {
- continue;
- }
- $selected = "";
- if ($pconfig['caref'] == $ca['refid']) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$ca['refid'];?>"<?=$selected;?>><?=htmlspecialchars($ca['descr']);?></option>
- <?php
- endforeach;
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Key length");?></td>
- <td width="78%" class="vtable">
- <select name='keylen' class="formselect">
- <?php
- foreach ($cert_keylens as $len):
- $selected = "";
- if ($pconfig['keylen'] == $len) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$len;?>"<?=$selected;?>><?=$len;?></option>
- <?php
- endforeach;
- ?>
- </select>
- <?=gettext("bits");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Digest Algorithm");?></td>
- <td width="78%" class="vtable">
- <select name='digest_alg' id='digest_alg' class="formselect">
- <?php
- foreach ($openssl_digest_algs as $digest_alg):
- $selected = "";
- if ($pconfig['digest_alg'] == $digest_alg) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$digest_alg;?>"<?=$selected;?>><?=strtoupper($digest_alg);?></option>
- <?php
- endforeach;
- ?>
- </select>
- <br /><?= gettext("NOTE: It is recommended to use an algorithm stronger than SHA1 when possible.") ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Certificate Type");?></td>
- <td width="78%" class="vtable">
- <select name='type' class="formselect">
- <?php
- foreach ($cert_types as $ct => $ctdesc):
- $selected = "";
- if ($pconfig['type'] == $ct) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$ct;?>"<?=$selected;?>><?=$ctdesc;?></option>
- <?php
- endforeach;
- ?>
- </select>
- <br />
- <?=gettext("Type of certificate to generate. Used for placing restrictions on the usage of the generated certificate.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Lifetime");?></td>
- <td width="78%" class="vtable">
- <input name="lifetime" type="text" class="formfld unknown" id="lifetime" size="5" value="<?=htmlspecialchars($pconfig['lifetime']);?>"/>
- <?=gettext("days");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Distinguished name");?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="2" summary="name">
- <tr>
- <td align="right"><?=gettext("Country Code");?> : &nbsp;</td>
- <td align="left">
- <input name="dn_country" type="text" class="formfld unknown" maxlength="2" size="2" value="<?=htmlspecialchars($pconfig['dn_country']);?>"/>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("State or Province");?> : &nbsp;</td>
- <td align="left">
- <input name="dn_state" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['dn_state']);?>"/>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("City");?> : &nbsp;</td>
- <td align="left">
- <input name="dn_city" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['dn_city']);?>"/>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("Organization");?> : &nbsp;</td>
- <td align="left">
- <input name="dn_organization" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['dn_organization']);?>"/>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("Email Address");?> : &nbsp;</td>
- <td align="left">
- <input name="dn_email" type="text" class="formfld unknown" size="25" value="<?=htmlspecialchars($pconfig['dn_email']);?>"/>
- &nbsp;
- <em>ex:</em>
- &nbsp;
- <?=gettext("webadmin@mycompany.com");?>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("Common Name");?> : &nbsp;</td>
- <td align="left">
- <?php
- if ($a_user && empty($pconfig['dn_commonname'])) {
- $pconfig['dn_commonname'] = $a_user[$userid]['name'];
- }
- ?>
- <input name="dn_commonname" type="text" class="formfld unknown" size="25" value="<?=htmlspecialchars($pconfig['dn_commonname']);?>"/>
- &nbsp;
- <em>ex:</em>
- &nbsp;
- <?=gettext("www.example.com");?>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("Alternative Names");?> : &nbsp;</td>
- <td align="left">
- <table id="altNametable">
- <thead>
- <tr>
- <th><div id="onecolumn"><?=gettext("Type");?></div></th>
- <th><div id="twocolumn"><?=gettext("Value");?></div></th>
- </tr>
- </thead>
- <tbody>
- <?php
- $counter = 0;
- if ($pconfig['altnames']['item']):
- foreach ($pconfig['altnames']['item'] as $item):
- $type = $item['type'];
- $value = $item['value'];
- ?>
- <tr>
- <td>
- <input autocomplete="off" name="altname_type<?php echo $counter; ?>" type="text" class="formfld unknown" id="altname_type<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($type);?>" />
- </td>
- <td>
- <input autocomplete="off" name="altname_value<?php echo $counter; ?>" type="text" class="formfld unknown" id="altname_value<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($value);?>" />
- </td>
- <td>
- <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="" title="<?=gettext("remove this entry"); ?>" /></a>
- </td>
- </tr>
- <?php
- $counter++;
- endforeach;
- endif;
- ?>
- <tr><td>&nbsp;</td></tr>
- </tbody>
- </table>
- <a onclick="javascript:addRowTo('altNametable', 'formfldalias'); return false;" href="#">
- <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
- </a>
- <script type="text/javascript">
- //<![CDATA[
- field_counter_js = 3;
- rows = 1;
- totalrows = <?php echo $counter; ?>;
- loaded = <?php echo $counter; ?>;
- //]]>
- </script>
- <br />NOTE: Type must be one of DNS (FQDN or Hostname), IP (IP address), URI, or email.
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
- <?php endif; ?>
-
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" id="external" summary="external">
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("External Signing Request");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Key length");?></td>
- <td width="78%" class="vtable">
- <select name='csr_keylen' class="formselect">
- <?php
- if (!isset($pconfig['csr_keylen']) && isset($pconfig['csr_keylen'])) {
- $pconfig['csr_keylen'] = $pconfig['csr_keylen'];
- }
- foreach ($cert_keylens as $len):
- $selected = "";
- if ($pconfig['csr_keylen'] == $len) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$len;?>"<?=$selected;?>><?=$len;?></option>
- <?php
- endforeach;
- ?>
- </select>
- bits
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Digest Algorithm");?></td>
- <td width="78%" class="vtable">
- <select name='csr_digest_alg' id='csr_digest_alg' class="formselect">
- <?php
- foreach ($openssl_digest_algs as $csr_digest_alg):
- $selected = "";
- if ($pconfig['csr_digest_alg'] == $csr_digest_alg) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$csr_digest_alg;?>"<?=$selected;?>><?=strtoupper($csr_digest_alg);?></option>
- <?php
- endforeach;
- ?>
- </select>
- <br /><?= gettext("NOTE: It is recommended to use an algorithm stronger than SHA1 when possible.") ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Distinguished name");?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="2" summary="name">
- <tr>
- <td align="right"><?=gettext("Country Code");?> : &nbsp;</td>
- <td align="left">
- <select name='csr_dn_country' class="formselect">
- <?php
- foreach ($dn_cc as $cc) {
- $selected = "";
- if ($pconfig['csr_dn_country'] == $cc) {
- $selected = " selected=\"selected\"";
- }
- print "<option value=\"$cc\"$selected>$cc</option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("State or Province");?> : &nbsp;</td>
- <td align="left">
- <input name="csr_dn_state" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['csr_dn_state']);?>" />
- &nbsp;
- <em>ex:</em>
- &nbsp;
- <?=gettext("Texas");?>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("City");?> : &nbsp;</td>
- <td align="left">
- <input name="csr_dn_city" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['csr_dn_city']);?>" />
- &nbsp;
- <em>ex:</em>
- &nbsp;
- <?=gettext("Austin");?>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("Organization");?> : &nbsp;</td>
- <td align="left">
- <input name="csr_dn_organization" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['csr_dn_organization']);?>" />
- &nbsp;
- <em>ex:</em>
- &nbsp;
- <?=gettext("My Company Inc.");?>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("Email Address");?> : &nbsp;</td>
- <td align="left">
- <input name="csr_dn_email" type="text" class="formfld unknown" size="25" value="<?=htmlspecialchars($pconfig['csr_dn_email']);?>"/>
- &nbsp;
- <em>ex:</em>
- &nbsp;
- <?=gettext("webadmin@mycompany.com");?>
- </td>
- </tr>
- <tr>
- <td align="right"><?=gettext("Common Name");?> : &nbsp;</td>
- <td align="left">
- <input name="csr_dn_commonname" type="text" class="formfld unknown" size="25" value="<?=htmlspecialchars($pconfig['csr_dn_commonname']);?>"/>
- &nbsp;
- <em>ex:</em>
- &nbsp;
- <?=gettext("www.example.com");?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" id="existing" summary="existing">
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Choose an Existing Certificate");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Existing Certificates");?></td>
- <td width="78%" class="vtable">
- <?php if (isset($userid) && $a_user): ?>
- <input name="userid" type="hidden" value="<?=htmlspecialchars($userid);?>" />
- <?php endif;?>
- <select name='certref' class="formselect">
- <?php
- foreach ($config['cert'] as $cert):
- $selected = "";
- $caname = "";
- $inuse = "";
- $revoked = "";
- if (isset($userid) && in_array($cert['refid'], $config['system']['user'][$userid]['cert'])) {
- continue;
- }
- $ca = lookup_ca($cert['caref']);
- if ($ca) {
- $caname = " (CA: " . htmlspecialchars($ca['descr']) . ")";
- }
- if ($pconfig['certref'] == $cert['refid']) {
- $selected = " selected=\"selected\"";
- }
- if (cert_in_use($cert['refid'])) {
- $inuse = " *In Use";
- }
- if (is_cert_revoked($cert)) {
- $revoked = " *Revoked";
- }
- ?>
- <option value="<?=$cert['refid'];?>"<?=$selected;?>><?=htmlspecialchars($cert['descr']) . $caname . $inuse . $revoked;?></option>
- <?php
- endforeach;
- ?>
- </select>
- </td>
- </tr>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="save">
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submit" name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <?php if (isset($id) && $a_cert[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif;?>
- </td>
- </tr>
- </table>
- </form>
-
- <?php elseif ($act == "csr" || (($_POST['save'] == gettext("Update")) && $input_errors)):?>
-
- <form action="system_certmanager.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="name">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Descriptive name");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="20" value="<?=htmlspecialchars($pconfig['descr']);?>"/>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Complete Signing Request");?></td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Signing request data");?></td>
- <td width="78%" class="vtable">
- <textarea name="csr" id="csr" cols="65" rows="7" class="formfld_cert" readonly="readonly"><?=htmlspecialchars($pconfig['csr']);?></textarea>
- <br />
- <?=gettext("Copy the certificate signing data from here and forward it to your certificate authority for signing.");?></td>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Final certificate data");?></td>
- <td width="78%" class="vtable">
- <textarea name="cert" id="cert" cols="65" rows="7" class="formfld_cert"><?=htmlspecialchars($pconfig['cert']);?></textarea>
- <br />
- <?=gettext("Paste the certificate received from your certificate authority here.");?></td>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <?php /* if (isset($subject_mismatch) && $subject_mismatch === true): ?>
- <input id="ignoresubjectmismatch" name="ignoresubjectmismatch" type="checkbox" class="formbtn" value="yes" />
- <label for="ignoresubjectmismatch"><strong><?=gettext("Ignore certificate subject mismatch"); ?></strong></label><br />
- <?php echo gettext("Warning: Using this option may create an " .
- "invalid certificate. Check this box to disable the request -> " .
- "response subject verification. ");
- ?><br />
- <?php endif; */ ?>
- <input id="submit" name="save" type="submit" class="formbtn" value="<?=gettext("Update");?>" />
- <?php if (isset($id) && $a_cert[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <input name="act" type="hidden" value="csr" />
- <?php endif;?>
- </td>
- </tr>
- </table>
- </form>
-
- <?php else:?>
-
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="details">
- <tr>
- <td width="15%" class="listhdrr"><?=gettext("Name");?></td>
- <td width="15%" class="listhdrr"><?=gettext("Issuer");?></td>
- <td width="40%" class="listhdrr"><?=gettext("Distinguished Name");?></td>
- <td width="10%" class="listhdrr"><?=gettext("In Use");?></td>
- <td width="10%" class="list"></td>
- </tr>
- <?php
- $pluginparams = array();
- $pluginparams['type'] = 'certificates';
- $pluginparams['event'] = 'used_certificates';
- $certificates_used_by_packages = pkg_call_plugins('plugin_certificates', $pluginparams);
- $i = 0;
- foreach ($a_cert as $cert):
- $name = htmlspecialchars($cert['descr']);
-
- if ($cert['crt']) {
- $subj = cert_get_subject($cert['crt']);
- $issuer = cert_get_issuer($cert['crt']);
- $purpose = cert_get_purpose($cert['crt']);
- list($startdate, $enddate) = cert_get_dates($cert['crt']);
- if ($subj == $issuer) {
- $caname = "<em>" . gettext("self-signed") . "</em>";
- } else {
- $caname = "<em>" . gettext("external"). "</em>";
- }
- $subj = htmlspecialchars($subj);
- }
-
- if ($cert['csr']) {
- $subj = htmlspecialchars(csr_get_subject($cert['csr']));
- $caname = "<em>" . gettext("external - signature pending") . "</em>";
- }
-
- $ca = lookup_ca($cert['caref']);
- if ($ca) {
- $caname = htmlspecialchars($ca['descr']);
- }
-
- if ($cert['prv']) {
- $certimg = "/themes/{$g['theme']}/images/icons/icon_frmfld_cert.png";
- } else {
- $certimg = "/themes/{$g['theme']}/images/icons/icon_frmfld_cert.png";
- }
- ?>
- <tr>
- <td class="listlr">
- <table border="0" cellpadding="0" cellspacing="0" summary="icon">
- <tr>
- <td align="left" valign="middle">
- <img src="<?=$certimg;?>" alt="CA" title="CA" border="0" height="16" width="16" />
- </td>
- <td align="left" valign="middle">
- <?=$name;?>
- </td>
- </tr>
- <tr><td>&nbsp;</td></tr>
- <?php if ($cert['type']): ?>
- <tr>
- <td colspan="2"><em><?php echo $cert_types[$cert['type']]; ?></em></td>
- </tr>
- <?php endif; ?>
- <?php if (is_array($purpose)): ?>
- <tr>
- <td colspan="2">
- CA: <?php echo $purpose['ca']; ?>,
- Server: <?php echo $purpose['server']; ?>
- </td>
- </tr>
- <?php endif; ?>
- </table>
- </td>
- <td class="listr"><?=$caname;?>&nbsp;</td>
- <td class="listr"><?=$subj;?>&nbsp;<br />
- <table width="100%" style="font-size: 9px" summary="valid">
- <tr>
- <td width="10%">&nbsp;</td>
- <td width="20%"><?=gettext("Valid From")?>:</td>
- <td width="70%"><?= $startdate ?></td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td><?=gettext("Valid Until")?>:</td>
- <td><?= $enddate ?></td>
- </tr>
- </table>
- </td>
- <td class="listr">
- <?php if (is_cert_revoked($cert)): ?>
- <b>Revoked</b><br />
- <?php endif; ?>
- <?php if (is_webgui_cert($cert['refid'])): ?>
- webConfigurator<br />
- <?php endif; ?>
- <?php if (is_user_cert($cert['refid'])): ?>
- User Cert<br />
- <?php endif; ?>
- <?php if (is_openvpn_server_cert($cert['refid'])): ?>
- OpenVPN Server<br />
- <?php endif; ?>
- <?php if (is_openvpn_client_cert($cert['refid'])): ?>
- OpenVPN Client<br />
- <?php endif; ?>
- <?php if (is_ipsec_cert($cert['refid'])): ?>
- IPsec Tunnel<br />
- <?php endif; ?>
- <?php if (is_captiveportal_cert($cert['refid'])): ?>
- Captive Portal<br />
- <?php endif; ?>
- <?
- $refid = $cert['refid'];
- if (is_array($certificates_used_by_packages)) {
- foreach ($certificates_used_by_packages as $name => $package) {
- if (isset($package['certificatelist'][$refid])) {
- $hint = "" ;
- if (is_array($package['certificatelist'][$refid])) {
- foreach ($package['certificatelist'][$refid] as $cert_used) {
- $hint = $hint . $cert_used['usedby']."\n";
- }
- }
- $count = count($package['certificatelist'][$refid]);
- echo "<div title='".htmlspecialchars($hint)."'>";
- echo htmlspecialchars($package['pkgname'])." ($count)<br />";
- echo "</div>";
- }
- }
- }
- ?>
- </td>
- <td valign="middle" class="list nowrap">
- <a href="system_certmanager.php?act=exp&amp;id=<?=$i;?>">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_down.gif" title="<?=gettext("export cert");?>" alt="<?=gettext("export ca");?>" width="17" height="17" border="0" />
- </a>
- <a href="system_certmanager.php?act=key&amp;id=<?=$i;?>">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_down.gif" title="<?=gettext("export key");?>" alt="<?=gettext("export ca");?>" width="17" height="17" border="0" />
- </a>
- <a href="system_certmanager.php?act=p12&amp;id=<?=$i;?>">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_down.gif" title="<?=gettext("export ca cert+user cert+user cert key in .p12 format");?>" alt="<?=gettext("export ca cert+user cert+user cert key in .p12 format");?>" width="17" height="17" border="0" />
- </a>
- <?php if (!cert_in_use($cert['refid'])): ?>
- <a href="system_certmanager.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this Certificate?");?>')">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete cert");?>" alt="<?=gettext("delete cert");?>" width="17" height="17" border="0" />
- </a>
- <?php endif; ?>
- <?php if ($cert['csr']): ?>
- &nbsp;
- <a href="system_certmanager.php?act=csr&amp;id=<?=$i;?>">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("update csr");?>" alt="<?=gettext("update csr");?>" width="17" height="17" border="0" />
- </a>
- <?php endif; ?>
- </td>
- </tr>
- <?php
- $i++;
- endforeach;
- ?>
- <tr>
- <td class="list" colspan="4"></td>
- <td class="list">
- <a href="system_certmanager.php?act=new">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("add or import certificate");?>" alt="<?=gettext("add certificate");?>" width="17" height="17" border="0" />
- </a>
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td colspan="3"><?=gettext("Note: You can only delete a certificate if it is not currently in use.");?></td>
- </tr>
- </table>
-
- <?php endif; ?>
-
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc");?>
-<script type="text/javascript">
-//<![CDATA[
-
-method_change();
-internalca_change();
-
-//]]>
-</script>
-
-</body>
-</html>
diff --git a/usr/local/www/system_crlmanager.php b/usr/local/www/system_crlmanager.php
deleted file mode 100644
index ff70e9b..0000000
--- a/usr/local/www/system_crlmanager.php
+++ /dev/null
@@ -1,722 +0,0 @@
-<?php
-/*
- system_crlmanager.php
-
- Copyright (C) 2010 Jim Pingle
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: certificate_manager
-*/
-
-##|+PRIV
-##|*IDENT=page-system-crlmanager
-##|*NAME=System: CRL Manager
-##|*DESCR=Allow access to the 'System: CRL Manager' page.
-##|*MATCH=system_crlmanager.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("certs.inc");
-require_once("openvpn.inc");
-require_once("vpn.inc");
-
-global $openssl_crl_status;
-
-$pgtitle = array(gettext("System"), gettext("Certificate Revocation List Manager"));
-
-$crl_methods = array(
- "internal" => gettext("Create an internal Certificate Revocation List"),
- "existing" => gettext("Import an existing Certificate Revocation List"));
-
-if (ctype_alnum($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && ctype_alnum($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (!is_array($config['ca'])) {
- $config['ca'] = array();
-}
-
-$a_ca =& $config['ca'];
-
-if (!is_array($config['cert'])) {
- $config['cert'] = array();
-}
-
-$a_cert =& $config['cert'];
-
-if (!is_array($config['crl'])) {
- $config['crl'] = array();
-}
-
-$a_crl =& $config['crl'];
-
-foreach ($a_crl as $cid => $acrl) {
- if (!isset($acrl['refid'])) {
- unset ($a_crl[$cid]);
- }
-}
-
-$act = $_GET['act'];
-if ($_POST['act']) {
- $act = $_POST['act'];
-}
-
-if (!empty($id)) {
- $thiscrl =& lookup_crl($id);
-}
-
-// If we were given an invalid crlref in the id, no sense in continuing as it would only cause errors.
-if (!$thiscrl && (($act != "") && ($act != "new"))) {
- pfSenseHeader("system_crlmanager.php");
- $act="";
- $savemsg = gettext("Invalid CRL reference.");
-}
-
-if ($act == "del") {
- $name = htmlspecialchars($thiscrl['descr']);
- if (crl_in_use($id)) {
- $savemsg = sprintf(gettext("Certificate Revocation List %s is in use and cannot be deleted"), $name) . "<br />";
- } else {
- foreach ($a_crl as $cid => $acrl) {
- if ($acrl['refid'] == $thiscrl['refid']) {
- unset($a_crl[$cid]);
- }
- }
- write_config("Deleted CRL {$name}.");
- $savemsg = sprintf(gettext("Certificate Revocation List %s successfully deleted"), $name) . "<br />";
- }
-}
-
-if ($act == "new") {
- $pconfig['method'] = $_GET['method'];
- $pconfig['caref'] = $_GET['caref'];
- $pconfig['lifetime'] = "9999";
- $pconfig['serial'] = "0";
-}
-
-if ($act == "exp") {
- crl_update($thiscrl);
- $exp_name = urlencode("{$thiscrl['descr']}.crl");
- $exp_data = base64_decode($thiscrl['text']);
- $exp_size = strlen($exp_data);
-
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename={$exp_name}");
- header("Content-Length: $exp_size");
- echo $exp_data;
- exit;
-}
-
-if ($act == "addcert") {
- if ($_POST) {
- unset($input_errors);
- $pconfig = $_POST;
-
- if (!$pconfig['crlref'] || !$pconfig['certref']) {
- pfSenseHeader("system_crlmanager.php");
- exit;
- }
-
- // certref, crlref
- $crl =& lookup_crl($pconfig['crlref']);
- $cert = lookup_cert($pconfig['certref']);
-
- if (!$crl['caref'] || !$cert['caref']) {
- $input_errors[] = gettext("Both the Certificate and CRL must be specified.");
- }
-
- if ($crl['caref'] != $cert['caref']) {
- $input_errors[] = gettext("CA mismatch between the Certificate and CRL. Unable to Revoke.");
- }
- if (!is_crl_internal($crl)) {
- $input_errors[] = gettext("Cannot revoke certificates for an imported/external CRL.");
- }
-
- if (!$input_errors) {
- $reason = (empty($pconfig['crlreason'])) ? OCSP_REVOKED_STATUS_UNSPECIFIED : $pconfig['crlreason'];
- cert_revoke($cert, $crl, $reason);
- // refresh IPsec and OpenVPN CRLs
- openvpn_refresh_crls();
- vpn_ipsec_configure();
- write_config("Revoked cert {$cert['descr']} in CRL {$crl['descr']}.");
- pfSenseHeader("system_crlmanager.php");
- exit;
- }
- }
-}
-
-if ($act == "delcert") {
- if (!is_array($thiscrl['cert'])) {
- pfSenseHeader("system_crlmanager.php");
- exit;
- }
- $found = false;
- foreach ($thiscrl['cert'] as $acert) {
- if ($acert['refid'] == $_GET['certref']) {
- $found = true;
- $thiscert = $acert;
- }
- }
- if (!$found) {
- pfSenseHeader("system_crlmanager.php");
- exit;
- }
- $certname = htmlspecialchars($thiscert['descr']);
- $crlname = htmlspecialchars($thiscrl['descr']);
- if (cert_unrevoke($thiscert, $thiscrl)) {
- $savemsg = sprintf(gettext("Deleted Certificate %s from CRL %s"), $certname, $crlname) . "<br />";
- // refresh IPsec and OpenVPN CRLs
- openvpn_refresh_crls();
- vpn_ipsec_configure();
- write_config(sprintf(gettext("Deleted Certificate %s from CRL %s"), $certname, $crlname));
- } else {
- $savemsg = sprintf(gettext("Failed to delete Certificate %s from CRL %s"), $certname, $crlname) . "<br />";
- }
- $act="edit";
-}
-
-if ($_POST) {
- $input_errors = array();
- $pconfig = $_POST;
-
- /* input validation */
- if (($pconfig['method'] == "existing") || ($act == "editimported")) {
- $reqdfields = explode(" ", "descr crltext");
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Certificate Revocation List data"));
- }
- if ($pconfig['method'] == "internal") {
- $reqdfields = explode(" ", "descr caref");
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Certificate Authority"));
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (preg_match("/[\?\>\<\&\/\\\"\']/", $pconfig['descr'])) {
- array_push($input_errors, "The field 'Descriptive Name' contains invalid characters.");
- }
-
- /* if this is an AJAX caller then handle via JSON */
- if (isAjax() && is_array($input_errors)) {
- input_errors2Ajax($input_errors);
- exit;
- }
-
- /* save modifications */
- if (!$input_errors) {
- $result = false;
-
- if ($thiscrl) {
- $crl =& $thiscrl;
- } else {
- $crl = array();
- $crl['refid'] = uniqid();
- }
-
- $crl['descr'] = $pconfig['descr'];
- if ($act != "editimported") {
- $crl['caref'] = $pconfig['caref'];
- $crl['method'] = $pconfig['method'];
- }
-
- if (($pconfig['method'] == "existing") || ($act == "editimported")) {
- $crl['text'] = base64_encode($pconfig['crltext']);
- }
-
- if ($pconfig['method'] == "internal") {
- $crl['serial'] = empty($pconfig['serial']) ? 9999 : $pconfig['serial'];
- $crl['lifetime'] = empty($pconfig['lifetime']) ? 9999 : $pconfig['lifetime'];
- $crl['cert'] = array();
- }
-
- if (!$thiscrl) {
- $a_crl[] = $crl;
- }
-
- write_config("Saved CRL {$crl['descr']}");
- // refresh IPsec and OpenVPN CRLs
- openvpn_refresh_crls();
- vpn_ipsec_configure();
- pfSenseHeader("system_crlmanager.php");
- }
-}
-
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-
-function method_change() {
-
- method = document.iform.method.value;
-
- switch (method) {
- case "internal":
- document.getElementById("existing").style.display="none";
- document.getElementById("internal").style.display="";
- break;
- case "existing":
- document.getElementById("existing").style.display="";
- document.getElementById("internal").style.display="none";
- break;
- }
-}
-
-//]]>
-</script>
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="CRL manager">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("CAs"), false, "system_camanager.php");
- $tab_array[] = array(gettext("Certificates"), false, "system_certmanager.php");
- $tab_array[] = array(gettext("Certificate Revocation"), true, "system_crlmanager.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
-
-<?php
- if ($act == "new" || $act == gettext("Save") || $input_errors):
-?>
-
- <form action="system_crlmanager.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <?php if (!isset($id)): ?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Method");?></td>
- <td width="78%" class="vtable">
- <select name='method' id='method' class="formselect" onchange='method_change()'>
- <?php
- $rowIndex = 0;
- foreach ($crl_methods as $method => $desc):
- if (($_GET['importonly'] == "yes") && ($method != "existing")) {
- continue;
- }
- $selected = "";
- if ($pconfig['method'] == $method) {
- $selected = "selected=\"selected\"";
- }
- $rowIndex++;
- ?>
- <option value="<?=$method;?>" <?=$selected;?>><?=$desc;?></option>
- <?php
- endforeach;
- if ($rowIndex == 0) {
- echo "<option></option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <?php endif; ?>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Descriptive name");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="20" value="<?=htmlspecialchars($pconfig['descr']);?>"/>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Certificate Authority");?></td>
- <td width="78%" class="vtable">
- <select name='caref' id='caref' class="formselect">
- <?php
- $rowIndex = 0;
- foreach ($a_ca as $ca):
- $selected = "";
- if ($pconfig['caref'] == $ca['refid']) {
- $selected = "selected=\"selected\"";
- }
- $rowIndex++;
- ?>
- <option value="<?=$ca['refid'];?>" <?=$selected;?>><?=htmlspecialchars($ca['descr']);?></option>
- <?php
- endforeach;
- if ($rowIndex == 0) {
- echo "<option></option>";
- }
- ?>
- </select>
- </td>
- </tr>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" id="existing" summary="existing">
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Existing Certificate Revocation List");?></td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("CRL data");?></td>
- <td width="78%" class="vtable">
- <textarea name="crltext" id="crltext" cols="65" rows="7" class="formfld_crl"><?=$pconfig['crltext'];?></textarea>
- <br />
- <?=gettext("Paste a Certificate Revocation List in X.509 CRL format here.");?>
- </td>
- </tr>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" id="internal" summary="internal">
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Internal Certificate Revocation List");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Lifetime");?></td>
- <td width="78%" class="vtable">
- <input name="lifetime" type="text" class="formfld unknown" id="lifetime" size="5" value="<?=htmlspecialchars($pconfig['lifetime']);?>"/>
- <?=gettext("days");?><br />
- <?=gettext("Default: 9999");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Serial");?></td>
- <td width="78%" class="vtable">
- <input name="serial" type="text" class="formfld unknown" id="serial" size="5" value="<?=htmlspecialchars($pconfig['serial']);?>"/>
- <br />
- <?=gettext("Default: 0");?>
- </td>
- </tr>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="save">
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submit" name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <?php if (isset($id) && $thiscrl): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif;?>
- </td>
- </tr>
- </table>
- </form>
-<?php
- elseif ($act == "editimported"):
- $crl = $thiscrl;
-?>
- <form action="system_crlmanager.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" id="editimported" summary="import">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit Imported Certificate Revocation List");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Descriptive name");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="20" value="<?=htmlspecialchars($crl['descr']);?>"/>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("CRL data");?></td>
- <td width="78%" class="vtable">
- <textarea name="crltext" id="crltext" cols="65" rows="7" class="formfld_crl"><?=base64_decode($crl['text']);?></textarea>
- <br />
- <?=gettext("Paste a Certificate Revocation List in X.509 CRL format here.");?></td>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submit" name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <input name="act" type="hidden" value="editimported" />
- </td>
- </tr>
- </table>
- </form>
-
-<?php
- elseif ($act == "edit"):
- $crl = $thiscrl;
-?>
- <form action="system_crlmanager.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="revoke">
- <thead>
- <tr>
- <th width="90%" class="listhdrr" colspan="3"><b><?php echo gettext("Currently Revoked Certificates for CRL") . ': ' . htmlspecialchars($crl['descr']); ?></b></th>
- <th width="10%" class="list"></th>
- </tr>
- <tr>
- <th width="30%" class="listhdrr"><b><?php echo gettext("Certificate Name")?></b></th>
- <th width="30%" class="listhdrr"><b><?php echo gettext("Revocation Reason")?></b></th>
- <th width="30%" class="listhdrr"><b><?php echo gettext("Revoked At")?></b></th>
- <th width="10%" class="list"></th>
- </tr>
- </thead>
- <tbody>
- <?php /* List Certs on CRL */
- if (!is_array($crl['cert']) || (count($crl['cert']) == 0)):
- ?>
- <tr>
- <td class="listlr" colspan="3">
- &nbsp;&nbsp;&nbsp;&nbsp;<?php echo gettext("No Certificates Found for this CRL."); ?>
- </td>
- <td class="list">&nbsp;</td>
- </tr>
- <?php
- else:
- foreach ($crl['cert'] as $i => $cert):
- $name = htmlspecialchars($cert['descr']);
- ?>
- <tr>
- <td class="listlr">
- <?php echo $name; ?>
- </td>
- <td class="listlr">
- <?php echo $openssl_crl_status[$cert["reason"]]; ?>
- </td>
- <td class="listlr">
- <?php echo date("D M j G:i:s T Y", $cert["revoke_time"]); ?>
- </td>
- <td class="list">
- <a href="system_crlmanager.php?act=delcert&amp;id=<?php echo $crl['refid']; ?>&amp;certref=<?php echo $cert['refid']; ?>" onclick="return confirm('<?=gettext("Do you really want to delete this Certificate from the CRL?");?>')">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("Delete this certificate from the CRL ");?>" alt="<?=gettext("Delete this certificate from the CRL ");?>" width="17" height="17" border="0" />
- </a>
- </td>
- </tr>
- <?php
- endforeach;
- endif;
- ?>
- <?php /* Drop-down with other certs from this CA. */
- // Map Certs to CAs in one pass
- $ca_certs = array();
- foreach ($a_cert as $cert) {
- if ($cert['caref'] == $crl['caref']) {
- $ca_certs[] = $cert;
- }
- }
- if (count($ca_certs) == 0): ?>
- <tr>
- <td class="listlr" colspan="3">
- &nbsp;&nbsp;&nbsp;&nbsp;<?php echo gettext("No Certificates Found for this CA."); ?>
- </td>
- <td class="list">&nbsp;</td>
- </tr>
- <?php
- else:
- ?>
- <tr>
- <td class="listlr" colspan="3" align="center">
- <b><?php echo gettext("Choose a Certificate to Revoke"); ?></b>:
- <select name='certref' id='certref' class="formselect">
- <?php $rowIndex = 0;
- foreach ($ca_certs as $cert):
- $rowIndex++;
- ?>
- <option value="<?=$cert['refid'];?>"><?=htmlspecialchars($cert['descr'])?></option>
- <?php
- endforeach;
- if ($rowIndex == 0) {
- echo "<option></option>";
- }
- ?>
- </select>
- <b><?php echo gettext("Reason");?></b>:
- <select name='crlreason' id='crlreason' class="formselect">
- <?php $rowIndex = 0;
- foreach ($openssl_crl_status as $code => $reason):
- $rowIndex++;
- ?>
- <option value="<?= $code ?>"><?= htmlspecialchars($reason) ?></option>
- <?php
- endforeach;
- if ($rowIndex == 0) {
- echo "<option></option>";
- }
- ?>
- </select>
- <input name="act" type="hidden" value="addcert" />
- <input name="crlref" type="hidden" value="<?=$crl['refid'];?>" />
- <input name="id" type="hidden" value="<?=$crl['refid'];?>" />
- <input id="submit" name="add" type="submit" class="formbtn" value="<?=gettext("Add"); ?>" />
- </td>
- <td class="list">&nbsp;</td>
- </tr>
- <?php
- endif;
- ?>
- </tbody>
- </table>
- </form>
-<?php
- else:
-?>
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="ocpms">
- <thead>
- <tr>
- <td width="35%" class="listhdrr"><?=gettext("Name");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Internal");?></td>
- <td width="35%" class="listhdrr"><?=gettext("Certificates");?></td>
- <td width="10%" class="listhdrr"><?=gettext("In Use");?></td>
- <td width="10%" class="list"></td>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <td colspan="5">
- <p>
- <?=gettext("Additional Certificate Revocation Lists can be added here.");?>
- </p>
- </td>
- </tr>
- </tfoot>
- <tbody>
- <?php
- $caimg = "/themes/{$g['theme']}/images/icons/icon_frmfld_cert.png";
- // Map CRLs to CAs in one pass
- $ca_crl_map = array();
- foreach ($a_crl as $crl) {
- $ca_crl_map[$crl['caref']][] = $crl['refid'];
- }
-
- $i = 0;
- foreach ($a_ca as $ca):
- $name = htmlspecialchars($ca['descr']);
-
- if ($ca['prv']) {
- $cainternal = "YES";
- } else {
- $cainternal = "NO";
- }
- ?>
- <tr>
- <td class="listlr" colspan="4">
- <table border="0" cellpadding="0" cellspacing="0" summary="icon">
- <tr>
- <td align="left" valign="middle">
- <img src="<?=$caimg;?>" alt="CA" title="CA" border="0" height="16" width="16" />
- </td>
- <td align="left" valign="middle">
- <?=$name;?>
- </td>
- </tr>
- </table>
- </td>
- <td class="list">
- <?php if ($cainternal == "YES"): ?>
- <a href="system_crlmanager.php?act=new&amp;caref=<?php echo $ca['refid']; ?>">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_plus.gif" title="<?php printf(gettext("Add or Import CRL for %s"), htmlspecialchars($ca['descr']));?>" alt="<?=gettext("add crl");?>" width="17" height="17" border="0" />
- </a>
- <?php else: ?>
- <a href="system_crlmanager.php?act=new&amp;caref=<?php echo $ca['refid']; ?>&amp;importonly=yes">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_plus.gif" title="<?php printf(gettext("Import CRL for %s"), htmlspecialchars($ca['descr']));?>" alt="<?=gettext("add crl");?>" width="17" height="17" border="0" />
- </a>
- <?php endif; ?>
- </td>
- </tr>
- <?php
- if (is_array($ca_crl_map[$ca['refid']])):
- foreach ($ca_crl_map[$ca['refid']] as $crl):
- $tmpcrl = lookup_crl($crl);
- $internal = is_crl_internal($tmpcrl);
- $inuse = crl_in_use($tmpcrl['refid']);
- ?>
- <tr>
- <td class="listlr"><?php echo htmlspecialchars($tmpcrl['descr']); ?></td>
- <td class="listr"><?php echo ($internal) ? "YES" : "NO"; ?></td>
- <td class="listr"><?php echo ($internal) ? count($tmpcrl['cert']) : "Unknown (imported)"; ?></td>
- <td class="listr"><?php echo ($inuse) ? "YES" : "NO"; ?></td>
- <td valign="middle" class="list nowrap">
- <a href="system_crlmanager.php?act=exp&amp;id=<?=$tmpcrl['refid'];?>">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_down.gif" title="<?=gettext("Export CRL") . " " . htmlspecialchars($tmpcrl['descr']);?>" alt="<?=gettext("Export CRL") . " " . htmlspecialchars($tmpcrl['descr']);?>" width="17" height="17" border="0" />
- </a>
- <?php if ($internal): ?>
- <a href="system_crlmanager.php?act=edit&amp;id=<?=$tmpcrl['refid'];?>">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("Edit CRL") . " " . htmlspecialchars($tmpcrl['descr']);?>" alt="<?=gettext("Edit CRL") . " " . htmlspecialchars($tmpcrl['descr']);?>" width="17" height="17" border="0" />
- </a>
- <?php else: ?>
- <a href="system_crlmanager.php?act=editimported&amp;id=<?=$tmpcrl['refid'];?>">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("Edit CRL") . " " . htmlspecialchars($tmpcrl['descr']);?>" alt="<?=gettext("Edit CRL") . " " . htmlspecialchars($tmpcrl['descr']);?>" width="17" height="17" border="0" />
- </a>
- <?php endif; ?>
- <?php if (!$inuse): ?>
- <a href="system_crlmanager.php?act=del&amp;id=<?=$tmpcrl['refid'];?>" onclick="return confirm('<?=gettext("Do you really want to delete this Certificate Revocation List?") . ' (' . htmlspecialchars($tmpcrl['descr']) . ')';?>')">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("Delete CRL") . " " . htmlspecialchars($tmpcrl['descr']);?>" alt="<?=gettext("Delete CRL") . " " . htmlspecialchars($tmpcrl['descr']); ?>" width="17" height="17" border="0" />
- </a>
- <?php endif; ?>
- </td>
- </tr>
- <?php
- $i++;
- endforeach;
- endif;
- ?>
- <tr>
- <td colspan="5">&nbsp;</td>
- </tr>
- <?php
- $i++;
- endforeach;
- ?>
- </tbody>
- </table>
-
-<?php
- endif;
-?>
-
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc");?>
-<script type="text/javascript">
-//<![CDATA[
-
-method_change();
-
-//]]>
-</script>
-
-</body>
-</html>
diff --git a/usr/local/www/system_firmware.php b/usr/local/www/system_firmware.php
deleted file mode 100644
index d6d48ee..0000000
--- a/usr/local/www/system_firmware.php
+++ /dev/null
@@ -1,343 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_firmware.php
- Copyright (C) 2008 Scott Ullrich <sullrich@gmail.com>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/tar
- pfSense_MODULE: firmware
-*/
-
-##|+PRIV
-##|*IDENT=page-system-firmware-manualupdate
-##|*NAME=System: Firmware: Manual Update page
-##|*DESCR=Allow access to the 'System: Firmware: Manual Update' page.
-##|*MATCH=system_firmware.php*
-##|-PRIV
-
-$d_isfwfile = 1;
-$nocsrf = true;
-
-require_once("globals.inc");
-require_once("functions.inc");
-require_once("guiconfig.inc");
-require_once("xmlrpc_client.inc");
-
-$curcfg = $config['system']['firmware'];
-
-/* Allow additional execution time 0 = no limit. */
-ini_set('max_execution_time', '9999');
-ini_set('max_input_time', '9999');
-
-function file_is_for_platform($filename, $ul_name) {
- global $g;
- if ($g['platform'] == "nanobsd") {
- if (stristr($ul_name, "nanobsd")) {
- return true;
- } else {
- return false;
- }
- }
- $_gb = exec("/usr/bin/tar xzf $filename -C /tmp/ etc/platform");
- unset($_gb);
- if (!file_exists("/tmp/etc/platform")) {
- return false;
- }
- $upgrade_is_for_platform = trim(file_get_contents("/tmp/etc/platform", " \n\t\r"));
- if ($g['platform'] == $upgrade_is_for_platform) {
- @unlink("/tmp/etc/platform");
- return true;
- }
- return false;
-}
-
-function file_upload_error_message($error_code) {
- switch ($error_code) {
- case UPLOAD_ERR_INI_SIZE:
- return gettext('The uploaded file exceeds the upload_max_filesize directive in php.ini');
- case UPLOAD_ERR_FORM_SIZE:
- return gettext('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form');
- case UPLOAD_ERR_PARTIAL:
- return gettext('The uploaded file was only partially uploaded');
- case UPLOAD_ERR_NO_FILE:
- return gettext('No file was uploaded');
- case UPLOAD_ERR_NO_TMP_DIR:
- return gettext('Missing a temporary folder');
- case UPLOAD_ERR_CANT_WRITE:
- return gettext('Failed to write file to disk');
- case UPLOAD_ERR_EXTENSION:
- return gettext('File upload stopped by extension');
- default:
- return gettext('Unknown upload error');
- }
-}
-
-/* if upgrade in progress, alert user */
-if (is_subsystem_dirty('firmwarelock')) {
- $pgtitle = array(gettext("System"), gettext("Firmware"), gettext("Manual Update"));
- include("head.inc");
- echo "<body link=\"#0000CC\" vlink=\"#0000CC\" alink=\"#0000CC\">\n";
- include("fbegin.inc");
- echo "<div>\n";
- print_info_box(gettext("An upgrade is currently in progress.<p>The firewall will reboot when the operation is complete.") . "</p><p><img src='/themes/{$g['theme']}/images/icons/icon_fw-update.gif' alt='update' /></p>");
- echo "</div>\n";
- include("fend.inc");
- echo "</body>";
- echo "</html>";
- exit;
-}
-
-if ($_POST['backupbeforeupgrade']) {
- touch("/tmp/perform_full_backup.txt");
-}
-
-/* Handle manual upgrade */
-if ($_POST && !is_subsystem_dirty('firmwarelock')) {
-
- unset($input_errors);
- unset($sig_warning);
-
- if (stristr($_POST['Submit'], gettext("Enable"))) {
- $mode = "enable";
- } else if (stristr($_POST['Submit'], gettext("Disable"))) {
- $mode = "disable";
- } else if (stristr($_POST['Submit'], gettext("Upgrade")) || $_POST['sig_override']) {
- $mode = "upgrade";
- } else if ($_POST['sig_no']) {
- if (file_exists("{$g['upload_path']}/firmware.tgz")) {
- unlink("{$g['upload_path']}/firmware.tgz");
- }
- }
- if ($mode) {
- if ($mode == "enable") {
- conf_mount_rw();
- mark_subsystem_dirty('firmware');
- } else if ($mode == "disable") {
- conf_mount_ro();
- clear_subsystem_dirty('firmware');
- } else if ($mode == "upgrade") {
- if ($_FILES['ulfile']['error']) {
- $errortext = "(" . file_upload_error_message($_FILES['ulfile']['error']) . ")";
- }
- if (is_uploaded_file($_FILES['ulfile']['tmp_name'])) {
- /* verify firmware image(s) */
- if (file_is_for_platform($_FILES['ulfile']['tmp_name'], $_FILES['ulfile']['name']) == false && !$_POST['sig_override']) {
- $input_errors[] = gettext("The uploaded image file is not for this platform.");
- } else if (!file_exists($_FILES['ulfile']['tmp_name'])) {
- /* probably out of memory for the MFS */
- $input_errors[] = gettext("Image upload failed (out of memory?)");
- mwexec("/etc/rc.firmware disable");
- clear_subsystem_dirty('firmware');
- } else {
- /* move the image so PHP won't delete it */
- rename($_FILES['ulfile']['tmp_name'], "{$g['upload_path']}/firmware.tgz");
-
- /* check digital signature */
- $sigchk = verify_digital_signature("{$g['upload_path']}/firmware.tgz");
-
- if ($sigchk == 1) {
- $sig_warning = gettext("The digital signature on this image is invalid.");
- } else if ($sigchk == 2 && !isset($config['system']['firmware']['allowinvalidsig'])) {
- $sig_warning = gettext("This image is not digitally signed.");
- } else if (($sigchk >= 3)) {
- $sig_warning = gettext("There has been an error verifying the signature on this image.");
- }
-
- if (!verify_gzip_file("{$g['upload_path']}/firmware.tgz")) {
- $input_errors[] = gettext("The image file is corrupt.");
- unlink("{$g['upload_path']}/firmware.tgz");
- }
- }
- }
-
- run_plugins("/usr/local/pkg/firmware_upgrade");
-
- /* Check for input errors, firmware locks, warnings, then check for firmware if sig_override is set */
- if (!$input_errors && !is_subsystem_dirty('firmwarelock') && (!$sig_warning || $_POST['sig_override'])) {
- if (file_exists("{$g['upload_path']}/firmware.tgz")) {
- /* fire up the update script in the background */
- mark_subsystem_dirty('firmwarelock');
- $savemsg = gettext("The firmware is now being updated. The firewall will reboot automatically.");
- if (stristr($_FILES['ulfile']['name'], "nanobsd") or $_POST['isnano'] == "yes") {
- mwexec_bg("/etc/rc.firmware pfSenseNanoBSDupgrade {$g['upload_path']}/firmware.tgz");
- } else {
- if ($g['platform'] == "nanobsd") {
- $whichone = "pfSenseNanoBSDupgrade";
- } else {
- $whichone = "pfSenseupgrade";
- }
- mwexec_bg("/etc/rc.firmware {$whichone} {$g['upload_path']}/firmware.tgz");
- unset($whichone);
- }
- } else {
- $savemsg = sprintf(gettext("Firmware image missing or other error, please try again %s."), $errortext);
- }
- }
- }
- }
-}
-
-$pgtitle = array(gettext("System"), gettext("Firmware"));
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<form action="system_firmware.php" method="post" enctype="multipart/form-data">
-<?php
- /* Construct an upload_id for this session */
- if (!session_id()) {
- $upload_id = uniqid();
- } else {
- $upload_id = session_id();
- }
-?>
-<input type="hidden" name="UPLOAD_IDENTIFIER" value="<?php echo $upload_id;?>" />
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if ($fwinfo <> "") print_info_box($fwinfo); ?>
-<?php
- if ($sig_warning && !$input_errors):
- $sig_warning = "<strong>" . $sig_warning . "</strong><br />" . gettext("This means that the image you uploaded " .
- "is not an official/supported image and may lead to unexpected behavior or security " .
- "compromises. Only install images that come from sources that you trust, and make sure " .
- "that the image has not been tampered with.") . "<br /><br />" .
- gettext("Do you want to install this image anyway (on your own risk)?");
- print_info_box($sig_warning);
- if (stristr($_FILES['ulfile']['name'], "nanobsd")) {
- echo "<input type='hidden' name='isnano' id='isnano' value='yes' />\n";
- }
-?>
-<input name="sig_override" type="submit" class="formbtn" id="sig_override" value=" <?=gettext("Yes");?> " />
-<input name="sig_no" type="submit" class="formbtn" id="sig_no" value=" <?=gettext("No"); ?> " />
-<?php
- else:
- if (!is_subsystem_dirty('firmwarelock')):
-?>
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firmware">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Manual Update"), true, "system_firmware.php");
- $tab_array[] = array(gettext("Auto Update"), false, "system_firmware_check.php");
- $tab_array[] = array(gettext("Updater Settings"), false, "system_firmware_settings.php");
- if ($g['hidedownloadbackup'] == false) {
- $tab_array[] = array(gettext("Restore Full Backup"), false, "system_firmware_restorefullbackup.php");
- }
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic"><?=gettext("Invoke") ." ". $g['product_name'] . " " . gettext("Manual Upgrade"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="baseline" class="vncell">&nbsp;</td>
- <td width="78%" class="vtable">
-<?php
- if (!is_subsystem_dirty('rebootreq')):
- if (!is_subsystem_dirty('firmware')):
-?>
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Enable firmware upload");?>" />
- <br />
- <?php printf(gettext('Click "Enable firmware upload" to begin.'), $g['firmware_update_text']);?>
- <br />
-<?php
- else:
-?>
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Disable firmware upload");?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="baseline" class="vncell">&nbsp;</td>
- <td width="78%" class="vtable">
- <?php
- if ($g['platform'] == "nanobsd") {
- $type = "*.img.gz";
- } else {
- $type = "*.tgz";
- }
- ?>
- <strong><?=gettext("Firmware image file ($type):");?> </strong>
- <input name="ulfile" type="file" class="formfld" />
- <br />
- <?php if ($g['hidebackupbeforeupgrade'] === false): ?>
- <input type="checkbox" name='backupbeforeupgrade' id='backupbeforeupgrade' /> <?=gettext("Perform full backup prior to upgrade");?>
- <br />
- <?php endif; ?>
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Upgrade firmware");?>" />
- <?=gettext('Click "Upgrade firmware" to start the upgrade process.');?>
-<?php
- endif;
- else:
-?>
- <strong><?=gettext("You must reboot the system before you can upgrade the firmware.");?></strong>
-<?php
- endif;
-?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <?php if (is_subsystem_dirty('firmware')): ?>
- <span class="vexpl">
- <span class="red">
- <strong>
- <?=gettext("Warning:");?><br />
- </strong>
- </span>
- <?=gettext("DO NOT abort the firmware upgrade once it " .
- "has started. The firewall will reboot automatically after " .
- "storing the new firmware. The configuration will be maintained.");?>
- </span>
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
-
-<?php
- endif;
- endif;
-?>
-<?php include("fend.inc"); ?>
-</form>
-</body>
-</html>
diff --git a/usr/local/www/system_firmware_auto.php b/usr/local/www/system_firmware_auto.php
deleted file mode 100755
index e2970fa..0000000
--- a/usr/local/www/system_firmware_auto.php
+++ /dev/null
@@ -1,296 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_firmware_auto.php
- Copyright (C) 2005 Scott Ullrich
- Copyright (C) 2008 Scott Ullrich <sullrich@gmail.com>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Based originally on system_firmware.php
- (C)2003-2004 Manuel Kasper
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/tar /usr/bin/nohup /bin/cat /sbin/sha256
- pfSense_MODULE: firmware
-*/
-
-##|+PRIV
-##|*IDENT=page-system-firmware-checkforupdate
-##|*NAME=System: Firmware: Check For Update page
-##|*DESCR=Allow access to the 'System: Firmware: Check For Update' page.
-##|*MATCH=system_firmware_auto.php*
-##|-PRIV
-
-$nocsrf = true;
-
-require("guiconfig.inc");
-require_once("pfsense-utils.inc");
-
-$curcfg = $config['system']['firmware'];
-
-if (isset($curcfg['alturl']['enable'])) {
- $updater_url = "{$config['system']['firmware']['alturl']['firmwareurl']}";
-} else {
- $updater_url = $g['update_url'];
-}
-
-if ($_POST['backupbeforeupgrade']) {
- touch("/tmp/perform_full_backup.txt");
-}
-
-$closehead = false;
-$pgtitle = array(gettext("Diagnostics"), gettext("Firmware"), gettext("Auto Update"));
-include("head.inc");
-
-?>
-
-<meta http-equiv="Content-Type" content="text/html; charset=<?=system_get_language_codeset();?>" />
-<link href="gui.css" rel="stylesheet" type="text/css" />
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-
-<?php include("fbegin.inc"); ?>
-
-<form action="system_firmware_auto.php" method="post">
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firmware auto-check">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Manual Update"), false, "system_firmware.php");
- $tab_array[] = array(gettext("Auto Update"), true, "system_firmware_check.php");
- $tab_array[] = array(gettext("Updater Settings"), false, "system_firmware_settings.php");
- if ($g['hidedownloadbackup'] == false) {
- $tab_array[] = array(gettext("Restore Full Backup"), false, "system_firmware_restorefullbackup.php");
- }
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="outer">
- <tr>
- <td class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="inner">
- <tr>
- <td align="center">
- <table style="height:15;colspacing:0" width="420" border="0" cellpadding="0" cellspacing="0" summary="images">
- <tr>
- <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_left.gif')" height="15" width="5"> </td>
- <td>
- <table id="progholder" style="height:15;colspacing:0" width="410" border="0" cellpadding="0" cellspacing="0" summary="">
- <tr>
- <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_gray.gif')" valign="top" align="left">
- <img src="./themes/<?=$g['theme'];?>/images/misc/bar_blue.gif" width="0" height="15" name="progressbar" id="progressbar" alt="" />
- </td>
- </tr>
- </table>
- </td>
- <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_right.gif')" height="15" width="5"></td>
- </tr>
- </table>
- <br />
- <script type="text/javascript">
- //<![CDATA[
- window.onload=function() {
- document.getElementById("status").wrap='hard';
- document.getElementById("output").wrap='hard';
- }
- //]]>
- </script>
- <!-- status box -->
- <textarea cols="90" rows="1" name="status" id="status"><?=gettext("Beginning firmware upgrade"); ?>.</textarea>
- <br />
- <!-- command output box -->
- <textarea cols="90" rows="25" name="output" id="output"></textarea>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</form>
-
-<?php include("fend.inc"); ?>
-
-<?php
-
-update_status(gettext("Downloading current version information") . "...");
-$nanosize = "";
-if ($g['platform'] == "nanobsd") {
- if (file_exists("/etc/nano_use_vga.txt")) {
- $nanosize = "-nanobsd-vga-";
- } else {
- $nanosize = "-nanobsd-";
- }
-
- $nanosize .= strtolower(trim(file_get_contents("/etc/nanosize.txt")));
-}
-
-@unlink("/tmp/{$g['product_name']}_version");
-download_file_with_progress_bar("{$updater_url}/version{$nanosize}", "/tmp/{$g['product_name']}_version");
-$latest_version = str_replace("\n", "", @file_get_contents("/tmp/{$g['product_name']}_version"));
-if (!$latest_version) {
- update_output_window(gettext("Unable to check for updates."));
- require("fend.inc");
- exit;
-} else {
- $current_installed_buildtime = trim(file_get_contents("/etc/version.buildtime"));
- $latest_version = trim(@file_get_contents("/tmp/{$g['product_name']}_version"));
- $latest_version_pfsense = strtotime($latest_version);
- if (!$latest_version) {
- update_output_window(gettext("Unable to check for updates."));
- require("fend.inc");
- exit;
- } else {
- if (pfs_version_compare($current_installed_buildtime, $g['product_version'], $latest_version) == -1) {
- update_status(gettext("Downloading updates") . "...");
- conf_mount_rw();
- if ($g['platform'] == "nanobsd") {
- $update_filename = "latest{$nanosize}.img.gz";
- } else {
- $update_filename = "latest.tgz";
- }
- $status = download_file_with_progress_bar("{$updater_url}/{$update_filename}", "{$g['upload_path']}/latest.tgz", "read_body_firmware");
- $status = download_file_with_progress_bar("{$updater_url}/{$update_filename}.sha256", "{$g['upload_path']}/latest.tgz.sha256");
- conf_mount_ro();
- update_output_window("{$g['product_name']} " . gettext("download complete."));
- } else {
- update_output_window(gettext("You are on the latest version."));
- require("fend.inc");
- exit;
- }
- }
-}
-
-/* launch external upgrade helper */
-$external_upgrade_helper_text = "/etc/rc.firmware ";
-
-if ($g['platform'] == "nanobsd") {
- $external_upgrade_helper_text .= "pfSenseNanoBSDupgrade ";
-} else {
- $external_upgrade_helper_text .= "pfSenseupgrade ";
-}
-
-$external_upgrade_helper_text .= "{$g['upload_path']}/latest.tgz";
-
-$downloaded_latest_tgz_sha256 = str_replace("\n", "", `/sbin/sha256 -q {$g['upload_path']}/latest.tgz`);
-$upgrade_latest_tgz_sha256 = str_replace("\n", "", `/bin/cat {$g['upload_path']}/latest.tgz.sha256 | awk '{ print $4 }'`);
-
-$sigchk = 0;
-
-if (!isset($curcfg['alturl']['enable'])) {
- $sigchk = verify_digital_signature("{$g['upload_path']}/latest.tgz");
-}
-
-$exitstatus = 0;
-if ($sigchk == 1) {
- $sig_warning = gettext("The digital signature on this image is invalid.");
- $exitstatus = 1;
-} else if ($sigchk == 2) {
- $sig_warning = gettext("This image is not digitally signed.");
- if (!isset($config['system']['firmware']['allowinvalidsig'])) {
- $exitstatus = 1;
- }
-} else if (($sigchk >= 3)) {
- $sig_warning = gettext("There has been an error verifying the signature on this image.");
- $exitstatus = 1;
-}
-
-if ($exitstatus) {
- update_status($sig_warning);
- update_output_window(gettext("Update cannot continue. You can disable this check on the Updater Settings tab."));
- require("fend.inc");
- exit;
-} else if ($sigchk == 2) {
- update_status("Upgrade in progress...");
- update_output_window("\n" . gettext("Upgrade Image does not contain a signature but the system has been configured to allow unsigned images. One moment please...") . "\n");
-}
-
-if (!verify_gzip_file("{$g['upload_path']}/latest.tgz")) {
- update_status(gettext("The image file is corrupt."));
- update_output_window(gettext("Update cannot continue"));
- if (file_exists("{$g['upload_path']}/latest.tgz")) {
- conf_mount_rw();
- unlink("{$g['upload_path']}/latest.tgz");
- conf_mount_ro();
- }
- require("fend.inc");
- exit;
-}
-
-if ($downloaded_latest_tgz_sha256 <> $upgrade_latest_tgz_sha256) {
- update_status(gettext("Downloading complete but sha256 does not match."));
- update_output_window(gettext("Auto upgrade aborted.") . " \n\n" . gettext("Downloaded SHA256") . ": " . $downloaded_latest_tgz_sha256 . "\n\n" . gettext("Needed SHA256") . ": " . $upgrade_latest_tgz_sha256);
-} else {
- update_output_window($g['product_name'] . " " . gettext("is now upgrading.") . "\\n\\n" . gettext("The firewall will reboot once the operation is completed."));
- echo "\n<script type=\"text/javascript\">";
- echo "\n//<![CDATA[";
- echo "\ndocument.progressbar.style.visibility='hidden';";
- echo "\n//]]>";
- echo "\n</script>";
- mwexec_bg($external_upgrade_helper_text);
-}
-
-/*
- Helper functions
-*/
-
-function read_body_firmware($ch, $string) {
- global $g, $fout, $file_size, $downloaded, $counter, $version, $latest_version;
- $length = strlen($string);
- $downloaded += intval($length);
- $downloadProgress = round(100 * (1 - $downloaded / $file_size), 0);
- $downloadProgress = 100 - $downloadProgress;
- $a = $file_size;
- $b = $downloaded;
- $c = $downloadProgress;
- $text = " " . gettext("Auto Update Download Status") . "\\n";
- $text .= "----------------------------------------------------\\n";
- $text .= " " . gettext("Current Version") . " : {$g['product_version']}\\n";
- $text .= " " . gettext("Latest Version") . " : {$latest_version}\\n";
- $text .= " " . gettext("File size") . " : {$a}\\n";
- $text .= " " . gettext("Downloaded") . " : {$b}\\n";
- $text .= " " . gettext("Percent") . " : {$c}%\\n";
- $text .= "----------------------------------------------------\\n";
- $counter++;
- if ($counter > 150) {
- update_output_window($text);
- update_progress_bar($downloadProgress);
- $counter = 0;
- }
- fwrite($fout, $string);
- return $length;
-}
-
-?>
-
-</body>
-</html>
diff --git a/usr/local/www/system_firmware_check.php b/usr/local/www/system_firmware_check.php
deleted file mode 100644
index 2e56943..0000000
--- a/usr/local/www/system_firmware_check.php
+++ /dev/null
@@ -1,206 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_firmware_check.php
- Copyright (C) 2008 Scott Ullrich <sullrich@gmail.com>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: firmware
-*/
-
-##|+PRIV
-##|*IDENT=page-system-firmware-autoupdate
-##|*NAME=System: Firmware: Auto Update page
-##|*DESCR=Allow access to the 'System: Firmware: Auto Update' page.
-##|*MATCH=system_firmware_check.php*
-##|-PRIV
-
-$d_isfwfile = 1;
-require("guiconfig.inc");
-require_once("pfsense-utils.inc");
-
-$curcfg = $config['system']['firmware'];
-$pgtitle = array(gettext("System"), gettext("Firmware"), gettext("Auto Update"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-
-<?php include("fbegin.inc"); ?>
-
-<form action="system_firmware_auto.php" method="post">
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firmware check">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Manual Update"), false, "system_firmware.php");
- $tab_array[] = array(gettext("Auto Update"), true, "system_firmware_check.php");
- $tab_array[] = array(gettext("Updater Settings"), false, "system_firmware_settings.php");
- if ($g['hidedownloadbackup'] == false) {
- $tab_array[] = array(gettext("Restore Full Backup"), false, "system_firmware_restorefullbackup.php");
- }
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="">
- <tr>
- <td align="center">
- <!-- progress bar -->
- <table style="height:15;colspacing:0" width="420" border="0" cellpadding="0" cellspacing="0" summary="images">
-
- <tr>
- <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_left.gif')" height="15" width="5"></td>
- <td>
- <table id="progholder" style="height:15;colspacing:0" width="410" border="0" cellpadding="0" cellspacing="0" summary="">
- <tr>
- <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_gray.gif')" valign="top" align="left">
- <img src="./themes/<?=$g['theme'];?>/images/misc/bar_blue.gif" width="0" height="15" name="progressbar" id="progressbar" alt="" />
- </td>
- </tr>
- </table>
- </td>
- <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_right.gif')" height="15" width="5"></td>
- </tr>
- </table>
- <br />
- <!-- command output box -->
- <script type="text/javascript">
- //<![CDATA[
- window.onload=function() {
- document.getElementById("output").wrap='hard';
- }
- //]]>
- </script>
- <textarea style="border:1;bordercolordark:#000000;bordercolorlight:#000000" cols="90" rows="9" name="output" id="output"></textarea>
- <div id="backupdiv" style="visibility:hidden">
- <?php if ($g['hidebackupbeforeupgrade'] === false): ?>
- <br /><input type="checkbox" name="backupbeforeupgrade" id="backupbeforeupgrade" /><?=gettext("Perform full backup prior to upgrade");?>
- <?php endif; ?>
- </div>
- <input id='invokeupgrade' style='visibility:hidden' type="submit" value="<?=gettext("Invoke Auto Upgrade"); ?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-
-<p>
-
-<?php
-
-/* Define necessary variables. */
-if (isset($curcfg['alturl']['enable'])) {
- $updater_url = "{$config['system']['firmware']['alturl']['firmwareurl']}";
-} else {
- $updater_url = $g['update_url'];
-}
-$needs_system_upgrade = false;
-$static_text .= gettext("Downloading new version information...");
-
-$nanosize = "";
-if ($g['platform'] == "nanobsd") {
- if (file_exists("/etc/nano_use_vga.txt")) {
- $nanosize = "-nanobsd-vga-";
- } else {
- $nanosize = "-nanobsd-";
- }
-
- $nanosize .= strtolower(trim(file_get_contents("/etc/nanosize.txt")));
-}
-
-if (download_file_with_progress_bar("{$updater_url}/version{$nanosize}", "/tmp/{$g['product_name']}_version", 'read_body', 5, 5) === true) {
- $remote_version = trim(@file_get_contents("/tmp/{$g['product_name']}_version"));
-}
-$static_text .= gettext("done") . "\\n";
-if (!$remote_version) {
- $static_text .= gettext("Unable to check for updates.") . "\\n";
- if (isset($curcfg['alturl']['enable'])) {
- $static_text .= gettext("Could not contact custom update server.") . "\\n";
- } else {
- $static_text .= sprintf(gettext('Could not contact %1$s update server %2$s%3$s'), $g['product_name'], $updater_url, "\\n");
- }
-} else {
- $static_text .= gettext("Obtaining current version information...");
- update_output_window($static_text);
-
- $current_installed_buildtime = trim(file_get_contents("/etc/version.buildtime"));
-
- $static_text .= "done\\n";
- update_output_window($static_text);
-
- if (pfs_version_compare($current_installed_buildtime, $g['product_version'], $remote_version) == -1) {
- $needs_system_upgrade = true;
- } else {
- $static_text .= "\\n" . gettext("You are on the latest version.") . "\\n";
- }
-}
-
-update_output_window($static_text);
-if ($needs_system_upgrade == false) {
- echo "</p>";
- echo "</form>";
- require("fend.inc");
- echo "</body>";
- echo "</html>";
- exit;
-}
-
-echo "\n<script type=\"text/javascript\">\n";
-echo "//<![CDATA[\n";
-echo "jQuery('#invokeupgrade').css('visibility','visible');\n";
-echo "//]]>\n";
-echo "</script>\n";
-echo "\n<script type=\"text/javascript\">\n";
-echo "//<![CDATA[\n";
-echo "jQuery('#backupdiv').css('visibility','visible');\n";
-echo "//]]>\n";
-echo "</script>\n";
-
-$txt = gettext("A new version is now available") . "\\n\\n";
-$txt .= gettext("Current version") . ": " . $g['product_version'] . "\\n";
-if ($g['platform'] == "nanobsd") {
- $txt .= " " . gettext("NanoBSD Size") . " : " . trim(file_get_contents("/etc/nanosize.txt")) . "\\n";
-}
-$txt .= " " . gettext("Built On") . ": " . $current_installed_buildtime . "\\n";
-$txt .= " " . gettext("New version") . ": " . htmlspecialchars($remote_version, ENT_QUOTES | ENT_HTML401). "\\n\\n";
-$txt .= " " . gettext("Update source") . ": " . $updater_url . "\\n";
-update_output_window($txt);
-?>
-</p>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_firmware_restorefullbackup.php b/usr/local/www/system_firmware_restorefullbackup.php
deleted file mode 100644
index 3cf3f83..0000000
--- a/usr/local/www/system_firmware_restorefullbackup.php
+++ /dev/null
@@ -1,220 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_firmware_restorefullbackup.php
- Copyright (C) 2011 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- pfSense_BUILDER_BINARIES: /etc/rc.restore_full_backup
- pfSense_MODULE: backup
-*/
-
-##|+PRIV
-##|*IDENT=page-diagnostics-restore-full-backup
-##|*NAME=Diagnostics: Restore full backup
-##|*DESCR=Allow access to the 'Diagnostics: Restore Full Backup' page.
-##|*MATCH=system_firmware_restorefullbackup.php
-##|-PRIV
-
-/* Allow additional execution time 0 = no limit. */
-ini_set('max_execution_time', '0');
-ini_set('max_input_time', '0');
-
-require_once("functions.inc");
-require("guiconfig.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-if ($_POST['overwriteconfigxml']) {
- touch("/tmp/do_not_restore_config.xml");
-}
-
-if ($_GET['backupnow']) {
- mwexec_bg("/etc/rc.create_full_backup");
-}
-
-if ($_GET['downloadbackup']) {
- $filename = basename($_GET['downloadbackup']);
- $path = "/root/{$filename}";
- if (file_exists($path)) {
- session_write_close();
- ob_end_clean();
- session_cache_limiter('public');
- //$fd = fopen("/root/{$filename}", "rb");
- $filesize = filesize("/root/{$filename}");
- header("Cache-Control: ");
- header("Pragma: ");
- header("Content-Type: application/octet-stream");
- header("Content-Length: " .(string)(filesize($path)));
- header('Content-Disposition: attachment; filename="'.$filename.'"');
- header("Content-Transfer-Encoding: binary\n");
- if ($file = fopen("/root/{$filename}", 'rb')) {
- while ((!feof($file)) && (connection_status() == 0)) {
- print(fread($file, 1024*8));
- flush();
- }
- fclose($file);
- }
-
- exit;
- }
-}
-
-if ($_GET['deletefile']) {
- $filename = basename($_GET['deletefile']);
- if (file_exists("/root/{$filename}") && (preg_match("/pfSense-full-backup-\d+-\d+\.tgz/", $filename) == 1)) {
- unlink("/root/" . $filename);
- $savemsg = htmlspecialchars($filename) . " " . gettext("has been deleted.");
- } else {
- $savemsg = htmlspecialchars($filename) . " " . gettext("has not been been deleted (invalid backup file or file does not exist).");
- }
-}
-
-if ($_POST['restorefile']) {
- $filename = basename($_POST['restorefile']);
- if (file_exists("/root/{$filename}") && (preg_match("/pfSense-full-backup-\d+-\d+\.tgz/", $filename) == 1)) {
- mwexec_bg("/etc/rc.restore_full_backup /root/" . escapeshellcmd($filename));
- $savemsg = gettext("The firewall is currently restoring") . " " . htmlspecialchars($filename);
- } else {
- $savemsg = htmlspecialchars($filename) . " " . gettext("has not been been restored (invalid backup file or file does not exist).");
- }
-}
-
-$pgtitle = array(gettext("Diagnostics"), gettext("Restore full backup"));
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('restore')): ?>
-<p>
- <form action="reboot.php" method="post">
- <input name="Submit" type="hidden" value="Yes" />
- <?php print_info_box(gettext("The firewall configuration has been changed.") . "<br />" . gettext("The firewall is now rebooting."));?><br />
- </form>
-</p>
-<?php endif; ?>
-<form action="system_firmware_restorefullbackup.php" method="post">
-<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="restore full backup">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Manual Update"), false, "system_firmware.php");
- $tab_array[] = array(gettext("Auto Update"), false, "system_firmware_check.php");
- $tab_array[] = array(gettext("Updater Settings"), false, "system_firmware_settings.php");
- if ($g['hidedownloadbackup'] == false) {
- $tab_array[] = array(gettext("Restore Full Backup"), true, "system_firmware_restorefullbackup.php");
- }
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="1" class="listtopic"><?=gettext("Filename"); ?></td>
- <td colspan="1" class="listtopic"><?=gettext("Date"); ?></td>
- <td colspan="1" class="listtopic"><?=gettext("Size"); ?></td>
- <td colspan="1" class="listtopic"></td>
- </tr>
-<?php
- chdir("/root");
- $available_restore_files = glob("pfSense-full-backup-*");
- $counter = 0;
- foreach ($available_restore_files as $arf) {
- $counter++;
- $size = exec("gzip -l /root/$arf | grep -v compressed | awk '{ print $2 }'");
- echo "<tr>";
- echo "<td class='listlr' width='50%' colspan='1'>";
- echo "<input type='radio' name='restorefile' value='$arf' /> $arf";
- echo "</td>";
- echo "<td class='listr' width='30%' colspan='1'>";
- echo date ("F d Y H:i:s", filemtime($arf));
- echo "</td>";
- echo "<td class='listr' width='40%' colspan='1'>";
- echo format_bytes($size);
- echo "</td>";
- echo "<td class='listr nowrap' width='20%' colspan='1'>";
- echo "<a onclick=\"return confirm('" . gettext("Do you really want to delete this backup?") . "')\" href='system_firmware_restorefullbackup.php?deletefile=" . htmlspecialchars($arf) . "'>";
- echo gettext("Delete");
- echo "</a> | ";
- echo "<a href='system_firmware_restorefullbackup.php?downloadbackup=" . htmlspecialchars($arf) . "'>";
- echo gettext("Download");
- echo "</a>";
- echo "</td>";
- echo "</tr>";
- }
- if ($counter == 0) {
- echo "<tr>";
- echo "<td class='listlr' width='100%' colspan='4' align='center'>";
- echo gettext("Could not locate any previous backups.");
- echo "</td>";
- echo "</tr>";
- }
-?>
- <tr>
- <td width="78%" colspan="3">
- &nbsp;<br />
- <input type="checkbox" name="overwriteconfigxml" id="overwriteconfigxml" checked="checked" /> <?=gettext("do not restore config.xml."); ?>
- <br />
- <input name="Restore" type="submit" class="formbtn" id="restore" value="<?=gettext("Restore"); ?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-
-<script type="text/javascript">
-//<![CDATA[
-encrypt_change();
-decrypt_change();
-//]]>
-</script>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
-<?php
-
-if (is_subsystem_dirty('restore')) {
- system_reboot();
-}
-
-?>
diff --git a/usr/local/www/system_firmware_settings.php b/usr/local/www/system_firmware_settings.php
deleted file mode 100644
index 9f6c5e0..0000000
--- a/usr/local/www/system_firmware_settings.php
+++ /dev/null
@@ -1,318 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_firmware_settings.php
- part of pfSense
- Copyright (C) 2005 Colin Smith
- Copyright (C) 2008 Scott Ullrich <sullrich@gmail.com>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/fetch
- pfSense_MODULE: firmware
-*/
-
-##|+PRIV
-##|*IDENT=page-system-firmware-settings
-##|*NAME=System: Firmware: Settings page
-##|*DESCR=Allow access to the 'System: Firmware: Settings' page.
-##|*MATCH=system_firmware_settings.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if ($_POST) {
- unset($input_errors);
-
- /* input validation */
- if (($_POST['alturlenable'] == "yes") && (empty($_POST['firmwareurl']))) {
- $input_errors[] = gettext("A Firmware Auto Update Base URL must be specified when \"Use an unofficial server for firmware upgrades\" is enabled.");
- }
-
- if (!$input_errors) {
- if ($_POST['alturlenable'] == "yes") {
- $config['system']['firmware']['alturl']['enable'] = true;
- $config['system']['firmware']['alturl']['firmwareurl'] = $_POST['firmwareurl'];
- } else {
- unset($config['system']['firmware']['alturl']['enable']);
- unset($config['system']['firmware']['alturl']['firmwareurl']);
- unset($config['system']['firmware']['alturl']);
- unset($config['system']['firmware']);
- }
- if ($_POST['allowinvalidsig'] == "yes") {
- $config['system']['firmware']['allowinvalidsig'] = true;
- } else {
- unset($config['system']['firmware']['allowinvalidsig']);
- }
-
- if ($_POST['disablecheck'] == "yes") {
- $config['system']['firmware']['disablecheck'] = true;
- } else {
- unset($config['system']['firmware']['disablecheck']);
- }
-
- if ($_POST['synconupgrade'] == "yes") {
- $config['system']['gitsync']['synconupgrade'] = true;
- } else {
- unset($config['system']['gitsync']['synconupgrade']);
- }
- $config['system']['gitsync']['repositoryurl'] = $_POST['repositoryurl'];
- $config['system']['gitsync']['branch'] = $_POST['branch'];
-
- write_config();
- }
-}
-
-$curcfg = $config['system']['firmware'];
-$gitcfg = $config['system']['gitsync'];
-
-$pgtitle = array(gettext("System"), gettext("Firmware"), gettext("Settings"));
-$closehead = false;
-include("head.inc");
-
-exec("/usr/bin/fetch -q -o {$g['tmp_path']}/manifest \"{$g['update_manifest']}\"");
-if (file_exists("{$g['tmp_path']}/manifest")) {
- $preset_urls_split = explode("\n", file_get_contents("{$g['tmp_path']}/manifest"));
-}
-
-?>
-<script type="text/javascript">
-//<![CDATA[
-
-
-function enable_altfirmwareurl(enable_over) {
- if (document.iform.alturlenable.checked || enable_over) {
- document.iform.firmwareurl.disabled = 0;
- } else {
- document.iform.firmwareurl.disabled = 1;
- document.iform.firmwareurl.value = '';
- }
-}
-
-//]]>
-</script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc");?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-
-<form action="system_firmware_settings.php" method="post" name="iform" id="iform">
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firmware settings">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Manual Update"), false, "system_firmware.php");
- $tab_array[] = array(gettext("Auto Update"), false, "system_firmware_check.php");
- $tab_array[] = array(gettext("Updater Settings"), true, "system_firmware_settings.php");
- if ($g['hidedownloadbackup'] == false) {
- $tab_array[] = array(gettext("Restore Full Backup"), false, "system_firmware_restorefullbackup.php");
- }
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Firmware Branch"); ?></td>
- </tr>
-<?php if (is_array($preset_urls_split)): ?>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Default Auto Update URLs"); ?></td>
- <td class="vtable">
- <select name='preseturls' id='preseturls' onchange="firmwareurl.value = preseturls.value; document.iform.firmwareurl.disabled = 0; alturlenable.checked=true; jQuery('#preseturls').parent().effect('highlight');">
- <option></option>
- <?php
- foreach ($preset_urls_split as $pus) {
- $pus_text = explode("\t", $pus);
- if (empty($pus_text[0])) {
- continue;
- }
- if (stristr($pus_text[0], php_uname("m")) !== false) {
- $style = " style=\"font-weight: bold\"";
- $yourarch = " (Current architecture)";
- } else {
- $style = "";
- $yourarch = "";
- }
- echo "<option value='{$pus_text[1]}'{$style}>{$pus_text[0]}{$yourarch}</option>";
- }
- ?>
- </select>
- <br /><br /><?php echo sprintf(gettext("Entries denoted by \"Current architecture\" match the architecture of your current installation, such as %s. Changing architectures during an upgrade is not recommended, and may require a manual reboot after the update completes."), php_uname("m")); ?>
- </td>
- </tr>
-<?php endif; ?>
- <tr>
- <td valign="top" class="vncell"><?=gettext("Firmware Auto Update URL"); ?></td>
- <td class="vtable">
- <input name="alturlenable" type="checkbox" id="alturlenable" value="yes" onclick="enable_altfirmwareurl()" <?php if (isset($curcfg['alturl']['enable'])) echo "checked=\"checked\""; ?> /> <?=gettext("Use an unofficial server for firmware upgrades") ?><br />
- <table summary="alternative Base URL">
- <tr>
- <td>
- <?=gettext("Base URL:"); ?>
- </td>
- <td>
- <input name="firmwareurl" type="text" class="formfld url" id="firmwareurl" size="64" value="<?php if ($curcfg['alturl']['firmwareurl']) echo htmlspecialchars($curcfg['alturl']['firmwareurl']); else echo $g['']; ?>" />
- </td>
- </tr>
- </table>
- <span class="vexpl">
- <?=gettext("This is where"); ?> <?php echo $g['product_name'] ?> <?=gettext("will check for newer firmware versions when the"); ?> <a href="system_firmware_check.php"><?=gettext("System: Firmware: Auto Update"); ?></a> <?=gettext("page is viewed."); ?>
- <br />
- <b><?=gettext("NOTE:"); ?></b> <?php printf(gettext("When a custom URL is configured, the system will not verify the image has an official digital signature")); ?>
- </span>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Updates"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Unsigned images"); ?></td>
- <td width="78%" class="vtable">
- <input name="allowinvalidsig" type="checkbox" id="allowinvalidsig" value="yes" <?php if (isset($curcfg['allowinvalidsig'])) echo "checked=\"checked\""; ?> />
- <br />
- <?=gettext("Allow auto-update firmware images with a missing or invalid digital signature to be used."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Dashboard check"); ?></td>
- <td width="78%" class="vtable">
- <input name="disablecheck" type="checkbox" id="disablecheck" value="yes" <?php if (isset($curcfg['disablecheck'])) echo "checked=\"checked\""; ?> />
- <br />
- <?=gettext("Disable the automatic dashboard auto-update check."); ?>
- </td>
- </tr>
-<?php
- if (file_exists("/usr/local/bin/git") && $g['platform'] == "pfSense"):
-?>
- <tr>
- <td colspan="2" class="list" height="12">&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Gitsync"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Auto sync on update"); ?></td>
- <td width="78%" class="vtable">
- <input name="synconupgrade" type="checkbox" id="synconupgrade" value="yes" <?php if (isset($gitcfg['synconupgrade'])) echo "checked=\"checked\""; ?> />
- <br />
- <?=gettext("After updating, sync with the following repository/branch before reboot."); ?>
- </td>
- </tr>
-<?php
- if (is_dir("/root/pfsense/pfSenseGITREPO/pfSenseGITREPO")) {
- exec("cd /root/pfsense/pfSenseGITREPO/pfSenseGITREPO && git config remote.origin.url", $output_str);
- if (is_array($output_str) && !empty($output_str[0])) {
- $lastrepositoryurl = $output_str[0];
- }
- unset($output_str);
- }
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Repository URL"); ?></td>
- <td width="78%" class="vtable">
- <input name="repositoryurl" type="text" class="formfld url" id="repositoryurl" size="64" value="<?php if ($gitcfg['repositoryurl']) echo htmlspecialchars($gitcfg['repositoryurl']); ?>" />
-<?php
- if ($lastrepositoryurl):
-?>
- <br />
- <?=sprintf(gettext("The most recently used repository was %s"), $lastrepositoryurl); ?>
- <br />
- <?=gettext("This will be used if the field is left blank."); ?>
-<?php
- endif;
-?>
- </td>
- </tr>
-<?php
- if (is_dir("/root/pfsense/pfSenseGITREPO/pfSenseGITREPO")) {
- exec("cd /root/pfsense/pfSenseGITREPO/pfSenseGITREPO && git branch", $output_str);
- if (is_array($output_str)) {
- foreach ($output_str as $output_line) {
- if (strstr($output_line, '* ')) {
- $lastbranch = substr($output_line, 2);
- break;
- }
- }
- }
- unset($output_str);
- }
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Branch name"); ?></td>
- <td width="78%" class="vtable">
- <input name="branch" type="text" class="formfld unknown" id="branch" size="64" value="<?php if ($gitcfg['branch']) echo htmlspecialchars($gitcfg['branch']); ?>" />
-<?php
- if ($lastbranch):
-?>
- <br />
- <?=sprintf(gettext("The most recently used branch was %s"), $lastbranch); ?>
-<?php
- else:
-?>
- <br />
- <?=gettext("Usually the branch name is master"); ?>
-<?php
- endif;
-?>
- <br />
- <?=gettext("Note: Sync will not be performed if a branch is not specified."); ?>
- </td>
- </tr>
-<?php
- endif;
-?>
- <tr>
- <td>
- <script type="text/javascript">
- //<![CDATA[
- enable_altfirmwareurl();
- //]]>
- </script>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_gateway_groups.php b/usr/local/www/system_gateway_groups.php
deleted file mode 100644
index aeb0bad..0000000
--- a/usr/local/www/system_gateway_groups.php
+++ /dev/null
@@ -1,235 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_gateway_groups.php
- part of pfSense (https://www.pfsense.org)
-
- Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-system-gatewaygroups
-##|*NAME=System: Gateway Groups page
-##|*DESCR=Allow access to the 'System: Gateway Groups' page.
-##|*MATCH=system_gateway_groups.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("openvpn.inc");
-
-if (!is_array($config['gateways']['gateway_group'])) {
- $config['gateways']['gateway_group'] = array();
-}
-
-$a_gateway_groups = &$config['gateways']['gateway_group'];
-$a_gateways = &$config['gateways']['gateway_item'];
-$changedesc = gettext("Gateway Groups") . ": ";
-
-if ($_POST) {
-
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
-
- $retval = 0;
-
- $retval = system_routing_configure();
- send_multiple_events(array("service reload dyndnsall", "service reload ipsecdns", "filter reload"));
-
- /* reconfigure our gateway monitor */
- setup_gateways_monitor();
-
- $savemsg = get_std_save_message($retval);
- if ($retval == 0) {
- clear_subsystem_dirty('staticroutes');
- }
-
- foreach ($a_gateway_groups as $gateway_group) {
- $gw_subsystem = 'gwgroup.' . $gateway_group['name'];
- if (is_subsystem_dirty($gw_subsystem)) {
- openvpn_resync_gwgroup($gateway_group['name']);
- clear_subsystem_dirty($gw_subsystem);
- }
- }
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($a_gateway_groups[$_GET['id']]) {
- $changedesc .= gettext("removed gateway group") . " {$_GET['id']}";
- foreach ($config['filter']['rule'] as $idx => $rule) {
- if ($rule['gateway'] == $a_gateway_groups[$_GET['id']]['name']) {
- unset($config['filter']['rule'][$idx]['gateway']);
- }
- }
- unset($a_gateway_groups[$_GET['id']]);
- write_config($changedesc);
- mark_subsystem_dirty('staticroutes');
- header("Location: system_gateway_groups.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("System"), gettext("Gateway Groups"));
-$shortcut_section = "gateway-groups";
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="system_gateway_groups.php" method="post">
-<input type="hidden" name="y1" value="1" />
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('staticroutes')): ?><br/>
-<?php print_info_box_np(sprintf(gettext("The gateway configuration has been changed.%sYou must apply the changes in order for them to take effect."), "<br />"));?><br /><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system groups">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Gateways"), false, "system_gateways.php");
- $tab_array[1] = array(gettext("Routes"), false, "system_routes.php");
- $tab_array[2] = array(gettext("Groups"), true, "system_gateway_groups.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <thead>
- <tr>
- <td width="15%" class="listhdrr"><?=gettext("Group Name");?></td>
- <td width="15%" class="listhdrr"><?=gettext("Gateways");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Priority");?></td>
- <td width="30%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td width="17"></td>
- <td>
- <a href="system_gateway_groups_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="edit" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <td class="list" colspan="4"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="edit">
- <tr>
- <td width="17"></td>
- <td>
- <a href="system_gateway_groups_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="edit" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </tfoot>
- <tbody>
-<?php
- $i = 0;
- foreach ($a_gateway_groups as $gateway_group):
-?>
- <tr>
- <td class="listlr" ondblclick="document.location='system_gateway_groups_edit.php?id=<?=$i;?>';">
- <?php
- echo $gateway_group['name'];
- ?>
- </td>
- <td class="listr" ondblclick="document.location='system_gateway_groups_edit.php?id=<?=$i;?>';">
- <?php
- foreach ($gateway_group['item'] as $item) {
- $itemsplit = explode("|", $item);
- echo htmlspecialchars(strtoupper($itemsplit[0])) . "<br />\n";
- }
- ?>
- </td>
- <td class="listr" ondblclick="document.location='system_gateway_groups_edit.php?id=<?=$i;?>';">
- <?php
- foreach ($gateway_group['item'] as $item) {
- $itemsplit = explode("|", $item);
- echo "Tier ". htmlspecialchars($itemsplit[1]) . "<br />\n";
- }
- ?>
- </td>
- <td class="listbg" ondblclick="document.location='system_gateway_groups_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($gateway_group['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="edit">
- <tr>
- <td>
- <a href="system_gateway_groups_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
- </td>
- <td>
- <a href="system_gateway_groups.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this gateway group?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
- <tr>
- <td width="17"></td>
- <td>
- <a href="system_gateway_groups_edit.php?dup=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="duplicate" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr style="display:none;">
- <td></td>
- </tr>
- </tbody>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<p>
- <b><?=gettext("Note:");?></b>
- <?=gettext("Remember to use these Gateway Groups in firewall rules in order to enable load balancing, failover, or policy-based routing. Without rules directing traffic into the Gateway Groups, they will not be used.");?>
-</p>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_gateway_groups_edit.php b/usr/local/www/system_gateway_groups_edit.php
deleted file mode 100644
index c5fcc3b..0000000
--- a/usr/local/www/system_gateway_groups_edit.php
+++ /dev/null
@@ -1,378 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_gateway_groups_edit.php
- part of pfSense (https://www.pfsense.org)
-
- Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-system-gateways-editgatewaygroups
-##|*NAME=System: Gateways: Edit Gateway Groups page
-##|*DESCR=Allow access to the 'System: Gateways: Edit Gateway Groups' page.
-##|*MATCH=system_gateway_groups_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("ipsec.inc");
-require_once("vpn.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_gateway_groups.php');
-}
-
-if (!is_array($config['gateways']['gateway_group'])) {
- $config['gateways']['gateway_group'] = array();
-}
-
-$a_gateway_groups = &$config['gateways']['gateway_group'];
-$a_gateways = return_gateways_array();
-
-$categories = array(
- 'down' => gettext("Member Down"),
- 'downloss' => gettext("Packet Loss"),
- 'downlatency' => gettext("High Latency"),
- 'downlosslatency' => gettext("Packet Loss or High Latency"));
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
- $id = $_GET['dup'];
-}
-
-if (isset($id) && $a_gateway_groups[$id]) {
- $pconfig['name'] = $a_gateway_groups[$id]['name'];
- $pconfig['item'] = &$a_gateway_groups[$id]['item'];
- $pconfig['descr'] = $a_gateway_groups[$id]['descr'];
- $pconfig['trigger'] = $a_gateway_groups[$id]['trigger'];
-}
-
-if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
- unset($id);
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "name");
- $reqdfieldsn = explode(",", "Name");
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (!isset($_POST['name'])) {
- $input_errors[] = gettext("A valid gateway group name must be specified.");
- }
- if (!is_validaliasname($_POST['name'])) {
- $input_errors[] = gettext("The gateway name must not contain invalid characters.");
- }
-
- if (isset($_POST['name'])) {
- /* check for overlaps */
- if (is_array($a_gateway_groups)) {
- foreach ($a_gateway_groups as $gateway_group) {
- if (isset($id) && ($a_gateway_groups[$id]) && ($a_gateway_groups[$id] === $gateway_group)) {
- if ($gateway_group['name'] != $_POST['name']) {
- $input_errors[] = gettext("Changing name on a gateway group is not allowed.");
- }
- continue;
- }
-
- if ($gateway_group['name'] == $_POST['name']) {
- $input_errors[] = sprintf(gettext('A gateway group with this name "%s" already exists.'), $_POST['name']);
- break;
- }
- }
- }
- }
-
- /* Build list of items in group with priority */
- $pconfig['item'] = array();
- foreach ($a_gateways as $gwname => $gateway) {
- if ($_POST[$gwname] > 0) {
- $vipname = "{$gwname}_vip";
- /* we have a priority above 0 (disabled), add item to list */
- $pconfig['item'][] = "{$gwname}|{$_POST[$gwname]}|{$_POST[$vipname]}";
- }
- /* check for overlaps */
- if ($_POST['name'] == $gwname) {
- $input_errors[] = sprintf(gettext('A gateway group cannot have the same name with a gateway "%s" please choose another name.'), $_POST['name']);
- }
-
- }
- if (count($pconfig['item']) == 0) {
- $input_errors[] = gettext("No gateway(s) have been selected to be used in this group");
- }
-
- if (!$input_errors) {
- $gateway_group = array();
- $gateway_group['name'] = $_POST['name'];
- $gateway_group['item'] = $pconfig['item'];
- $gateway_group['trigger'] = $_POST['trigger'];
- $gateway_group['descr'] = $_POST['descr'];
-
- if (isset($id) && $a_gateway_groups[$id]) {
- $a_gateway_groups[$id] = $gateway_group;
- } else {
- $a_gateway_groups[] = $gateway_group;
- }
-
- mark_subsystem_dirty('staticroutes');
- mark_subsystem_dirty('gwgroup.' . $gateway_group['name']);
-
- write_config();
-
- header("Location: system_gateway_groups.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("System"), gettext("Gateways"), gettext("Edit gateway group"));
-$shortcut_section = "gateway-groups";
-
-function build_gateway_protocol_map (&$a_gateways) {
- $result = array();
- foreach ($a_gateways as $gwname => $gateway) {
- $result[$gwname] = $gateway['ipprotocol'];
- }
- return $result;
-}
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-
-<?php
-$gateway_protocol = build_gateway_protocol_map($a_gateways);
-$gateway_array = array_keys($a_gateways);
-$protocol_array = array_values($gateway_protocol);
-$protocol_array = array_values(array_unique($gateway_protocol));
-?>
-<script type="text/javascript">
-//<![CDATA[
-jQuery(function ($) {
- var gateway_protocol = <?= json_encode($gateway_protocol) ?>;
- var gateways = <?= json_encode($gateway_array) ?>;
- var protocols = <?= json_encode($protocol_array) ?>;
- if (protocols.length <= 1) { return; }
-
- var update_gateway_visibilities = function () {
- var which_protocol_to_show = undefined;
- $.each(gateways, function (i, gateway) {
- var $select = $("#" + gateway);
- var value = $select.val();
- var protocol = gateway_protocol[gateway];
- if (value !== '0' /* i.e., an option is selected */) {
- if (which_protocol_to_show === undefined) {
- which_protocol_to_show = protocol;
- } else if (which_protocol_to_show !== protocol) {
- which_protocol_to_show = 'ALL OF THEM'; // this shouldn't happen
- }
- }
- });
- if (which_protocol_to_show !== undefined && which_protocol_to_show !== 'ALL OF THEM') {
- $.each(gateways, function (i, gateway) {
- var protocol = gateway_protocol[gateway];
- var $row = $("tr.gateway_row#" + gateway + "_row");
- if (protocol === which_protocol_to_show) {
- if ($row.is(":hidden")) {
- $row.fadeIn('slow');
- }
- } else {
- if (!$row.is(":hidden")) {
- $row.fadeOut('slow');
- }
- }
- });
- } else {
- $("tr.gateway_row").each(function () {
- if ($(this).is(":hidden")) {
- $(this).fadeIn('slow');
- }
- });
- }
- };
- $("select.gateway_tier_selector").change(update_gateway_visibilities);
- update_gateway_visibilities();
-});
-//]]>
-</script>
-
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="system_gateway_groups_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="system groups edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit gateway group entry"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Group Name"); ?></td>
- <td width="78%" class="vtable">
- <input name="name" type="text" class="formfld unknown" id="name" size="20" value="<?=htmlspecialchars($pconfig['name']);?>" />
- <br /> <span class="vexpl"><?=gettext("Group Name"); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Gateway Priority"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="6" cellspacing="0" summary="gateway priority">
- <tr>
- <td class="listhdrr">Gateway</td>
- <td class="listhdrr">Tier</td>
- <td class="listhdrr">Virtual IP</td>
- <td class="listhdrr">Description</td>
- </tr>
- <?php
- $carplist = get_configured_carp_interface_list($interface);
- foreach ($a_gateways as $gwname => $gateway) {
- if (!empty($pconfig['item'])) {
- $af = explode("|", $pconfig['item'][0]);
- $family = $a_gateways[$af[0]]['ipprotocol'];
- if ($gateway['ipprotocol'] != $family) {
- continue;
- }
- }
- $interface = $gateway['friendlyiface'];
- $selected = array();
- foreach ((array)$pconfig['item'] as $item) {
- $itemsplit = explode("|", $item);
- if ($itemsplit[0] == $gwname) {
- $selected[$itemsplit[1]] = "selected=\"selected\"";
- break;
- } else {
- $selected[0] = "selected=\"selected\"";
- }
- }
- $tr_id = $gwname . "_row";
- echo "<tr class='gateway_row' id='{$tr_id}'>\n";
- echo "<td class='listlr'>";
- echo "<strong>{$gateway['name']} </strong>";
- echo "</td><td class='listr'>";
- echo "<select name='{$gwname}' class='gateway_tier_selector formfldselect' id='{$gwname}'>\n";
- echo "<option value='0' $selected[0] >" . gettext("Never") . "</option>\n";
- echo "<option value='1' $selected[1] >" . gettext("Tier 1") . "</option>\n";
- echo "<option value='2' $selected[2] >" . gettext("Tier 2") . "</option>\n";
- echo "<option value='3' $selected[3] >" . gettext("Tier 3") . "</option>\n";
- echo "<option value='4' $selected[4] >" . gettext("Tier 4") . "</option>\n";
- echo "<option value='5' $selected[5] >" . gettext("Tier 5") . "</option>\n";
- echo "</select>\n";
- echo "</td>";
-
- $selected = array();
- foreach ((array)$pconfig['item'] as $item) {
- $itemsplit = explode("|", $item);
- if ($itemsplit[0] == $gwname) {
- $selected[$itemsplit[2]] = "selected=\"selected\"";
- break;
- } else {
- $selected['address'] = "selected=\"selected\"";
- }
- }
- echo "<td class='listr'>";
- echo "<select name='{$gwname}_vip' class='gateway_vip_selector formfldselect' id='{$gwname}_vip'>\n";
- echo "<option value='address' {$selected['address']} >" . gettext("Interface Address") . "</option>\n";
- foreach ($carplist as $vip => $address) {
- echo "<!-- $vip - $address - $interface -->\n";
- if (($gateway['ipprotocol'] == "inet") && (!is_ipaddrv4($address))) {
- continue;
- }
- if (($gateway['ipprotocol'] == "inet6") && (!is_ipaddrv6($address))) {
- continue;
- }
- echo "<option value='{$vip}' $selected[$vip] >$vip - $address</option>\n";
- }
- echo "</select></td>";
- echo "<td class='listr'><strong>{$gateway['descr']}&nbsp;</strong>";
- echo "</td></tr>";
- }
- ?>
- </table>
- <br /><span class="vexpl">
- <strong><?=gettext("Link Priority"); ?></strong> <br />
- <?=gettext("The priority selected here defines in what order failover and balancing of links will be done. " .
- "Multiple links of the same priority will balance connections until all links in the priority will be exhausted. " .
- "If all links in a priority level are exhausted we will use the next available link(s) in the next priority level.") ?>
- <br />
- <strong><?=gettext("Virtual IP"); ?></strong> <br />
- <?=gettext("The virtual IP field selects what (virtual) IP should be used when this group applies to a local Dynamic DNS, IPsec or OpenVPN endpoint") ?>
- </span><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Trigger Level"); ?></td>
- <td width="78%" class="vtable">
- <select name='trigger' class='formfldselect trigger_level_selector' id='trigger'>
- <?php
- foreach ($categories as $category => $categoryd) {
- echo "<option value=\"$category\"";
- if ($category == $pconfig['trigger']) {
- echo " selected=\"selected\"";
- }
- echo ">" . htmlspecialchars($categoryd) . "</option>\n";
- }
- ?>
- </select>
- <br /> <span class="vexpl"><?=gettext("When to trigger exclusion of a member"); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br /> <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_gateway_groups[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_gateways.php b/usr/local/www/system_gateways.php
deleted file mode 100644
index 850c5ba..0000000
--- a/usr/local/www/system_gateways.php
+++ /dev/null
@@ -1,436 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_gateways.php
- part of pfSense (https://www.pfsense.org)
-
- Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-system-gateways
-##|*NAME=System: Gateways page
-##|*DESCR=Allow access to the 'System: Gateways' page.
-##|*MATCH=system_gateways.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-$a_gateways = return_gateways_array(true, false, true);
-$a_gateways_arr = array();
-foreach ($a_gateways as $gw) {
- $a_gateways_arr[] = $gw;
-}
-$a_gateways = $a_gateways_arr;
-
-if (!is_array($config['gateways']['gateway_item'])) {
- $config['gateways']['gateway_item'] = array();
-}
-
-$a_gateway_item = &$config['gateways']['gateway_item'];
-
-if ($_POST) {
-
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
-
- $retval = 0;
-
- $retval = system_routing_configure();
- $retval |= filter_configure();
- /* reconfigure our gateway monitor */
- setup_gateways_monitor();
-
- $savemsg = get_std_save_message($retval);
- if ($retval == 0) {
- clear_subsystem_dirty('staticroutes');
- }
- }
-}
-
-function can_delete_disable_gateway_item($id, $disable = false) {
- global $config, $input_errors, $a_gateways;
-
- if (!isset($a_gateways[$id])) {
- return false;
- }
-
- if (is_array($config['gateways']['gateway_group'])) {
- foreach ($config['gateways']['gateway_group'] as $group) {
- foreach ($group['item'] as $item) {
- $items = explode("|", $item);
- if ($items[0] == $a_gateways[$id]['name']) {
- if (!$disable) {
- $input_errors[] = sprintf(gettext("Gateway '%s' cannot be deleted because it is in use on Gateway Group '%s'"), $a_gateways[$id]['name'], $group['name']);
- } else {
- $input_errors[] = sprintf(gettext("Gateway '%s' cannot be disabled because it is in use on Gateway Group '%s'"), $a_gateways[$id]['name'], $group['name']);
- }
- }
- }
- }
- }
-
- if (is_array($config['staticroutes']['route'])) {
- foreach ($config['staticroutes']['route'] as $route) {
- if ($route['gateway'] == $a_gateways[$id]['name']) {
- if (!$disable) {
- // The user wants to delete this gateway, but there is a static route (enabled or disabled) that refers to the gateway.
- $input_errors[] = sprintf(gettext("Gateway '%s' cannot be deleted because it is in use on Static Route '%s'"), $a_gateways[$id]['name'], $route['network']);
- } else if (!isset($route['disabled'])) {
- // The user wants to disable this gateway.
- // But there is a static route that uses this gateway and is enabled (not disabled).
- $input_errors[] = sprintf(gettext("Gateway '%s' cannot be disabled because it is in use on Static Route '%s'"), $a_gateways[$id]['name'], $route['network']);
- }
- }
- }
- }
-
- if (isset($input_errors)) {
- return false;
- }
-
- return true;
-}
-
-function delete_gateway_item($id) {
- global $config, $a_gateways;
-
- if (!isset($a_gateways[$id])) {
- return;
- }
-
- /* NOTE: Cleanup static routes for the monitor ip if any */
- if (!empty($a_gateways[$id]['monitor']) &&
- $a_gateways[$id]['monitor'] != "dynamic" &&
- is_ipaddr($a_gateways[$id]['monitor']) &&
- $a_gateways[$id]['gateway'] != $a_gateways[$id]['monitor']) {
- if (is_ipaddrv4($a_gateways[$id]['monitor'])) {
- mwexec("/sbin/route delete " . escapeshellarg($a_gateways[$id]['monitor']));
- } else {
- mwexec("/sbin/route delete -inet6 " . escapeshellarg($a_gateways[$id]['monitor']));
- }
- }
-
- if ($config['interfaces'][$a_gateways[$id]['friendlyiface']]['gateway'] == $a_gateways[$id]['name']) {
- unset($config['interfaces'][$a_gateways[$id]['friendlyiface']]['gateway']);
- }
- unset($config['gateways']['gateway_item'][$a_gateways[$id]['attribute']]);
-}
-
-unset($input_errors);
-if ($_GET['act'] == "del") {
- if (can_delete_disable_gateway_item($_GET['id'])) {
- $realid = $a_gateways[$_GET['id']]['attribute'];
- delete_gateway_item($_GET['id']);
- write_config("Gateways: removed gateway {$realid}");
- mark_subsystem_dirty('staticroutes');
- header("Location: system_gateways.php");
- exit;
- }
-}
-
-if (isset($_POST['del_x'])) {
- /* delete selected items */
- if (is_array($_POST['rule']) && count($_POST['rule'])) {
- foreach ($_POST['rule'] as $rulei) {
- if (!can_delete_disable_gateway_item($rulei)) {
- break;
- }
- }
-
- if (!isset($input_errors)) {
- $items_deleted = "";
- foreach ($_POST['rule'] as $rulei) {
- delete_gateway_item($rulei);
- $items_deleted .= "{$rulei} ";
- }
- if (!empty($items_deleted)) {
- write_config("Gateways: removed gateways {$items_deleted}");
- mark_subsystem_dirty('staticroutes');
- }
- header("Location: system_gateways.php");
- exit;
- }
- }
-
-} else if ($_GET['act'] == "toggle" && $a_gateways[$_GET['id']]) {
- $realid = $a_gateways[$_GET['id']]['attribute'];
- $disable_gw = !isset($a_gateway_item[$realid]['disabled']);
- if ($disable_gw) {
- // The user wants to disable the gateway, so check if that is OK.
- $ok_to_toggle = can_delete_disable_gateway_item($_GET['id'], $disable_gw);
- } else {
- // The user wants to enable the gateway. That is always OK.
- $ok_to_toggle = true;
- }
- if ($ok_to_toggle) {
- if ($disable_gw) {
- $a_gateway_item[$realid]['disabled'] = true;
- } else {
- unset($a_gateway_item[$realid]['disabled']);
- }
-
- if (write_config("Gateways: enable/disable")) {
- mark_subsystem_dirty('staticroutes');
- }
-
- header("Location: system_gateways.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("System"), gettext("Gateways"));
-$shortcut_section = "gateways";
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="system_gateways.php" method="post">
-<script type="text/javascript" src="/javascript/row_toggle.js"></script>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('staticroutes')): ?><p>
-<?php print_info_box_np(gettext("The gateway configuration has been changed.") . "<br />" . gettext("You must apply the changes in order for them to take effect."));?><br /></p>
-<?php endif; ?>
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system gatewyas">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Gateways"), true, "system_gateways.php");
- $tab_array[1] = array(gettext("Routes"), false, "system_routes.php");
- $tab_array[2] = array(gettext("Groups"), false, "system_gateway_groups.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr id="frheader">
- <td width="2%" class="list">&nbsp;</td>
- <td width="2%" class="list">&nbsp;</td>
- <td width="15%" class="listhdrr"><?=gettext("Name"); ?></td>
- <td width="10%" class="listhdrr"><?=gettext("Interface"); ?></td>
- <td width="15%" class="listhdrr"><?=gettext("Gateway"); ?></td>
- <td width="15%" class="listhdrr"><?=gettext("Monitor IP"); ?></td>
- <td width="31%" class="listhdr"><?=gettext("Description"); ?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17"></td>
- <td>
- <a href="system_gateways_edit.php">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $textse = "</span>";
- $i = 0;
- foreach ($a_gateways as $gateway):
- if (isset($gateway['disabled']) || isset($gateway['inactive'])) {
- $textss = "<span class=\"gray\">";
- $iconfn = "pass_d";
- } else {
- $textss = "<span>";
- $iconfn = "pass";
- }
-?>
- <tr valign="top" id="fr<?=$i;?>">
- <td class="listt">
-<?php
- if (is_numeric($gateway['attribute'])):
-?>
- <input type="checkbox" id="frc<?=$i;?>" name="rule[]" value="<?=$i;?>" onclick="fr_bgcolor('<?=$i;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
-<?php
- else:
-?>
- &nbsp;
-<?php
- endif;
-?>
- </td>
- <td class="listt" align="center">
-<?php
- if (isset($gateway['inactive'])):
-?>
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_reject_d.gif" width="11" height="11" border="0"
- title="<?=gettext("This gateway is inactive because interface is missing");?>" alt="icon" />
-<?php
- elseif (is_numeric($gateway['attribute'])):
-?>
- <a href="?act=toggle&amp;id=<?=$i;?>">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0"
- title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" />
- </a>
-<?php
- else:
-?>
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0"
- title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" />
-<?php
- endif;
-?>
- </td>
- <td class="listlr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
-<?php
- echo $textss;
- echo $gateway['name'];
- if (isset($gateway['defaultgw'])) {
- echo " <strong>(default)</strong>";
- }
- echo $textse;
-?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
-<?php
- echo $textss;
- echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($gateway['friendlyiface']));
- echo $textse;
-?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
-<?php
- echo $textss;
- echo $gateway['gateway'] . " ";
- echo $textse;
-?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
-<?php
- echo $textss;
- echo htmlspecialchars($gateway['monitor']) . " ";
- echo $textse;
-?>
- </td>
-<?php
- if (is_numeric($gateway['attribute'])):
-?>
- <td class="listbg" onclick="fr_toggle(<?=$i;?>)" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
-<?php
- else:
-?>
- <td class="listbgns" onclick="fr_toggle(<?=$i;?>)" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
-<?php
- endif;
- echo $textss;
- echo htmlspecialchars($gateway['descr']) . "&nbsp;";
- echo $textse;
-?>
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td>
- <a href="system_gateways_edit.php?id=<?=$i;?>">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" />
- </a>
- </td>
-<?php
- if (is_numeric($gateway['attribute'])):
-?>
- <td>
- <a href="system_gateways.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this gateway?"); ?>')">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" />
- </a>
- </td>
-<?php
- else:
-?>
- <td width='17'></td>
-<?php
- endif;
-?>
- </tr>
- <tr>
- <td width="17"></td>
- <td>
- <a href="system_gateways_edit.php?dup=<?=$i;?>">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="7"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="edit">
- <tr>
- <td>
-<?php
- if ($i == 0):
-?>
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17"
- title="<?=gettext("delete selected items");?>" border="0" alt="delete" />
-<?php
- else:
-?>
- <input name="del" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif"
- style="width:17;height:17" title="<?=gettext("delete selected items");?>"
- onclick="return confirm('<?=gettext("Do you really want to delete the selected gateway items?");?>')" />
-<?php
- endif;
-?>
- </td>
- <td>
- <a href="system_gateways_edit.php">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="edit" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_gateways_edit.php b/usr/local/www/system_gateways_edit.php
deleted file mode 100644
index af5e7cb..0000000
--- a/usr/local/www/system_gateways_edit.php
+++ /dev/null
@@ -1,950 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_gateways_edit.php
- part of pfSense (https://www.pfsense.org)
-
- Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-system-gateways-editgateway
-##|*NAME=System: Gateways: Edit Gateway page
-##|*DESCR=Allow access to the 'System: Gateways: Edit Gateway' page.
-##|*MATCH=system_gateways_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require("pkg-utils.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_gateways.php');
-}
-
-$a_gateways = return_gateways_array(true, false, true);
-$a_gateways_arr = array();
-foreach ($a_gateways as $gw) {
- $a_gateways_arr[] = $gw;
-}
-$a_gateways = $a_gateways_arr;
-
-if (!is_array($config['gateways']['gateway_item'])) {
- $config['gateways']['gateway_item'] = array();
-}
-
-$a_gateway_item = &$config['gateways']['gateway_item'];
-$apinger_default = return_apinger_defaults();
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
- $id = $_GET['dup'];
-}
-
-if (isset($id) && $a_gateways[$id]) {
- $pconfig = array();
- $pconfig['name'] = $a_gateways[$id]['name'];
- $pconfig['weight'] = $a_gateways[$id]['weight'];
- $pconfig['interval'] = $a_gateways[$id]['interval'];
- $pconfig['avg_delay_samples'] = $a_gateways[$id]['avg_delay_samples'];
- $pconfig['avg_delay_samples_calculated'] = isset($a_gateways[$id]['avg_delay_samples_calculated']);
- $pconfig['avg_loss_samples'] = $a_gateways[$id]['avg_loss_samples'];
- $pconfig['avg_loss_samples_calculated'] = isset($a_gateways[$id]['avg_loss_samples_calculated']);
- $pconfig['avg_loss_delay_samples'] = $a_gateways[$id]['avg_loss_delay_samples'];
- $pconfig['avg_loss_delay_samples_calculated'] = isset($a_gateways[$id]['avg_loss_delay_samples_calculated']);
- $pconfig['interface'] = $a_gateways[$id]['interface'];
- $pconfig['friendlyiface'] = $a_gateways[$id]['friendlyiface'];
- $pconfig['ipprotocol'] = $a_gateways[$id]['ipprotocol'];
- if (isset($a_gateways[$id]['dynamic'])) {
- $pconfig['dynamic'] = true;
- }
- $pconfig['gateway'] = $a_gateways[$id]['gateway'];
- $pconfig['defaultgw'] = isset($a_gateways[$id]['defaultgw']);
- $pconfig['force_down'] = isset($a_gateways[$id]['force_down']);
- $pconfig['latencylow'] = $a_gateways[$id]['latencylow'];
- $pconfig['latencyhigh'] = $a_gateways[$id]['latencyhigh'];
- $pconfig['losslow'] = $a_gateways[$id]['losslow'];
- $pconfig['losshigh'] = $a_gateways[$id]['losshigh'];
- $pconfig['down'] = $a_gateways[$id]['down'];
- $pconfig['monitor'] = $a_gateways[$id]['monitor'];
- $pconfig['monitor_disable'] = isset($a_gateways[$id]['monitor_disable']);
- $pconfig['descr'] = $a_gateways[$id]['descr'];
- $pconfig['attribute'] = $a_gateways[$id]['attribute'];
- $pconfig['disabled'] = isset($a_gateways[$id]['disabled']);
-}
-
-if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
- unset($id);
- unset($pconfig['attribute']);
-}
-
-if (isset($id) && $a_gateways[$id]) {
- $realid = $a_gateways[$id]['attribute'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
-
- /* input validation */
- $reqdfields = explode(" ", "name interface");
- $reqdfieldsn = array(gettext("Name"), gettext("Interface"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (!isset($_POST['name'])) {
- $input_errors[] = "A valid gateway name must be specified.";
- }
- if (!is_validaliasname($_POST['name'])) {
- $input_errors[] = gettext("The gateway name must not contain invalid characters.");
- } else if (isset($_POST['disabled'])) {
- // We have a valid gateway name that the user wants to mark as disabled.
- // Check if the gateway name is used in any gateway group.
- if (is_array($config['gateways']['gateway_group'])) {
- foreach ($config['gateways']['gateway_group'] as $group) {
- foreach ($group['item'] as $item) {
- $items = explode("|", $item);
- if ($items[0] == $_POST['name']) {
- $input_errors[] = sprintf(gettext("Gateway '%s' cannot be disabled because it is in use on Gateway Group '%s'"), $_POST['name'], $group['name']);
- }
- }
- }
- }
-
- // Check if the gateway name is used in any enabled Static Route.
- if (is_array($config['staticroutes']['route'])) {
- foreach ($config['staticroutes']['route'] as $route) {
- if ($route['gateway'] == $_POST['name']) {
- if (!isset($route['disabled'])) {
- // There is a static route that uses this gateway and is enabled (not disabled).
- $input_errors[] = sprintf(gettext("Gateway '%s' cannot be disabled because it is in use on Static Route '%s'"), $_POST['name'], $route['network']);
- }
- }
- }
- }
- }
- /* skip system gateways which have been automatically added */
- if (($_POST['gateway'] && (!is_ipaddr($_POST['gateway'])) && ($_POST['attribute'] !== "system")) && ($_POST['gateway'] != "dynamic")) {
- $input_errors[] = gettext("A valid gateway IP address must be specified.");
- }
-
- if ($_POST['gateway'] && (is_ipaddr($_POST['gateway'])) && !$_REQUEST['isAjax']) {
- if (is_ipaddrv4($_POST['gateway'])) {
- $parent_ip = get_interface_ip($_POST['interface']);
- $parent_sn = get_interface_subnet($_POST['interface']);
- if (empty($parent_ip) || empty($parent_sn)) {
- $input_errors[] = gettext("Cannot add IPv4 Gateway Address because no IPv4 address could be found on the interface.");
- } else {
- $subnets = array(gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn);
- $vips = link_interface_to_vips($_POST['interface']);
- if (is_array($vips)) {
- foreach ($vips as $vip) {
- if (!is_ipaddrv4($vip['subnet'])) {
- continue;
- }
- $subnets[] = gen_subnet($vip['subnet'], $vip['subnet_bits']) . "/" . $vip['subnet_bits'];
- }
- }
-
- $found = false;
- foreach ($subnets as $subnet) {
- if (ip_in_subnet($_POST['gateway'], $subnet)) {
- $found = true;
- break;
- }
- }
-
- if ($found === false) {
- $input_errors[] = sprintf(gettext("The gateway address %1\$s does not lie within one of the chosen interface's subnets."), $_POST['gateway']);
- }
- }
- } else if (is_ipaddrv6($_POST['gateway'])) {
- /* do not do a subnet match on a link local address, it's valid */
- if (!is_linklocal($_POST['gateway'])) {
- $parent_ip = get_interface_ipv6($_POST['interface']);
- $parent_sn = get_interface_subnetv6($_POST['interface']);
- if (empty($parent_ip) || empty($parent_sn)) {
- $input_errors[] = gettext("Cannot add IPv6 Gateway Address because no IPv6 address could be found on the interface.");
- } else {
- $subnets = array(gen_subnetv6($parent_ip, $parent_sn) . "/" . $parent_sn);
- $vips = link_interface_to_vips($_POST['interface']);
- if (is_array($vips)) {
- foreach ($vips as $vip) {
- if (!is_ipaddrv6($vip['subnet'])) {
- continue;
- }
- $subnets[] = gen_subnetv6($vip['subnet'], $vip['subnet_bits']) . "/" . $vip['subnet_bits'];
- }
- }
-
- $found = false;
- foreach ($subnets as $subnet) {
- if (ip_in_subnet($_POST['gateway'], $subnet)) {
- $found = true;
- break;
- }
- }
-
- if ($found === false) {
- $input_errors[] = sprintf(gettext("The gateway address %1\$s does not lie within one of the chosen interface's subnets."), $_POST['gateway']);
- }
- }
- }
- }
-
- if (!empty($config['interfaces'][$_POST['interface']]['ipaddr'])) {
- if (is_ipaddr($config['interfaces'][$_POST['interface']]['ipaddr']) && (empty($_POST['gateway']) || $_POST['gateway'] == "dynamic")) {
- $input_errors[] = gettext("Dynamic gateway values cannot be specified for interfaces with a static IPv4 configuration.");
- }
- }
- if (!empty($config['interfaces'][$_POST['interface']]['ipaddrv6'])) {
- if (is_ipaddr($config['interfaces'][$_POST['interface']]['ipaddrv6']) && (empty($_POST['gateway']) || $_POST['gateway'] == "dynamic")) {
- $input_errors[] = gettext("Dynamic gateway values cannot be specified for interfaces with a static IPv6 configuration.");
- }
- }
- }
- if (($_POST['monitor'] <> "") && !is_ipaddr($_POST['monitor']) && $_POST['monitor'] != "dynamic") {
- $input_errors[] = gettext("A valid monitor IP address must be specified.");
- }
- /* only allow correct IPv4 and IPv6 gateway addresses */
- if (($_POST['gateway'] <> "") && is_ipaddr($_POST['gateway']) && $_POST['gateway'] != "dynamic") {
- if (is_ipaddrv6($_POST['gateway']) && ($_POST['ipprotocol'] == "inet")) {
- $input_errors[] = gettext("The IPv6 gateway address '{$_POST['gateway']}' can not be used as a IPv4 gateway'.");
- }
- if (is_ipaddrv4($_POST['gateway']) && ($_POST['ipprotocol'] == "inet6")) {
- $input_errors[] = gettext("The IPv4 gateway address '{$_POST['gateway']}' can not be used as a IPv6 gateway'.");
- }
- }
- /* only allow correct IPv4 and IPv6 monitor addresses */
- if (($_POST['monitor'] <> "") && is_ipaddr($_POST['monitor']) && $_POST['monitor'] != "dynamic") {
- if (is_ipaddrv6($_POST['monitor']) && ($_POST['ipprotocol'] == "inet")) {
- $input_errors[] = gettext("The IPv6 monitor address '{$_POST['monitor']}' can not be used on a IPv4 gateway'.");
- }
- if (is_ipaddrv4($_POST['monitor']) && ($_POST['ipprotocol'] == "inet6")) {
- $input_errors[] = gettext("The IPv4 monitor address '{$_POST['monitor']}' can not be used on a IPv6 gateway'.");
- }
- }
-
- if (isset($_POST['name'])) {
- /* check for overlaps */
- foreach ($a_gateways as $gateway) {
- if (isset($id) && ($a_gateways[$id]) && ($a_gateways[$id] === $gateway)) {
- if ($gateway['name'] != $_POST['name']) {
- $input_errors[] = gettext("Changing name on a gateway is not allowed.");
- }
- continue;
- }
- if ($_POST['name'] <> "") {
- if (($gateway['name'] <> "") && ($_POST['name'] == $gateway['name']) && ($gateway['attribute'] !== "system")) {
- $input_errors[] = sprintf(gettext('The gateway name "%s" already exists.'), $_POST['name']);
- break;
- }
- }
- if (is_ipaddr($_POST['gateway'])) {
- if (($gateway['gateway'] <> "") && ($_POST['gateway'] == $gateway['gateway']) && ($gateway['attribute'] !== "system")) {
- $input_errors[] = sprintf(gettext('The gateway IP address "%s" already exists.'), $_POST['gateway']);
- break;
- }
- }
- if (is_ipaddr($_POST['monitor'])) {
- if (($gateway['monitor'] <> "") && ($_POST['monitor'] == $gateway['monitor']) && ($gateway['attribute'] !== "system")) {
- $input_errors[] = sprintf(gettext('The monitor IP address "%s" is already in use. You must choose a different monitor IP.'), $_POST['monitor']);
- break;
- }
- }
- }
- }
-
- /* input validation of apinger advanced parameters */
- if ($_POST['latencylow']) {
- if (!is_numeric($_POST['latencylow'])) {
- $input_errors[] = gettext("The low latency threshold needs to be a numeric value.");
- } else {
- if ($_POST['latencylow'] < 1) {
- $input_errors[] = gettext("The low latency threshold needs to be positive.");
- }
- }
- }
-
- if ($_POST['latencyhigh']) {
- if (!is_numeric($_POST['latencyhigh'])) {
- $input_errors[] = gettext("The high latency threshold needs to be a numeric value.");
- } else {
- if ($_POST['latencyhigh'] < 1) {
- $input_errors[] = gettext("The high latency threshold needs to be positive.");
- }
- }
- }
-
- if ($_POST['losslow']) {
- if (!is_numeric($_POST['losslow'])) {
- $input_errors[] = gettext("The low Packet Loss threshold needs to be a numeric value.");
- } else {
- if ($_POST['losslow'] < 1) {
- $input_errors[] = gettext("The low Packet Loss threshold needs to be positive.");
- }
- if ($_POST['losslow'] >= 100) {
- $input_errors[] = gettext("The low Packet Loss threshold needs to be less than 100.");
- }
- }
- }
-
- if ($_POST['losshigh']) {
- if (!is_numeric($_POST['losshigh'])) {
- $input_errors[] = gettext("The high Packet Loss threshold needs to be a numeric value.");
- } else {
- if ($_POST['losshigh'] < 1) {
- $input_errors[] = gettext("The high Packet Loss threshold needs to be positive.");
- }
- if ($_POST['losshigh'] > 100) {
- $input_errors[] = gettext("The high Packet Loss threshold needs to be 100 or less.");
- }
- }
- }
-
- if (($_POST['latencylow']) && ($_POST['latencyhigh'])) {
- if ((is_numeric($_POST['latencylow'])) && (is_numeric($_POST['latencyhigh']))) {
- if (($_POST['latencylow'] > $_POST['latencyhigh'])) {
- $input_errors[] = gettext("The high latency threshold needs to be higher than the low latency threshold");
- }
- }
- } else {
- if ($_POST['latencylow']) {
- if (is_numeric($_POST['latencylow'])) {
- if ($_POST['latencylow'] > $apinger_default['latencyhigh']) {
- $input_errors[] = gettext(sprintf("The low latency threshold needs to be less than the default high latency threshold (%d)", $apinger_default['latencyhigh']));
- }
- }
- }
- if ($_POST['latencyhigh']) {
- if (is_numeric($_POST['latencyhigh'])) {
- if ($_POST['latencyhigh'] < $apinger_default['latencylow']) {
- $input_errors[] = gettext(sprintf("The high latency threshold needs to be higher than the default low latency threshold (%d)", $apinger_default['latencylow']));
- }
- }
- }
- }
-
- if (($_POST['losslow']) && ($_POST['losshigh'])) {
- if ((is_numeric($_POST['losslow'])) && (is_numeric($_POST['losshigh']))) {
- if ($_POST['losslow'] > $_POST['losshigh']) {
- $input_errors[] = gettext("The high Packet Loss threshold needs to be higher than the low Packet Loss threshold");
- }
- }
- } else {
- if ($_POST['losslow']) {
- if (is_numeric($_POST['losslow'])) {
- if ($_POST['losslow'] > $apinger_default['losshigh']) {
- $input_errors[] = gettext(sprintf("The low Packet Loss threshold needs to be less than the default high Packet Loss threshold (%d)", $apinger_default['losshigh']));
- }
- }
- }
- if ($_POST['losshigh']) {
- if (is_numeric($_POST['losshigh'])) {
- if ($_POST['losshigh'] < $apinger_default['losslow']) {
- $input_errors[] = gettext(sprintf("The high Packet Loss threshold needs to be higher than the default low Packet Loss threshold (%d)", $apinger_default['losslow']));
- }
- }
- }
- }
-
- if ($_POST['interval']) {
- if (!is_numeric($_POST['interval'])) {
- $input_errors[] = gettext("The probe interval needs to be a numeric value.");
- } else {
- if ($_POST['interval'] < 1) {
- $input_errors[] = gettext("The probe interval needs to be positive.");
- }
- }
- }
-
- if ($_POST['down']) {
- if (!is_numeric($_POST['down'])) {
- $input_errors[] = gettext("The down time setting needs to be a numeric value.");
- } else {
- if ($_POST['down'] < 1) {
- $input_errors[] = gettext("The down time setting needs to be positive.");
- }
- }
- }
-
- if (($_POST['interval']) && ($_POST['down'])) {
- if ((is_numeric($_POST['interval'])) && (is_numeric($_POST['down']))) {
- if ($_POST['interval'] > $_POST['down']) {
- $input_errors[] = gettext("The probe interval needs to be less than the down time setting.");
- }
- }
- } else {
- if ($_POST['interval']) {
- if (is_numeric($_POST['interval'])) {
- if ($_POST['interval'] > $apinger_default['down']) {
- $input_errors[] = gettext(sprintf("The probe interval needs to be less than the default down time setting (%d)", $apinger_default['down']));
- }
- }
- }
- if ($_POST['down']) {
- if (is_numeric($_POST['down'])) {
- if ($_POST['down'] < $apinger_default['interval']) {
- $input_errors[] = gettext(sprintf("The down time setting needs to be higher than the default probe interval (%d)", $apinger_default['interval']));
- }
- }
- }
- }
-
- if ($_POST['avg_delay_samples']) {
- if (!is_numeric($_POST['avg_delay_samples'])) {
- $input_errors[] = gettext("The average delay replies qty needs to be a numeric value.");
- } else {
- if ($_POST['avg_delay_samples'] < 1) {
- $input_errors[] = gettext("The average delay replies qty needs to be positive.");
- }
- }
- }
-
- if ($_POST['avg_loss_samples']) {
- if (!is_numeric($_POST['avg_loss_samples'])) {
- $input_errors[] = gettext("The average packet loss probes qty needs to be a numeric value.");
- } else {
- if ($_POST['avg_loss_samples'] < 1) {
- $input_errors[] = gettext("The average packet loss probes qty needs to be positive.");
- }
- }
- }
-
- if ($_POST['avg_loss_delay_samples']) {
- if (!is_numeric($_POST['avg_loss_delay_samples'])) {
- $input_errors[] = gettext("The lost probe delay needs to be a numeric value.");
- } else {
- if ($_POST['avg_loss_delay_samples'] < 1) {
- $input_errors[] = gettext("The lost probe delay needs to be positive.");
- }
- }
- }
-
- if (!$input_errors) {
- $reloadif = "";
- $gateway = array();
-
- if (empty($_POST['interface'])) {
- $gateway['interface'] = $pconfig['friendlyiface'];
- } else {
- $gateway['interface'] = $_POST['interface'];
- }
- if (is_ipaddr($_POST['gateway'])) {
- $gateway['gateway'] = $_POST['gateway'];
- } else {
- $gateway['gateway'] = "dynamic";
- }
- $gateway['name'] = $_POST['name'];
- $gateway['weight'] = $_POST['weight'];
- $gateway['ipprotocol'] = $_POST['ipprotocol'];
- $gateway['interval'] = $_POST['interval'];
-
- $gateway['avg_delay_samples'] = $_POST['avg_delay_samples'];
- if ($_POST['avg_delay_samples_calculated'] == "yes" || $_POST['avg_delay_samples_calculated'] == "on") {
- $gateway['avg_delay_samples_calculated'] = true;
- }
-
- $gateway['avg_loss_samples'] = $_POST['avg_loss_samples'];
- if ($_POST['avg_loss_samples_calculated'] == "yes" || $_POST['avg_loss_samples_calculated'] == "on") {
- $gateway['avg_loss_samples_calculated'] = true;
- }
-
- $gateway['avg_loss_delay_samples'] = $_POST['avg_loss_delay_samples'];
- if ($_POST['avg_loss_delay_samples_calculated'] == "yes" || $_POST['avg_loss_delay_samples_calculated'] == "on") {
- $gateway['avg_loss_delay_samples_calculated'] = true;
- }
-
- $gateway['descr'] = $_POST['descr'];
- if ($_POST['monitor_disable'] == "yes") {
- $gateway['monitor_disable'] = true;
- }
- if ($_POST['force_down'] == "yes") {
- $gateway['force_down'] = true;
- }
- if (is_ipaddr($_POST['monitor'])) {
- $gateway['monitor'] = $_POST['monitor'];
- }
-
- /* NOTE: If monitor ip is changed need to cleanup the old static route */
- if ($_POST['monitor'] != "dynamic" && !empty($a_gateway_item[$realid]) && is_ipaddr($a_gateway_item[$realid]['monitor']) &&
- $_POST['monitor'] != $a_gateway_item[$realid]['monitor'] && $gateway['gateway'] != $a_gateway_item[$realid]['monitor']) {
- if (is_ipaddrv4($a_gateway_item[$realid]['monitor'])) {
- mwexec("/sbin/route delete " . escapeshellarg($a_gateway_item[$realid]['monitor']));
- } else {
- mwexec("/sbin/route delete -inet6 " . escapeshellarg($a_gateway_item[$realid]['monitor']));
- }
- }
-
- if ($_POST['defaultgw'] == "yes" || $_POST['defaultgw'] == "on") {
- $i = 0;
- /* remove the default gateway bits for all gateways with the same address family */
- foreach ($a_gateway_item as $gw) {
- if ($gateway['ipprotocol'] == $gw['ipprotocol']) {
- unset($config['gateways']['gateway_item'][$i]['defaultgw']);
- if ($gw['interface'] != $_POST['interface'] && $gw['defaultgw']) {
- $reloadif = $gw['interface'];
- }
- }
- $i++;
- }
- $gateway['defaultgw'] = true;
- }
-
- if ($_POST['latencylow']) {
- $gateway['latencylow'] = $_POST['latencylow'];
- }
- if ($_POST['latencyhigh']) {
- $gateway['latencyhigh'] = $_POST['latencyhigh'];
- }
- if ($_POST['losslow']) {
- $gateway['losslow'] = $_POST['losslow'];
- }
- if ($_POST['losshigh']) {
- $gateway['losshigh'] = $_POST['losshigh'];
- }
- if ($_POST['down']) {
- $gateway['down'] = $_POST['down'];
- }
-
- if (isset($_POST['disabled'])) {
- $gateway['disabled'] = true;
- } else {
- unset($gateway['disabled']);
- }
-
- /* when saving the manual gateway we use the attribute which has the corresponding id */
- if (isset($realid) && $a_gateway_item[$realid]) {
- $a_gateway_item[$realid] = $gateway;
- } else {
- $a_gateway_item[] = $gateway;
- }
-
- mark_subsystem_dirty('staticroutes');
-
- write_config();
-
- if ($_REQUEST['isAjax']) {
- echo $_POST['name'];
- exit;
- } else if (!empty($reloadif)) {
- send_event("interface reconfigure {$reloadif}");
- }
-
- header("Location: system_gateways.php");
- exit;
- } else {
- if ($_REQUEST['isAjax']) {
- header("HTTP/1.0 500 Internal Server Error");
- header("Content-type: text/plain");
- foreach ($input_errors as $error) {
- echo("$error\n");
- }
- exit;
- }
-
- $pconfig = $_POST;
- if (empty($_POST['friendlyiface'])) {
- $pconfig['friendlyiface'] = $_POST['interface'];
- }
- }
-}
-
-
-$pgtitle = array(gettext("System"), gettext("Gateways"), gettext("Edit gateway"));
-$shortcut_section = "gateways";
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-function show_advanced_gateway() {
- document.getElementById("showadvgatewaybox").innerHTML='';
- aodiv = document.getElementById('showgatewayadv');
- aodiv.style.display = "block";
-}
-function monitor_change() {
- document.iform.monitor.disabled = document.iform.monitor_disable.checked;
-}
-
-function interval_change(interval_obj) {
- valid_value(interval_obj, 1, 86400);
- calculate_state_change();
-
- calculated_change(document.iform.avg_delay_samples_calculated, document.iform.avg_delay_samples);
- calculated_change(document.iform.avg_loss_samples_calculated, document.iform.avg_loss_samples);
- calculated_change(document.iform.avg_loss_delay_samples_calculated, document.iform.avg_loss_delay_samples);
-}
-
-function samples_change(calculated_obj, samples_obj) {
- calculated_change(calculated_obj, samples_obj);
-}
-
-function calculated_change(calculated_obj, samples_obj) {
- switch (samples_obj.name) {
-
- case 'avg_delay_samples':
- // How many replies should be used to compute average delay
- // for controlling "delay" alarms.
- // Calculate a reasonable value based on gateway probe interval and RRD 1 minute average graph step size (60).
- if (calculated_obj.checked && (document.iform.interval.value > 0)) {
- samples_obj.value = 60 * (1/6) / Math.pow(document.iform.interval.value, 0.333); // Calculate & Round to Integer
- }
- valid_value(samples_obj, 1, 100);
- break;
-
- case 'avg_loss_samples':
- // How many probes should be used to compute average loss.
- // Calculate a reasonable value based on gateway probe interval and RRD 1 minute average graph step size (60).
- if (calculated_obj.checked && (document.iform.interval.value > 0)) {
- samples_obj.value = 60 / document.iform.interval.value; // Calculate & Round to Integer
- }
- valid_value(samples_obj, 1, 1000);
- break;
-
- case 'avg_loss_delay_samples':
- // The delay (in samples) after which loss is computed
- // without this delays larger than interval would be treated as loss.
- // Calculate a reasonable value based on gateway probe interval and RRD 1 minute average graph step size (60).
- if (calculated_obj.checked && (document.iform.interval.value > 0)) {
- samples_obj.value = 60 * (1/3) / document.iform.interval.value; // Calculate & Round to Integer
- }
- valid_value(samples_obj, 1, 200);
- break;
- default:
- }
-
- calculate_state_change();
-}
-
-function valid_value(object, min, max) {
- if (object.value) {
- object.value = Math.round(object.value); // Round to integer
- if (object.value < min) object.value = min; // Min Value
- if (object.value > max) object.value = max; // Max Value
- if (isNaN(object.value)) object.value = ''; // Empty Value
- }
-}
-
-function calculate_state_change() {
- if (document.iform.interval.value > 0) {
- document.iform.avg_delay_samples_calculated.disabled = false;
- document.iform.avg_loss_samples_calculated.disabled = false;
- document.iform.avg_loss_delay_samples_calculated.disabled = false;
-
- document.iform.avg_delay_samples.disabled = document.iform.avg_delay_samples_calculated.checked;
- document.iform.avg_loss_samples.disabled = document.iform.avg_loss_samples_calculated.checked;
- document.iform.avg_loss_delay_samples.disabled = document.iform.avg_loss_delay_samples_calculated.checked;
- } else {
- document.iform.avg_delay_samples_calculated.disabled = true;
- document.iform.avg_loss_samples_calculated.disabled = true;
- document.iform.avg_loss_delay_samples_calculated.disabled = true;
- document.iform.interval.value = '';
-
- document.iform.avg_delay_samples.disabled = false;
- document.iform.avg_loss_samples.disabled = false;
- document.iform.avg_loss_delay_samples.disabled = false;
-
- document.iform.avg_delay_samples_calculated.checked = false;
- document.iform.avg_loss_samples_calculated.checked = false;
- document.iform.avg_loss_delay_samples_calculated.checked = false;
- }
-}
-
-function enable_change() {
- document.iform.avg_delay_samples.disabled = false;
- document.iform.avg_loss_samples.disabled = false;
- document.iform.avg_loss_delay_samples.disabled = false;
-}
-//]]>
-</script>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
- <form action="system_gateways_edit.php" method="post" name="iform" id="iform">
- <?php
-
- /* If this is a system gateway we need this var */
- if (($pconfig['attribute'] == "system") || is_numeric($pconfig['attribute'])) {
- echo "<input type='hidden' name='attribute' id='attribute' value=\"" . htmlspecialchars($pconfig['attribute']) . "\" />\n";
- }
- echo "<input type='hidden' name='friendlyiface' id='friendlyiface' value=\"" . htmlspecialchars($pconfig['friendlyiface']) . "\" />\n";
- ?>
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="system gateways edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit gateway"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled");?></td>
- <td width="78%" class="vtable">
- <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable this gateway");?></strong><br />
- <span class="vexpl"><?=gettext("Set this option to disable this gateway without removing it from the list.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
- <td width="78%" class="vtable">
- <select name='interface' class='formselect'>
- <?php
- $interfaces = get_configured_interface_with_descr(false, true);
- foreach ($interfaces as $iface => $ifacename) {
- echo "<option value=\"{$iface}\"";
- if ($iface == $pconfig['friendlyiface']) {
- echo " selected='selected'";
- }
- echo ">" . htmlspecialchars($ifacename) . "</option>";
- }
- ?>
- </select><br />
- <span class="vexpl"><?=gettext("Choose which interface this gateway applies to."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Address Family"); ?></td>
- <td width="78%" class="vtable">
- <select name='ipprotocol' class='formselect' >
- <?php
- $options = array("inet" => "IPv4", "inet6" => "IPv6");
- foreach ($options as $name => $string) {
- echo "<option value=\"{$name}\"";
- if ($name == $pconfig['ipprotocol']) {
- echo " selected='selected'";
- }
- echo ">" . htmlspecialchars($string) . "</option>\n";
- }
- ?>
- </select><br />
- <span class="vexpl"><?=gettext("Choose the Internet Protocol this gateway uses."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
- <td width="78%" class="vtable">
- <input name="name" type="text" class="formfld unknown" id="name" size="20" value="<?=htmlspecialchars($pconfig['name']);?>" />
- <br /><span class="vexpl"><?=gettext("Gateway name"); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Gateway"); ?></td>
- <td width="78%" class="vtable">
- <input name="gateway" type="text" class="formfld host" id="gateway" size="28" value="<?php if ($pconfig['dynamic']) echo "dynamic"; else echo htmlspecialchars($pconfig['gateway']); ?>" />
- <br /><span class="vexpl"><?=gettext("Gateway IP address"); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Default Gateway"); ?></td>
- <td width="78%" class="vtable">
- <input name="defaultgw" type="checkbox" id="defaultgw" value="yes" <?php if ($pconfig['defaultgw'] == true) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Default Gateway"); ?></strong><br />
- <?=gettext("This will select the above gateway as the default gateway"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Disable Gateway Monitoring"); ?></td>
- <td width="78%" class="vtable">
- <input name="monitor_disable" type="checkbox" id="monitor_disable" value="yes" <?php if ($pconfig['monitor_disable'] == true) echo "checked=\"checked\""; ?> onclick="monitor_change()" />
- <strong><?=gettext("Disable Gateway Monitoring"); ?></strong><br />
- <?=gettext("This will consider this gateway as always being up"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Monitor IP"); ?></td>
- <td width="78%" class="vtable">
- <?php
- if ($pconfig['gateway'] == $pconfig['monitor']) {
- $monitor = "";
- } else {
- $monitor = htmlspecialchars($pconfig['monitor']);
- }
- ?>
- <input name="monitor" type="text" id="monitor" value="<?php echo htmlspecialchars($monitor); ?>" size="28" />
- <strong><?=gettext("Alternative monitor IP"); ?></strong> <br />
- <?=gettext("Enter an alternative address here to be used to monitor the link. This is used for the " .
- "quality RRD graphs as well as the load balancer entries. Use this if the gateway does not respond " .
- "to ICMP echo requests (pings)"); ?>.
- <br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Mark Gateway as Down"); ?></td>
- <td width="78%" class="vtable">
- <input name="force_down" type="checkbox" id="force_down" value="yes" <?php if ($pconfig['force_down'] == true) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Mark Gateway as Down"); ?></strong><br />
- <?=gettext("This will force this gateway to be considered Down"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Advanced");?></td>
- <td width="78%" class="vtable">
- <?php $showbutton = (!empty($pconfig['latencylow']) || !empty($pconfig['latencyhigh']) || !empty($pconfig['losslow']) || !empty($pconfig['losshigh']) || (isset($pconfig['weight']) && $pconfig['weight'] > 1) || (isset($pconfig['interval']) && ($pconfig['interval'] > $apinger_default['interval'])) || (isset($pconfig['down']) && !($pconfig['down'] == $apinger_default['down']))); ?>
- <div id="showadvgatewaybox" <?php if ($showbutton) echo "style='display:none'"; ?>>
- <input type="button" onclick="show_advanced_gateway()" value="Advanced" /><?=gettext(" - Show advanced option"); ?>
- </div>
- <div id="showgatewayadv" <?php if (!$showbutton) echo "style='display:none'"; ?>>
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="6" summary="advanced options">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Weight");?></td>
- <td width="78%" class="vtable">
- <select name='weight' class='formfldselect' id='weight'>
- <?php
- for ($i = 1; $i < 6; $i++) {
- $selected = "";
- if ($pconfig['weight'] == $i) {
- $selected = "selected='selected'";
- }
- echo "<option value='{$i}' {$selected} >{$i}</option>";
- }
- ?>
- </select>
- <br /><?=gettext("Weight for this gateway when used in a Gateway Group.");?> <br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Latency thresholds");?></td>
- <td width="78%" class="vtable">
- <?=gettext("From");?>
- <input name="latencylow" type="text" class="formfld unknown" id="latencylow" size="2"
- value="<?=htmlspecialchars($pconfig['latencylow']);?>" />
- <?=gettext("To");?>
- <input name="latencyhigh" type="text" class="formfld unknown" id="latencyhigh" size="2"
- value="<?=htmlspecialchars($pconfig['latencyhigh']);?>" />
- <br /><span class="vexpl"><?=gettext(sprintf("Low and high thresholds for latency in milliseconds. Default is %d/%d.", $apinger_default['latencylow'], $apinger_default['latencyhigh']));?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Packet Loss thresholds");?></td>
- <td width="78%" class="vtable">
- <?=gettext("From");?>
- <input name="losslow" type="text" class="formfld unknown" id="losslow" size="2"
- value="<?=htmlspecialchars($pconfig['losslow']);?>" />
- <?=gettext("To");?>
- <input name="losshigh" type="text" class="formfld unknown" id="losshigh" size="2"
- value="<?=htmlspecialchars($pconfig['losshigh']);?>" />
- <br /><span class="vexpl"><?=gettext(sprintf("Low and high thresholds for packet loss in %%. Default is %d/%d.", $apinger_default['losslow'], $apinger_default['losshigh']));?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Probe Interval");?></td>
- <td width="78%" class="vtable">
- <input name="interval" type="text" class="formfld unknown" id="interval" size="2"
- value="<?=htmlspecialchars($pconfig['interval']);?>" onchange="interval_change(this)" />
- <br />
- <span class="vexpl">
- <?=gettext(sprintf("How often that an ICMP probe will be sent in seconds. Default is %d.", $apinger_default['interval']));?><br /><br />
- <?=gettext("NOTE: The quality graph is averaged over seconds, not intervals, so as the probe interval is increased the accuracy of the quality graph is decreased.");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Down");?></td>
- <td width="78%" class="vtable">
- <input name="down" type="text" class="formfld unknown" id="down" size="2"
- value="<?=htmlspecialchars($pconfig['down']);?>" />
- <br /><span class="vexpl"><?=gettext(sprintf("The number of seconds of failed probes before the alarm will fire. Default is %d.", $apinger_default['down']));?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Average Delay Replies Qty");?></td>
- <td width="78%" class="vtable">
- <input name="avg_delay_samples" type="text" class="formfld unknown" id="avg_delay_samples" size="2"
- value="<?=htmlspecialchars($pconfig['avg_delay_samples']);?>" onchange="samples_change(document.iform.avg_delay_samples_calculated, this)" />
- <input name="avg_delay_samples_calculated" type="checkbox" id="avg_delay_samples_calculated" value="yes" <?php if ($pconfig['avg_delay_samples_calculated'] == true) echo "checked=\"checked\""; ?> onclick="calculated_change(this, document.iform.avg_delay_samples)" />
- <?=gettext("Use calculated value."); ?>
- <br /><span class="vexpl"><?=gettext(sprintf("How many replies should be used to compute average delay for controlling \"delay\" alarms? Default is %d.", $apinger_default['avg_delay_samples']));?><br /><br /></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Average Packet Loss Probes Qty");?></td>
- <td width="78%" class="vtable">
- <input name="avg_loss_samples" type="text" class="formfld unknown" id="avg_loss_samples" size="2"
- value="<?=htmlspecialchars($pconfig['avg_loss_samples']);?>" onchange="samples_change(document.iform.avg_loss_samples_calculated, this)" />
- <input name="avg_loss_samples_calculated" type="checkbox" id="avg_loss_samples_calculated" value="yes" <?php if ($pconfig['avg_loss_samples_calculated'] == true) echo "checked=\"checked\""; ?> onclick="calculated_change(this, document.iform.avg_loss_samples)" />
- <?=gettext("Use calculated value."); ?>
- <br /><span class="vexpl"><?=gettext(sprintf("How many probes should be useds to compute average packet loss? Default is %d.", $apinger_default['avg_loss_samples']));?><br /><br /></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Lost Probe Delay");?></td>
- <td width="78%" class="vtable">
- <input name="avg_loss_delay_samples" type="text" class="formfld unknown" id="avg_loss_delay_samples" size="2"
- value="<?=htmlspecialchars($pconfig['avg_loss_delay_samples']);?>" onchange="samples_change(document.iform.avg_loss_delay_samples_calculated, this)" />
- <input name="avg_loss_delay_samples_calculated" type="checkbox" id="avg_loss_delay_samples_calculated" value="yes" <?php if ($pconfig['avg_loss_delay_samples_calculated'] == true) echo "checked=\"checked\""; ?> onclick="calculated_change(this, document.iform.avg_loss_delay_samples)" />
- <?=gettext("Use calculated value."); ?>
- <br /><span class="vexpl"><?=gettext(sprintf("The delay (in qty of probe samples) after which loss is computed. Without this, delays longer than the probe interval would be treated as packet loss. Default is %d.", $apinger_default['avg_loss_delay_samples']));?><br /><br /></span>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <?= gettext("The probe interval must be less than the down time, otherwise the gateway will seem to go down then come up again at the next probe."); ?><br /><br />
- <?= gettext("The down time defines the length of time before the gateway is marked as down, but the accuracy is controlled by the probe interval. For example, if your down time is 40 seconds but on a 30 second probe interval, only one probe would have to fail before the gateway is marked down at the 40 second mark. By default, the gateway is considered down after 10 seconds, and the probe interval is 1 second, so 10 probes would have to fail before the gateway is marked down."); ?><br />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br /><span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change()" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_gateways[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </form>
-<?php include("fend.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-monitor_change();
-calculate_state_change();
-//]]>
-</script>
-</body>
-</html>
diff --git a/usr/local/www/system_groupmanager.php b/usr/local/www/system_groupmanager.php
deleted file mode 100644
index 17b0f73..0000000
--- a/usr/local/www/system_groupmanager.php
+++ /dev/null
@@ -1,607 +0,0 @@
-<?php
-/*
- $Id: system_groupmanager.php
- part of m0n0wall (http://m0n0.ch/wall)
- part of pfSense
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Copyright (C) 2008 Shrew Soft Inc.
- All rights reserved.
-
- Copyright (C) 2005 Paul Taylor <paultaylor@winn-dixie.com>.
- All rights reserved.
-
- Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: auth
-*/
-
-##|+PRIV
-##|*IDENT=page-system-groupmanager
-##|*NAME=System: Group manager page
-##|*DESCR=Allow access to the 'System: Group manager' page.
-##|*MATCH=system_groupmanager.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$pgtitle = array(gettext("System"), gettext("Group manager"));
-
-if (!is_array($config['system']['group'])) {
- $config['system']['group'] = array();
-}
-
-$a_group = &$config['system']['group'];
-
-unset($id);
-if (isset($_POST['groupid']) && is_numericint($_POST['groupid'])) {
- $id = $_POST['groupid'];
-}
-
-$act = (isset($_POST['act']) ? $_POST['act'] : '');
-
-if ($act == "delgroup") {
-
- if (!isset($id) || !isset($_POST['groupname']) || !isset($a_group[$id]) || ($_POST['groupname'] != $a_group[$id]['name'])) {
- pfSenseHeader("system_groupmanager.php");
- exit;
- }
-
- conf_mount_rw();
- local_group_del($a_group[$id]);
- conf_mount_ro();
- $groupdeleted = $a_group[$id]['name'];
- unset($a_group[$id]);
- write_config();
- $savemsg = gettext("Group") . " {$groupdeleted} " .
- gettext("successfully deleted") . "<br />";
-}
-
-if ($act == "delpriv") {
-
- if (!isset($id) || !isset($a_group[$id])) {
- pfSenseHeader("system_groupmanager.php");
- exit;
- }
-
- $privdeleted = $priv_list[$a_group[$id]['priv'][$_POST['privid']]]['name'];
- unset($a_group[$id]['priv'][$_POST['privid']]);
-
- if (is_array($a_group[$id]['member'])) {
- foreach ($a_group[$id]['member'] as $uid) {
- $user = getUserEntryByUID($uid);
- if ($user) {
- local_user_set($user);
- }
- }
- }
-
- write_config();
- $act = "edit";
- $savemsg = gettext("Privilege") . " {$privdeleted} " .
- gettext("successfully deleted") . "<br />";
-}
-
-if ($act == "edit") {
- if (isset($id) && isset($a_group[$id])) {
- $pconfig['name'] = $a_group[$id]['name'];
- $pconfig['gid'] = $a_group[$id]['gid'];
- $pconfig['gtype'] = $a_group[$id]['scope'];
- $pconfig['description'] = $a_group[$id]['description'];
- $pconfig['members'] = $a_group[$id]['member'];
- $pconfig['priv'] = $a_group[$id]['priv'];
- }
-}
-
-if (isset($_POST['dellall_x'])) {
-
- $del_groups = $_POST['delete_check'];
-
- if (!empty($del_groups)) {
- foreach ($del_groups as $groupid) {
- if (isset($a_group[$groupid]) && $a_group[$groupid]['scope'] != "system") {
- conf_mount_rw();
- local_group_del($a_group[$groupid]);
- conf_mount_ro();
- unset($a_group[$groupid]);
- }
- }
- $savemsg = gettext("Selected groups removed successfully!");
- write_config($savemsg);
- }
-}
-
-if (isset($_POST['save'])) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "groupname");
- $reqdfieldsn = array(gettext("Group Name"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (preg_match("/[^a-zA-Z0-9\.\-_ ]/", $_POST['groupname'])) {
- $input_errors[] = gettext("The group name contains invalid characters.");
- }
-
- if (strlen($_POST['groupname']) > 16) {
- $input_errors[] = gettext("The group name is longer than 16 characters.");
- }
-
- if (!$input_errors && !(isset($id) && $a_group[$id])) {
- /* make sure there are no dupes */
- foreach ($a_group as $group) {
- if ($group['name'] == $_POST['groupname']) {
- $input_errors[] = gettext("Another entry with the same group name already exists.");
- break;
- }
- }
- }
-
- if (!$input_errors) {
- $group = array();
- if (isset($id) && $a_group[$id]) {
- $group = $a_group[$id];
- }
-
- $group['name'] = $_POST['groupname'];
- $group['description'] = $_POST['description'];
-
- if (empty($_POST['members'])) {
- unset($group['member']);
- } else if ($group['gid'] != 1998) { // all group
- $group['member'] = $_POST['members'];
- }
-
- if (isset($id) && $a_group[$id]) {
- $a_group[$id] = $group;
- } else {
- $group['gid'] = $config['system']['nextgid']++;
- $a_group[] = $group;
- }
-
- conf_mount_rw();
- local_group_set($group);
- conf_mount_ro();
-
- /* Refresh users in this group since their privileges may have changed. */
- if (is_array($group['member'])) {
- $a_user = &$config['system']['user'];
- foreach ($a_user as & $user) {
- if (in_array($user['uid'], $group['member'])) {
- local_user_set($user);
- }
- }
- }
-
- write_config();
-
- header("Location: system_groupmanager.php");
- exit;
- }
-}
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript" src="/javascript/row_toggle.js"></script>
-<script type="text/javascript">
-//<![CDATA[
-
-function setall_selected(id) {
- selbox = document.getElementById(id);
- count = selbox.options.length;
- for (index = 0; index<count; index++) {
- selbox.options[index].selected = true;
- }
-}
-
-function delete_empty(id) {
- selbox = document.getElementById(id);
- count = selbox.options.length;
- for (index = 0; index<count; index++) {
- if (selbox.options[index].value == '') {
- selbox.remove(index);
- }
- }
-}
-
-function clear_selected(id) {
- selbox = document.getElementById(id);
- count = selbox.options.length;
- for (index = 0; index<count; index++) {
- selbox.options[index].selected = false;
- }
-}
-
-function remove_selected(id) {
- selbox = document.getElementById(id);
- index = selbox.options.length - 1;
- for (; index >= 0; index--) {
- if (selbox.options[index].selected) {
- selbox.remove(index);
- }
- }
-}
-
-function copy_selected(srcid, dstid) {
- src_selbox = document.getElementById(srcid);
- dst_selbox = document.getElementById(dstid);
- count = dst_selbox.options.length;
- for (index = count - 1; index >= 0; index--) {
- if (dst_selbox.options[index].value == '') {
- dst_selbox.remove(index);
- }
- }
- count = src_selbox.options.length;
- for (index = 0; index < count; index++) {
- if (src_selbox.options[index].selected) {
- option = document.createElement('option');
- option.text = src_selbox.options[index].text;
- option.value = src_selbox.options[index].value;
- dst_selbox.add(option, null);
- }
- }
-}
-
-function move_selected(srcid, dstid) {
- copy_selected(srcid, dstid);
- remove_selected(srcid);
-}
-
-function presubmit() {
- delete_empty('members');
- delete_empty('notmembers');
- clear_selected('notmembers');
- setall_selected('members');
-}
-
-//]]>
-</script>
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="group manager">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Users"), false, "system_usermanager.php");
- $tab_array[] = array(gettext("Groups"), true, "system_groupmanager.php");
- $tab_array[] = array(gettext("Settings"), false, "system_usermanager_settings.php");
- $tab_array[] = array(gettext("Servers"), false, "system_authservers.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
-
-<?php
- if ($act == "new" || $act == "edit"):
-?>
- <form action="system_groupmanager.php" method="post" name="iform" id="iform" onsubmit="presubmit()">
- <input type="hidden" id="act" name="act" value="" />
- <input type="hidden" id="groupid" name="groupid" value="<?=(isset($id) ? $id : '');?>" />
- <input type="hidden" id="privid" name="privid" value="" />
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
-<?php
- $ro = "";
- if ($pconfig['gtype'] == "system") {
- $ro = "readonly=\"readonly\"";
- }
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Defined by");?></td>
- <td width="78%" class="vtable">
- <strong><?=strtoupper($pconfig['gtype']);?></strong>
- <input name="gtype" type="hidden" value="<?=htmlspecialchars($pconfig['gtype'])?>"/>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Group name");?></td>
- <td width="78%" class="vtable">
- <input name="groupname" type="text" class="formfld group" id="groupname" size="20" maxlength="16" value="<?=htmlspecialchars($pconfig['name']);?>" <?=$ro;?> />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" class="vtable">
- <input name="description" type="text" class="formfld unknown" id="description" size="20" value="<?=htmlspecialchars($pconfig['description']);?>" />
- <br />
- <?=gettext("Group description, for your own information only");?>
- </td>
- </tr>
-<?php
- if ($pconfig['gid'] != 1998): // all users group
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Group Memberships");?></td>
- <td width="78%" class="vtable" align="center">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="membership">
- <tr>
- <td align="center" width="50%">
- <strong><?=gettext("Not Members");?></strong><br />
- <br />
- <select size="10" style="width: 75%" name="notmembers[]" class="formselect" id="notmembers" onchange="clear_selected('members')" multiple="multiple">
-<?php
- $rowIndex = 0;
- foreach ($config['system']['user'] as $user):
- if (is_array($pconfig['members']) && in_array($user['uid'], $pconfig['members'])) {
- continue;
- }
- $rowIndex++;
-?>
- <option value="<?=$user['uid'];?>" <?=$selected;?>>
- <?=htmlspecialchars($user['name']);?>
- </option>
-<?php
- endforeach;
- if ($rowIndex == 0) {
- echo "<option></option>";
- }
-?>
- </select>
- <br />
- </td>
- <td>
- <br />
- <a href="javascript:move_selected('notmembers', 'members')">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_right.gif" title="<?=gettext("Add Members");?>" alt="<?=gettext("Add Members");?>" width="17" height="17" border="0" />
- </a>
- <br /><br />
- <a href="javascript:move_selected('members', 'notmembers')">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_left.gif" title="<?=gettext("Remove Members");?>" alt="<?=gettext("Remove Members");?>" width="17" height="17" border="0" />
- </a>
- </td>
- <td align="center" width="50%">
- <strong><?=gettext("Members");?></strong><br />
- <br />
- <select size="10" style="width: 75%" name="members[]" class="formselect" id="members" onchange="clear_selected('notmembers')" multiple="multiple">
-<?php
- $rowIndex = 0;
- foreach ($config['system']['user'] as $user):
- if (!(is_array($pconfig['members']) && in_array($user['uid'], $pconfig['members']))) {
- continue;
- }
- $rowIndex++;
-?>
- <option value="<?=$user['uid'];?>">
- <?=htmlspecialchars($user['name']);?>
- </option>
-<?php
- endforeach;
- if ($rowIndex == 0) {
- echo "<option></option>";
- }
-?>
- </select>
- <br />
- </td>
- </tr>
- </table>
- <?=gettext("Hold down CTRL (pc)/COMMAND (mac) key to select multiple items");?>
- </td>
- </tr>
-<?php
- endif;
- if ($act != "new"):
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Assigned Privileges");?></td>
- <td width="78%" class="vtable">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="privileges">
- <tr>
- <td width="40%" class="listhdrr"><?=gettext("Name");?></td>
- <td width="60%" class="listhdrr"><?=gettext("Description");?></td>
- <td class="list"></td>
- </tr>
-<?php
- if (is_array($pconfig['priv'])):
- $i = 0;
- foreach ($pconfig['priv'] as $priv):
-?>
- <tr>
- <td class="listr">
- <?=htmlspecialchars($priv_list[$priv]['name']);?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($priv_list[$priv]['descr']);?>
- </td>
- <td valign="middle" class="list nowrap">
- <input type="image" name="delpriv[]" width="17" height="17" border="0"
- src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif"
- onclick="document.getElementById('privid').value='<?=$i;?>';
- document.getElementById('groupid').value='<?=$id;?>';
- document.getElementById('act').value='<?php echo "delpriv";?>';
- return confirm('<?=gettext("Do you really want to delete this privilege?");?>');"
- title="<?=gettext("delete privilege");?>" />
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
- endif;
-?>
- <tr>
- <td class="list" colspan="2"></td>
- <td class="list">
- <a href="system_groupmanager_addprivs.php?groupid=<?=htmlspecialchars($id)?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" />
- </a>
-
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- endif;
-?>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='/system_groupmanager.php'" />
- <?php if (isset($id) && $a_group[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <input name="gid" type="hidden" value="<?=htmlspecialchars($pconfig['gid']);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </form>
-<?php
- else:
-?>
- <form action="system_groupmanager.php" method="post" name="iform2" id="iform2">
- <input type="hidden" id="act" name="act" value="" />
- <input type="hidden" id="groupid" name="groupid" value="<?=(isset($id) ? $id : '');?>" />
- <input type="hidden" id="groupname" name="groupname" value="" />
- <table class="sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="">
- <thead>
- <tr>
- <th width="5%" class="list">&nbsp;</th>
- <th width="25%" class="listhdrr"><?=gettext("Group name");?></th>
- <th width="25%" class="listhdrr"><?=gettext("Description");?></th>
- <th width="30%" class="listhdrr"><?=gettext("Member Count");?></th>
- <th width="10%" class="list"></th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <td class="list" colspan="4"></td>
- <td class="list">
- <input type="image" name="addcert" width="17" height="17" border="0"
- src="/themes/<?=$g['theme'];?>/images/icons/icon_plus.gif"
- onclick="document.getElementById('act').value='<?php echo "new";?>';"
- title="<?=gettext("add group");?>" />
- <input type="image" src="/themes/<?= $g['theme'];?>/images/icons/icon_x.gif" name="dellall" title="<?=gettext('Delete selected groups')?>" onClick="return confirm('<?=gettext("Do you really want to delete selected groups?");?>')" />
- </td>
- </tr>
- <tr>
- <td colspan="4">
- <p>
- <?=gettext("Additional webConfigurator groups can be added here.
- Group permissions can be assigned which are inherited by users who are members of the group.
- An icon that appears grey indicates that it is a system defined object.
- Some system object properties can be modified but they cannot be deleted.");?>
- </p>
- </td>
- </tr>
- </tfoot>
- <tbody>
-<?php
- $i = 0;
- foreach ($a_group as $group):
- if ($group['scope'] == "system") {
- $grpimg = "/themes/{$g['theme']}/images/icons/icon_system-group-grey.png";
- } else {
- $grpimg = "/themes/{$g['theme']}/images/icons/icon_system-group.png";
- }
- $groupcount = count($group['member']);
- if ($group["name"] == "all") {
- $groupcount = count($config['system']['user']);
- }
-?>
- <tr ondblclick="document.getElementById('act').value='<?php echo "edit";?>';
- document.getElementById('groupid').value='<?=$i;?>';
- document.iform2.submit();" id="fr<?=$i?>">
- <td class="list" id="frd<?=$i?>">
- <?php if ($group['scope'] != "system") : ?>
- <input type="checkbox" id="frc<?=$i?>" onclick="fr_bgcolor(<?=$i?>)" name="delete_check[]" value="<?=$i?>" />
- <?php endif; ?>
- </td>
- <td class="listlr" id="frd<?=$i?>" onclick="fr_toggle(<?=$i?>)">
- <table border="0" cellpadding="0" cellspacing="0" summary="">
- <tr>
- <td align="left" valign="middle">
- <img src="<?=$grpimg;?>" alt="<?=gettext("User");?>" title="<?=gettext("User");?>" border="0" height="16" width="16" />
- </td>
- <td align="left" valign="middle">
- <?=htmlspecialchars($group['name']); ?>&nbsp;
- </td>
- </tr>
- </table>
- </td>
- <td class="listr" id="frd<?=$i?>" onclick="fr_toggle(<?=$i?>)">
- <?=htmlspecialchars($group['description']);?>&nbsp;
- </td>
- <td class="listbg" onclick="fr_toggle(<?=$i?>)">
- <?=$groupcount;?>
- </td>
- <td valign="middle" class="list nowrap">
- <input type="image" name="editgroup[]" width="17" height="17" border="0"
- src="/themes/<?=$g['theme'];?>/images/icons/icon_e.gif"
- onclick="document.getElementById('groupid').value='<?=$i;?>';
- document.getElementById('act').value='<?php echo "edit";?>';"
- title="<?=gettext("edit group");?>" />
- &nbsp;
-<?php
- if ($group['scope'] != "system"):
-?>
- <input type="image" name="delgroup[]" width="17" height="17" border="0"
- src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif"
- onclick="document.getElementById('groupid').value='<?=$i;?>';
- document.getElementById('groupname').value='<?=$group['name'];?>';
- document.getElementById('act').value='<?php echo "delgroup";?>';
- return confirm('<?=gettext("Do you really want to delete this group?");?>');"
- title="<?=gettext("delete group");?>" />
-<?php
- endif;
-?>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- </tbody>
- </table>
- </form>
-<?php
- endif;
-?>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_groupmanager_addprivs.php b/usr/local/www/system_groupmanager_addprivs.php
deleted file mode 100644
index 830d025..0000000
--- a/usr/local/www/system_groupmanager_addprivs.php
+++ /dev/null
@@ -1,255 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_groupmanager_addprivs.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2006 Daniel S. Haischt.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: auth
-*/
-
-##|+PRIV
-##|*IDENT=page-system-groupmanager-addprivs
-##|*NAME=System: Group Manager: Add Privileges page
-##|*DESCR=Allow access to the 'System: Group Manager: Add Privileges' page.
-##|*MATCH=system_groupmanager_addprivs.php*
-##|-PRIV
-
-function cpusercmp($a, $b) {
- return strcasecmp($a['name'], $b['name']);
-}
-
-function admin_groups_sort() {
- global $config;
-
- if (!is_array($config['system']['group'])) {
- return;
- }
-
- usort($config['system']['group'], "cpusercmp");
-}
-
-require("guiconfig.inc");
-
-$pgtitle = array(gettext("System"), gettext("Group manager"), gettext("Add privileges"));
-
-if (is_numericint($_GET['groupid'])) {
- $groupid = $_GET['groupid'];
-}
-if (isset($_POST['groupid']) && is_numericint($_POST['groupid'])) {
- $groupid = $_POST['groupid'];
-}
-
-$a_group = & $config['system']['group'][$groupid];
-
-if (!is_array($a_group)) {
- pfSenseHeader("system_groupmanager.php?id={$groupid}");
- exit;
-}
-
-if (!is_array($a_group['priv'])) {
- $a_group['priv'] = array();
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "sysprivs");
- $reqdfieldsn = array(gettext("Selected privileges"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- /* if this is an AJAX caller then handle via JSON */
- if (isAjax() && is_array($input_errors)) {
- input_errors2Ajax($input_errors);
- exit;
- }
-
- if (!$input_errors) {
-
- if (!is_array($pconfig['sysprivs'])) {
- $pconfig['sysprivs'] = array();
- }
-
- if (!count($a_group['priv'])) {
- $a_group['priv'] = $pconfig['sysprivs'];
- } else {
- $a_group['priv'] = array_merge($a_group['priv'], $pconfig['sysprivs']);
- }
-
- if (is_array($a_group['member'])) {
- foreach ($a_group['member'] as $uid) {
- $user = getUserEntryByUID($uid);
- if ($user) {
- local_user_set($user);
- }
- }
- }
-
- admin_groups_sort();
-
- $retval = write_config();
- $savemsg = get_std_save_message($retval);
-
- pfSenseHeader("system_groupmanager.php?act=edit&amp;id={$groupid}");
- exit;
- }
-}
-
-/* if ajax is calling, give them an update message */
-if (isAjax()) {
- print_info_box_np($savemsg);
-}
-
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-
-<?php
-
-if (is_array($priv_list)) {
- $id = 0;
-
- $jdescs = "var descs = new Array();\n";
- foreach ($priv_list as $pname => $pdata) {
- if (in_array($pname, $a_group['priv'])) {
- continue;
- }
- $desc = addslashes($pdata['descr']);
- $jdescs .= "descs[{$id}] = '{$desc}';\n";
- $id++;
- }
-
- echo $jdescs;
-}
-
-?>
-
-function update_description() {
- var index = document.iform.sysprivs.selectedIndex;
- document.getElementById("pdesc").innerHTML = descs[index];
-}
-
-//]]>
-</script>
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="group manager add privileges">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Users"), false, "system_usermanager.php");
- $tab_array[] = array(gettext("Groups"), true, "system_groupmanager.php");
- $tab_array[] = array(gettext("Settings"), false, "system_usermanager_settings.php");
- $tab_array[] = array(gettext("Servers"), false, "system_authservers.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <form action="system_groupmanager_addprivs.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("System Privileges");?></td>
- <td width="78%" class="vtable">
- <table>
- <tr>
- <td>
- <select name="sysprivs[]" id="sysprivs" class="formselect" onchange="update_description();" multiple="multiple" size="35">
- <?php
- foreach ($priv_list as $pname => $pdata):
- if (in_array($pname, $a_group['priv'])) {
- continue;
- }
- ?>
- <option value="<?=$pname;?>"><?=$pdata['name'];?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <?=gettext("Hold down CTRL (pc)/COMMAND (mac) key to select multiple items");?>
- </td>
- <td>
- <a href='#'onClick="selectAll();">Select all</a>
- <script type="text/javascript">
- //<![CDATA[
- function selectAll() {
- var options = jQuery('select#sysprivs option');
- var len = options.length;
- for (var i = 0; i < len; i++) {
- options[i].selected = true;
- }
- }
- selectAll();
- //]]>
- </script>
- <br />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr height="60">
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" valign="top" class="vtable" id="pdesc">
- <em><?=gettext("Select a privilege from the list above for a description");?></em>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input id="cancelbutton" class="formbtn" type="button" value="<?=gettext("Cancel");?>" onclick="history.back()" />
- <?php if (isset($groupid)): ?>
- <input name="groupid" type="hidden" value="<?=htmlspecialchars($groupid);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </form>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_hasync.php b/usr/local/www/system_hasync.php
deleted file mode 100755
index 8ebde1f..0000000
--- a/usr/local/www/system_hasync.php
+++ /dev/null
@@ -1,365 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_hasync.php
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2012 Darren Embry <dse@webonastick.com>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: system
-*/
-
-##|+PRIV
-##|*IDENT=page-system-hasync
-##|*NAME=System: High Availability Sync
-##|*DESCR=Allow access to the 'System: High Availability Sync' page.
-##|*MATCH=system_hasync.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_hasync.php');
-}
-
-if (!is_array($config['hasync'])) {
- $config['hasync'] = array();
-}
-
-$a_hasync = &$config['hasync'];
-
-$checkbox_names = array(
- 'pfsyncenabled',
- 'synchronizeusers',
- 'synchronizeauthservers',
- 'synchronizecerts',
- 'synchronizerules',
- 'synchronizeschedules',
- 'synchronizealiases',
- 'synchronizenat',
- 'synchronizeipsec',
- 'synchronizeopenvpn',
- 'synchronizedhcpd',
- 'synchronizewol',
- 'synchronizestaticroutes',
- 'synchronizelb',
- 'synchronizevirtualip',
- 'synchronizetrafficshaper',
- 'synchronizetrafficshaperlimiter',
- 'synchronizetrafficshaperlayer7',
- 'synchronizednsforwarder',
- 'synchronizecaptiveportal');
-
-if ($_POST) {
- $pconfig = $_POST;
- foreach ($checkbox_names as $name) {
- $a_hasync[$name] = $pconfig[$name] ? $pconfig[$name] : false;
- }
- $a_hasync['pfsyncpeerip'] = $pconfig['pfsyncpeerip'];
- $a_hasync['pfsyncinterface'] = $pconfig['pfsyncinterface'];
- $a_hasync['synchronizetoip'] = $pconfig['synchronizetoip'];
- $a_hasync['username'] = $pconfig['username'];
- $a_hasync['password'] = $pconfig['passwordfld'];
- write_config("Updated High Availability Sync configuration");
- interfaces_sync_setup();
- header("Location: system_hasync.php");
- exit();
-}
-
-foreach ($checkbox_names as $name) {
- $pconfig[$name] = $a_hasync[$name];
-}
-$pconfig['pfsyncpeerip'] = $a_hasync['pfsyncpeerip'];
-$pconfig['pfsyncinterface'] = $a_hasync['pfsyncinterface'];
-$pconfig['synchronizetoip'] = $a_hasync['synchronizetoip'];
-$pconfig['username'] = $a_hasync['username'];
-$pconfig['passwordfld'] = $a_hasync['password'];
-
-$ifaces = get_configured_interface_with_descr();
-$ifaces["lo0"] = "loopback";
-
-$pgtitle = array(gettext("System"), gettext("High Availability Sync"));
-$shortcut_section = "carp";
-include("head.inc");
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-
-<form action="system_hasync.php" method="post" name="iform" id="iform">
-<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="high availability sync">
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" class="listtopic">State Synchronization Settings (pfsync)</td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize States</td>
- <td class="vtable">
- <input id='pfsyncenabled' type='checkbox' name='pfsyncenabled' value='on' <?php if ($pconfig['pfsyncenabled'] === "on") echo "checked='checked'"; ?> />
- <br />
- pfsync transfers state insertion, update, and deletion messages between firewalls. Each firewall sends these messages out via multicast on a specified interface, using the PFSYNC protocol (IP Protocol 240). It also listens on that interface for similar messages from other firewalls, and imports them into the local state table.<p>This setting should be enabled on all members of a failover group.</p><p>NOTE: Clicking save will force a configuration sync if it is enabled! (see Configuration Synchronization Settings below)</p>
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize Interface</td>
- <td class="vtable">
- <select id='pfsyncinterface' name="pfsyncinterface">
- <?php foreach ($ifaces as $ifname => $iface) { ?>
- <?php $selected = ($pconfig['pfsyncinterface'] === $ifname) ? 'selected="selected"' : ''; ?>
- <option value="<?= htmlentities($ifname); ?>" <?= $selected ?>><?= htmlentities($iface); ?></option>
- <?php } ?>
- </select>
- <br />
- If Synchronize States is enabled, it will utilize this interface for communication.<br />
- <b>NOTE:</b> We recommend setting this to a interface other than LAN! A dedicated interface works the best.<br />
- <b>NOTE:</b> You must define a IP on each machine participating in this failover group.<br />
- <b>NOTE:</b> You must have an IP assigned to the interface on any participating sync nodes.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">pfsync Synchronize Peer IP</td>
- <td class="vtable">
- <input id='pfsyncpeerip' name='pfsyncpeerip' class='formfld unknown' value='<?= htmlentities($pconfig['pfsyncpeerip'], ENT_QUOTES | ENT_HTML401); ?>' />
- <br />
- Setting this option will force pfsync to synchronize its state table to this IP address. The default is directed multicast.
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td colspan="2" class="listtopic">Configuration Synchronization Settings (XMLRPC Sync)</td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize Config to IP</td>
- <td class="vtable">
- <input id='synchronizetoip' name='synchronizetoip' class='formfld unknown' value='<?= htmlentities($pconfig['synchronizetoip'], ENT_QUOTES | ENT_HTML401); ?>' />
- <br />
- Enter the IP address of the firewall to which the selected configuration sections should be synchronized.<br />
- <br />
- NOTE: XMLRPC sync is currently only supported over connections using the same protocol and port as this system - make sure the remote system's port and protocol are set accordingly!<br />
- <br />
- NOTE: <b>Do not use the Synchronize Config to IP and password option on backup cluster members!</b>
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Remote System Username</td>
- <td class="vtable">
- <input id='username' name='username' class='formfld unknown' value='<?= htmlentities($pconfig['username'], ENT_QUOTES | ENT_HTML401); ?>' />
- <br />
- Enter the webConfigurator username of the system entered above for synchronizing your configuration.<br />
- <br />
- NOTE: <b>Do not use the Synchronize Config to IP and username option on backup cluster members!</b>
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Remote System Password</td>
- <td class="vtable">
- <input id='passwordfld' type='password' name='passwordfld' class='formfld pwd' value='<?= htmlentities($pconfig['passwordfld'], ENT_QUOTES | ENT_HTML401); ?>' />
- <br />
- Enter the webConfigurator password of the system entered above for synchronizing your configuration.<br />
- <br />
- NOTE: <b>Do not use the Synchronize Config to IP and password option on backup cluster members!</b>
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize Users and Groups</td>
- <td class="vtable">
- <input id='synchronizeusers' type='checkbox' name='synchronizeusers' value='on' <?php if ($pconfig['synchronizeusers'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the users and groups over to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize Auth Servers</td>
- <td class="vtable">
- <input id='synchronizeauthservers' type='checkbox' name='synchronizeauthservers' value='on' <?php if ($pconfig['synchronizeauthservers'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the authentication servers (e.g. LDAP, RADIUS) over to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize Certificates</td>
- <td class="vtable">
- <input id='synchronizecerts' type='checkbox' name='synchronizecerts' value='on' <?php if ($pconfig['synchronizecerts'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the Certificate Authorities, Certificates, and Certificate Revocation Lists over to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize rules</td>
- <td class="vtable">
- <input id='synchronizerules' type='checkbox' name='synchronizerules' value='on' <?php if ($pconfig['synchronizerules'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the firewall rules to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize Firewall Schedules</td>
- <td class="vtable">
- <input id='synchronizeschedules' type='checkbox' name='synchronizeschedules' value='on' <?php if ($pconfig['synchronizeschedules'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the firewall schedules to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize aliases</td>
- <td class="vtable">
- <input id='synchronizealiases' type='checkbox' name='synchronizealiases' value='on' <?php if ($pconfig['synchronizealiases'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the aliases over to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize NAT</td>
- <td class="vtable">
- <input id='synchronizenat' type='checkbox' name='synchronizenat' value='on' <?php if ($pconfig['synchronizenat'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the NAT rules over to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize IPsec</td>
- <td class="vtable">
- <input id='synchronizeipsec' type='checkbox' name='synchronizeipsec' value='on' <?php if ($pconfig['synchronizeipsec'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the IPsec configuration to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize OpenVPN</td>
- <td class="vtable">
- <input id='synchronizeopenvpn' type='checkbox' name='synchronizeopenvpn' value='on' <?php if ($pconfig['synchronizeopenvpn'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the OpenVPN configuration to the other HA host when changes are made. Using this option implies "Synchronize Certificates" as they are required for OpenVPN.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize DHCPD</td>
- <td class="vtable">
- <input id='synchronizedhcpd' type='checkbox' name='synchronizedhcpd' value='on' <?php if ($pconfig['synchronizedhcpd'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the DHCP Server settings over to the other HA host when changes are made. This only applies to DHCP for IPv4.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize Wake on LAN</td>
- <td class="vtable">
- <input id='synchronizewol' type='checkbox' name='synchronizewol' value='on' <?php if ($pconfig['synchronizewol'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the WoL configuration to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize Static Routes</td>
- <td class="vtable">
- <input id='synchronizestaticroutes' type='checkbox' name='synchronizestaticroutes' value='on' <?php if ($pconfig['synchronizestaticroutes'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the Static Route configuration to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize Load Balancer</td>
- <td class="vtable">
- <input id='synchronizelb' type='checkbox' name='synchronizelb' value='on' <?php if ($pconfig['synchronizelb'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the Load Balancer configuration to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize Virtual IPs</td>
- <td class="vtable">
- <input id='synchronizevirtualip' type='checkbox' name='synchronizevirtualip' value='on' <?php if ($pconfig['synchronizevirtualip'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the CARP Virtual IPs to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize traffic shaper(queues)</td>
- <td class="vtable">
- <input id='synchronizetrafficshaper' type='checkbox' name='synchronizetrafficshaper' value='on' <?php if ($pconfig['synchronizetrafficshaper'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the traffic shaper configuration for queues to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize traffic shaper(limiter)</td>
- <td class="vtable">
- <input id='synchronizetrafficshaperlimiter' type='checkbox' name='synchronizetrafficshaperlimiter' value='on' <?php if ($pconfig['synchronizetrafficshaperlimiter'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the traffic shaper configuration for limiters to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize traffic shaper(layer7)</td>
- <td class="vtable">
- <input id='synchronizetrafficshaperlayer7' type='checkbox' name='synchronizetrafficshaperlayer7' value='on' <?php if ($pconfig['synchronizetrafficshaperlayer7'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the traffic shaper configuration for layer7 to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize DNS Forwarder / Resolver</td>
- <td class="vtable">
- <input id='synchronizednsforwarder' type='checkbox' name='synchronizednsforwarder' value='on' <?php if ($pconfig['synchronizednsforwarder'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the DNS Forwarder and DNS Resolver configuration to the other HA host when changes are made.
- </td>
- </tr>
- <tr valign="top">
- <td width="22%" class="vncell">Synchronize Captive Portal</td>
- <td class="vtable">
- <input id='synchronizecaptiveportal' type='checkbox' name='synchronizecaptiveportal' value='on' <?php if ($pconfig['synchronizecaptiveportal'] === "on") echo "checked='checked'"; ?> />
- <br />
- When this option is enabled, this system will automatically sync the Captive Portal configuration to the other HA host when changes are made.
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="id" type="hidden" value="0" />
- <input name="Submit" type="submit" class="formbtn" value="Save" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_routes.php b/usr/local/www/system_routes.php
deleted file mode 100644
index 9443d40..0000000
--- a/usr/local/www/system_routes.php
+++ /dev/null
@@ -1,407 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_routes.php
- part of m0n0wall (http://m0n0.ch/wall)
- part of pfSense
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-system-staticroutes
-##|*NAME=System: Static Routes page
-##|*DESCR=Allow access to the 'System: Static Routes' page.
-##|*MATCH=system_routes.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-
-if (!is_array($config['staticroutes']['route'])) {
- $config['staticroutes']['route'] = array();
-}
-
-$a_routes = &$config['staticroutes']['route'];
-$a_gateways = return_gateways_array(true, true, true);
-$changedesc_prefix = gettext("Static Routes") . ": ";
-unset($input_errors);
-
-if ($_POST) {
-
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
-
- $retval = 0;
-
- if (file_exists("{$g['tmp_path']}/.system_routes.apply")) {
- $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.system_routes.apply"));
- foreach ($toapplylist as $toapply) {
- mwexec("{$toapply}");
- }
-
- @unlink("{$g['tmp_path']}/.system_routes.apply");
- }
-
- $retval = system_routing_configure();
- $retval |= filter_configure();
- /* reconfigure our gateway monitor */
- setup_gateways_monitor();
-
- $savemsg = get_std_save_message($retval);
- if ($retval == 0) {
- clear_subsystem_dirty('staticroutes');
- }
- }
-}
-
-function delete_static_route($id) {
- global $config, $a_routes, $changedesc_prefix;
-
- if (!isset($a_routes[$id])) {
- return;
- }
-
- $targets = array();
- if (is_alias($a_routes[$id]['network'])) {
- foreach (filter_expand_alias_array($a_routes[$id]['network']) as $tgt) {
- if (is_ipaddrv4($tgt)) {
- $tgt .= "/32";
- } else if (is_ipaddrv6($tgt)) {
- $tgt .= "/128";
- }
- if (!is_subnet($tgt)) {
- continue;
- }
- $targets[] = $tgt;
- }
- } else {
- $targets[] = $a_routes[$id]['network'];
- }
-
- foreach ($targets as $tgt) {
- $family = (is_subnetv6($tgt) ? "-inet6" : "-inet");
- mwexec("/sbin/route delete {$family} " . escapeshellarg($tgt));
- }
-
- unset($targets);
-}
-
-if ($_GET['act'] == "del") {
- if ($a_routes[$_GET['id']]) {
- $changedesc = $changedesc_prefix . gettext("removed route to") . " " . $a_routes[$_GET['id']]['network'];
- delete_static_route($_GET['id']);
- unset($a_routes[$_GET['id']]);
- write_config($changedesc);
- header("Location: system_routes.php");
- exit;
- }
-}
-
-if (isset($_POST['del_x'])) {
- /* delete selected routes */
- if (is_array($_POST['route']) && count($_POST['route'])) {
- $changedesc = $changedesc_prefix . gettext("removed route to");
- foreach ($_POST['route'] as $routei) {
- $changedesc .= " " . $a_routes[$routei]['network'];
- delete_static_route($routei);
- unset($a_routes[$routei]);
- }
- write_config($changedesc);
- header("Location: system_routes.php");
- exit;
- }
-
-} else if ($_GET['act'] == "toggle") {
- if ($a_routes[$_GET['id']]) {
- $do_update_config = true;
- if (isset($a_routes[$_GET['id']]['disabled'])) {
- // Do not enable a route whose gateway is disabled
- if (isset($a_gateways[$a_routes[$_GET['id']]['gateway']]['disabled'])) {
- $do_update_config = false;
- $input_errors[] = $changedesc_prefix . gettext("gateway is disabled, cannot enable route to") . " " . $a_routes[$_GET['id']]['network'];
- } else {
- unset($a_routes[$_GET['id']]['disabled']);
- $changedesc = $changedesc_prefix . gettext("enabled route to") . " " . $a_routes[$_GET['id']]['network'];
- }
- } else {
- delete_static_route($_GET['id']);
- $a_routes[$_GET['id']]['disabled'] = true;
- $changedesc = $changedesc_prefix . gettext("disabled route to") . " " . $a_routes[$_GET['id']]['network'];
- }
-
- if ($do_update_config) {
- if (write_config($changedesc)) {
- mark_subsystem_dirty('staticroutes');
- }
- header("Location: system_routes.php");
- exit;
- }
- }
-} else {
- /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
- unset($movebtn);
- foreach ($_POST as $pn => $pd) {
- if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
- $movebtn = $matches[1];
- break;
- }
- }
- /* move selected routes before this route */
- if (isset($movebtn) && is_array($_POST['route']) && count($_POST['route'])) {
- $a_routes_new = array();
-
- /* copy all routes < $movebtn and not selected */
- for ($i = 0; $i < $movebtn; $i++) {
- if (!in_array($i, $_POST['route'])) {
- $a_routes_new[] = $a_routes[$i];
- }
- }
-
- /* copy all selected routes */
- for ($i = 0; $i < count($a_routes); $i++) {
- if ($i == $movebtn) {
- continue;
- }
- if (in_array($i, $_POST['route'])) {
- $a_routes_new[] = $a_routes[$i];
- }
- }
-
- /* copy $movebtn route */
- if ($movebtn < count($a_routes)) {
- $a_routes_new[] = $a_routes[$movebtn];
- }
-
- /* copy all routes > $movebtn and not selected */
- for ($i = $movebtn+1; $i < count($a_routes); $i++) {
- if (!in_array($i, $_POST['route'])) {
- $a_routes_new[] = $a_routes[$i];
- }
- }
- if (count($a_routes_new) > 0) {
- $a_routes = $a_routes_new;
- }
-
- if (write_config()) {
- mark_subsystem_dirty('staticroutes');
- }
- header("Location: system_routes.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("System"), gettext("Static Routes"));
-$shortcut_section = "routing";
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="system_routes.php" method="post">
-<script type="text/javascript" src="/javascript/row_toggle.js"></script>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('staticroutes')): ?><p>
-<?php print_info_box_np(sprintf(gettext("The static route configuration has been changed.%sYou must apply the changes in order for them to take effect."), "<br />"));?><br /></p>
-<?php endif; ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system routes">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Gateways"), false, "system_gateways.php");
- $tab_array[1] = array(gettext("Routes"), true, "system_routes.php");
- $tab_array[2] = array(gettext("Groups"), false, "system_gateway_groups.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr id="frheader">
- <td width="2%" class="list">&nbsp;</td>
- <td width="2%" class="list">&nbsp;</td>
- <td width="22%" class="listhdrr"><?=gettext("Network");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Gateway");?></td>
- <td width="15%" class="listhdrr"><?=gettext("Interface");?></td>
- <td width="29%" class="listhdr"><?=gettext("Description");?></td>
- <td width="10%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17"></td>
- <td><a href="system_routes_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <?php
- $i = 0;
- foreach ($a_routes as $route):
- ?>
- <tr valign="top" id="fr<?=$i;?>">
- <?php
- $iconfn = "pass";
- if (isset($route['disabled'])) {
- $textss = "<span class=\"gray\">";
- $textse = "</span>";
- $iconfn .= "_d";
- } else {
- $textss = $textse = "";
- }
- ?>
- <td class="listt">
- <input type="checkbox" id="frc<?=$i;?>" name="route[]" value="<?=$i;?>" onclick="fr_bgcolor('<?=$i;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
- </td>
- <td class="listt" align="center">
- <a href="?act=toggle&amp;id=<?=$i;?>">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0"
- title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" />
- </a>
- </td>
- <td class="listlr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_routes_edit.php?id=<?=$i;?>';">
- <?=$textss;?><?=strtolower($route['network']);?><?=$textse;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_routes_edit.php?id=<?=$i;?>';">
- <?=$textss;?>
- <?php
- echo htmlentities($a_gateways[$route['gateway']]['name']) . " - " . htmlentities($a_gateways[$route['gateway']]['gateway']);
- ?>
- <?=$textse;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_routes_edit.php?id=<?=$i;?>';">
- <?=$textss;?>
- <?php
- echo convert_friendly_interface_to_friendly_descr($a_gateways[$route['gateway']]['friendlyiface']) . " ";
- ?>
- <?=$textse;?>
- </td>
- <td class="listbg" onclick="fr_toggle(<?=$i;?>)" ondblclick="document.location='system_routes_edit.php?id=<?=$i;?>';">
- <?=$textss;?><?=htmlspecialchars($route['descr']);?>&nbsp;<?=$textse;?>
- </td>
- <td class="list nowrap" valign="middle">
- <table border="0" cellspacing="0" cellpadding="1" summary="move">
- <tr>
- <td>
- <input onmouseover="fr_insline(<?=$i;?>, true)" onmouseout="fr_insline(<?=$i;?>, false)" name="move_<?=$i;?>"
- src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif"
- title="<?=gettext("move selected routes before this route");?>"
- type="image" style="height:17;width:17;border:0" />
- </td>
- <td>
- <a href="system_routes_edit.php?id=<?=$i;?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit route");?>" alt="edit" />
- </a>
- </td>
- </tr>
- <tr>
- <td align="center" valign="middle">
- <a href="system_routes.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this route?");?>')">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete route");?>" alt="delete" />
- </a>
- </td>
- <td>
- <a href="system_routes_edit.php?dup=<?=$i;?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add a new route based on this one");?>" width="17" height="17" border="0" alt="duplicate" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <?php
- $i++;
- endforeach;
- ?>
- <tr>
- <td class="list" colspan="6"></td>
- <td class="list nowrap" valign="middle">
- <table border="0" cellspacing="0" cellpadding="1" summary="edit">
- <tr>
- <td>
-<?php
- if ($i == 0):
-?>
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17"
- title="<?=gettext("move selected routes to end");?>" border="0" alt="move" />
-<?php
- else:
-?>
- <input name="move_<?=$i;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif"
- style="width:17;height:17;border:0" title="<?=gettext("move selected routes to end");?>" />
-<?php
- endif;
-?>
- </td>
- <td>
- <a href="system_routes_edit.php">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"
- title="<?=gettext("add new route");?>" alt="add" />
- </a>
- </td>
- </tr>
- <tr>
- <td>
-<?php
- if ($i == 0):
-?>
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17"
- title="<?=gettext("delete selected routes");?>" border="0" alt="delete" />
-<?php
- else:
-?>
- <input name="del" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif"
- style="width:17;height:17" title="<?=gettext("delete selected routes");?>"
- onclick="return confirm('<?=gettext("Do you really want to delete the selected routes?");?>')" />
-<?php
- endif;
-?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<p><b><?=gettext("Note:");?></b> <?=gettext("Do not enter static routes for networks assigned on any interface of this firewall. Static routes are only used for networks reachable via a different router, and not reachable via your default gateway.");?></p>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_routes_edit.php b/usr/local/www/system_routes_edit.php
deleted file mode 100644
index a64580b..0000000
--- a/usr/local/www/system_routes_edit.php
+++ /dev/null
@@ -1,445 +0,0 @@
-<?php
-/*
- system_routes_edit.php
- part of m0n0wall (http://m0n0.ch/wall)
- part of pfSense
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2010 Scott Ullrich
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: routing
-*/
-
-##|+PRIV
-##|*IDENT=page-system-staticroutes-editroute
-##|*NAME=System: Static Routes: Edit route page
-##|*DESCR=Allow access to the 'System: Static Routes: Edit route' page.
-##|*MATCH=system_routes_edit.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("filter.inc");
-require_once("util.inc");
-require_once("gwlb.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_routes.php');
-}
-
-if (!is_array($config['staticroutes']['route'])) {
- $config['staticroutes']['route'] = array();
-}
-
-$a_routes = &$config['staticroutes']['route'];
-$a_gateways = return_gateways_array(true, true);
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
- $id = $_GET['dup'];
-}
-
-if (isset($id) && $a_routes[$id]) {
- list($pconfig['network'], $pconfig['network_subnet']) =
- explode('/', $a_routes[$id]['network']);
- $pconfig['gateway'] = $a_routes[$id]['gateway'];
- $pconfig['descr'] = $a_routes[$id]['descr'];
- $pconfig['disabled'] = isset($a_routes[$id]['disabled']);
-}
-
-if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
- unset($id);
-}
-
-if ($_POST) {
-
- global $aliastable;
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "network network_subnet gateway");
- $reqdfieldsn = explode(",",
- gettext("Destination network") . "," .
- gettext("Destination network bit count") . "," .
- gettext("Gateway"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (($_POST['network'] && !is_ipaddr($_POST['network']) && !is_alias($_POST['network']))) {
- $input_errors[] = gettext("A valid IPv4 or IPv6 destination network must be specified.");
- }
- if (($_POST['network_subnet'] && !is_numeric($_POST['network_subnet']))) {
- $input_errors[] = gettext("A valid destination network bit count must be specified.");
- }
- if (($_POST['gateway']) && is_ipaddr($_POST['network'])) {
- if (!isset($a_gateways[$_POST['gateway']])) {
- $input_errors[] = gettext("A valid gateway must be specified.");
- } else if (isset($a_gateways[$_POST['gateway']]['disabled']) && !$_POST['disabled']) {
- $input_errors[] = gettext("The gateway is disabled but the route is not. You must disable the route in order to choose a disabled gateway.");
- } else {
- // Note that the 3rd parameter "disabled" must be passed as explicitly true or false.
- if (!validate_address_family($_POST['network'], $_POST['gateway'], $_POST['disabled'] ? true : false)) {
- $input_errors[] = gettext("The gateway '{$a_gateways[$_POST['gateway']]['gateway']}' is a different Address Family than network '{$_POST['network']}'.");
- }
- }
- }
-
- /* check for overlaps */
- $current_targets = get_staticroutes(true);
- $new_targets = array();
- if (is_ipaddrv6($_POST['network'])) {
- $osn = gen_subnetv6($_POST['network'], $_POST['network_subnet']) . "/" . $_POST['network_subnet'];
- $new_targets[] = $osn;
- }
- if (is_ipaddrv4($_POST['network'])) {
- if ($_POST['network_subnet'] > 32) {
- $input_errors[] = gettext("A IPv4 subnet can not be over 32 bits.");
- } else {
- $osn = gen_subnet($_POST['network'], $_POST['network_subnet']) . "/" . $_POST['network_subnet'];
- $new_targets[] = $osn;
- }
- } elseif (is_alias($_POST['network'])) {
- $osn = $_POST['network'];
- foreach (preg_split('/\s+/', $aliastable[$osn]) as $tgt) {
- if (is_ipaddrv4($tgt)) {
- $tgt .= "/32";
- }
- if (is_ipaddrv6($tgt)) {
- $tgt .= "/128";
- }
- if (!is_subnet($tgt)) {
- continue;
- }
- if (!is_subnetv6($tgt)) {
- continue;
- }
- $new_targets[] = $tgt;
- }
- }
- if (!isset($id)) {
- $id = count($a_routes);
- }
- $oroute = $a_routes[$id];
- $old_targets = array();
- if (!empty($oroute)) {
- if (is_alias($oroute['network'])) {
- foreach (filter_expand_alias_array($oroute['network']) as $tgt) {
- if (is_ipaddrv4($tgt)) {
- $tgt .= "/32";
- } else if (is_ipaddrv6($tgt)) {
- $tgt .= "/128";
- }
- if (!is_subnet($tgt)) {
- continue;
- }
- $old_targets[] = $tgt;
- }
- } else {
- $old_targets[] = $oroute['network'];
- }
- }
-
- $overlaps = array_intersect($current_targets, $new_targets);
- $overlaps = array_diff($overlaps, $old_targets);
- if (count($overlaps)) {
- $input_errors[] = gettext("A route to these destination networks already exists") . ": " . implode(", ", $overlaps);
- }
-
- if (is_array($config['interfaces'])) {
- foreach ($config['interfaces'] as $if) {
- if (is_ipaddrv4($_POST['network']) &&
- isset($if['ipaddr']) && isset($if['subnet']) &&
- is_ipaddrv4($if['ipaddr']) && is_numeric($if['subnet']) &&
- ($_POST['network_subnet'] == $if['subnet']) &&
- (gen_subnet($_POST['network'], $_POST['network_subnet']) == gen_subnet($if['ipaddr'], $if['subnet']))) {
- $input_errors[] = sprintf(gettext("This network conflicts with address configured on interface %s."), $if['descr']);
- } else if (is_ipaddrv6($_POST['network']) &&
- isset($if['ipaddrv6']) && isset($if['subnetv6']) &&
- is_ipaddrv6($if['ipaddrv6']) && is_numeric($if['subnetv6']) &&
- ($_POST['network_subnet'] == $if['subnetv6']) &&
- (gen_subnetv6($_POST['network'], $_POST['network_subnet']) == gen_subnetv6($if['ipaddrv6'], $if['subnetv6']))) {
- $input_errors[] = sprintf(gettext("This network conflicts with address configured on interface %s."), $if['descr']);
- }
- }
- }
-
- if (!$input_errors) {
- $route = array();
- $route['network'] = $osn;
- $route['gateway'] = $_POST['gateway'];
- $route['descr'] = $_POST['descr'];
- if ($_POST['disabled']) {
- $route['disabled'] = true;
- } else {
- unset($route['disabled']);
- }
-
- if (file_exists("{$g['tmp_path']}/.system_routes.apply")) {
- $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.system_routes.apply"));
- } else {
- $toapplylist = array();
- }
- $a_routes[$id] = $route;
-
- if (!empty($oroute)) {
- $delete_targets = array_diff($old_targets, $new_targets);
- if (count($delete_targets)) {
- foreach ($delete_targets as $dts) {
- if (is_ipaddrv6($dts)) {
- $family = "-inet6";
- }
- $toapplylist[] = "/sbin/route delete {$family} {$dts}";
- }
- }
- }
- file_put_contents("{$g['tmp_path']}/.system_routes.apply", serialize($toapplylist));
-
- mark_subsystem_dirty('staticroutes');
-
- write_config();
-
- header("Location: system_routes.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("System"), gettext("Static Routes"), gettext("Edit route"));
-$shortcut_section = "routing";
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
-<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
-<script type="text/javascript" src="/javascript/suggestions.js"></script>
-<?php include("fbegin.inc");?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
- <form action="system_routes_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="system routes edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit route entry"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination network"); ?></td>
- <td width="78%" class="vtable">
- <input name="network" type="text" class="formfldalias ipv4v6" id="network" size="20" value="<?=htmlspecialchars($pconfig['network']);?>" />
- /
- <select name="network_subnet" class="formselect ipv4v6" id="network_subnet">
- <?php for ($i = 128; $i >= 1; $i--): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['network_subnet']) echo "selected=\"selected\""; ?>>
- <?=$i;?>
- </option>
- <?php endfor; ?>
- </select>
- <br /><span class="vexpl"><?=gettext("Destination network for this static route"); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Gateway"); ?></td>
- <td width="78%" class="vtable">
- <select name="gateway" id="gateway" class="formselect">
- <?php
- foreach ($a_gateways as $gateway) {
- echo "<option value='{$gateway['name']}' ";
- if ($gateway['name'] == $pconfig['gateway']) {
- echo "selected=\"selected\"";
- }
- echo ">" . htmlspecialchars($gateway['name']) . " - " . htmlspecialchars($gateway['gateway']) . "</option>\n";
- }
- ?>
- </select> <br />
- <div id='addgwbox'>
- <?=gettext("Choose which gateway this route applies to or"); ?> <a onclick="show_add_gateway();" href="#"><?=gettext("add a new one.");?></a>
- </div>
- <div id='notebox'>
- </div>
- <div style="display:none" id="status">
- </div>
- <div style="display:none" id="addgateway">
- <table border="1" style="background:#990000; border-style: none none none none; width:225px;" summary="add gateway">
- <tr>
- <td>
- <table bgcolor="#990000" cellpadding="1" cellspacing="1" summary="add">
- <tr><td>&nbsp;</td></tr>
- <tr>
- <td colspan="2" align="center"><b><font color="white"><?=gettext("Add new gateway:"); ?></font></b></td>
- </tr>
- <tr><td>&nbsp;</td></tr>
- <tr>
- <td width="45%" align="right"><font color="white"><?=gettext("Default gateway:"); ?></font></td><td><input type="checkbox" id="defaultgw" name="defaultgw" /></td>
- </tr>
- <tr>
- <td width="45%" align="right"><font color="white"><?=gettext("Interface:"); ?></font></td>
- <td>
- <select name="addinterfacegw" id="addinterfacegw">
- <?php $gwifs = get_configured_interface_with_descr();
- foreach ($gwifs as $fif => $dif) {
- echo "<option value=\"{$fif}\">{$dif}</option>\n";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td align="right"><font color="white"><?=gettext("Gateway Name:"); ?></font></td><td><input id="name" name="name" value="GW" /></td>
- </tr>
- <tr>
- <td align="right"><font color="white"><?=gettext("Gateway IP:"); ?></font></td><td><input id="gatewayip" name="gatewayip" /></td>
- </tr>
- <tr>
- <td align="right"><font color="white"><?=gettext("Description:"); ?></font></td><td><input id="gatewaydescr" name="gatewaydescr" /></td>
- </tr>
- <tr><td>&nbsp;</td></tr>
- <tr>
- <td colspan="2" align="center">
- <div id='savebuttondiv'>
- <input type="hidden" name="addrtype" id="addrtype" value="IPv4" />
- <input id="gwsave" type="button" value="<?=gettext("Save Gateway"); ?>" onclick='hide_add_gatewaysave();' />
- <input id="gwcancel" type="button" value="<?=gettext("Cancel"); ?>" onclick='hide_add_gateway();' />
- </div>
- </td>
- </tr>
- <tr><td>&nbsp;</td></tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Disabled");?></td>
- <td width="78%" class="vtable">
- <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable this static route");?></strong><br />
- <span class="vexpl"><?=gettext("Set this option to disable this static route without removing it from the list.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br /><span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)."); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="save" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <?php if (isset($id) && $a_routes[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- </td>
- </tr>
- </table>
- </form>
-<script type="text/javascript">
-//<![CDATA[
- var gatewayip;
- var name;
- function show_add_gateway() {
- document.getElementById("addgateway").style.display = '';
- document.getElementById("addgwbox").style.display = 'none';
- document.getElementById("gateway").style.display = 'none';
- document.getElementById("save").style.display = 'none';
- document.getElementById("cancel").style.display = 'none';
- document.getElementById("gwsave").style.display = '';
- document.getElementById("gwcancel").style.display = '';
- jQuery('#notebox').html("");
- }
- function hide_add_gateway() {
- document.getElementById("addgateway").style.display = 'none';
- document.getElementById("addgwbox").style.display = '';
- document.getElementById("gateway").style.display = '';
- document.getElementById("save").style.display = '';
- document.getElementById("cancel").style.display = '';
- document.getElementById("gwsave").style.display = '';
- document.getElementById("gwcancel").style.display = '';
- }
- function hide_add_gatewaysave() {
- document.getElementById("addgateway").style.display = 'none';
- jQuery('#status').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif"> One moment please...');
- var iface = jQuery('#addinterfacegw').val();
- name = jQuery('#name').val();
- var descr = jQuery('#gatewaydescr').val();
- gatewayip = jQuery('#gatewayip').val();
- addrtype = jQuery('#addrtype').val();
- var defaultgw = '';
- if (jQuery('#defaultgw').checked) {
- defaultgw = 'yes';
- }
- var url = "system_gateways_edit.php";
- var pars = 'isAjax=true&defaultgw=' + escape(defaultgw) + '&interface=' + escape(iface) + '&name=' + escape(name) + '&descr=' + escape(descr) + '&gateway=' + escape(gatewayip) + '&type=' + escape(addrtype);
- jQuery.ajax(
- url,
- {
- type: 'post',
- data: pars,
- error: report_failure,
- complete: save_callback
- });
- }
- function addOption(selectbox, text, value) {
- var optn = document.createElement("OPTION");
- optn.text = text;
- optn.value = value;
- selectbox.append(optn);
- selectbox.prop('selectedIndex', selectbox.children('option').length-1);
- jQuery('#notebox').html("<p><strong><?=gettext("NOTE:");?><\/strong> <?php printf(gettext("You can manage Gateways %shere%s."), "<a target='_blank' href='system_gateways.php'>", "<\/a>");?> <\/strong><\/p>");
- }
- function report_failure() {
- alert("<?=gettext("Sorry, we could not create your gateway at this time."); ?>");
- hide_add_gateway();
- }
- function save_callback(transport) {
- var response = transport.responseText;
- if (response) {
- document.getElementById("addgateway").style.display = 'none';
- hide_add_gateway();
- jQuery('#status').html('');
- addOption(jQuery('#gateway'), name, name);
- } else {
- report_failure();
- }
- }
- var addressarray = <?= json_encode(get_alias_list(array("host", "network"))) ?>;
- var oTextbox1 = new AutoSuggestControl(document.getElementById("network"), new StateSuggestions(addressarray));
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_usermanager.php b/usr/local/www/system_usermanager.php
deleted file mode 100644
index f08ce7c..0000000
--- a/usr/local/www/system_usermanager.php
+++ /dev/null
@@ -1,1040 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_usermanager.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- part of pfSense
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Copyright (C) 2008 Shrew Soft Inc.
- All rights reserved.
-
- Copyright (C) 2005 Paul Taylor <paultaylor@winn-dixie.com>.
- All rights reserved.
-
- Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES:
- pfSense_MODULE: auth
-*/
-
-##|+PRIV
-##|*IDENT=page-system-usermanager
-##|*NAME=System: User Manager page
-##|*DESCR=Allow access to the 'System: User Manager' page.
-##|*MATCH=system_usermanager.php*
-##|-PRIV
-
-require("certs.inc");
-require("guiconfig.inc");
-
-// start admin user code
-$pgtitle = array(gettext("System"), gettext("User Manager"));
-
-if (isset($_POST['userid']) && is_numericint($_POST['userid'])) {
- $id = $_POST['userid'];
-}
-
-if (!isset($config['system']['user']) || !is_array($config['system']['user'])) {
- $config['system']['user'] = array();
-}
-
-$a_user = &$config['system']['user'];
-
-if (isset($_SERVER['HTTP_REFERER'])) {
- $referer = $_SERVER['HTTP_REFERER'];
-} else {
- $referer = '/system_usermanager.php';
-}
-
-if (isset($id) && $a_user[$id]) {
- $pconfig['usernamefld'] = $a_user[$id]['name'];
- $pconfig['descr'] = $a_user[$id]['descr'];
- $pconfig['expires'] = $a_user[$id]['expires'];
- $pconfig['groups'] = local_user_get_groups($a_user[$id]);
- $pconfig['utype'] = $a_user[$id]['scope'];
- $pconfig['uid'] = $a_user[$id]['uid'];
- $pconfig['authorizedkeys'] = base64_decode($a_user[$id]['authorizedkeys']);
- $pconfig['priv'] = $a_user[$id]['priv'];
- $pconfig['ipsecpsk'] = $a_user[$id]['ipsecpsk'];
- $pconfig['disabled'] = isset($a_user[$id]['disabled']);
-}
-
-if ($_POST['act'] == "deluser") {
-
- if (!isset($_POST['username']) || !isset($a_user[$id]) || ($_POST['username'] != $a_user[$id]['name'])) {
- pfSenseHeader("system_usermanager.php");
- exit;
- }
-
- conf_mount_rw();
- local_user_del($a_user[$id]);
- conf_mount_ro();
- $userdeleted = $a_user[$id]['name'];
- unset($a_user[$id]);
- write_config();
- $savemsg = gettext("User") . " {$userdeleted} " . gettext("successfully deleted") . "<br />";
-} else if ($_POST['act'] == "delpriv") {
-
- if (!$a_user[$id]) {
- pfSenseHeader("system_usermanager.php");
- exit;
- }
-
- $privdeleted = $priv_list[$a_user[$id]['priv'][$_POST['privid']]]['name'];
- unset($a_user[$id]['priv'][$_POST['privid']]);
- local_user_set($a_user[$id]);
- write_config();
- $_POST['act'] = "edit";
- $savemsg = gettext("Privilege") . " {$privdeleted} " . gettext("successfully deleted"). "<br />";
-} else if ($_POST['act'] == "expcert") {
-
- if (!$a_user[$id]) {
- pfSenseHeader("system_usermanager.php");
- exit;
- }
-
- $cert =& lookup_cert($a_user[$id]['cert'][$_POST['certid']]);
-
- $exp_name = urlencode("{$a_user[$id]['name']}-{$cert['descr']}.crt");
- $exp_data = base64_decode($cert['crt']);
- $exp_size = strlen($exp_data);
-
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename={$exp_name}");
- header("Content-Length: $exp_size");
- echo $exp_data;
- exit;
-} else if ($_POST['act'] == "expckey") {
-
- if (!$a_user[$id]) {
- pfSenseHeader("system_usermanager.php");
- exit;
- }
-
- $cert =& lookup_cert($a_user[$id]['cert'][$_POST['certid']]);
-
- $exp_name = urlencode("{$a_user[$id]['name']}-{$cert['descr']}.key");
- $exp_data = base64_decode($cert['prv']);
- $exp_size = strlen($exp_data);
-
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename={$exp_name}");
- header("Content-Length: $exp_size");
- echo $exp_data;
- exit;
-} else if ($_POST['act'] == "delcert") {
-
- if (!$a_user[$id]) {
- pfSenseHeader("system_usermanager.php");
- exit;
- }
-
- $certdeleted = lookup_cert($a_user[$id]['cert'][$_POST['certid']]);
- $certdeleted = $certdeleted['descr'];
- unset($a_user[$id]['cert'][$_POST['certid']]);
- write_config();
- $_POST['act'] = "edit";
- $savemsg = gettext("Certificate") . " {$certdeleted} " . gettext("association removed.") . "<br />";
-} else if ($_POST['act'] == "new") {
- /*
- * set this value cause the text field is read only
- * and the user should not be able to mess with this
- * setting.
- */
- $pconfig['utype'] = "user";
- $pconfig['lifetime'] = 3650;
-}
-
-if (isset($_POST['dellall_x'])) {
-
- $del_users = $_POST['delete_check'];
-
- if (!empty($del_users)) {
- foreach ($del_users as $userid) {
- if (isset($a_user[$userid]) && $a_user[$userid]['scope'] != "system") {
- conf_mount_rw();
- local_user_del($a_user[$userid]);
- conf_mount_ro();
- unset($a_user[$userid]);
- }
- }
- $savemsg = gettext("Selected users removed successfully!");
- write_config($savemsg);
- }
-}
-
-if ($_POST['save']) {
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if (isset($id) && ($a_user[$id])) {
- $reqdfields = explode(" ", "usernamefld");
- $reqdfieldsn = array(gettext("Username"));
- } else {
- if (empty($_POST['name'])) {
- $reqdfields = explode(" ", "usernamefld passwordfld1");
- $reqdfieldsn = array(
- gettext("Username"),
- gettext("Password"));
- } else {
- $reqdfields = explode(" ", "usernamefld passwordfld1 name caref keylen lifetime");
- $reqdfieldsn = array(
- gettext("Username"),
- gettext("Password"),
- gettext("Descriptive name"),
- gettext("Certificate authority"),
- gettext("Key length"),
- gettext("Lifetime"));
- }
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['usernamefld'])) {
- $input_errors[] = gettext("The username contains invalid characters.");
- }
-
- if (strlen($_POST['usernamefld']) > 16) {
- $input_errors[] = gettext("The username is longer than 16 characters.");
- }
-
- if (($_POST['passwordfld1']) && ($_POST['passwordfld1'] != $_POST['passwordfld2'])) {
- $input_errors[] = gettext("The passwords do not match.");
- }
-
- if (isset($_POST['ipsecpsk']) && !preg_match('/^[[:ascii:]]*$/', $_POST['ipsecpsk'])) {
- $input_errors[] = gettext("IPsec Pre-Shared Key contains invalid characters.");
- }
-
- if (isset($id) && $a_user[$id]) {
- $oldusername = $a_user[$id]['name'];
- } else {
- $oldusername = "";
- }
- /* make sure this user name is unique */
- if (!$input_errors) {
- foreach ($a_user as $userent) {
- if ($userent['name'] == $_POST['usernamefld'] && $oldusername != $_POST['usernamefld']) {
- $input_errors[] = gettext("Another entry with the same username already exists.");
- break;
- }
- }
- }
- /* also make sure it is not reserved */
- if (!$input_errors) {
- $system_users = explode("\n", file_get_contents("/etc/passwd"));
- foreach ($system_users as $s_user) {
- $ent = explode(":", $s_user);
- if ($ent[0] == $_POST['usernamefld'] && $oldusername != $_POST['usernamefld']) {
- $input_errors[] = gettext("That username is reserved by the system.");
- break;
- }
- }
- }
-
- /*
- * Check for a valid expiration date if one is set at all (valid means,
- * DateTime puts out a time stamp so any DateTime compatible time
- * format may be used. to keep it simple for the enduser, we only
- * claim to accept MM/DD/YYYY as inputs. Advanced users may use inputs
- * like "+1 day", which will be converted to MM/DD/YYYY based on "now".
- * Otherwise such an entry would lead to an invalid expiration data.
- */
- if ($_POST['expires']) {
- try {
- $expdate = new DateTime($_POST['expires']);
- //convert from any DateTime compatible date to MM/DD/YYYY
- $_POST['expires'] = $expdate->format("m/d/Y");
- } catch (Exception $ex) {
- $input_errors[] = gettext("Invalid expiration date format; use MM/DD/YYYY instead.");
- }
- }
-
- if (!empty($_POST['name'])) {
- $ca = lookup_ca($_POST['caref']);
- if (!$ca) {
- $input_errors[] = gettext("Invalid internal Certificate Authority") . "\n";
- }
- }
-
- /* if this is an AJAX caller then handle via JSON */
- if (isAjax() && is_array($input_errors)) {
- input_errors2Ajax($input_errors);
- exit;
- }
-
- if (!$input_errors) {
- conf_mount_rw();
- $userent = array();
- if (isset($id) && $a_user[$id]) {
- $userent = $a_user[$id];
- }
-
- isset($_POST['utype']) ? $userent['scope'] = $_POST['utype'] : $userent['scope'] = "system";
-
- /* the user name was modified */
- if (!empty($_POST['oldusername']) && ($_POST['usernamefld'] <> $_POST['oldusername'])) {
- $_SERVER['REMOTE_USER'] = $_POST['usernamefld'];
- local_user_del($userent);
- }
-
- /* the user password was modified */
- if ($_POST['passwordfld1']) {
- local_user_set_password($userent, $_POST['passwordfld1']);
- }
-
- $userent['name'] = $_POST['usernamefld'];
- $userent['descr'] = $_POST['descr'];
- $userent['expires'] = $_POST['expires'];
- $userent['authorizedkeys'] = base64_encode($_POST['authorizedkeys']);
- $userent['ipsecpsk'] = $_POST['ipsecpsk'];
-
- if ($_POST['disabled']) {
- $userent['disabled'] = true;
- } else {
- unset($userent['disabled']);
- }
-
- if (isset($id) && $a_user[$id]) {
- $a_user[$id] = $userent;
- } else {
- if (!empty($_POST['name'])) {
- $cert = array();
- $cert['refid'] = uniqid();
- $userent['cert'] = array();
-
- $cert['descr'] = $_POST['name'];
-
- $subject = cert_get_subject_array($ca['crt']);
-
- $dn = array(
- 'countryName' => $subject[0]['v'],
- 'stateOrProvinceName' => $subject[1]['v'],
- 'localityName' => $subject[2]['v'],
- 'organizationName' => $subject[3]['v'],
- 'emailAddress' => $subject[4]['v'],
- 'commonName' => $userent['name']);
-
- cert_create($cert, $_POST['caref'], $_POST['keylen'],
- (int)$_POST['lifetime'], $dn);
-
- if (!is_array($config['cert'])) {
- $config['cert'] = array();
- }
- $config['cert'][] = $cert;
- $userent['cert'][] = $cert['refid'];
- }
- $userent['uid'] = $config['system']['nextuid']++;
- /* Add the user to All Users group. */
- foreach ($config['system']['group'] as $gidx => $group) {
- if ($group['name'] == "all") {
- if (!is_array($config['system']['group'][$gidx]['member'])) {
- $config['system']['group'][$gidx]['member'] = array();
- }
- $config['system']['group'][$gidx]['member'][] = $userent['uid'];
- break;
- }
- }
-
- $a_user[] = $userent;
- }
-
- local_user_set($userent);
- local_user_set_groups($userent, $_POST['groups']);
- write_config();
-
- if (is_dir("/etc/inc/privhooks")) {
- run_plugins("/etc/inc/privhooks");
- }
-
- conf_mount_ro();
-
- pfSenseHeader("system_usermanager.php");
- }
-}
-
-$closehead = false;
-include("head.inc");
-?>
-
-<link rel="stylesheet" type="text/css" href="/javascript/jquery-ui-timepicker-addon/css/jquery-ui-timepicker-addon.css" />
-<link rel="stylesheet" type="text/css" href="/javascript/jquery/jquery-ui-1.11.1.css" />
-
-<script type="text/javascript" src="/javascript/row_toggle.js"></script>
-<script type="text/javascript">
-//<![CDATA[
- jQuery(function() {
- jQuery( "#expires" ).datepicker( { dateFormat: 'mm/dd/yy', changeYear: true, yearRange: "+0:+100" } );
- });
-//]]>
-</script>
-</head>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
-
-function setall_selected(id) {
- selbox = document.getElementById(id);
- count = selbox.options.length;
- for (index = 0; index<count; index++) {
- selbox.options[index].selected = true;
- }
-}
-
-function delete_empty(id) {
- selbox = document.getElementById(id);
- count = selbox.options.length;
- for (index = 0; index<count; index++) {
- if (selbox.options[index].value == '') {
- selbox.remove(index);
- }
- }
-}
-
-function clear_selected(id) {
- selbox = document.getElementById(id);
- count = selbox.options.length;
- for (index = 0; index<count; index++) {
- selbox.options[index].selected = false;
- }
-}
-
-function remove_selected(id) {
- selbox = document.getElementById(id);
- index = selbox.options.length - 1;
- for (; index >= 0; index--) {
- if (selbox.options[index].selected) {
- selbox.remove(index);
- }
- }
-}
-
-function copy_selected(srcid, dstid) {
- src_selbox = document.getElementById(srcid);
- dst_selbox = document.getElementById(dstid);
- count = dst_selbox.options.length;
- for (index = count - 1; index >= 0; index--) {
- if (dst_selbox.options[index].value == '') {
- dst_selbox.remove(index);
- }
- }
- count = src_selbox.options.length;
- for (index = 0; index < count; index++) {
- if (src_selbox.options[index].selected) {
- option = document.createElement('option');
- option.text = src_selbox.options[index].text;
- option.value = src_selbox.options[index].value;
- dst_selbox.add(option, null);
- }
- }
-}
-
-function move_selected(srcid, dstid) {
- copy_selected(srcid, dstid);
- remove_selected(srcid);
-}
-
-function presubmit() {
- delete_empty('groups');
- delete_empty('notgroups');
- clear_selected('notgroups');
- setall_selected('groups');
-}
-
-function usercertClicked(obj) {
- if (obj.checked) {
- document.getElementById("usercertchck").style.display="none";
- document.getElementById("usercert").style.display="";
- } else {
- document.getElementById("usercert").style.display="none";
- document.getElementById("usercertchck").style.display="";
- }
-}
-
-function sshkeyClicked(obj) {
- if (obj.checked) {
- document.getElementById("sshkeychck").style.display="none";
- document.getElementById("sshkey").style.display="";
- } else {
- document.getElementById("sshkey").style.display="none";
- document.getElementById("sshkeychck").style.display="";
- }
-}
-//]]>
-</script>
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="user manager">
- <tr>
- <td>
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Users"), true, "system_usermanager.php");
- $tab_array[] = array(gettext("Groups"), false, "system_groupmanager.php");
- $tab_array[] = array(gettext("Settings"), false, "system_usermanager_settings.php");
- $tab_array[] = array(gettext("Servers"), false, "system_authservers.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
-<?php
- if ($_POST['act'] == "new" || $_POST['act'] == "edit" || $input_errors):
-?>
- <form action="system_usermanager.php" method="post" name="iform" id="iform" onsubmit="presubmit()">
- <input type="hidden" id="act" name="act" value="" />
- <input type="hidden" id="userid" name="userid" value="<?=(isset($id) ? $id : '');?>" />
- <input type="hidden" id="privid" name="privid" value="" />
- <input type="hidden" id="certid" name="certid" value="" />
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
-<?php
- $ro = "";
- if ($pconfig['utype'] == "system") {
- $ro = "readonly=\"readonly\"";
- }
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Defined by");?></td>
- <td width="78%" class="vtable">
- <strong><?=strtoupper(htmlspecialchars($pconfig['utype']));?></strong>
- <input name="utype" type="hidden" value="<?=htmlspecialchars($pconfig['utype'])?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Disabled");?></td>
- <td width="78%" class="vtable">
- <input name="disabled" type="checkbox" id="disabled" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Username");?></td>
- <td width="78%" class="vtable">
- <input name="usernamefld" type="text" class="formfld user" id="usernamefld" size="20" maxlength="16" value="<?=htmlspecialchars($pconfig['usernamefld']);?>" <?=$ro;?> />
- <input name="oldusername" type="hidden" id="oldusername" value="<?=htmlspecialchars($pconfig['usernamefld']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq" rowspan="2"><?=gettext("Password");?></td>
- <td width="78%" class="vtable">
- <input name="passwordfld1" type="password" class="formfld pwd" id="passwordfld1" size="20" value="" />
- </td>
- </tr>
- <tr>
- <td width="78%" class="vtable">
- <input name="passwordfld2" type="password" class="formfld pwd" id="passwordfld2" size="20" value="" />&nbsp;<?= gettext("(confirmation)"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Full name");?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="20" value="<?=htmlspecialchars($pconfig['descr']);?>" <?=$ro;?> />
- <br />
- <?=gettext("User's full name, for your own information only");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Expiration date"); ?></td>
- <td width="78%" class="vtable">
- <input name="expires" type="text" class="formfld unknown" id="expires" size="10" value="<?=htmlspecialchars($pconfig['expires']);?>" />
- <br />
- <span class="vexpl"><?=gettext("Leave blank if the account shouldn't expire, otherwise enter the expiration date in the following format: mm/dd/yyyy"); ?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Group Memberships");?></td>
- <td width="78%" class="vtable" align="center">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="group membership">
- <tr>
- <td align="center" width="50%">
- <strong><?=gettext("Not Member Of"); ?></strong><br />
- <br />
- <select size="10" style="width: 75%" name="notgroups[]" class="formselect" id="notgroups" onchange="clear_selected('groups')" multiple="multiple">
-<?php
- $rowIndex = 0;
- foreach ($config['system']['group'] as $group):
- if ($group['gid'] == 1998) { /* all users group */
- continue;
- }
- if (is_array($pconfig['groups']) && in_array($group['name'], $pconfig['groups'])) {
- continue;
- }
- $rowIndex++;
-?>
- <option value="<?=$group['name'];?>" <?=$selected;?>>
- <?=htmlspecialchars($group['name']);?>
- </option>
-<?php
- endforeach;
- if ($rowIndex == 0) {
- echo "<option></option>";
- }
-?>
- </select>
- <br />
- </td>
- <td>
- <br />
- <a href="javascript:move_selected('notgroups', 'groups')">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_right.gif" title="<?=gettext("Add Groups"); ?>" alt="<?=gettext("Add Groups"); ?>" width="17" height="17" border="0" />
- </a>
- <br /><br />
- <a href="javascript:move_selected('groups', 'notgroups')">
- <img src="/themes/<?= $g['theme'];?>/images/icons/icon_left.gif" title="<?=gettext("Remove Groups"); ?>" alt="<?=gettext("Remove Groups"); ?>" width="17" height="17" border="0" />
- </a>
- </td>
- <td align="center" width="50%">
- <strong><?=gettext("Member Of"); ?></strong><br />
- <br />
- <select size="10" style="width: 75%" name="groups[]" class="formselect" id="groups" onchange="clear_selected('notgroups')" multiple="multiple">
-<?php
- $rowIndex = 0;
- if (is_array($pconfig['groups'])):
- foreach ($config['system']['group'] as $group):
- if ($group['gid'] == 1998) { /* all users group */
- continue;
- }
- if (!in_array($group['name'], $pconfig['groups'])) {
- continue;
- }
- $rowIndex++;
-?>
- <option value="<?=$group['name'];?>">
- <?=htmlspecialchars($group['name']);?>
- </option>
-<?php
- endforeach;
- endif;
- if ($rowIndex == 0) {
- echo "<option></option>";
- }
-?>
- </select>
- <br />
- </td>
- </tr>
- </table>
- <?=gettext("Hold down CTRL (pc)/COMMAND (mac) key to select multiple items");?>
- </td>
- </tr>
-<?php
- if (isset($pconfig['uid'])):
-?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Effective Privileges");?></td>
- <td width="78%" class="vtable">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="privileges">
- <tr>
- <td width="20%" class="listhdrr"><?=gettext("Inherited From");?></td>
- <td width="30%" class="listhdrr"><?=gettext("Name");?></td>
- <td width="40%" class="listhdrr"><?=gettext("Description");?></td>
- <td class="list"></td>
- </tr>
-<?php
- $privdesc = get_user_privdesc($a_user[$id]);
- if (is_array($privdesc)):
- $i = 0;
- foreach ($privdesc as $priv):
- $group = false;
- if ($priv['group']) {
- $group = $priv['group'];
- }
-?>
- <tr>
- <td class="listlr"><?=$group;?></td>
- <td class="listr">
- <?=htmlspecialchars($priv['name']);?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($priv['descr']);?>
- </td>
- <td valign="middle" class="list nowrap">
-<?php
- if (!$group):
-?>
- <input type="image" name="delpriv[]" width="17" height="17" border="0"
- src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif"
- onclick="document.getElementById('privid').value='<?=$i;?>';
- document.getElementById('userid').value='<?=$id;?>';
- document.getElementById('act').value='<?php echo "delpriv";?>';
- return confirm('<?=gettext("Do you really want to delete this privilege?");?>');"
- title="<?=gettext("delete privilege");?>" />
-<?php
- endif;
-?>
- </td>
- </tr>
-<?php
- /* can only delete user priv indexes */
- if (!$group) {
- $i++;
- }
- endforeach;
- endif;
-?>
- <tr>
- <td class="list" colspan="3"></td>
- <td class="list">
- <a href="system_usermanager_addprivs.php?userid=<?=$id?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("User Certificates");?></td>
- <td width="78%" class="vtable">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="certificates">
- <tr>
- <td width="45%" class="listhdrr"><?=gettext("Name");?></td>
- <td width="45%" class="listhdrr"><?=gettext("CA");?></td>
- <td class="list"></td>
- </tr>
-<?php
- $a_cert = $a_user[$id]['cert'];
- if (is_array($a_cert)):
- $i = 0;
- foreach ($a_cert as $certref):
- $cert = lookup_cert($certref);
- $ca = lookup_ca($cert['caref']);
-?>
- <tr>
- <td class="listlr">
- <?=htmlspecialchars($cert['descr']);?>
-<?php
- if (is_cert_revoked($cert)):
-?>
- (<b>Revoked</b>)
-<?php
- endif;
-?>
- </td>
- <td class="listr">
- <?=htmlspecialchars($ca['descr']);?>
- </td>
- <td valign="middle" class="list nowrap">
- <input type="image" name="expckey[]" width="17" height="17" border="0"
- src="/themes/<?=$g['theme'];?>/images/icons/icon_down.gif"
- onclick="document.getElementById('certid').value='<?=$i;?>';
- document.getElementById('userid').value='<?=$id;?>';
- document.getElementById('act').value='<?php echo "expckey";?>';"
- title="<?=gettext("export private key");?>" />
- <input type="image" name="expcert[]" width="17" height="17" border="0"
- src="/themes/<?=$g['theme'];?>/images/icons/icon_down.gif"
- onclick="document.getElementById('certid').value='<?=$i;?>';
- document.getElementById('userid').value='<?=$id;?>';
- document.getElementById('act').value='<?php echo "expcert";?>';"
- title="<?=gettext("export cert");?>" />
- <input type="image" name="delcert[]" width="17" height="17" border="0"
- src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif"
- onclick="document.getElementById('certid').value='<?=$i;?>';
- document.getElementById('userid').value='<?=$id;?>';
- document.getElementById('act').value='<?php echo "delcert";?>';
- return confirm('<?=gettext("Do you really want to remove this certificate association?") .'\n'. gettext("(Certificate will not be deleted)");?>')"
- title="<?=gettext("delete cert");?>" />
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
- endif;
-?>
- <tr>
- <td class="list" colspan="2"></td>
- <td class="list">
- <a href="system_certmanager.php?act=new&amp;userid=<?=$id?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" />
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
-<?php
- else:
- if (is_array($config['ca']) && count($config['ca']) > 0):
- $i = 0;
- foreach ($config['ca'] as $ca) {
- if (!$ca['prv']) {
- continue;
- }
- $i++;
- }
-?>
-
- <tr id="usercertchck">
- <td width="22%" valign="top" class="vncell"><?=gettext("Certificate");?></td>
- <td width="78%" class="vtable">
- <input type="checkbox" onclick="javascript:usercertClicked(this)" /> <?=gettext("Click to create a user certificate."); ?>
- </td>
- </tr>
-
-<?php
- if ($i > 0):
-?>
- <tr id="usercert" style="display:none">
- <td width="22%" valign="top" class="vncell"><?=gettext("Certificate");?></td>
- <td width="78%" class="vtable">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="certificate">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Descriptive name");?></td>
- <td width="78%" class="vtable">
- <input name="name" type="text" class="formfld unknown" id="name" size="20" value="<?=htmlspecialchars($pconfig['name']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Certificate authority");?></td>
- <td width="78%" class="vtable">
- <select name='caref' id='caref' class="formselect" onchange='internalca_change()'>
-<?php
- $rowIndex = 0;
- foreach ($config['ca'] as $ca):
- if (!$ca['prv']) {
- continue;
- }
- $rowIndex++;
-?>
- <option value="<?=$ca['refid'];?>"><?=htmlspecialchars($ca['descr']);?></option>
-<?php
- endforeach;
- if ($rowIndex == 0) {
- echo "<option></option>";
- }
-?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Key length");?></td>
- <td width="78%" class="vtable">
- <select name='keylen' class="formselect">
-<?php
- $cert_keylens = array("2048", "512", "1024", "4096");
- foreach ($cert_keylens as $len):
-?>
- <option value="<?=$len;?>"><?=$len;?></option>
-<?php
- endforeach;
- if (!count($cert_keylens)) {
- echo "<option></option>";
- }
-?>
- </select>
- bits
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Lifetime");?></td>
- <td width="78%" class="vtable">
- <input name="lifetime" type="text" class="formfld unknown" id="lifetime" size="5" value="<?=htmlspecialchars($pconfig['lifetime']);?>" />days
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- endif;
- endif;
- endif;
-?>
- <tr id="sshkeychck" <?php if (!empty($pconfig['authorizedkeys'])) echo 'style="display:none"'; ?>>
- <td width="22%" valign="top" class="vncell"><?=gettext("Authorized keys");?></td>
- <td width="78%" class="vtable">
- <input type="checkbox" onclick="javascript:sshkeyClicked(this)" /> <?=gettext("Click to paste an authorized key."); ?>
- </td>
- </tr>
- <tr id="sshkey" <?php if (empty($pconfig['authorizedkeys'])) echo 'style="display:none"'; ?>>
- <td width="22%" valign="top" class="vncell"><?=gettext("Authorized keys");?></td>
- <td width="78%" class="vtable">
- <script type="text/javascript">
- //<![CDATA[
- window.onload=function() {
- document.getElementById("authorizedkeys").wrap='off';
- }
- //]]>
- </script>
- <textarea name="authorizedkeys" cols="65" rows="7" id="authorizedkeys" class="formfld_cert"><?=htmlspecialchars($pconfig['authorizedkeys']);?></textarea>
- <br />
- <?=gettext("Paste an authorized keys file here.");?>
- </td>
- </tr>
- <tr id="ipsecpskrow">
- <td width="22%" valign="top" class="vncell"><?=gettext("IPsec Pre-Shared Key");?></td>
- <td width="78%" class="vtable">
- <input name="ipsecpsk" type="text" class="formfld unknown" id="ipsecpsk" size="65" value="<?=htmlspecialchars($pconfig['ipsecpsk']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submit" name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <?php if (isset($id) && $a_user[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif;?>
- </td>
- </tr>
- </table>
- </form>
-<?php
- else:
-?>
- <form action="system_usermanager.php" method="post" name="iform2" id="iform2">
- <input type="hidden" id="act" name="act" value="" />
- <input type="hidden" id="userid" name="userid" value="<?=(isset($id) ? $id : '');?>" />
- <input type="hidden" id="username" name="username" value="" />
- <input type="hidden" id="privid" name="privid" value="" />
- <input type="hidden" id="certid" name="certid" value="" />
- <table class="sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="">
- <thead>
- <tr>
- <th width="5%" class="list">&nbsp;</th>
- <th width="25%" class="listhdrr"><?=gettext("Username"); ?></th>
- <th width="25%" class="listhdrr"><?=gettext("Full name"); ?></th>
- <th width="5%" class="listhdrr"><?=gettext("Disabled"); ?></th>
- <th width="25%" class="listhdrr"><?=gettext("Groups"); ?></th>
- <th width="10%" class="list"></th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <td class="list" colspan="5"></td>
- <td class="list">
- <input type="image" name="addcert" width="17" height="17" border="0"
- src="/themes/<?=$g['theme'];?>/images/icons/icon_plus.gif"
- onclick="document.getElementById('act').value='<?php echo "new";?>';"
- title="<?=gettext("add user");?>" />
- <input type="image" src="/themes/<?= $g['theme'];?>/images/icons/icon_x.gif" name="dellall" title="<?=gettext('Delete selected users')?>" onClick="return confirm('<?=gettext("Do you really want to delete selected Users?");?>')" />
- </td>
- </tr>
- <tr>
- <td colspan="5">
- <p>
- <?=gettext("Additional users can be added here. User permissions for accessing " .
- "the webConfigurator can be assigned directly or inherited from group memberships. " .
- "An icon that appears grey indicates that it is a system defined object. " .
- "Some system object properties can be modified but they cannot be deleted."); ?>
- <br /><br />
- <?=gettext("Accounts created here are also used for other parts of the system " .
- "such as OpenVPN, IPsec, and Captive Portal.");?>
- </p>
- </td>
- </tr>
- </tfoot>
- <tbody>
-<?php
- $i = 0;
- foreach ($a_user as $userent):
-?>
- <tr ondblclick="document.getElementById('act').value='<?php echo "edit";?>';
- document.getElementById('userid').value='<?=$i;?>';
- document.iform2.submit();" id="fr<?=$i?>">
- <td class="list" id="frd<?=$i?>">
- <?php if ($userent['scope'] != "system") : ?>
- <input type="checkbox" id="frc<?=$i?>" onclick="fr_bgcolor(<?=$i?>)" name="delete_check[]" value="<?=$i?>" />
- <?php endif; ?>
- </td>
- <td class="listlr" id="frd<?=$i?>" onclick="fr_toggle('<?=$i;?>')">
- <table border="0" cellpadding="0" cellspacing="0" summary="icons">
- <tr>
- <td align="left" valign="middle">
-<?php
- if ($userent['scope'] != "user") {
- $usrimg = "/themes/{$g['theme']}/images/icons/icon_system-user-grey.png";
- } else {
- $usrimg = "/themes/{$g['theme']}/images/icons/icon_system-user.png";
- }
-?>
- <img src="<?=$usrimg;?>" alt="<?=gettext("User"); ?>" title="<?=gettext("User"); ?>" border="0" height="16" width="16" />
- </td>
- <td align="left" valign="middle">
- <?=htmlspecialchars($userent['name']);?>
- </td>
- </tr>
- </table>
- </td>
- <td class="listr" id="frd<?=$i?>" onclick="fr_toggle('<?=$i;?>')"><?=htmlspecialchars($userent['descr']);?>&nbsp;</td>
- <td class="listr" id="frd<?=$i?>" onclick="fr_toggle('<?=$i;?>')"><?php if (isset($userent['disabled'])) echo "*"; ?></td>
- <td class="listbg" onclick="fr_toggle('<?=$i;?>')">
- <?=implode(",", local_user_get_groups($userent));?>
- &nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <input type="image" name="edituser[]" width="17" height="17" border="0"
- src="/themes/<?=$g['theme'];?>/images/icons/icon_e.gif"
- onclick="document.getElementById('userid').value='<?=$i;?>';
- document.getElementById('act').value='<?php echo "edit";?>';"
- title="<?=gettext("edit user");?>" />
-<?php
- if ($userent['scope'] != "system"):
-?>
- &nbsp;
- <input type="image" name="deluser[]" width="17" height="17" border="0"
- src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif"
- onclick="document.getElementById('userid').value='<?=$i;?>';
- document.getElementById('username').value='<?=$userent['name'];?>';
- document.getElementById('act').value='<?php echo "deluser";?>';
- return confirm('<?=gettext("Do you really want to delete this user?");?>');"
- title="<?=gettext("delete user");?>" />
-<?php
- endif;
-?>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- </tbody>
- </table>
- </form>
-<?php
- endif;
-?>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc");?>
-</body>
-</html>
diff --git a/usr/local/www/system_usermanager_addprivs.php b/usr/local/www/system_usermanager_addprivs.php
deleted file mode 100644
index 40b11a6..0000000
--- a/usr/local/www/system_usermanager_addprivs.php
+++ /dev/null
@@ -1,220 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_usermanager_addprivs.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Copyright (C) 2006 Daniel S. Haischt.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: auth
-*/
-
-##|+PRIV
-##|*IDENT=page-system-usermanager-addprivs
-##|*NAME=System: User Manager: Add Privileges page
-##|*DESCR=Allow access to the 'System: User Manager: Add Privileges' page.
-##|*MATCH=system_usermanager_addprivs.php*
-##|-PRIV
-
-function admusercmp($a, $b) {
- return strcasecmp($a['name'], $b['name']);
-}
-
-require("guiconfig.inc");
-
-$pgtitle = array("System", "User manager", "Add privileges");
-
-if (is_numericint($_GET['userid'])) {
- $userid = $_GET['userid'];
-}
-if (isset($_POST['userid']) && is_numericint($_POST['userid'])) {
- $userid = $_POST['userid'];
-}
-
-if (!isset($config['system']['user'][$userid]) && !is_array($config['system']['user'][$userid])) {
- pfSenseHeader("system_usermanager.php");
- exit;
-}
-
-$a_user = & $config['system']['user'][$userid];
-
-if (!is_array($a_user['priv'])) {
- $a_user['priv'] = array();
-}
-
-if ($_POST) {
- conf_mount_rw();
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "sysprivs");
- $reqdfieldsn = array(gettext("Selected privileges"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- /* if this is an AJAX caller then handle via JSON */
- if (isAjax() && is_array($input_errors)) {
- input_errors2Ajax($input_errors);
- exit;
- }
-
- if (!$input_errors) {
-
- if (!is_array($pconfig['sysprivs'])) {
- $pconfig['sysprivs'] = array();
- }
-
- if (!count($a_user['priv'])) {
- $a_user['priv'] = $pconfig['sysprivs'];
- } else {
- $a_user['priv'] = array_merge($a_user['priv'], $pconfig['sysprivs']);
- }
-
- $a_user['priv'] = sort_user_privs($a_user['priv']);
- local_user_set($a_user);
- $retval = write_config();
- $savemsg = get_std_save_message($retval);
- conf_mount_ro();
-
- post_redirect("system_usermanager.php", array('act' => 'edit', 'userid' => $userid));
-
- exit;
- }
- conf_mount_ro();
-}
-
-/* if ajax is calling, give them an update message */
-if (isAjax()) {
- print_info_box_np($savemsg);
-}
-
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-
-<?php
-
-if (is_array($priv_list)) {
- $id = 0;
-
- $jdescs = "var descs = new Array();\n";
- foreach ($priv_list as $pname => $pdata) {
- if (in_array($pname, $a_user['priv'])) {
- continue;
- }
- $desc = addslashes(preg_replace("/pfSense/i", $g['product_name'], $pdata['descr']));
- $jdescs .= "descs[{$id}] = '{$desc}';\n";
- $id++;
- }
-
- echo $jdescs;
-}
-
-?>
-
-function update_description() {
- var index = document.iform.sysprivs.selectedIndex;
- document.getElementById("pdesc").innerHTML = descs[index];
-}
-
-//]]>
-</script>
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="user manager add privileges">
- <tr>
- <td>
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Users"), true, "system_usermanager.php");
- $tab_array[] = array(gettext("Groups"), false, "system_groupmanager.php");
- $tab_array[] = array(gettext("Settings"), false, "system_usermanager_settings.php");
- $tab_array[] = array(gettext("Servers"), false, "system_authservers.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <form action="system_usermanager_addprivs.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("System Privileges");?></td>
- <td width="78%" class="vtable">
- <select name="sysprivs[]" id="sysprivs" class="formselect" onchange="update_description();" multiple="multiple" size="35">
- <?php
- foreach ($priv_list as $pname => $pdata):
- if (in_array($pname, $a_user['priv'])) {
- continue;
- }
- ?>
- <option value="<?=$pname;?>"><?=$pdata['name'];?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <?=gettext("Hold down CTRL (pc)/COMMAND (mac) key to select multiple items");?>
- </td>
- </tr>
- <tr height="60">
- <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
- <td width="78%" valign="top" class="vtable" id="pdesc">
- <em><?=gettext("Select a privilege from the list above for a description"); ?></em>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input id="cancelbutton" class="formbtn" type="button" value="<?=gettext("Cancel");?>" onclick="history.back()" />
- <?php if (isset($userid)): ?>
- <input name="userid" type="hidden" value="<?=htmlspecialchars($userid);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </form>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/system_usermanager_passwordmg.php b/usr/local/www/system_usermanager_passwordmg.php
deleted file mode 100644
index 6d785ee..0000000
--- a/usr/local/www/system_usermanager_passwordmg.php
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-/* $Id$ */
-/*
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2011 Ermal Luçi
- system_usermanager_passwordmg.php
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES:
- pfSense_MODULE: auth
-*/
-
-##|+PRIV
-##|*IDENT=page-system-usermanager-passwordmg
-##|*NAME=System: User Password Manager page
-##|*DESCR=Allow access to the 'System: User Password Manager' page.
-##|*MATCH=system_usermanager_passwordmg.php*
-##|-PRIV
-
-require_once("auth.inc");
-require_once("certs.inc");
-require_once("guiconfig.inc");
-
-$pgtitle = array(gettext("System"), gettext("User Password"));
-
-if (isset($_POST['save'])) {
- unset($input_errors);
- /* input validation */
-
- $reqdfields = explode(" ", "passwordfld1");
- $reqdfieldsn = array(gettext("Password"));
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if ($_POST['passwordfld1'] != $_POST['passwordfld2']) {
- $input_errors[] = gettext("The passwords do not match.");
- }
-
- if (!$input_errors) {
- if (!session_id()) {
- session_start();
- }
- // all values are okay --> saving changes
-
- $userent =& $config['system']['user'][$userindex[$_SESSION['Username']]];
- local_user_set_password($userent, $_POST['passwordfld1']);
- local_user_set($userent);
- unset($userent);
- session_commit();
-
- write_config();
-
- $savemsg = gettext("Password successfully changed") . "<br />";
- }
-}
-
-if (!session_id()) {
- session_start();
-}
-
-/* determine if user is not local to system */
-$islocal = false;
-foreach ($config['system']['user'] as $user) {
- if ($user['name'] == $_SESSION['Username']) {
- $islocal = true;
- }
-}
-
-session_commit();
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php
-include("fbegin.inc");
-
-if ($input_errors) {
- print_input_errors($input_errors);
-}
-if ($savemsg) {
- print_info_box($savemsg);
-}
-
-if ($islocal == false) {
- echo gettext("Sorry, you cannot change the password for a non-local user.");
- include("fend.inc");
- exit;
-}
-
-?>
-
-<div id="mainarea">
- <div class="tabcont">
- <form action="system_usermanager_passwordmg.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
-<?php
- if (!session_id()) {
- session_start();
- }
-?>
- <td colspan="2" valign="top" class="listtopic"><?=$_SESSION['Username']?>'s <?=gettext("Password"); ?></td>
-<?php session_commit(); ?>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell" rowspan="2"><?=gettext("Password"); ?></td>
- <td width="78%" class="vtable">
- <input name="passwordfld1" type="password" class="formfld pwd" id="passwordfld1" size="20" />
- </td>
- </tr>
- <tr>
- <td width="78%" class="vtable">
- <input name="passwordfld2" type="password" class="formfld pwd" id="passwordfld2" size="20" />
- &nbsp;<?=gettext("(confirmation)");?>
- <br />
- <span class="vexpl">
- <?=gettext("Select a new password");?>
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- </td>
- </tr>
- </table>
- </form>
- </div>
-</div>
-<?php include("fend.inc");?>
-</body>
-</html>
diff --git a/usr/local/www/system_usermanager_settings.php b/usr/local/www/system_usermanager_settings.php
deleted file mode 100644
index cadfb08..0000000
--- a/usr/local/www/system_usermanager_settings.php
+++ /dev/null
@@ -1,185 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_usermanager_settings.php
-
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2007 Scott Ullrich <sullrich@gmail.com>
- Copyright (C) 2007 Bill Marquette <bill.marquette@gmail.com>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: auth
-*/
-
-##|+PRIV
-##|*IDENT=page-system-usermanager-settings
-##|*NAME=System: User Manager: settings page
-##|*DESCR=Allow access to the 'System: User Manager: settings' page.
-##|*MATCH=system_usermanager_settings.php*
-##|-PRIV
-
-require("guiconfig.inc");
-
-$pconfig['session_timeout'] = &$config['system']['webgui']['session_timeout'];
-$pconfig['authmode'] = &$config['system']['webgui']['authmode'];
-$pconfig['backend'] = &$config['system']['webgui']['backend'];
-
-// Page title for main admin
-$pgtitle = array(gettext("System"), gettext("User manager settings"));
-
-$save_and_test = false;
-if ($_POST) {
- unset($input_errors);
- $pconfig = $_POST;
-
- if (isset($_POST['session_timeout'])) {
- $timeout = intval($_POST['session_timeout']);
- if ($timeout != "" && (!is_numeric($timeout) || $timeout <= 0)) {
- $input_errors[] = gettext("Session timeout must be an integer value.");
- }
- }
-
- if (!$input_errors) {
- if ($_POST['authmode'] != "local") {
- $authsrv = auth_get_authserver($_POST['authmode']);
- if ($_POST['savetest']) {
- if ($authsrv['type'] == "ldap") {
- $save_and_test = true;
- } else {
- $savemsg = gettext("The test was not performed because it is supported only for ldap based backends.");
- }
- }
- }
-
-
- if (isset($_POST['session_timeout']) && $_POST['session_timeout'] != "") {
- $config['system']['webgui']['session_timeout'] = intval($_POST['session_timeout']);
- } else {
- unset($config['system']['webgui']['session_timeout']);
- }
-
- if ($_POST['authmode']) {
- $config['system']['webgui']['authmode'] = $_POST['authmode'];
- } else {
- unset($config['system']['webgui']['authmode']);
- }
-
- write_config();
-
- }
-}
-
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc");?>
-<?php if ($input_errors) print_input_errors($input_errors);?>
-<?php if ($savemsg) print_info_box($savemsg);?>
-
-<?php
- if ($save_and_test) {
- echo "<script type=\"text/javascript\">\n";
- echo "//<![CDATA[\n";
- echo "myRef = window.open('system_usermanager_settings_test.php?authserver={$pconfig['authmode']}','mywin', ";
- echo "'left=20,top=20,width=700,height=550,toolbar=1,resizable=0');\n";
- echo "if (myRef==null || typeof(myRef)=='undefined') alert('" . gettext("Popup blocker detected. Action aborted.") ."');\n";
- echo "//]]>\n";
- echo "</script>\n";
- }
-?>
-
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="user manager settings">
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Users"), false, "system_usermanager.php");
- $tab_array[] = array(gettext("Groups"), false, "system_groupmanager.php");
- $tab_array[] = array(gettext("Settings"), true, "system_usermanager_settings.php");
- $tab_array[] = array(gettext("Servers"), false, "system_authservers.php");
- display_top_tabs($tab_array);
-
- /* Default to pfsense backend type if none is defined */
- if (!$pconfig['backend']) {
- $pconfig['backend'] = "pfsense";
- }
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <form id="iform" name="iform" action="system_usermanager_settings.php" method="post">
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="6" summary="main area">
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Session Timeout"); ?></td>
- <td width="78%" class="vtable">
- <input name="session_timeout" id="session_timeout" type="text" size="8" value="<?=htmlspecialchars($pconfig['session_timeout']);?>" />
- <br />
- <?=gettext("Time in minutes to expire idle management sessions. The default is 4 hours (240 minutes).");?><br />
- <?=gettext("Enter 0 to never expire sessions. NOTE: This is a security risk!");?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Authentication Server"); ?></td>
- <td width="78%" class="vtable">
- <select name='authmode' id='authmode' class="formselect" >
-<?php
- $auth_servers = auth_get_authserver_list();
- foreach ($auth_servers as $auth_server):
- $selected = "";
- if ($auth_server['name'] == $pconfig['authmode']) {
- $selected = "selected=\"selected\"";
- }
- if (!isset($pconfig['authmode']) && $auth_server['name'] == "Local Database") {
- $selected = "selected=\"selected\"";
- }
-?>
- <option value="<?=$auth_server['name'];?>" <?=$selected;?>><?=$auth_server['name'];?></option>
-<?php
- endforeach;
-?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="save" name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <input id="savetest" name="savetest" type="submit" class="formbtn" value="<?=gettext("Save and Test");?>" />
- </td>
- </tr>
- </table>
- </form>
- </div>
- </td>
- </tr>
- </table>
-<?php include("fend.inc");?>
-</body>
-</html>
diff --git a/usr/local/www/system_usermanager_settings_ldapacpicker.php b/usr/local/www/system_usermanager_settings_ldapacpicker.php
deleted file mode 100644
index 068142e..0000000
--- a/usr/local/www/system_usermanager_settings_ldapacpicker.php
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_usermanager_settings_ldapacpicker.php
- part of pfSense (https://www.pfsense.org/)
- Copyright (C) 2007 Scott Ullrich <sullrich@gmail.com>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: auth
-*/
-
-require("guiconfig.inc");
-require_once("auth.inc");
-
-$ous = array();
-
-if ($_GET) {
- $authcfg = array();
- $authcfg['ldap_port'] = $_GET['port'];
- $authcfg['ldap_basedn'] = $_GET['basedn'];
- $authcfg['host'] = $_GET['host'];
- $authcfg['ldap_scope'] = $_GET['scope'];
- $authcfg['ldap_binddn'] = $_GET['binddn'];
- $authcfg['ldap_bindpw'] = $_GET['bindpw'];
- $authcfg['ldap_urltype'] = $_GET['urltype'];
- $authcfg['ldap_protver'] = $_GET['proto'];
- $authcfg['ldap_authcn'] = explode(";", $_GET['authcn']);
- $authcfg['ldap_caref'] = $_GET['cert'];
- $ous = ldap_get_user_ous(true, $authcfg);
-}
-
-?>
-<html>
- <head>
- <STYLE type="text/css">
- TABLE {
- border-width: 1px 1px 1px 1px;
- border-spacing: 0px;
- border-style: solid solid solid solid;
- border-color: gray gray gray gray;
- border-collapse: separate;
- background-color: collapse;
- }
- TD {
- border-width: 0px 0px 0px 0px;
- border-spacing: 0px;
- border-style: solid solid solid solid;
- border-color: gray gray gray gray;
- border-collapse: collapse;
- background-color: white;
- }
- </STYLE>
- </head>
-<script type="text/javascript">
-function post_choices() {
-
- var ous = <?php echo count($ous); ?>;
- var i;
- opener.document.forms[0].ldapauthcontainers.value="";
- for (i = 0; i < ous; i++) {
- if (document.forms[0].ou[i].checked) {
- if (opener.document.forms[0].ldapauthcontainers.value != "") {
- opener.document.forms[0].ldapauthcontainers.value+=";";
- }
- opener.document.forms[0].ldapauthcontainers.value+=document.forms[0].ou[i].value;
- }
- }
- window.close();
--->
-}
-</script>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" >
-<form method="post" action="system_usermanager_settings_ldapacpicker.php">
-<?php if (empty($ous)): ?>
- <p><?=gettext("Could not connect to the LDAP server. Please check your LDAP configuration.");?></p>
- <input type='button' value='<?=gettext("Close"); ?>' onClick="window.close();">
-<?php else: ?>
- <b><?=gettext("Please select which containers to Authenticate against:");?></b>
- <p/>
- <table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td class="tabnavtbl">
- <table width="100%">
-<?php
- if (is_array($ous)) {
- foreach ($ous as $ou) {
- if (in_array($ou, $authcfg['ldap_authcn'])) {
- $CHECKED=" CHECKED";
- } else {
- $CHECKED="";
- }
- echo " <tr><td><input type='checkbox' value='{$ou}' id='ou' name='ou[]'{$CHECKED}> {$ou}<br /></td></tr>\n";
- }
- }
-?>
- </table>
- </td>
- </tr>
- </table>
-
- <p/>
-
- <input type='button' value='<?=gettext("Save");?>' onClick="post_choices();">
-<?php endif; ?>
-</form>
-</body>
-</html>
diff --git a/usr/local/www/system_usermanager_settings_test.php b/usr/local/www/system_usermanager_settings_test.php
deleted file mode 100755
index 9076262..0000000
--- a/usr/local/www/system_usermanager_settings_test.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-/* $Id$ */
-/*
- system_usermanager_settings_test.php
- part of pfSense (https://www.pfsense.org/)
- Copyright (C) 2007 Scott Ullrich <sullrich@gmail.com>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2014 Silvio Giunge <desenvolvimento@bluepex.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: auth
-*/
-
-##|+PRIV
-##|*IDENT=page-system-usermanager-settings-testldap
-##|*NAME=System: User Manager: Settings: Test LDAP page
-##|*DESCR=Allow access to the 'System: User Manager: Settings: Test LDAP' page.
-##|*MATCH=system_usermanager_settings_test.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("auth.inc");
-
-if (isset($config['system']['authserver'][0]['host'])) {
- $auth_server = $config['system']['authserver'][0]['host'];
- $authserver = $_GET['authserver'];
- $authcfg = auth_get_authserver($authserver);
-}
-
-?>
-
-<html>
-<HEAD>
- <STYLE type="text/css">
- TABLE {
- border-width: 1px;
- border-spacing: 0px;
- border-style: solid solid solid solid;
- border-color: gray gray gray gray;
- border-collapse: separate;
- background-color: collapse;
- }
- TD {
- border-width: 1px 1px 1px 1px;
- border-spacing: 0px;
- border-style: solid solid solid solid;
- border-color: gray gray gray gray;
- border-collapse: collapse;
- background-color: #dddddd;
- }
- </STYLE>
-</HEAD>
-<body>
- <form method="post" name="iform" id="iform">
-
-<?php
-$theme = $config['theme'];
-
-if (!$authcfg) {
- printf(gettext("Could not find settings for %s%s"), htmlspecialchars($authserver), "<p/>");
-} else {
- if ($theme != "" && file_exists("/usr/local/www/themes/{$theme}/images/logo.gif")) {
- echo "<p><img src='/themes/{$theme}/images/logo.gif' style='float: left'><br/><br/><br/></p>";
- }
- echo "<b>" . sprintf(gettext("Testing %s LDAP settings... One moment please..."), $g['product_name']) . "</b>";
-
- echo "<table width='100%'>";
-
- echo "<tr><td>" . gettext("Attempting connection to") . " " . "<td><center>$auth_server</b></center></td>";
- if (ldap_test_connection($authcfg)) {
- echo "<td><center><font color=green>OK</center></td></tr>";
-
- echo "<tr><td>" . gettext("Attempting bind to") . " " . "<td><center>$auth_server</b></center></td>";
- if (ldap_test_bind($authcfg)) {
- echo "<td><center><font color=green>OK</center></td></tr>";
-
- echo "<tr><td>" . gettext("Attempting to fetch Organizational Units from") . " " . "<td><center>$auth_server</b></center></td>";
- $ous = ldap_get_user_ous(true, $authcfg);
- if (count($ous)>1) {
- echo "<td><center><font color=green>OK</center></td></tr>";
- echo "</table>";
- if (is_array($ous)) {
- echo "<br/>";
- echo "<b>" . gettext("Organization units found") . "</b>";
- echo "<table width='100%'>";
- foreach ($ous as $ou) {
- echo "<tr><td onmouseover=\"this.style.backgroundColor='#ffffff';\" onmouseout=\"this.style.backgroundColor='#dddddd';\">" . $ou . "</td></tr>";
- }
- }
- } else {
- echo "<td><font color=red>" . gettext("failed") . "</td></tr>";
- }
-
- echo "</table><p/>";
-
- } else {
- echo "<td><font color=red>" . gettext("failed") . "</td></tr>";
- echo "</table><p/>";
- }
- } else {
- echo "<td><font color=red>" . gettext("failed") . "</td></tr>";
- echo "</table><p/>";
- }
-}
-
-?>
- <p/>
- <input type="Button" value="<?=gettext("Close"); ?>" onClick='Javascript:window.close();'>
-
- </form>
-</body>
-</html>
diff --git a/usr/local/www/themes/_corporate/all.css b/usr/local/www/themes/_corporate/all.css
deleted file mode 100644
index ea578fa..0000000
--- a/usr/local/www/themes/_corporate/all.css
+++ /dev/null
@@ -1,1209 +0,0 @@
-/*
- * "corporate" theme by Guillaume Belanger <gbelanger@exosecurity.com>
- * based on the original "metallic" theme */
-
-
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-}
-
-.nowrap { white-space: nowrap; }
-
-.addgatewaybox {
- background-color: #990000;
- border-style: none none none none;
- width: 225px;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 11px;
- font-family: "Trebuchet MS", sans-serif;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- background-color: #333333;
- margin: 5px auto;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 815px;
- margin: 5px auto;
-}
-
-#header {
- background: url('images/header.gif') no-repeat;
- background-position: 4px;
- height: 102px;
- width: 808px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.gif') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 28px;
- left: 230px;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: bold;
- font-family: Verdana;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 4px;
- margin-top: 0px;
- margin-left: 5px;
- padding-top: 0px;
- width: 800px;
- background: url('images/horizontal.gif') repeat-y;
-}
-
-#left {
- width: 800px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.gif') no-repeat;
- top: -18px;
- left: 7px;
- width: 800px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 7px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- /* background: url('images/menu.gif') no-repeat; */
- /* width: 693px; */
- position: relative;
- top: -24px;
- left: -2px;
- width: 800px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- width: 7.75em;
- height: 28px;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- background-color: #202020;
- /* background: url("images/menu_footer.gif") no-repeat; */
- background-position: bottom;
-
- padding: 0em 0em 0em 0;
- margin-top: 4px;
- padding-top: 0em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #303030;
- border-top: 0px;
- width: 8.9em;
- height: 1.6em;
- line-height: 1.6em;
- background: url('images/metal_bgr.gif') repeat-x;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background: url('images/metal_bgr_red.gif') repeat-x;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 10px;
- padding-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/metallic/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/metallic/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/metallic/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/metallic/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/metallic/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/metallic/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/metallic/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/metallic/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/metallic/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/metallic/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/metallic/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/metallic/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/metallic/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/metallic/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/metallic/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/metallic/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/metallic/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/metallic/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #FFFFFF;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #DDDDDD;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 6px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-#login {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 340px;
-}
-
-#login h1 {
- background: url(/themes/metallic/images/misc/logon.png) no-repeat top left;
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 50px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login #username, #password, #password2 {
- font-size: small;
- width: 60%;
- padding-left: 19px;
- padding: 3px;
- margin: 0em;
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-/* Widget CSS */
-.widgetsubheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #B1B1B1;
- padding-right: 6px;
- padding-left: 6px;
- color: #000000;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetdiv{
- margin:5px;
- padding: 5px;
- background:#CCCCCC;
-}
-.widgetconfigdiv{
- background:#BBBBBB;
- font-size: 11px;
- color: #000000;
- padding-right: 5px;
- padding-left: 5px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-
-div#log div.log-entry-mini {
- clear: both;
-}
-
-div#log div.log-entry-mini span {
- padding: 2px 2px 2px 2px;
- padding-left: 6px;
-}
-
-div#log span.log-action-mini-header,
-div#log span.log-time-mini-header,
-div#log span.log-interface-mini-header,
-div#log span.log-source-mini-header,
-div#log span.log-destination-mini-header,
-div#log span.log-protocol-mini-header {
- float: left;
- text-align: left;
- background-color: #FFFFFF;
- font-size: 12px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-time-mini,
-div#log span.log-interface-mini,
-div#log span.log-source-mini,
-div#log span.log-destination-mini,
-div#log span.log-protocol-mini {
- float: left;
- text-align: left;
- background-color: #FFFFFF;
- font-size: 11px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-action-mini-header {
- width: 6%;
-}
-
-div#log span.log-time-mini,
-div#log span.log-time-mini-header {
- width: 19%;
-}
-
-div#log span.log-interface-mini,
-div#log span.log-interface-mini-header {
- width: 8%;
-}
-
-div#log span.log-source-mini,
-div#log span.log-source-mini-header {
- width: 23%;
-}
-
-div#log span.log-destination-mini,
-div#log span.log-destination-mini-header {
- width: 31%;
-}
-
-div#log span.log-protocol-mini,
-div#log span.log-protocol-mini-header {
- width: 8%;
- border-right: 1px solid #999;
-}
-
-/*thermal_sensors widget styles*/
-
-.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
-.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
-.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
- background-color: LimeGreen;
- border-top-width: 2px; border-top-color: Lime;
- border-left-width: 0px;
- border-right-width: 0px;
- border-bottom-width: 2px; border-bottom-color: Green;
-}
-.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
-.thermalSensorText { float: left; height: 20px; top: 3px; }
-.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
-
-.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-
-.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
-
-.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
-
-/* widget textarea styles - full width */
-.textarea_widget {
- width: 100%;
- resize:vertical;
- -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
- -moz-box-sizing: border-box; /* Firefox, other Gecko */
- box-sizing: border-box; /* IE 8+ */
-}
diff --git a/usr/local/www/themes/_corporate/bottom-loader.js b/usr/local/www/themes/_corporate/bottom-loader.js
deleted file mode 100644
index a21f775..0000000
--- a/usr/local/www/themes/_corporate/bottom-loader.js
+++ /dev/null
@@ -1,10 +0,0 @@
-//<![CDATA[
-
- NiftyCheck();
- Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
- Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
- Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
- Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
- Rounded("div#topbox","all","#FFF","#990000","smooth");
-
-//]]>
diff --git a/usr/local/www/themes/_corporate/graphlink.css b/usr/local/www/themes/_corporate/graphlink.css
deleted file mode 100644
index 5bb1b4c..0000000
--- a/usr/local/www/themes/_corporate/graphlink.css
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- $Id$
-
- This file is part of the GraphLink software.
- GraphLink is distributed under the MIT License.
- Copyright (C) 2005-2006 Max Khitrov <max@mxsoft.org>
-*******************************************************************************/
-
-/**
- * Defines the background image used for the graph, as well as the actual data
- * locations.
- * Use padding-left and padding-top to align the data area correctly with your
- * background image.
- * Width and height should same as the dimensions of the image, minus the
- * padding values in both directions.
- */
-div.GraphLink {
- width: 212px;
- height: 60px;
- padding-left: 38px;
- padding-top: 10px;
- background-image: url(/themes/corporate/images/misc/graph.png);
- overflow: hidden;
-}
-
-/**
- * Defines the data display area. Modify to fit your background image.
- */
-div.GraphLinkData {
- width: 200px;
- height: 50px;
- overflow: hidden;
-}
-
-/**
- * Defines the look of one bar. Nothing to change here other than the color.
- */
-span.GraphLinkBar {
- background-color: #990000;
- height: 100%;
- float: left;
- overflow: hidden;
-}
diff --git a/usr/local/www/themes/_corporate/images/alert_bgr.gif b/usr/local/www/themes/_corporate/images/alert_bgr.gif
deleted file mode 100755
index 65498f1..0000000
--- a/usr/local/www/themes/_corporate/images/alert_bgr.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/footer.gif b/usr/local/www/themes/_corporate/images/footer.gif
deleted file mode 100755
index e516113..0000000
--- a/usr/local/www/themes/_corporate/images/footer.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/header.gif b/usr/local/www/themes/_corporate/images/header.gif
deleted file mode 100755
index aebc511..0000000
--- a/usr/local/www/themes/_corporate/images/header.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/help.png b/usr/local/www/themes/_corporate/images/help.png
deleted file mode 100755
index 1de05e3..0000000
--- a/usr/local/www/themes/_corporate/images/help.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/horizontal.gif b/usr/local/www/themes/_corporate/images/horizontal.gif
deleted file mode 100755
index 4ed7694..0000000
--- a/usr/local/www/themes/_corporate/images/horizontal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/favicon.ico b/usr/local/www/themes/_corporate/images/icons/favicon.ico
deleted file mode 100644
index 3440bf2..0000000
--- a/usr/local/www/themes/_corporate/images/icons/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_3g.gif b/usr/local/www/themes/_corporate/images/icons/icon_3g.gif
deleted file mode 100755
index 46ccb92..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_3g.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/_corporate/images/icons/icon_3g_inactive.gif
deleted file mode 100755
index cf983e4..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_3g_inactive.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_advanced.gif b/usr/local/www/themes/_corporate/images/icons/icon_advanced.gif
deleted file mode 100644
index 3ede1ff..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_advanced.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_advanced_s.gif b/usr/local/www/themes/_corporate/images/icons/icon_advanced_s.gif
deleted file mode 100644
index b233549..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_advanced_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_alert.gif b/usr/local/www/themes/_corporate/images/icons/icon_alert.gif
deleted file mode 100755
index 7646941..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_alert.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_alias_host.gif b/usr/local/www/themes/_corporate/images/icons/icon_alias_host.gif
deleted file mode 100644
index ad43e17..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_alias_host.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_alias_net.gif b/usr/local/www/themes/_corporate/images/icons/icon_alias_net.gif
deleted file mode 100644
index abd1b8b..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_alias_net.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_alias_port.gif b/usr/local/www/themes/_corporate/images/icons/icon_alias_port.gif
deleted file mode 100644
index 4acf2aa..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_alias_port.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_alias_url.gif b/usr/local/www/themes/_corporate/images/icons/icon_alias_url.gif
deleted file mode 100644
index 660571e..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_alias_url.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/_corporate/images/icons/icon_alias_url_reload.gif
deleted file mode 100644
index 55c1c4a..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_alias_url_reload.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_block.gif b/usr/local/www/themes/_corporate/images/icons/icon_block.gif
deleted file mode 100755
index 670c968..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_block.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_block_add.gif b/usr/local/www/themes/_corporate/images/icons/icon_block_add.gif
deleted file mode 100755
index eb726d6..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_block_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_block_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_block_d.gif
deleted file mode 100755
index e6345fe..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_block_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_cablenic.gif b/usr/local/www/themes/_corporate/images/icons/icon_cablenic.gif
deleted file mode 100755
index a071c66..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_cablenic.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_cal.gif b/usr/local/www/themes/_corporate/images/icons/icon_cal.gif
deleted file mode 100755
index a9c7c87..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_cal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_cal_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_cal_mo.gif
deleted file mode 100755
index 1647e2f..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_cal_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_carp.gif b/usr/local/www/themes/_corporate/images/icons/icon_carp.gif
deleted file mode 100755
index 9454a82..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_carp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_carp_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_carp_d.gif
deleted file mode 100755
index 2ba8db2..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_carp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_chain.png b/usr/local/www/themes/_corporate/images/icons/icon_chain.png
deleted file mode 100644
index 12db07a..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_chain.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_check.gif b/usr/local/www/themes/_corporate/images/icons/icon_check.gif
deleted file mode 100755
index 393674d..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_check.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_clock_green.gif b/usr/local/www/themes/_corporate/images/icons/icon_clock_green.gif
deleted file mode 100755
index e171ba8..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_clock_green.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_clock_grey.gif b/usr/local/www/themes/_corporate/images/icons/icon_clock_grey.gif
deleted file mode 100755
index 00c865a..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_clock_grey.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_clock_red.gif b/usr/local/www/themes/_corporate/images/icons/icon_clock_red.gif
deleted file mode 100755
index 7b412ee..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_clock_red.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_close.gif b/usr/local/www/themes/_corporate/images/icons/icon_close.gif
deleted file mode 100755
index e0f86a7..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_close.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_configure.gif b/usr/local/www/themes/_corporate/images/icons/icon_configure.gif
deleted file mode 100755
index 7182e0d..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_configure.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_down.gif b/usr/local/www/themes/_corporate/images/icons/icon_down.gif
deleted file mode 100755
index b71a9c5..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_down_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_down_d.gif
deleted file mode 100755
index 70a7473..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_down_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_down_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_down_mo.gif
deleted file mode 100755
index 584587a..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_down_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_e.gif b/usr/local/www/themes/_corporate/images/icons/icon_e.gif
deleted file mode 100755
index 2950800..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_e.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_e_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_e_mo.gif
deleted file mode 100755
index 9ba5738..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_e_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_error.gif b/usr/local/www/themes/_corporate/images/icons/icon_error.gif
deleted file mode 100755
index e0fa659..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_error.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_exclam.gif b/usr/local/www/themes/_corporate/images/icons/icon_exclam.gif
deleted file mode 100755
index 36c2ec7..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_exclam.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_flag_de.png b/usr/local/www/themes/_corporate/images/icons/icon_flag_de.png
deleted file mode 100755
index 069cbbe..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_flag_de.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_flag_en.png b/usr/local/www/themes/_corporate/images/icons/icon_flag_en.png
deleted file mode 100755
index bd7f9a5..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_flag_en.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_flag_es.png b/usr/local/www/themes/_corporate/images/icons/icon_flag_es.png
deleted file mode 100755
index 434776c..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_flag_es.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/_corporate/images/icons/icon_flag_pt_BR.png
deleted file mode 100755
index f786349..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_flag_pt_BR.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_cert.png
deleted file mode 100755
index 48a34b6..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_cert.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_file.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_file.png
deleted file mode 100755
index 48a9ed2..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_file.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_group.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_group.png
deleted file mode 100755
index 7d929c0..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_host.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_host.png
deleted file mode 100755
index 867ef2c..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_host.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_imp.png
deleted file mode 100755
index f667cfc..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_imp.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_mail.png
deleted file mode 100755
index d2d4548..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_mail.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_pwd.png
deleted file mode 100755
index 06b53a1..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_pwd.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_search.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_search.png
deleted file mode 100755
index 33de926..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_search.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_time.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_time.png
deleted file mode 100755
index aa8300a..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_time.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_unknown.png
deleted file mode 100755
index 1857d0e..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_unknown.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_url.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_url.png
deleted file mode 100755
index cf56792..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_url.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_user.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_user.png
deleted file mode 100755
index e00eebe..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_fw-update.gif b/usr/local/www/themes/_corporate/images/icons/icon_fw-update.gif
deleted file mode 100755
index 52c18ac..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_fw-update.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_help.gif b/usr/local/www/themes/_corporate/images/icons/icon_help.gif
deleted file mode 100644
index 84c84db..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_help.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_ifalias.gif b/usr/local/www/themes/_corporate/images/icons/icon_ifalias.gif
deleted file mode 100644
index 0c569a7..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_ifalias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_ifalias_d.gif
deleted file mode 100644
index faa84d4..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_ifalias_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_import_alias.gif b/usr/local/www/themes/_corporate/images/icons/icon_import_alias.gif
deleted file mode 100755
index d11a5f0..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_import_alias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_in.gif b/usr/local/www/themes/_corporate/images/icons/icon_in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_in_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_info_pkg.gif b/usr/local/www/themes/_corporate/images/icons/icon_info_pkg.gif
deleted file mode 100644
index cd3a532..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_info_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_interface_down.gif b/usr/local/www/themes/_corporate/images/icons/icon_interface_down.gif
deleted file mode 100755
index 0626655..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_interface_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_interface_up.gif b/usr/local/www/themes/_corporate/images/icons/icon_interface_up.gif
deleted file mode 100755
index 1449513..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_interface_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_left.gif b/usr/local/www/themes/_corporate/images/icons/icon_left.gif
deleted file mode 100755
index 8effefe..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_left_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_left_d.gif
deleted file mode 100755
index c778014..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_left_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_left_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_left_mo.gif
deleted file mode 100755
index 84c6fa2..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_left_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_log.gif b/usr/local/www/themes/_corporate/images/icons/icon_log.gif
deleted file mode 100755
index 4a1983a..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_log.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_log_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_log_d.gif
deleted file mode 100755
index d31bd9b..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_log_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_log_s.gif b/usr/local/www/themes/_corporate/images/icons/icon_log_s.gif
deleted file mode 100755
index f9fda33..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_log_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_log_s_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_log_s_d.gif
deleted file mode 100755
index fb2c05f..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_log_s_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_logs.gif b/usr/local/www/themes/_corporate/images/icons/icon_logs.gif
deleted file mode 100644
index afe0104..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_logs.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_match.gif b/usr/local/www/themes/_corporate/images/icons/icon_match.gif
deleted file mode 100644
index 215571f..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_match.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_match_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_match_d.gif
deleted file mode 100644
index 6e4c364..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_match_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_minus.gif b/usr/local/www/themes/_corporate/images/icons/icon_minus.gif
deleted file mode 100755
index 417544f..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_minus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_open.gif b/usr/local/www/themes/_corporate/images/icons/icon_open.gif
deleted file mode 100755
index ac3da14..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_open.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_other.gif b/usr/local/www/themes/_corporate/images/icons/icon_other.gif
deleted file mode 100755
index e6f780f..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_other.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_other_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_other_d.gif
deleted file mode 100755
index b08d970..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_other_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_out.gif b/usr/local/www/themes/_corporate/images/icons/icon_out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_out_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_parp.gif b/usr/local/www/themes/_corporate/images/icons/icon_parp.gif
deleted file mode 100755
index 96acaf3..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_parp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_parp_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_parp_d.gif
deleted file mode 100755
index 7d7d00e..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_parp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_pass.gif b/usr/local/www/themes/_corporate/images/icons/icon_pass.gif
deleted file mode 100755
index fe1bb0d..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_pass.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_pass_add.gif b/usr/local/www/themes/_corporate/images/icons/icon_pass_add.gif
deleted file mode 100755
index f7f4c20..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_pass_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_pass_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_pass_d.gif
deleted file mode 100755
index 6adc431..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_pass_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_plus.gif b/usr/local/www/themes/_corporate/images/icons/icon_plus.gif
deleted file mode 100755
index 2a94eeb..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_plus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_plus_bl.gif b/usr/local/www/themes/_corporate/images/icons/icon_plus_bl.gif
deleted file mode 100755
index 8dcd7c0..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_plus_bl.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/_corporate/images/icons/icon_plus_bl_p.gif
deleted file mode 100755
index 0c79849..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_plus_bl_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_plus_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_plus_d.gif
deleted file mode 100755
index ebc7457..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_plus_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_plus_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_plus_mo.gif
deleted file mode 100755
index 1c7ca08..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_plus_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_plus_p.gif b/usr/local/www/themes/_corporate/images/icons/icon_plus_p.gif
deleted file mode 100755
index eb41284..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_plus_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall.gif
deleted file mode 100755
index d78b867..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_reinstall.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_d.gif
deleted file mode 100755
index 13658f7..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_mo.gif
deleted file mode 100755
index 90b576e..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg.gif
deleted file mode 100755
index 9aebb03..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_d.gif
deleted file mode 100755
index 4ab4992..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_mo.gif
deleted file mode 100755
index 7025d20..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml.gif
deleted file mode 100755
index 4542432..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_d.gif
deleted file mode 100755
index 8d3a68d..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_mo.gif
deleted file mode 100755
index 15e0aed..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reject.gif b/usr/local/www/themes/_corporate/images/icons/icon_reject.gif
deleted file mode 100755
index 5565cd6..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_reject.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reject_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_reject_d.gif
deleted file mode 100755
index 6c09fae..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_reject_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_right.gif b/usr/local/www/themes/_corporate/images/icons/icon_right.gif
deleted file mode 100644
index fdf2d8b..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_restart.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_restart.gif
deleted file mode 100755
index e49fbd7..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_service_restart.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_restart_d.gif
deleted file mode 100755
index a5d6d7c..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_service_restart_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_running.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_running.gif
deleted file mode 100644
index 543fd56..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_service_running.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_start.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_start.gif
deleted file mode 100755
index 09bb58f..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_service_start.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_start_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_start_d.gif
deleted file mode 100755
index f58f111..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_service_start_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_status.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_status.gif
deleted file mode 100644
index a93bcfb..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_service_status.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_stop.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_stop.gif
deleted file mode 100755
index 922addc..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_service_stop.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_stop_d.gif
deleted file mode 100755
index b4cfdea..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_service_stop_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_stopped.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_stopped.gif
deleted file mode 100644
index f93a25d..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_service_stopped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_services_restart_mo.gif
deleted file mode 100755
index a092b40..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_services_restart_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_services_start_mo.gif
deleted file mode 100755
index ecdb58f..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_services_start_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_services_stop_mo.gif
deleted file mode 100755
index c00e208..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_services_stop_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_system-group-grey.png b/usr/local/www/themes/_corporate/images/icons/icon_system-group-grey.png
deleted file mode 100644
index d7b964d..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_system-group-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_system-group.png b/usr/local/www/themes/_corporate/images/icons/icon_system-group.png
deleted file mode 100644
index 1c974f2..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_system-group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_system-user-grey.png b/usr/local/www/themes/_corporate/images/icons/icon_system-user-grey.png
deleted file mode 100644
index 2f6047d..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_system-user-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_system-user.png b/usr/local/www/themes/_corporate/images/icons/icon_system-user.png
deleted file mode 100644
index ef82156..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_system-user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/_corporate/images/icons/icon_system_lock_screen.png
deleted file mode 100644
index 30f306d..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_system_lock_screen.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_system_logout.png b/usr/local/www/themes/_corporate/images/icons/icon_system_logout.png
deleted file mode 100755
index 9bbb6c7..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_system_logout.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_trapped.gif b/usr/local/www/themes/_corporate/images/icons/icon_trapped.gif
deleted file mode 100755
index ffeb2cd..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_trapped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_trapped_p.gif b/usr/local/www/themes/_corporate/images/icons/icon_trapped_p.gif
deleted file mode 100755
index 6d46aaf..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_trapped_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_ts_rule.gif b/usr/local/www/themes/_corporate/images/icons/icon_ts_rule.gif
deleted file mode 100755
index e15ab6c..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_ts_rule.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_ts_rule_d.gif
deleted file mode 100755
index f776281..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_ts_rule_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_up.gif b/usr/local/www/themes/_corporate/images/icons/icon_up.gif
deleted file mode 100755
index 883c5a2..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_up_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_up_d.gif
deleted file mode 100755
index 0ddcce2..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_up_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_up_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_up_mo.gif
deleted file mode 100755
index 9f869a4..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_up_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_wlan.gif b/usr/local/www/themes/_corporate/images/icons/icon_wlan.gif
deleted file mode 100755
index 1f0addc..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_wlan.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_wlan_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_wlan_d.gif
deleted file mode 100755
index 35bf580..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_wlan_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_wol_all.gif b/usr/local/www/themes/_corporate/images/icons/icon_wol_all.gif
deleted file mode 100755
index 2d22182..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_wol_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/_corporate/images/icons/icon_wzd_nsaved.png
deleted file mode 100644
index 21cb27d..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_wzd_nsaved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_wzd_saved.png b/usr/local/www/themes/_corporate/images/icons/icon_wzd_saved.png
deleted file mode 100644
index ab82946..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_wzd_saved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_x.gif b/usr/local/www/themes/_corporate/images/icons/icon_x.gif
deleted file mode 100755
index 24e4d49..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_x_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_x_d.gif
deleted file mode 100755
index d2bfbc8..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_x_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_x_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_x_mo.gif
deleted file mode 100755
index da7b57c..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_x_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/icon_x_p.gif b/usr/local/www/themes/_corporate/images/icons/icon_x_p.gif
deleted file mode 100755
index 8828fa6..0000000
--- a/usr/local/www/themes/_corporate/images/icons/icon_x_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/in.gif b/usr/local/www/themes/_corporate/images/icons/in.gif
deleted file mode 100644
index f1da771..0000000
--- a/usr/local/www/themes/_corporate/images/icons/in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/in_d.gif b/usr/local/www/themes/_corporate/images/icons/in_d.gif
deleted file mode 100644
index 18e26be..0000000
--- a/usr/local/www/themes/_corporate/images/icons/in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/out.gif b/usr/local/www/themes/_corporate/images/icons/out.gif
deleted file mode 100644
index 1a1d1d5..0000000
--- a/usr/local/www/themes/_corporate/images/icons/out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/icons/out_d.gif b/usr/local/www/themes/_corporate/images/icons/out_d.gif
deleted file mode 100644
index 879f1da..0000000
--- a/usr/local/www/themes/_corporate/images/icons/out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/log.png b/usr/local/www/themes/_corporate/images/log.png
deleted file mode 100755
index 762ba80..0000000
--- a/usr/local/www/themes/_corporate/images/log.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/logo.gif b/usr/local/www/themes/_corporate/images/logo.gif
deleted file mode 100755
index 08638ff..0000000
--- a/usr/local/www/themes/_corporate/images/logo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/menu_down.gif b/usr/local/www/themes/_corporate/images/menu_down.gif
deleted file mode 100755
index 137de8d..0000000
--- a/usr/local/www/themes/_corporate/images/menu_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/menu_footer.gif b/usr/local/www/themes/_corporate/images/menu_footer.gif
deleted file mode 100755
index d06faa4..0000000
--- a/usr/local/www/themes/_corporate/images/menu_footer.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/menu_right.gif b/usr/local/www/themes/_corporate/images/menu_right.gif
deleted file mode 100755
index 881327c..0000000
--- a/usr/local/www/themes/_corporate/images/menu_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/metal_bgr.gif b/usr/local/www/themes/_corporate/images/metal_bgr.gif
deleted file mode 100755
index a0ca6c8..0000000
--- a/usr/local/www/themes/_corporate/images/metal_bgr.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/metal_bgr_red.gif b/usr/local/www/themes/_corporate/images/metal_bgr_red.gif
deleted file mode 100755
index c4a1465..0000000
--- a/usr/local/www/themes/_corporate/images/metal_bgr_red.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/bar_blue.gif b/usr/local/www/themes/_corporate/images/misc/bar_blue.gif
deleted file mode 100755
index 953cde1..0000000
--- a/usr/local/www/themes/_corporate/images/misc/bar_blue.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/bar_gray.gif b/usr/local/www/themes/_corporate/images/misc/bar_gray.gif
deleted file mode 100755
index a82da78..0000000
--- a/usr/local/www/themes/_corporate/images/misc/bar_gray.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/bar_left.gif b/usr/local/www/themes/_corporate/images/misc/bar_left.gif
deleted file mode 100755
index ea98cec..0000000
--- a/usr/local/www/themes/_corporate/images/misc/bar_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/bar_right.gif b/usr/local/www/themes/_corporate/images/misc/bar_right.gif
deleted file mode 100755
index b5114b0..0000000
--- a/usr/local/www/themes/_corporate/images/misc/bar_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/bullet_toggle_minus.png b/usr/local/www/themes/_corporate/images/misc/bullet_toggle_minus.png
deleted file mode 100755
index 37db2fd..0000000
--- a/usr/local/www/themes/_corporate/images/misc/bullet_toggle_minus.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/bullet_toggle_plus.png b/usr/local/www/themes/_corporate/images/misc/bullet_toggle_plus.png
deleted file mode 100755
index fba7af9..0000000
--- a/usr/local/www/themes/_corporate/images/misc/bullet_toggle_plus.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/button.gif b/usr/local/www/themes/_corporate/images/misc/button.gif
deleted file mode 100755
index e85dbb3..0000000
--- a/usr/local/www/themes/_corporate/images/misc/button.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/key_128.gif b/usr/local/www/themes/_corporate/images/misc/key_128.gif
deleted file mode 100755
index ea5ae34..0000000
--- a/usr/local/www/themes/_corporate/images/misc/key_128.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/key_152.gif b/usr/local/www/themes/_corporate/images/misc/key_152.gif
deleted file mode 100755
index 6c7fc03..0000000
--- a/usr/local/www/themes/_corporate/images/misc/key_152.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/key_256.gif b/usr/local/www/themes/_corporate/images/misc/key_256.gif
deleted file mode 100755
index 3e1c377..0000000
--- a/usr/local/www/themes/_corporate/images/misc/key_256.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/key_64.gif b/usr/local/www/themes/_corporate/images/misc/key_64.gif
deleted file mode 100755
index 87892bd..0000000
--- a/usr/local/www/themes/_corporate/images/misc/key_64.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/left_background.gif b/usr/local/www/themes/_corporate/images/misc/left_background.gif
deleted file mode 100755
index 529d827..0000000
--- a/usr/local/www/themes/_corporate/images/misc/left_background.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/loader.gif b/usr/local/www/themes/_corporate/images/misc/loader.gif
deleted file mode 100755
index 5d10ac3..0000000
--- a/usr/local/www/themes/_corporate/images/misc/loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/loader_tab.gif b/usr/local/www/themes/_corporate/images/misc/loader_tab.gif
deleted file mode 100755
index 05bb04c..0000000
--- a/usr/local/www/themes/_corporate/images/misc/loader_tab.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/logon.png b/usr/local/www/themes/_corporate/images/misc/logon.png
deleted file mode 100755
index baf8a9d..0000000
--- a/usr/local/www/themes/_corporate/images/misc/logon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_0.gif b/usr/local/www/themes/_corporate/images/misc/plogo_0.gif
deleted file mode 100755
index 160b56d..0000000
--- a/usr/local/www/themes/_corporate/images/misc/plogo_0.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_1.gif b/usr/local/www/themes/_corporate/images/misc/plogo_1.gif
deleted file mode 100755
index 50342d6..0000000
--- a/usr/local/www/themes/_corporate/images/misc/plogo_1.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_10.gif b/usr/local/www/themes/_corporate/images/misc/plogo_10.gif
deleted file mode 100755
index 06cba14..0000000
--- a/usr/local/www/themes/_corporate/images/misc/plogo_10.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_2.gif b/usr/local/www/themes/_corporate/images/misc/plogo_2.gif
deleted file mode 100755
index 9d10230..0000000
--- a/usr/local/www/themes/_corporate/images/misc/plogo_2.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_3.gif b/usr/local/www/themes/_corporate/images/misc/plogo_3.gif
deleted file mode 100755
index 1983f87..0000000
--- a/usr/local/www/themes/_corporate/images/misc/plogo_3.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_4.gif b/usr/local/www/themes/_corporate/images/misc/plogo_4.gif
deleted file mode 100755
index f7158bd..0000000
--- a/usr/local/www/themes/_corporate/images/misc/plogo_4.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_5.gif b/usr/local/www/themes/_corporate/images/misc/plogo_5.gif
deleted file mode 100755
index c7af593..0000000
--- a/usr/local/www/themes/_corporate/images/misc/plogo_5.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_6.gif b/usr/local/www/themes/_corporate/images/misc/plogo_6.gif
deleted file mode 100755
index 310eb22..0000000
--- a/usr/local/www/themes/_corporate/images/misc/plogo_6.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_7.gif b/usr/local/www/themes/_corporate/images/misc/plogo_7.gif
deleted file mode 100755
index 06bd2e8..0000000
--- a/usr/local/www/themes/_corporate/images/misc/plogo_7.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_8.gif b/usr/local/www/themes/_corporate/images/misc/plogo_8.gif
deleted file mode 100755
index c6ef564..0000000
--- a/usr/local/www/themes/_corporate/images/misc/plogo_8.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_9.gif b/usr/local/www/themes/_corporate/images/misc/plogo_9.gif
deleted file mode 100755
index 4f0cd4d..0000000
--- a/usr/local/www/themes/_corporate/images/misc/plogo_9.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/progress_bar.gif b/usr/local/www/themes/_corporate/images/misc/progress_bar.gif
deleted file mode 100755
index 3b4aa52..0000000
--- a/usr/local/www/themes/_corporate/images/misc/progress_bar.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/tri_c.gif b/usr/local/www/themes/_corporate/images/misc/tri_c.gif
deleted file mode 100755
index 317b758..0000000
--- a/usr/local/www/themes/_corporate/images/misc/tri_c.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/tri_c_black.gif b/usr/local/www/themes/_corporate/images/misc/tri_c_black.gif
deleted file mode 100755
index 309846e..0000000
--- a/usr/local/www/themes/_corporate/images/misc/tri_c_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/tri_o.gif b/usr/local/www/themes/_corporate/images/misc/tri_o.gif
deleted file mode 100755
index eb95c32..0000000
--- a/usr/local/www/themes/_corporate/images/misc/tri_o.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/tri_o_black.gif b/usr/local/www/themes/_corporate/images/misc/tri_o_black.gif
deleted file mode 100755
index f818f3b..0000000
--- a/usr/local/www/themes/_corporate/images/misc/tri_o_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/misc/widget_loader.gif b/usr/local/www/themes/_corporate/images/misc/widget_loader.gif
deleted file mode 100755
index fad101f..0000000
--- a/usr/local/www/themes/_corporate/images/misc/widget_loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/new_tab_menu.png b/usr/local/www/themes/_corporate/images/new_tab_menu.png
deleted file mode 100755
index 4bdfcef..0000000
--- a/usr/local/www/themes/_corporate/images/new_tab_menu.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/status.png b/usr/local/www/themes/_corporate/images/status.png
deleted file mode 100755
index a3e368e..0000000
--- a/usr/local/www/themes/_corporate/images/status.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/transparent.gif b/usr/local/www/themes/_corporate/images/transparent.gif
deleted file mode 100755
index 89c5530..0000000
--- a/usr/local/www/themes/_corporate/images/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/images/transparent_pixel.gif b/usr/local/www/themes/_corporate/images/transparent_pixel.gif
deleted file mode 100755
index 35d42e8..0000000
--- a/usr/local/www/themes/_corporate/images/transparent_pixel.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/blank.gif b/usr/local/www/themes/_corporate/javascript/ie7/blank.gif
deleted file mode 100755
index a4fe2e6..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/blank.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-box-model.js
deleted file mode 100644
index 45543f6..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/ie7-box-model.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-core.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-core.js
deleted file mode 100644
index b11e2b1..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/ie7-core.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-css-strict.js
deleted file mode 100644
index 4406d7a..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/ie7-css-strict.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-css2.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-css2.js
deleted file mode 100644
index 7121c8e..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/ie7-css2.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-css3.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-css3.js
deleted file mode 100644
index 86b24f5..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/ie7-css3.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-fixed.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-fixed.js
deleted file mode 100644
index 4321cda..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/ie7-fixed.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-html4.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-html4.js
deleted file mode 100644
index 4d2baa9..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/ie7-html4.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-ie5.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-ie5.js
deleted file mode 100644
index 707fa56..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/ie7-ie5.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite-p.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite-p.js
deleted file mode 100644
index 3a66d19..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í></Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite.js
deleted file mode 100644
index 88c764f..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-png.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-png.js
deleted file mode 100644
index 7b8f2cf..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/ie7-png.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-server.css b/usr/local/www/themes/_corporate/javascript/ie7/ie7-server.css
deleted file mode 100644
index 47c7edd..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/ie7-server.css
+++ /dev/null
@@ -1,43 +0,0 @@
-body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
-body {margin: 8px; background: #333;}
-h1 {margin: 0;}
-h1 a:hover {background-color: transparent;}
-h2 {font-size: 1.75em;}
-h3 {font-size: 1.1em;}
-a:active {color: #ff0000;}
-a:link {color: #0a6cce;}
-a:visited {color: #0a6cce;}
-code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
- padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
-code.box {display: block; padding: 10px; margin: 0.5em 0;}
-ul {list-style-type: square;}
-dd {margin: .2em 0 .5em 1em;}
-dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
-dl.library dd {font-style: italic; margin-left: 3em;}
-dt {font-weight: bold;}
-dt.pack {color: brown;}
-a img {border-style: none;}
-hr {height: 1px; color: #000; border-style: solid;}
-hr.short {height: 2px; width: 100px;}
-div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
-hr {border-bottom-width: 0px;}
-div.header hr {color: #0a6cce; background-color: #0a6cce;}
-div.content {min-height: 100px;}
-div.footer hr {color: #898e79; background-color: #898e79; }
-div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
-a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
-div.footer a:hover {background-color: transparent; text-decoration: none;}
-div.header .menu {text-align: right;}
-div.footer {font-size: x-small; margin-top: 8px;}
-div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
-#license {margin-top: 5px; font-size: xx-small;}
-table {border-top: 1px solid #000; border-left: 1px solid #000;}
-th {background-color: #fff; text-align: left;}
-th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
-th.small {width: 100px;}
-th.medium {width: 200px;}
-th.large {width: 270px;}
-th.x-large {width: 408px;}
-table.fixed {table-layout: fixed;}
-span.comment {color: #666;}
-
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard-p.js
deleted file mode 100644
index 73e99ac..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì></Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard.js
deleted file mode 100644
index 2109905..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/_corporate/javascript/ie7/test-trans.png b/usr/local/www/themes/_corporate/javascript/ie7/test-trans.png
deleted file mode 100755
index e187e2c..0000000
--- a/usr/local/www/themes/_corporate/javascript/ie7/test-trans.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/javascript/niftyjsCode.js b/usr/local/www/themes/_corporate/javascript/niftyjsCode.js
deleted file mode 100644
index 75ef8b0..0000000
--- a/usr/local/www/themes/_corporate/javascript/niftyjsCode.js
+++ /dev/null
@@ -1,174 +0,0 @@
-function NiftyCheck(){
-if(!document.getElementById || !document.createElement)
- return(false);
-isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
-if(Array.prototype.push==null){Array.prototype.push=function(){
- this[this.length]=arguments[0]; return(this.length);};}
-return(true);
-}
-
-function Rounded(selector,wich,bk,color,opt){
-var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
-
-if(color=="transparent"){
- cn=cn+"x";
- ecolor=bk;
- bk="transparent";
- }
-else if(opt && opt.indexOf("border")>=0){
- var optar=opt.split(" ");
- for(i=0;i<optar.length;i++)
- if(optar[i].indexOf("#")>=0) ecolor=optar[i];
- if(ecolor=="") ecolor="#666";
- cn+="e";
- edges=true;
- }
-else if(opt && opt.indexOf("smooth")>=0){
- cn+="a";
- ecolor=Mix(bk,color);
- }
-if(opt && opt.indexOf("small")>=0) cn+="s";
-prefixt=cn;
-prefixb=cn;
-if(wich.indexOf("all")>=0){t=true;b=true;}
-else if(wich.indexOf("top")>=0) t="true";
-else if(wich.indexOf("tl")>=0){
- t="true";
- if(wich.indexOf("tr")<0) prefixt+="l";
- }
-else if(wich.indexOf("tr")>=0){
- t="true";
- prefixt+="r";
- }
-if(wich.indexOf("bottom")>=0) b=true;
-else if(wich.indexOf("bl")>=0){
- b="true";
- if(wich.indexOf("br")<0) prefixb+="l";
- }
-else if(wich.indexOf("br")>=0){
- b="true";
- prefixb+="r";
- }
-var v=getElementsBySelector(selector);
-var l=v.length;
-for(i=0;i<l;i++){
- if(edges) AddBorder(v[i],ecolor);
- if(t) AddTop(v[i],bk,color,ecolor,prefixt);
- if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
- }
-}
-
-function AddBorder(el,bc){
-var i;
-if(!el.passed){
- if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
- var t=el.firstChild.nodeValue;
- el.removeChild(el.lastChild);
- var d=CreateEl("span");
- d.style.display="block";
- d.appendChild(document.createTextNode(t));
- el.appendChild(d);
- }
- for(i=0;i<el.childNodes.length;i++){
- if(el.childNodes[i].nodeType==1){
- el.childNodes[i].style.borderLeft="1px solid "+bc;
- el.childNodes[i].style.borderRight="1px solid "+bc;
- }
- }
- }
-el.passed=true;
-}
-
-function AddTop(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=1;i<=lim;i++){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingTop=0;
-el.insertBefore(d,el.firstChild);
-}
-
-function AddBottom(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=lim;i>0;i--){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingBottom=0;
-el.appendChild(d);
-}
-
-function CreateEl(x){
-if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
-else return(document.createElement(x));
-}
-
-function getElementsBySelector(selector){
-var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
-
-if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
- s=selector.split(" ");
- var fs=s[0].split("#");
- if(fs.length==1) return(objlist);
- f=document.getElementById(fs[1]);
- if(f) return(f.getElementsByTagName(s[1]));
- return(objlist);
- }
-if(selector.indexOf("#")>0){ //id selector like "tag#id"
- s=selector.split("#");
- tag=s[0];
- selid=s[1];
- }
-if(selid!=""){
- f=document.getElementById(selid);
- if(f) objlist.push(f);
- return(objlist);
- }
-if(selector.indexOf(".")>0){ //class selector like "tag.class"
- s=selector.split(".");
- tag=s[0];
- selclass=s[1];
- }
-var v=document.getElementsByTagName(tag); // tag selector like "tag"
-if(selclass=="")
- return(v);
-for(i=0;i<v.length;i++){
- if(v[i].className.indexOf(selclass)>=0){
- objlist.push(v[i]);
- }
- }
-return(objlist);
-}
-
-function Mix(c1,c2){
-var i,step1,step2,x,y,r=new Array(3);
-if(c1.length==4)step1=1;
-else step1=2;
-if(c2.length==4) step2=1;
-else step2=2;
-for(i=0;i<3;i++){
- x=parseInt(c1.substr(1+step1*i,step1),16);
- if(step1==1) x=16*x+x;
- y=parseInt(c2.substr(1+step2*i,step2),16);
- if(step2==1) y=16*y+y;
- r[i]=Math.floor((x*50+y*50)/100);
- }
-return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
-} \ No newline at end of file
diff --git a/usr/local/www/themes/_corporate/loader.js b/usr/local/www/themes/_corporate/loader.js
deleted file mode 100644
index 4512d5e..0000000
--- a/usr/local/www/themes/_corporate/loader.js
+++ /dev/null
@@ -1,29 +0,0 @@
-//<![CDATA[
-var browser = '';
-var version = '';
-var entrance = '';
-var cond = '';
-
-// BROWSER?
-if (browser == '') {
- if (navigator.appName.indexOf('Microsoft') != -1)
- browser = 'IE';
- else if (navigator.appName.indexOf('Netscape') != -1)
- browser = 'Netscape';
- else
- browser = 'IE';
-}
-if (version == '') {
- version= navigator.appVersion;
- paren = version.indexOf('(');
- whole_version = navigator.appVersion.substring(0,paren-1);
- version = parseInt(whole_version);
-}
-
-if (version < 7) {
- document.write('<script type="text/javascript" src="/themes/corporate/javascript/ie7/ie7-standard-p.js"></script>');
-}
-
-document.write('<script type="text/javascript" src="/themes/corporate/javascript/niftyjsCode.js"></script>');
-
-//]]>
diff --git a/usr/local/www/themes/_corporate/new_tab_menu.css b/usr/local/www/themes/_corporate/new_tab_menu.css
deleted file mode 100644
index aae94e3..0000000
--- a/usr/local/www/themes/_corporate/new_tab_menu.css
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- new_tab_menu.css
- part of pfSense
- Copyright (C) 2010-2011 Robert Zelaya
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-
- Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
- The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
-
- <tr>
- <td>
- <?php
- $tab_array_indent = 0; // move to the line in px
- $tab_array_space = 1; // space betwen lines in px
- $tab_array_char_limit = 82; // number or chr before the drop down box
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
-
-*/
-
-.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
-
-.newtabmenu li{float:left; margin-right:2px; text-align: center;}
-.newtabmenu a:link, .newtabmenu a:visited{
- background:url(imagesimages/new_tab_menu.png) right 45px;
- color:#ffffff; /* noactive font */
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- font-weight:bold;
- font-size:.9em;
- height:20px;
- line-height:20px;
- text-decoration:none;
-}
-.newtabmenu a span{
- background:url(images/new_tab_menu.png) left 45px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- height:20px;
- margin-right:7px;
- padding-left:7px;
-}
-.newtabmenu a:hover{
- background:url(images/new_tab_menu.png) right 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- color:#ffffff; /* hover over font */
-}
-.newtabmenu a:hover span{
- background:url(images/new_tab_menu.png) left 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
-}
-
-/* -------------------------------- */
-/* ACTIVE ELEMENTS */
-.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
- color:#000000; /* active font */
- background:url(images/new_tab_menu.png) right 0 no-repeat;
-}
-.newtabmenu_active a span, .newtabmenu_active a:hover span{
- background:url(images/new_tab_menu.png) left 0 no-repeat;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/_corporate/new_tab_menu.png b/usr/local/www/themes/_corporate/new_tab_menu.png
deleted file mode 100755
index 4bdfcef..0000000
--- a/usr/local/www/themes/_corporate/new_tab_menu.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/_corporate/rrdcolors.inc.php b/usr/local/www/themes/_corporate/rrdcolors.inc.php
deleted file mode 100644
index dcb7a39..0000000
--- a/usr/local/www/themes/_corporate/rrdcolors.inc.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/* $Id$ */
-/*
- rrdcolors.inc.php
- Part of pfSense
- Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/* This file is included by the RRD graphing page and sets the colors */
-
-/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* 95th Percentile Lines Out, In */
-$colortraffic95 = array('660000', 'FF0000');
-
-/* State Table pfrate, pfstates, pfnat, srcip, dstip */
-$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
-
-/* Processor Usage user, nice, system, int, processes */
-$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
-
-/* Memory Usage active, inact, free, cache, wire */
-$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
-
-/* MBUF Usage current, cache, total, max */
-$colormbuf = array('0080FF','00E344','FF0000','000000');
-
-/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
-$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
-$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
-/* Quality Graph Loss */
-$colorqualityloss = 'ee0000';
-
-/* Wireless Graph SNR, Rate, Channel*/
-/* Cellular Graph RSSI, */
-$colorwireless = array('333333','a83c3c','999999');
-
-/* SPAMD Times min area, avg area, max area, Time line */
-$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
-/* SPAMD Connections max area, min area, min line, max line, avg line */
-$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
-
-/* OpenVPN Users Online Users */
-$colorvpnusers = array('990000');
-
-/* Captive Portal Total Users Total Users */
-/* Captive Portal Concurrent Concurrent Users */
-$colorcaptiveportalusers = array('990000');
-
-?>
diff --git a/usr/local/www/themes/_corporate/styles/jquery-ui-1.11.1.css b/usr/local/www/themes/_corporate/styles/jquery-ui-1.11.1.css
deleted file mode 100644
index 8a8c54f..0000000
--- a/usr/local/www/themes/_corporate/styles/jquery-ui-1.11.1.css
+++ /dev/null
@@ -1,1226 +0,0 @@
-/*! jQuery UI - v1.11.1 - 2014-09-22
-* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden {
- display: none;
-}
-.ui-helper-hidden-accessible {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
-}
-.ui-helper-reset {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- line-height: 1.3;
- text-decoration: none;
- font-size: 100%;
- list-style: none;
-}
-.ui-helper-clearfix:before,
-.ui-helper-clearfix:after {
- content: "";
- display: table;
- border-collapse: collapse;
-}
-.ui-helper-clearfix:after {
- clear: both;
-}
-.ui-helper-clearfix {
- min-height: 0; /* support: IE7 */
-}
-.ui-helper-zfix {
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- position: absolute;
- opacity: 0;
- filter:Alpha(Opacity=0); /* support: IE8 */
-}
-
-.ui-front {
- z-index: 100;
-}
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled {
- cursor: default !important;
-}
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- display: block;
- text-indent: -99999px;
- overflow: hidden;
- background-repeat: no-repeat;
-}
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-.ui-draggable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable {
- position: relative;
-}
-.ui-resizable-handle {
- position: absolute;
- font-size: 0.1px;
- display: block;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
- display: none;
-}
-.ui-resizable-n {
- cursor: n-resize;
- height: 7px;
- width: 100%;
- top: -5px;
- left: 0;
-}
-.ui-resizable-s {
- cursor: s-resize;
- height: 7px;
- width: 100%;
- bottom: -5px;
- left: 0;
-}
-.ui-resizable-e {
- cursor: e-resize;
- width: 7px;
- right: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-w {
- cursor: w-resize;
- width: 7px;
- left: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-se {
- cursor: se-resize;
- width: 12px;
- height: 12px;
- right: 1px;
- bottom: 1px;
-}
-.ui-resizable-sw {
- cursor: sw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- bottom: -5px;
-}
-.ui-resizable-nw {
- cursor: nw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- top: -5px;
-}
-.ui-resizable-ne {
- cursor: ne-resize;
- width: 9px;
- height: 9px;
- right: -5px;
- top: -5px;
-}
-.ui-selectable {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-selectable-helper {
- position: absolute;
- z-index: 100;
- border: 1px dotted black;
-}
-.ui-sortable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-accordion .ui-accordion-header {
- display: block;
- cursor: pointer;
- position: relative;
- margin: 2px 0 0 0;
- padding: .5em .5em .5em .7em;
- min-height: 0; /* support: IE7 */
- font-size: 100%;
-}
-.ui-accordion .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
- position: absolute;
- left: .5em;
- top: 50%;
- margin-top: -8px;
-}
-.ui-accordion .ui-accordion-content {
- padding: 1em 2.2em;
- border-top: 0;
- overflow: auto;
-}
-.ui-autocomplete {
- position: absolute;
- top: 0;
- left: 0;
- cursor: default;
-}
-.ui-button {
- display: inline-block;
- position: relative;
- padding: 0;
- line-height: normal;
- margin-right: .1em;
- cursor: pointer;
- vertical-align: middle;
- text-align: center;
- overflow: visible; /* removes extra width in IE */
-}
-.ui-button,
-.ui-button:link,
-.ui-button:visited,
-.ui-button:hover,
-.ui-button:active {
- text-decoration: none;
-}
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
- width: 2.2em;
-}
-/* button elements seem to need a little more width */
-button.ui-button-icon-only {
- width: 2.4em;
-}
-.ui-button-icons-only {
- width: 3.4em;
-}
-button.ui-button-icons-only {
- width: 3.7em;
-}
-
-/* button text element */
-.ui-button .ui-button-text {
- display: block;
- line-height: normal;
-}
-.ui-button-text-only .ui-button-text {
- padding: .4em 1em;
-}
-.ui-button-icon-only .ui-button-text,
-.ui-button-icons-only .ui-button-text {
- padding: .4em;
- text-indent: -9999999px;
-}
-.ui-button-text-icon-primary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 1em .4em 2.1em;
-}
-.ui-button-text-icon-secondary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 2.1em .4em 1em;
-}
-.ui-button-text-icons .ui-button-text {
- padding-left: 2.1em;
- padding-right: 2.1em;
-}
-/* no icon support for input elements, provide padding by default */
-input.ui-button {
- padding: .4em 1em;
-}
-
-/* button icon element(s) */
-.ui-button-icon-only .ui-icon,
-.ui-button-text-icon-primary .ui-icon,
-.ui-button-text-icon-secondary .ui-icon,
-.ui-button-text-icons .ui-icon,
-.ui-button-icons-only .ui-icon {
- position: absolute;
- top: 50%;
- margin-top: -8px;
-}
-.ui-button-icon-only .ui-icon {
- left: 50%;
- margin-left: -8px;
-}
-.ui-button-text-icon-primary .ui-button-icon-primary,
-.ui-button-text-icons .ui-button-icon-primary,
-.ui-button-icons-only .ui-button-icon-primary {
- left: .5em;
-}
-.ui-button-text-icon-secondary .ui-button-icon-secondary,
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
- right: .5em;
-}
-
-/* button sets */
-.ui-buttonset {
- margin-right: 7px;
-}
-.ui-buttonset .ui-button {
- margin-left: 0;
- margin-right: -.3em;
-}
-
-/* workarounds */
-/* reset extra padding in Firefox, see h5bp.com/l */
-input.ui-button::-moz-focus-inner,
-button.ui-button::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-.ui-datepicker {
- width: 17em;
- padding: .2em .2em 0;
- display: none;
-}
-.ui-datepicker .ui-datepicker-header {
- position: relative;
- padding: .2em 0;
-}
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-next {
- position: absolute;
- top: 2px;
- width: 1.8em;
- height: 1.8em;
-}
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
- top: 1px;
-}
-.ui-datepicker .ui-datepicker-prev {
- left: 2px;
-}
-.ui-datepicker .ui-datepicker-next {
- right: 2px;
-}
-.ui-datepicker .ui-datepicker-prev-hover {
- left: 1px;
-}
-.ui-datepicker .ui-datepicker-next-hover {
- right: 1px;
-}
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
- display: block;
- position: absolute;
- left: 50%;
- margin-left: -8px;
- top: 50%;
- margin-top: -8px;
-}
-.ui-datepicker .ui-datepicker-title {
- margin: 0 2.3em;
- line-height: 1.8em;
- text-align: center;
-}
-.ui-datepicker .ui-datepicker-title select {
- font-size: 1em;
- margin: 1px 0;
-}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year {
- width: 45%;
-}
-.ui-datepicker table {
- width: 100%;
- font-size: .9em;
- border-collapse: collapse;
- margin: 0 0 .4em;
-}
-.ui-datepicker th {
- padding: .7em .3em;
- text-align: center;
- font-weight: bold;
- border: 0;
-}
-.ui-datepicker td {
- border: 0;
- padding: 1px;
-}
-.ui-datepicker td span,
-.ui-datepicker td a {
- display: block;
- padding: .2em;
- text-align: right;
- text-decoration: none;
-}
-.ui-datepicker .ui-datepicker-buttonpane {
- background-image: none;
- margin: .7em 0 0 0;
- padding: 0 .2em;
- border-left: 0;
- border-right: 0;
- border-bottom: 0;
-}
-.ui-datepicker .ui-datepicker-buttonpane button {
- float: right;
- margin: .5em .2em .4em;
- cursor: pointer;
- padding: .2em .6em .3em .6em;
- width: auto;
- overflow: visible;
-}
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
- float: left;
-}
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi {
- width: auto;
-}
-.ui-datepicker-multi .ui-datepicker-group {
- float: left;
-}
-.ui-datepicker-multi .ui-datepicker-group table {
- width: 95%;
- margin: 0 auto .4em;
-}
-.ui-datepicker-multi-2 .ui-datepicker-group {
- width: 50%;
-}
-.ui-datepicker-multi-3 .ui-datepicker-group {
- width: 33.3%;
-}
-.ui-datepicker-multi-4 .ui-datepicker-group {
- width: 25%;
-}
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
- border-left-width: 0;
-}
-.ui-datepicker-multi .ui-datepicker-buttonpane {
- clear: left;
-}
-.ui-datepicker-row-break {
- clear: both;
- width: 100%;
- font-size: 0;
-}
-
-/* RTL support */
-.ui-datepicker-rtl {
- direction: rtl;
-}
-.ui-datepicker-rtl .ui-datepicker-prev {
- right: 2px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next {
- left: 2px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
- right: 1px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
- left: 1px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
- clear: right;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
- float: left;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
-.ui-datepicker-rtl .ui-datepicker-group {
- float: right;
-}
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
- border-right-width: 0;
- border-left-width: 1px;
-}
-.ui-dialog {
- overflow: hidden;
- position: absolute;
- top: 0;
- left: 0;
- padding: .2em;
- outline: 0;
-}
-.ui-dialog .ui-dialog-titlebar {
- padding: .4em 1em;
- position: relative;
-}
-.ui-dialog .ui-dialog-title {
- float: left;
- margin: .1em 0;
- white-space: nowrap;
- width: 90%;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.ui-dialog .ui-dialog-titlebar-close {
- position: absolute;
- right: .3em;
- top: 50%;
- width: 20px;
- margin: -10px 0 0 0;
- padding: 1px;
- height: 20px;
-}
-.ui-dialog .ui-dialog-content {
- position: relative;
- border: 0;
- padding: .5em 1em;
- background: none;
- overflow: auto;
-}
-.ui-dialog .ui-dialog-buttonpane {
- text-align: left;
- border-width: 1px 0 0 0;
- background-image: none;
- margin-top: .5em;
- padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
- float: right;
-}
-.ui-dialog .ui-dialog-buttonpane button {
- margin: .5em .4em .5em 0;
- cursor: pointer;
-}
-.ui-dialog .ui-resizable-se {
- width: 12px;
- height: 12px;
- right: -5px;
- bottom: -5px;
- background-position: 16px 16px;
-}
-.ui-draggable .ui-dialog-titlebar {
- cursor: move;
-}
-.ui-menu {
- list-style: none;
- padding: 0;
- margin: 0;
- display: block;
- outline: none;
-}
-.ui-menu .ui-menu {
- position: absolute;
-}
-.ui-menu .ui-menu-item {
- position: relative;
- margin: 0;
- padding: 3px 1em 3px .4em;
- cursor: pointer;
- min-height: 0; /* support: IE7 */
- /* support: IE10, see #8844 */
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
-}
-.ui-menu .ui-menu-divider {
- margin: 5px 0;
- height: 0;
- font-size: 0;
- line-height: 0;
- border-width: 1px 0 0 0;
-}
-.ui-menu .ui-state-focus,
-.ui-menu .ui-state-active {
- margin: -1px;
-}
-
-/* icon support */
-.ui-menu-icons {
- position: relative;
-}
-.ui-menu-icons .ui-menu-item {
- padding-left: 2em;
-}
-
-/* left-aligned */
-.ui-menu .ui-icon {
- position: absolute;
- top: 0;
- bottom: 0;
- left: .2em;
- margin: auto 0;
-}
-
-/* right-aligned */
-.ui-menu .ui-menu-icon {
- left: auto;
- right: 0;
-}
-.ui-progressbar {
- height: 1em;
- text-align: left;
- overflow: hidden;
-}
-.ui-progressbar .ui-progressbar-value {
- margin: -1px;
- height: 100%;
- background-color: #990000;
-}
-.ui-progressbar .ui-progressbar-overlay {
- background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
- height: 100%;
- filter: alpha(opacity=25); /* support: IE8 */
- opacity: 0.25;
-}
-.ui-progressbar-indeterminate .ui-progressbar-value {
- background-image: none;
-}
-.ui-selectmenu-menu {
- padding: 0;
- margin: 0;
- position: absolute;
- top: 0;
- left: 0;
- display: none;
-}
-.ui-selectmenu-menu .ui-menu {
- overflow: auto;
- /* Support: IE7 */
- overflow-x: hidden;
- padding-bottom: 1px;
-}
-.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
- font-size: 1em;
- font-weight: bold;
- line-height: 1.5;
- padding: 2px 0.4em;
- margin: 0.5em 0 0 0;
- height: auto;
- border: 0;
-}
-.ui-selectmenu-open {
- display: block;
-}
-.ui-selectmenu-button {
- display: inline-block;
- overflow: hidden;
- position: relative;
- text-decoration: none;
- cursor: pointer;
-}
-.ui-selectmenu-button span.ui-icon {
- right: 0.5em;
- left: auto;
- margin-top: -8px;
- position: absolute;
- top: 50%;
-}
-.ui-selectmenu-button span.ui-selectmenu-text {
- text-align: left;
- padding: 0.4em 2.1em 0.4em 1em;
- display: block;
- line-height: 1.4;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.ui-slider {
- position: relative;
- text-align: left;
-}
-.ui-slider .ui-slider-handle {
- position: absolute;
- z-index: 2;
- width: 1.2em;
- height: 1.2em;
- cursor: default;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-slider .ui-slider-range {
- position: absolute;
- z-index: 1;
- font-size: .7em;
- display: block;
- border: 0;
- background-position: 0 0;
-}
-
-/* support: IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
- filter: inherit;
-}
-
-.ui-slider-horizontal {
- height: .8em;
-}
-.ui-slider-horizontal .ui-slider-handle {
- top: -.3em;
- margin-left: -.6em;
-}
-.ui-slider-horizontal .ui-slider-range {
- top: 0;
- height: 100%;
-}
-.ui-slider-horizontal .ui-slider-range-min {
- left: 0;
-}
-.ui-slider-horizontal .ui-slider-range-max {
- right: 0;
-}
-
-.ui-slider-vertical {
- width: .8em;
- height: 100px;
-}
-.ui-slider-vertical .ui-slider-handle {
- left: -.3em;
- margin-left: 0;
- margin-bottom: -.6em;
-}
-.ui-slider-vertical .ui-slider-range {
- left: 0;
- width: 100%;
-}
-.ui-slider-vertical .ui-slider-range-min {
- bottom: 0;
-}
-.ui-slider-vertical .ui-slider-range-max {
- top: 0;
-}
-.ui-spinner {
- position: relative;
- display: inline-block;
- overflow: hidden;
- padding: 0;
- vertical-align: middle;
-}
-.ui-spinner-input {
- border: none;
- background: none;
- color: inherit;
- padding: 0;
- margin: .2em 0;
- vertical-align: middle;
- margin-left: .4em;
- margin-right: 22px;
-}
-.ui-spinner-button {
- width: 16px;
- height: 50%;
- font-size: .5em;
- padding: 0;
- margin: 0;
- text-align: center;
- position: absolute;
- cursor: default;
- display: block;
- overflow: hidden;
- right: 0;
-}
-/* more specificity required here to override default borders */
-.ui-spinner a.ui-spinner-button {
- border-top: none;
- border-bottom: none;
- border-right: none;
-}
-/* vertically center icon */
-.ui-spinner .ui-icon {
- position: absolute;
- margin-top: -8px;
- top: 50%;
- left: 0;
-}
-.ui-spinner-up {
- top: 0;
-}
-.ui-spinner-down {
- bottom: 0;
-}
-
-/* TR overrides */
-.ui-spinner .ui-icon-triangle-1-s {
- /* need to fix icons sprite */
- background-position: -65px -16px;
-}
-.ui-tabs {
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
- padding: .2em;
-}
-.ui-tabs .ui-tabs-nav {
- margin: 0;
- padding: .2em .2em 0;
-}
-.ui-tabs .ui-tabs-nav li {
- list-style: none;
- float: left;
- position: relative;
- top: 0;
- margin: 1px .2em 0 0;
- border-bottom-width: 0;
- padding: 0;
- white-space: nowrap;
-}
-.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
- float: left;
- padding: .5em 1em;
- text-decoration: none;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
- margin-bottom: -1px;
- padding-bottom: 1px;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
- cursor: text;
-}
-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
- cursor: pointer;
-}
-.ui-tabs .ui-tabs-panel {
- display: block;
- border-width: 0;
- padding: 1em 1.4em;
- background: none;
-}
-.ui-tooltip {
- padding: 8px;
- position: absolute;
- z-index: 9999;
- max-width: 300px;
- -webkit-box-shadow: 0 0 5px #aaa;
- box-shadow: 0 0 5px #aaa;
-}
-body .ui-tooltip {
- border-width: 2px;
-}
-
-/* Component containers
-----------------------------------*/
-.ui-widget {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1.1em;
-}
-.ui-widget .ui-widget {
- font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1em;
-}
-.ui-widget-content {
- border: 1px solid #aaaaaa;
- background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
- color: #333333;
-}
-.ui-widget-content a {
- color: #333333;
-}
-.ui-widget-header {
- border: 1px solid #bbbbbb;
- /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
- color: #444444;
- font-weight: bold;
-}
-.ui-widget-header a {
- color: #444444;
-}
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default {
- border: 1px solid #cccccc;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #3383bb;
-}
-.ui-state-default a,
-.ui-state-default a:link,
-.ui-state-default a:visited {
- color: #3383bb;
- text-decoration: none;
-}
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus {
- border: 1px solid #bbbbbb;
- background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #599fcf;
-}
-.ui-state-hover a,
-.ui-state-hover a:hover,
-.ui-state-hover a:link,
-.ui-state-hover a:visited,
-.ui-state-focus a,
-.ui-state-focus a:hover,
-.ui-state-focus a:link,
-.ui-state-focus a:visited {
- color: #599fcf;
- text-decoration: none;
-}
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active {
- border: 1px solid #999999;
- background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #ffffff;
-}
-.ui-state-active a,
-.ui-state-active a:link,
-.ui-state-active a:visited {
- color: #ffffff;
- text-decoration: none;
-}
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight,
-.ui-widget-header .ui-state-highlight {
- border: 1px solid #ffffff;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
- color: #444444;
-}
-.ui-state-highlight a,
-.ui-widget-content .ui-state-highlight a,
-.ui-widget-header .ui-state-highlight a {
- color: #444444;
-}
-.ui-state-error,
-.ui-widget-content .ui-state-error,
-.ui-widget-header .ui-state-error {
- border: 1px solid #c0402a;
- background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
- color: #ffffff;
-}
-.ui-state-error a,
-.ui-widget-content .ui-state-error a,
-.ui-widget-header .ui-state-error a {
- color: #ffffff;
-}
-.ui-state-error-text,
-.ui-widget-content .ui-state-error-text,
-.ui-widget-header .ui-state-error-text {
- color: #ffffff;
-}
-.ui-priority-primary,
-.ui-widget-content .ui-priority-primary,
-.ui-widget-header .ui-priority-primary {
- font-weight: bold;
-}
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary,
-.ui-widget-header .ui-priority-secondary {
- opacity: .7;
- filter:Alpha(Opacity=70); /* support: IE8 */
- font-weight: normal;
-}
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled,
-.ui-widget-header .ui-state-disabled {
- opacity: .35;
- filter:Alpha(Opacity=35); /* support: IE8 */
- background-image: none;
-}
-.ui-state-disabled .ui-icon {
- filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
-}
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- width: 16px;
- height: 16px;
-}
-.ui-icon,
-.ui-widget-content .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-widget-header .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-state-default .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
-}
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-active .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
-}
-.ui-state-highlight .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
-}
-
-/* positioning */
-.ui-icon-blank { background-position: 16px 16px; }
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-on { background-position: -96px -144px; }
-.ui-icon-radio-off { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
- border-top-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
- border-top-right-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
- border-bottom-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
- border-bottom-right-radius: 6px;
-}
-
-/* Overlays */
-.ui-widget-overlay {
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
- opacity: .8;
- filter: Alpha(Opacity=80); /* support: IE8 */
-}
-.ui-widget-shadow {
- margin: -4px 0 0 -4px;
- padding: 4px;
- background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
- opacity: .6;
- filter: Alpha(Opacity=60); /* support: IE8 */
- border-radius: 0pxdow;
-}
diff --git a/usr/local/www/themes/code-red/all.css b/usr/local/www/themes/code-red/all.css
deleted file mode 100644
index c26ec3d..0000000
--- a/usr/local/www/themes/code-red/all.css
+++ /dev/null
@@ -1,1301 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, sans-serif;
- font-size: 0.9em;
-
-}
-
-.nowrap { white-space: nowrap; }
-
-.addgatewaybox {
- background-color: #990000;
- border-style: none none none none;
- width: 225px;
-}
-
-.infobox {
- width:100%;
-}
-
-.infoboxsave {
- padding-right: 10px;
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-.inputerrorsleft {
- background-color: #990000;
- width: 36px;
-}
-
-.inputerrorsright {
- background-color: #FFD9D1;
- color: #000000;
- font-size: 11px;
- padding-left: 8px;
- padding-top: 6px;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 220px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 11px;
- font-family: "Trebuchet MS", sans-serif;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- background: url('images/background.gif') no-repeat;
- background-position : center 0px;
- background-color: #4a0203;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 29px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 22px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 15px;
- left: 210px;
- font-size: 14px;
- color: #990000;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #990000;
- text-align: right;
- padding-right: 18px;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -5px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 82px;
- color: #999999;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- position: relative;
- top: -35px;
- left: 3px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- width: 80px;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- /* top: 2em;
- left: -2px; */
- width: 120px;
- font-weight: normal;
- /* background: transparent bottom left no-repeat; */
- /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020; */
- /* background: url("images/menubgr_footer.png") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 5px;
- padding-bottom: 10px;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 0px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
-/* background-color: #990000; */
- background: url(images/menubgr.png) repeat-y;
- z-index: 2;
-/* color: #FFF; */
-}
-#navigation ul li ul li:hover {
-/* background-color: #666666; */
- background-image: url(images/menubgr_highlight.png);
- background-repeat: repeat-y;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 5px;
- margin-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 10;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-
-#graph {
- position: relative;
- z-index: 10;
-}
-
-
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #999999;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listrborder {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-left: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- color: #FFFFFF;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #DDDDDD;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 6px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-#login {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 340px;
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 50px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login #username, #password, #password2 {
- font-size: small;
- width: 60%;
- padding-left: 19px;
- padding: 3px;
- margin: 0em;
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-/* Widget CSS */
-.widgetsubheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #B1B1B1;
- padding-right: 6px;
- padding-left: 6px;
- color: #000000;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetdiv{
- margin:5px;
- padding: 5px;
- background:#CCCCCC;
-}
-.widgetconfigdiv{
- background:#BBBBBB;
- font-size: 11px;
- color: #000000;
- padding-right: 5px;
- padding-left: 5px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-
-div#log div.log-entry-mini {
- clear: both;
-}
-
-div#log div.log-entry-mini span {
- padding: 2px 2px 2px 2px;
- padding-left: 6px;
-}
-
-div#log span.log-action-mini-header,
-div#log span.log-time-mini-header,
-div#log span.log-interface-mini-header,
-div#log span.log-source-mini-header,
-div#log span.log-destination-mini-header,
-div#log span.log-protocol-mini-header {
- float: left;
- text-align: left;
- background-color: #B1B1B1;
- font-size: 12px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-time-mini,
-div#log span.log-interface-mini,
-div#log span.log-source-mini,
-div#log span.log-destination-mini,
-div#log span.log-protocol-mini {
- float: left;
- text-align: left;
- background-color: #FFFFFF;
- font-size: 11px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-action-mini-header {
- width: 6%;
-}
-
-div#log span.log-time-mini,
-div#log span.log-time-mini-header {
- width: 19%;
-}
-
-div#log span.log-interface-mini,
-div#log span.log-interface-mini-header {
- width: 8%;
-}
-
-div#log span.log-source-mini,
-div#log span.log-source-mini-header {
- width: 23%;
-}
-
-div#log span.log-destination-mini,
-div#log span.log-destination-mini-header {
- width: 31%;
-}
-
-div#log span.log-protocol-mini,
-div#log span.log-protocol-mini-header {
- width: 8%;
- border-right: 1px solid #999;
-}
-
-/* Sortable tables */
-table.sortable thead {
- background-color:#eee;
- color:#666666;
- font-weight: bold;
- cursor: default;
-}
-
-/*thermal_sensors widget styles*/
-
-.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
-.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
-.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
- background-color: LimeGreen;
- border-top-width: 2px; border-top-color: Lime;
- border-left-width: 0px;
- border-right-width: 0px;
- border-bottom-width: 2px; border-bottom-color: Green;
-}
-.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
-.thermalSensorText { float: left; height: 20px; top: 3px; }
-.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
-
-.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-
-.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
-
-.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
-
-/* widget textarea styles - full width */
-.textarea_widget {
- width: 100%;
- resize:vertical;
- -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
- -moz-box-sizing: border-box; /* Firefox, other Gecko */
- box-sizing: border-box; /* IE 8+ */
-}
diff --git a/usr/local/www/themes/code-red/bottom-loader.js b/usr/local/www/themes/code-red/bottom-loader.js
deleted file mode 100755
index a21f775..0000000
--- a/usr/local/www/themes/code-red/bottom-loader.js
+++ /dev/null
@@ -1,10 +0,0 @@
-//<![CDATA[
-
- NiftyCheck();
- Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
- Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
- Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
- Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
- Rounded("div#topbox","all","#FFF","#990000","smooth");
-
-//]]>
diff --git a/usr/local/www/themes/code-red/favicon.ico b/usr/local/www/themes/code-red/favicon.ico
deleted file mode 100755
index 3440bf2..0000000
--- a/usr/local/www/themes/code-red/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/graphlink.css b/usr/local/www/themes/code-red/graphlink.css
deleted file mode 100755
index 13f65f0..0000000
--- a/usr/local/www/themes/code-red/graphlink.css
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- $Id$
-
- This file is part of the GraphLink software.
- GraphLink is distributed under the MIT License.
- Copyright (C) 2005-2006 Max Khitrov <max@mxsoft.org>
-*******************************************************************************/
-
-/**
- * Defines the background image used for the graph, as well as the actual data
- * locations.
- * Use padding-left and padding-top to align the data area correctly with your
- * background image.
- * Width and height should same as the dimensions of the image, minus the
- * padding values in both directions.
- */
-div.GraphLink {
- width: 212px;
- height: 60px;
- padding-left: 38px;
- padding-top: 10px;
- background-image: url(/themes/nervecenter/images/misc/graph.png);
- overflow: hidden;
-}
-
-/**
- * Defines the data display area. Modify to fit your background image.
- */
-div.GraphLinkData {
- width: 200px;
- height: 50px;
- overflow: hidden;
-}
-
-/**
- * Defines the look of one bar. Nothing to change here other than the color.
- */
-span.GraphLinkBar {
- background-color: #990000;
- height: 100%;
- float: left;
- overflow: hidden;
-}
diff --git a/usr/local/www/themes/code-red/images/alert_bgr.png b/usr/local/www/themes/code-red/images/alert_bgr.png
deleted file mode 100755
index f84afd4..0000000
--- a/usr/local/www/themes/code-red/images/alert_bgr.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/background.gif b/usr/local/www/themes/code-red/images/background.gif
deleted file mode 100755
index 3f0dc77..0000000
--- a/usr/local/www/themes/code-red/images/background.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/background.png b/usr/local/www/themes/code-red/images/background.png
deleted file mode 100755
index e68893d..0000000
--- a/usr/local/www/themes/code-red/images/background.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/button_left.gif b/usr/local/www/themes/code-red/images/button_left.gif
deleted file mode 100755
index 2e46d25..0000000
--- a/usr/local/www/themes/code-red/images/button_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/button_mid.gif b/usr/local/www/themes/code-red/images/button_mid.gif
deleted file mode 100755
index 4198d93..0000000
--- a/usr/local/www/themes/code-red/images/button_mid.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/button_right.gif b/usr/local/www/themes/code-red/images/button_right.gif
deleted file mode 100755
index 0faaa67..0000000
--- a/usr/local/www/themes/code-red/images/button_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/footer.png b/usr/local/www/themes/code-red/images/footer.png
deleted file mode 100755
index e609b9d..0000000
--- a/usr/local/www/themes/code-red/images/footer.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/header.png b/usr/local/www/themes/code-red/images/header.png
deleted file mode 100755
index 4525e61..0000000
--- a/usr/local/www/themes/code-red/images/header.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/help.png b/usr/local/www/themes/code-red/images/help.png
deleted file mode 100755
index 1de05e3..0000000
--- a/usr/local/www/themes/code-red/images/help.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/horizontal.gif b/usr/local/www/themes/code-red/images/horizontal.gif
deleted file mode 100755
index a280dcb..0000000
--- a/usr/local/www/themes/code-red/images/horizontal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/favicon.ico b/usr/local/www/themes/code-red/images/icons/favicon.ico
deleted file mode 100755
index 3440bf2..0000000
--- a/usr/local/www/themes/code-red/images/icons/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_3g.gif b/usr/local/www/themes/code-red/images/icons/icon_3g.gif
deleted file mode 100755
index 46ccb92..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_3g.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/code-red/images/icons/icon_3g_inactive.gif
deleted file mode 100755
index cf983e4..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_3g_inactive.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_advanced.gif b/usr/local/www/themes/code-red/images/icons/icon_advanced.gif
deleted file mode 100644
index 3ede1ff..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_advanced.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_advanced_s.gif b/usr/local/www/themes/code-red/images/icons/icon_advanced_s.gif
deleted file mode 100644
index b233549..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_advanced_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_alert.gif b/usr/local/www/themes/code-red/images/icons/icon_alert.gif
deleted file mode 100755
index 7646941..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_alert.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_alias_host.gif b/usr/local/www/themes/code-red/images/icons/icon_alias_host.gif
deleted file mode 100755
index ad43e17..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_alias_host.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_alias_net.gif b/usr/local/www/themes/code-red/images/icons/icon_alias_net.gif
deleted file mode 100755
index abd1b8b..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_alias_net.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_alias_port.gif b/usr/local/www/themes/code-red/images/icons/icon_alias_port.gif
deleted file mode 100755
index 4acf2aa..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_alias_port.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_alias_url.gif b/usr/local/www/themes/code-red/images/icons/icon_alias_url.gif
deleted file mode 100755
index 660571e..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_alias_url.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/code-red/images/icons/icon_alias_url_reload.gif
deleted file mode 100755
index 55c1c4a..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_alias_url_reload.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_block.gif b/usr/local/www/themes/code-red/images/icons/icon_block.gif
deleted file mode 100755
index 670c968..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_block.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_block_add.gif b/usr/local/www/themes/code-red/images/icons/icon_block_add.gif
deleted file mode 100755
index eb726d6..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_block_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_block_d.gif b/usr/local/www/themes/code-red/images/icons/icon_block_d.gif
deleted file mode 100755
index e6345fe..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_block_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_cablenic.gif b/usr/local/www/themes/code-red/images/icons/icon_cablenic.gif
deleted file mode 100755
index 9173058..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_cablenic.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_cal.gif b/usr/local/www/themes/code-red/images/icons/icon_cal.gif
deleted file mode 100755
index a9c7c87..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_cal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_cal_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_cal_mo.gif
deleted file mode 100755
index 1647e2f..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_cal_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_carp.gif b/usr/local/www/themes/code-red/images/icons/icon_carp.gif
deleted file mode 100755
index 9454a82..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_carp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_carp_d.gif b/usr/local/www/themes/code-red/images/icons/icon_carp_d.gif
deleted file mode 100755
index 2ba8db2..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_carp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_chain.png b/usr/local/www/themes/code-red/images/icons/icon_chain.png
deleted file mode 100644
index 12db07a..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_chain.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_check.gif b/usr/local/www/themes/code-red/images/icons/icon_check.gif
deleted file mode 100755
index 393674d..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_check.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_clock_green.gif b/usr/local/www/themes/code-red/images/icons/icon_clock_green.gif
deleted file mode 100755
index e171ba8..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_clock_green.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_clock_grey.gif b/usr/local/www/themes/code-red/images/icons/icon_clock_grey.gif
deleted file mode 100755
index 00c865a..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_clock_grey.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_clock_red.gif b/usr/local/www/themes/code-red/images/icons/icon_clock_red.gif
deleted file mode 100755
index 7b412ee..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_clock_red.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_close.gif b/usr/local/www/themes/code-red/images/icons/icon_close.gif
deleted file mode 100755
index e0f86a7..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_close.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_configure.gif b/usr/local/www/themes/code-red/images/icons/icon_configure.gif
deleted file mode 100755
index 7182e0d..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_configure.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_down.gif b/usr/local/www/themes/code-red/images/icons/icon_down.gif
deleted file mode 100755
index b71a9c5..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_down_d.gif b/usr/local/www/themes/code-red/images/icons/icon_down_d.gif
deleted file mode 100755
index 70a7473..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_down_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_down_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_down_mo.gif
deleted file mode 100755
index 584587a..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_down_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_e.gif b/usr/local/www/themes/code-red/images/icons/icon_e.gif
deleted file mode 100755
index 2950800..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_e.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_e_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_e_mo.gif
deleted file mode 100755
index 9ba5738..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_e_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_error.gif b/usr/local/www/themes/code-red/images/icons/icon_error.gif
deleted file mode 100755
index e0fa659..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_error.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_exclam.gif b/usr/local/www/themes/code-red/images/icons/icon_exclam.gif
deleted file mode 100755
index 36c2ec7..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_exclam.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_flag_de.png b/usr/local/www/themes/code-red/images/icons/icon_flag_de.png
deleted file mode 100755
index 069cbbe..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_flag_de.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_flag_en.png b/usr/local/www/themes/code-red/images/icons/icon_flag_en.png
deleted file mode 100755
index bd7f9a5..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_flag_en.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_flag_es.png b/usr/local/www/themes/code-red/images/icons/icon_flag_es.png
deleted file mode 100755
index 434776c..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_flag_es.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/code-red/images/icons/icon_flag_pt_BR.png
deleted file mode 100755
index f786349..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_flag_pt_BR.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_cert.png
deleted file mode 100755
index 48a34b6..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_frmfld_cert.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_file.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_file.png
deleted file mode 100755
index 48a9ed2..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_frmfld_file.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_group.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_group.png
deleted file mode 100755
index 7d929c0..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_frmfld_group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_host.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_host.png
deleted file mode 100755
index 867ef2c..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_frmfld_host.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_imp.png
deleted file mode 100755
index f667cfc..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_frmfld_imp.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_mail.png
deleted file mode 100755
index d2d4548..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_frmfld_mail.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_pwd.png
deleted file mode 100755
index 06b53a1..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_frmfld_pwd.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_search.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_search.png
deleted file mode 100755
index 33de926..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_frmfld_search.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_time.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_time.png
deleted file mode 100755
index aa8300a..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_frmfld_time.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_unknown.png
deleted file mode 100755
index 1857d0e..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_frmfld_unknown.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_url.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_url.png
deleted file mode 100755
index cf56792..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_frmfld_url.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_user.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_user.png
deleted file mode 100755
index e00eebe..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_frmfld_user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_fw-update.gif b/usr/local/www/themes/code-red/images/icons/icon_fw-update.gif
deleted file mode 100755
index 52c18ac..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_fw-update.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_help.gif b/usr/local/www/themes/code-red/images/icons/icon_help.gif
deleted file mode 100644
index 84c84db..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_help.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_ifalias.gif b/usr/local/www/themes/code-red/images/icons/icon_ifalias.gif
deleted file mode 100755
index 0c569a7..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_ifalias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/code-red/images/icons/icon_ifalias_d.gif
deleted file mode 100755
index faa84d4..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_ifalias_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_import_alias.gif b/usr/local/www/themes/code-red/images/icons/icon_import_alias.gif
deleted file mode 100755
index d11a5f0..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_import_alias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_in.gif b/usr/local/www/themes/code-red/images/icons/icon_in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_in_d.gif b/usr/local/www/themes/code-red/images/icons/icon_in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_info_pkg.gif b/usr/local/www/themes/code-red/images/icons/icon_info_pkg.gif
deleted file mode 100755
index cd3a532..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_info_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_interface_down.gif b/usr/local/www/themes/code-red/images/icons/icon_interface_down.gif
deleted file mode 100755
index 0626655..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_interface_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_interface_up.gif b/usr/local/www/themes/code-red/images/icons/icon_interface_up.gif
deleted file mode 100755
index 1449513..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_interface_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_left.gif b/usr/local/www/themes/code-red/images/icons/icon_left.gif
deleted file mode 100755
index 8effefe..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_left_d.gif b/usr/local/www/themes/code-red/images/icons/icon_left_d.gif
deleted file mode 100755
index c778014..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_left_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_left_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_left_mo.gif
deleted file mode 100755
index 84c6fa2..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_left_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_log.gif b/usr/local/www/themes/code-red/images/icons/icon_log.gif
deleted file mode 100755
index 4a1983a..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_log.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_log_d.gif b/usr/local/www/themes/code-red/images/icons/icon_log_d.gif
deleted file mode 100755
index d31bd9b..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_log_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_log_s.gif b/usr/local/www/themes/code-red/images/icons/icon_log_s.gif
deleted file mode 100755
index f9fda33..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_log_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_log_s_d.gif b/usr/local/www/themes/code-red/images/icons/icon_log_s_d.gif
deleted file mode 100755
index fb2c05f..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_log_s_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_logs.gif b/usr/local/www/themes/code-red/images/icons/icon_logs.gif
deleted file mode 100644
index afe0104..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_logs.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_match.gif b/usr/local/www/themes/code-red/images/icons/icon_match.gif
deleted file mode 100644
index 215571f..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_match.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_match_d.gif b/usr/local/www/themes/code-red/images/icons/icon_match_d.gif
deleted file mode 100644
index 6e4c364..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_match_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_minus.gif b/usr/local/www/themes/code-red/images/icons/icon_minus.gif
deleted file mode 100755
index 417544f..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_minus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_open.gif b/usr/local/www/themes/code-red/images/icons/icon_open.gif
deleted file mode 100755
index ac3da14..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_open.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_other.gif b/usr/local/www/themes/code-red/images/icons/icon_other.gif
deleted file mode 100755
index e6f780f..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_other.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_other_d.gif b/usr/local/www/themes/code-red/images/icons/icon_other_d.gif
deleted file mode 100755
index b08d970..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_other_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_out.gif b/usr/local/www/themes/code-red/images/icons/icon_out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_out_d.gif b/usr/local/www/themes/code-red/images/icons/icon_out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_parp.gif b/usr/local/www/themes/code-red/images/icons/icon_parp.gif
deleted file mode 100755
index 96acaf3..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_parp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_parp_d.gif b/usr/local/www/themes/code-red/images/icons/icon_parp_d.gif
deleted file mode 100755
index 7d7d00e..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_parp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_pass.gif b/usr/local/www/themes/code-red/images/icons/icon_pass.gif
deleted file mode 100755
index fe1bb0d..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_pass.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_pass_add.gif b/usr/local/www/themes/code-red/images/icons/icon_pass_add.gif
deleted file mode 100755
index f7f4c20..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_pass_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_pass_d.gif b/usr/local/www/themes/code-red/images/icons/icon_pass_d.gif
deleted file mode 100755
index 6adc431..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_pass_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_plus.gif b/usr/local/www/themes/code-red/images/icons/icon_plus.gif
deleted file mode 100755
index 2a94eeb..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_plus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_plus_bl.gif b/usr/local/www/themes/code-red/images/icons/icon_plus_bl.gif
deleted file mode 100755
index 8dcd7c0..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_plus_bl.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/code-red/images/icons/icon_plus_bl_p.gif
deleted file mode 100755
index 0c79849..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_plus_bl_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_plus_d.gif b/usr/local/www/themes/code-red/images/icons/icon_plus_d.gif
deleted file mode 100755
index ebc7457..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_plus_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_plus_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_plus_mo.gif
deleted file mode 100755
index 1c7ca08..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_plus_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_plus_p.gif b/usr/local/www/themes/code-red/images/icons/icon_plus_p.gif
deleted file mode 100755
index eb41284..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_plus_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall.gif
deleted file mode 100755
index d78b867..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_reinstall.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_d.gif
deleted file mode 100755
index 13658f7..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_reinstall_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_mo.gif
deleted file mode 100755
index 90b576e..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_reinstall_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg.gif
deleted file mode 100755
index 9aebb03..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_d.gif
deleted file mode 100755
index 4ab4992..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_mo.gif
deleted file mode 100755
index 7025d20..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml.gif
deleted file mode 100755
index 4542432..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_d.gif
deleted file mode 100755
index 8d3a68d..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_mo.gif
deleted file mode 100755
index 15e0aed..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_reject.gif b/usr/local/www/themes/code-red/images/icons/icon_reject.gif
deleted file mode 100755
index 5565cd6..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_reject.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_reject_d.gif b/usr/local/www/themes/code-red/images/icons/icon_reject_d.gif
deleted file mode 100755
index 6c09fae..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_reject_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_right.gif b/usr/local/www/themes/code-red/images/icons/icon_right.gif
deleted file mode 100755
index fdf2d8b..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_restart.gif b/usr/local/www/themes/code-red/images/icons/icon_service_restart.gif
deleted file mode 100755
index e49fbd7..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_service_restart.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/code-red/images/icons/icon_service_restart_d.gif
deleted file mode 100755
index a5d6d7c..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_service_restart_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_running.gif b/usr/local/www/themes/code-red/images/icons/icon_service_running.gif
deleted file mode 100644
index 543fd56..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_service_running.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_start.gif b/usr/local/www/themes/code-red/images/icons/icon_service_start.gif
deleted file mode 100755
index 09bb58f..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_service_start.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_start_d.gif b/usr/local/www/themes/code-red/images/icons/icon_service_start_d.gif
deleted file mode 100755
index f58f111..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_service_start_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_status.gif b/usr/local/www/themes/code-red/images/icons/icon_service_status.gif
deleted file mode 100644
index a93bcfb..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_service_status.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_stop.gif b/usr/local/www/themes/code-red/images/icons/icon_service_stop.gif
deleted file mode 100755
index 922addc..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_service_stop.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/code-red/images/icons/icon_service_stop_d.gif
deleted file mode 100755
index b4cfdea..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_service_stop_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_stopped.gif b/usr/local/www/themes/code-red/images/icons/icon_service_stopped.gif
deleted file mode 100644
index f93a25d..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_service_stopped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_services_restart_mo.gif
deleted file mode 100755
index a092b40..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_services_restart_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_services_start_mo.gif
deleted file mode 100755
index ecdb58f..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_services_start_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_services_stop_mo.gif
deleted file mode 100755
index c00e208..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_services_stop_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_system-group-grey.png b/usr/local/www/themes/code-red/images/icons/icon_system-group-grey.png
deleted file mode 100755
index d7b964d..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_system-group-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_system-group.png b/usr/local/www/themes/code-red/images/icons/icon_system-group.png
deleted file mode 100755
index 1c974f2..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_system-group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_system-user-grey.png b/usr/local/www/themes/code-red/images/icons/icon_system-user-grey.png
deleted file mode 100755
index 2f6047d..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_system-user-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_system-user.png b/usr/local/www/themes/code-red/images/icons/icon_system-user.png
deleted file mode 100755
index ef82156..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_system-user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/code-red/images/icons/icon_system_lock_screen.png
deleted file mode 100755
index 30f306d..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_system_lock_screen.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_system_logout.png b/usr/local/www/themes/code-red/images/icons/icon_system_logout.png
deleted file mode 100755
index 9bbb6c7..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_system_logout.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_trapped.gif b/usr/local/www/themes/code-red/images/icons/icon_trapped.gif
deleted file mode 100755
index ffeb2cd..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_trapped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_trapped_p.gif b/usr/local/www/themes/code-red/images/icons/icon_trapped_p.gif
deleted file mode 100755
index 6d46aaf..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_trapped_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_ts_rule.gif b/usr/local/www/themes/code-red/images/icons/icon_ts_rule.gif
deleted file mode 100755
index e15ab6c..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_ts_rule.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/code-red/images/icons/icon_ts_rule_d.gif
deleted file mode 100755
index f776281..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_ts_rule_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_up.gif b/usr/local/www/themes/code-red/images/icons/icon_up.gif
deleted file mode 100755
index 883c5a2..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_up_d.gif b/usr/local/www/themes/code-red/images/icons/icon_up_d.gif
deleted file mode 100755
index 0ddcce2..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_up_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_up_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_up_mo.gif
deleted file mode 100755
index 9f869a4..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_up_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_wlan.gif b/usr/local/www/themes/code-red/images/icons/icon_wlan.gif
deleted file mode 100755
index 1f0addc..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_wlan.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_wlan_d.gif b/usr/local/www/themes/code-red/images/icons/icon_wlan_d.gif
deleted file mode 100755
index 35bf580..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_wlan_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_wol_all.gif b/usr/local/www/themes/code-red/images/icons/icon_wol_all.gif
deleted file mode 100755
index 2d22182..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_wol_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/code-red/images/icons/icon_wzd_nsaved.png
deleted file mode 100755
index 21cb27d..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_wzd_nsaved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_wzd_saved.png b/usr/local/www/themes/code-red/images/icons/icon_wzd_saved.png
deleted file mode 100755
index ab82946..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_wzd_saved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_x.gif b/usr/local/www/themes/code-red/images/icons/icon_x.gif
deleted file mode 100755
index 24e4d49..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_x_d.gif b/usr/local/www/themes/code-red/images/icons/icon_x_d.gif
deleted file mode 100755
index d2bfbc8..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_x_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_x_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_x_mo.gif
deleted file mode 100755
index da7b57c..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_x_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/icon_x_p.gif b/usr/local/www/themes/code-red/images/icons/icon_x_p.gif
deleted file mode 100755
index 8828fa6..0000000
--- a/usr/local/www/themes/code-red/images/icons/icon_x_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/in.gif b/usr/local/www/themes/code-red/images/icons/in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/code-red/images/icons/in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/in_d.gif b/usr/local/www/themes/code-red/images/icons/in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/code-red/images/icons/in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/out.gif b/usr/local/www/themes/code-red/images/icons/out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/code-red/images/icons/out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/icons/out_d.gif b/usr/local/www/themes/code-red/images/icons/out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/code-red/images/icons/out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/log.png b/usr/local/www/themes/code-red/images/log.png
deleted file mode 100755
index 762ba80..0000000
--- a/usr/local/www/themes/code-red/images/log.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/logo.gif b/usr/local/www/themes/code-red/images/logo.gif
deleted file mode 100755
index 3455d6b..0000000
--- a/usr/local/www/themes/code-red/images/logo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/logobig.jpg b/usr/local/www/themes/code-red/images/logobig.jpg
deleted file mode 100755
index 62922ce..0000000
--- a/usr/local/www/themes/code-red/images/logobig.jpg
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/logon-background.gif b/usr/local/www/themes/code-red/images/logon-background.gif
deleted file mode 100755
index 0176101..0000000
--- a/usr/local/www/themes/code-red/images/logon-background.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/menu_down.gif b/usr/local/www/themes/code-red/images/menu_down.gif
deleted file mode 100755
index 137de8d..0000000
--- a/usr/local/www/themes/code-red/images/menu_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/menu_footer.gif b/usr/local/www/themes/code-red/images/menu_footer.gif
deleted file mode 100755
index d06faa4..0000000
--- a/usr/local/www/themes/code-red/images/menu_footer.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/menu_right.gif b/usr/local/www/themes/code-red/images/menu_right.gif
deleted file mode 100755
index 881327c..0000000
--- a/usr/local/www/themes/code-red/images/menu_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/menubgr.png b/usr/local/www/themes/code-red/images/menubgr.png
deleted file mode 100755
index 45e0ec7..0000000
--- a/usr/local/www/themes/code-red/images/menubgr.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/menubgr_footer.png b/usr/local/www/themes/code-red/images/menubgr_footer.png
deleted file mode 100755
index 5d351e4..0000000
--- a/usr/local/www/themes/code-red/images/menubgr_footer.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/menubgr_highlight.png b/usr/local/www/themes/code-red/images/menubgr_highlight.png
deleted file mode 100755
index f00582b..0000000
--- a/usr/local/www/themes/code-red/images/menubgr_highlight.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/metal_bgr.gif b/usr/local/www/themes/code-red/images/metal_bgr.gif
deleted file mode 100755
index a0ca6c8..0000000
--- a/usr/local/www/themes/code-red/images/metal_bgr.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/metal_bgr_red.gif b/usr/local/www/themes/code-red/images/metal_bgr_red.gif
deleted file mode 100755
index c4a1465..0000000
--- a/usr/local/www/themes/code-red/images/metal_bgr_red.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/background.gif b/usr/local/www/themes/code-red/images/misc/background.gif
deleted file mode 100755
index 87cceb3..0000000
--- a/usr/local/www/themes/code-red/images/misc/background.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/bar_blue.gif b/usr/local/www/themes/code-red/images/misc/bar_blue.gif
deleted file mode 100755
index 741186a..0000000
--- a/usr/local/www/themes/code-red/images/misc/bar_blue.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/bar_gray.gif b/usr/local/www/themes/code-red/images/misc/bar_gray.gif
deleted file mode 100755
index e86e245..0000000
--- a/usr/local/www/themes/code-red/images/misc/bar_gray.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/bar_left.gif b/usr/local/www/themes/code-red/images/misc/bar_left.gif
deleted file mode 100755
index af751fa..0000000
--- a/usr/local/www/themes/code-red/images/misc/bar_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/bar_right.gif b/usr/local/www/themes/code-red/images/misc/bar_right.gif
deleted file mode 100755
index ff12d9e..0000000
--- a/usr/local/www/themes/code-red/images/misc/bar_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/bullet_toggle_minus.png b/usr/local/www/themes/code-red/images/misc/bullet_toggle_minus.png
deleted file mode 100755
index 37db2fd..0000000
--- a/usr/local/www/themes/code-red/images/misc/bullet_toggle_minus.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/bullet_toggle_plus.png b/usr/local/www/themes/code-red/images/misc/bullet_toggle_plus.png
deleted file mode 100755
index fba7af9..0000000
--- a/usr/local/www/themes/code-red/images/misc/bullet_toggle_plus.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/button.gif b/usr/local/www/themes/code-red/images/misc/button.gif
deleted file mode 100755
index e85dbb3..0000000
--- a/usr/local/www/themes/code-red/images/misc/button.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/graph.png b/usr/local/www/themes/code-red/images/misc/graph.png
deleted file mode 100755
index 507ec75..0000000
--- a/usr/local/www/themes/code-red/images/misc/graph.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/key_128.gif b/usr/local/www/themes/code-red/images/misc/key_128.gif
deleted file mode 100755
index ea5ae34..0000000
--- a/usr/local/www/themes/code-red/images/misc/key_128.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/key_152.gif b/usr/local/www/themes/code-red/images/misc/key_152.gif
deleted file mode 100755
index 6c7fc03..0000000
--- a/usr/local/www/themes/code-red/images/misc/key_152.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/key_256.gif b/usr/local/www/themes/code-red/images/misc/key_256.gif
deleted file mode 100755
index 3e1c377..0000000
--- a/usr/local/www/themes/code-red/images/misc/key_256.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/key_64.gif b/usr/local/www/themes/code-red/images/misc/key_64.gif
deleted file mode 100755
index 87892bd..0000000
--- a/usr/local/www/themes/code-red/images/misc/key_64.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/left_background.gif b/usr/local/www/themes/code-red/images/misc/left_background.gif
deleted file mode 100755
index 529d827..0000000
--- a/usr/local/www/themes/code-red/images/misc/left_background.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/loader.gif b/usr/local/www/themes/code-red/images/misc/loader.gif
deleted file mode 100755
index 5d10ac3..0000000
--- a/usr/local/www/themes/code-red/images/misc/loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/loader_all.gif b/usr/local/www/themes/code-red/images/misc/loader_all.gif
deleted file mode 100755
index cb6bc0c..0000000
--- a/usr/local/www/themes/code-red/images/misc/loader_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/loader_filter.gif b/usr/local/www/themes/code-red/images/misc/loader_filter.gif
deleted file mode 100755
index b838b17..0000000
--- a/usr/local/www/themes/code-red/images/misc/loader_filter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/loader_tab.gif b/usr/local/www/themes/code-red/images/misc/loader_tab.gif
deleted file mode 100755
index 05bb04c..0000000
--- a/usr/local/www/themes/code-red/images/misc/loader_tab.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/logon.png b/usr/local/www/themes/code-red/images/misc/logon.png
deleted file mode 100755
index 7921782..0000000
--- a/usr/local/www/themes/code-red/images/misc/logon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/plogo_0.gif b/usr/local/www/themes/code-red/images/misc/plogo_0.gif
deleted file mode 100755
index 160b56d..0000000
--- a/usr/local/www/themes/code-red/images/misc/plogo_0.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/plogo_1.gif b/usr/local/www/themes/code-red/images/misc/plogo_1.gif
deleted file mode 100755
index 50342d6..0000000
--- a/usr/local/www/themes/code-red/images/misc/plogo_1.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/plogo_10.gif b/usr/local/www/themes/code-red/images/misc/plogo_10.gif
deleted file mode 100755
index 06cba14..0000000
--- a/usr/local/www/themes/code-red/images/misc/plogo_10.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/plogo_2.gif b/usr/local/www/themes/code-red/images/misc/plogo_2.gif
deleted file mode 100755
index 9d10230..0000000
--- a/usr/local/www/themes/code-red/images/misc/plogo_2.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/plogo_3.gif b/usr/local/www/themes/code-red/images/misc/plogo_3.gif
deleted file mode 100755
index 1983f87..0000000
--- a/usr/local/www/themes/code-red/images/misc/plogo_3.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/plogo_4.gif b/usr/local/www/themes/code-red/images/misc/plogo_4.gif
deleted file mode 100755
index f7158bd..0000000
--- a/usr/local/www/themes/code-red/images/misc/plogo_4.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/plogo_5.gif b/usr/local/www/themes/code-red/images/misc/plogo_5.gif
deleted file mode 100755
index c7af593..0000000
--- a/usr/local/www/themes/code-red/images/misc/plogo_5.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/plogo_6.gif b/usr/local/www/themes/code-red/images/misc/plogo_6.gif
deleted file mode 100755
index 310eb22..0000000
--- a/usr/local/www/themes/code-red/images/misc/plogo_6.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/plogo_7.gif b/usr/local/www/themes/code-red/images/misc/plogo_7.gif
deleted file mode 100755
index 06bd2e8..0000000
--- a/usr/local/www/themes/code-red/images/misc/plogo_7.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/plogo_8.gif b/usr/local/www/themes/code-red/images/misc/plogo_8.gif
deleted file mode 100755
index c6ef564..0000000
--- a/usr/local/www/themes/code-red/images/misc/plogo_8.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/plogo_9.gif b/usr/local/www/themes/code-red/images/misc/plogo_9.gif
deleted file mode 100755
index 4f0cd4d..0000000
--- a/usr/local/www/themes/code-red/images/misc/plogo_9.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/progress_bar.gif b/usr/local/www/themes/code-red/images/misc/progress_bar.gif
deleted file mode 100755
index 3b4aa52..0000000
--- a/usr/local/www/themes/code-red/images/misc/progress_bar.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/rrd_error.png b/usr/local/www/themes/code-red/images/misc/rrd_error.png
deleted file mode 100755
index a79ecf3..0000000
--- a/usr/local/www/themes/code-red/images/misc/rrd_error.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/status_alerter.gif b/usr/local/www/themes/code-red/images/misc/status_alerter.gif
deleted file mode 100755
index 7ff1e95..0000000
--- a/usr/local/www/themes/code-red/images/misc/status_alerter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/status_carpmaster.gif b/usr/local/www/themes/code-red/images/misc/status_carpmaster.gif
deleted file mode 100755
index 2c32908..0000000
--- a/usr/local/www/themes/code-red/images/misc/status_carpmaster.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/status_left.gif b/usr/local/www/themes/code-red/images/misc/status_left.gif
deleted file mode 100755
index b5a2930..0000000
--- a/usr/local/www/themes/code-red/images/misc/status_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/status_page_loading.gif b/usr/local/www/themes/code-red/images/misc/status_page_loading.gif
deleted file mode 100755
index 067ef18..0000000
--- a/usr/local/www/themes/code-red/images/misc/status_page_loading.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/status_reload_all.gif b/usr/local/www/themes/code-red/images/misc/status_reload_all.gif
deleted file mode 100755
index 72de6bd..0000000
--- a/usr/local/www/themes/code-red/images/misc/status_reload_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/status_reload_filter.gif b/usr/local/www/themes/code-red/images/misc/status_reload_filter.gif
deleted file mode 100755
index d72761a..0000000
--- a/usr/local/www/themes/code-red/images/misc/status_reload_filter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/status_right.gif b/usr/local/www/themes/code-red/images/misc/status_right.gif
deleted file mode 100755
index bf66fdb..0000000
--- a/usr/local/www/themes/code-red/images/misc/status_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/tri_c.gif b/usr/local/www/themes/code-red/images/misc/tri_c.gif
deleted file mode 100755
index 317b758..0000000
--- a/usr/local/www/themes/code-red/images/misc/tri_c.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/tri_c_black.gif b/usr/local/www/themes/code-red/images/misc/tri_c_black.gif
deleted file mode 100755
index 309846e..0000000
--- a/usr/local/www/themes/code-red/images/misc/tri_c_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/tri_o.gif b/usr/local/www/themes/code-red/images/misc/tri_o.gif
deleted file mode 100755
index eb95c32..0000000
--- a/usr/local/www/themes/code-red/images/misc/tri_o.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/tri_o_black.gif b/usr/local/www/themes/code-red/images/misc/tri_o_black.gif
deleted file mode 100755
index f818f3b..0000000
--- a/usr/local/www/themes/code-red/images/misc/tri_o_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/misc/widget_loader.gif b/usr/local/www/themes/code-red/images/misc/widget_loader.gif
deleted file mode 100755
index ca35e2a..0000000
--- a/usr/local/www/themes/code-red/images/misc/widget_loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/new_tab_menu.png b/usr/local/www/themes/code-red/images/new_tab_menu.png
deleted file mode 100755
index 4bdfcef..0000000
--- a/usr/local/www/themes/code-red/images/new_tab_menu.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/status.png b/usr/local/www/themes/code-red/images/status.png
deleted file mode 100755
index a3e368e..0000000
--- a/usr/local/www/themes/code-red/images/status.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/transparent.gif b/usr/local/www/themes/code-red/images/transparent.gif
deleted file mode 100755
index 89c5530..0000000
--- a/usr/local/www/themes/code-red/images/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/images/transparent_pixel.gif b/usr/local/www/themes/code-red/images/transparent_pixel.gif
deleted file mode 100755
index 35d42e8..0000000
--- a/usr/local/www/themes/code-red/images/transparent_pixel.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/javascript/ie7/blank.gif b/usr/local/www/themes/code-red/javascript/ie7/blank.gif
deleted file mode 100755
index a4fe2e6..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/blank.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-box-model.js
deleted file mode 100755
index 45543f6..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/ie7-box-model.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-core.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-core.js
deleted file mode 100755
index b11e2b1..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/ie7-core.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-css-strict.js
deleted file mode 100755
index 4406d7a..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/ie7-css-strict.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-css2.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-css2.js
deleted file mode 100755
index 7121c8e..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/ie7-css2.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-css3.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-css3.js
deleted file mode 100755
index 86b24f5..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/ie7-css3.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-fixed.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-fixed.js
deleted file mode 100755
index 4321cda..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/ie7-fixed.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-html4.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-html4.js
deleted file mode 100755
index 4d2baa9..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/ie7-html4.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-ie5.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-ie5.js
deleted file mode 100755
index 707fa56..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/ie7-ie5.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-lite-p.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-lite-p.js
deleted file mode 100644
index 3a66d19..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/ie7-lite-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í></Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-lite.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-lite.js
deleted file mode 100755
index 88c764f..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/ie7-lite.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-png.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-png.js
deleted file mode 100755
index 7b8f2cf..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/ie7-png.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-server.css b/usr/local/www/themes/code-red/javascript/ie7/ie7-server.css
deleted file mode 100755
index 47c7edd..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/ie7-server.css
+++ /dev/null
@@ -1,43 +0,0 @@
-body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
-body {margin: 8px; background: #333;}
-h1 {margin: 0;}
-h1 a:hover {background-color: transparent;}
-h2 {font-size: 1.75em;}
-h3 {font-size: 1.1em;}
-a:active {color: #ff0000;}
-a:link {color: #0a6cce;}
-a:visited {color: #0a6cce;}
-code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
- padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
-code.box {display: block; padding: 10px; margin: 0.5em 0;}
-ul {list-style-type: square;}
-dd {margin: .2em 0 .5em 1em;}
-dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
-dl.library dd {font-style: italic; margin-left: 3em;}
-dt {font-weight: bold;}
-dt.pack {color: brown;}
-a img {border-style: none;}
-hr {height: 1px; color: #000; border-style: solid;}
-hr.short {height: 2px; width: 100px;}
-div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
-hr {border-bottom-width: 0px;}
-div.header hr {color: #0a6cce; background-color: #0a6cce;}
-div.content {min-height: 100px;}
-div.footer hr {color: #898e79; background-color: #898e79; }
-div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
-a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
-div.footer a:hover {background-color: transparent; text-decoration: none;}
-div.header .menu {text-align: right;}
-div.footer {font-size: x-small; margin-top: 8px;}
-div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
-#license {margin-top: 5px; font-size: xx-small;}
-table {border-top: 1px solid #000; border-left: 1px solid #000;}
-th {background-color: #fff; text-align: left;}
-th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
-th.small {width: 100px;}
-th.medium {width: 200px;}
-th.large {width: 270px;}
-th.x-large {width: 408px;}
-table.fixed {table-layout: fixed;}
-span.comment {color: #666;}
-
diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-standard-p.js
deleted file mode 100644
index 73e99ac..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/ie7-standard-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì></Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-standard.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-standard.js
deleted file mode 100755
index 2109905..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/ie7-standard.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/code-red/javascript/ie7/test-trans.png b/usr/local/www/themes/code-red/javascript/ie7/test-trans.png
deleted file mode 100755
index e187e2c..0000000
--- a/usr/local/www/themes/code-red/javascript/ie7/test-trans.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/javascript/img/grey-40.png b/usr/local/www/themes/code-red/javascript/img/grey-40.png
deleted file mode 100755
index 758b716..0000000
--- a/usr/local/www/themes/code-red/javascript/img/grey-40.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/javascript/img/submenu-off.gif b/usr/local/www/themes/code-red/javascript/img/submenu-off.gif
deleted file mode 100755
index ddcdcae..0000000
--- a/usr/local/www/themes/code-red/javascript/img/submenu-off.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/javascript/img/submenu-on.gif b/usr/local/www/themes/code-red/javascript/img/submenu-on.gif
deleted file mode 100755
index 7a58077..0000000
--- a/usr/local/www/themes/code-red/javascript/img/submenu-on.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/javascript/img/white-90.png b/usr/local/www/themes/code-red/javascript/img/white-90.png
deleted file mode 100755
index efc84b4..0000000
--- a/usr/local/www/themes/code-red/javascript/img/white-90.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/javascript/img/x.gif b/usr/local/www/themes/code-red/javascript/img/x.gif
deleted file mode 100755
index 5bfd67a..0000000
--- a/usr/local/www/themes/code-red/javascript/img/x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/code-red/javascript/niftyjsCode.js b/usr/local/www/themes/code-red/javascript/niftyjsCode.js
deleted file mode 100644
index e71ea14..0000000
--- a/usr/local/www/themes/code-red/javascript/niftyjsCode.js
+++ /dev/null
@@ -1,174 +0,0 @@
-function NiftyCheck(){
-if(!document.getElementById || !document.createElement)
- return(false);
-isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
-if(Array.prototype.push==null){Array.prototype.push=function(){
- this[this.length]=arguments[0]; return(this.length);};}
-return(true);
-}
-
-function Rounded(selector,wich,bk,color,opt){
-var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
-
-if(color=="transparent"){
- cn=cn+"x";
- ecolor=bk;
- bk="transparent";
- }
-else if(opt && opt.indexOf("border")>=0){
- var optar=opt.split(" ");
- for(i=0;i<optar.length;i++)
- if(optar[i].indexOf("#")>=0) ecolor=optar[i];
- if(ecolor=="") ecolor="#666";
- cn+="e";
- edges=true;
- }
-else if(opt && opt.indexOf("smooth")>=0){
- cn+="a";
- ecolor=Mix(bk,color);
- }
-if(opt && opt.indexOf("small")>=0) cn+="s";
-prefixt=cn;
-prefixb=cn;
-if(wich.indexOf("all")>=0){t=true;b=true;}
-else if(wich.indexOf("top")>=0) t="true";
-else if(wich.indexOf("tl")>=0){
- t="true";
- if(wich.indexOf("tr")<0) prefixt+="l";
- }
-else if(wich.indexOf("tr")>=0){
- t="true";
- prefixt+="r";
- }
-if(wich.indexOf("bottom")>=0) b=true;
-else if(wich.indexOf("bl")>=0){
- b="true";
- if(wich.indexOf("br")<0) prefixb+="l";
- }
-else if(wich.indexOf("br")>=0){
- b="true";
- prefixb+="r";
- }
-var v=getElementsBySelector(selector);
-var l=v.length;
-for(i=0;i<l;i++){
- if(edges) AddBorder(v[i],ecolor);
- if(t) AddTop(v[i],bk,color,ecolor,prefixt);
- if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
- }
-}
-
-function AddBorder(el,bc){
-var i;
-if(!el.passed){
- if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
- var t=el.firstChild.nodeValue;
- el.removeChild(el.lastChild);
- var d=CreateEl("span");
- d.style.display="block";
- d.appendChild(document.createTextNode(t));
- el.appendChild(d);
- }
- for(i=0;i<el.childNodes.length;i++){
- if(el.childNodes[i].nodeType==1){
- el.childNodes[i].style.borderLeft="1px solid "+bc;
- el.childNodes[i].style.borderRight="1px solid "+bc;
- }
- }
- }
-el.passed=true;
-}
-
-function AddTop(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=1;i<=lim;i++){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingTop=0;
-el.insertBefore(d,el.firstChild);
-}
-
-function AddBottom(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=lim;i>0;i--){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingBottom=0;
-el.appendChild(d);
-}
-
-function CreateEl(x){
-if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
-else return(document.createElement(x));
-}
-
-function getElementsBySelector(selector){
-var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
-
-if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
- s=selector.split(" ");
- var fs=s[0].split("#");
- if(fs.length==1) return(objlist);
- f=document.getElementById(fs[1]);
- if(f) return(f.getElementsByTagName(s[1]));
- return(objlist);
- }
-if(selector.indexOf("#")>0){ //id selector like "tag#id"
- s=selector.split("#");
- tag=s[0];
- selid=s[1];
- }
-if(selid!=""){
- f=document.getElementById(selid);
- if(f) objlist.push(f);
- return(objlist);
- }
-if(selector.indexOf(".")>0){ //class selector like "tag.class"
- s=selector.split(".");
- tag=s[0];
- selclass=s[1];
- }
-var v=document.getElementsByTagName(tag); // tag selector like "tag"
-if(selclass=="")
- return(v);
-for(i=0;i<v.length;i++){
- if(v[i].className.indexOf(selclass)>=0){
- objlist.push(v[i]);
- }
- }
-return(objlist);
-}
-
-function Mix(c1,c2){
-var i,step1,step2,x,y,r=new Array(3);
-if(c1.length==4)step1=1;
-else step1=2;
-if(c2.length==4) step2=1;
-else step2=2;
-for(i=0;i<3;i++){
- x=parseInt(c1.substr(1+step1*i,step1),16);
- if(step1==1) x=16*x+x;
- y=parseInt(c2.substr(1+step2*i,step2),16);
- if(step2==1) y=16*y+y;
- r[i]=Math.floor((x*50+y*50)/100);
- }
-return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
-} \ No newline at end of file
diff --git a/usr/local/www/themes/code-red/javascript/transmenu-body.php b/usr/local/www/themes/code-red/javascript/transmenu-body.php
deleted file mode 100755
index 6da8efc..0000000
--- a/usr/local/www/themes/code-red/javascript/transmenu-body.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-/* $Id$ */
-/* ========================================================================== */
-/*
- transmenu-body.php
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- All rights reserved.
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-function nervecenterTransmenuGetBodyJS() {
- global $rootmenu;
-
- if (isset($rootmenu)) {
- return $rootmenu->getMenuJScript();
- } else if (empty($rootmenu)) {
- return "alert('No rootmenu object found.');";
- } else {
- return "alert('No JavaScript attached to rootmenu object.');";
- }
-}
-
-?>
diff --git a/usr/local/www/themes/code-red/javascript/transmenu-head.php b/usr/local/www/themes/code-red/javascript/transmenu-head.php
deleted file mode 100755
index 7d72c30..0000000
--- a/usr/local/www/themes/code-red/javascript/transmenu-head.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-/* $Id$ */
-/* ========================================================================== */
-/*
- transmenu-head.php
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- All rights reserved.
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-function nervecenterTransmenuGetHeadJS() {
- global $g, $rootmenu;
-
- $transmenu_stub =<<<EOD
- function tmenuinit() {
- //==========================================================================================
- // if supported, initialize TransMenus
- //==========================================================================================
- // Check isSupported() so that menus aren't accidentally sent to non-supporting browsers.
- // This is better than server-side checking because it will also catch browsers which would
- // normally support the menus but have javascript disabled.
- //
- // If supported, call initialize() and then hook whatever image rollover code you need to do
- // to the .onactivate and .ondeactivate events for each menu.
- //==========================================================================================
- if (TransMenu.isSupported()) {
- TransMenu.initialize();
-
- // hook all the highlight swapping of the main toolbar to menu activation/deactivation
- // instead of simple rollover to get the effect where the button stays hightlit until
- // the menu is closed.
- @@CHILD_JSCRIPT@@
- }
- } // end function
-EOD;
-
- if (empty($rootmenu)) {
- require_once("menudef.inc");
- }
-
- $childJScript = "";
- foreach ($rootmenu->getChildren() as $component) {
- $id = "mnua_" . str_replace(" ", "", strtolower($component->getID()));
-
- $childJScript .=<<<EOD
- {$id}.onactivate = function() { document.getElementById("{$id}").className = "hover"; };
- {$id}.ondeactivate = function() { document.getElementById("{$id}").className = ""; };
-
-EOD;
- }
-
- $transmenu_stub = basename($_SERVER['PHP_SELF']) != "wizard.php" ? str_replace("@@CHILD_JSCRIPT@@", $childJScript, $transmenu_stub) : "";
-
- return $transmenu_stub;
-}
-
-?>
diff --git a/usr/local/www/themes/code-red/javascript/transmenu.org b/usr/local/www/themes/code-red/javascript/transmenu.org
deleted file mode 100755
index 6c9e353..0000000
--- a/usr/local/www/themes/code-red/javascript/transmenu.org
+++ /dev/null
@@ -1,785 +0,0 @@
-/* =================================================================================================
- * TransMenu
- * March, 2003
- *
- * Customizable multi-level animated DHTML menus with transparency.
- *
- * Copyright 2003-2004, Aaron Boodman (www.youngpup.net)
- * =================================================================================================
- * "Can I use this?"
- *
- * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
- * out at: http://creativecommons.org/licenses/by/2.0/
- *
- * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
- * for writing it. You may not misrepresent yourself as the author of this code.
- * =================================================================================================
- * "It's kinda hard to read, though"
- *
- * The uncompressed, commented version of this script can be found at:
- * http://youngpup.net/projects/transMenus
- * =================================================================================================
- * updates:
- * 04.19.04 fixed cascade problem with menus nested greater than two levels.
- * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu.
- * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;)
- * also made gecko check a little more strict by specifying build no.
- * ============================================================================================== */
-
-
-
-//==================================================================================================
-// Configuration properties
-//==================================================================================================
-TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif
-TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat
-TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat
-TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed)
-TransMenu.menuPadding = 5; // padding between menu border and items grid
-TransMenu.itemPadding = 3; // additional padding around each item
-TransMenu.shadowSize = 2; // size of shadow under menu
-TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge
-TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS)
-TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5
-TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS)
-TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5
-TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu
-TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu
-
-
-//==================================================================================================
-// Internal use properties
-//==================================================================================================
-TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};
-TransMenu.direction = {down:1,right:2};
-TransMenu.registry = [];
-TransMenu._maxZ = 100;
-
-
-
-//==================================================================================================
-// Static methods
-//==================================================================================================
-// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0
-TransMenu.isSupported = function() {
- var ua = navigator.userAgent.toLowerCase();
- var pf = navigator.platform.toLowerCase();
- var an = navigator.appName;
- var r = false;
-
- if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0
- else if (an == "Microsoft Internet Explorer") {
- if (document.getElementById) { // ie5.1+ mac,win
- if (pf.indexOf("mac") == 0) {
- r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1;
- }
- else r = true;
- }
- }
-
- return r;
-}
-
-// call this in onload once menus have been created
-TransMenu.initialize = function() {
- for (var i = 0, menu = null; menu = this.registry[i]; i++) {
- menu.initialize();
- }
-}
-
-// call this in document body to write out menu html
-TransMenu.renderAll = function() {
- var aMenuHtml = [];
- for (var i = 0, menu = null; menu = this.registry[i]; i++) {
- aMenuHtml[i] = menu.toString();
- }
- document.write(aMenuHtml.join(""));
-}
-
-//==================================================================================================
-// TransMenu constructor (only called internally)
-//==================================================================================================
-// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a
-// reference to an HTML element, or a TransMenuItem from an existing menu.
-// iDirection : The direction to slide out. One of TransMenu.direction.
-// iLeft : Left pixel offset of menu from actuator
-// iTop : Top pixel offset of menu from actuator
-// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
-// parentMenuSet : Menuset this menu will be added to.
-//==================================================================================================
-function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) {
- // public methods
- this.addItem = addItem;
- this.addMenu = addMenu;
- this.toString = toString;
- this.initialize = initialize;
- this.isOpen = false;
- this.show = show;
- this.hide = hide;
- this.items = [];
-
- // events
- this.onactivate = new Function(); // when the menu starts to slide open
- this.ondeactivate = new Function(); // when the menu finishes sliding closed
- this.onmouseover = new Function(); // when the menu has been moused over
- this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future
- this.ondequeue = new Function();
-
- // initialization
- this.index = TransMenu.registry.length;
- TransMenu.registry[this.index] = this;
-
- var id = "TransMenu" + this.index;
- var contentHeight = null;
- var contentWidth = null;
- var childMenuSet = null;
- var animating = false;
- var childMenus = [];
- var slideAccel = -1;
- var elmCache = null;
- var ready = false;
- var _this = this;
- var a = null;
-
- var pos = iDirection == TransMenu.direction.down ? "top" : "left";
- var dim = null;
-
- // private and public method implimentations
- function addItem(sText, sUrl) {
- var item = new TransMenuItem(sText, sUrl, this);
- item._index = this.items.length;
- this.items[item._index] = item;
- }
-
- function addMenu(oMenuItem) {
- if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here");
-
- if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight);
-
- var m = childMenuSet.addMenu(oMenuItem);
-
- childMenus[oMenuItem._index] = m;
- m.onmouseover = child_mouseover;
- m.ondeactivate = child_deactivate;
- m.onqueue = child_queue;
- m.ondequeue = child_dequeue;
-
- return m;
- }
-
- function initialize() {
- initCache();
- initEvents();
- initSize();
- ready = true;
- }
-
- function show() {
- //dbg_dump("show");
- if (ready) {
- _this.isOpen = true;
- animating = true;
- setContainerPos();
- elmCache["clip"].style.visibility = "visible";
- elmCache["clip"].style.zIndex = TransMenu._maxZ++;
- //dbg_dump("maxZ: " + TransMenu._maxZ);
- slideStart();
- _this.onactivate();
- }
- }
-
- function hide() {
- if (ready) {
- _this.isOpen = false;
- animating = true;
-
- for (var i = 0, item = null; item = elmCache.item[i]; i++)
- dehighlight(item);
-
- if (childMenuSet) childMenuSet.hide();
-
- slideStart();
- _this.ondeactivate();
- }
- }
-
- function setContainerPos() {
- var sub = oActuator.constructor == TransMenuItem;
- var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator;
- var el = act;
-
- var x = 0;
- var y = 0;
-
-
- var minX = 0;
- var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width);
- var minY = 0;
- var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height);
-
- // add up all offsets... subtract any scroll offset
- while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) {
- x += el.offsetLeft;
- y += el.offsetTop;
-
- if (el.scrollLeft) x -= el.scrollLeft;
- if (el.scrollTop) y -= el.scrollTop;
-
- el = el.offsetParent;
- }
-
- if (oActuator.constructor == TransMenuItem) {
- x += parseInt(el.parentNode.style.left);
- y += parseInt(el.parentNode.style.top);
- }
-
- switch (iReferencePoint) {
- case TransMenu.reference.topLeft:
- break;
- case TransMenu.reference.topRight:
- x += act.offsetWidth;
- break;
- case TransMenu.reference.bottomLeft:
- y += act.offsetHeight;
- break;
- case TransMenu.reference.bottomRight:
- x += act.offsetWidth;
- y += act.offsetHeight;
- break;
- }
-
- x += iLeft;
- y += iTop;
-
- x = Math.max(Math.min(x, maxX), minX);
- y = Math.max(Math.min(y, maxY), minY);
-
- elmCache["clip"].style.left = x + "px";
- elmCache["clip"].style.top = y + "px";
- }
-
- function slideStart() {
- var x0 = parseInt(elmCache["content"].style[pos]);
- var x1 = _this.isOpen ? 0 : -dim;
-
- if (a != null) a.stop();
- a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel);
-
- a.onframe = slideFrame;
- a.onend = slideEnd;
-
- a.start();
- }
-
- function slideFrame(x) {
- elmCache["content"].style[pos] = x + "px";
- }
-
- function slideEnd() {
- if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden";
- animating = false;
- }
-
- function initSize() {
- // everything is based off the size of the items table...
- var ow = elmCache["items"].offsetWidth;
- var oh = elmCache["items"].offsetHeight;
- var ua = navigator.userAgent.toLowerCase();
-
- // clipping container should be ow/oh + the size of the shadow
- elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px";
- elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px";
-
- // same with content...
- elmCache["content"].style.width = ow + TransMenu.shadowSize + "px";
- elmCache["content"].style.height = oh + TransMenu.shadowSize + "px";
-
- contentHeight = oh + TransMenu.shadowSize;
- contentWidth = ow + TransMenu.shadowSize;
-
- dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth;
-
- // set initially closed
- elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px";
- elmCache["clip"].style.visibility = "hidden";
-
- // if *not* mac/ie 5
- if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) {
- // set background div to offset size
- elmCache["background"].style.width = ow + "px";
- elmCache["background"].style.height = oh + "px";
- elmCache["background"].style.backgroundColor = TransMenu.backgroundColor;
-
- // shadow left starts at offset left and is offsetHeight pixels high
- elmCache["shadowRight"].style.left = ow + "px";
- elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px";
- elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor;
-
- // shadow bottom starts at offset height and is offsetWidth - shadowOffset
- // pixels wide (we don't want the bottom and right shadows to overlap or we
- // get an extra bright bottom-right corner)
- elmCache["shadowBottom"].style.top = oh + "px";
- elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px";
- elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor;
- }
- // mac ie is a little different because we use a PNG for the transparency
- else {
- // set background div to offset size
- elmCache["background"].firstChild.src = TransMenu.backgroundPng;
- elmCache["background"].firstChild.width = ow;
- elmCache["background"].firstChild.height = oh;
-
- // shadow left starts at offset left and is offsetHeight pixels high
- elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng;
- elmCache["shadowRight"].style.left = ow + "px";
- elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize;
- elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize);
-
- // shadow bottom starts at offset height and is offsetWidth - shadowOffset
- // pixels wide (we don't want the bottom and right shadows to overlap or we
- // get an extra bright bottom-right corner)
- elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng;
- elmCache["shadowBottom"].style.top = oh + "px";
- elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize;
- elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset;
- }
- }
-
- function initCache() {
- var menu = document.getElementById(id);
- var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing
-
- elmCache = {};
- elmCache["clip"] = menu;
- elmCache["item"] = [];
-
- for (var i = 0, elm = null; elm = all[i]; i++) {
- switch (elm.className) {
- case "items":
- case "content":
- case "background":
- case "shadowRight":
- case "shadowBottom":
- elmCache[elm.className] = elm;
- break;
- case "item":
- elm._index = elmCache["item"].length;
- elmCache["item"][elm._index] = elm;
- break;
- }
- }
-
- // hack!
- _this.elmCache = elmCache;
- }
-
- function initEvents() {
- // hook item mouseover
- for (var i = 0, item = null; item = elmCache.item[i]; i++) {
- item.onmouseover = item_mouseover;
- item.onmouseout = item_mouseout;
- item.onclick = item_click;
- }
-
- // hook actuation
- if (typeof oActuator.tagName != "undefined") {
- oActuator.onmouseover = actuator_mouseover;
- oActuator.onmouseout = actuator_mouseout;
- }
-
- // hook menu mouseover
- elmCache["content"].onmouseover = content_mouseover;
- elmCache["content"].onmouseout = content_mouseout;
- }
-
- function highlight(oRow) {
- oRow.className = "item hover";
- if (childMenus[oRow._index])
- oRow.lastChild.firstChild.src = TransMenu.dingbatOn;
- }
-
- function dehighlight(oRow) {
- oRow.className = "item";
- if (childMenus[oRow._index])
- oRow.lastChild.firstChild.src = TransMenu.dingbatOff;
- }
-
- function item_mouseover() {
- if (!animating) {
- highlight(this);
-
- if (childMenus[this._index])
- childMenuSet.showMenu(childMenus[this._index]);
- else if (childMenuSet) childMenuSet.hide();
- }
- }
-
- function item_mouseout() {
- if (!animating) {
- if (childMenus[this._index])
- childMenuSet.hideMenu(childMenus[this._index]);
- else // otherwise child_deactivate will do this
- dehighlight(this);
- }
- }
-
- function item_click() {
- if (!animating) {
- if (_this.items[this._index].url)
- location.href = _this.items[this._index].url;
- }
- }
-
- function actuator_mouseover() {
- parentMenuSet.showMenu(_this);
- }
-
- function actuator_mouseout() {
- parentMenuSet.hideMenu(_this);
- }
-
- function content_mouseover() {
- if (!animating) {
- parentMenuSet.showMenu(_this);
- _this.onmouseover();
- }
- }
-
- function content_mouseout() {
- if (!animating) {
- parentMenuSet.hideMenu(_this);
- }
- }
-
- function child_mouseover() {
- if (!animating) {
- parentMenuSet.showMenu(_this);
- }
- }
-
- function child_deactivate() {
- for (var i = 0; i < childMenus.length; i++) {
- if (childMenus[i] == this) {
- dehighlight(elmCache["item"][i]);
- break;
- }
- }
- }
-
- function child_queue() {
- parentMenuSet.hideMenu(_this);
- }
-
- function child_dequeue() {
- parentMenuSet.showMenu(_this);
- }
-
- function toString() {
- var aHtml = [];
- var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : "");
-
- for (var i = 0, item = null; item = this.items[i]; i++) {
- aHtml[i] = item.toString(childMenus[i]);
- }
-
- return '<div id="' + id + '" class="' + sClassName + '">' +
- '<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">' +
- '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr>' +
- aHtml.join('') +
- '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr></table>' +
- '<div class="shadowBottom"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '<div class="shadowRight"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '<div class="background"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '</div></div>';
- }
-}
-
-
-//==================================================================================================
-// TransMenuSet
-//==================================================================================================
-// iDirection : The direction to slide out. One of TransMenu.direction.
-// iLeft : Left pixel offset of menus from actuator
-// iTop : Top pixel offset of menus from actuator
-// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
-//==================================================================================================
-TransMenuSet.registry = [];
-
-function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) {
- // public methods
- this.addMenu = addMenu;
- this.showMenu = showMenu;
- this.hideMenu = hideMenu;
- this.hide = hide;
- this.hideCurrent = hideCurrent;
-
- // initialization
- var menus = [];
- var _this = this;
- var current = null;
-
- this.index = TransMenuSet.registry.length;
- TransMenuSet.registry[this.index] = this;
-
- // method implimentations...
- function addMenu(oActuator) {
- var m = new TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, this);
- menus[menus.length] = m;
- return m;
- }
-
- function showMenu(oMenu) {
- if (oMenu != current) {
- // close currently open menu
- if (current != null) hide(current);
-
- // set current menu to this one
- current = oMenu;
-
- // if this menu is closed, open it
- oMenu.show();
- }
- else {
- // hide pending calls to close this menu
- cancelHide(oMenu);
- }
- }
-
- function hideMenu(oMenu) {
- //dbg_dump("hideMenu a " + oMenu.index);
- if (current == oMenu && oMenu.isOpen) {
- //dbg_dump("hideMenu b " + oMenu.index);
- if (!oMenu.hideTimer) scheduleHide(oMenu);
- }
- }
-
- function scheduleHide(oMenu) {
- //dbg_dump("scheduleHide " + oMenu.index);
- oMenu.onqueue();
- oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay);
- }
-
- function cancelHide(oMenu) {
- //dbg_dump("cancelHide " + oMenu.index);
- if (oMenu.hideTimer) {
- oMenu.ondequeue();
- window.clearTimeout(oMenu.hideTimer);
- oMenu.hideTimer = null;
- }
- }
-
- function hide(oMenu) {
- if (!oMenu && current) oMenu = current;
-
- if (oMenu && current == oMenu && oMenu.isOpen) {
- hideCurrent();
- }
- }
-
- function hideCurrent() {
- if (null != current) {
- cancelHide(current);
- current.hideTimer = null;
- current.hide();
- current = null;
- }
- }
-}
-
-//==================================================================================================
-// TransMenuItem (internal)
-// represents an item in a dropdown
-//==================================================================================================
-// sText : The item display text
-// sUrl : URL to load when the item is clicked
-// oParent : Menu this item is a part of
-//==================================================================================================
-function TransMenuItem(sText, sUrl, oParent) {
- this.toString = toString;
- this.text = sText;
- this.url = sUrl;
- this.parentMenu = oParent;
-
- function toString(bDingbat) {
- var sDingbat = bDingbat ? TransMenu.dingbatOff : TransMenu.spacerGif;
- var iEdgePadding = TransMenu.itemPadding + TransMenu.menuPadding;
- var sPaddingLeft = "padding:" + TransMenu.itemPadding + "px; padding-left:" + iEdgePadding + "px;"
- var sPaddingRight = "padding:" + TransMenu.itemPadding + "px; padding-right:" + iEdgePadding + "px;"
-
- return '<tr class="item"><td nowrap style="' + sPaddingLeft + '">' +
- sText + '</td><td width="14" style="' + sPaddingRight + '">' +
- '<img src="' + sDingbat + '" width="14" height="14"></td></tr>';
- }
-}
-
-
-
-
-
-
-//=====================================================================
-// Accel[erated] [an]imation object
-// change a property of an object over time in an accelerated fashion
-//=====================================================================
-// obj : reference to the object whose property you'd like to animate
-// prop : property you would like to change eg: "left"
-// to : final value of prop
-// time : time the animation should take to run
-// zip : optional. specify the zippiness of the acceleration. pick a
-// number between -1 and 1 where -1 is full decelerated, 1 is
-// full accelerated, and 0 is linear (no acceleration). default
-// is 0.
-// unit : optional. specify the units for use with prop. default is
-// "px".
-//=====================================================================
-// bezier functions lifted from the lib_animation.js file in the
-// 13th Parallel API. www.13thparallel.org
-//=====================================================================
-
-function Accelimation(from, to, time, zip) {
- if (typeof zip == "undefined") zip = 0;
- if (typeof unit == "undefined") unit = "px";
-
- this.x0 = from;
- this.x1 = to;
- this.dt = time;
- this.zip = -zip;
- this.unit = unit;
- this.timer = null;
- this.onend = new Function();
- this.onframe = new Function();
-}
-
-
-
-//=====================================================================
-// public methods
-//=====================================================================
-
-// after you create an accelimation, you call this to start it-a runnin'
-Accelimation.prototype.start = function() {
- this.t0 = new Date().getTime();
- this.t1 = this.t0 + this.dt;
- var dx = this.x1 - this.x0;
- this.c1 = this.x0 + ((1 + this.zip) * dx / 3);
- this.c2 = this.x0 + ((2 + this.zip) * dx / 3);
- Accelimation._add(this);
-}
-
-// and if you need to stop it early for some reason...
-Accelimation.prototype.stop = function() {
- Accelimation._remove(this);
-}
-
-
-
-//=====================================================================
-// private methods
-//=====================================================================
-
-// paints one frame. gets called by Accelimation._paintAll.
-Accelimation.prototype._paint = function(time) {
- if (time < this.t1) {
- var elapsed = time - this.t0;
- this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));
- }
- else this._end();
-}
-
-// ends the animation
-Accelimation.prototype._end = function() {
- Accelimation._remove(this);
- this.onframe(this.x1);
- this.onend();
-}
-
-
-
-
-//=====================================================================
-// static methods (all private)
-//=====================================================================
-
-// add a function to the list of ones to call periodically
-Accelimation._add = function(o) {
- var index = this.instances.length;
- this.instances[index] = o;
- // if this is the first one, start the engine
- if (this.instances.length == 1) {
- this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes);
- }
-}
-
-// remove a function from the list
-Accelimation._remove = function(o) {
- for (var i = 0; i < this.instances.length; i++) {
- if (o == this.instances[i]) {
- this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) );
- break;
- }
- }
- // if that was the last one, stop the engine
- if (this.instances.length == 0) {
- window.clearInterval(this.timerID);
- this.timerID = null;
- }
-}
-
-// "engine" - call each function in the list every so often
-Accelimation._paintAll = function() {
- var now = new Date().getTime();
- for (var i = 0; i < this.instances.length; i++) {
- this.instances[i]._paint(now);
- }
-}
-
-
-// Bezier functions:
-Accelimation._B1 = function(t) { return t*t*t }
-Accelimation._B2 = function(t) { return 3*t*t*(1-t) }
-Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) }
-Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) }
-
-
-//Finds the coordinates of a point at a certain stage through a bezier curve
-Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) {
- return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent);
-}
-
-
-//=====================================================================
-// static properties
-//=====================================================================
-
-Accelimation.instances = [];
-Accelimation.targetRes = 10;
-Accelimation.timerID = null;
-
-
-//=====================================================================
-// IE win memory cleanup
-//=====================================================================
-
-if (window.attachEvent) {
- var cearElementProps = [
- 'data',
- 'onmouseover',
- 'onmouseout',
- 'onmousedown',
- 'onmouseup',
- 'ondblclick',
- 'onclick',
- 'onselectstart',
- 'oncontextmenu'
- ];
-
- window.attachEvent("onunload", function() {
- var el;
- for(var d = document.all.length;d--;){
- el = document.all[d];
- for(var c = cearElementProps.length;c--;){
- el[cearElementProps[c]] = null;
- }
- }
- });
-} \ No newline at end of file
diff --git a/usr/local/www/themes/code-red/javascript/transmenuC.js b/usr/local/www/themes/code-red/javascript/transmenuC.js
deleted file mode 100755
index 88626c7..0000000
--- a/usr/local/www/themes/code-red/javascript/transmenuC.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/* =================================================================================================
- * TransMenu
- * March, 2003
- * Customizable multi-level animated DHTML menus with transparency.
- * =================================================================================================
- * "Can I use this?"
- *
- * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
- * out at: http://creativecommons.org/licenses/by/2.0/
- *
- * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
- * for writing it. You may not misrepresent yourself as the author of this code.
- * =================================================================================================
- * "It's kinda hard to read, though"
- *
- * The uncompressed, commented version of this script can be found at:
- * http://youngpup.net/projects/transMenus
- * ============================================================================================== */
-TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;}
-else r=true;}}
-return r;}
-TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}}
-TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();}
-document.write(aMenuHtml.join(""));}
-function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;}
-function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;}
-function initialize(){initCache();initEvents();initSize();ready=true;}
-function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}}
-function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}}
-function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;}
-if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);}
-switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;}
-x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";}
-function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();}
-function slideFrame(x){elmCache["content"].style[pos]=x+"px";}
-function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;}
-function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;}
-else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}}
-function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}}
-_this.elmCache=elmCache;}
-function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;}
-if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;}
-elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;}
-function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;}
-function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;}
-function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}}
-function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}}
-function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}}
-function actuator_mouseover(){parentMenuSet.showMenu(_this);}
-function actuator_mouseout(){parentMenuSet.hideMenu(_this);}
-function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}}
-function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}}
-function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}}
-function child_deactivate(){for(var i=0;i<childMenus.length;i++){if(childMenus[i]==this){dehighlight(elmCache["item"][i]);break;}}}
-function child_queue(){parentMenuSet.hideMenu(_this);}
-function child_dequeue(){parentMenuSet.showMenu(_this);}
-function toString(){var aHtml=[];var sClassName="transMenu"+(oActuator.constructor!=TransMenuItem?" top":"");for(var i=0,item=null;item=this.items[i];i++){aHtml[i]=item.toString(childMenus[i]);}
-return'<div id="'+id+'" class="'+sClassName+'">'+'<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">'+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr>'+aHtml.join('')+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr></table>'+'<div class="shadowBottom"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="shadowRight"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="background"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'</div></div>';}}
-TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;}
-function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();}
-else{cancelHide(oMenu);}}
-function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}}
-function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);}
-function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}}
-function hide(oMenu){if(!oMenu&&current)oMenu=current;if(oMenu&&current==oMenu&&oMenu.isOpen){hideCurrent();}}
-function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}}
-function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;"
-var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;"
-return'<tr class="item"><td nowrap style="'+sPaddingLeft+'">'+sText+'</td><td width="14" style="'+sPaddingRight+'">'+'<img src="'+sDingbat+'" width="14" height="14"></td></tr>';}}
-function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();}
-Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);}
-Accelimation.prototype.stop=function(){Accelimation._remove(this);}
-Accelimation.prototype._paint=function(time){if(time<this.t1){var elapsed=time-this.t0;this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));}
-else this._end();}
-Accelimation.prototype._end=function(){Accelimation._remove(this);this.onframe(this.x1);this.onend();}
-Accelimation._add=function(o){var index=this.instances.length;this.instances[index]=o;if(this.instances.length==1){this.timerID=window.setInterval("Accelimation._paintAll()",this.targetRes);}}
-Accelimation._remove=function(o){for(var i=0;i<this.instances.length;i++){if(o==this.instances[i]){this.instances=this.instances.slice(0,i).concat(this.instances.slice(i+1));break;}}
-if(this.instances.length==0){window.clearInterval(this.timerID);this.timerID=null;}}
-Accelimation._paintAll=function(){var now=new Date().getTime();for(var i=0;i<this.instances.length;i++){this.instances[i]._paint(now);}}
-Accelimation._B1=function(t){return t*t*t}
-Accelimation._B2=function(t){return 3*t*t*(1-t)}
-Accelimation._B3=function(t){return 3*t*(1-t)*(1-t)}
-Accelimation._B4=function(t){return(1-t)*(1-t)*(1-t)}
-Accelimation._getBezier=function(percent,startPos,endPos,control1,control2){return endPos*this._B1(percent)+control2*this._B2(percent)+control1*this._B3(percent)+startPos*this._B4(percent);}
-Accelimation.instances=[];Accelimation.targetRes=10;Accelimation.timerID=null;
-if(window.attachEvent){var cearElementProps=['data','onmouseover','onmouseout','onmousedown','onmouseup','ondblclick','onclick','onselectstart','oncontextmenu'];window.attachEvent("onunload", function() {var el;for(var d=document.all.length;d--;){el=document.all[d];for(var c=cearElementProps.length;c--;){el[cearElementProps[c]] = null;}}});} \ No newline at end of file
diff --git a/usr/local/www/themes/code-red/jsevents/body.def b/usr/local/www/themes/code-red/jsevents/body.def
deleted file mode 100755
index 501d548..0000000
--- a/usr/local/www/themes/code-red/jsevents/body.def
+++ /dev/null
@@ -1,7 +0,0 @@
-# Format: <event_name>=<jsfunction_name> !<forbidden_page_0>,<forbidden_page_1>...<forbidden_page_n>
-# where: forbidden pages are those pages that should *not* use
-# the particular JavaScript function within the JS event
-# specified below.
-# $Id$
-#
-onload=tmenuinit(); !wizard.php \ No newline at end of file
diff --git a/usr/local/www/themes/code-red/loader.js b/usr/local/www/themes/code-red/loader.js
deleted file mode 100644
index 7f67dc0..0000000
--- a/usr/local/www/themes/code-red/loader.js
+++ /dev/null
@@ -1,29 +0,0 @@
-//<![CDATA[
-var browser = '';
-var version = '';
-var entrance = '';
-var cond = '';
-
-// BROWSER?
-if (browser == '') {
- if (navigator.appName.indexOf('Microsoft') != -1)
- browser = 'IE';
- else if (navigator.appName.indexOf('Netscape') != -1)
- browser = 'Netscape';
- else
- browser = 'IE';
-}
-if (version == '') {
- version= navigator.appVersion;
- paren = version.indexOf('(');
- whole_version = navigator.appVersion.substring(0,paren-1);
- version = parseInt(whole_version);
-}
-
-if (browser == 'IE' && version < 7) {
- document.write('<script type="text/javascript" src="/themes/code-red/javascript/ie7/ie7-standard-p.js"></script>');
-}
-
-document.write('<script type="text/javascript" src="/themes/code-red/javascript/niftyjsCode.js"></script>');
-
-//]]>
diff --git a/usr/local/www/themes/code-red/login.css b/usr/local/www/themes/code-red/login.css
deleted file mode 100755
index 6ccdd42..0000000
--- a/usr/local/www/themes/code-red/login.css
+++ /dev/null
@@ -1,1136 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-/* please adjust the bgcolor to be used together with niftycorners! */
-.rtop, .artop {
- background-color: #999999;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 9px;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- background: url('images/logon-background.gif') no-repeat;
- background-position : center 0px;
- background-color: #4a0203;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
- font-size: 14px;
- color: #cccccc;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- /* background: url('images/menu.gif') no-repeat; */
- /* width: 693px; */
- position: relative;
- top: -25px;
- left: 3px;
- width: 810px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- /* width: 7.5em; */
- width: 8.77em;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #990000;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background-color: #666666;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 10px;
- padding-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 10;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-
-#graph {
- position: relative;
- z-index: 10;
-}
-
-
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 8px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-
-#login {
-/* background: #cccccc; */
- background-color: transparent;
- border: 0px solid #cccccc;
- margin: 5em auto;
- padding: 0em;
- width: 400px;
-/* filter:alpha(opacity=60);
- -moz-opacity:0.6;
- -khtml-opacity: 0.6;
- opacity: 0.6; */
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
-/* background: #ffffff; */
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 400px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: -40px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -390px;
- left: 60px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- top: -300px; */
-}
-
-#login #username, #password {
- font-size: 1em;
- width: 60%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- left: 10px;
- top: -300px; */
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- text-align: center;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -20px;
- left: 170px;
-}
-
-/* loginerror box follows */
-
-#login #inputerrors {
- background-color: transparent;
- border: 0px solid #666666;
- margin: 5em auto;
- vertical-align: middle;
- padding: 0em;
- width: 330px;
- height: 50px;
- position: relative;
- top: -112px;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/code-red/menu.inc b/usr/local/www/themes/code-red/menu.inc
deleted file mode 100755
index a274410..0000000
--- a/usr/local/www/themes/code-red/menu.inc
+++ /dev/null
@@ -1,177 +0,0 @@
-<?php
-/* $Id$ */
-/* ========================================================================== */
-/*
- menu.inc
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-require("menu.inc");
-
-define("TMENU_STUB", "
- // set up drop downs anywhere in the body of the page. I think the bottom of the page is better..
- // but you can experiment with effect on loadtime.
- if (TransMenu.isSupported()) {
-
- //==================================================================================================
- // create a set of dropdowns
- //==================================================================================================
- // the first param should always be down, as it is here
- //
- // The second and third param are the top and left offset positions of the menus from their actuators
- // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use
- // something like -5, 5
- //
- // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner
- // of the actuator from which to measure the offset positions above. Here we are saying we want the
- // menu to appear directly below the bottom left corner of the actuator
- //==================================================================================================
- var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft);
-
- //==================================================================================================
- // create a dropdown menu
- //==================================================================================================
- // the first parameter should be the HTML element which will act actuator for the menu
- //==================================================================================================
-
- @@MENU_DEFINITIONS@@
-
- //==================================================================================================
- // write drop downs into page
- //==================================================================================================
- // this method writes all the HTML for the menus into the page with document.write(). It must be
- // called within the body of the HTML page.
- //==================================================================================================
- TransMenu.renderAll();
- }
-");
-
-class NervecenterMenu extends Menu {
- private $menuJScript = "NOT-SET";
- private $menuJScriptEvents = "NOT-SET";
- private $menuID = "NOT-SET";
-
- public function __construct($identification = "", $filename = "", Component $c = NULL) {
- parent::__construct($identification, $filename, $c);
-
- $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
- $this->menuID = $id;
-
- if ($this->hasParent()) {
- $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n";
- }
- } // end __construct
-
- public function getMenuID() {
- return $this->menuID;
- }
-
- public function setMenuID($myMenuID) {
- $this->menuID = $myMenuID;
- }
-
- public function getMenuJScript() {
- $childJScript = "";
- foreach ($this->getChildren() as $component) {
- $childJScript .= $component->getMenuJScript();
- }
-
- if (! $this->hasParent()) {
- $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB);
- } else {
- $this->menuJScript .= "\n$childJScript\n";
- }
-
- return $this->menuJScript;
- }
-
- public function getMenuJScriptEvents() {
- return $this->menuJScriptEvents;
- }
-
- public function __toString() {
- if (! $this->hasParent()) {
- $menuMarkup =<<<EOD
- <div id="menu">
- @@CHILD_ELEMENTS@@
- </div>
-
-EOD;
- } else {
- $name = gettext($this->getID());
- $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
-
- $menuMarkup =<<<EOD
- <a id="{$id}" href="#">{$name}</a>
- @@CHILD_ELEMENTS@@
-EOD;
- }
-
- $childMarkup = "";
- foreach ($this->getChildren() as $component) {
- $childMarkup .= $component;
- }
-
- $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup);
-
- return $menuMarkup;
- }
-}
-
-class NervecenterMenuItem extends MenuItem {
- private $menuJScript = "NOT-SET";
- private $menuJScriptEvents = "NOT-SET";
-
- public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) {
- parent::__construct($identification, $filename, $href, $c);
-
- $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}";
- $name = gettext($this->getID());
- $file = $this->getFile();
-
- $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n");
- }
-
- public function getMenuJScript() {
- return $this->menuJScript;
- }
-
- public function getMenuJScriptEvents() {
- return $this->menuJScriptEvents;
- }
-
- public function __toString() {
- return "";
- }
-}
-
-?>
diff --git a/usr/local/www/themes/code-red/new_tab_menu.css b/usr/local/www/themes/code-red/new_tab_menu.css
deleted file mode 100644
index 04c4cf2..0000000
--- a/usr/local/www/themes/code-red/new_tab_menu.css
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- new_tab_menu.css
- part of pfSense
- Copyright (C) 2010-2011 Robert Zelaya
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-
- Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
- The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
-
- <tr>
- <td>
- <?php
- $tab_array_indent = 0; // move to the line in px
- $tab_array_space = 1; // space betwen lines in px
- $tab_array_char_limit = 82; // number or chr before the drop down box
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
-
-*/
-
-.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
-
-.newtabmenu li{float:left; margin-right:2px; text-align: center;}
-.newtabmenu a:link, .newtabmenu a:visited{
- background:url(images/new_tab_menu.png) right 45px;
- color:#ffffff; /* noactive font */
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- font-weight:bold;
- font-size:.9em;
- height:20px;
- line-height:20px;
- text-decoration:none;
-}
-.newtabmenu a span{
- background:url(images/new_tab_menu.png) left 45px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- height:20px;
- margin-right:7px;
- padding-left:7px;
-}
-.newtabmenu a:hover{
- background:url(images/new_tab_menu.png) right 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- color:#ffffff; /* hover over font */
-}
-.newtabmenu a:hover span{
- background:url(images/new_tab_menu.png) left 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
-}
-
-/* -------------------------------- */
-/* ACTIVE ELEMENTS */
-.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
- color:#000000; /* active font */
- background:url(images/new_tab_menu.png) right 0 no-repeat;
-}
-.newtabmenu_active a span, .newtabmenu_active a:hover span{
- background:url(images/new_tab_menu.png) left 0 no-repeat;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/code-red/no_big_logo b/usr/local/www/themes/code-red/no_big_logo
deleted file mode 100755
index 6e5c70d..0000000
--- a/usr/local/www/themes/code-red/no_big_logo
+++ /dev/null
@@ -1 +0,0 @@
-NO! DONT! \ No newline at end of file
diff --git a/usr/local/www/themes/code-red/rrdcolors.inc.php b/usr/local/www/themes/code-red/rrdcolors.inc.php
deleted file mode 100755
index dcb7a39..0000000
--- a/usr/local/www/themes/code-red/rrdcolors.inc.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/* $Id$ */
-/*
- rrdcolors.inc.php
- Part of pfSense
- Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/* This file is included by the RRD graphing page and sets the colors */
-
-/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* 95th Percentile Lines Out, In */
-$colortraffic95 = array('660000', 'FF0000');
-
-/* State Table pfrate, pfstates, pfnat, srcip, dstip */
-$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
-
-/* Processor Usage user, nice, system, int, processes */
-$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
-
-/* Memory Usage active, inact, free, cache, wire */
-$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
-
-/* MBUF Usage current, cache, total, max */
-$colormbuf = array('0080FF','00E344','FF0000','000000');
-
-/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
-$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
-$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
-/* Quality Graph Loss */
-$colorqualityloss = 'ee0000';
-
-/* Wireless Graph SNR, Rate, Channel*/
-/* Cellular Graph RSSI, */
-$colorwireless = array('333333','a83c3c','999999');
-
-/* SPAMD Times min area, avg area, max area, Time line */
-$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
-/* SPAMD Connections max area, min area, min line, max line, avg line */
-$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
-
-/* OpenVPN Users Online Users */
-$colorvpnusers = array('990000');
-
-/* Captive Portal Total Users Total Users */
-/* Captive Portal Concurrent Concurrent Users */
-$colorcaptiveportalusers = array('990000');
-
-?>
diff --git a/usr/local/www/themes/code-red/styles/jquery-ui-1.11.1.css b/usr/local/www/themes/code-red/styles/jquery-ui-1.11.1.css
deleted file mode 100644
index 8a8c54f..0000000
--- a/usr/local/www/themes/code-red/styles/jquery-ui-1.11.1.css
+++ /dev/null
@@ -1,1226 +0,0 @@
-/*! jQuery UI - v1.11.1 - 2014-09-22
-* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden {
- display: none;
-}
-.ui-helper-hidden-accessible {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
-}
-.ui-helper-reset {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- line-height: 1.3;
- text-decoration: none;
- font-size: 100%;
- list-style: none;
-}
-.ui-helper-clearfix:before,
-.ui-helper-clearfix:after {
- content: "";
- display: table;
- border-collapse: collapse;
-}
-.ui-helper-clearfix:after {
- clear: both;
-}
-.ui-helper-clearfix {
- min-height: 0; /* support: IE7 */
-}
-.ui-helper-zfix {
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- position: absolute;
- opacity: 0;
- filter:Alpha(Opacity=0); /* support: IE8 */
-}
-
-.ui-front {
- z-index: 100;
-}
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled {
- cursor: default !important;
-}
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- display: block;
- text-indent: -99999px;
- overflow: hidden;
- background-repeat: no-repeat;
-}
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-.ui-draggable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable {
- position: relative;
-}
-.ui-resizable-handle {
- position: absolute;
- font-size: 0.1px;
- display: block;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
- display: none;
-}
-.ui-resizable-n {
- cursor: n-resize;
- height: 7px;
- width: 100%;
- top: -5px;
- left: 0;
-}
-.ui-resizable-s {
- cursor: s-resize;
- height: 7px;
- width: 100%;
- bottom: -5px;
- left: 0;
-}
-.ui-resizable-e {
- cursor: e-resize;
- width: 7px;
- right: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-w {
- cursor: w-resize;
- width: 7px;
- left: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-se {
- cursor: se-resize;
- width: 12px;
- height: 12px;
- right: 1px;
- bottom: 1px;
-}
-.ui-resizable-sw {
- cursor: sw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- bottom: -5px;
-}
-.ui-resizable-nw {
- cursor: nw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- top: -5px;
-}
-.ui-resizable-ne {
- cursor: ne-resize;
- width: 9px;
- height: 9px;
- right: -5px;
- top: -5px;
-}
-.ui-selectable {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-selectable-helper {
- position: absolute;
- z-index: 100;
- border: 1px dotted black;
-}
-.ui-sortable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-accordion .ui-accordion-header {
- display: block;
- cursor: pointer;
- position: relative;
- margin: 2px 0 0 0;
- padding: .5em .5em .5em .7em;
- min-height: 0; /* support: IE7 */
- font-size: 100%;
-}
-.ui-accordion .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
- position: absolute;
- left: .5em;
- top: 50%;
- margin-top: -8px;
-}
-.ui-accordion .ui-accordion-content {
- padding: 1em 2.2em;
- border-top: 0;
- overflow: auto;
-}
-.ui-autocomplete {
- position: absolute;
- top: 0;
- left: 0;
- cursor: default;
-}
-.ui-button {
- display: inline-block;
- position: relative;
- padding: 0;
- line-height: normal;
- margin-right: .1em;
- cursor: pointer;
- vertical-align: middle;
- text-align: center;
- overflow: visible; /* removes extra width in IE */
-}
-.ui-button,
-.ui-button:link,
-.ui-button:visited,
-.ui-button:hover,
-.ui-button:active {
- text-decoration: none;
-}
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
- width: 2.2em;
-}
-/* button elements seem to need a little more width */
-button.ui-button-icon-only {
- width: 2.4em;
-}
-.ui-button-icons-only {
- width: 3.4em;
-}
-button.ui-button-icons-only {
- width: 3.7em;
-}
-
-/* button text element */
-.ui-button .ui-button-text {
- display: block;
- line-height: normal;
-}
-.ui-button-text-only .ui-button-text {
- padding: .4em 1em;
-}
-.ui-button-icon-only .ui-button-text,
-.ui-button-icons-only .ui-button-text {
- padding: .4em;
- text-indent: -9999999px;
-}
-.ui-button-text-icon-primary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 1em .4em 2.1em;
-}
-.ui-button-text-icon-secondary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 2.1em .4em 1em;
-}
-.ui-button-text-icons .ui-button-text {
- padding-left: 2.1em;
- padding-right: 2.1em;
-}
-/* no icon support for input elements, provide padding by default */
-input.ui-button {
- padding: .4em 1em;
-}
-
-/* button icon element(s) */
-.ui-button-icon-only .ui-icon,
-.ui-button-text-icon-primary .ui-icon,
-.ui-button-text-icon-secondary .ui-icon,
-.ui-button-text-icons .ui-icon,
-.ui-button-icons-only .ui-icon {
- position: absolute;
- top: 50%;
- margin-top: -8px;
-}
-.ui-button-icon-only .ui-icon {
- left: 50%;
- margin-left: -8px;
-}
-.ui-button-text-icon-primary .ui-button-icon-primary,
-.ui-button-text-icons .ui-button-icon-primary,
-.ui-button-icons-only .ui-button-icon-primary {
- left: .5em;
-}
-.ui-button-text-icon-secondary .ui-button-icon-secondary,
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
- right: .5em;
-}
-
-/* button sets */
-.ui-buttonset {
- margin-right: 7px;
-}
-.ui-buttonset .ui-button {
- margin-left: 0;
- margin-right: -.3em;
-}
-
-/* workarounds */
-/* reset extra padding in Firefox, see h5bp.com/l */
-input.ui-button::-moz-focus-inner,
-button.ui-button::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-.ui-datepicker {
- width: 17em;
- padding: .2em .2em 0;
- display: none;
-}
-.ui-datepicker .ui-datepicker-header {
- position: relative;
- padding: .2em 0;
-}
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-next {
- position: absolute;
- top: 2px;
- width: 1.8em;
- height: 1.8em;
-}
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
- top: 1px;
-}
-.ui-datepicker .ui-datepicker-prev {
- left: 2px;
-}
-.ui-datepicker .ui-datepicker-next {
- right: 2px;
-}
-.ui-datepicker .ui-datepicker-prev-hover {
- left: 1px;
-}
-.ui-datepicker .ui-datepicker-next-hover {
- right: 1px;
-}
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
- display: block;
- position: absolute;
- left: 50%;
- margin-left: -8px;
- top: 50%;
- margin-top: -8px;
-}
-.ui-datepicker .ui-datepicker-title {
- margin: 0 2.3em;
- line-height: 1.8em;
- text-align: center;
-}
-.ui-datepicker .ui-datepicker-title select {
- font-size: 1em;
- margin: 1px 0;
-}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year {
- width: 45%;
-}
-.ui-datepicker table {
- width: 100%;
- font-size: .9em;
- border-collapse: collapse;
- margin: 0 0 .4em;
-}
-.ui-datepicker th {
- padding: .7em .3em;
- text-align: center;
- font-weight: bold;
- border: 0;
-}
-.ui-datepicker td {
- border: 0;
- padding: 1px;
-}
-.ui-datepicker td span,
-.ui-datepicker td a {
- display: block;
- padding: .2em;
- text-align: right;
- text-decoration: none;
-}
-.ui-datepicker .ui-datepicker-buttonpane {
- background-image: none;
- margin: .7em 0 0 0;
- padding: 0 .2em;
- border-left: 0;
- border-right: 0;
- border-bottom: 0;
-}
-.ui-datepicker .ui-datepicker-buttonpane button {
- float: right;
- margin: .5em .2em .4em;
- cursor: pointer;
- padding: .2em .6em .3em .6em;
- width: auto;
- overflow: visible;
-}
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
- float: left;
-}
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi {
- width: auto;
-}
-.ui-datepicker-multi .ui-datepicker-group {
- float: left;
-}
-.ui-datepicker-multi .ui-datepicker-group table {
- width: 95%;
- margin: 0 auto .4em;
-}
-.ui-datepicker-multi-2 .ui-datepicker-group {
- width: 50%;
-}
-.ui-datepicker-multi-3 .ui-datepicker-group {
- width: 33.3%;
-}
-.ui-datepicker-multi-4 .ui-datepicker-group {
- width: 25%;
-}
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
- border-left-width: 0;
-}
-.ui-datepicker-multi .ui-datepicker-buttonpane {
- clear: left;
-}
-.ui-datepicker-row-break {
- clear: both;
- width: 100%;
- font-size: 0;
-}
-
-/* RTL support */
-.ui-datepicker-rtl {
- direction: rtl;
-}
-.ui-datepicker-rtl .ui-datepicker-prev {
- right: 2px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next {
- left: 2px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
- right: 1px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
- left: 1px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
- clear: right;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
- float: left;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
-.ui-datepicker-rtl .ui-datepicker-group {
- float: right;
-}
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
- border-right-width: 0;
- border-left-width: 1px;
-}
-.ui-dialog {
- overflow: hidden;
- position: absolute;
- top: 0;
- left: 0;
- padding: .2em;
- outline: 0;
-}
-.ui-dialog .ui-dialog-titlebar {
- padding: .4em 1em;
- position: relative;
-}
-.ui-dialog .ui-dialog-title {
- float: left;
- margin: .1em 0;
- white-space: nowrap;
- width: 90%;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.ui-dialog .ui-dialog-titlebar-close {
- position: absolute;
- right: .3em;
- top: 50%;
- width: 20px;
- margin: -10px 0 0 0;
- padding: 1px;
- height: 20px;
-}
-.ui-dialog .ui-dialog-content {
- position: relative;
- border: 0;
- padding: .5em 1em;
- background: none;
- overflow: auto;
-}
-.ui-dialog .ui-dialog-buttonpane {
- text-align: left;
- border-width: 1px 0 0 0;
- background-image: none;
- margin-top: .5em;
- padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
- float: right;
-}
-.ui-dialog .ui-dialog-buttonpane button {
- margin: .5em .4em .5em 0;
- cursor: pointer;
-}
-.ui-dialog .ui-resizable-se {
- width: 12px;
- height: 12px;
- right: -5px;
- bottom: -5px;
- background-position: 16px 16px;
-}
-.ui-draggable .ui-dialog-titlebar {
- cursor: move;
-}
-.ui-menu {
- list-style: none;
- padding: 0;
- margin: 0;
- display: block;
- outline: none;
-}
-.ui-menu .ui-menu {
- position: absolute;
-}
-.ui-menu .ui-menu-item {
- position: relative;
- margin: 0;
- padding: 3px 1em 3px .4em;
- cursor: pointer;
- min-height: 0; /* support: IE7 */
- /* support: IE10, see #8844 */
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
-}
-.ui-menu .ui-menu-divider {
- margin: 5px 0;
- height: 0;
- font-size: 0;
- line-height: 0;
- border-width: 1px 0 0 0;
-}
-.ui-menu .ui-state-focus,
-.ui-menu .ui-state-active {
- margin: -1px;
-}
-
-/* icon support */
-.ui-menu-icons {
- position: relative;
-}
-.ui-menu-icons .ui-menu-item {
- padding-left: 2em;
-}
-
-/* left-aligned */
-.ui-menu .ui-icon {
- position: absolute;
- top: 0;
- bottom: 0;
- left: .2em;
- margin: auto 0;
-}
-
-/* right-aligned */
-.ui-menu .ui-menu-icon {
- left: auto;
- right: 0;
-}
-.ui-progressbar {
- height: 1em;
- text-align: left;
- overflow: hidden;
-}
-.ui-progressbar .ui-progressbar-value {
- margin: -1px;
- height: 100%;
- background-color: #990000;
-}
-.ui-progressbar .ui-progressbar-overlay {
- background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
- height: 100%;
- filter: alpha(opacity=25); /* support: IE8 */
- opacity: 0.25;
-}
-.ui-progressbar-indeterminate .ui-progressbar-value {
- background-image: none;
-}
-.ui-selectmenu-menu {
- padding: 0;
- margin: 0;
- position: absolute;
- top: 0;
- left: 0;
- display: none;
-}
-.ui-selectmenu-menu .ui-menu {
- overflow: auto;
- /* Support: IE7 */
- overflow-x: hidden;
- padding-bottom: 1px;
-}
-.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
- font-size: 1em;
- font-weight: bold;
- line-height: 1.5;
- padding: 2px 0.4em;
- margin: 0.5em 0 0 0;
- height: auto;
- border: 0;
-}
-.ui-selectmenu-open {
- display: block;
-}
-.ui-selectmenu-button {
- display: inline-block;
- overflow: hidden;
- position: relative;
- text-decoration: none;
- cursor: pointer;
-}
-.ui-selectmenu-button span.ui-icon {
- right: 0.5em;
- left: auto;
- margin-top: -8px;
- position: absolute;
- top: 50%;
-}
-.ui-selectmenu-button span.ui-selectmenu-text {
- text-align: left;
- padding: 0.4em 2.1em 0.4em 1em;
- display: block;
- line-height: 1.4;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.ui-slider {
- position: relative;
- text-align: left;
-}
-.ui-slider .ui-slider-handle {
- position: absolute;
- z-index: 2;
- width: 1.2em;
- height: 1.2em;
- cursor: default;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-slider .ui-slider-range {
- position: absolute;
- z-index: 1;
- font-size: .7em;
- display: block;
- border: 0;
- background-position: 0 0;
-}
-
-/* support: IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
- filter: inherit;
-}
-
-.ui-slider-horizontal {
- height: .8em;
-}
-.ui-slider-horizontal .ui-slider-handle {
- top: -.3em;
- margin-left: -.6em;
-}
-.ui-slider-horizontal .ui-slider-range {
- top: 0;
- height: 100%;
-}
-.ui-slider-horizontal .ui-slider-range-min {
- left: 0;
-}
-.ui-slider-horizontal .ui-slider-range-max {
- right: 0;
-}
-
-.ui-slider-vertical {
- width: .8em;
- height: 100px;
-}
-.ui-slider-vertical .ui-slider-handle {
- left: -.3em;
- margin-left: 0;
- margin-bottom: -.6em;
-}
-.ui-slider-vertical .ui-slider-range {
- left: 0;
- width: 100%;
-}
-.ui-slider-vertical .ui-slider-range-min {
- bottom: 0;
-}
-.ui-slider-vertical .ui-slider-range-max {
- top: 0;
-}
-.ui-spinner {
- position: relative;
- display: inline-block;
- overflow: hidden;
- padding: 0;
- vertical-align: middle;
-}
-.ui-spinner-input {
- border: none;
- background: none;
- color: inherit;
- padding: 0;
- margin: .2em 0;
- vertical-align: middle;
- margin-left: .4em;
- margin-right: 22px;
-}
-.ui-spinner-button {
- width: 16px;
- height: 50%;
- font-size: .5em;
- padding: 0;
- margin: 0;
- text-align: center;
- position: absolute;
- cursor: default;
- display: block;
- overflow: hidden;
- right: 0;
-}
-/* more specificity required here to override default borders */
-.ui-spinner a.ui-spinner-button {
- border-top: none;
- border-bottom: none;
- border-right: none;
-}
-/* vertically center icon */
-.ui-spinner .ui-icon {
- position: absolute;
- margin-top: -8px;
- top: 50%;
- left: 0;
-}
-.ui-spinner-up {
- top: 0;
-}
-.ui-spinner-down {
- bottom: 0;
-}
-
-/* TR overrides */
-.ui-spinner .ui-icon-triangle-1-s {
- /* need to fix icons sprite */
- background-position: -65px -16px;
-}
-.ui-tabs {
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
- padding: .2em;
-}
-.ui-tabs .ui-tabs-nav {
- margin: 0;
- padding: .2em .2em 0;
-}
-.ui-tabs .ui-tabs-nav li {
- list-style: none;
- float: left;
- position: relative;
- top: 0;
- margin: 1px .2em 0 0;
- border-bottom-width: 0;
- padding: 0;
- white-space: nowrap;
-}
-.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
- float: left;
- padding: .5em 1em;
- text-decoration: none;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
- margin-bottom: -1px;
- padding-bottom: 1px;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
- cursor: text;
-}
-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
- cursor: pointer;
-}
-.ui-tabs .ui-tabs-panel {
- display: block;
- border-width: 0;
- padding: 1em 1.4em;
- background: none;
-}
-.ui-tooltip {
- padding: 8px;
- position: absolute;
- z-index: 9999;
- max-width: 300px;
- -webkit-box-shadow: 0 0 5px #aaa;
- box-shadow: 0 0 5px #aaa;
-}
-body .ui-tooltip {
- border-width: 2px;
-}
-
-/* Component containers
-----------------------------------*/
-.ui-widget {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1.1em;
-}
-.ui-widget .ui-widget {
- font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1em;
-}
-.ui-widget-content {
- border: 1px solid #aaaaaa;
- background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
- color: #333333;
-}
-.ui-widget-content a {
- color: #333333;
-}
-.ui-widget-header {
- border: 1px solid #bbbbbb;
- /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
- color: #444444;
- font-weight: bold;
-}
-.ui-widget-header a {
- color: #444444;
-}
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default {
- border: 1px solid #cccccc;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #3383bb;
-}
-.ui-state-default a,
-.ui-state-default a:link,
-.ui-state-default a:visited {
- color: #3383bb;
- text-decoration: none;
-}
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus {
- border: 1px solid #bbbbbb;
- background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #599fcf;
-}
-.ui-state-hover a,
-.ui-state-hover a:hover,
-.ui-state-hover a:link,
-.ui-state-hover a:visited,
-.ui-state-focus a,
-.ui-state-focus a:hover,
-.ui-state-focus a:link,
-.ui-state-focus a:visited {
- color: #599fcf;
- text-decoration: none;
-}
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active {
- border: 1px solid #999999;
- background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #ffffff;
-}
-.ui-state-active a,
-.ui-state-active a:link,
-.ui-state-active a:visited {
- color: #ffffff;
- text-decoration: none;
-}
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight,
-.ui-widget-header .ui-state-highlight {
- border: 1px solid #ffffff;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
- color: #444444;
-}
-.ui-state-highlight a,
-.ui-widget-content .ui-state-highlight a,
-.ui-widget-header .ui-state-highlight a {
- color: #444444;
-}
-.ui-state-error,
-.ui-widget-content .ui-state-error,
-.ui-widget-header .ui-state-error {
- border: 1px solid #c0402a;
- background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
- color: #ffffff;
-}
-.ui-state-error a,
-.ui-widget-content .ui-state-error a,
-.ui-widget-header .ui-state-error a {
- color: #ffffff;
-}
-.ui-state-error-text,
-.ui-widget-content .ui-state-error-text,
-.ui-widget-header .ui-state-error-text {
- color: #ffffff;
-}
-.ui-priority-primary,
-.ui-widget-content .ui-priority-primary,
-.ui-widget-header .ui-priority-primary {
- font-weight: bold;
-}
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary,
-.ui-widget-header .ui-priority-secondary {
- opacity: .7;
- filter:Alpha(Opacity=70); /* support: IE8 */
- font-weight: normal;
-}
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled,
-.ui-widget-header .ui-state-disabled {
- opacity: .35;
- filter:Alpha(Opacity=35); /* support: IE8 */
- background-image: none;
-}
-.ui-state-disabled .ui-icon {
- filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
-}
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- width: 16px;
- height: 16px;
-}
-.ui-icon,
-.ui-widget-content .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-widget-header .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-state-default .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
-}
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-active .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
-}
-.ui-state-highlight .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
-}
-
-/* positioning */
-.ui-icon-blank { background-position: 16px 16px; }
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-on { background-position: -96px -144px; }
-.ui-icon-radio-off { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
- border-top-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
- border-top-right-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
- border-bottom-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
- border-bottom-right-radius: 6px;
-}
-
-/* Overlays */
-.ui-widget-overlay {
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
- opacity: .8;
- filter: Alpha(Opacity=80); /* support: IE8 */
-}
-.ui-widget-shadow {
- margin: -4px 0 0 -4px;
- padding: 4px;
- background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
- opacity: .6;
- filter: Alpha(Opacity=60); /* support: IE8 */
- border-radius: 0pxdow;
-}
diff --git a/usr/local/www/themes/code-red/styles/menustyles.css b/usr/local/www/themes/code-red/styles/menustyles.css
deleted file mode 100755
index 06b3c7a..0000000
--- a/usr/local/www/themes/code-red/styles/menustyles.css
+++ /dev/null
@@ -1,44 +0,0 @@
-#navigation {
- /* border:1px solid black; */
- width: 98%;
- vertical-align: middle;
- height: 16px;
- padding-top: 4px;
- }
-
-#menu {
- /* background: #990000; */
- /* border-bottom:1px solid white; */
- padding: 0 0 0 0;
- width: 98%;
- vertical-align: middle;
- height: 16px;
- }
-#menu a {
- padding: 2px 28px 4px 28px;
- text-decoration: none;
- font-weight: bold;
- font-size: 1.0em;
- color: #FFFFFF;
- width: 08%;
- height: 16px;
- }
-#menu a.hover {
- background: #AF2020;
- }
-#menu span {
- display: none;
- }
-
-#subnav {
- font-size: 10px;
- margin-bottom: 2em;
- }
-#subnav a {
- color: #FF0000; /* #FB3B00; */
- margin-right: 1em;
- }
-#subnav span {
- color: silver;
- margin-right: 1em;
- }
diff --git a/usr/local/www/themes/code-red/styles/transmenu.css b/usr/local/www/themes/code-red/styles/transmenu.css
deleted file mode 100755
index f683574..0000000
--- a/usr/local/www/themes/code-red/styles/transmenu.css
+++ /dev/null
@@ -1,75 +0,0 @@
-/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */
-.transMenu {
- position:absolute;
- overflow:hidden;
- left:-1000px;
- top:-1000px;
- }
-
-/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */
-.transMenu .content {
- position:absolute;
- }
-
-/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */
-.transMenu .items {
- position:relative;
- left:0px; top:0px;
- z-index:2;
- }
-
-.transMenu.top .items {
- border-top:none;
- }
-
-/* each TR.item is one menu item */
-.transMenu .item {
- color: #FFFFFF; /* #336; */
- font-size: 1.1em;
- font-weight: normal;
- font-family:sans-serif;
- text-decoration:none;
- /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */
- border:none;
- cursor:pointer;
- cursor:hand;
- }
-
-/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */
-/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */
-.transMenu .background {
- position:absolute;
- left:0px; top:0px;
- z-index:1;
- -moz-opacity:.8;
- filter:alpha(opacity=80);
- }
-
-/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */
-.transMenu .shadowRight {
- position:absolute;
- z-index:3;
- top:3px; width:2px;
- -moz-opacity:.4;
- filter:alpha(opacity=40);
- }
-
-/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */
-.transMenu .shadowBottom {
- position:absolute;
- z-index:1;
- left:3px; height:2px;
- -moz-opacity:.4;
- filter:alpha(opacity=40);
- }
-
-/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */
-.transMenu .item.hover {
- background:#fdfdfd;
- color:black;
- }
-
-/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */
-.transMenu .item img {
- margin-left:10px;
- } \ No newline at end of file
diff --git a/usr/local/www/themes/code-red/wizard.css b/usr/local/www/themes/code-red/wizard.css
deleted file mode 100755
index c0a7546..0000000
--- a/usr/local/www/themes/code-red/wizard.css
+++ /dev/null
@@ -1,1068 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-
-}
-
-.nowrap { white-space: nowrap; }
-
-/* please adjust the bgcolor to be used together with niftycorners! */
-.rtop, .artop {
- background-color: #5f0406;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 9px;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- background: url('images/logon-background.gif') no-repeat;
- background-position : center 0px;
- background-color: #4a0203;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
- font-size: 14px;
- color: #cccccc;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- /* background: url('images/menu.gif') no-repeat; */
- /* width: 693px; */
- position: relative;
- top: -25px;
- left: 3px;
- width: 810px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- /* width: 7.5em; */
- width: 8.77em;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #990000;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background-color: #666666;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 10px;
- padding-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 10;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-
-#graph {
- position: relative;
- z-index: 10;
-}
-
-
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 8px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-#login {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 340px;
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 50px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login #username, #password {
- font-size: 1em;
- width: 60%;
- padding: 3px;
- margin: 0em;
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
diff --git a/usr/local/www/themes/metallic/all.css b/usr/local/www/themes/metallic/all.css
deleted file mode 100644
index 18a8c0b..0000000
--- a/usr/local/www/themes/metallic/all.css
+++ /dev/null
@@ -1,1269 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, sans-serif;
- font-size: 0.9em;
-}
-
-.nowrap { white-space: nowrap; }
-
-.infobox {
- width:100%;
-}
-
-.addgatewaybox {
- background-color: #990000;
- border-style: none none none none;
- width: 225px;
-}
-
-.infoboxsave {
- padding-right: 10px;
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-.inputerrorsleft {
- background-color: #990000;
- width: 36px;
-}
-
-.inputerrorsright {
- background-color: #FFD9D1;
- color: #000000;
- font-size: 11px;
- padding-left: 8px;
- padding-top: 6px;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 220px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 11px;
- font-family: "Trebuchet MS", sans-serif;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- background-color: #333333;
- margin: 5px auto;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 815px;
- margin: 5px auto;
-}
-
-#header {
- background: url('images/header.gif') no-repeat;
- background-position: 4px;
- height: 102px;
- width: 808px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.gif') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: bold;
- font-family: Verdana;
- text-align: center;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 4px;
- margin-top: 0px;
- margin-left: 5px;
- padding-top: 0px;
- width: 800px;
- background: url('images/horizontal.gif') repeat-y;
-}
-
-#left {
- width: 800px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.gif') no-repeat;
- top: -18px;
- left: 7px;
- width: 800px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- position: relative;
- top: -24px;
- left: -4px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- width: 80px;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #505050;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background: url('images/metal_bgr.gif') repeat-x;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background: url('images/metal_bgr_red.gif') repeat-x;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 5px;
- margin-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/metallic/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/metallic/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/metallic/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/metallic/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/metallic/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/metallic/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/metallic/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/metallic/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/metallic/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/metallic/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/metallic/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/metallic/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/metallic/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/metallic/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/metallic/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/metallic/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/metallic/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/metallic/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #FFFFFF;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listrborder {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-left: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- color: #FFFFFF;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #DDDDDD;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 6px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-
-#login {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 340px;
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 50px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login #username, #password, #password2 {
- font-size: small;
- width: 60%;
- padding-left: 19px;
- padding: 3px;
- margin: 0em;
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-
-/* Widget CSS */
-.widgetsubheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #B1B1B1;
- padding-right: 6px;
- padding-left: 6px;
- color: #000000;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetdiv{
- margin:5px;
- padding: 5px;
- background:#CCCCCC;
-}
-.widgetconfigdiv{
- background:#BBBBBB;
- font-size: 11px;
- color: #000000;
- padding-right: 5px;
- padding-left: 5px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-
-div#log div.log-entry-mini {
- clear: both;
-}
-
-div#log div.log-entry-mini span {
- padding: 2px 2px 2px 2px;
- padding-left: 6px;
-}
-
-div#log span.log-action-mini-header,
-div#log span.log-time-mini-header,
-div#log span.log-interface-mini-header,
-div#log span.log-source-mini-header,
-div#log span.log-destination-mini-header,
-div#log span.log-protocol-mini-header {
- float: left;
- text-align: left;
- background-color: #FFFFFF;
- font-size: 12px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-time-mini,
-div#log span.log-interface-mini,
-div#log span.log-source-mini,
-div#log span.log-destination-mini,
-div#log span.log-protocol-mini {
- float: left;
- text-align: left;
- background-color: #FFFFFF;
- font-size: 11px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-action-mini-header {
- width: 6%;
-}
-
-div#log span.log-time-mini,
-div#log span.log-time-mini-header {
- width: 19%;
-}
-
-div#log span.log-interface-mini,
-div#log span.log-interface-mini-header {
- width: 8%;
-}
-
-div#log span.log-source-mini,
-div#log span.log-source-mini-header {
- width: 23%;
-}
-
-div#log span.log-destination-mini,
-div#log span.log-destination-mini-header {
- width: 31%;
-}
-
-div#log span.log-protocol-mini,
-div#log span.log-protocol-mini-header {
- width: 8%;
- border-right: 1px solid #999;
-}
-
-/* Sortable tables */
-table.sortable thead {
- cursor: default;
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-
-/*thermal_sensors widget styles*/
-
-.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
-.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
-.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
- background-color: LimeGreen;
- border-top-width: 2px; border-top-color: Lime;
- border-left-width: 0px;
- border-right-width: 0px;
- border-bottom-width: 2px; border-bottom-color: Green;
-}
-.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
-.thermalSensorText { float: left; height: 20px; top: 3px; }
-.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
-
-.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-
-.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
-
-.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
-
-/* widget textarea styles - full width */
-.textarea_widget {
- width: 100%;
- resize:vertical;
- -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
- -moz-box-sizing: border-box; /* Firefox, other Gecko */
- box-sizing: border-box; /* IE 8+ */
-}
diff --git a/usr/local/www/themes/metallic/apple-touch-icon.png b/usr/local/www/themes/metallic/apple-touch-icon.png
deleted file mode 100755
index 7a4b975..0000000
--- a/usr/local/www/themes/metallic/apple-touch-icon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/bottom-loader.js b/usr/local/www/themes/metallic/bottom-loader.js
deleted file mode 100644
index a21f775..0000000
--- a/usr/local/www/themes/metallic/bottom-loader.js
+++ /dev/null
@@ -1,10 +0,0 @@
-//<![CDATA[
-
- NiftyCheck();
- Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
- Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
- Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
- Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
- Rounded("div#topbox","all","#FFF","#990000","smooth");
-
-//]]>
diff --git a/usr/local/www/themes/metallic/images/alert_bgr.gif b/usr/local/www/themes/metallic/images/alert_bgr.gif
deleted file mode 100755
index 65498f1..0000000
--- a/usr/local/www/themes/metallic/images/alert_bgr.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/footer.gif b/usr/local/www/themes/metallic/images/footer.gif
deleted file mode 100755
index f7c2af7..0000000
--- a/usr/local/www/themes/metallic/images/footer.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/header.gif b/usr/local/www/themes/metallic/images/header.gif
deleted file mode 100755
index 0a44068..0000000
--- a/usr/local/www/themes/metallic/images/header.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/help.png b/usr/local/www/themes/metallic/images/help.png
deleted file mode 100755
index 1de05e3..0000000
--- a/usr/local/www/themes/metallic/images/help.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/horizontal.gif b/usr/local/www/themes/metallic/images/horizontal.gif
deleted file mode 100755
index a280dcb..0000000
--- a/usr/local/www/themes/metallic/images/horizontal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/favicon.ico b/usr/local/www/themes/metallic/images/icons/favicon.ico
deleted file mode 100755
index 3440bf2..0000000
--- a/usr/local/www/themes/metallic/images/icons/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_3g.gif b/usr/local/www/themes/metallic/images/icons/icon_3g.gif
deleted file mode 100755
index 46ccb92..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_3g.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/metallic/images/icons/icon_3g_inactive.gif
deleted file mode 100755
index cf983e4..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_3g_inactive.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_advanced.gif b/usr/local/www/themes/metallic/images/icons/icon_advanced.gif
deleted file mode 100755
index 3ede1ff..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_advanced.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_advanced_s.gif b/usr/local/www/themes/metallic/images/icons/icon_advanced_s.gif
deleted file mode 100755
index b233549..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_advanced_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_alert.gif b/usr/local/www/themes/metallic/images/icons/icon_alert.gif
deleted file mode 100755
index 7646941..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_alert.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_alias_host.gif b/usr/local/www/themes/metallic/images/icons/icon_alias_host.gif
deleted file mode 100755
index ad43e17..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_alias_host.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_alias_net.gif b/usr/local/www/themes/metallic/images/icons/icon_alias_net.gif
deleted file mode 100755
index abd1b8b..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_alias_net.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_alias_port.gif b/usr/local/www/themes/metallic/images/icons/icon_alias_port.gif
deleted file mode 100755
index 4acf2aa..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_alias_port.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_alias_url.gif b/usr/local/www/themes/metallic/images/icons/icon_alias_url.gif
deleted file mode 100755
index 660571e..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_alias_url.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/metallic/images/icons/icon_alias_url_reload.gif
deleted file mode 100755
index 55c1c4a..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_alias_url_reload.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_block.gif b/usr/local/www/themes/metallic/images/icons/icon_block.gif
deleted file mode 100755
index 670c968..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_block.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_block_add.gif b/usr/local/www/themes/metallic/images/icons/icon_block_add.gif
deleted file mode 100755
index eb726d6..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_block_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_block_d.gif b/usr/local/www/themes/metallic/images/icons/icon_block_d.gif
deleted file mode 100755
index e6345fe..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_block_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_cablenic.gif b/usr/local/www/themes/metallic/images/icons/icon_cablenic.gif
deleted file mode 100755
index a071c66..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_cablenic.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_cal.gif b/usr/local/www/themes/metallic/images/icons/icon_cal.gif
deleted file mode 100755
index a9c7c87..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_cal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_cal_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_cal_mo.gif
deleted file mode 100755
index 1647e2f..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_cal_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_carp.gif b/usr/local/www/themes/metallic/images/icons/icon_carp.gif
deleted file mode 100755
index 9454a82..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_carp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_carp_d.gif b/usr/local/www/themes/metallic/images/icons/icon_carp_d.gif
deleted file mode 100755
index 2ba8db2..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_carp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_chain.png b/usr/local/www/themes/metallic/images/icons/icon_chain.png
deleted file mode 100644
index 12db07a..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_chain.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_check.gif b/usr/local/www/themes/metallic/images/icons/icon_check.gif
deleted file mode 100755
index 393674d..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_check.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_clock_green.gif b/usr/local/www/themes/metallic/images/icons/icon_clock_green.gif
deleted file mode 100755
index e171ba8..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_clock_green.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_clock_grey.gif b/usr/local/www/themes/metallic/images/icons/icon_clock_grey.gif
deleted file mode 100755
index 00c865a..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_clock_grey.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_clock_red.gif b/usr/local/www/themes/metallic/images/icons/icon_clock_red.gif
deleted file mode 100755
index 7b412ee..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_clock_red.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_close.gif b/usr/local/www/themes/metallic/images/icons/icon_close.gif
deleted file mode 100755
index e0f86a7..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_close.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_configure.gif b/usr/local/www/themes/metallic/images/icons/icon_configure.gif
deleted file mode 100755
index 7182e0d..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_configure.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_down.gif b/usr/local/www/themes/metallic/images/icons/icon_down.gif
deleted file mode 100755
index b71a9c5..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_down_d.gif b/usr/local/www/themes/metallic/images/icons/icon_down_d.gif
deleted file mode 100755
index 70a7473..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_down_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_down_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_down_mo.gif
deleted file mode 100755
index 584587a..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_down_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_e.gif b/usr/local/www/themes/metallic/images/icons/icon_e.gif
deleted file mode 100755
index 2950800..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_e.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_e_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_e_mo.gif
deleted file mode 100755
index 9ba5738..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_e_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_error.gif b/usr/local/www/themes/metallic/images/icons/icon_error.gif
deleted file mode 100755
index e0fa659..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_error.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_exclam.gif b/usr/local/www/themes/metallic/images/icons/icon_exclam.gif
deleted file mode 100755
index 36c2ec7..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_exclam.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_flag_de.png b/usr/local/www/themes/metallic/images/icons/icon_flag_de.png
deleted file mode 100755
index 069cbbe..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_flag_de.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_flag_en.png b/usr/local/www/themes/metallic/images/icons/icon_flag_en.png
deleted file mode 100755
index bd7f9a5..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_flag_en.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_flag_es.png b/usr/local/www/themes/metallic/images/icons/icon_flag_es.png
deleted file mode 100755
index 434776c..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_flag_es.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/metallic/images/icons/icon_flag_pt_BR.png
deleted file mode 100755
index f786349..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_flag_pt_BR.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_cert.png
deleted file mode 100755
index 48a34b6..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_frmfld_cert.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_file.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_file.png
deleted file mode 100755
index 48a9ed2..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_frmfld_file.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_group.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_group.png
deleted file mode 100755
index 7d929c0..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_frmfld_group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_host.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_host.png
deleted file mode 100755
index 867ef2c..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_frmfld_host.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_imp.png
deleted file mode 100755
index f667cfc..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_frmfld_imp.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_mail.png
deleted file mode 100755
index d2d4548..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_frmfld_mail.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_pwd.png
deleted file mode 100755
index 06b53a1..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_frmfld_pwd.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_search.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_search.png
deleted file mode 100755
index 33de926..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_frmfld_search.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_time.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_time.png
deleted file mode 100755
index aa8300a..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_frmfld_time.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_unknown.png
deleted file mode 100755
index 1857d0e..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_frmfld_unknown.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_url.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_url.png
deleted file mode 100755
index cf56792..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_frmfld_url.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_user.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_user.png
deleted file mode 100755
index e00eebe..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_frmfld_user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_fw-update.gif b/usr/local/www/themes/metallic/images/icons/icon_fw-update.gif
deleted file mode 100755
index 52c18ac..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_fw-update.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_help.gif b/usr/local/www/themes/metallic/images/icons/icon_help.gif
deleted file mode 100644
index 84c84db..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_help.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_ifalias.gif b/usr/local/www/themes/metallic/images/icons/icon_ifalias.gif
deleted file mode 100755
index 0c569a7..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_ifalias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/metallic/images/icons/icon_ifalias_d.gif
deleted file mode 100755
index faa84d4..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_ifalias_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_import_alias.gif b/usr/local/www/themes/metallic/images/icons/icon_import_alias.gif
deleted file mode 100755
index d11a5f0..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_import_alias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_in.gif b/usr/local/www/themes/metallic/images/icons/icon_in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_in_d.gif b/usr/local/www/themes/metallic/images/icons/icon_in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_info_pkg.gif b/usr/local/www/themes/metallic/images/icons/icon_info_pkg.gif
deleted file mode 100755
index cd3a532..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_info_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_interface_down.gif b/usr/local/www/themes/metallic/images/icons/icon_interface_down.gif
deleted file mode 100755
index 0626655..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_interface_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_interface_up.gif b/usr/local/www/themes/metallic/images/icons/icon_interface_up.gif
deleted file mode 100755
index 1449513..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_interface_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_left.gif b/usr/local/www/themes/metallic/images/icons/icon_left.gif
deleted file mode 100755
index 8effefe..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_left_d.gif b/usr/local/www/themes/metallic/images/icons/icon_left_d.gif
deleted file mode 100755
index c778014..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_left_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_left_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_left_mo.gif
deleted file mode 100755
index 84c6fa2..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_left_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_log.gif b/usr/local/www/themes/metallic/images/icons/icon_log.gif
deleted file mode 100755
index 4a1983a..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_log.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_log_d.gif b/usr/local/www/themes/metallic/images/icons/icon_log_d.gif
deleted file mode 100755
index d31bd9b..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_log_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_log_s.gif b/usr/local/www/themes/metallic/images/icons/icon_log_s.gif
deleted file mode 100755
index f9fda33..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_log_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_log_s_d.gif b/usr/local/www/themes/metallic/images/icons/icon_log_s_d.gif
deleted file mode 100755
index fb2c05f..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_log_s_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_logs.gif b/usr/local/www/themes/metallic/images/icons/icon_logs.gif
deleted file mode 100644
index afe0104..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_logs.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_match.gif b/usr/local/www/themes/metallic/images/icons/icon_match.gif
deleted file mode 100644
index 215571f..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_match.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_match_d.gif b/usr/local/www/themes/metallic/images/icons/icon_match_d.gif
deleted file mode 100644
index 6e4c364..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_match_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_minus.gif b/usr/local/www/themes/metallic/images/icons/icon_minus.gif
deleted file mode 100755
index 417544f..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_minus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_open.gif b/usr/local/www/themes/metallic/images/icons/icon_open.gif
deleted file mode 100755
index ac3da14..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_open.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_other.gif b/usr/local/www/themes/metallic/images/icons/icon_other.gif
deleted file mode 100755
index e6f780f..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_other.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_other_d.gif b/usr/local/www/themes/metallic/images/icons/icon_other_d.gif
deleted file mode 100755
index b08d970..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_other_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_out.gif b/usr/local/www/themes/metallic/images/icons/icon_out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_out_d.gif b/usr/local/www/themes/metallic/images/icons/icon_out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_parp.gif b/usr/local/www/themes/metallic/images/icons/icon_parp.gif
deleted file mode 100755
index 96acaf3..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_parp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_parp_d.gif b/usr/local/www/themes/metallic/images/icons/icon_parp_d.gif
deleted file mode 100755
index 7d7d00e..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_parp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_pass.gif b/usr/local/www/themes/metallic/images/icons/icon_pass.gif
deleted file mode 100755
index fe1bb0d..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_pass.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_pass_add.gif b/usr/local/www/themes/metallic/images/icons/icon_pass_add.gif
deleted file mode 100755
index f7f4c20..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_pass_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_pass_d.gif b/usr/local/www/themes/metallic/images/icons/icon_pass_d.gif
deleted file mode 100755
index 6adc431..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_pass_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_plus.gif b/usr/local/www/themes/metallic/images/icons/icon_plus.gif
deleted file mode 100755
index 2a94eeb..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_plus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_plus_bl.gif b/usr/local/www/themes/metallic/images/icons/icon_plus_bl.gif
deleted file mode 100755
index 8dcd7c0..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_plus_bl.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/metallic/images/icons/icon_plus_bl_p.gif
deleted file mode 100755
index 0c79849..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_plus_bl_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_plus_d.gif b/usr/local/www/themes/metallic/images/icons/icon_plus_d.gif
deleted file mode 100755
index ebc7457..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_plus_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_plus_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_plus_mo.gif
deleted file mode 100755
index 1c7ca08..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_plus_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_plus_p.gif b/usr/local/www/themes/metallic/images/icons/icon_plus_p.gif
deleted file mode 100755
index eb41284..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_plus_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall.gif
deleted file mode 100755
index d78b867..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_reinstall.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_d.gif
deleted file mode 100755
index 13658f7..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_reinstall_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_mo.gif
deleted file mode 100755
index 90b576e..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_reinstall_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg.gif
deleted file mode 100755
index 9aebb03..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_d.gif
deleted file mode 100755
index 4ab4992..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_mo.gif
deleted file mode 100755
index 7025d20..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml.gif
deleted file mode 100755
index 4542432..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_d.gif
deleted file mode 100755
index 8d3a68d..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_mo.gif
deleted file mode 100755
index 15e0aed..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_reject.gif b/usr/local/www/themes/metallic/images/icons/icon_reject.gif
deleted file mode 100755
index 5565cd6..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_reject.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_reject_d.gif b/usr/local/www/themes/metallic/images/icons/icon_reject_d.gif
deleted file mode 100755
index 6c09fae..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_reject_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_right.gif b/usr/local/www/themes/metallic/images/icons/icon_right.gif
deleted file mode 100755
index fdf2d8b..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_restart.gif b/usr/local/www/themes/metallic/images/icons/icon_service_restart.gif
deleted file mode 100755
index e49fbd7..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_service_restart.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/metallic/images/icons/icon_service_restart_d.gif
deleted file mode 100755
index a5d6d7c..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_service_restart_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_running.gif b/usr/local/www/themes/metallic/images/icons/icon_service_running.gif
deleted file mode 100644
index 543fd56..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_service_running.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_start.gif b/usr/local/www/themes/metallic/images/icons/icon_service_start.gif
deleted file mode 100755
index 09bb58f..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_service_start.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_start_d.gif b/usr/local/www/themes/metallic/images/icons/icon_service_start_d.gif
deleted file mode 100755
index f58f111..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_service_start_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_status.gif b/usr/local/www/themes/metallic/images/icons/icon_service_status.gif
deleted file mode 100644
index a93bcfb..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_service_status.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_stop.gif b/usr/local/www/themes/metallic/images/icons/icon_service_stop.gif
deleted file mode 100755
index 922addc..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_service_stop.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/metallic/images/icons/icon_service_stop_d.gif
deleted file mode 100755
index b4cfdea..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_service_stop_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_stopped.gif b/usr/local/www/themes/metallic/images/icons/icon_service_stopped.gif
deleted file mode 100644
index f93a25d..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_service_stopped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_services_restart_mo.gif
deleted file mode 100755
index a092b40..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_services_restart_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_services_start_mo.gif
deleted file mode 100755
index ecdb58f..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_services_start_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_services_stop_mo.gif
deleted file mode 100755
index c00e208..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_services_stop_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_system-group-grey.png b/usr/local/www/themes/metallic/images/icons/icon_system-group-grey.png
deleted file mode 100755
index d7b964d..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_system-group-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_system-group.png b/usr/local/www/themes/metallic/images/icons/icon_system-group.png
deleted file mode 100755
index 1c974f2..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_system-group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_system-user-grey.png b/usr/local/www/themes/metallic/images/icons/icon_system-user-grey.png
deleted file mode 100755
index 2f6047d..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_system-user-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_system-user.png b/usr/local/www/themes/metallic/images/icons/icon_system-user.png
deleted file mode 100755
index ef82156..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_system-user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/metallic/images/icons/icon_system_lock_screen.png
deleted file mode 100755
index 30f306d..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_system_lock_screen.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_system_logout.png b/usr/local/www/themes/metallic/images/icons/icon_system_logout.png
deleted file mode 100755
index 9bbb6c7..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_system_logout.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_trapped.gif b/usr/local/www/themes/metallic/images/icons/icon_trapped.gif
deleted file mode 100755
index ffeb2cd..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_trapped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_trapped_p.gif b/usr/local/www/themes/metallic/images/icons/icon_trapped_p.gif
deleted file mode 100755
index 6d46aaf..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_trapped_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_ts_rule.gif b/usr/local/www/themes/metallic/images/icons/icon_ts_rule.gif
deleted file mode 100755
index e15ab6c..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_ts_rule.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/metallic/images/icons/icon_ts_rule_d.gif
deleted file mode 100755
index f776281..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_ts_rule_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_up.gif b/usr/local/www/themes/metallic/images/icons/icon_up.gif
deleted file mode 100755
index 883c5a2..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_up_d.gif b/usr/local/www/themes/metallic/images/icons/icon_up_d.gif
deleted file mode 100755
index 0ddcce2..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_up_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_up_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_up_mo.gif
deleted file mode 100755
index 9f869a4..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_up_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_wlan.gif b/usr/local/www/themes/metallic/images/icons/icon_wlan.gif
deleted file mode 100755
index 1f0addc..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_wlan.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_wlan_d.gif b/usr/local/www/themes/metallic/images/icons/icon_wlan_d.gif
deleted file mode 100755
index 35bf580..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_wlan_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_wol_all.gif b/usr/local/www/themes/metallic/images/icons/icon_wol_all.gif
deleted file mode 100755
index 2d22182..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_wol_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/metallic/images/icons/icon_wzd_nsaved.png
deleted file mode 100755
index 21cb27d..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_wzd_nsaved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_wzd_saved.png b/usr/local/www/themes/metallic/images/icons/icon_wzd_saved.png
deleted file mode 100755
index ab82946..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_wzd_saved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_x.gif b/usr/local/www/themes/metallic/images/icons/icon_x.gif
deleted file mode 100755
index 24e4d49..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_x_d.gif b/usr/local/www/themes/metallic/images/icons/icon_x_d.gif
deleted file mode 100755
index d2bfbc8..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_x_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_x_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_x_mo.gif
deleted file mode 100755
index da7b57c..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_x_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/icon_x_p.gif b/usr/local/www/themes/metallic/images/icons/icon_x_p.gif
deleted file mode 100755
index 8828fa6..0000000
--- a/usr/local/www/themes/metallic/images/icons/icon_x_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/in.gif b/usr/local/www/themes/metallic/images/icons/in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/metallic/images/icons/in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/in_d.gif b/usr/local/www/themes/metallic/images/icons/in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/metallic/images/icons/in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/out.gif b/usr/local/www/themes/metallic/images/icons/out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/metallic/images/icons/out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/icons/out_d.gif b/usr/local/www/themes/metallic/images/icons/out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/metallic/images/icons/out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/log.png b/usr/local/www/themes/metallic/images/log.png
deleted file mode 100755
index 762ba80..0000000
--- a/usr/local/www/themes/metallic/images/log.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/logo.gif b/usr/local/www/themes/metallic/images/logo.gif
deleted file mode 100755
index 08638ff..0000000
--- a/usr/local/www/themes/metallic/images/logo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/logobig.jpg b/usr/local/www/themes/metallic/images/logobig.jpg
deleted file mode 100755
index 2ef196d..0000000
--- a/usr/local/www/themes/metallic/images/logobig.jpg
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/menu_down.gif b/usr/local/www/themes/metallic/images/menu_down.gif
deleted file mode 100755
index 137de8d..0000000
--- a/usr/local/www/themes/metallic/images/menu_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/menu_footer.gif b/usr/local/www/themes/metallic/images/menu_footer.gif
deleted file mode 100755
index d06faa4..0000000
--- a/usr/local/www/themes/metallic/images/menu_footer.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/menu_right.gif b/usr/local/www/themes/metallic/images/menu_right.gif
deleted file mode 100755
index 881327c..0000000
--- a/usr/local/www/themes/metallic/images/menu_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/metal_bgr.gif b/usr/local/www/themes/metallic/images/metal_bgr.gif
deleted file mode 100755
index a0ca6c8..0000000
--- a/usr/local/www/themes/metallic/images/metal_bgr.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/metal_bgr_red.gif b/usr/local/www/themes/metallic/images/metal_bgr_red.gif
deleted file mode 100755
index c4a1465..0000000
--- a/usr/local/www/themes/metallic/images/metal_bgr_red.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/bar_blue.gif b/usr/local/www/themes/metallic/images/misc/bar_blue.gif
deleted file mode 100755
index 741186a..0000000
--- a/usr/local/www/themes/metallic/images/misc/bar_blue.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/bar_gray.gif b/usr/local/www/themes/metallic/images/misc/bar_gray.gif
deleted file mode 100755
index e86e245..0000000
--- a/usr/local/www/themes/metallic/images/misc/bar_gray.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/bar_left.gif b/usr/local/www/themes/metallic/images/misc/bar_left.gif
deleted file mode 100755
index af751fa..0000000
--- a/usr/local/www/themes/metallic/images/misc/bar_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/bar_right.gif b/usr/local/www/themes/metallic/images/misc/bar_right.gif
deleted file mode 100755
index ff12d9e..0000000
--- a/usr/local/www/themes/metallic/images/misc/bar_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/bullet_toggle_minus.png b/usr/local/www/themes/metallic/images/misc/bullet_toggle_minus.png
deleted file mode 100755
index 37db2fd..0000000
--- a/usr/local/www/themes/metallic/images/misc/bullet_toggle_minus.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/bullet_toggle_plus.png b/usr/local/www/themes/metallic/images/misc/bullet_toggle_plus.png
deleted file mode 100755
index fba7af9..0000000
--- a/usr/local/www/themes/metallic/images/misc/bullet_toggle_plus.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/button.gif b/usr/local/www/themes/metallic/images/misc/button.gif
deleted file mode 100755
index e85dbb3..0000000
--- a/usr/local/www/themes/metallic/images/misc/button.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/graph.png b/usr/local/www/themes/metallic/images/misc/graph.png
deleted file mode 100755
index 507ec75..0000000
--- a/usr/local/www/themes/metallic/images/misc/graph.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/key_128.gif b/usr/local/www/themes/metallic/images/misc/key_128.gif
deleted file mode 100755
index ea5ae34..0000000
--- a/usr/local/www/themes/metallic/images/misc/key_128.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/key_152.gif b/usr/local/www/themes/metallic/images/misc/key_152.gif
deleted file mode 100755
index 6c7fc03..0000000
--- a/usr/local/www/themes/metallic/images/misc/key_152.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/key_256.gif b/usr/local/www/themes/metallic/images/misc/key_256.gif
deleted file mode 100755
index 3e1c377..0000000
--- a/usr/local/www/themes/metallic/images/misc/key_256.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/key_64.gif b/usr/local/www/themes/metallic/images/misc/key_64.gif
deleted file mode 100755
index 87892bd..0000000
--- a/usr/local/www/themes/metallic/images/misc/key_64.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/left_background.gif b/usr/local/www/themes/metallic/images/misc/left_background.gif
deleted file mode 100755
index 529d827..0000000
--- a/usr/local/www/themes/metallic/images/misc/left_background.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/loader.gif b/usr/local/www/themes/metallic/images/misc/loader.gif
deleted file mode 100755
index 5d10ac3..0000000
--- a/usr/local/www/themes/metallic/images/misc/loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/loader_all.gif b/usr/local/www/themes/metallic/images/misc/loader_all.gif
deleted file mode 100755
index cb6bc0c..0000000
--- a/usr/local/www/themes/metallic/images/misc/loader_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/loader_filter.gif b/usr/local/www/themes/metallic/images/misc/loader_filter.gif
deleted file mode 100755
index b838b17..0000000
--- a/usr/local/www/themes/metallic/images/misc/loader_filter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/loader_tab.gif b/usr/local/www/themes/metallic/images/misc/loader_tab.gif
deleted file mode 100755
index 05bb04c..0000000
--- a/usr/local/www/themes/metallic/images/misc/loader_tab.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/logon.png b/usr/local/www/themes/metallic/images/misc/logon.png
deleted file mode 100755
index baf8a9d..0000000
--- a/usr/local/www/themes/metallic/images/misc/logon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/progress_bar.gif b/usr/local/www/themes/metallic/images/misc/progress_bar.gif
deleted file mode 100755
index 3b4aa52..0000000
--- a/usr/local/www/themes/metallic/images/misc/progress_bar.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/rrd_error.png b/usr/local/www/themes/metallic/images/misc/rrd_error.png
deleted file mode 100755
index a79ecf3..0000000
--- a/usr/local/www/themes/metallic/images/misc/rrd_error.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/status_alerter.gif b/usr/local/www/themes/metallic/images/misc/status_alerter.gif
deleted file mode 100755
index 7ff1e95..0000000
--- a/usr/local/www/themes/metallic/images/misc/status_alerter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/status_carpmaster.gif b/usr/local/www/themes/metallic/images/misc/status_carpmaster.gif
deleted file mode 100755
index 2c32908..0000000
--- a/usr/local/www/themes/metallic/images/misc/status_carpmaster.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/status_left.gif b/usr/local/www/themes/metallic/images/misc/status_left.gif
deleted file mode 100755
index b5a2930..0000000
--- a/usr/local/www/themes/metallic/images/misc/status_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/status_page_loading.gif b/usr/local/www/themes/metallic/images/misc/status_page_loading.gif
deleted file mode 100755
index 067ef18..0000000
--- a/usr/local/www/themes/metallic/images/misc/status_page_loading.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/status_reload_all.gif b/usr/local/www/themes/metallic/images/misc/status_reload_all.gif
deleted file mode 100755
index 72de6bd..0000000
--- a/usr/local/www/themes/metallic/images/misc/status_reload_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/status_reload_filter.gif b/usr/local/www/themes/metallic/images/misc/status_reload_filter.gif
deleted file mode 100755
index d72761a..0000000
--- a/usr/local/www/themes/metallic/images/misc/status_reload_filter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/status_right.gif b/usr/local/www/themes/metallic/images/misc/status_right.gif
deleted file mode 100755
index bf66fdb..0000000
--- a/usr/local/www/themes/metallic/images/misc/status_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/tri_c.gif b/usr/local/www/themes/metallic/images/misc/tri_c.gif
deleted file mode 100755
index 317b758..0000000
--- a/usr/local/www/themes/metallic/images/misc/tri_c.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/tri_c_black.gif b/usr/local/www/themes/metallic/images/misc/tri_c_black.gif
deleted file mode 100755
index 3d33d49..0000000
--- a/usr/local/www/themes/metallic/images/misc/tri_c_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/tri_o.gif b/usr/local/www/themes/metallic/images/misc/tri_o.gif
deleted file mode 100755
index eb95c32..0000000
--- a/usr/local/www/themes/metallic/images/misc/tri_o.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/tri_o_black.gif b/usr/local/www/themes/metallic/images/misc/tri_o_black.gif
deleted file mode 100755
index 4ed30d1..0000000
--- a/usr/local/www/themes/metallic/images/misc/tri_o_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/misc/widget_loader.gif b/usr/local/www/themes/metallic/images/misc/widget_loader.gif
deleted file mode 100755
index fad101f..0000000
--- a/usr/local/www/themes/metallic/images/misc/widget_loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/new_tab_menu.png b/usr/local/www/themes/metallic/images/new_tab_menu.png
deleted file mode 100755
index 4bdfcef..0000000
--- a/usr/local/www/themes/metallic/images/new_tab_menu.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/status.png b/usr/local/www/themes/metallic/images/status.png
deleted file mode 100755
index a3e368e..0000000
--- a/usr/local/www/themes/metallic/images/status.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/transparent.gif b/usr/local/www/themes/metallic/images/transparent.gif
deleted file mode 100755
index 89c5530..0000000
--- a/usr/local/www/themes/metallic/images/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/images/transparent_pixel.gif b/usr/local/www/themes/metallic/images/transparent_pixel.gif
deleted file mode 100755
index 35d42e8..0000000
--- a/usr/local/www/themes/metallic/images/transparent_pixel.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/javascript/ie7/blank.gif b/usr/local/www/themes/metallic/javascript/ie7/blank.gif
deleted file mode 100755
index a4fe2e6..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/blank.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-box-model.js
deleted file mode 100644
index 45543f6..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/ie7-box-model.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-core.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-core.js
deleted file mode 100644
index b11e2b1..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/ie7-core.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-css-strict.js
deleted file mode 100644
index 4406d7a..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/ie7-css-strict.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-css2.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-css2.js
deleted file mode 100644
index 7121c8e..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/ie7-css2.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-css3.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-css3.js
deleted file mode 100644
index 86b24f5..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/ie7-css3.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-fixed.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-fixed.js
deleted file mode 100644
index 4321cda..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/ie7-fixed.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-html4.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-html4.js
deleted file mode 100644
index 4d2baa9..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/ie7-html4.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-ie5.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-ie5.js
deleted file mode 100644
index 707fa56..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/ie7-ie5.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-lite-p.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-lite-p.js
deleted file mode 100644
index 3a66d19..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/ie7-lite-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í></Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-lite.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-lite.js
deleted file mode 100644
index 88c764f..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/ie7-lite.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-png.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-png.js
deleted file mode 100644
index 7b8f2cf..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/ie7-png.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-server.css b/usr/local/www/themes/metallic/javascript/ie7/ie7-server.css
deleted file mode 100644
index 47c7edd..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/ie7-server.css
+++ /dev/null
@@ -1,43 +0,0 @@
-body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
-body {margin: 8px; background: #333;}
-h1 {margin: 0;}
-h1 a:hover {background-color: transparent;}
-h2 {font-size: 1.75em;}
-h3 {font-size: 1.1em;}
-a:active {color: #ff0000;}
-a:link {color: #0a6cce;}
-a:visited {color: #0a6cce;}
-code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
- padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
-code.box {display: block; padding: 10px; margin: 0.5em 0;}
-ul {list-style-type: square;}
-dd {margin: .2em 0 .5em 1em;}
-dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
-dl.library dd {font-style: italic; margin-left: 3em;}
-dt {font-weight: bold;}
-dt.pack {color: brown;}
-a img {border-style: none;}
-hr {height: 1px; color: #000; border-style: solid;}
-hr.short {height: 2px; width: 100px;}
-div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
-hr {border-bottom-width: 0px;}
-div.header hr {color: #0a6cce; background-color: #0a6cce;}
-div.content {min-height: 100px;}
-div.footer hr {color: #898e79; background-color: #898e79; }
-div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
-a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
-div.footer a:hover {background-color: transparent; text-decoration: none;}
-div.header .menu {text-align: right;}
-div.footer {font-size: x-small; margin-top: 8px;}
-div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
-#license {margin-top: 5px; font-size: xx-small;}
-table {border-top: 1px solid #000; border-left: 1px solid #000;}
-th {background-color: #fff; text-align: left;}
-th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
-th.small {width: 100px;}
-th.medium {width: 200px;}
-th.large {width: 270px;}
-th.x-large {width: 408px;}
-table.fixed {table-layout: fixed;}
-span.comment {color: #666;}
-
diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-standard-p.js
deleted file mode 100644
index 73e99ac..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/ie7-standard-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì></Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-standard.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-standard.js
deleted file mode 100644
index 2109905..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/ie7-standard.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/metallic/javascript/ie7/test-trans.png b/usr/local/www/themes/metallic/javascript/ie7/test-trans.png
deleted file mode 100755
index e187e2c..0000000
--- a/usr/local/www/themes/metallic/javascript/ie7/test-trans.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/metallic/javascript/niftyjsCode.js b/usr/local/www/themes/metallic/javascript/niftyjsCode.js
deleted file mode 100644
index 75ef8b0..0000000
--- a/usr/local/www/themes/metallic/javascript/niftyjsCode.js
+++ /dev/null
@@ -1,174 +0,0 @@
-function NiftyCheck(){
-if(!document.getElementById || !document.createElement)
- return(false);
-isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
-if(Array.prototype.push==null){Array.prototype.push=function(){
- this[this.length]=arguments[0]; return(this.length);};}
-return(true);
-}
-
-function Rounded(selector,wich,bk,color,opt){
-var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
-
-if(color=="transparent"){
- cn=cn+"x";
- ecolor=bk;
- bk="transparent";
- }
-else if(opt && opt.indexOf("border")>=0){
- var optar=opt.split(" ");
- for(i=0;i<optar.length;i++)
- if(optar[i].indexOf("#")>=0) ecolor=optar[i];
- if(ecolor=="") ecolor="#666";
- cn+="e";
- edges=true;
- }
-else if(opt && opt.indexOf("smooth")>=0){
- cn+="a";
- ecolor=Mix(bk,color);
- }
-if(opt && opt.indexOf("small")>=0) cn+="s";
-prefixt=cn;
-prefixb=cn;
-if(wich.indexOf("all")>=0){t=true;b=true;}
-else if(wich.indexOf("top")>=0) t="true";
-else if(wich.indexOf("tl")>=0){
- t="true";
- if(wich.indexOf("tr")<0) prefixt+="l";
- }
-else if(wich.indexOf("tr")>=0){
- t="true";
- prefixt+="r";
- }
-if(wich.indexOf("bottom")>=0) b=true;
-else if(wich.indexOf("bl")>=0){
- b="true";
- if(wich.indexOf("br")<0) prefixb+="l";
- }
-else if(wich.indexOf("br")>=0){
- b="true";
- prefixb+="r";
- }
-var v=getElementsBySelector(selector);
-var l=v.length;
-for(i=0;i<l;i++){
- if(edges) AddBorder(v[i],ecolor);
- if(t) AddTop(v[i],bk,color,ecolor,prefixt);
- if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
- }
-}
-
-function AddBorder(el,bc){
-var i;
-if(!el.passed){
- if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
- var t=el.firstChild.nodeValue;
- el.removeChild(el.lastChild);
- var d=CreateEl("span");
- d.style.display="block";
- d.appendChild(document.createTextNode(t));
- el.appendChild(d);
- }
- for(i=0;i<el.childNodes.length;i++){
- if(el.childNodes[i].nodeType==1){
- el.childNodes[i].style.borderLeft="1px solid "+bc;
- el.childNodes[i].style.borderRight="1px solid "+bc;
- }
- }
- }
-el.passed=true;
-}
-
-function AddTop(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=1;i<=lim;i++){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingTop=0;
-el.insertBefore(d,el.firstChild);
-}
-
-function AddBottom(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=lim;i>0;i--){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingBottom=0;
-el.appendChild(d);
-}
-
-function CreateEl(x){
-if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
-else return(document.createElement(x));
-}
-
-function getElementsBySelector(selector){
-var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
-
-if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
- s=selector.split(" ");
- var fs=s[0].split("#");
- if(fs.length==1) return(objlist);
- f=document.getElementById(fs[1]);
- if(f) return(f.getElementsByTagName(s[1]));
- return(objlist);
- }
-if(selector.indexOf("#")>0){ //id selector like "tag#id"
- s=selector.split("#");
- tag=s[0];
- selid=s[1];
- }
-if(selid!=""){
- f=document.getElementById(selid);
- if(f) objlist.push(f);
- return(objlist);
- }
-if(selector.indexOf(".")>0){ //class selector like "tag.class"
- s=selector.split(".");
- tag=s[0];
- selclass=s[1];
- }
-var v=document.getElementsByTagName(tag); // tag selector like "tag"
-if(selclass=="")
- return(v);
-for(i=0;i<v.length;i++){
- if(v[i].className.indexOf(selclass)>=0){
- objlist.push(v[i]);
- }
- }
-return(objlist);
-}
-
-function Mix(c1,c2){
-var i,step1,step2,x,y,r=new Array(3);
-if(c1.length==4)step1=1;
-else step1=2;
-if(c2.length==4) step2=1;
-else step2=2;
-for(i=0;i<3;i++){
- x=parseInt(c1.substr(1+step1*i,step1),16);
- if(step1==1) x=16*x+x;
- y=parseInt(c2.substr(1+step2*i,step2),16);
- if(step2==1) y=16*y+y;
- r[i]=Math.floor((x*50+y*50)/100);
- }
-return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
-} \ No newline at end of file
diff --git a/usr/local/www/themes/metallic/loader.js b/usr/local/www/themes/metallic/loader.js
deleted file mode 100644
index 9b435d5..0000000
--- a/usr/local/www/themes/metallic/loader.js
+++ /dev/null
@@ -1,29 +0,0 @@
-//<![CDATA[
-var browser = '';
-var version = '';
-var entrance = '';
-var cond = '';
-
-// BROWSER?
-if (browser == '') {
- if (navigator.appName.indexOf('Microsoft') != -1)
- browser = 'IE';
- else if (navigator.appName.indexOf('Netscape') != -1)
- browser = 'Netscape';
- else
- browser = 'IE';
-}
-if (version == '') {
- version= navigator.appVersion;
- paren = version.indexOf('(');
- whole_version = navigator.appVersion.substring(0,paren-1);
- version = parseInt(whole_version);
-}
-
-if (browser == 'IE' && version < 7) {
- document.write('<script type="text/javascript" src="/themes/metallic/javascript/ie7/ie7-standard-p.js"></script>');
-}
-
-document.write('<script type="text/javascript" src="/themes/metallic/javascript/niftyjsCode.js"></script>');
-
-//]]>
diff --git a/usr/local/www/themes/metallic/login.css b/usr/local/www/themes/metallic/login.css
deleted file mode 100644
index f8abdfc..0000000
--- a/usr/local/www/themes/metallic/login.css
+++ /dev/null
@@ -1,1127 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-/* please adjust the bgcolor to be used together with niftycorners! */
-.rtop, .artop {
- background-color: #999999;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 9px;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- background-position : center 0px;
- background-color: #999999;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
- font-size: 14px;
- color: #cccccc;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- /* background: url('images/menu.gif') no-repeat; */
- /* width: 693px; */
- position: relative;
- top: -25px;
- left: 3px;
- width: 810px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- /* width: 7.5em; */
- width: 8.77em;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #990000;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background-color: #666666;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 10px;
- padding-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 8px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-
-#login {
-/* background: #cccccc; */
- background-color: transparent;
- border: 0px solid #cccccc;
- margin: 5em auto;
- padding: 0em;
- width: 400px;
-/* filter:alpha(opacity=60);
- -moz-opacity:0.6;
- -khtml-opacity: 0.6;
- opacity: 0.6; */
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
-/* background: #ffffff; */
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 400px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -420px;
- left: 70px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- top: -300px; */
-}
-
-#login #username, #password {
- font-size: 1em;
- width: 60%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- left: 10px;
- top: -300px; */
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- text-align: center;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -20px;
- left: 170px;
-}
-
-/* loginerror box follows */
-
-#login #inputerrors {
- background-color: transparent;
- border: 0px solid #666666;
- margin: 5em auto;
- vertical-align: middle;
- padding: 0em;
- width: 330px;
- height: 50px;
- position: relative;
- top: -370px;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/metallic/new_tab_menu.css b/usr/local/www/themes/metallic/new_tab_menu.css
deleted file mode 100644
index 04c4cf2..0000000
--- a/usr/local/www/themes/metallic/new_tab_menu.css
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- new_tab_menu.css
- part of pfSense
- Copyright (C) 2010-2011 Robert Zelaya
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-
- Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
- The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
-
- <tr>
- <td>
- <?php
- $tab_array_indent = 0; // move to the line in px
- $tab_array_space = 1; // space betwen lines in px
- $tab_array_char_limit = 82; // number or chr before the drop down box
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
-
-*/
-
-.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
-
-.newtabmenu li{float:left; margin-right:2px; text-align: center;}
-.newtabmenu a:link, .newtabmenu a:visited{
- background:url(images/new_tab_menu.png) right 45px;
- color:#ffffff; /* noactive font */
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- font-weight:bold;
- font-size:.9em;
- height:20px;
- line-height:20px;
- text-decoration:none;
-}
-.newtabmenu a span{
- background:url(images/new_tab_menu.png) left 45px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- height:20px;
- margin-right:7px;
- padding-left:7px;
-}
-.newtabmenu a:hover{
- background:url(images/new_tab_menu.png) right 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- color:#ffffff; /* hover over font */
-}
-.newtabmenu a:hover span{
- background:url(images/new_tab_menu.png) left 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
-}
-
-/* -------------------------------- */
-/* ACTIVE ELEMENTS */
-.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
- color:#000000; /* active font */
- background:url(images/new_tab_menu.png) right 0 no-repeat;
-}
-.newtabmenu_active a span, .newtabmenu_active a:hover span{
- background:url(images/new_tab_menu.png) left 0 no-repeat;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/metallic/no_big_logo b/usr/local/www/themes/metallic/no_big_logo
deleted file mode 100644
index 6e5c70d..0000000
--- a/usr/local/www/themes/metallic/no_big_logo
+++ /dev/null
@@ -1 +0,0 @@
-NO! DONT! \ No newline at end of file
diff --git a/usr/local/www/themes/metallic/rrdcolors.inc.php b/usr/local/www/themes/metallic/rrdcolors.inc.php
deleted file mode 100644
index dcb7a39..0000000
--- a/usr/local/www/themes/metallic/rrdcolors.inc.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/* $Id$ */
-/*
- rrdcolors.inc.php
- Part of pfSense
- Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/* This file is included by the RRD graphing page and sets the colors */
-
-/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* 95th Percentile Lines Out, In */
-$colortraffic95 = array('660000', 'FF0000');
-
-/* State Table pfrate, pfstates, pfnat, srcip, dstip */
-$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
-
-/* Processor Usage user, nice, system, int, processes */
-$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
-
-/* Memory Usage active, inact, free, cache, wire */
-$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
-
-/* MBUF Usage current, cache, total, max */
-$colormbuf = array('0080FF','00E344','FF0000','000000');
-
-/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
-$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
-$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
-/* Quality Graph Loss */
-$colorqualityloss = 'ee0000';
-
-/* Wireless Graph SNR, Rate, Channel*/
-/* Cellular Graph RSSI, */
-$colorwireless = array('333333','a83c3c','999999');
-
-/* SPAMD Times min area, avg area, max area, Time line */
-$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
-/* SPAMD Connections max area, min area, min line, max line, avg line */
-$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
-
-/* OpenVPN Users Online Users */
-$colorvpnusers = array('990000');
-
-/* Captive Portal Total Users Total Users */
-/* Captive Portal Concurrent Concurrent Users */
-$colorcaptiveportalusers = array('990000');
-
-?>
diff --git a/usr/local/www/themes/metallic/styles/jquery-ui-1.11.1.css b/usr/local/www/themes/metallic/styles/jquery-ui-1.11.1.css
deleted file mode 100644
index 8a8c54f..0000000
--- a/usr/local/www/themes/metallic/styles/jquery-ui-1.11.1.css
+++ /dev/null
@@ -1,1226 +0,0 @@
-/*! jQuery UI - v1.11.1 - 2014-09-22
-* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden {
- display: none;
-}
-.ui-helper-hidden-accessible {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
-}
-.ui-helper-reset {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- line-height: 1.3;
- text-decoration: none;
- font-size: 100%;
- list-style: none;
-}
-.ui-helper-clearfix:before,
-.ui-helper-clearfix:after {
- content: "";
- display: table;
- border-collapse: collapse;
-}
-.ui-helper-clearfix:after {
- clear: both;
-}
-.ui-helper-clearfix {
- min-height: 0; /* support: IE7 */
-}
-.ui-helper-zfix {
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- position: absolute;
- opacity: 0;
- filter:Alpha(Opacity=0); /* support: IE8 */
-}
-
-.ui-front {
- z-index: 100;
-}
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled {
- cursor: default !important;
-}
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- display: block;
- text-indent: -99999px;
- overflow: hidden;
- background-repeat: no-repeat;
-}
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-.ui-draggable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable {
- position: relative;
-}
-.ui-resizable-handle {
- position: absolute;
- font-size: 0.1px;
- display: block;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
- display: none;
-}
-.ui-resizable-n {
- cursor: n-resize;
- height: 7px;
- width: 100%;
- top: -5px;
- left: 0;
-}
-.ui-resizable-s {
- cursor: s-resize;
- height: 7px;
- width: 100%;
- bottom: -5px;
- left: 0;
-}
-.ui-resizable-e {
- cursor: e-resize;
- width: 7px;
- right: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-w {
- cursor: w-resize;
- width: 7px;
- left: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-se {
- cursor: se-resize;
- width: 12px;
- height: 12px;
- right: 1px;
- bottom: 1px;
-}
-.ui-resizable-sw {
- cursor: sw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- bottom: -5px;
-}
-.ui-resizable-nw {
- cursor: nw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- top: -5px;
-}
-.ui-resizable-ne {
- cursor: ne-resize;
- width: 9px;
- height: 9px;
- right: -5px;
- top: -5px;
-}
-.ui-selectable {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-selectable-helper {
- position: absolute;
- z-index: 100;
- border: 1px dotted black;
-}
-.ui-sortable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-accordion .ui-accordion-header {
- display: block;
- cursor: pointer;
- position: relative;
- margin: 2px 0 0 0;
- padding: .5em .5em .5em .7em;
- min-height: 0; /* support: IE7 */
- font-size: 100%;
-}
-.ui-accordion .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
- position: absolute;
- left: .5em;
- top: 50%;
- margin-top: -8px;
-}
-.ui-accordion .ui-accordion-content {
- padding: 1em 2.2em;
- border-top: 0;
- overflow: auto;
-}
-.ui-autocomplete {
- position: absolute;
- top: 0;
- left: 0;
- cursor: default;
-}
-.ui-button {
- display: inline-block;
- position: relative;
- padding: 0;
- line-height: normal;
- margin-right: .1em;
- cursor: pointer;
- vertical-align: middle;
- text-align: center;
- overflow: visible; /* removes extra width in IE */
-}
-.ui-button,
-.ui-button:link,
-.ui-button:visited,
-.ui-button:hover,
-.ui-button:active {
- text-decoration: none;
-}
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
- width: 2.2em;
-}
-/* button elements seem to need a little more width */
-button.ui-button-icon-only {
- width: 2.4em;
-}
-.ui-button-icons-only {
- width: 3.4em;
-}
-button.ui-button-icons-only {
- width: 3.7em;
-}
-
-/* button text element */
-.ui-button .ui-button-text {
- display: block;
- line-height: normal;
-}
-.ui-button-text-only .ui-button-text {
- padding: .4em 1em;
-}
-.ui-button-icon-only .ui-button-text,
-.ui-button-icons-only .ui-button-text {
- padding: .4em;
- text-indent: -9999999px;
-}
-.ui-button-text-icon-primary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 1em .4em 2.1em;
-}
-.ui-button-text-icon-secondary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 2.1em .4em 1em;
-}
-.ui-button-text-icons .ui-button-text {
- padding-left: 2.1em;
- padding-right: 2.1em;
-}
-/* no icon support for input elements, provide padding by default */
-input.ui-button {
- padding: .4em 1em;
-}
-
-/* button icon element(s) */
-.ui-button-icon-only .ui-icon,
-.ui-button-text-icon-primary .ui-icon,
-.ui-button-text-icon-secondary .ui-icon,
-.ui-button-text-icons .ui-icon,
-.ui-button-icons-only .ui-icon {
- position: absolute;
- top: 50%;
- margin-top: -8px;
-}
-.ui-button-icon-only .ui-icon {
- left: 50%;
- margin-left: -8px;
-}
-.ui-button-text-icon-primary .ui-button-icon-primary,
-.ui-button-text-icons .ui-button-icon-primary,
-.ui-button-icons-only .ui-button-icon-primary {
- left: .5em;
-}
-.ui-button-text-icon-secondary .ui-button-icon-secondary,
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
- right: .5em;
-}
-
-/* button sets */
-.ui-buttonset {
- margin-right: 7px;
-}
-.ui-buttonset .ui-button {
- margin-left: 0;
- margin-right: -.3em;
-}
-
-/* workarounds */
-/* reset extra padding in Firefox, see h5bp.com/l */
-input.ui-button::-moz-focus-inner,
-button.ui-button::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-.ui-datepicker {
- width: 17em;
- padding: .2em .2em 0;
- display: none;
-}
-.ui-datepicker .ui-datepicker-header {
- position: relative;
- padding: .2em 0;
-}
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-next {
- position: absolute;
- top: 2px;
- width: 1.8em;
- height: 1.8em;
-}
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
- top: 1px;
-}
-.ui-datepicker .ui-datepicker-prev {
- left: 2px;
-}
-.ui-datepicker .ui-datepicker-next {
- right: 2px;
-}
-.ui-datepicker .ui-datepicker-prev-hover {
- left: 1px;
-}
-.ui-datepicker .ui-datepicker-next-hover {
- right: 1px;
-}
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
- display: block;
- position: absolute;
- left: 50%;
- margin-left: -8px;
- top: 50%;
- margin-top: -8px;
-}
-.ui-datepicker .ui-datepicker-title {
- margin: 0 2.3em;
- line-height: 1.8em;
- text-align: center;
-}
-.ui-datepicker .ui-datepicker-title select {
- font-size: 1em;
- margin: 1px 0;
-}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year {
- width: 45%;
-}
-.ui-datepicker table {
- width: 100%;
- font-size: .9em;
- border-collapse: collapse;
- margin: 0 0 .4em;
-}
-.ui-datepicker th {
- padding: .7em .3em;
- text-align: center;
- font-weight: bold;
- border: 0;
-}
-.ui-datepicker td {
- border: 0;
- padding: 1px;
-}
-.ui-datepicker td span,
-.ui-datepicker td a {
- display: block;
- padding: .2em;
- text-align: right;
- text-decoration: none;
-}
-.ui-datepicker .ui-datepicker-buttonpane {
- background-image: none;
- margin: .7em 0 0 0;
- padding: 0 .2em;
- border-left: 0;
- border-right: 0;
- border-bottom: 0;
-}
-.ui-datepicker .ui-datepicker-buttonpane button {
- float: right;
- margin: .5em .2em .4em;
- cursor: pointer;
- padding: .2em .6em .3em .6em;
- width: auto;
- overflow: visible;
-}
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
- float: left;
-}
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi {
- width: auto;
-}
-.ui-datepicker-multi .ui-datepicker-group {
- float: left;
-}
-.ui-datepicker-multi .ui-datepicker-group table {
- width: 95%;
- margin: 0 auto .4em;
-}
-.ui-datepicker-multi-2 .ui-datepicker-group {
- width: 50%;
-}
-.ui-datepicker-multi-3 .ui-datepicker-group {
- width: 33.3%;
-}
-.ui-datepicker-multi-4 .ui-datepicker-group {
- width: 25%;
-}
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
- border-left-width: 0;
-}
-.ui-datepicker-multi .ui-datepicker-buttonpane {
- clear: left;
-}
-.ui-datepicker-row-break {
- clear: both;
- width: 100%;
- font-size: 0;
-}
-
-/* RTL support */
-.ui-datepicker-rtl {
- direction: rtl;
-}
-.ui-datepicker-rtl .ui-datepicker-prev {
- right: 2px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next {
- left: 2px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
- right: 1px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
- left: 1px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
- clear: right;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
- float: left;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
-.ui-datepicker-rtl .ui-datepicker-group {
- float: right;
-}
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
- border-right-width: 0;
- border-left-width: 1px;
-}
-.ui-dialog {
- overflow: hidden;
- position: absolute;
- top: 0;
- left: 0;
- padding: .2em;
- outline: 0;
-}
-.ui-dialog .ui-dialog-titlebar {
- padding: .4em 1em;
- position: relative;
-}
-.ui-dialog .ui-dialog-title {
- float: left;
- margin: .1em 0;
- white-space: nowrap;
- width: 90%;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.ui-dialog .ui-dialog-titlebar-close {
- position: absolute;
- right: .3em;
- top: 50%;
- width: 20px;
- margin: -10px 0 0 0;
- padding: 1px;
- height: 20px;
-}
-.ui-dialog .ui-dialog-content {
- position: relative;
- border: 0;
- padding: .5em 1em;
- background: none;
- overflow: auto;
-}
-.ui-dialog .ui-dialog-buttonpane {
- text-align: left;
- border-width: 1px 0 0 0;
- background-image: none;
- margin-top: .5em;
- padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
- float: right;
-}
-.ui-dialog .ui-dialog-buttonpane button {
- margin: .5em .4em .5em 0;
- cursor: pointer;
-}
-.ui-dialog .ui-resizable-se {
- width: 12px;
- height: 12px;
- right: -5px;
- bottom: -5px;
- background-position: 16px 16px;
-}
-.ui-draggable .ui-dialog-titlebar {
- cursor: move;
-}
-.ui-menu {
- list-style: none;
- padding: 0;
- margin: 0;
- display: block;
- outline: none;
-}
-.ui-menu .ui-menu {
- position: absolute;
-}
-.ui-menu .ui-menu-item {
- position: relative;
- margin: 0;
- padding: 3px 1em 3px .4em;
- cursor: pointer;
- min-height: 0; /* support: IE7 */
- /* support: IE10, see #8844 */
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
-}
-.ui-menu .ui-menu-divider {
- margin: 5px 0;
- height: 0;
- font-size: 0;
- line-height: 0;
- border-width: 1px 0 0 0;
-}
-.ui-menu .ui-state-focus,
-.ui-menu .ui-state-active {
- margin: -1px;
-}
-
-/* icon support */
-.ui-menu-icons {
- position: relative;
-}
-.ui-menu-icons .ui-menu-item {
- padding-left: 2em;
-}
-
-/* left-aligned */
-.ui-menu .ui-icon {
- position: absolute;
- top: 0;
- bottom: 0;
- left: .2em;
- margin: auto 0;
-}
-
-/* right-aligned */
-.ui-menu .ui-menu-icon {
- left: auto;
- right: 0;
-}
-.ui-progressbar {
- height: 1em;
- text-align: left;
- overflow: hidden;
-}
-.ui-progressbar .ui-progressbar-value {
- margin: -1px;
- height: 100%;
- background-color: #990000;
-}
-.ui-progressbar .ui-progressbar-overlay {
- background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
- height: 100%;
- filter: alpha(opacity=25); /* support: IE8 */
- opacity: 0.25;
-}
-.ui-progressbar-indeterminate .ui-progressbar-value {
- background-image: none;
-}
-.ui-selectmenu-menu {
- padding: 0;
- margin: 0;
- position: absolute;
- top: 0;
- left: 0;
- display: none;
-}
-.ui-selectmenu-menu .ui-menu {
- overflow: auto;
- /* Support: IE7 */
- overflow-x: hidden;
- padding-bottom: 1px;
-}
-.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
- font-size: 1em;
- font-weight: bold;
- line-height: 1.5;
- padding: 2px 0.4em;
- margin: 0.5em 0 0 0;
- height: auto;
- border: 0;
-}
-.ui-selectmenu-open {
- display: block;
-}
-.ui-selectmenu-button {
- display: inline-block;
- overflow: hidden;
- position: relative;
- text-decoration: none;
- cursor: pointer;
-}
-.ui-selectmenu-button span.ui-icon {
- right: 0.5em;
- left: auto;
- margin-top: -8px;
- position: absolute;
- top: 50%;
-}
-.ui-selectmenu-button span.ui-selectmenu-text {
- text-align: left;
- padding: 0.4em 2.1em 0.4em 1em;
- display: block;
- line-height: 1.4;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.ui-slider {
- position: relative;
- text-align: left;
-}
-.ui-slider .ui-slider-handle {
- position: absolute;
- z-index: 2;
- width: 1.2em;
- height: 1.2em;
- cursor: default;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-slider .ui-slider-range {
- position: absolute;
- z-index: 1;
- font-size: .7em;
- display: block;
- border: 0;
- background-position: 0 0;
-}
-
-/* support: IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
- filter: inherit;
-}
-
-.ui-slider-horizontal {
- height: .8em;
-}
-.ui-slider-horizontal .ui-slider-handle {
- top: -.3em;
- margin-left: -.6em;
-}
-.ui-slider-horizontal .ui-slider-range {
- top: 0;
- height: 100%;
-}
-.ui-slider-horizontal .ui-slider-range-min {
- left: 0;
-}
-.ui-slider-horizontal .ui-slider-range-max {
- right: 0;
-}
-
-.ui-slider-vertical {
- width: .8em;
- height: 100px;
-}
-.ui-slider-vertical .ui-slider-handle {
- left: -.3em;
- margin-left: 0;
- margin-bottom: -.6em;
-}
-.ui-slider-vertical .ui-slider-range {
- left: 0;
- width: 100%;
-}
-.ui-slider-vertical .ui-slider-range-min {
- bottom: 0;
-}
-.ui-slider-vertical .ui-slider-range-max {
- top: 0;
-}
-.ui-spinner {
- position: relative;
- display: inline-block;
- overflow: hidden;
- padding: 0;
- vertical-align: middle;
-}
-.ui-spinner-input {
- border: none;
- background: none;
- color: inherit;
- padding: 0;
- margin: .2em 0;
- vertical-align: middle;
- margin-left: .4em;
- margin-right: 22px;
-}
-.ui-spinner-button {
- width: 16px;
- height: 50%;
- font-size: .5em;
- padding: 0;
- margin: 0;
- text-align: center;
- position: absolute;
- cursor: default;
- display: block;
- overflow: hidden;
- right: 0;
-}
-/* more specificity required here to override default borders */
-.ui-spinner a.ui-spinner-button {
- border-top: none;
- border-bottom: none;
- border-right: none;
-}
-/* vertically center icon */
-.ui-spinner .ui-icon {
- position: absolute;
- margin-top: -8px;
- top: 50%;
- left: 0;
-}
-.ui-spinner-up {
- top: 0;
-}
-.ui-spinner-down {
- bottom: 0;
-}
-
-/* TR overrides */
-.ui-spinner .ui-icon-triangle-1-s {
- /* need to fix icons sprite */
- background-position: -65px -16px;
-}
-.ui-tabs {
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
- padding: .2em;
-}
-.ui-tabs .ui-tabs-nav {
- margin: 0;
- padding: .2em .2em 0;
-}
-.ui-tabs .ui-tabs-nav li {
- list-style: none;
- float: left;
- position: relative;
- top: 0;
- margin: 1px .2em 0 0;
- border-bottom-width: 0;
- padding: 0;
- white-space: nowrap;
-}
-.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
- float: left;
- padding: .5em 1em;
- text-decoration: none;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
- margin-bottom: -1px;
- padding-bottom: 1px;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
- cursor: text;
-}
-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
- cursor: pointer;
-}
-.ui-tabs .ui-tabs-panel {
- display: block;
- border-width: 0;
- padding: 1em 1.4em;
- background: none;
-}
-.ui-tooltip {
- padding: 8px;
- position: absolute;
- z-index: 9999;
- max-width: 300px;
- -webkit-box-shadow: 0 0 5px #aaa;
- box-shadow: 0 0 5px #aaa;
-}
-body .ui-tooltip {
- border-width: 2px;
-}
-
-/* Component containers
-----------------------------------*/
-.ui-widget {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1.1em;
-}
-.ui-widget .ui-widget {
- font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1em;
-}
-.ui-widget-content {
- border: 1px solid #aaaaaa;
- background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
- color: #333333;
-}
-.ui-widget-content a {
- color: #333333;
-}
-.ui-widget-header {
- border: 1px solid #bbbbbb;
- /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
- color: #444444;
- font-weight: bold;
-}
-.ui-widget-header a {
- color: #444444;
-}
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default {
- border: 1px solid #cccccc;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #3383bb;
-}
-.ui-state-default a,
-.ui-state-default a:link,
-.ui-state-default a:visited {
- color: #3383bb;
- text-decoration: none;
-}
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus {
- border: 1px solid #bbbbbb;
- background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #599fcf;
-}
-.ui-state-hover a,
-.ui-state-hover a:hover,
-.ui-state-hover a:link,
-.ui-state-hover a:visited,
-.ui-state-focus a,
-.ui-state-focus a:hover,
-.ui-state-focus a:link,
-.ui-state-focus a:visited {
- color: #599fcf;
- text-decoration: none;
-}
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active {
- border: 1px solid #999999;
- background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #ffffff;
-}
-.ui-state-active a,
-.ui-state-active a:link,
-.ui-state-active a:visited {
- color: #ffffff;
- text-decoration: none;
-}
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight,
-.ui-widget-header .ui-state-highlight {
- border: 1px solid #ffffff;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
- color: #444444;
-}
-.ui-state-highlight a,
-.ui-widget-content .ui-state-highlight a,
-.ui-widget-header .ui-state-highlight a {
- color: #444444;
-}
-.ui-state-error,
-.ui-widget-content .ui-state-error,
-.ui-widget-header .ui-state-error {
- border: 1px solid #c0402a;
- background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
- color: #ffffff;
-}
-.ui-state-error a,
-.ui-widget-content .ui-state-error a,
-.ui-widget-header .ui-state-error a {
- color: #ffffff;
-}
-.ui-state-error-text,
-.ui-widget-content .ui-state-error-text,
-.ui-widget-header .ui-state-error-text {
- color: #ffffff;
-}
-.ui-priority-primary,
-.ui-widget-content .ui-priority-primary,
-.ui-widget-header .ui-priority-primary {
- font-weight: bold;
-}
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary,
-.ui-widget-header .ui-priority-secondary {
- opacity: .7;
- filter:Alpha(Opacity=70); /* support: IE8 */
- font-weight: normal;
-}
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled,
-.ui-widget-header .ui-state-disabled {
- opacity: .35;
- filter:Alpha(Opacity=35); /* support: IE8 */
- background-image: none;
-}
-.ui-state-disabled .ui-icon {
- filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
-}
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- width: 16px;
- height: 16px;
-}
-.ui-icon,
-.ui-widget-content .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-widget-header .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-state-default .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
-}
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-active .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
-}
-.ui-state-highlight .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
-}
-
-/* positioning */
-.ui-icon-blank { background-position: 16px 16px; }
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-on { background-position: -96px -144px; }
-.ui-icon-radio-off { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
- border-top-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
- border-top-right-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
- border-bottom-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
- border-bottom-right-radius: 6px;
-}
-
-/* Overlays */
-.ui-widget-overlay {
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
- opacity: .8;
- filter: Alpha(Opacity=80); /* support: IE8 */
-}
-.ui-widget-shadow {
- margin: -4px 0 0 -4px;
- padding: 4px;
- background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
- opacity: .6;
- filter: Alpha(Opacity=60); /* support: IE8 */
- border-radius: 0pxdow;
-}
diff --git a/usr/local/www/themes/nervecenter/all.css b/usr/local/www/themes/nervecenter/all.css
deleted file mode 100644
index ba0a5e4..0000000
--- a/usr/local/www/themes/nervecenter/all.css
+++ /dev/null
@@ -1,1301 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, sans-serif;
- font-size: 0.9em;
-
-}
-
-.nowrap { white-space: nowrap; }
-
-.infobox {
- width:100%;
-}
-
-.addgatewaybox {
- background-color: #990000;
- border-style: none none none none;
- width: 225px;
-}
-
-.infoboxsave {
- padding-right: 10px;
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-.inputerrorsleft {
- background-color: #990000;
- width: 36px;
-}
-
-.inputerrorsright {
- background-color: #FFD9D1;
- color: #000000;
- font-size: 11px;
- padding-left: 8px;
- padding-top: 6px;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 220px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 11px;
- font-family: "Trebuchet MS", sans-serif;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- background: url('images/background.gif') no-repeat;
- background-position : center 0px;
- background-color: #999999;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* style of disabled formelements */
-#wrap div {margin:1em 0}
-[disabled] {
- color:#666666;
- background:#eeeeee;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
- font-size: 14px;
- color: #cccccc;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff;
- text-align: center;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- position: relative;
- top: -25px;
- left: 3px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- width: 80px;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #990000;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background-color: #666666;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 5px;
- margin-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listrborder {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-left: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- color: #FFFFFF;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #DDDDDD;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-/* style of disabled formelements */
-[disabled] {
- color:#666666;
- background:#eeeeee;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 6px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-#login {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 340px;
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 50px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login #username, #password, #password2 {
- font-size: small;
- width: 60%;
- padding-left: 19px;
- padding: 3px;
- margin: 0em;
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-/* Widget CSS */
-.widgetsubheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #B1B1B1;
- padding-right: 6px;
- padding-left: 6px;
- color: #000000;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetdiv{
- margin:5px;
- padding: 5px;
- background:#CCCCCC;
-}
-.widgetconfigdiv{
- background:#BBBBBB;
- font-size: 11px;
- color: #000000;
- padding-right: 5px;
- padding-left: 5px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-
-div#log div.log-entry-mini {
- clear: both;
-}
-
-div#log div.log-entry-mini span {
- padding: 2px 2px 2px 2px;
- padding-left: 6px;
-}
-
-div#log span.log-action-mini-header,
-div#log span.log-time-mini-header,
-div#log span.log-interface-mini-header,
-div#log span.log-source-mini-header,
-div#log span.log-destination-mini-header,
-div#log span.log-protocol-mini-header {
- float: left;
- text-align: left;
- background-color: #B1B1B1;
- font-size: 12px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-time-mini,
-div#log span.log-interface-mini,
-div#log span.log-source-mini,
-div#log span.log-destination-mini,
-div#log span.log-protocol-mini {
- float: left;
- text-align: left;
- background-color: #FFFFFF;
- font-size: 11px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-action-mini-header {
- width: 6%;
-}
-
-div#log span.log-time-mini,
-div#log span.log-time-mini-header {
- width: 19%;
-}
-
-div#log span.log-interface-mini,
-div#log span.log-interface-mini-header {
- width: 8%;
-}
-
-div#log span.log-source-mini,
-div#log span.log-source-mini-header {
- width: 23%;
-}
-
-div#log span.log-destination-mini,
-div#log span.log-destination-mini-header {
- width: 31%;
-}
-
-div#log span.log-protocol-mini,
-div#log span.log-protocol-mini-header {
- width: 8%;
- border-right: 1px solid #999;
-}
-
-/* Sortable tables */
-table.sortable thead {
- cursor: default;
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-
-/*thermal_sensors widget styles*/
-
-.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
-.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
-.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
- background-color: LimeGreen;
- border-top-width: 2px; border-top-color: Lime;
- border-left-width: 0px;
- border-right-width: 0px;
- border-bottom-width: 2px; border-bottom-color: Green;
-}
-.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
-.thermalSensorText { float: left; height: 20px; top: 3px; }
-.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
-
-.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-
-.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
-
-.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
-
-/* widget textarea styles - full width */
-.textarea_widget {
- width: 100%;
- resize:vertical;
- -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
- -moz-box-sizing: border-box; /* Firefox, other Gecko */
- box-sizing: border-box; /* IE 8+ */
-}
diff --git a/usr/local/www/themes/nervecenter/apple-touch-icon.png b/usr/local/www/themes/nervecenter/apple-touch-icon.png
deleted file mode 100755
index 7a4b975..0000000
--- a/usr/local/www/themes/nervecenter/apple-touch-icon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/bottom-loader.js b/usr/local/www/themes/nervecenter/bottom-loader.js
deleted file mode 100644
index a21f775..0000000
--- a/usr/local/www/themes/nervecenter/bottom-loader.js
+++ /dev/null
@@ -1,10 +0,0 @@
-//<![CDATA[
-
- NiftyCheck();
- Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
- Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
- Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
- Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
- Rounded("div#topbox","all","#FFF","#990000","smooth");
-
-//]]>
diff --git a/usr/local/www/themes/nervecenter/favicon.ico b/usr/local/www/themes/nervecenter/favicon.ico
deleted file mode 100644
index 3440bf2..0000000
--- a/usr/local/www/themes/nervecenter/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/graphlink.css b/usr/local/www/themes/nervecenter/graphlink.css
deleted file mode 100644
index 13f65f0..0000000
--- a/usr/local/www/themes/nervecenter/graphlink.css
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- $Id$
-
- This file is part of the GraphLink software.
- GraphLink is distributed under the MIT License.
- Copyright (C) 2005-2006 Max Khitrov <max@mxsoft.org>
-*******************************************************************************/
-
-/**
- * Defines the background image used for the graph, as well as the actual data
- * locations.
- * Use padding-left and padding-top to align the data area correctly with your
- * background image.
- * Width and height should same as the dimensions of the image, minus the
- * padding values in both directions.
- */
-div.GraphLink {
- width: 212px;
- height: 60px;
- padding-left: 38px;
- padding-top: 10px;
- background-image: url(/themes/nervecenter/images/misc/graph.png);
- overflow: hidden;
-}
-
-/**
- * Defines the data display area. Modify to fit your background image.
- */
-div.GraphLinkData {
- width: 200px;
- height: 50px;
- overflow: hidden;
-}
-
-/**
- * Defines the look of one bar. Nothing to change here other than the color.
- */
-span.GraphLinkBar {
- background-color: #990000;
- height: 100%;
- float: left;
- overflow: hidden;
-}
diff --git a/usr/local/www/themes/nervecenter/images/alert_bgr.png b/usr/local/www/themes/nervecenter/images/alert_bgr.png
deleted file mode 100755
index 39901be..0000000
--- a/usr/local/www/themes/nervecenter/images/alert_bgr.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/background.gif b/usr/local/www/themes/nervecenter/images/background.gif
deleted file mode 100755
index bdfa5b3..0000000
--- a/usr/local/www/themes/nervecenter/images/background.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/background.png b/usr/local/www/themes/nervecenter/images/background.png
deleted file mode 100755
index e68893d..0000000
--- a/usr/local/www/themes/nervecenter/images/background.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/footer.png b/usr/local/www/themes/nervecenter/images/footer.png
deleted file mode 100755
index 90b1022..0000000
--- a/usr/local/www/themes/nervecenter/images/footer.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/header.png b/usr/local/www/themes/nervecenter/images/header.png
deleted file mode 100755
index 3b38584..0000000
--- a/usr/local/www/themes/nervecenter/images/header.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/help.png b/usr/local/www/themes/nervecenter/images/help.png
deleted file mode 100755
index 1de05e3..0000000
--- a/usr/local/www/themes/nervecenter/images/help.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/horizontal.gif b/usr/local/www/themes/nervecenter/images/horizontal.gif
deleted file mode 100755
index a280dcb..0000000
--- a/usr/local/www/themes/nervecenter/images/horizontal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/favicon.ico b/usr/local/www/themes/nervecenter/images/icons/favicon.ico
deleted file mode 100644
index 3440bf2..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_3g.gif b/usr/local/www/themes/nervecenter/images/icons/icon_3g.gif
deleted file mode 100755
index 46ccb92..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_3g.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/nervecenter/images/icons/icon_3g_inactive.gif
deleted file mode 100755
index cf983e4..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_3g_inactive.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_advanced.gif b/usr/local/www/themes/nervecenter/images/icons/icon_advanced.gif
deleted file mode 100755
index 3ede1ff..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_advanced.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_advanced_s.gif b/usr/local/www/themes/nervecenter/images/icons/icon_advanced_s.gif
deleted file mode 100755
index b233549..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_advanced_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_alert.gif b/usr/local/www/themes/nervecenter/images/icons/icon_alert.gif
deleted file mode 100755
index 7646941..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_alert.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_alias_host.gif b/usr/local/www/themes/nervecenter/images/icons/icon_alias_host.gif
deleted file mode 100755
index ad43e17..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_alias_host.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_alias_net.gif b/usr/local/www/themes/nervecenter/images/icons/icon_alias_net.gif
deleted file mode 100755
index abd1b8b..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_alias_net.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_alias_port.gif b/usr/local/www/themes/nervecenter/images/icons/icon_alias_port.gif
deleted file mode 100755
index 4acf2aa..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_alias_port.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_alias_url.gif b/usr/local/www/themes/nervecenter/images/icons/icon_alias_url.gif
deleted file mode 100755
index 660571e..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_alias_url.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/nervecenter/images/icons/icon_alias_url_reload.gif
deleted file mode 100755
index 55c1c4a..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_alias_url_reload.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_block.gif b/usr/local/www/themes/nervecenter/images/icons/icon_block.gif
deleted file mode 100755
index 670c968..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_block.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_block_add.gif b/usr/local/www/themes/nervecenter/images/icons/icon_block_add.gif
deleted file mode 100755
index eb726d6..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_block_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_block_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_block_d.gif
deleted file mode 100755
index e6345fe..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_block_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_cablenic.gif b/usr/local/www/themes/nervecenter/images/icons/icon_cablenic.gif
deleted file mode 100755
index a071c66..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_cablenic.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_cal.gif b/usr/local/www/themes/nervecenter/images/icons/icon_cal.gif
deleted file mode 100755
index a9c7c87..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_cal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_cal_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_cal_mo.gif
deleted file mode 100755
index 1647e2f..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_cal_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_carp.gif b/usr/local/www/themes/nervecenter/images/icons/icon_carp.gif
deleted file mode 100755
index 9454a82..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_carp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_carp_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_carp_d.gif
deleted file mode 100755
index 2ba8db2..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_carp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_chain.png b/usr/local/www/themes/nervecenter/images/icons/icon_chain.png
deleted file mode 100644
index 12db07a..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_chain.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_check.gif b/usr/local/www/themes/nervecenter/images/icons/icon_check.gif
deleted file mode 100755
index 393674d..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_check.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_clock_green.gif b/usr/local/www/themes/nervecenter/images/icons/icon_clock_green.gif
deleted file mode 100755
index e171ba8..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_clock_green.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_clock_grey.gif b/usr/local/www/themes/nervecenter/images/icons/icon_clock_grey.gif
deleted file mode 100755
index 00c865a..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_clock_grey.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_clock_red.gif b/usr/local/www/themes/nervecenter/images/icons/icon_clock_red.gif
deleted file mode 100755
index 7b412ee..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_clock_red.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_close.gif b/usr/local/www/themes/nervecenter/images/icons/icon_close.gif
deleted file mode 100755
index e0f86a7..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_close.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_configure.gif b/usr/local/www/themes/nervecenter/images/icons/icon_configure.gif
deleted file mode 100755
index 7182e0d..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_configure.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_down.gif b/usr/local/www/themes/nervecenter/images/icons/icon_down.gif
deleted file mode 100755
index b71a9c5..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_down_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_down_d.gif
deleted file mode 100755
index 70a7473..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_down_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_down_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_down_mo.gif
deleted file mode 100755
index 584587a..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_down_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_e.gif b/usr/local/www/themes/nervecenter/images/icons/icon_e.gif
deleted file mode 100755
index 2950800..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_e.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_e_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_e_mo.gif
deleted file mode 100755
index 9ba5738..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_e_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_error.gif b/usr/local/www/themes/nervecenter/images/icons/icon_error.gif
deleted file mode 100755
index e0fa659..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_error.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_exclam.gif b/usr/local/www/themes/nervecenter/images/icons/icon_exclam.gif
deleted file mode 100755
index 36c2ec7..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_exclam.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_flag_de.png b/usr/local/www/themes/nervecenter/images/icons/icon_flag_de.png
deleted file mode 100755
index 069cbbe..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_flag_de.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_flag_en.png b/usr/local/www/themes/nervecenter/images/icons/icon_flag_en.png
deleted file mode 100755
index bd7f9a5..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_flag_en.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_flag_es.png b/usr/local/www/themes/nervecenter/images/icons/icon_flag_es.png
deleted file mode 100755
index 434776c..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_flag_es.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/nervecenter/images/icons/icon_flag_pt_BR.png
deleted file mode 100755
index f786349..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_flag_pt_BR.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_cert.png
deleted file mode 100755
index 48a34b6..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_cert.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_file.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_file.png
deleted file mode 100755
index 48a9ed2..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_file.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_group.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_group.png
deleted file mode 100755
index 7d929c0..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_host.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_host.png
deleted file mode 100755
index 867ef2c..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_host.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_imp.png
deleted file mode 100755
index f667cfc..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_imp.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_mail.png
deleted file mode 100755
index d2d4548..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_mail.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_pwd.png
deleted file mode 100755
index 06b53a1..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_pwd.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_search.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_search.png
deleted file mode 100755
index 33de926..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_search.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_time.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_time.png
deleted file mode 100755
index aa8300a..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_time.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_unknown.png
deleted file mode 100755
index 1857d0e..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_unknown.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_url.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_url.png
deleted file mode 100755
index cf56792..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_url.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_user.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_user.png
deleted file mode 100755
index e00eebe..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_fw-update.gif b/usr/local/www/themes/nervecenter/images/icons/icon_fw-update.gif
deleted file mode 100755
index 52c18ac..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_fw-update.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_help.gif b/usr/local/www/themes/nervecenter/images/icons/icon_help.gif
deleted file mode 100644
index 84c84db..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_help.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_ifalias.gif b/usr/local/www/themes/nervecenter/images/icons/icon_ifalias.gif
deleted file mode 100755
index 0c569a7..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_ifalias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_ifalias_d.gif
deleted file mode 100755
index faa84d4..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_ifalias_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_import_alias.gif b/usr/local/www/themes/nervecenter/images/icons/icon_import_alias.gif
deleted file mode 100755
index d11a5f0..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_import_alias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_in.gif b/usr/local/www/themes/nervecenter/images/icons/icon_in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_in_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_info_pkg.gif b/usr/local/www/themes/nervecenter/images/icons/icon_info_pkg.gif
deleted file mode 100755
index cd3a532..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_info_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_interface_down.gif b/usr/local/www/themes/nervecenter/images/icons/icon_interface_down.gif
deleted file mode 100755
index 0626655..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_interface_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_interface_up.gif b/usr/local/www/themes/nervecenter/images/icons/icon_interface_up.gif
deleted file mode 100755
index 1449513..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_interface_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_left.gif b/usr/local/www/themes/nervecenter/images/icons/icon_left.gif
deleted file mode 100755
index 8effefe..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_left_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_left_d.gif
deleted file mode 100755
index c778014..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_left_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_left_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_left_mo.gif
deleted file mode 100755
index 84c6fa2..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_left_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_log.gif b/usr/local/www/themes/nervecenter/images/icons/icon_log.gif
deleted file mode 100755
index 4a1983a..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_log.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_log_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_log_d.gif
deleted file mode 100755
index d31bd9b..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_log_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_log_s.gif b/usr/local/www/themes/nervecenter/images/icons/icon_log_s.gif
deleted file mode 100755
index f9fda33..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_log_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_log_s_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_log_s_d.gif
deleted file mode 100755
index fb2c05f..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_log_s_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_logs.gif b/usr/local/www/themes/nervecenter/images/icons/icon_logs.gif
deleted file mode 100644
index afe0104..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_logs.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_match.gif b/usr/local/www/themes/nervecenter/images/icons/icon_match.gif
deleted file mode 100644
index 215571f..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_match.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_match_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_match_d.gif
deleted file mode 100644
index 6e4c364..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_match_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_minus.gif b/usr/local/www/themes/nervecenter/images/icons/icon_minus.gif
deleted file mode 100755
index 417544f..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_minus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_open.gif b/usr/local/www/themes/nervecenter/images/icons/icon_open.gif
deleted file mode 100755
index ac3da14..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_open.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_other.gif b/usr/local/www/themes/nervecenter/images/icons/icon_other.gif
deleted file mode 100755
index e6f780f..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_other.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_other_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_other_d.gif
deleted file mode 100755
index b08d970..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_other_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_out.gif b/usr/local/www/themes/nervecenter/images/icons/icon_out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_out_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_parp.gif b/usr/local/www/themes/nervecenter/images/icons/icon_parp.gif
deleted file mode 100755
index 96acaf3..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_parp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_parp_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_parp_d.gif
deleted file mode 100755
index 7d7d00e..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_parp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_pass.gif b/usr/local/www/themes/nervecenter/images/icons/icon_pass.gif
deleted file mode 100755
index fe1bb0d..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_pass.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_pass_add.gif b/usr/local/www/themes/nervecenter/images/icons/icon_pass_add.gif
deleted file mode 100755
index f7f4c20..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_pass_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_pass_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_pass_d.gif
deleted file mode 100755
index 6adc431..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_pass_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_plus.gif b/usr/local/www/themes/nervecenter/images/icons/icon_plus.gif
deleted file mode 100755
index 2a94eeb..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_plus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl.gif b/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl.gif
deleted file mode 100755
index 8dcd7c0..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl_p.gif
deleted file mode 100755
index 0c79849..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_plus_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_plus_d.gif
deleted file mode 100755
index ebc7457..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_plus_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_plus_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_plus_mo.gif
deleted file mode 100755
index 1c7ca08..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_plus_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_plus_p.gif b/usr/local/www/themes/nervecenter/images/icons/icon_plus_p.gif
deleted file mode 100755
index eb41284..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_plus_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall.gif
deleted file mode 100755
index d78b867..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_d.gif
deleted file mode 100755
index 13658f7..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_mo.gif
deleted file mode 100755
index 90b576e..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg.gif
deleted file mode 100755
index 9aebb03..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_d.gif
deleted file mode 100755
index 4ab4992..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_mo.gif
deleted file mode 100755
index 7025d20..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml.gif
deleted file mode 100755
index 4542432..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_d.gif
deleted file mode 100755
index 8d3a68d..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_mo.gif
deleted file mode 100755
index 15e0aed..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reject.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reject.gif
deleted file mode 100755
index 5565cd6..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_reject.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reject_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reject_d.gif
deleted file mode 100755
index 6c09fae..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_reject_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_right.gif b/usr/local/www/themes/nervecenter/images/icons/icon_right.gif
deleted file mode 100755
index fdf2d8b..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_restart.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_restart.gif
deleted file mode 100755
index e49fbd7..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_service_restart.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_restart_d.gif
deleted file mode 100755
index a5d6d7c..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_service_restart_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_running.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_running.gif
deleted file mode 100644
index 543fd56..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_service_running.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_start.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_start.gif
deleted file mode 100755
index 09bb58f..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_service_start.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_start_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_start_d.gif
deleted file mode 100755
index f58f111..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_service_start_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_status.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_status.gif
deleted file mode 100644
index a93bcfb..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_service_status.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_stop.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_stop.gif
deleted file mode 100755
index 922addc..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_service_stop.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_stop_d.gif
deleted file mode 100755
index b4cfdea..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_service_stop_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_stopped.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_stopped.gif
deleted file mode 100644
index f93a25d..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_service_stopped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_services_restart_mo.gif
deleted file mode 100755
index a092b40..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_services_restart_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_services_start_mo.gif
deleted file mode 100755
index ecdb58f..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_services_start_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_services_stop_mo.gif
deleted file mode 100755
index c00e208..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_services_stop_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_system-group-grey.png b/usr/local/www/themes/nervecenter/images/icons/icon_system-group-grey.png
deleted file mode 100755
index d7b964d..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_system-group-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_system-group.png b/usr/local/www/themes/nervecenter/images/icons/icon_system-group.png
deleted file mode 100755
index 1c974f2..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_system-group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_system-user-grey.png b/usr/local/www/themes/nervecenter/images/icons/icon_system-user-grey.png
deleted file mode 100755
index 2f6047d..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_system-user-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_system-user.png b/usr/local/www/themes/nervecenter/images/icons/icon_system-user.png
deleted file mode 100755
index ef82156..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_system-user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/nervecenter/images/icons/icon_system_lock_screen.png
deleted file mode 100755
index 30f306d..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_system_lock_screen.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_system_logout.png b/usr/local/www/themes/nervecenter/images/icons/icon_system_logout.png
deleted file mode 100755
index 9bbb6c7..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_system_logout.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_trapped.gif b/usr/local/www/themes/nervecenter/images/icons/icon_trapped.gif
deleted file mode 100755
index ffeb2cd..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_trapped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_trapped_p.gif b/usr/local/www/themes/nervecenter/images/icons/icon_trapped_p.gif
deleted file mode 100755
index 6d46aaf..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_trapped_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule.gif b/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule.gif
deleted file mode 100755
index e15ab6c..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule_d.gif
deleted file mode 100755
index f776281..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_up.gif b/usr/local/www/themes/nervecenter/images/icons/icon_up.gif
deleted file mode 100755
index 883c5a2..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_up_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_up_d.gif
deleted file mode 100755
index 0ddcce2..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_up_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_up_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_up_mo.gif
deleted file mode 100755
index 9f869a4..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_up_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_wlan.gif b/usr/local/www/themes/nervecenter/images/icons/icon_wlan.gif
deleted file mode 100755
index 1f0addc..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_wlan.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_wlan_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_wlan_d.gif
deleted file mode 100755
index 35bf580..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_wlan_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_wol_all.gif b/usr/local/www/themes/nervecenter/images/icons/icon_wol_all.gif
deleted file mode 100755
index 2d22182..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_wol_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/nervecenter/images/icons/icon_wzd_nsaved.png
deleted file mode 100755
index 21cb27d..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_wzd_nsaved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_wzd_saved.png b/usr/local/www/themes/nervecenter/images/icons/icon_wzd_saved.png
deleted file mode 100755
index ab82946..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_wzd_saved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_x.gif b/usr/local/www/themes/nervecenter/images/icons/icon_x.gif
deleted file mode 100755
index 24e4d49..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_x_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_x_d.gif
deleted file mode 100755
index d2bfbc8..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_x_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_x_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_x_mo.gif
deleted file mode 100755
index da7b57c..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_x_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_x_p.gif b/usr/local/www/themes/nervecenter/images/icons/icon_x_p.gif
deleted file mode 100755
index 8828fa6..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/icon_x_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/in.gif b/usr/local/www/themes/nervecenter/images/icons/in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/in_d.gif b/usr/local/www/themes/nervecenter/images/icons/in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/out.gif b/usr/local/www/themes/nervecenter/images/icons/out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/icons/out_d.gif b/usr/local/www/themes/nervecenter/images/icons/out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/nervecenter/images/icons/out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/log.png b/usr/local/www/themes/nervecenter/images/log.png
deleted file mode 100755
index 762ba80..0000000
--- a/usr/local/www/themes/nervecenter/images/log.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/logo.gif b/usr/local/www/themes/nervecenter/images/logo.gif
deleted file mode 100755
index a71ce5a..0000000
--- a/usr/local/www/themes/nervecenter/images/logo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/logobig.jpg b/usr/local/www/themes/nervecenter/images/logobig.jpg
deleted file mode 100755
index 2ef196d..0000000
--- a/usr/local/www/themes/nervecenter/images/logobig.jpg
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/menu_down.gif b/usr/local/www/themes/nervecenter/images/menu_down.gif
deleted file mode 100755
index 137de8d..0000000
--- a/usr/local/www/themes/nervecenter/images/menu_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/menu_footer.gif b/usr/local/www/themes/nervecenter/images/menu_footer.gif
deleted file mode 100755
index d06faa4..0000000
--- a/usr/local/www/themes/nervecenter/images/menu_footer.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/menu_right.gif b/usr/local/www/themes/nervecenter/images/menu_right.gif
deleted file mode 100755
index 881327c..0000000
--- a/usr/local/www/themes/nervecenter/images/menu_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/metal_bgr.gif b/usr/local/www/themes/nervecenter/images/metal_bgr.gif
deleted file mode 100755
index a0ca6c8..0000000
--- a/usr/local/www/themes/nervecenter/images/metal_bgr.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/metal_bgr_red.gif b/usr/local/www/themes/nervecenter/images/metal_bgr_red.gif
deleted file mode 100755
index c4a1465..0000000
--- a/usr/local/www/themes/nervecenter/images/metal_bgr_red.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/bar_blue.gif b/usr/local/www/themes/nervecenter/images/misc/bar_blue.gif
deleted file mode 100755
index 741186a..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/bar_blue.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/bar_gray.gif b/usr/local/www/themes/nervecenter/images/misc/bar_gray.gif
deleted file mode 100755
index e86e245..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/bar_gray.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/bar_left.gif b/usr/local/www/themes/nervecenter/images/misc/bar_left.gif
deleted file mode 100755
index af751fa..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/bar_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/bar_right.gif b/usr/local/www/themes/nervecenter/images/misc/bar_right.gif
deleted file mode 100755
index ff12d9e..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/bar_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_minus.png b/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_minus.png
deleted file mode 100755
index 37db2fd..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_minus.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_plus.png b/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_plus.png
deleted file mode 100755
index fba7af9..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_plus.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/button.gif b/usr/local/www/themes/nervecenter/images/misc/button.gif
deleted file mode 100755
index e85dbb3..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/button.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/graph.png b/usr/local/www/themes/nervecenter/images/misc/graph.png
deleted file mode 100755
index 507ec75..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/graph.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/key_128.gif b/usr/local/www/themes/nervecenter/images/misc/key_128.gif
deleted file mode 100755
index ea5ae34..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/key_128.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/key_152.gif b/usr/local/www/themes/nervecenter/images/misc/key_152.gif
deleted file mode 100755
index 6c7fc03..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/key_152.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/key_256.gif b/usr/local/www/themes/nervecenter/images/misc/key_256.gif
deleted file mode 100755
index 3e1c377..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/key_256.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/key_64.gif b/usr/local/www/themes/nervecenter/images/misc/key_64.gif
deleted file mode 100755
index 87892bd..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/key_64.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/left_background.gif b/usr/local/www/themes/nervecenter/images/misc/left_background.gif
deleted file mode 100755
index 529d827..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/left_background.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/loader.gif b/usr/local/www/themes/nervecenter/images/misc/loader.gif
deleted file mode 100755
index 5d10ac3..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/loader_all.gif b/usr/local/www/themes/nervecenter/images/misc/loader_all.gif
deleted file mode 100755
index cb6bc0c..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/loader_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/loader_filter.gif b/usr/local/www/themes/nervecenter/images/misc/loader_filter.gif
deleted file mode 100755
index b838b17..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/loader_filter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/loader_tab.gif b/usr/local/www/themes/nervecenter/images/misc/loader_tab.gif
deleted file mode 100755
index 05bb04c..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/loader_tab.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/logon.png b/usr/local/www/themes/nervecenter/images/misc/logon.png
deleted file mode 100755
index ec644ed..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/logon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/progress_bar.gif b/usr/local/www/themes/nervecenter/images/misc/progress_bar.gif
deleted file mode 100755
index 3b4aa52..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/progress_bar.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/rrd_error.png b/usr/local/www/themes/nervecenter/images/misc/rrd_error.png
deleted file mode 100755
index a79ecf3..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/rrd_error.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/status_alerter.gif b/usr/local/www/themes/nervecenter/images/misc/status_alerter.gif
deleted file mode 100755
index 7ff1e95..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/status_alerter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/status_carpmaster.gif b/usr/local/www/themes/nervecenter/images/misc/status_carpmaster.gif
deleted file mode 100755
index 2c32908..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/status_carpmaster.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/status_left.gif b/usr/local/www/themes/nervecenter/images/misc/status_left.gif
deleted file mode 100755
index b5a2930..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/status_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/status_page_loading.gif b/usr/local/www/themes/nervecenter/images/misc/status_page_loading.gif
deleted file mode 100755
index 067ef18..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/status_page_loading.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/status_reload_all.gif b/usr/local/www/themes/nervecenter/images/misc/status_reload_all.gif
deleted file mode 100755
index 72de6bd..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/status_reload_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/status_reload_filter.gif b/usr/local/www/themes/nervecenter/images/misc/status_reload_filter.gif
deleted file mode 100755
index d72761a..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/status_reload_filter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/status_right.gif b/usr/local/www/themes/nervecenter/images/misc/status_right.gif
deleted file mode 100755
index bf66fdb..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/status_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/tri_c.gif b/usr/local/www/themes/nervecenter/images/misc/tri_c.gif
deleted file mode 100755
index 317b758..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/tri_c.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/tri_c_black.gif b/usr/local/www/themes/nervecenter/images/misc/tri_c_black.gif
deleted file mode 100755
index 309846e..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/tri_c_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/tri_o.gif b/usr/local/www/themes/nervecenter/images/misc/tri_o.gif
deleted file mode 100755
index eb95c32..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/tri_o.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/tri_o_black.gif b/usr/local/www/themes/nervecenter/images/misc/tri_o_black.gif
deleted file mode 100755
index f818f3b..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/tri_o_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/misc/widget_loader.gif b/usr/local/www/themes/nervecenter/images/misc/widget_loader.gif
deleted file mode 100755
index ca35e2a..0000000
--- a/usr/local/www/themes/nervecenter/images/misc/widget_loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/new_tab_menu.png b/usr/local/www/themes/nervecenter/images/new_tab_menu.png
deleted file mode 100755
index 4bdfcef..0000000
--- a/usr/local/www/themes/nervecenter/images/new_tab_menu.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/status.png b/usr/local/www/themes/nervecenter/images/status.png
deleted file mode 100755
index a3e368e..0000000
--- a/usr/local/www/themes/nervecenter/images/status.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/transparent.gif b/usr/local/www/themes/nervecenter/images/transparent.gif
deleted file mode 100755
index 89c5530..0000000
--- a/usr/local/www/themes/nervecenter/images/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/images/transparent_pixel.gif b/usr/local/www/themes/nervecenter/images/transparent_pixel.gif
deleted file mode 100755
index 35d42e8..0000000
--- a/usr/local/www/themes/nervecenter/images/transparent_pixel.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/blank.gif b/usr/local/www/themes/nervecenter/javascript/ie7/blank.gif
deleted file mode 100755
index a4fe2e6..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/blank.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-box-model.js
deleted file mode 100644
index 45543f6..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-box-model.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-core.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-core.js
deleted file mode 100644
index b11e2b1..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-core.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css-strict.js
deleted file mode 100644
index 4406d7a..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css-strict.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css2.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css2.js
deleted file mode 100644
index 7121c8e..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css2.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css3.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css3.js
deleted file mode 100644
index 86b24f5..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css3.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-fixed.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-fixed.js
deleted file mode 100644
index 4321cda..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-fixed.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-html4.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-html4.js
deleted file mode 100644
index 4d2baa9..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-html4.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-ie5.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-ie5.js
deleted file mode 100644
index 707fa56..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-ie5.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite-p.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite-p.js
deleted file mode 100644
index 3a66d19..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í></Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite.js
deleted file mode 100644
index 88c764f..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-png.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-png.js
deleted file mode 100644
index 7b8f2cf..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-png.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-server.css b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-server.css
deleted file mode 100644
index 47c7edd..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-server.css
+++ /dev/null
@@ -1,43 +0,0 @@
-body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
-body {margin: 8px; background: #333;}
-h1 {margin: 0;}
-h1 a:hover {background-color: transparent;}
-h2 {font-size: 1.75em;}
-h3 {font-size: 1.1em;}
-a:active {color: #ff0000;}
-a:link {color: #0a6cce;}
-a:visited {color: #0a6cce;}
-code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
- padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
-code.box {display: block; padding: 10px; margin: 0.5em 0;}
-ul {list-style-type: square;}
-dd {margin: .2em 0 .5em 1em;}
-dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
-dl.library dd {font-style: italic; margin-left: 3em;}
-dt {font-weight: bold;}
-dt.pack {color: brown;}
-a img {border-style: none;}
-hr {height: 1px; color: #000; border-style: solid;}
-hr.short {height: 2px; width: 100px;}
-div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
-hr {border-bottom-width: 0px;}
-div.header hr {color: #0a6cce; background-color: #0a6cce;}
-div.content {min-height: 100px;}
-div.footer hr {color: #898e79; background-color: #898e79; }
-div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
-a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
-div.footer a:hover {background-color: transparent; text-decoration: none;}
-div.header .menu {text-align: right;}
-div.footer {font-size: x-small; margin-top: 8px;}
-div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
-#license {margin-top: 5px; font-size: xx-small;}
-table {border-top: 1px solid #000; border-left: 1px solid #000;}
-th {background-color: #fff; text-align: left;}
-th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
-th.small {width: 100px;}
-th.medium {width: 200px;}
-th.large {width: 270px;}
-th.x-large {width: 408px;}
-table.fixed {table-layout: fixed;}
-span.comment {color: #666;}
-
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard-p.js
deleted file mode 100644
index 73e99ac..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì></Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard.js
deleted file mode 100644
index 2109905..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/test-trans.png b/usr/local/www/themes/nervecenter/javascript/ie7/test-trans.png
deleted file mode 100755
index e187e2c..0000000
--- a/usr/local/www/themes/nervecenter/javascript/ie7/test-trans.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/javascript/img/grey-40.png b/usr/local/www/themes/nervecenter/javascript/img/grey-40.png
deleted file mode 100755
index 758b716..0000000
--- a/usr/local/www/themes/nervecenter/javascript/img/grey-40.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/javascript/img/submenu-off.gif b/usr/local/www/themes/nervecenter/javascript/img/submenu-off.gif
deleted file mode 100755
index ddcdcae..0000000
--- a/usr/local/www/themes/nervecenter/javascript/img/submenu-off.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/javascript/img/submenu-on.gif b/usr/local/www/themes/nervecenter/javascript/img/submenu-on.gif
deleted file mode 100755
index 7a58077..0000000
--- a/usr/local/www/themes/nervecenter/javascript/img/submenu-on.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/javascript/img/white-90.png b/usr/local/www/themes/nervecenter/javascript/img/white-90.png
deleted file mode 100755
index efc84b4..0000000
--- a/usr/local/www/themes/nervecenter/javascript/img/white-90.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/javascript/img/x.gif b/usr/local/www/themes/nervecenter/javascript/img/x.gif
deleted file mode 100755
index 5bfd67a..0000000
--- a/usr/local/www/themes/nervecenter/javascript/img/x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/nervecenter/javascript/niftyjsCode.js b/usr/local/www/themes/nervecenter/javascript/niftyjsCode.js
deleted file mode 100644
index e71ea14..0000000
--- a/usr/local/www/themes/nervecenter/javascript/niftyjsCode.js
+++ /dev/null
@@ -1,174 +0,0 @@
-function NiftyCheck(){
-if(!document.getElementById || !document.createElement)
- return(false);
-isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
-if(Array.prototype.push==null){Array.prototype.push=function(){
- this[this.length]=arguments[0]; return(this.length);};}
-return(true);
-}
-
-function Rounded(selector,wich,bk,color,opt){
-var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
-
-if(color=="transparent"){
- cn=cn+"x";
- ecolor=bk;
- bk="transparent";
- }
-else if(opt && opt.indexOf("border")>=0){
- var optar=opt.split(" ");
- for(i=0;i<optar.length;i++)
- if(optar[i].indexOf("#")>=0) ecolor=optar[i];
- if(ecolor=="") ecolor="#666";
- cn+="e";
- edges=true;
- }
-else if(opt && opt.indexOf("smooth")>=0){
- cn+="a";
- ecolor=Mix(bk,color);
- }
-if(opt && opt.indexOf("small")>=0) cn+="s";
-prefixt=cn;
-prefixb=cn;
-if(wich.indexOf("all")>=0){t=true;b=true;}
-else if(wich.indexOf("top")>=0) t="true";
-else if(wich.indexOf("tl")>=0){
- t="true";
- if(wich.indexOf("tr")<0) prefixt+="l";
- }
-else if(wich.indexOf("tr")>=0){
- t="true";
- prefixt+="r";
- }
-if(wich.indexOf("bottom")>=0) b=true;
-else if(wich.indexOf("bl")>=0){
- b="true";
- if(wich.indexOf("br")<0) prefixb+="l";
- }
-else if(wich.indexOf("br")>=0){
- b="true";
- prefixb+="r";
- }
-var v=getElementsBySelector(selector);
-var l=v.length;
-for(i=0;i<l;i++){
- if(edges) AddBorder(v[i],ecolor);
- if(t) AddTop(v[i],bk,color,ecolor,prefixt);
- if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
- }
-}
-
-function AddBorder(el,bc){
-var i;
-if(!el.passed){
- if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
- var t=el.firstChild.nodeValue;
- el.removeChild(el.lastChild);
- var d=CreateEl("span");
- d.style.display="block";
- d.appendChild(document.createTextNode(t));
- el.appendChild(d);
- }
- for(i=0;i<el.childNodes.length;i++){
- if(el.childNodes[i].nodeType==1){
- el.childNodes[i].style.borderLeft="1px solid "+bc;
- el.childNodes[i].style.borderRight="1px solid "+bc;
- }
- }
- }
-el.passed=true;
-}
-
-function AddTop(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=1;i<=lim;i++){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingTop=0;
-el.insertBefore(d,el.firstChild);
-}
-
-function AddBottom(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=lim;i>0;i--){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingBottom=0;
-el.appendChild(d);
-}
-
-function CreateEl(x){
-if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
-else return(document.createElement(x));
-}
-
-function getElementsBySelector(selector){
-var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
-
-if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
- s=selector.split(" ");
- var fs=s[0].split("#");
- if(fs.length==1) return(objlist);
- f=document.getElementById(fs[1]);
- if(f) return(f.getElementsByTagName(s[1]));
- return(objlist);
- }
-if(selector.indexOf("#")>0){ //id selector like "tag#id"
- s=selector.split("#");
- tag=s[0];
- selid=s[1];
- }
-if(selid!=""){
- f=document.getElementById(selid);
- if(f) objlist.push(f);
- return(objlist);
- }
-if(selector.indexOf(".")>0){ //class selector like "tag.class"
- s=selector.split(".");
- tag=s[0];
- selclass=s[1];
- }
-var v=document.getElementsByTagName(tag); // tag selector like "tag"
-if(selclass=="")
- return(v);
-for(i=0;i<v.length;i++){
- if(v[i].className.indexOf(selclass)>=0){
- objlist.push(v[i]);
- }
- }
-return(objlist);
-}
-
-function Mix(c1,c2){
-var i,step1,step2,x,y,r=new Array(3);
-if(c1.length==4)step1=1;
-else step1=2;
-if(c2.length==4) step2=1;
-else step2=2;
-for(i=0;i<3;i++){
- x=parseInt(c1.substr(1+step1*i,step1),16);
- if(step1==1) x=16*x+x;
- y=parseInt(c2.substr(1+step2*i,step2),16);
- if(step2==1) y=16*y+y;
- r[i]=Math.floor((x*50+y*50)/100);
- }
-return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
-} \ No newline at end of file
diff --git a/usr/local/www/themes/nervecenter/javascript/transmenu-body.php b/usr/local/www/themes/nervecenter/javascript/transmenu-body.php
deleted file mode 100644
index eea9235..0000000
--- a/usr/local/www/themes/nervecenter/javascript/transmenu-body.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/* $Id$ */
-/* ========================================================================== */
-/*
- transmenu-body.php
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-function nervecenterTransmenuGetBodyJS() {
- global $rootmenu;
-
- if (isset($rootmenu)) {
- return $rootmenu->getMenuJScript();
- } else if (empty($rootmenu)) {
- return "alert('No rootmenu object found.');";
- } else {
- return "alert('No JavaScript attached to rootmenu object.');";
- }
-}
-
-?>
diff --git a/usr/local/www/themes/nervecenter/javascript/transmenu-head.php b/usr/local/www/themes/nervecenter/javascript/transmenu-head.php
deleted file mode 100644
index 66e1952..0000000
--- a/usr/local/www/themes/nervecenter/javascript/transmenu-head.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-/* $Id$ */
-/* ========================================================================== */
-/*
- transmenu-head.php
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-function nervecenterTransmenuGetHeadJS() {
- global $g, $rootmenu;
-
- $transmenu_stub =<<<EOD
- function tmenuinit() {
- //==========================================================================================
- // if supported, initialize TransMenus
- //==========================================================================================
- // Check isSupported() so that menus aren't accidentally sent to non-supporting browsers.
- // This is better than server-side checking because it will also catch browsers which would
- // normally support the menus but have javascript disabled.
- //
- // If supported, call initialize() and then hook whatever image rollover code you need to do
- // to the .onactivate and .ondeactivate events for each menu.
- //==========================================================================================
- if (TransMenu.isSupported()) {
- TransMenu.initialize();
-
- // hook all the highlight swapping of the main toolbar to menu activation/deactivation
- // instead of simple rollover to get the effect where the button stays hightlit until
- // the menu is closed.
- @@CHILD_JSCRIPT@@
- }
- } // end function
-EOD;
-
- if (empty($rootmenu)) {
- require_once("menudef.inc");
- }
-
- $childJScript = "";
- foreach ($rootmenu->getChildren() as $component) {
- $id = "mnua_" . str_replace(" ", "", strtolower($component->getID()));
-
- $childJScript .=<<<EOD
- {$id}.onactivate = function() { document.getElementById("{$id}").className = "hover"; };
- {$id}.ondeactivate = function() { document.getElementById("{$id}").className = ""; };
-
-EOD;
- }
-
- $transmenu_stub = basename($_SERVER['PHP_SELF']) != "wizard.php" ? str_replace("@@CHILD_JSCRIPT@@", $childJScript, $transmenu_stub) : "";
-
- return $transmenu_stub;
-}
-
-?>
diff --git a/usr/local/www/themes/nervecenter/javascript/transmenu.org b/usr/local/www/themes/nervecenter/javascript/transmenu.org
deleted file mode 100644
index 6c9e353..0000000
--- a/usr/local/www/themes/nervecenter/javascript/transmenu.org
+++ /dev/null
@@ -1,785 +0,0 @@
-/* =================================================================================================
- * TransMenu
- * March, 2003
- *
- * Customizable multi-level animated DHTML menus with transparency.
- *
- * Copyright 2003-2004, Aaron Boodman (www.youngpup.net)
- * =================================================================================================
- * "Can I use this?"
- *
- * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
- * out at: http://creativecommons.org/licenses/by/2.0/
- *
- * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
- * for writing it. You may not misrepresent yourself as the author of this code.
- * =================================================================================================
- * "It's kinda hard to read, though"
- *
- * The uncompressed, commented version of this script can be found at:
- * http://youngpup.net/projects/transMenus
- * =================================================================================================
- * updates:
- * 04.19.04 fixed cascade problem with menus nested greater than two levels.
- * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu.
- * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;)
- * also made gecko check a little more strict by specifying build no.
- * ============================================================================================== */
-
-
-
-//==================================================================================================
-// Configuration properties
-//==================================================================================================
-TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif
-TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat
-TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat
-TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed)
-TransMenu.menuPadding = 5; // padding between menu border and items grid
-TransMenu.itemPadding = 3; // additional padding around each item
-TransMenu.shadowSize = 2; // size of shadow under menu
-TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge
-TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS)
-TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5
-TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS)
-TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5
-TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu
-TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu
-
-
-//==================================================================================================
-// Internal use properties
-//==================================================================================================
-TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};
-TransMenu.direction = {down:1,right:2};
-TransMenu.registry = [];
-TransMenu._maxZ = 100;
-
-
-
-//==================================================================================================
-// Static methods
-//==================================================================================================
-// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0
-TransMenu.isSupported = function() {
- var ua = navigator.userAgent.toLowerCase();
- var pf = navigator.platform.toLowerCase();
- var an = navigator.appName;
- var r = false;
-
- if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0
- else if (an == "Microsoft Internet Explorer") {
- if (document.getElementById) { // ie5.1+ mac,win
- if (pf.indexOf("mac") == 0) {
- r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1;
- }
- else r = true;
- }
- }
-
- return r;
-}
-
-// call this in onload once menus have been created
-TransMenu.initialize = function() {
- for (var i = 0, menu = null; menu = this.registry[i]; i++) {
- menu.initialize();
- }
-}
-
-// call this in document body to write out menu html
-TransMenu.renderAll = function() {
- var aMenuHtml = [];
- for (var i = 0, menu = null; menu = this.registry[i]; i++) {
- aMenuHtml[i] = menu.toString();
- }
- document.write(aMenuHtml.join(""));
-}
-
-//==================================================================================================
-// TransMenu constructor (only called internally)
-//==================================================================================================
-// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a
-// reference to an HTML element, or a TransMenuItem from an existing menu.
-// iDirection : The direction to slide out. One of TransMenu.direction.
-// iLeft : Left pixel offset of menu from actuator
-// iTop : Top pixel offset of menu from actuator
-// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
-// parentMenuSet : Menuset this menu will be added to.
-//==================================================================================================
-function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) {
- // public methods
- this.addItem = addItem;
- this.addMenu = addMenu;
- this.toString = toString;
- this.initialize = initialize;
- this.isOpen = false;
- this.show = show;
- this.hide = hide;
- this.items = [];
-
- // events
- this.onactivate = new Function(); // when the menu starts to slide open
- this.ondeactivate = new Function(); // when the menu finishes sliding closed
- this.onmouseover = new Function(); // when the menu has been moused over
- this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future
- this.ondequeue = new Function();
-
- // initialization
- this.index = TransMenu.registry.length;
- TransMenu.registry[this.index] = this;
-
- var id = "TransMenu" + this.index;
- var contentHeight = null;
- var contentWidth = null;
- var childMenuSet = null;
- var animating = false;
- var childMenus = [];
- var slideAccel = -1;
- var elmCache = null;
- var ready = false;
- var _this = this;
- var a = null;
-
- var pos = iDirection == TransMenu.direction.down ? "top" : "left";
- var dim = null;
-
- // private and public method implimentations
- function addItem(sText, sUrl) {
- var item = new TransMenuItem(sText, sUrl, this);
- item._index = this.items.length;
- this.items[item._index] = item;
- }
-
- function addMenu(oMenuItem) {
- if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here");
-
- if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight);
-
- var m = childMenuSet.addMenu(oMenuItem);
-
- childMenus[oMenuItem._index] = m;
- m.onmouseover = child_mouseover;
- m.ondeactivate = child_deactivate;
- m.onqueue = child_queue;
- m.ondequeue = child_dequeue;
-
- return m;
- }
-
- function initialize() {
- initCache();
- initEvents();
- initSize();
- ready = true;
- }
-
- function show() {
- //dbg_dump("show");
- if (ready) {
- _this.isOpen = true;
- animating = true;
- setContainerPos();
- elmCache["clip"].style.visibility = "visible";
- elmCache["clip"].style.zIndex = TransMenu._maxZ++;
- //dbg_dump("maxZ: " + TransMenu._maxZ);
- slideStart();
- _this.onactivate();
- }
- }
-
- function hide() {
- if (ready) {
- _this.isOpen = false;
- animating = true;
-
- for (var i = 0, item = null; item = elmCache.item[i]; i++)
- dehighlight(item);
-
- if (childMenuSet) childMenuSet.hide();
-
- slideStart();
- _this.ondeactivate();
- }
- }
-
- function setContainerPos() {
- var sub = oActuator.constructor == TransMenuItem;
- var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator;
- var el = act;
-
- var x = 0;
- var y = 0;
-
-
- var minX = 0;
- var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width);
- var minY = 0;
- var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height);
-
- // add up all offsets... subtract any scroll offset
- while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) {
- x += el.offsetLeft;
- y += el.offsetTop;
-
- if (el.scrollLeft) x -= el.scrollLeft;
- if (el.scrollTop) y -= el.scrollTop;
-
- el = el.offsetParent;
- }
-
- if (oActuator.constructor == TransMenuItem) {
- x += parseInt(el.parentNode.style.left);
- y += parseInt(el.parentNode.style.top);
- }
-
- switch (iReferencePoint) {
- case TransMenu.reference.topLeft:
- break;
- case TransMenu.reference.topRight:
- x += act.offsetWidth;
- break;
- case TransMenu.reference.bottomLeft:
- y += act.offsetHeight;
- break;
- case TransMenu.reference.bottomRight:
- x += act.offsetWidth;
- y += act.offsetHeight;
- break;
- }
-
- x += iLeft;
- y += iTop;
-
- x = Math.max(Math.min(x, maxX), minX);
- y = Math.max(Math.min(y, maxY), minY);
-
- elmCache["clip"].style.left = x + "px";
- elmCache["clip"].style.top = y + "px";
- }
-
- function slideStart() {
- var x0 = parseInt(elmCache["content"].style[pos]);
- var x1 = _this.isOpen ? 0 : -dim;
-
- if (a != null) a.stop();
- a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel);
-
- a.onframe = slideFrame;
- a.onend = slideEnd;
-
- a.start();
- }
-
- function slideFrame(x) {
- elmCache["content"].style[pos] = x + "px";
- }
-
- function slideEnd() {
- if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden";
- animating = false;
- }
-
- function initSize() {
- // everything is based off the size of the items table...
- var ow = elmCache["items"].offsetWidth;
- var oh = elmCache["items"].offsetHeight;
- var ua = navigator.userAgent.toLowerCase();
-
- // clipping container should be ow/oh + the size of the shadow
- elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px";
- elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px";
-
- // same with content...
- elmCache["content"].style.width = ow + TransMenu.shadowSize + "px";
- elmCache["content"].style.height = oh + TransMenu.shadowSize + "px";
-
- contentHeight = oh + TransMenu.shadowSize;
- contentWidth = ow + TransMenu.shadowSize;
-
- dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth;
-
- // set initially closed
- elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px";
- elmCache["clip"].style.visibility = "hidden";
-
- // if *not* mac/ie 5
- if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) {
- // set background div to offset size
- elmCache["background"].style.width = ow + "px";
- elmCache["background"].style.height = oh + "px";
- elmCache["background"].style.backgroundColor = TransMenu.backgroundColor;
-
- // shadow left starts at offset left and is offsetHeight pixels high
- elmCache["shadowRight"].style.left = ow + "px";
- elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px";
- elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor;
-
- // shadow bottom starts at offset height and is offsetWidth - shadowOffset
- // pixels wide (we don't want the bottom and right shadows to overlap or we
- // get an extra bright bottom-right corner)
- elmCache["shadowBottom"].style.top = oh + "px";
- elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px";
- elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor;
- }
- // mac ie is a little different because we use a PNG for the transparency
- else {
- // set background div to offset size
- elmCache["background"].firstChild.src = TransMenu.backgroundPng;
- elmCache["background"].firstChild.width = ow;
- elmCache["background"].firstChild.height = oh;
-
- // shadow left starts at offset left and is offsetHeight pixels high
- elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng;
- elmCache["shadowRight"].style.left = ow + "px";
- elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize;
- elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize);
-
- // shadow bottom starts at offset height and is offsetWidth - shadowOffset
- // pixels wide (we don't want the bottom and right shadows to overlap or we
- // get an extra bright bottom-right corner)
- elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng;
- elmCache["shadowBottom"].style.top = oh + "px";
- elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize;
- elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset;
- }
- }
-
- function initCache() {
- var menu = document.getElementById(id);
- var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing
-
- elmCache = {};
- elmCache["clip"] = menu;
- elmCache["item"] = [];
-
- for (var i = 0, elm = null; elm = all[i]; i++) {
- switch (elm.className) {
- case "items":
- case "content":
- case "background":
- case "shadowRight":
- case "shadowBottom":
- elmCache[elm.className] = elm;
- break;
- case "item":
- elm._index = elmCache["item"].length;
- elmCache["item"][elm._index] = elm;
- break;
- }
- }
-
- // hack!
- _this.elmCache = elmCache;
- }
-
- function initEvents() {
- // hook item mouseover
- for (var i = 0, item = null; item = elmCache.item[i]; i++) {
- item.onmouseover = item_mouseover;
- item.onmouseout = item_mouseout;
- item.onclick = item_click;
- }
-
- // hook actuation
- if (typeof oActuator.tagName != "undefined") {
- oActuator.onmouseover = actuator_mouseover;
- oActuator.onmouseout = actuator_mouseout;
- }
-
- // hook menu mouseover
- elmCache["content"].onmouseover = content_mouseover;
- elmCache["content"].onmouseout = content_mouseout;
- }
-
- function highlight(oRow) {
- oRow.className = "item hover";
- if (childMenus[oRow._index])
- oRow.lastChild.firstChild.src = TransMenu.dingbatOn;
- }
-
- function dehighlight(oRow) {
- oRow.className = "item";
- if (childMenus[oRow._index])
- oRow.lastChild.firstChild.src = TransMenu.dingbatOff;
- }
-
- function item_mouseover() {
- if (!animating) {
- highlight(this);
-
- if (childMenus[this._index])
- childMenuSet.showMenu(childMenus[this._index]);
- else if (childMenuSet) childMenuSet.hide();
- }
- }
-
- function item_mouseout() {
- if (!animating) {
- if (childMenus[this._index])
- childMenuSet.hideMenu(childMenus[this._index]);
- else // otherwise child_deactivate will do this
- dehighlight(this);
- }
- }
-
- function item_click() {
- if (!animating) {
- if (_this.items[this._index].url)
- location.href = _this.items[this._index].url;
- }
- }
-
- function actuator_mouseover() {
- parentMenuSet.showMenu(_this);
- }
-
- function actuator_mouseout() {
- parentMenuSet.hideMenu(_this);
- }
-
- function content_mouseover() {
- if (!animating) {
- parentMenuSet.showMenu(_this);
- _this.onmouseover();
- }
- }
-
- function content_mouseout() {
- if (!animating) {
- parentMenuSet.hideMenu(_this);
- }
- }
-
- function child_mouseover() {
- if (!animating) {
- parentMenuSet.showMenu(_this);
- }
- }
-
- function child_deactivate() {
- for (var i = 0; i < childMenus.length; i++) {
- if (childMenus[i] == this) {
- dehighlight(elmCache["item"][i]);
- break;
- }
- }
- }
-
- function child_queue() {
- parentMenuSet.hideMenu(_this);
- }
-
- function child_dequeue() {
- parentMenuSet.showMenu(_this);
- }
-
- function toString() {
- var aHtml = [];
- var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : "");
-
- for (var i = 0, item = null; item = this.items[i]; i++) {
- aHtml[i] = item.toString(childMenus[i]);
- }
-
- return '<div id="' + id + '" class="' + sClassName + '">' +
- '<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">' +
- '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr>' +
- aHtml.join('') +
- '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr></table>' +
- '<div class="shadowBottom"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '<div class="shadowRight"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '<div class="background"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '</div></div>';
- }
-}
-
-
-//==================================================================================================
-// TransMenuSet
-//==================================================================================================
-// iDirection : The direction to slide out. One of TransMenu.direction.
-// iLeft : Left pixel offset of menus from actuator
-// iTop : Top pixel offset of menus from actuator
-// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
-//==================================================================================================
-TransMenuSet.registry = [];
-
-function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) {
- // public methods
- this.addMenu = addMenu;
- this.showMenu = showMenu;
- this.hideMenu = hideMenu;
- this.hide = hide;
- this.hideCurrent = hideCurrent;
-
- // initialization
- var menus = [];
- var _this = this;
- var current = null;
-
- this.index = TransMenuSet.registry.length;
- TransMenuSet.registry[this.index] = this;
-
- // method implimentations...
- function addMenu(oActuator) {
- var m = new TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, this);
- menus[menus.length] = m;
- return m;
- }
-
- function showMenu(oMenu) {
- if (oMenu != current) {
- // close currently open menu
- if (current != null) hide(current);
-
- // set current menu to this one
- current = oMenu;
-
- // if this menu is closed, open it
- oMenu.show();
- }
- else {
- // hide pending calls to close this menu
- cancelHide(oMenu);
- }
- }
-
- function hideMenu(oMenu) {
- //dbg_dump("hideMenu a " + oMenu.index);
- if (current == oMenu && oMenu.isOpen) {
- //dbg_dump("hideMenu b " + oMenu.index);
- if (!oMenu.hideTimer) scheduleHide(oMenu);
- }
- }
-
- function scheduleHide(oMenu) {
- //dbg_dump("scheduleHide " + oMenu.index);
- oMenu.onqueue();
- oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay);
- }
-
- function cancelHide(oMenu) {
- //dbg_dump("cancelHide " + oMenu.index);
- if (oMenu.hideTimer) {
- oMenu.ondequeue();
- window.clearTimeout(oMenu.hideTimer);
- oMenu.hideTimer = null;
- }
- }
-
- function hide(oMenu) {
- if (!oMenu && current) oMenu = current;
-
- if (oMenu && current == oMenu && oMenu.isOpen) {
- hideCurrent();
- }
- }
-
- function hideCurrent() {
- if (null != current) {
- cancelHide(current);
- current.hideTimer = null;
- current.hide();
- current = null;
- }
- }
-}
-
-//==================================================================================================
-// TransMenuItem (internal)
-// represents an item in a dropdown
-//==================================================================================================
-// sText : The item display text
-// sUrl : URL to load when the item is clicked
-// oParent : Menu this item is a part of
-//==================================================================================================
-function TransMenuItem(sText, sUrl, oParent) {
- this.toString = toString;
- this.text = sText;
- this.url = sUrl;
- this.parentMenu = oParent;
-
- function toString(bDingbat) {
- var sDingbat = bDingbat ? TransMenu.dingbatOff : TransMenu.spacerGif;
- var iEdgePadding = TransMenu.itemPadding + TransMenu.menuPadding;
- var sPaddingLeft = "padding:" + TransMenu.itemPadding + "px; padding-left:" + iEdgePadding + "px;"
- var sPaddingRight = "padding:" + TransMenu.itemPadding + "px; padding-right:" + iEdgePadding + "px;"
-
- return '<tr class="item"><td nowrap style="' + sPaddingLeft + '">' +
- sText + '</td><td width="14" style="' + sPaddingRight + '">' +
- '<img src="' + sDingbat + '" width="14" height="14"></td></tr>';
- }
-}
-
-
-
-
-
-
-//=====================================================================
-// Accel[erated] [an]imation object
-// change a property of an object over time in an accelerated fashion
-//=====================================================================
-// obj : reference to the object whose property you'd like to animate
-// prop : property you would like to change eg: "left"
-// to : final value of prop
-// time : time the animation should take to run
-// zip : optional. specify the zippiness of the acceleration. pick a
-// number between -1 and 1 where -1 is full decelerated, 1 is
-// full accelerated, and 0 is linear (no acceleration). default
-// is 0.
-// unit : optional. specify the units for use with prop. default is
-// "px".
-//=====================================================================
-// bezier functions lifted from the lib_animation.js file in the
-// 13th Parallel API. www.13thparallel.org
-//=====================================================================
-
-function Accelimation(from, to, time, zip) {
- if (typeof zip == "undefined") zip = 0;
- if (typeof unit == "undefined") unit = "px";
-
- this.x0 = from;
- this.x1 = to;
- this.dt = time;
- this.zip = -zip;
- this.unit = unit;
- this.timer = null;
- this.onend = new Function();
- this.onframe = new Function();
-}
-
-
-
-//=====================================================================
-// public methods
-//=====================================================================
-
-// after you create an accelimation, you call this to start it-a runnin'
-Accelimation.prototype.start = function() {
- this.t0 = new Date().getTime();
- this.t1 = this.t0 + this.dt;
- var dx = this.x1 - this.x0;
- this.c1 = this.x0 + ((1 + this.zip) * dx / 3);
- this.c2 = this.x0 + ((2 + this.zip) * dx / 3);
- Accelimation._add(this);
-}
-
-// and if you need to stop it early for some reason...
-Accelimation.prototype.stop = function() {
- Accelimation._remove(this);
-}
-
-
-
-//=====================================================================
-// private methods
-//=====================================================================
-
-// paints one frame. gets called by Accelimation._paintAll.
-Accelimation.prototype._paint = function(time) {
- if (time < this.t1) {
- var elapsed = time - this.t0;
- this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));
- }
- else this._end();
-}
-
-// ends the animation
-Accelimation.prototype._end = function() {
- Accelimation._remove(this);
- this.onframe(this.x1);
- this.onend();
-}
-
-
-
-
-//=====================================================================
-// static methods (all private)
-//=====================================================================
-
-// add a function to the list of ones to call periodically
-Accelimation._add = function(o) {
- var index = this.instances.length;
- this.instances[index] = o;
- // if this is the first one, start the engine
- if (this.instances.length == 1) {
- this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes);
- }
-}
-
-// remove a function from the list
-Accelimation._remove = function(o) {
- for (var i = 0; i < this.instances.length; i++) {
- if (o == this.instances[i]) {
- this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) );
- break;
- }
- }
- // if that was the last one, stop the engine
- if (this.instances.length == 0) {
- window.clearInterval(this.timerID);
- this.timerID = null;
- }
-}
-
-// "engine" - call each function in the list every so often
-Accelimation._paintAll = function() {
- var now = new Date().getTime();
- for (var i = 0; i < this.instances.length; i++) {
- this.instances[i]._paint(now);
- }
-}
-
-
-// Bezier functions:
-Accelimation._B1 = function(t) { return t*t*t }
-Accelimation._B2 = function(t) { return 3*t*t*(1-t) }
-Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) }
-Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) }
-
-
-//Finds the coordinates of a point at a certain stage through a bezier curve
-Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) {
- return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent);
-}
-
-
-//=====================================================================
-// static properties
-//=====================================================================
-
-Accelimation.instances = [];
-Accelimation.targetRes = 10;
-Accelimation.timerID = null;
-
-
-//=====================================================================
-// IE win memory cleanup
-//=====================================================================
-
-if (window.attachEvent) {
- var cearElementProps = [
- 'data',
- 'onmouseover',
- 'onmouseout',
- 'onmousedown',
- 'onmouseup',
- 'ondblclick',
- 'onclick',
- 'onselectstart',
- 'oncontextmenu'
- ];
-
- window.attachEvent("onunload", function() {
- var el;
- for(var d = document.all.length;d--;){
- el = document.all[d];
- for(var c = cearElementProps.length;c--;){
- el[cearElementProps[c]] = null;
- }
- }
- });
-} \ No newline at end of file
diff --git a/usr/local/www/themes/nervecenter/javascript/transmenuC.js b/usr/local/www/themes/nervecenter/javascript/transmenuC.js
deleted file mode 100644
index 88626c7..0000000
--- a/usr/local/www/themes/nervecenter/javascript/transmenuC.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/* =================================================================================================
- * TransMenu
- * March, 2003
- * Customizable multi-level animated DHTML menus with transparency.
- * =================================================================================================
- * "Can I use this?"
- *
- * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
- * out at: http://creativecommons.org/licenses/by/2.0/
- *
- * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
- * for writing it. You may not misrepresent yourself as the author of this code.
- * =================================================================================================
- * "It's kinda hard to read, though"
- *
- * The uncompressed, commented version of this script can be found at:
- * http://youngpup.net/projects/transMenus
- * ============================================================================================== */
-TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;}
-else r=true;}}
-return r;}
-TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}}
-TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();}
-document.write(aMenuHtml.join(""));}
-function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;}
-function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;}
-function initialize(){initCache();initEvents();initSize();ready=true;}
-function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}}
-function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}}
-function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;}
-if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);}
-switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;}
-x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";}
-function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();}
-function slideFrame(x){elmCache["content"].style[pos]=x+"px";}
-function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;}
-function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;}
-else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}}
-function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}}
-_this.elmCache=elmCache;}
-function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;}
-if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;}
-elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;}
-function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;}
-function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;}
-function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}}
-function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}}
-function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}}
-function actuator_mouseover(){parentMenuSet.showMenu(_this);}
-function actuator_mouseout(){parentMenuSet.hideMenu(_this);}
-function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}}
-function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}}
-function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}}
-function child_deactivate(){for(var i=0;i<childMenus.length;i++){if(childMenus[i]==this){dehighlight(elmCache["item"][i]);break;}}}
-function child_queue(){parentMenuSet.hideMenu(_this);}
-function child_dequeue(){parentMenuSet.showMenu(_this);}
-function toString(){var aHtml=[];var sClassName="transMenu"+(oActuator.constructor!=TransMenuItem?" top":"");for(var i=0,item=null;item=this.items[i];i++){aHtml[i]=item.toString(childMenus[i]);}
-return'<div id="'+id+'" class="'+sClassName+'">'+'<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">'+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr>'+aHtml.join('')+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr></table>'+'<div class="shadowBottom"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="shadowRight"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="background"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'</div></div>';}}
-TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;}
-function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();}
-else{cancelHide(oMenu);}}
-function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}}
-function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);}
-function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}}
-function hide(oMenu){if(!oMenu&&current)oMenu=current;if(oMenu&&current==oMenu&&oMenu.isOpen){hideCurrent();}}
-function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}}
-function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;"
-var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;"
-return'<tr class="item"><td nowrap style="'+sPaddingLeft+'">'+sText+'</td><td width="14" style="'+sPaddingRight+'">'+'<img src="'+sDingbat+'" width="14" height="14"></td></tr>';}}
-function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();}
-Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);}
-Accelimation.prototype.stop=function(){Accelimation._remove(this);}
-Accelimation.prototype._paint=function(time){if(time<this.t1){var elapsed=time-this.t0;this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));}
-else this._end();}
-Accelimation.prototype._end=function(){Accelimation._remove(this);this.onframe(this.x1);this.onend();}
-Accelimation._add=function(o){var index=this.instances.length;this.instances[index]=o;if(this.instances.length==1){this.timerID=window.setInterval("Accelimation._paintAll()",this.targetRes);}}
-Accelimation._remove=function(o){for(var i=0;i<this.instances.length;i++){if(o==this.instances[i]){this.instances=this.instances.slice(0,i).concat(this.instances.slice(i+1));break;}}
-if(this.instances.length==0){window.clearInterval(this.timerID);this.timerID=null;}}
-Accelimation._paintAll=function(){var now=new Date().getTime();for(var i=0;i<this.instances.length;i++){this.instances[i]._paint(now);}}
-Accelimation._B1=function(t){return t*t*t}
-Accelimation._B2=function(t){return 3*t*t*(1-t)}
-Accelimation._B3=function(t){return 3*t*(1-t)*(1-t)}
-Accelimation._B4=function(t){return(1-t)*(1-t)*(1-t)}
-Accelimation._getBezier=function(percent,startPos,endPos,control1,control2){return endPos*this._B1(percent)+control2*this._B2(percent)+control1*this._B3(percent)+startPos*this._B4(percent);}
-Accelimation.instances=[];Accelimation.targetRes=10;Accelimation.timerID=null;
-if(window.attachEvent){var cearElementProps=['data','onmouseover','onmouseout','onmousedown','onmouseup','ondblclick','onclick','onselectstart','oncontextmenu'];window.attachEvent("onunload", function() {var el;for(var d=document.all.length;d--;){el=document.all[d];for(var c=cearElementProps.length;c--;){el[cearElementProps[c]] = null;}}});} \ No newline at end of file
diff --git a/usr/local/www/themes/nervecenter/jsevents/body.def b/usr/local/www/themes/nervecenter/jsevents/body.def
deleted file mode 100644
index 501d548..0000000
--- a/usr/local/www/themes/nervecenter/jsevents/body.def
+++ /dev/null
@@ -1,7 +0,0 @@
-# Format: <event_name>=<jsfunction_name> !<forbidden_page_0>,<forbidden_page_1>...<forbidden_page_n>
-# where: forbidden pages are those pages that should *not* use
-# the particular JavaScript function within the JS event
-# specified below.
-# $Id$
-#
-onload=tmenuinit(); !wizard.php \ No newline at end of file
diff --git a/usr/local/www/themes/nervecenter/loader.js b/usr/local/www/themes/nervecenter/loader.js
deleted file mode 100644
index 491e874..0000000
--- a/usr/local/www/themes/nervecenter/loader.js
+++ /dev/null
@@ -1,29 +0,0 @@
-//<![CDATA[
-var browser = '';
-var version = '';
-var entrance = '';
-var cond = '';
-
-// BROWSER?
-if (browser == '') {
- if (navigator.appName.indexOf('Microsoft') != -1)
- browser = 'IE';
- else if (navigator.appName.indexOf('Netscape') != -1)
- browser = 'Netscape';
- else
- browser = 'IE';
-}
-if (version == '') {
- version= navigator.appVersion;
- paren = version.indexOf('(');
- whole_version = navigator.appVersion.substring(0,paren-1);
- version = parseInt(whole_version);
-}
-
-if (browser == 'IE' && version < 7) {
- document.write('<script type="text/javascript" src="/themes/nervecenter/javascript/ie7/ie7-standard-p.js"></script>');
-}
-
-document.write('<script type="text/javascript" src="/themes/nervecenter/javascript/niftyjsCode.js"></script>');
-
-//]]>
diff --git a/usr/local/www/themes/nervecenter/login.css b/usr/local/www/themes/nervecenter/login.css
deleted file mode 100644
index f8abdfc..0000000
--- a/usr/local/www/themes/nervecenter/login.css
+++ /dev/null
@@ -1,1127 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-/* please adjust the bgcolor to be used together with niftycorners! */
-.rtop, .artop {
- background-color: #999999;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 9px;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- background-position : center 0px;
- background-color: #999999;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
- font-size: 14px;
- color: #cccccc;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- /* background: url('images/menu.gif') no-repeat; */
- /* width: 693px; */
- position: relative;
- top: -25px;
- left: 3px;
- width: 810px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- /* width: 7.5em; */
- width: 8.77em;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #990000;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background-color: #666666;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 10px;
- padding-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 8px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-
-#login {
-/* background: #cccccc; */
- background-color: transparent;
- border: 0px solid #cccccc;
- margin: 5em auto;
- padding: 0em;
- width: 400px;
-/* filter:alpha(opacity=60);
- -moz-opacity:0.6;
- -khtml-opacity: 0.6;
- opacity: 0.6; */
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
-/* background: #ffffff; */
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 400px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -420px;
- left: 70px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- top: -300px; */
-}
-
-#login #username, #password {
- font-size: 1em;
- width: 60%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- left: 10px;
- top: -300px; */
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- text-align: center;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -20px;
- left: 170px;
-}
-
-/* loginerror box follows */
-
-#login #inputerrors {
- background-color: transparent;
- border: 0px solid #666666;
- margin: 5em auto;
- vertical-align: middle;
- padding: 0em;
- width: 330px;
- height: 50px;
- position: relative;
- top: -370px;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/nervecenter/menu.inc b/usr/local/www/themes/nervecenter/menu.inc
deleted file mode 100644
index a274410..0000000
--- a/usr/local/www/themes/nervecenter/menu.inc
+++ /dev/null
@@ -1,177 +0,0 @@
-<?php
-/* $Id$ */
-/* ========================================================================== */
-/*
- menu.inc
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-require("menu.inc");
-
-define("TMENU_STUB", "
- // set up drop downs anywhere in the body of the page. I think the bottom of the page is better..
- // but you can experiment with effect on loadtime.
- if (TransMenu.isSupported()) {
-
- //==================================================================================================
- // create a set of dropdowns
- //==================================================================================================
- // the first param should always be down, as it is here
- //
- // The second and third param are the top and left offset positions of the menus from their actuators
- // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use
- // something like -5, 5
- //
- // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner
- // of the actuator from which to measure the offset positions above. Here we are saying we want the
- // menu to appear directly below the bottom left corner of the actuator
- //==================================================================================================
- var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft);
-
- //==================================================================================================
- // create a dropdown menu
- //==================================================================================================
- // the first parameter should be the HTML element which will act actuator for the menu
- //==================================================================================================
-
- @@MENU_DEFINITIONS@@
-
- //==================================================================================================
- // write drop downs into page
- //==================================================================================================
- // this method writes all the HTML for the menus into the page with document.write(). It must be
- // called within the body of the HTML page.
- //==================================================================================================
- TransMenu.renderAll();
- }
-");
-
-class NervecenterMenu extends Menu {
- private $menuJScript = "NOT-SET";
- private $menuJScriptEvents = "NOT-SET";
- private $menuID = "NOT-SET";
-
- public function __construct($identification = "", $filename = "", Component $c = NULL) {
- parent::__construct($identification, $filename, $c);
-
- $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
- $this->menuID = $id;
-
- if ($this->hasParent()) {
- $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n";
- }
- } // end __construct
-
- public function getMenuID() {
- return $this->menuID;
- }
-
- public function setMenuID($myMenuID) {
- $this->menuID = $myMenuID;
- }
-
- public function getMenuJScript() {
- $childJScript = "";
- foreach ($this->getChildren() as $component) {
- $childJScript .= $component->getMenuJScript();
- }
-
- if (! $this->hasParent()) {
- $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB);
- } else {
- $this->menuJScript .= "\n$childJScript\n";
- }
-
- return $this->menuJScript;
- }
-
- public function getMenuJScriptEvents() {
- return $this->menuJScriptEvents;
- }
-
- public function __toString() {
- if (! $this->hasParent()) {
- $menuMarkup =<<<EOD
- <div id="menu">
- @@CHILD_ELEMENTS@@
- </div>
-
-EOD;
- } else {
- $name = gettext($this->getID());
- $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
-
- $menuMarkup =<<<EOD
- <a id="{$id}" href="#">{$name}</a>
- @@CHILD_ELEMENTS@@
-EOD;
- }
-
- $childMarkup = "";
- foreach ($this->getChildren() as $component) {
- $childMarkup .= $component;
- }
-
- $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup);
-
- return $menuMarkup;
- }
-}
-
-class NervecenterMenuItem extends MenuItem {
- private $menuJScript = "NOT-SET";
- private $menuJScriptEvents = "NOT-SET";
-
- public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) {
- parent::__construct($identification, $filename, $href, $c);
-
- $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}";
- $name = gettext($this->getID());
- $file = $this->getFile();
-
- $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n");
- }
-
- public function getMenuJScript() {
- return $this->menuJScript;
- }
-
- public function getMenuJScriptEvents() {
- return $this->menuJScriptEvents;
- }
-
- public function __toString() {
- return "";
- }
-}
-
-?>
diff --git a/usr/local/www/themes/nervecenter/new_tab_menu.css b/usr/local/www/themes/nervecenter/new_tab_menu.css
deleted file mode 100644
index 04c4cf2..0000000
--- a/usr/local/www/themes/nervecenter/new_tab_menu.css
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- new_tab_menu.css
- part of pfSense
- Copyright (C) 2010-2011 Robert Zelaya
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-
- Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
- The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
-
- <tr>
- <td>
- <?php
- $tab_array_indent = 0; // move to the line in px
- $tab_array_space = 1; // space betwen lines in px
- $tab_array_char_limit = 82; // number or chr before the drop down box
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
-
-*/
-
-.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
-
-.newtabmenu li{float:left; margin-right:2px; text-align: center;}
-.newtabmenu a:link, .newtabmenu a:visited{
- background:url(images/new_tab_menu.png) right 45px;
- color:#ffffff; /* noactive font */
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- font-weight:bold;
- font-size:.9em;
- height:20px;
- line-height:20px;
- text-decoration:none;
-}
-.newtabmenu a span{
- background:url(images/new_tab_menu.png) left 45px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- height:20px;
- margin-right:7px;
- padding-left:7px;
-}
-.newtabmenu a:hover{
- background:url(images/new_tab_menu.png) right 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- color:#ffffff; /* hover over font */
-}
-.newtabmenu a:hover span{
- background:url(images/new_tab_menu.png) left 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
-}
-
-/* -------------------------------- */
-/* ACTIVE ELEMENTS */
-.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
- color:#000000; /* active font */
- background:url(images/new_tab_menu.png) right 0 no-repeat;
-}
-.newtabmenu_active a span, .newtabmenu_active a:hover span{
- background:url(images/new_tab_menu.png) left 0 no-repeat;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/nervecenter/no_big_logo b/usr/local/www/themes/nervecenter/no_big_logo
deleted file mode 100644
index 6e5c70d..0000000
--- a/usr/local/www/themes/nervecenter/no_big_logo
+++ /dev/null
@@ -1 +0,0 @@
-NO! DONT! \ No newline at end of file
diff --git a/usr/local/www/themes/nervecenter/rrdcolors.inc.php b/usr/local/www/themes/nervecenter/rrdcolors.inc.php
deleted file mode 100644
index dcb7a39..0000000
--- a/usr/local/www/themes/nervecenter/rrdcolors.inc.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/* $Id$ */
-/*
- rrdcolors.inc.php
- Part of pfSense
- Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/* This file is included by the RRD graphing page and sets the colors */
-
-/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* 95th Percentile Lines Out, In */
-$colortraffic95 = array('660000', 'FF0000');
-
-/* State Table pfrate, pfstates, pfnat, srcip, dstip */
-$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
-
-/* Processor Usage user, nice, system, int, processes */
-$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
-
-/* Memory Usage active, inact, free, cache, wire */
-$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
-
-/* MBUF Usage current, cache, total, max */
-$colormbuf = array('0080FF','00E344','FF0000','000000');
-
-/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
-$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
-$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
-/* Quality Graph Loss */
-$colorqualityloss = 'ee0000';
-
-/* Wireless Graph SNR, Rate, Channel*/
-/* Cellular Graph RSSI, */
-$colorwireless = array('333333','a83c3c','999999');
-
-/* SPAMD Times min area, avg area, max area, Time line */
-$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
-/* SPAMD Connections max area, min area, min line, max line, avg line */
-$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
-
-/* OpenVPN Users Online Users */
-$colorvpnusers = array('990000');
-
-/* Captive Portal Total Users Total Users */
-/* Captive Portal Concurrent Concurrent Users */
-$colorcaptiveportalusers = array('990000');
-
-?>
diff --git a/usr/local/www/themes/nervecenter/styles/jquery-ui-1.11.1.css b/usr/local/www/themes/nervecenter/styles/jquery-ui-1.11.1.css
deleted file mode 100644
index 8a8c54f..0000000
--- a/usr/local/www/themes/nervecenter/styles/jquery-ui-1.11.1.css
+++ /dev/null
@@ -1,1226 +0,0 @@
-/*! jQuery UI - v1.11.1 - 2014-09-22
-* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden {
- display: none;
-}
-.ui-helper-hidden-accessible {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
-}
-.ui-helper-reset {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- line-height: 1.3;
- text-decoration: none;
- font-size: 100%;
- list-style: none;
-}
-.ui-helper-clearfix:before,
-.ui-helper-clearfix:after {
- content: "";
- display: table;
- border-collapse: collapse;
-}
-.ui-helper-clearfix:after {
- clear: both;
-}
-.ui-helper-clearfix {
- min-height: 0; /* support: IE7 */
-}
-.ui-helper-zfix {
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- position: absolute;
- opacity: 0;
- filter:Alpha(Opacity=0); /* support: IE8 */
-}
-
-.ui-front {
- z-index: 100;
-}
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled {
- cursor: default !important;
-}
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- display: block;
- text-indent: -99999px;
- overflow: hidden;
- background-repeat: no-repeat;
-}
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-.ui-draggable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable {
- position: relative;
-}
-.ui-resizable-handle {
- position: absolute;
- font-size: 0.1px;
- display: block;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
- display: none;
-}
-.ui-resizable-n {
- cursor: n-resize;
- height: 7px;
- width: 100%;
- top: -5px;
- left: 0;
-}
-.ui-resizable-s {
- cursor: s-resize;
- height: 7px;
- width: 100%;
- bottom: -5px;
- left: 0;
-}
-.ui-resizable-e {
- cursor: e-resize;
- width: 7px;
- right: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-w {
- cursor: w-resize;
- width: 7px;
- left: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-se {
- cursor: se-resize;
- width: 12px;
- height: 12px;
- right: 1px;
- bottom: 1px;
-}
-.ui-resizable-sw {
- cursor: sw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- bottom: -5px;
-}
-.ui-resizable-nw {
- cursor: nw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- top: -5px;
-}
-.ui-resizable-ne {
- cursor: ne-resize;
- width: 9px;
- height: 9px;
- right: -5px;
- top: -5px;
-}
-.ui-selectable {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-selectable-helper {
- position: absolute;
- z-index: 100;
- border: 1px dotted black;
-}
-.ui-sortable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-accordion .ui-accordion-header {
- display: block;
- cursor: pointer;
- position: relative;
- margin: 2px 0 0 0;
- padding: .5em .5em .5em .7em;
- min-height: 0; /* support: IE7 */
- font-size: 100%;
-}
-.ui-accordion .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
- position: absolute;
- left: .5em;
- top: 50%;
- margin-top: -8px;
-}
-.ui-accordion .ui-accordion-content {
- padding: 1em 2.2em;
- border-top: 0;
- overflow: auto;
-}
-.ui-autocomplete {
- position: absolute;
- top: 0;
- left: 0;
- cursor: default;
-}
-.ui-button {
- display: inline-block;
- position: relative;
- padding: 0;
- line-height: normal;
- margin-right: .1em;
- cursor: pointer;
- vertical-align: middle;
- text-align: center;
- overflow: visible; /* removes extra width in IE */
-}
-.ui-button,
-.ui-button:link,
-.ui-button:visited,
-.ui-button:hover,
-.ui-button:active {
- text-decoration: none;
-}
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
- width: 2.2em;
-}
-/* button elements seem to need a little more width */
-button.ui-button-icon-only {
- width: 2.4em;
-}
-.ui-button-icons-only {
- width: 3.4em;
-}
-button.ui-button-icons-only {
- width: 3.7em;
-}
-
-/* button text element */
-.ui-button .ui-button-text {
- display: block;
- line-height: normal;
-}
-.ui-button-text-only .ui-button-text {
- padding: .4em 1em;
-}
-.ui-button-icon-only .ui-button-text,
-.ui-button-icons-only .ui-button-text {
- padding: .4em;
- text-indent: -9999999px;
-}
-.ui-button-text-icon-primary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 1em .4em 2.1em;
-}
-.ui-button-text-icon-secondary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 2.1em .4em 1em;
-}
-.ui-button-text-icons .ui-button-text {
- padding-left: 2.1em;
- padding-right: 2.1em;
-}
-/* no icon support for input elements, provide padding by default */
-input.ui-button {
- padding: .4em 1em;
-}
-
-/* button icon element(s) */
-.ui-button-icon-only .ui-icon,
-.ui-button-text-icon-primary .ui-icon,
-.ui-button-text-icon-secondary .ui-icon,
-.ui-button-text-icons .ui-icon,
-.ui-button-icons-only .ui-icon {
- position: absolute;
- top: 50%;
- margin-top: -8px;
-}
-.ui-button-icon-only .ui-icon {
- left: 50%;
- margin-left: -8px;
-}
-.ui-button-text-icon-primary .ui-button-icon-primary,
-.ui-button-text-icons .ui-button-icon-primary,
-.ui-button-icons-only .ui-button-icon-primary {
- left: .5em;
-}
-.ui-button-text-icon-secondary .ui-button-icon-secondary,
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
- right: .5em;
-}
-
-/* button sets */
-.ui-buttonset {
- margin-right: 7px;
-}
-.ui-buttonset .ui-button {
- margin-left: 0;
- margin-right: -.3em;
-}
-
-/* workarounds */
-/* reset extra padding in Firefox, see h5bp.com/l */
-input.ui-button::-moz-focus-inner,
-button.ui-button::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-.ui-datepicker {
- width: 17em;
- padding: .2em .2em 0;
- display: none;
-}
-.ui-datepicker .ui-datepicker-header {
- position: relative;
- padding: .2em 0;
-}
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-next {
- position: absolute;
- top: 2px;
- width: 1.8em;
- height: 1.8em;
-}
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
- top: 1px;
-}
-.ui-datepicker .ui-datepicker-prev {
- left: 2px;
-}
-.ui-datepicker .ui-datepicker-next {
- right: 2px;
-}
-.ui-datepicker .ui-datepicker-prev-hover {
- left: 1px;
-}
-.ui-datepicker .ui-datepicker-next-hover {
- right: 1px;
-}
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
- display: block;
- position: absolute;
- left: 50%;
- margin-left: -8px;
- top: 50%;
- margin-top: -8px;
-}
-.ui-datepicker .ui-datepicker-title {
- margin: 0 2.3em;
- line-height: 1.8em;
- text-align: center;
-}
-.ui-datepicker .ui-datepicker-title select {
- font-size: 1em;
- margin: 1px 0;
-}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year {
- width: 45%;
-}
-.ui-datepicker table {
- width: 100%;
- font-size: .9em;
- border-collapse: collapse;
- margin: 0 0 .4em;
-}
-.ui-datepicker th {
- padding: .7em .3em;
- text-align: center;
- font-weight: bold;
- border: 0;
-}
-.ui-datepicker td {
- border: 0;
- padding: 1px;
-}
-.ui-datepicker td span,
-.ui-datepicker td a {
- display: block;
- padding: .2em;
- text-align: right;
- text-decoration: none;
-}
-.ui-datepicker .ui-datepicker-buttonpane {
- background-image: none;
- margin: .7em 0 0 0;
- padding: 0 .2em;
- border-left: 0;
- border-right: 0;
- border-bottom: 0;
-}
-.ui-datepicker .ui-datepicker-buttonpane button {
- float: right;
- margin: .5em .2em .4em;
- cursor: pointer;
- padding: .2em .6em .3em .6em;
- width: auto;
- overflow: visible;
-}
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
- float: left;
-}
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi {
- width: auto;
-}
-.ui-datepicker-multi .ui-datepicker-group {
- float: left;
-}
-.ui-datepicker-multi .ui-datepicker-group table {
- width: 95%;
- margin: 0 auto .4em;
-}
-.ui-datepicker-multi-2 .ui-datepicker-group {
- width: 50%;
-}
-.ui-datepicker-multi-3 .ui-datepicker-group {
- width: 33.3%;
-}
-.ui-datepicker-multi-4 .ui-datepicker-group {
- width: 25%;
-}
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
- border-left-width: 0;
-}
-.ui-datepicker-multi .ui-datepicker-buttonpane {
- clear: left;
-}
-.ui-datepicker-row-break {
- clear: both;
- width: 100%;
- font-size: 0;
-}
-
-/* RTL support */
-.ui-datepicker-rtl {
- direction: rtl;
-}
-.ui-datepicker-rtl .ui-datepicker-prev {
- right: 2px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next {
- left: 2px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
- right: 1px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
- left: 1px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
- clear: right;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
- float: left;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
-.ui-datepicker-rtl .ui-datepicker-group {
- float: right;
-}
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
- border-right-width: 0;
- border-left-width: 1px;
-}
-.ui-dialog {
- overflow: hidden;
- position: absolute;
- top: 0;
- left: 0;
- padding: .2em;
- outline: 0;
-}
-.ui-dialog .ui-dialog-titlebar {
- padding: .4em 1em;
- position: relative;
-}
-.ui-dialog .ui-dialog-title {
- float: left;
- margin: .1em 0;
- white-space: nowrap;
- width: 90%;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.ui-dialog .ui-dialog-titlebar-close {
- position: absolute;
- right: .3em;
- top: 50%;
- width: 20px;
- margin: -10px 0 0 0;
- padding: 1px;
- height: 20px;
-}
-.ui-dialog .ui-dialog-content {
- position: relative;
- border: 0;
- padding: .5em 1em;
- background: none;
- overflow: auto;
-}
-.ui-dialog .ui-dialog-buttonpane {
- text-align: left;
- border-width: 1px 0 0 0;
- background-image: none;
- margin-top: .5em;
- padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
- float: right;
-}
-.ui-dialog .ui-dialog-buttonpane button {
- margin: .5em .4em .5em 0;
- cursor: pointer;
-}
-.ui-dialog .ui-resizable-se {
- width: 12px;
- height: 12px;
- right: -5px;
- bottom: -5px;
- background-position: 16px 16px;
-}
-.ui-draggable .ui-dialog-titlebar {
- cursor: move;
-}
-.ui-menu {
- list-style: none;
- padding: 0;
- margin: 0;
- display: block;
- outline: none;
-}
-.ui-menu .ui-menu {
- position: absolute;
-}
-.ui-menu .ui-menu-item {
- position: relative;
- margin: 0;
- padding: 3px 1em 3px .4em;
- cursor: pointer;
- min-height: 0; /* support: IE7 */
- /* support: IE10, see #8844 */
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
-}
-.ui-menu .ui-menu-divider {
- margin: 5px 0;
- height: 0;
- font-size: 0;
- line-height: 0;
- border-width: 1px 0 0 0;
-}
-.ui-menu .ui-state-focus,
-.ui-menu .ui-state-active {
- margin: -1px;
-}
-
-/* icon support */
-.ui-menu-icons {
- position: relative;
-}
-.ui-menu-icons .ui-menu-item {
- padding-left: 2em;
-}
-
-/* left-aligned */
-.ui-menu .ui-icon {
- position: absolute;
- top: 0;
- bottom: 0;
- left: .2em;
- margin: auto 0;
-}
-
-/* right-aligned */
-.ui-menu .ui-menu-icon {
- left: auto;
- right: 0;
-}
-.ui-progressbar {
- height: 1em;
- text-align: left;
- overflow: hidden;
-}
-.ui-progressbar .ui-progressbar-value {
- margin: -1px;
- height: 100%;
- background-color: #990000;
-}
-.ui-progressbar .ui-progressbar-overlay {
- background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
- height: 100%;
- filter: alpha(opacity=25); /* support: IE8 */
- opacity: 0.25;
-}
-.ui-progressbar-indeterminate .ui-progressbar-value {
- background-image: none;
-}
-.ui-selectmenu-menu {
- padding: 0;
- margin: 0;
- position: absolute;
- top: 0;
- left: 0;
- display: none;
-}
-.ui-selectmenu-menu .ui-menu {
- overflow: auto;
- /* Support: IE7 */
- overflow-x: hidden;
- padding-bottom: 1px;
-}
-.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
- font-size: 1em;
- font-weight: bold;
- line-height: 1.5;
- padding: 2px 0.4em;
- margin: 0.5em 0 0 0;
- height: auto;
- border: 0;
-}
-.ui-selectmenu-open {
- display: block;
-}
-.ui-selectmenu-button {
- display: inline-block;
- overflow: hidden;
- position: relative;
- text-decoration: none;
- cursor: pointer;
-}
-.ui-selectmenu-button span.ui-icon {
- right: 0.5em;
- left: auto;
- margin-top: -8px;
- position: absolute;
- top: 50%;
-}
-.ui-selectmenu-button span.ui-selectmenu-text {
- text-align: left;
- padding: 0.4em 2.1em 0.4em 1em;
- display: block;
- line-height: 1.4;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.ui-slider {
- position: relative;
- text-align: left;
-}
-.ui-slider .ui-slider-handle {
- position: absolute;
- z-index: 2;
- width: 1.2em;
- height: 1.2em;
- cursor: default;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-slider .ui-slider-range {
- position: absolute;
- z-index: 1;
- font-size: .7em;
- display: block;
- border: 0;
- background-position: 0 0;
-}
-
-/* support: IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
- filter: inherit;
-}
-
-.ui-slider-horizontal {
- height: .8em;
-}
-.ui-slider-horizontal .ui-slider-handle {
- top: -.3em;
- margin-left: -.6em;
-}
-.ui-slider-horizontal .ui-slider-range {
- top: 0;
- height: 100%;
-}
-.ui-slider-horizontal .ui-slider-range-min {
- left: 0;
-}
-.ui-slider-horizontal .ui-slider-range-max {
- right: 0;
-}
-
-.ui-slider-vertical {
- width: .8em;
- height: 100px;
-}
-.ui-slider-vertical .ui-slider-handle {
- left: -.3em;
- margin-left: 0;
- margin-bottom: -.6em;
-}
-.ui-slider-vertical .ui-slider-range {
- left: 0;
- width: 100%;
-}
-.ui-slider-vertical .ui-slider-range-min {
- bottom: 0;
-}
-.ui-slider-vertical .ui-slider-range-max {
- top: 0;
-}
-.ui-spinner {
- position: relative;
- display: inline-block;
- overflow: hidden;
- padding: 0;
- vertical-align: middle;
-}
-.ui-spinner-input {
- border: none;
- background: none;
- color: inherit;
- padding: 0;
- margin: .2em 0;
- vertical-align: middle;
- margin-left: .4em;
- margin-right: 22px;
-}
-.ui-spinner-button {
- width: 16px;
- height: 50%;
- font-size: .5em;
- padding: 0;
- margin: 0;
- text-align: center;
- position: absolute;
- cursor: default;
- display: block;
- overflow: hidden;
- right: 0;
-}
-/* more specificity required here to override default borders */
-.ui-spinner a.ui-spinner-button {
- border-top: none;
- border-bottom: none;
- border-right: none;
-}
-/* vertically center icon */
-.ui-spinner .ui-icon {
- position: absolute;
- margin-top: -8px;
- top: 50%;
- left: 0;
-}
-.ui-spinner-up {
- top: 0;
-}
-.ui-spinner-down {
- bottom: 0;
-}
-
-/* TR overrides */
-.ui-spinner .ui-icon-triangle-1-s {
- /* need to fix icons sprite */
- background-position: -65px -16px;
-}
-.ui-tabs {
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
- padding: .2em;
-}
-.ui-tabs .ui-tabs-nav {
- margin: 0;
- padding: .2em .2em 0;
-}
-.ui-tabs .ui-tabs-nav li {
- list-style: none;
- float: left;
- position: relative;
- top: 0;
- margin: 1px .2em 0 0;
- border-bottom-width: 0;
- padding: 0;
- white-space: nowrap;
-}
-.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
- float: left;
- padding: .5em 1em;
- text-decoration: none;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
- margin-bottom: -1px;
- padding-bottom: 1px;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
- cursor: text;
-}
-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
- cursor: pointer;
-}
-.ui-tabs .ui-tabs-panel {
- display: block;
- border-width: 0;
- padding: 1em 1.4em;
- background: none;
-}
-.ui-tooltip {
- padding: 8px;
- position: absolute;
- z-index: 9999;
- max-width: 300px;
- -webkit-box-shadow: 0 0 5px #aaa;
- box-shadow: 0 0 5px #aaa;
-}
-body .ui-tooltip {
- border-width: 2px;
-}
-
-/* Component containers
-----------------------------------*/
-.ui-widget {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1.1em;
-}
-.ui-widget .ui-widget {
- font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1em;
-}
-.ui-widget-content {
- border: 1px solid #aaaaaa;
- background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
- color: #333333;
-}
-.ui-widget-content a {
- color: #333333;
-}
-.ui-widget-header {
- border: 1px solid #bbbbbb;
- /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
- color: #444444;
- font-weight: bold;
-}
-.ui-widget-header a {
- color: #444444;
-}
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default {
- border: 1px solid #cccccc;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #3383bb;
-}
-.ui-state-default a,
-.ui-state-default a:link,
-.ui-state-default a:visited {
- color: #3383bb;
- text-decoration: none;
-}
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus {
- border: 1px solid #bbbbbb;
- background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #599fcf;
-}
-.ui-state-hover a,
-.ui-state-hover a:hover,
-.ui-state-hover a:link,
-.ui-state-hover a:visited,
-.ui-state-focus a,
-.ui-state-focus a:hover,
-.ui-state-focus a:link,
-.ui-state-focus a:visited {
- color: #599fcf;
- text-decoration: none;
-}
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active {
- border: 1px solid #999999;
- background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #ffffff;
-}
-.ui-state-active a,
-.ui-state-active a:link,
-.ui-state-active a:visited {
- color: #ffffff;
- text-decoration: none;
-}
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight,
-.ui-widget-header .ui-state-highlight {
- border: 1px solid #ffffff;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
- color: #444444;
-}
-.ui-state-highlight a,
-.ui-widget-content .ui-state-highlight a,
-.ui-widget-header .ui-state-highlight a {
- color: #444444;
-}
-.ui-state-error,
-.ui-widget-content .ui-state-error,
-.ui-widget-header .ui-state-error {
- border: 1px solid #c0402a;
- background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
- color: #ffffff;
-}
-.ui-state-error a,
-.ui-widget-content .ui-state-error a,
-.ui-widget-header .ui-state-error a {
- color: #ffffff;
-}
-.ui-state-error-text,
-.ui-widget-content .ui-state-error-text,
-.ui-widget-header .ui-state-error-text {
- color: #ffffff;
-}
-.ui-priority-primary,
-.ui-widget-content .ui-priority-primary,
-.ui-widget-header .ui-priority-primary {
- font-weight: bold;
-}
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary,
-.ui-widget-header .ui-priority-secondary {
- opacity: .7;
- filter:Alpha(Opacity=70); /* support: IE8 */
- font-weight: normal;
-}
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled,
-.ui-widget-header .ui-state-disabled {
- opacity: .35;
- filter:Alpha(Opacity=35); /* support: IE8 */
- background-image: none;
-}
-.ui-state-disabled .ui-icon {
- filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
-}
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- width: 16px;
- height: 16px;
-}
-.ui-icon,
-.ui-widget-content .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-widget-header .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-state-default .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
-}
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-active .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
-}
-.ui-state-highlight .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
-}
-
-/* positioning */
-.ui-icon-blank { background-position: 16px 16px; }
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-on { background-position: -96px -144px; }
-.ui-icon-radio-off { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
- border-top-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
- border-top-right-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
- border-bottom-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
- border-bottom-right-radius: 6px;
-}
-
-/* Overlays */
-.ui-widget-overlay {
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
- opacity: .8;
- filter: Alpha(Opacity=80); /* support: IE8 */
-}
-.ui-widget-shadow {
- margin: -4px 0 0 -4px;
- padding: 4px;
- background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
- opacity: .6;
- filter: Alpha(Opacity=60); /* support: IE8 */
- border-radius: 0pxdow;
-}
diff --git a/usr/local/www/themes/nervecenter/styles/menustyles.css b/usr/local/www/themes/nervecenter/styles/menustyles.css
deleted file mode 100644
index 06b3c7a..0000000
--- a/usr/local/www/themes/nervecenter/styles/menustyles.css
+++ /dev/null
@@ -1,44 +0,0 @@
-#navigation {
- /* border:1px solid black; */
- width: 98%;
- vertical-align: middle;
- height: 16px;
- padding-top: 4px;
- }
-
-#menu {
- /* background: #990000; */
- /* border-bottom:1px solid white; */
- padding: 0 0 0 0;
- width: 98%;
- vertical-align: middle;
- height: 16px;
- }
-#menu a {
- padding: 2px 28px 4px 28px;
- text-decoration: none;
- font-weight: bold;
- font-size: 1.0em;
- color: #FFFFFF;
- width: 08%;
- height: 16px;
- }
-#menu a.hover {
- background: #AF2020;
- }
-#menu span {
- display: none;
- }
-
-#subnav {
- font-size: 10px;
- margin-bottom: 2em;
- }
-#subnav a {
- color: #FF0000; /* #FB3B00; */
- margin-right: 1em;
- }
-#subnav span {
- color: silver;
- margin-right: 1em;
- }
diff --git a/usr/local/www/themes/nervecenter/styles/transmenu.css b/usr/local/www/themes/nervecenter/styles/transmenu.css
deleted file mode 100644
index f683574..0000000
--- a/usr/local/www/themes/nervecenter/styles/transmenu.css
+++ /dev/null
@@ -1,75 +0,0 @@
-/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */
-.transMenu {
- position:absolute;
- overflow:hidden;
- left:-1000px;
- top:-1000px;
- }
-
-/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */
-.transMenu .content {
- position:absolute;
- }
-
-/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */
-.transMenu .items {
- position:relative;
- left:0px; top:0px;
- z-index:2;
- }
-
-.transMenu.top .items {
- border-top:none;
- }
-
-/* each TR.item is one menu item */
-.transMenu .item {
- color: #FFFFFF; /* #336; */
- font-size: 1.1em;
- font-weight: normal;
- font-family:sans-serif;
- text-decoration:none;
- /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */
- border:none;
- cursor:pointer;
- cursor:hand;
- }
-
-/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */
-/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */
-.transMenu .background {
- position:absolute;
- left:0px; top:0px;
- z-index:1;
- -moz-opacity:.8;
- filter:alpha(opacity=80);
- }
-
-/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */
-.transMenu .shadowRight {
- position:absolute;
- z-index:3;
- top:3px; width:2px;
- -moz-opacity:.4;
- filter:alpha(opacity=40);
- }
-
-/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */
-.transMenu .shadowBottom {
- position:absolute;
- z-index:1;
- left:3px; height:2px;
- -moz-opacity:.4;
- filter:alpha(opacity=40);
- }
-
-/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */
-.transMenu .item.hover {
- background:#fdfdfd;
- color:black;
- }
-
-/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */
-.transMenu .item img {
- margin-left:10px;
- } \ No newline at end of file
diff --git a/usr/local/www/themes/nervecenter/wizard.css b/usr/local/www/themes/nervecenter/wizard.css
deleted file mode 100644
index a2d31d5..0000000
--- a/usr/local/www/themes/nervecenter/wizard.css
+++ /dev/null
@@ -1,1060 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-
-}
-
-.nowrap { white-space: nowrap; }
-
-/* please adjust the bgcolor to be used together with niftycorners! */
-.rtop, .artop {
- background-color: #999999;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 9px;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- /* background: url('images/background.png') no-repeat; */
- background-position : center 0px;
- background-color: #999999;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
- font-size: 14px;
- color: #cccccc;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- /* background: url('images/menu.gif') no-repeat; */
- /* width: 693px; */
- position: relative;
- top: -25px;
- left: 3px;
- width: 810px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- /* width: 7.5em; */
- width: 8.77em;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #990000;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background-color: #666666;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 10px;
- padding-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 8px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-#login {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 340px;
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 50px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login #username, #password {
- font-size: 1em;
- width: 60%;
- padding: 3px;
- margin: 0em;
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
diff --git a/usr/local/www/themes/pfsense-dropdown/all.css b/usr/local/www/themes/pfsense-dropdown/all.css
deleted file mode 100644
index 3fa0630..0000000
--- a/usr/local/www/themes/pfsense-dropdown/all.css
+++ /dev/null
@@ -1,1028 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-}
-
-.nowrap { white-space: nowrap; }
-
-.addgatewaybox {
- background-color: #990000;
- border-style: none none none none;
- width: 225px;
-}
-
-.infobox {
- width:100%;
-}
-
-.infoboxsave {
- padding-right: 10px;
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-.inputerrorsleft {
- background-color: #990000;
- width: 36px;
- text-align: center;
-}
-
-.inputerrorsright {
- background-color: #FFD9D1;
- color: #000000;
- font-size: 11px;
- padding-left: 8px;
- padding-top: 6px;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-
-form input {
- font-size: 1.1em;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 220px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 11px;
- font-family: "Trebuchet MS", sans-serif;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- background-color: #ffffff;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
-
-}
-
-#header {
- height: 70px;
- width: 800px;
-}
-#header-left {
- position: relative;
- background: url('images/logo.gif') no-repeat;
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
- background-color: #fff;
-}
-#header-right {
- position: relative;
- background: url('images/header.gif') no-repeat;
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-
-#header-right .container .left {
- position: relative;
- top: 32px;
- left: 9px;
- font-size: 1.8em;
-}
-
-#header-right .container .right {
- position: relative;
- top: -8px;
- left: 195px;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.gif') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
-}
-
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: bold;
- font: Verdana;
- text-align: center;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-
-
-#content {
- border-top: 1px solid #FFFFFF;
- margin-top: 0px;
- padding-top: 0px;
- width: 800px;
-}
-
-#left {
- width: 800px;
- height: 25px;
- margin-bottom: 5px;
-}
-#right {
- width: 770px;
- margin-left: 5px;
- margin-right: 5px;
- margin-top: 4px;
- padding-top: 1px;
- padding-bottom: 15px;
- padding-left: 10px;
- padding-right: 10px;
- border-left: 1px solid #000000;
- border-right: 1px solid #000000;
-}
-
-#footer {
- position: relative;
- top: 3px;
- padding: 0px;
- margin: 6px;
- margin-left: 0px;
- margin-top: 2px;
- width: 800px;
- background-color: #990000;
- text-align: center;
- color: #ffffff;
- font-size: 0.75em;
- clear: both;
- margin-bottom: 20px;
- z-index: 0;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- background: url('images/menu.gif') no-repeat;
- /* width: 693px; */
- width: 800px;
- padding: 0px;
- height: 28px;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
- z-index: 10;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- width: 6.2em;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
- text-align: center;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: 0px;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- padding: 0em 0 1em 0;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: hand;
-}
-#navigation ul li:hover {
- cursor: hand;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: underline;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #000;
- background-color: #000;
- color: #FFF;
-}
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: underline;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
-
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #FFFFFF;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listrborder {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-left: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- color: #FFFFFF;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #DDDDDD;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-
-#login {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 340px;
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 50px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login #username, #password, #password2 {
- font-size: small;
- width: 60%;
- padding-left: 19px;
- padding: 3px;
- margin: 0em;
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-
-/* Widget CSS */
-.widgetsubheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #B1B1B1;
- padding-right: 6px;
- padding-left: 6px;
- color: #000000;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetdiv{
- margin:5px;
- padding: 5px;
- background:#CCCCCC;
-}
-.widgetconfigdiv{
- background:#BBBBBB;
- font-size: 11px;
- color: #000000;
- padding-right: 5px;
- padding-left: 5px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-
-div#log div.log-entry-mini {
- clear: both;
-}
-
-div#log div.log-entry-mini span {
- padding: 2px 2px 2px 2px;
- padding-left: 6px;
-}
-
-div#log span.log-action-mini-header,
-div#log span.log-time-mini-header,
-div#log span.log-interface-mini-header,
-div#log span.log-source-mini-header,
-div#log span.log-destination-mini-header,
-div#log span.log-protocol-mini-header {
- float: left;
- text-align: left;
- background-color: #FFFFFF;
- font-size: 12px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-time-mini,
-div#log span.log-interface-mini,
-div#log span.log-source-mini,
-div#log span.log-destination-mini,
-div#log span.log-protocol-mini {
- float: left;
- text-align: left;
- background-color: #FFFFFF;
- font-size: 11px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-action-mini-header {
- width: 6%;
-}
-
-div#log span.log-time-mini,
-div#log span.log-time-mini-header {
- width: 19%;
-}
-
-div#log span.log-interface-mini,
-div#log span.log-interface-mini-header {
- width: 8%;
-}
-
-div#log span.log-source-mini,
-div#log span.log-source-mini-header {
- width: 23%;
-}
-
-div#log span.log-destination-mini,
-div#log span.log-destination-mini-header {
- width: 31%;
-}
-
-div#log span.log-protocol-mini,
-div#log span.log-protocol-mini-header {
- width: 8%;
- border-right: 1px solid #999;
-}
-
-/* Sortable tables */
-table.sortable thead {
- cursor: default;
-<!-- background-color: #EEEEEE;-->
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-/*thermal_sensors widget styles*/
-
-.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
-.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
-.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
- background-color: LimeGreen;
- border-top-width: 2px; border-top-color: Lime;
- border-left-width: 0px;
- border-right-width: 0px;
- border-bottom-width: 2px; border-bottom-color: Green;
-}
-.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
-.thermalSensorText { float: left; height: 20px; top: 3px; }
-.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
-
-.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-
-.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
-
-.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
-
-/* widget textarea styles - full width */
-.textarea_widget {
- width: 100%;
- resize:vertical;
- -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
- -moz-box-sizing: border-box; /* Firefox, other Gecko */
- box-sizing: border-box; /* IE 8+ */
-}
diff --git a/usr/local/www/themes/pfsense-dropdown/apple-touch-icon.png b/usr/local/www/themes/pfsense-dropdown/apple-touch-icon.png
deleted file mode 100755
index 7a4b975..0000000
--- a/usr/local/www/themes/pfsense-dropdown/apple-touch-icon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/bottom-loader.js b/usr/local/www/themes/pfsense-dropdown/bottom-loader.js
deleted file mode 100644
index fad206e..0000000
--- a/usr/local/www/themes/pfsense-dropdown/bottom-loader.js
+++ /dev/null
@@ -1,11 +0,0 @@
-//<![CDATA[
-
-NiftyCheck();
-Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
-Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
-Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
-Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
-Rounded("div#topbox","all","#FFF","#990000","smooth");
-Rounded("div#footer","bl br tl tr","#FFF","#990000","smooth");
-
-//]]>
diff --git a/usr/local/www/themes/pfsense-dropdown/images/alert_bgr.gif b/usr/local/www/themes/pfsense-dropdown/images/alert_bgr.gif
deleted file mode 100755
index 2a5c000..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/alert_bgr.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/header-alert.gif b/usr/local/www/themes/pfsense-dropdown/images/header-alert.gif
deleted file mode 100755
index 02eca2b..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/header-alert.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/header.gif b/usr/local/www/themes/pfsense-dropdown/images/header.gif
deleted file mode 100755
index 6f29ec9..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/header.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/help.png b/usr/local/www/themes/pfsense-dropdown/images/help.png
deleted file mode 100755
index 1de05e3..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/help.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/favicon.ico b/usr/local/www/themes/pfsense-dropdown/images/icons/favicon.ico
deleted file mode 100644
index 3440bf2..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g.gif
deleted file mode 100755
index 46ccb92..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g_inactive.gif
deleted file mode 100755
index cf983e4..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g_inactive.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced.gif
deleted file mode 100755
index 3ede1ff..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced_s.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced_s.gif
deleted file mode 100755
index b233549..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alert.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alert.gif
deleted file mode 100755
index 2f69355..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alert.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_host.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_host.gif
deleted file mode 100644
index ad43e17..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_host.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_net.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_net.gif
deleted file mode 100644
index abd1b8b..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_net.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_port.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_port.gif
deleted file mode 100644
index 4acf2aa..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_port.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url.gif
deleted file mode 100644
index 660571e..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url_reload.gif
deleted file mode 100644
index 55c1c4a..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url_reload.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block.gif
deleted file mode 100755
index 670c968..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gif
deleted file mode 100755
index eb726d6..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_d.gif
deleted file mode 100755
index e6345fe..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cablenic.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cablenic.gif
deleted file mode 100755
index a071c66..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cablenic.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal.gif
deleted file mode 100755
index a9c7c87..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal_mo.gif
deleted file mode 100755
index 1647e2f..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp.gif
deleted file mode 100755
index 9454a82..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp_d.gif
deleted file mode 100755
index 2ba8db2..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_chain.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_chain.png
deleted file mode 100644
index 12db07a..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_chain.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_check.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_check.gif
deleted file mode 100755
index 393674d..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_check.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_green.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_green.gif
deleted file mode 100755
index e171ba8..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_green.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_grey.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_grey.gif
deleted file mode 100755
index 00c865a..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_grey.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_red.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_red.gif
deleted file mode 100755
index 7b412ee..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_red.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_close.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_close.gif
deleted file mode 100755
index e0f86a7..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_close.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_configure.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_configure.gif
deleted file mode 100755
index 7182e0d..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_configure.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down.gif
deleted file mode 100755
index b71a9c5..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_d.gif
deleted file mode 100755
index 70a7473..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_mo.gif
deleted file mode 100755
index 584587a..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e.gif
deleted file mode 100755
index 2950800..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e_mo.gif
deleted file mode 100755
index 9ba5738..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_error.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_error.gif
deleted file mode 100755
index e0fa659..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_error.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_exclam.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_exclam.gif
deleted file mode 100755
index 36c2ec7..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_exclam.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_de.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_de.png
deleted file mode 100644
index 069cbbe..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_de.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_en.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_en.png
deleted file mode 100644
index bd7f9a5..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_en.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_es.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_es.png
deleted file mode 100644
index 434776c..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_es.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_pt_BR.png
deleted file mode 100644
index f786349..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_pt_BR.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_cert.png
deleted file mode 100644
index 48a34b6..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_cert.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_file.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_file.png
deleted file mode 100644
index 48a9ed2..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_file.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_group.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_group.png
deleted file mode 100644
index 7d929c0..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_host.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_host.png
deleted file mode 100644
index 867ef2c..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_host.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_imp.png
deleted file mode 100644
index f667cfc..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_imp.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_mail.png
deleted file mode 100644
index d2d4548..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_mail.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_pwd.png
deleted file mode 100644
index 06b53a1..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_pwd.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_search.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_search.png
deleted file mode 100644
index 33de926..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_search.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_time.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_time.png
deleted file mode 100644
index aa8300a..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_time.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_unknown.png
deleted file mode 100644
index 1857d0e..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_unknown.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_url.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_url.png
deleted file mode 100644
index cf56792..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_url.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_user.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_user.png
deleted file mode 100644
index e00eebe..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_fw-update.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_fw-update.gif
deleted file mode 100755
index 52c18ac..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_fw-update.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_help.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_help.gif
deleted file mode 100644
index 84c84db..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_help.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias.gif
deleted file mode 100644
index 0c569a7..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias_d.gif
deleted file mode 100644
index faa84d4..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_import_alias.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_import_alias.gif
deleted file mode 100755
index d11a5f0..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_import_alias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_info_pkg.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_info_pkg.gif
deleted file mode 100644
index cd3a532..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_info_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_down.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_down.gif
deleted file mode 100755
index 0626655..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_up.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_up.gif
deleted file mode 100755
index 1449513..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left.gif
deleted file mode 100755
index 8effefe..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_d.gif
deleted file mode 100755
index c778014..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_mo.gif
deleted file mode 100755
index 84c6fa2..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log.gif
deleted file mode 100755
index 4a1983a..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_d.gif
deleted file mode 100755
index d31bd9b..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s.gif
deleted file mode 100755
index f9fda33..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s_d.gif
deleted file mode 100755
index fb2c05f..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_logs.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_logs.gif
deleted file mode 100644
index afe0104..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_logs.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match.gif
deleted file mode 100644
index 215571f..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match_d.gif
deleted file mode 100644
index 6e4c364..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_minus.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_minus.gif
deleted file mode 100755
index 417544f..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_minus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_open.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_open.gif
deleted file mode 100755
index ac3da14..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_open.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other.gif
deleted file mode 100755
index e6f780f..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other_d.gif
deleted file mode 100755
index b08d970..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp.gif
deleted file mode 100755
index 96acaf3..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp_d.gif
deleted file mode 100755
index 7d7d00e..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass.gif
deleted file mode 100755
index fe1bb0d..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gif
deleted file mode 100755
index f7f4c20..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_d.gif
deleted file mode 100755
index 6adc431..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus.gif
deleted file mode 100755
index 2a94eeb..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl.gif
deleted file mode 100644
index 8dcd7c0..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl_p.gif
deleted file mode 100644
index 0c79849..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_d.gif
deleted file mode 100755
index ebc7457..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_mo.gif
deleted file mode 100755
index 1c7ca08..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_p.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_p.gif
deleted file mode 100644
index eb41284..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall.gif
deleted file mode 100755
index d78b867..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_d.gif
deleted file mode 100755
index 13658f7..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_mo.gif
deleted file mode 100755
index 90b576e..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg.gif
deleted file mode 100755
index 9aebb03..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_d.gif
deleted file mode 100755
index 4ab4992..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_mo.gif
deleted file mode 100755
index 7025d20..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml.gif
deleted file mode 100755
index 4542432..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_d.gif
deleted file mode 100755
index 8d3a68d..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_mo.gif
deleted file mode 100755
index 15e0aed..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject.gif
deleted file mode 100755
index 5565cd6..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject_d.gif
deleted file mode 100755
index 6c09fae..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_right.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_right.gif
deleted file mode 100755
index fdf2d8b..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart.gif
deleted file mode 100755
index e49fbd7..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart_d.gif
deleted file mode 100755
index a5d6d7c..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_running.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_running.gif
deleted file mode 100644
index 543fd56..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_running.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start.gif
deleted file mode 100755
index 09bb58f..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start_d.gif
deleted file mode 100755
index f58f111..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_status.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_status.gif
deleted file mode 100644
index a93bcfb..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_status.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop.gif
deleted file mode 100755
index 922addc..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop_d.gif
deleted file mode 100755
index b4cfdea..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stopped.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stopped.gif
deleted file mode 100644
index f93a25d..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stopped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_restart_mo.gif
deleted file mode 100755
index a092b40..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_restart_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_start_mo.gif
deleted file mode 100755
index ecdb58f..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_start_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_stop_mo.gif
deleted file mode 100755
index c00e208..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_stop_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group-grey.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group-grey.png
deleted file mode 100644
index d7b964d..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group.png
deleted file mode 100644
index 1c974f2..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user-grey.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user-grey.png
deleted file mode 100644
index 2f6047d..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user.png
deleted file mode 100644
index ef82156..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_lock_screen.png
deleted file mode 100644
index 30f306d..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_lock_screen.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_logout.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_logout.png
deleted file mode 100644
index 9bbb6c7..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_logout.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped.gif
deleted file mode 100644
index ffeb2cd..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped_p.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped_p.gif
deleted file mode 100755
index 6d46aaf..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule.gif
deleted file mode 100755
index e15ab6c..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule_d.gif
deleted file mode 100755
index f776281..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up.gif
deleted file mode 100755
index 883c5a2..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_d.gif
deleted file mode 100755
index 0ddcce2..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_mo.gif
deleted file mode 100755
index 9f869a4..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan.gif
deleted file mode 100755
index 1f0addc..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan_d.gif
deleted file mode 100755
index 35bf580..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wol_all.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wol_all.gif
deleted file mode 100755
index c77a978..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wol_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_nsaved.png
deleted file mode 100644
index 21cb27d..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_nsaved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_saved.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_saved.png
deleted file mode 100644
index ab82946..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_saved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x.gif
deleted file mode 100755
index 24e4d49..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_d.gif
deleted file mode 100755
index d2bfbc8..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_mo.gif
deleted file mode 100755
index da7b57c..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_p.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_p.gif
deleted file mode 100755
index 8828fa6..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/in.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/in.gif
deleted file mode 100644
index f1da771..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/in_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/in_d.gif
deleted file mode 100644
index 18e26be..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/out.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/out.gif
deleted file mode 100644
index 1a1d1d5..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/out_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/out_d.gif
deleted file mode 100644
index 879f1da..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/icons/out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/log.png b/usr/local/www/themes/pfsense-dropdown/images/log.png
deleted file mode 100755
index 762ba80..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/log.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/logo.gif b/usr/local/www/themes/pfsense-dropdown/images/logo.gif
deleted file mode 100755
index 553cbd5..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/logo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/logobig.jpg b/usr/local/www/themes/pfsense-dropdown/images/logobig.jpg
deleted file mode 100755
index 2ef196d..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/logobig.jpg
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/menu.gif b/usr/local/www/themes/pfsense-dropdown/images/menu.gif
deleted file mode 100755
index 7269210..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/menu.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/bar_blue.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/bar_blue.gif
deleted file mode 100755
index 741186a..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/bar_blue.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/bar_gray.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/bar_gray.gif
deleted file mode 100755
index e86e245..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/bar_gray.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/bar_left.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/bar_left.gif
deleted file mode 100755
index af751fa..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/bar_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/bar_right.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/bar_right.gif
deleted file mode 100755
index ff12d9e..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/bar_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/button.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/button.gif
deleted file mode 100755
index e85dbb3..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/button.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/key_128.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/key_128.gif
deleted file mode 100755
index ea5ae34..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/key_128.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/key_152.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/key_152.gif
deleted file mode 100755
index 6c7fc03..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/key_152.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/key_256.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/key_256.gif
deleted file mode 100755
index 3e1c377..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/key_256.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/key_64.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/key_64.gif
deleted file mode 100755
index 87892bd..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/key_64.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/left_background.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/left_background.gif
deleted file mode 100755
index 529d827..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/left_background.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/loader.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/loader.gif
deleted file mode 100755
index 5d10ac3..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/loader_tab.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/loader_tab.gif
deleted file mode 100755
index 05bb04c..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/loader_tab.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/logon.png b/usr/local/www/themes/pfsense-dropdown/images/misc/logon.png
deleted file mode 100755
index baf8a9d..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/logon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/progress_bar.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/progress_bar.gif
deleted file mode 100755
index 3b4aa52..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/progress_bar.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/rrd_error.png b/usr/local/www/themes/pfsense-dropdown/images/misc/rrd_error.png
deleted file mode 100755
index a79ecf3..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/rrd_error.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c.gif
deleted file mode 100755
index 317b758..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c_black.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c_black.gif
deleted file mode 100755
index 309846e..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o.gif
deleted file mode 100755
index eb95c32..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o_black.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o_black.gif
deleted file mode 100755
index f818f3b..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/widget_loader.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/widget_loader.gif
deleted file mode 100755
index fad101f..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/misc/widget_loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/new_tab_menu.png b/usr/local/www/themes/pfsense-dropdown/images/new_tab_menu.png
deleted file mode 100755
index 4bdfcef..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/new_tab_menu.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/status.png b/usr/local/www/themes/pfsense-dropdown/images/status.png
deleted file mode 100755
index a3e368e..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/status.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/transparent.gif b/usr/local/www/themes/pfsense-dropdown/images/transparent.gif
deleted file mode 100755
index 89c5530..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/images/transparent_pixel.gif b/usr/local/www/themes/pfsense-dropdown/images/transparent_pixel.gif
deleted file mode 100755
index 35d42e8..0000000
--- a/usr/local/www/themes/pfsense-dropdown/images/transparent_pixel.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/blank.gif b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/blank.gif
deleted file mode 100755
index a4fe2e6..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/blank.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-box-model.js
deleted file mode 100644
index 45543f6..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-box-model.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-core.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-core.js
deleted file mode 100644
index b11e2b1..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-core.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css-strict.js
deleted file mode 100644
index 4406d7a..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css-strict.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css2.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css2.js
deleted file mode 100644
index 7121c8e..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css2.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css3.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css3.js
deleted file mode 100644
index 86b24f5..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css3.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-fixed.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-fixed.js
deleted file mode 100644
index 4321cda..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-fixed.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-html4.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-html4.js
deleted file mode 100644
index 4d2baa9..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-html4.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-ie5.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-ie5.js
deleted file mode 100644
index 707fa56..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-ie5.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite-p.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite-p.js
deleted file mode 100644
index 3a66d19..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í></Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite.js
deleted file mode 100644
index 88c764f..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-png.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-png.js
deleted file mode 100644
index 7b8f2cf..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-png.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-server.css b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-server.css
deleted file mode 100644
index 47c7edd..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-server.css
+++ /dev/null
@@ -1,43 +0,0 @@
-body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
-body {margin: 8px; background: #333;}
-h1 {margin: 0;}
-h1 a:hover {background-color: transparent;}
-h2 {font-size: 1.75em;}
-h3 {font-size: 1.1em;}
-a:active {color: #ff0000;}
-a:link {color: #0a6cce;}
-a:visited {color: #0a6cce;}
-code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
- padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
-code.box {display: block; padding: 10px; margin: 0.5em 0;}
-ul {list-style-type: square;}
-dd {margin: .2em 0 .5em 1em;}
-dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
-dl.library dd {font-style: italic; margin-left: 3em;}
-dt {font-weight: bold;}
-dt.pack {color: brown;}
-a img {border-style: none;}
-hr {height: 1px; color: #000; border-style: solid;}
-hr.short {height: 2px; width: 100px;}
-div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
-hr {border-bottom-width: 0px;}
-div.header hr {color: #0a6cce; background-color: #0a6cce;}
-div.content {min-height: 100px;}
-div.footer hr {color: #898e79; background-color: #898e79; }
-div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
-a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
-div.footer a:hover {background-color: transparent; text-decoration: none;}
-div.header .menu {text-align: right;}
-div.footer {font-size: x-small; margin-top: 8px;}
-div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
-#license {margin-top: 5px; font-size: xx-small;}
-table {border-top: 1px solid #000; border-left: 1px solid #000;}
-th {background-color: #fff; text-align: left;}
-th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
-th.small {width: 100px;}
-th.medium {width: 200px;}
-th.large {width: 270px;}
-th.x-large {width: 408px;}
-table.fixed {table-layout: fixed;}
-span.comment {color: #666;}
-
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard-p.js
deleted file mode 100644
index 73e99ac..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì></Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard.js
deleted file mode 100644
index 2109905..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/test-trans.png b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/test-trans.png
deleted file mode 100755
index e187e2c..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/test-trans.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/niftyjsCode.js b/usr/local/www/themes/pfsense-dropdown/javascript/niftyjsCode.js
deleted file mode 100644
index 75ef8b0..0000000
--- a/usr/local/www/themes/pfsense-dropdown/javascript/niftyjsCode.js
+++ /dev/null
@@ -1,174 +0,0 @@
-function NiftyCheck(){
-if(!document.getElementById || !document.createElement)
- return(false);
-isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
-if(Array.prototype.push==null){Array.prototype.push=function(){
- this[this.length]=arguments[0]; return(this.length);};}
-return(true);
-}
-
-function Rounded(selector,wich,bk,color,opt){
-var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
-
-if(color=="transparent"){
- cn=cn+"x";
- ecolor=bk;
- bk="transparent";
- }
-else if(opt && opt.indexOf("border")>=0){
- var optar=opt.split(" ");
- for(i=0;i<optar.length;i++)
- if(optar[i].indexOf("#")>=0) ecolor=optar[i];
- if(ecolor=="") ecolor="#666";
- cn+="e";
- edges=true;
- }
-else if(opt && opt.indexOf("smooth")>=0){
- cn+="a";
- ecolor=Mix(bk,color);
- }
-if(opt && opt.indexOf("small")>=0) cn+="s";
-prefixt=cn;
-prefixb=cn;
-if(wich.indexOf("all")>=0){t=true;b=true;}
-else if(wich.indexOf("top")>=0) t="true";
-else if(wich.indexOf("tl")>=0){
- t="true";
- if(wich.indexOf("tr")<0) prefixt+="l";
- }
-else if(wich.indexOf("tr")>=0){
- t="true";
- prefixt+="r";
- }
-if(wich.indexOf("bottom")>=0) b=true;
-else if(wich.indexOf("bl")>=0){
- b="true";
- if(wich.indexOf("br")<0) prefixb+="l";
- }
-else if(wich.indexOf("br")>=0){
- b="true";
- prefixb+="r";
- }
-var v=getElementsBySelector(selector);
-var l=v.length;
-for(i=0;i<l;i++){
- if(edges) AddBorder(v[i],ecolor);
- if(t) AddTop(v[i],bk,color,ecolor,prefixt);
- if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
- }
-}
-
-function AddBorder(el,bc){
-var i;
-if(!el.passed){
- if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
- var t=el.firstChild.nodeValue;
- el.removeChild(el.lastChild);
- var d=CreateEl("span");
- d.style.display="block";
- d.appendChild(document.createTextNode(t));
- el.appendChild(d);
- }
- for(i=0;i<el.childNodes.length;i++){
- if(el.childNodes[i].nodeType==1){
- el.childNodes[i].style.borderLeft="1px solid "+bc;
- el.childNodes[i].style.borderRight="1px solid "+bc;
- }
- }
- }
-el.passed=true;
-}
-
-function AddTop(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=1;i<=lim;i++){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingTop=0;
-el.insertBefore(d,el.firstChild);
-}
-
-function AddBottom(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=lim;i>0;i--){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingBottom=0;
-el.appendChild(d);
-}
-
-function CreateEl(x){
-if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
-else return(document.createElement(x));
-}
-
-function getElementsBySelector(selector){
-var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
-
-if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
- s=selector.split(" ");
- var fs=s[0].split("#");
- if(fs.length==1) return(objlist);
- f=document.getElementById(fs[1]);
- if(f) return(f.getElementsByTagName(s[1]));
- return(objlist);
- }
-if(selector.indexOf("#")>0){ //id selector like "tag#id"
- s=selector.split("#");
- tag=s[0];
- selid=s[1];
- }
-if(selid!=""){
- f=document.getElementById(selid);
- if(f) objlist.push(f);
- return(objlist);
- }
-if(selector.indexOf(".")>0){ //class selector like "tag.class"
- s=selector.split(".");
- tag=s[0];
- selclass=s[1];
- }
-var v=document.getElementsByTagName(tag); // tag selector like "tag"
-if(selclass=="")
- return(v);
-for(i=0;i<v.length;i++){
- if(v[i].className.indexOf(selclass)>=0){
- objlist.push(v[i]);
- }
- }
-return(objlist);
-}
-
-function Mix(c1,c2){
-var i,step1,step2,x,y,r=new Array(3);
-if(c1.length==4)step1=1;
-else step1=2;
-if(c2.length==4) step2=1;
-else step2=2;
-for(i=0;i<3;i++){
- x=parseInt(c1.substr(1+step1*i,step1),16);
- if(step1==1) x=16*x+x;
- y=parseInt(c2.substr(1+step2*i,step2),16);
- if(step2==1) y=16*y+y;
- r[i]=Math.floor((x*50+y*50)/100);
- }
-return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
-} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense-dropdown/loader.js b/usr/local/www/themes/pfsense-dropdown/loader.js
deleted file mode 100644
index e8612db..0000000
--- a/usr/local/www/themes/pfsense-dropdown/loader.js
+++ /dev/null
@@ -1,29 +0,0 @@
-//<![CDATA[
-var browser = '';
-var version = '';
-var entrance = '';
-var cond = '';
-
-// BROWSER?
-if (browser == '') {
- if (navigator.appName.indexOf('Microsoft') != -1)
- browser = 'IE';
- else if (navigator.appName.indexOf('Netscape') != -1)
- browser = 'Netscape';
- else
- browser = 'IE';
-}
-if (version == '') {
- version= navigator.appVersion;
- paren = version.indexOf('(');
- whole_version = navigator.appVersion.substring(0,paren-1);
- version = parseInt(whole_version);
-}
-
-if (browser == 'IE' && version < 7) {
- document.write('<script type="text/javascript" src="/themes/pfsense-dropdown/javascript/ie7/ie7-standard-p.js"></script>');
-}
-
-document.write('<script type="text/javascript" src="/themes/pfsense-dropdown/javascript/niftyjsCode.js"></script>');
-
-//]]>
diff --git a/usr/local/www/themes/pfsense-dropdown/login.css b/usr/local/www/themes/pfsense-dropdown/login.css
deleted file mode 100644
index f8abdfc..0000000
--- a/usr/local/www/themes/pfsense-dropdown/login.css
+++ /dev/null
@@ -1,1127 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-/* please adjust the bgcolor to be used together with niftycorners! */
-.rtop, .artop {
- background-color: #999999;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 9px;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- background-position : center 0px;
- background-color: #999999;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
- font-size: 14px;
- color: #cccccc;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- /* background: url('images/menu.gif') no-repeat; */
- /* width: 693px; */
- position: relative;
- top: -25px;
- left: 3px;
- width: 810px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- /* width: 7.5em; */
- width: 8.77em;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #990000;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background-color: #666666;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 10px;
- padding-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 8px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-
-#login {
-/* background: #cccccc; */
- background-color: transparent;
- border: 0px solid #cccccc;
- margin: 5em auto;
- padding: 0em;
- width: 400px;
-/* filter:alpha(opacity=60);
- -moz-opacity:0.6;
- -khtml-opacity: 0.6;
- opacity: 0.6; */
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
-/* background: #ffffff; */
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 400px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -420px;
- left: 70px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- top: -300px; */
-}
-
-#login #username, #password {
- font-size: 1em;
- width: 60%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- left: 10px;
- top: -300px; */
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- text-align: center;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -20px;
- left: 170px;
-}
-
-/* loginerror box follows */
-
-#login #inputerrors {
- background-color: transparent;
- border: 0px solid #666666;
- margin: 5em auto;
- vertical-align: middle;
- padding: 0em;
- width: 330px;
- height: 50px;
- position: relative;
- top: -370px;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense-dropdown/new_tab_menu.css b/usr/local/www/themes/pfsense-dropdown/new_tab_menu.css
deleted file mode 100644
index 04c4cf2..0000000
--- a/usr/local/www/themes/pfsense-dropdown/new_tab_menu.css
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- new_tab_menu.css
- part of pfSense
- Copyright (C) 2010-2011 Robert Zelaya
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-
- Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
- The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
-
- <tr>
- <td>
- <?php
- $tab_array_indent = 0; // move to the line in px
- $tab_array_space = 1; // space betwen lines in px
- $tab_array_char_limit = 82; // number or chr before the drop down box
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
-
-*/
-
-.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
-
-.newtabmenu li{float:left; margin-right:2px; text-align: center;}
-.newtabmenu a:link, .newtabmenu a:visited{
- background:url(images/new_tab_menu.png) right 45px;
- color:#ffffff; /* noactive font */
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- font-weight:bold;
- font-size:.9em;
- height:20px;
- line-height:20px;
- text-decoration:none;
-}
-.newtabmenu a span{
- background:url(images/new_tab_menu.png) left 45px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- height:20px;
- margin-right:7px;
- padding-left:7px;
-}
-.newtabmenu a:hover{
- background:url(images/new_tab_menu.png) right 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- color:#ffffff; /* hover over font */
-}
-.newtabmenu a:hover span{
- background:url(images/new_tab_menu.png) left 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
-}
-
-/* -------------------------------- */
-/* ACTIVE ELEMENTS */
-.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
- color:#000000; /* active font */
- background:url(images/new_tab_menu.png) right 0 no-repeat;
-}
-.newtabmenu_active a span, .newtabmenu_active a:hover span{
- background:url(images/new_tab_menu.png) left 0 no-repeat;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense-dropdown/rrdcolors.inc.php b/usr/local/www/themes/pfsense-dropdown/rrdcolors.inc.php
deleted file mode 100644
index dcb7a39..0000000
--- a/usr/local/www/themes/pfsense-dropdown/rrdcolors.inc.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/* $Id$ */
-/*
- rrdcolors.inc.php
- Part of pfSense
- Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/* This file is included by the RRD graphing page and sets the colors */
-
-/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* 95th Percentile Lines Out, In */
-$colortraffic95 = array('660000', 'FF0000');
-
-/* State Table pfrate, pfstates, pfnat, srcip, dstip */
-$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
-
-/* Processor Usage user, nice, system, int, processes */
-$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
-
-/* Memory Usage active, inact, free, cache, wire */
-$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
-
-/* MBUF Usage current, cache, total, max */
-$colormbuf = array('0080FF','00E344','FF0000','000000');
-
-/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
-$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
-$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
-/* Quality Graph Loss */
-$colorqualityloss = 'ee0000';
-
-/* Wireless Graph SNR, Rate, Channel*/
-/* Cellular Graph RSSI, */
-$colorwireless = array('333333','a83c3c','999999');
-
-/* SPAMD Times min area, avg area, max area, Time line */
-$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
-/* SPAMD Connections max area, min area, min line, max line, avg line */
-$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
-
-/* OpenVPN Users Online Users */
-$colorvpnusers = array('990000');
-
-/* Captive Portal Total Users Total Users */
-/* Captive Portal Concurrent Concurrent Users */
-$colorcaptiveportalusers = array('990000');
-
-?>
diff --git a/usr/local/www/themes/pfsense-dropdown/styles/jquery-ui-1.11.1.css b/usr/local/www/themes/pfsense-dropdown/styles/jquery-ui-1.11.1.css
deleted file mode 100644
index 8a8c54f..0000000
--- a/usr/local/www/themes/pfsense-dropdown/styles/jquery-ui-1.11.1.css
+++ /dev/null
@@ -1,1226 +0,0 @@
-/*! jQuery UI - v1.11.1 - 2014-09-22
-* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden {
- display: none;
-}
-.ui-helper-hidden-accessible {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
-}
-.ui-helper-reset {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- line-height: 1.3;
- text-decoration: none;
- font-size: 100%;
- list-style: none;
-}
-.ui-helper-clearfix:before,
-.ui-helper-clearfix:after {
- content: "";
- display: table;
- border-collapse: collapse;
-}
-.ui-helper-clearfix:after {
- clear: both;
-}
-.ui-helper-clearfix {
- min-height: 0; /* support: IE7 */
-}
-.ui-helper-zfix {
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- position: absolute;
- opacity: 0;
- filter:Alpha(Opacity=0); /* support: IE8 */
-}
-
-.ui-front {
- z-index: 100;
-}
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled {
- cursor: default !important;
-}
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- display: block;
- text-indent: -99999px;
- overflow: hidden;
- background-repeat: no-repeat;
-}
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-.ui-draggable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable {
- position: relative;
-}
-.ui-resizable-handle {
- position: absolute;
- font-size: 0.1px;
- display: block;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
- display: none;
-}
-.ui-resizable-n {
- cursor: n-resize;
- height: 7px;
- width: 100%;
- top: -5px;
- left: 0;
-}
-.ui-resizable-s {
- cursor: s-resize;
- height: 7px;
- width: 100%;
- bottom: -5px;
- left: 0;
-}
-.ui-resizable-e {
- cursor: e-resize;
- width: 7px;
- right: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-w {
- cursor: w-resize;
- width: 7px;
- left: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-se {
- cursor: se-resize;
- width: 12px;
- height: 12px;
- right: 1px;
- bottom: 1px;
-}
-.ui-resizable-sw {
- cursor: sw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- bottom: -5px;
-}
-.ui-resizable-nw {
- cursor: nw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- top: -5px;
-}
-.ui-resizable-ne {
- cursor: ne-resize;
- width: 9px;
- height: 9px;
- right: -5px;
- top: -5px;
-}
-.ui-selectable {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-selectable-helper {
- position: absolute;
- z-index: 100;
- border: 1px dotted black;
-}
-.ui-sortable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-accordion .ui-accordion-header {
- display: block;
- cursor: pointer;
- position: relative;
- margin: 2px 0 0 0;
- padding: .5em .5em .5em .7em;
- min-height: 0; /* support: IE7 */
- font-size: 100%;
-}
-.ui-accordion .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
- position: absolute;
- left: .5em;
- top: 50%;
- margin-top: -8px;
-}
-.ui-accordion .ui-accordion-content {
- padding: 1em 2.2em;
- border-top: 0;
- overflow: auto;
-}
-.ui-autocomplete {
- position: absolute;
- top: 0;
- left: 0;
- cursor: default;
-}
-.ui-button {
- display: inline-block;
- position: relative;
- padding: 0;
- line-height: normal;
- margin-right: .1em;
- cursor: pointer;
- vertical-align: middle;
- text-align: center;
- overflow: visible; /* removes extra width in IE */
-}
-.ui-button,
-.ui-button:link,
-.ui-button:visited,
-.ui-button:hover,
-.ui-button:active {
- text-decoration: none;
-}
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
- width: 2.2em;
-}
-/* button elements seem to need a little more width */
-button.ui-button-icon-only {
- width: 2.4em;
-}
-.ui-button-icons-only {
- width: 3.4em;
-}
-button.ui-button-icons-only {
- width: 3.7em;
-}
-
-/* button text element */
-.ui-button .ui-button-text {
- display: block;
- line-height: normal;
-}
-.ui-button-text-only .ui-button-text {
- padding: .4em 1em;
-}
-.ui-button-icon-only .ui-button-text,
-.ui-button-icons-only .ui-button-text {
- padding: .4em;
- text-indent: -9999999px;
-}
-.ui-button-text-icon-primary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 1em .4em 2.1em;
-}
-.ui-button-text-icon-secondary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 2.1em .4em 1em;
-}
-.ui-button-text-icons .ui-button-text {
- padding-left: 2.1em;
- padding-right: 2.1em;
-}
-/* no icon support for input elements, provide padding by default */
-input.ui-button {
- padding: .4em 1em;
-}
-
-/* button icon element(s) */
-.ui-button-icon-only .ui-icon,
-.ui-button-text-icon-primary .ui-icon,
-.ui-button-text-icon-secondary .ui-icon,
-.ui-button-text-icons .ui-icon,
-.ui-button-icons-only .ui-icon {
- position: absolute;
- top: 50%;
- margin-top: -8px;
-}
-.ui-button-icon-only .ui-icon {
- left: 50%;
- margin-left: -8px;
-}
-.ui-button-text-icon-primary .ui-button-icon-primary,
-.ui-button-text-icons .ui-button-icon-primary,
-.ui-button-icons-only .ui-button-icon-primary {
- left: .5em;
-}
-.ui-button-text-icon-secondary .ui-button-icon-secondary,
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
- right: .5em;
-}
-
-/* button sets */
-.ui-buttonset {
- margin-right: 7px;
-}
-.ui-buttonset .ui-button {
- margin-left: 0;
- margin-right: -.3em;
-}
-
-/* workarounds */
-/* reset extra padding in Firefox, see h5bp.com/l */
-input.ui-button::-moz-focus-inner,
-button.ui-button::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-.ui-datepicker {
- width: 17em;
- padding: .2em .2em 0;
- display: none;
-}
-.ui-datepicker .ui-datepicker-header {
- position: relative;
- padding: .2em 0;
-}
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-next {
- position: absolute;
- top: 2px;
- width: 1.8em;
- height: 1.8em;
-}
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
- top: 1px;
-}
-.ui-datepicker .ui-datepicker-prev {
- left: 2px;
-}
-.ui-datepicker .ui-datepicker-next {
- right: 2px;
-}
-.ui-datepicker .ui-datepicker-prev-hover {
- left: 1px;
-}
-.ui-datepicker .ui-datepicker-next-hover {
- right: 1px;
-}
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
- display: block;
- position: absolute;
- left: 50%;
- margin-left: -8px;
- top: 50%;
- margin-top: -8px;
-}
-.ui-datepicker .ui-datepicker-title {
- margin: 0 2.3em;
- line-height: 1.8em;
- text-align: center;
-}
-.ui-datepicker .ui-datepicker-title select {
- font-size: 1em;
- margin: 1px 0;
-}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year {
- width: 45%;
-}
-.ui-datepicker table {
- width: 100%;
- font-size: .9em;
- border-collapse: collapse;
- margin: 0 0 .4em;
-}
-.ui-datepicker th {
- padding: .7em .3em;
- text-align: center;
- font-weight: bold;
- border: 0;
-}
-.ui-datepicker td {
- border: 0;
- padding: 1px;
-}
-.ui-datepicker td span,
-.ui-datepicker td a {
- display: block;
- padding: .2em;
- text-align: right;
- text-decoration: none;
-}
-.ui-datepicker .ui-datepicker-buttonpane {
- background-image: none;
- margin: .7em 0 0 0;
- padding: 0 .2em;
- border-left: 0;
- border-right: 0;
- border-bottom: 0;
-}
-.ui-datepicker .ui-datepicker-buttonpane button {
- float: right;
- margin: .5em .2em .4em;
- cursor: pointer;
- padding: .2em .6em .3em .6em;
- width: auto;
- overflow: visible;
-}
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
- float: left;
-}
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi {
- width: auto;
-}
-.ui-datepicker-multi .ui-datepicker-group {
- float: left;
-}
-.ui-datepicker-multi .ui-datepicker-group table {
- width: 95%;
- margin: 0 auto .4em;
-}
-.ui-datepicker-multi-2 .ui-datepicker-group {
- width: 50%;
-}
-.ui-datepicker-multi-3 .ui-datepicker-group {
- width: 33.3%;
-}
-.ui-datepicker-multi-4 .ui-datepicker-group {
- width: 25%;
-}
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
- border-left-width: 0;
-}
-.ui-datepicker-multi .ui-datepicker-buttonpane {
- clear: left;
-}
-.ui-datepicker-row-break {
- clear: both;
- width: 100%;
- font-size: 0;
-}
-
-/* RTL support */
-.ui-datepicker-rtl {
- direction: rtl;
-}
-.ui-datepicker-rtl .ui-datepicker-prev {
- right: 2px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next {
- left: 2px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
- right: 1px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
- left: 1px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
- clear: right;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
- float: left;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
-.ui-datepicker-rtl .ui-datepicker-group {
- float: right;
-}
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
- border-right-width: 0;
- border-left-width: 1px;
-}
-.ui-dialog {
- overflow: hidden;
- position: absolute;
- top: 0;
- left: 0;
- padding: .2em;
- outline: 0;
-}
-.ui-dialog .ui-dialog-titlebar {
- padding: .4em 1em;
- position: relative;
-}
-.ui-dialog .ui-dialog-title {
- float: left;
- margin: .1em 0;
- white-space: nowrap;
- width: 90%;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.ui-dialog .ui-dialog-titlebar-close {
- position: absolute;
- right: .3em;
- top: 50%;
- width: 20px;
- margin: -10px 0 0 0;
- padding: 1px;
- height: 20px;
-}
-.ui-dialog .ui-dialog-content {
- position: relative;
- border: 0;
- padding: .5em 1em;
- background: none;
- overflow: auto;
-}
-.ui-dialog .ui-dialog-buttonpane {
- text-align: left;
- border-width: 1px 0 0 0;
- background-image: none;
- margin-top: .5em;
- padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
- float: right;
-}
-.ui-dialog .ui-dialog-buttonpane button {
- margin: .5em .4em .5em 0;
- cursor: pointer;
-}
-.ui-dialog .ui-resizable-se {
- width: 12px;
- height: 12px;
- right: -5px;
- bottom: -5px;
- background-position: 16px 16px;
-}
-.ui-draggable .ui-dialog-titlebar {
- cursor: move;
-}
-.ui-menu {
- list-style: none;
- padding: 0;
- margin: 0;
- display: block;
- outline: none;
-}
-.ui-menu .ui-menu {
- position: absolute;
-}
-.ui-menu .ui-menu-item {
- position: relative;
- margin: 0;
- padding: 3px 1em 3px .4em;
- cursor: pointer;
- min-height: 0; /* support: IE7 */
- /* support: IE10, see #8844 */
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
-}
-.ui-menu .ui-menu-divider {
- margin: 5px 0;
- height: 0;
- font-size: 0;
- line-height: 0;
- border-width: 1px 0 0 0;
-}
-.ui-menu .ui-state-focus,
-.ui-menu .ui-state-active {
- margin: -1px;
-}
-
-/* icon support */
-.ui-menu-icons {
- position: relative;
-}
-.ui-menu-icons .ui-menu-item {
- padding-left: 2em;
-}
-
-/* left-aligned */
-.ui-menu .ui-icon {
- position: absolute;
- top: 0;
- bottom: 0;
- left: .2em;
- margin: auto 0;
-}
-
-/* right-aligned */
-.ui-menu .ui-menu-icon {
- left: auto;
- right: 0;
-}
-.ui-progressbar {
- height: 1em;
- text-align: left;
- overflow: hidden;
-}
-.ui-progressbar .ui-progressbar-value {
- margin: -1px;
- height: 100%;
- background-color: #990000;
-}
-.ui-progressbar .ui-progressbar-overlay {
- background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
- height: 100%;
- filter: alpha(opacity=25); /* support: IE8 */
- opacity: 0.25;
-}
-.ui-progressbar-indeterminate .ui-progressbar-value {
- background-image: none;
-}
-.ui-selectmenu-menu {
- padding: 0;
- margin: 0;
- position: absolute;
- top: 0;
- left: 0;
- display: none;
-}
-.ui-selectmenu-menu .ui-menu {
- overflow: auto;
- /* Support: IE7 */
- overflow-x: hidden;
- padding-bottom: 1px;
-}
-.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
- font-size: 1em;
- font-weight: bold;
- line-height: 1.5;
- padding: 2px 0.4em;
- margin: 0.5em 0 0 0;
- height: auto;
- border: 0;
-}
-.ui-selectmenu-open {
- display: block;
-}
-.ui-selectmenu-button {
- display: inline-block;
- overflow: hidden;
- position: relative;
- text-decoration: none;
- cursor: pointer;
-}
-.ui-selectmenu-button span.ui-icon {
- right: 0.5em;
- left: auto;
- margin-top: -8px;
- position: absolute;
- top: 50%;
-}
-.ui-selectmenu-button span.ui-selectmenu-text {
- text-align: left;
- padding: 0.4em 2.1em 0.4em 1em;
- display: block;
- line-height: 1.4;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.ui-slider {
- position: relative;
- text-align: left;
-}
-.ui-slider .ui-slider-handle {
- position: absolute;
- z-index: 2;
- width: 1.2em;
- height: 1.2em;
- cursor: default;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-slider .ui-slider-range {
- position: absolute;
- z-index: 1;
- font-size: .7em;
- display: block;
- border: 0;
- background-position: 0 0;
-}
-
-/* support: IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
- filter: inherit;
-}
-
-.ui-slider-horizontal {
- height: .8em;
-}
-.ui-slider-horizontal .ui-slider-handle {
- top: -.3em;
- margin-left: -.6em;
-}
-.ui-slider-horizontal .ui-slider-range {
- top: 0;
- height: 100%;
-}
-.ui-slider-horizontal .ui-slider-range-min {
- left: 0;
-}
-.ui-slider-horizontal .ui-slider-range-max {
- right: 0;
-}
-
-.ui-slider-vertical {
- width: .8em;
- height: 100px;
-}
-.ui-slider-vertical .ui-slider-handle {
- left: -.3em;
- margin-left: 0;
- margin-bottom: -.6em;
-}
-.ui-slider-vertical .ui-slider-range {
- left: 0;
- width: 100%;
-}
-.ui-slider-vertical .ui-slider-range-min {
- bottom: 0;
-}
-.ui-slider-vertical .ui-slider-range-max {
- top: 0;
-}
-.ui-spinner {
- position: relative;
- display: inline-block;
- overflow: hidden;
- padding: 0;
- vertical-align: middle;
-}
-.ui-spinner-input {
- border: none;
- background: none;
- color: inherit;
- padding: 0;
- margin: .2em 0;
- vertical-align: middle;
- margin-left: .4em;
- margin-right: 22px;
-}
-.ui-spinner-button {
- width: 16px;
- height: 50%;
- font-size: .5em;
- padding: 0;
- margin: 0;
- text-align: center;
- position: absolute;
- cursor: default;
- display: block;
- overflow: hidden;
- right: 0;
-}
-/* more specificity required here to override default borders */
-.ui-spinner a.ui-spinner-button {
- border-top: none;
- border-bottom: none;
- border-right: none;
-}
-/* vertically center icon */
-.ui-spinner .ui-icon {
- position: absolute;
- margin-top: -8px;
- top: 50%;
- left: 0;
-}
-.ui-spinner-up {
- top: 0;
-}
-.ui-spinner-down {
- bottom: 0;
-}
-
-/* TR overrides */
-.ui-spinner .ui-icon-triangle-1-s {
- /* need to fix icons sprite */
- background-position: -65px -16px;
-}
-.ui-tabs {
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
- padding: .2em;
-}
-.ui-tabs .ui-tabs-nav {
- margin: 0;
- padding: .2em .2em 0;
-}
-.ui-tabs .ui-tabs-nav li {
- list-style: none;
- float: left;
- position: relative;
- top: 0;
- margin: 1px .2em 0 0;
- border-bottom-width: 0;
- padding: 0;
- white-space: nowrap;
-}
-.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
- float: left;
- padding: .5em 1em;
- text-decoration: none;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
- margin-bottom: -1px;
- padding-bottom: 1px;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
- cursor: text;
-}
-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
- cursor: pointer;
-}
-.ui-tabs .ui-tabs-panel {
- display: block;
- border-width: 0;
- padding: 1em 1.4em;
- background: none;
-}
-.ui-tooltip {
- padding: 8px;
- position: absolute;
- z-index: 9999;
- max-width: 300px;
- -webkit-box-shadow: 0 0 5px #aaa;
- box-shadow: 0 0 5px #aaa;
-}
-body .ui-tooltip {
- border-width: 2px;
-}
-
-/* Component containers
-----------------------------------*/
-.ui-widget {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1.1em;
-}
-.ui-widget .ui-widget {
- font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1em;
-}
-.ui-widget-content {
- border: 1px solid #aaaaaa;
- background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
- color: #333333;
-}
-.ui-widget-content a {
- color: #333333;
-}
-.ui-widget-header {
- border: 1px solid #bbbbbb;
- /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
- color: #444444;
- font-weight: bold;
-}
-.ui-widget-header a {
- color: #444444;
-}
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default {
- border: 1px solid #cccccc;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #3383bb;
-}
-.ui-state-default a,
-.ui-state-default a:link,
-.ui-state-default a:visited {
- color: #3383bb;
- text-decoration: none;
-}
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus {
- border: 1px solid #bbbbbb;
- background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #599fcf;
-}
-.ui-state-hover a,
-.ui-state-hover a:hover,
-.ui-state-hover a:link,
-.ui-state-hover a:visited,
-.ui-state-focus a,
-.ui-state-focus a:hover,
-.ui-state-focus a:link,
-.ui-state-focus a:visited {
- color: #599fcf;
- text-decoration: none;
-}
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active {
- border: 1px solid #999999;
- background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #ffffff;
-}
-.ui-state-active a,
-.ui-state-active a:link,
-.ui-state-active a:visited {
- color: #ffffff;
- text-decoration: none;
-}
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight,
-.ui-widget-header .ui-state-highlight {
- border: 1px solid #ffffff;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
- color: #444444;
-}
-.ui-state-highlight a,
-.ui-widget-content .ui-state-highlight a,
-.ui-widget-header .ui-state-highlight a {
- color: #444444;
-}
-.ui-state-error,
-.ui-widget-content .ui-state-error,
-.ui-widget-header .ui-state-error {
- border: 1px solid #c0402a;
- background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
- color: #ffffff;
-}
-.ui-state-error a,
-.ui-widget-content .ui-state-error a,
-.ui-widget-header .ui-state-error a {
- color: #ffffff;
-}
-.ui-state-error-text,
-.ui-widget-content .ui-state-error-text,
-.ui-widget-header .ui-state-error-text {
- color: #ffffff;
-}
-.ui-priority-primary,
-.ui-widget-content .ui-priority-primary,
-.ui-widget-header .ui-priority-primary {
- font-weight: bold;
-}
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary,
-.ui-widget-header .ui-priority-secondary {
- opacity: .7;
- filter:Alpha(Opacity=70); /* support: IE8 */
- font-weight: normal;
-}
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled,
-.ui-widget-header .ui-state-disabled {
- opacity: .35;
- filter:Alpha(Opacity=35); /* support: IE8 */
- background-image: none;
-}
-.ui-state-disabled .ui-icon {
- filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
-}
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- width: 16px;
- height: 16px;
-}
-.ui-icon,
-.ui-widget-content .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-widget-header .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-state-default .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
-}
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-active .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
-}
-.ui-state-highlight .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
-}
-
-/* positioning */
-.ui-icon-blank { background-position: 16px 16px; }
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-on { background-position: -96px -144px; }
-.ui-icon-radio-off { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
- border-top-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
- border-top-right-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
- border-bottom-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
- border-bottom-right-radius: 6px;
-}
-
-/* Overlays */
-.ui-widget-overlay {
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
- opacity: .8;
- filter: Alpha(Opacity=80); /* support: IE8 */
-}
-.ui-widget-shadow {
- margin: -4px 0 0 -4px;
- padding: 4px;
- background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
- opacity: .6;
- filter: Alpha(Opacity=60); /* support: IE8 */
- border-radius: 0pxdow;
-}
diff --git a/usr/local/www/themes/pfsense/all.css b/usr/local/www/themes/pfsense/all.css
deleted file mode 100644
index 372c4b2..0000000
--- a/usr/local/www/themes/pfsense/all.css
+++ /dev/null
@@ -1,1036 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-}
-
-.nowrap { white-space: nowrap; }
-
-.addgatewaybox {
- background-color: #990000;
- border-style: none none none none;
- width: 225px;
-}
-
-.infobox {
- width:100%;
-}
-
-.infoboxsave {
- padding-right: 10px;
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-.inputerrorsleft {
- background-color: #990000;
- width: 36px;
- text-align: center;
-}
-
-.inputerrorsright {
- background-color: #FFD9D1;
- color: #000000;
- font-size: 11px;
- padding-left: 8px;
- padding-top: 6px;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-
-form input {
- font-size: 1.1em;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 11px;
- font-family: "Trebuchet MS", sans-serif;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- background-color: #ffffff;
-}
-
-/* ID Based CSS Definitions */
-
-#notices {
- width: 795px;
- background-color: #E1E4B8;
- border: 1px solid #000000;
- padding: 0px;
- margin-bottom: 5px;
-}
-#notices ul {
- margin: 0px;
- padding: 5px;
- padding-top: 3px;
- list-style: none;
-}
-
-#header {
- height: 70px;
- width: 900px;
-}
-#header-left {
- position: relative;
- background: url('images/logo.gif') no-repeat;
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
- background-color: #fff;
-}
-#header-right {
- position: relative;
- background: url('images/header.gif') no-repeat;
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-
-#header-right .container .left {
- position: relative;
- top: 32px;
- left: 9px;
- font-size: 1.8em;
-}
-
-#header-right .container .right {
- position: relative;
- float: right;
- top: -9px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.gif') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: bold;
- font: Verdana;
- text-align: center;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-
-
-
-#content {
- border-top: 1px solid #FFFFFF;
- margin-top: 0px;
- padding-top: 0px;
- width: 900px;
-}
-
-#footer {
- position: relative;
- top: 10px;
- padding: 0px;
- margin: 6px;
- width: 900px;
- background-color: #990000;
- text-align: center;
- color: #ffffff;
- font-size: 0.75em;
- clear: both;
- margin-bottom: 20px;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-#left {
- width: 150px;
- float: left;
-}
-#right {
- /*margin-left: 171px;*/
- margin-left: 170px;
- margin-top: 5px;
- width: 720px;
-}
-
-
-
-#navigation {
- position: relative;
- background-color: #000000;
- top: 0px;
- left: 5px;
- width: 157px;
- padding-top: 6px;
- margin-left: 1px;
- color: #fff;
- padding-bottom: 6px;
- padding-right: 0px;
-}
-
-#navigation ul {
- margin: 0px;
- padding: 0px;
- width: 100%;
-}
-
-#navigation ul li {
- display: block;
- padding-left: 10px;
-}
-
-#navigation ul li div {
- margin-top: 2px;
-}
-
-#navigation ul li div {
- font-weight: bold;
-}
-
-#navigation ul li div .small,
-#navigation ul li div .small:hover {
- font-weight: normal;
- font-size: 0.79em;
-}
-
-#navigation ul li a {
- padding-left: 0.5em;
- padding-right: 0.5em;
- padding-top: 0.2em;
- padding-bottom: 0.2em;
- height: 1.2em;
- line-height: 1.2em;
- color: #fff;
- text-decoration: none;
- width: 61px;
- font-size: 0.9em;
- text-align: center;
-}
-
-#navigation ul li a:hover {
- color: #fff;
- text-decoration: underline;
- font-size: 0.9em;
-}
-
-
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
-
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #FFFFFF;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listrborder {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-left: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- color: #FFFFFF;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #DDDDDD;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-
-/* Widget CSS */
-.widgetsubheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #B1B1B1;
- padding-right: 6px;
- padding-left: 6px;
- color: #000000;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetdiv{
- margin:5px;
- padding: 5px;
- background:#CCCCCC;
-}
-.widgetconfigdiv{
- background:#BBBBBB;
- font-size: 11px;
- color: #000000;
- padding-right: 5px;
- padding-left: 5px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-
-div#log div.log-entry-mini {
- clear: both;
-}
-
-div#log div.log-entry-mini span {
- padding: 2px 2px 2px 2px;
- padding-left: 6px;
-}
-
-div#log span.log-action-mini-header,
-div#log span.log-time-mini-header,
-div#log span.log-interface-mini-header,
-div#log span.log-source-mini-header,
-div#log span.log-destination-mini-header,
-div#log span.log-protocol-mini-header {
- float: left;
- text-align: left;
- background-color: #FFFFFF;
- font-size: 12px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-time-mini,
-div#log span.log-interface-mini,
-div#log span.log-source-mini,
-div#log span.log-destination-mini,
-div#log span.log-protocol-mini {
- float: left;
- text-align: left;
- background-color: #FFFFFF;
- font-size: 11px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-action-mini-header {
- width: 6%;
-}
-
-div#log span.log-time-mini,
-div#log span.log-time-mini-header {
- width: 19%;
-}
-
-div#log span.log-interface-mini,
-div#log span.log-interface-mini-header {
- width: 8%;
-}
-
-div#log span.log-source-mini,
-div#log span.log-source-mini-header {
- width: 23%;
-}
-
-div#log span.log-destination-mini,
-div#log span.log-destination-mini-header {
- width: 31%;
-}
-
-div#log span.log-protocol-mini,
-div#log span.log-protocol-mini-header {
- width: 8%;
- border-right: 1px solid #999;
-}
-
-/* loginscreen items follow */
-
-#login {
-/* background: #cccccc; */
- background-color: #ffffff;
- border-left: 4px dotted #990000;
-/* border: 0px solid #990000; */
- margin: 5em auto;
- padding: 0em;
-/* width: 300px; */
- width: 300px;
- height: 300px;
-/* filter:alpha(opacity=60);
- -moz-opacity:0.6;
- -khtml-opacity: 0.6;
- opacity: 0.6; */
-}
-
-#login h1 {
- background: url(images/logo.gif) no-repeat top left;
-/* background: #ffffff; */
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 300px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -420px;
-/* left: 70px; */
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- top: -300px; */
-}
-
-#login #username, #password, #password2 {
- font-size: small;
- width: 60%;
- padding-left: 19px;
- padding: 3px;
- margin: 0em;
-
-
-/* text-indent: 10px;
- position: relative;
- left: 10px;
- top: -300px; */
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- text-align: center;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -20px;
- left: 120px;
-}
-
-/* loginerror box follows */
-
-#login #inputerrors {
- background-color: transparent;
- border: 0px solid #666666;
- margin: 5em auto;
- vertical-align: middle;
- padding: 0em;
- width: 300px;
- height: 50px;
- position: relative;
- left: 0px;
- top: -117px;
-}
-
-/* Sortable tables */
-table.sortable thead {
- cursor: default;
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-/*thermal_sensors widget styles*/
-
-.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
-.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
-.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
- background-color: LimeGreen;
- border-top-width: 2px; border-top-color: Lime;
- border-left-width: 0px;
- border-right-width: 0px;
- border-bottom-width: 2px; border-bottom-color: Green;
-}
-.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
-.thermalSensorText { float: left; height: 20px; top: 3px; }
-.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
-
-.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-
-.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
-
-.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
-
-/* widget textarea styles - full width */
-.textarea_widget {
- width: 100%;
- resize:vertical;
- -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
- -moz-box-sizing: border-box; /* Firefox, other Gecko */
- box-sizing: border-box; /* IE 8+ */
-}
diff --git a/usr/local/www/themes/pfsense/apple-touch-icon.png b/usr/local/www/themes/pfsense/apple-touch-icon.png
deleted file mode 100755
index 7a4b975..0000000
--- a/usr/local/www/themes/pfsense/apple-touch-icon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/bottom-loader.js b/usr/local/www/themes/pfsense/bottom-loader.js
deleted file mode 100644
index 8251766..0000000
--- a/usr/local/www/themes/pfsense/bottom-loader.js
+++ /dev/null
@@ -1,12 +0,0 @@
-//<![CDATA[
-
-NiftyCheck();
-Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
-Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
-Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
-Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
-Rounded("div#topbox","all","#FFF","#990000","smooth");
-Rounded("div#navigation","top bottom","#FFFFFF","#000000","smooth");
-Rounded("div#footer","bl br tl tr]","#FFF","#990000","smooth");
-
-//]]>
diff --git a/usr/local/www/themes/pfsense/images/alert_bgr.gif b/usr/local/www/themes/pfsense/images/alert_bgr.gif
deleted file mode 100755
index 2a5c000..0000000
--- a/usr/local/www/themes/pfsense/images/alert_bgr.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/header-alert.gif b/usr/local/www/themes/pfsense/images/header-alert.gif
deleted file mode 100755
index 02eca2b..0000000
--- a/usr/local/www/themes/pfsense/images/header-alert.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/header.gif b/usr/local/www/themes/pfsense/images/header.gif
deleted file mode 100755
index 01cfcef..0000000
--- a/usr/local/www/themes/pfsense/images/header.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/help.png b/usr/local/www/themes/pfsense/images/help.png
deleted file mode 100755
index 1de05e3..0000000
--- a/usr/local/www/themes/pfsense/images/help.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/favicon.ico b/usr/local/www/themes/pfsense/images/icons/favicon.ico
deleted file mode 100644
index 3440bf2..0000000
--- a/usr/local/www/themes/pfsense/images/icons/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_3g.gif b/usr/local/www/themes/pfsense/images/icons/icon_3g.gif
deleted file mode 100755
index 46ccb92..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_3g.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/pfsense/images/icons/icon_3g_inactive.gif
deleted file mode 100755
index cf983e4..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_3g_inactive.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_advanced.gif b/usr/local/www/themes/pfsense/images/icons/icon_advanced.gif
deleted file mode 100755
index 3ede1ff..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_advanced.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_advanced_s.gif b/usr/local/www/themes/pfsense/images/icons/icon_advanced_s.gif
deleted file mode 100755
index b233549..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_advanced_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_alert.gif b/usr/local/www/themes/pfsense/images/icons/icon_alert.gif
deleted file mode 100755
index 2f69355..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_alert.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_alias_host.gif b/usr/local/www/themes/pfsense/images/icons/icon_alias_host.gif
deleted file mode 100644
index ad43e17..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_alias_host.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_alias_net.gif b/usr/local/www/themes/pfsense/images/icons/icon_alias_net.gif
deleted file mode 100644
index abd1b8b..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_alias_net.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_alias_port.gif b/usr/local/www/themes/pfsense/images/icons/icon_alias_port.gif
deleted file mode 100644
index 4acf2aa..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_alias_port.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_alias_url.gif b/usr/local/www/themes/pfsense/images/icons/icon_alias_url.gif
deleted file mode 100644
index 660571e..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_alias_url.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/pfsense/images/icons/icon_alias_url_reload.gif
deleted file mode 100644
index 55c1c4a..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_alias_url_reload.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_block.gif b/usr/local/www/themes/pfsense/images/icons/icon_block.gif
deleted file mode 100755
index 670c968..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_block.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_block_add.gif b/usr/local/www/themes/pfsense/images/icons/icon_block_add.gif
deleted file mode 100755
index eb726d6..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_block_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_block_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_block_d.gif
deleted file mode 100755
index e6345fe..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_block_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_cablenic.gif b/usr/local/www/themes/pfsense/images/icons/icon_cablenic.gif
deleted file mode 100755
index a071c66..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_cablenic.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_cal.gif b/usr/local/www/themes/pfsense/images/icons/icon_cal.gif
deleted file mode 100755
index a9c7c87..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_cal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_cal_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_cal_mo.gif
deleted file mode 100755
index 1647e2f..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_cal_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_carp.gif b/usr/local/www/themes/pfsense/images/icons/icon_carp.gif
deleted file mode 100755
index 9454a82..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_carp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_carp_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_carp_d.gif
deleted file mode 100755
index 2ba8db2..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_carp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_chain.png b/usr/local/www/themes/pfsense/images/icons/icon_chain.png
deleted file mode 100644
index 12db07a..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_chain.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_check.gif b/usr/local/www/themes/pfsense/images/icons/icon_check.gif
deleted file mode 100755
index 393674d..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_check.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_clock_green.gif b/usr/local/www/themes/pfsense/images/icons/icon_clock_green.gif
deleted file mode 100755
index e171ba8..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_clock_green.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_clock_grey.gif b/usr/local/www/themes/pfsense/images/icons/icon_clock_grey.gif
deleted file mode 100755
index 00c865a..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_clock_grey.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_clock_red.gif b/usr/local/www/themes/pfsense/images/icons/icon_clock_red.gif
deleted file mode 100755
index 7b412ee..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_clock_red.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_close.gif b/usr/local/www/themes/pfsense/images/icons/icon_close.gif
deleted file mode 100755
index e0f86a7..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_close.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_configure.gif b/usr/local/www/themes/pfsense/images/icons/icon_configure.gif
deleted file mode 100755
index 7182e0d..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_configure.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_down.gif b/usr/local/www/themes/pfsense/images/icons/icon_down.gif
deleted file mode 100755
index b71a9c5..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_down_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_down_d.gif
deleted file mode 100755
index 70a7473..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_down_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_down_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_down_mo.gif
deleted file mode 100755
index 584587a..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_down_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_e.gif b/usr/local/www/themes/pfsense/images/icons/icon_e.gif
deleted file mode 100755
index 2950800..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_e.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_e_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_e_mo.gif
deleted file mode 100755
index 9ba5738..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_e_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_error.gif b/usr/local/www/themes/pfsense/images/icons/icon_error.gif
deleted file mode 100755
index e0fa659..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_error.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_exclam.gif b/usr/local/www/themes/pfsense/images/icons/icon_exclam.gif
deleted file mode 100755
index 36c2ec7..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_exclam.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_flag_de.png b/usr/local/www/themes/pfsense/images/icons/icon_flag_de.png
deleted file mode 100644
index 069cbbe..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_flag_de.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_flag_en.png b/usr/local/www/themes/pfsense/images/icons/icon_flag_en.png
deleted file mode 100644
index bd7f9a5..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_flag_en.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_flag_es.png b/usr/local/www/themes/pfsense/images/icons/icon_flag_es.png
deleted file mode 100644
index 434776c..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_flag_es.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/pfsense/images/icons/icon_flag_pt_BR.png
deleted file mode 100644
index f786349..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_flag_pt_BR.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_cert.png
deleted file mode 100644
index 48a34b6..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_cert.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_file.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_file.png
deleted file mode 100644
index 48a9ed2..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_file.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_group.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_group.png
deleted file mode 100644
index 7d929c0..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_host.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_host.png
deleted file mode 100644
index 867ef2c..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_host.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_imp.png
deleted file mode 100644
index f667cfc..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_imp.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_mail.png
deleted file mode 100644
index d2d4548..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_mail.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_pwd.png
deleted file mode 100644
index 06b53a1..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_pwd.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_search.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_search.png
deleted file mode 100644
index 33de926..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_search.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_time.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_time.png
deleted file mode 100644
index aa8300a..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_time.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_unknown.png
deleted file mode 100644
index 1857d0e..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_unknown.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_url.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_url.png
deleted file mode 100644
index cf56792..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_url.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_user.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_user.png
deleted file mode 100644
index e00eebe..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_fw-update.gif b/usr/local/www/themes/pfsense/images/icons/icon_fw-update.gif
deleted file mode 100755
index 52c18ac..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_fw-update.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_help.gif b/usr/local/www/themes/pfsense/images/icons/icon_help.gif
deleted file mode 100644
index 84c84db..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_help.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_ifalias.gif b/usr/local/www/themes/pfsense/images/icons/icon_ifalias.gif
deleted file mode 100644
index 0c569a7..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_ifalias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_ifalias_d.gif
deleted file mode 100644
index faa84d4..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_ifalias_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_import_alias.gif b/usr/local/www/themes/pfsense/images/icons/icon_import_alias.gif
deleted file mode 100755
index d11a5f0..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_import_alias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_in.gif b/usr/local/www/themes/pfsense/images/icons/icon_in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_in_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_info_pkg.gif b/usr/local/www/themes/pfsense/images/icons/icon_info_pkg.gif
deleted file mode 100755
index cd3a532..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_info_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_interface_down.gif b/usr/local/www/themes/pfsense/images/icons/icon_interface_down.gif
deleted file mode 100755
index 0626655..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_interface_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_interface_up.gif b/usr/local/www/themes/pfsense/images/icons/icon_interface_up.gif
deleted file mode 100755
index 1449513..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_interface_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_left.gif b/usr/local/www/themes/pfsense/images/icons/icon_left.gif
deleted file mode 100755
index 8effefe..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_left_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_left_d.gif
deleted file mode 100755
index c778014..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_left_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_left_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_left_mo.gif
deleted file mode 100755
index 84c6fa2..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_left_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_log.gif b/usr/local/www/themes/pfsense/images/icons/icon_log.gif
deleted file mode 100755
index 4a1983a..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_log.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_log_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_log_d.gif
deleted file mode 100755
index d31bd9b..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_log_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_log_s.gif b/usr/local/www/themes/pfsense/images/icons/icon_log_s.gif
deleted file mode 100755
index f9fda33..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_log_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_log_s_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_log_s_d.gif
deleted file mode 100755
index fb2c05f..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_log_s_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_logs.gif b/usr/local/www/themes/pfsense/images/icons/icon_logs.gif
deleted file mode 100644
index afe0104..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_logs.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_match.gif b/usr/local/www/themes/pfsense/images/icons/icon_match.gif
deleted file mode 100644
index 215571f..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_match.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_match_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_match_d.gif
deleted file mode 100644
index 6e4c364..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_match_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_minus.gif b/usr/local/www/themes/pfsense/images/icons/icon_minus.gif
deleted file mode 100755
index 417544f..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_minus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_open.gif b/usr/local/www/themes/pfsense/images/icons/icon_open.gif
deleted file mode 100755
index ac3da14..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_open.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_other.gif b/usr/local/www/themes/pfsense/images/icons/icon_other.gif
deleted file mode 100755
index e6f780f..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_other.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_other_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_other_d.gif
deleted file mode 100755
index b08d970..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_other_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_out.gif b/usr/local/www/themes/pfsense/images/icons/icon_out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_out_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_parp.gif b/usr/local/www/themes/pfsense/images/icons/icon_parp.gif
deleted file mode 100755
index 96acaf3..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_parp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_parp_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_parp_d.gif
deleted file mode 100755
index 7d7d00e..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_parp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_pass.gif b/usr/local/www/themes/pfsense/images/icons/icon_pass.gif
deleted file mode 100755
index fe1bb0d..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_pass.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_pass_add.gif b/usr/local/www/themes/pfsense/images/icons/icon_pass_add.gif
deleted file mode 100755
index f7f4c20..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_pass_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_pass_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_pass_d.gif
deleted file mode 100755
index 6adc431..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_pass_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_plus.gif b/usr/local/www/themes/pfsense/images/icons/icon_plus.gif
deleted file mode 100755
index 2a94eeb..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_plus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_plus_bl.gif b/usr/local/www/themes/pfsense/images/icons/icon_plus_bl.gif
deleted file mode 100644
index 8dcd7c0..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_plus_bl.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/pfsense/images/icons/icon_plus_bl_p.gif
deleted file mode 100644
index 0c79849..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_plus_bl_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_plus_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_plus_d.gif
deleted file mode 100755
index ebc7457..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_plus_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_plus_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_plus_mo.gif
deleted file mode 100755
index 1c7ca08..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_plus_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_plus_p.gif b/usr/local/www/themes/pfsense/images/icons/icon_plus_p.gif
deleted file mode 100644
index eb41284..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_plus_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall.gif
deleted file mode 100755
index d78b867..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_reinstall.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_d.gif
deleted file mode 100755
index 13658f7..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_mo.gif
deleted file mode 100755
index 90b576e..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg.gif
deleted file mode 100755
index 9aebb03..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_d.gif
deleted file mode 100755
index 4ab4992..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_mo.gif
deleted file mode 100755
index 7025d20..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml.gif
deleted file mode 100755
index 4542432..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_d.gif
deleted file mode 100755
index 8d3a68d..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_mo.gif
deleted file mode 100755
index 15e0aed..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reject.gif b/usr/local/www/themes/pfsense/images/icons/icon_reject.gif
deleted file mode 100755
index 5565cd6..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_reject.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reject_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_reject_d.gif
deleted file mode 100755
index 6c09fae..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_reject_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_right.gif b/usr/local/www/themes/pfsense/images/icons/icon_right.gif
deleted file mode 100755
index fdf2d8b..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_restart.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_restart.gif
deleted file mode 100755
index e49fbd7..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_service_restart.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_restart_d.gif
deleted file mode 100755
index a5d6d7c..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_service_restart_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_running.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_running.gif
deleted file mode 100644
index 543fd56..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_service_running.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_start.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_start.gif
deleted file mode 100755
index 09bb58f..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_service_start.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_start_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_start_d.gif
deleted file mode 100755
index f58f111..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_service_start_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_status.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_status.gif
deleted file mode 100644
index a93bcfb..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_service_status.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_stop.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_stop.gif
deleted file mode 100755
index 922addc..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_service_stop.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_stop_d.gif
deleted file mode 100755
index b4cfdea..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_service_stop_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_stopped.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_stopped.gif
deleted file mode 100644
index f93a25d..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_service_stopped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_services_restart_mo.gif
deleted file mode 100755
index a092b40..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_services_restart_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_services_start_mo.gif
deleted file mode 100755
index ecdb58f..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_services_start_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_services_stop_mo.gif
deleted file mode 100755
index c00e208..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_services_stop_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_system-group-grey.png b/usr/local/www/themes/pfsense/images/icons/icon_system-group-grey.png
deleted file mode 100644
index d7b964d..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_system-group-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_system-group.png b/usr/local/www/themes/pfsense/images/icons/icon_system-group.png
deleted file mode 100644
index 1c974f2..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_system-group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_system-user-grey.png b/usr/local/www/themes/pfsense/images/icons/icon_system-user-grey.png
deleted file mode 100644
index 2f6047d..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_system-user-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_system-user.png b/usr/local/www/themes/pfsense/images/icons/icon_system-user.png
deleted file mode 100644
index ef82156..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_system-user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/pfsense/images/icons/icon_system_lock_screen.png
deleted file mode 100644
index 30f306d..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_system_lock_screen.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_system_logout.png b/usr/local/www/themes/pfsense/images/icons/icon_system_logout.png
deleted file mode 100644
index 9bbb6c7..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_system_logout.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_trapped.gif b/usr/local/www/themes/pfsense/images/icons/icon_trapped.gif
deleted file mode 100644
index ffeb2cd..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_trapped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_trapped_p.gif b/usr/local/www/themes/pfsense/images/icons/icon_trapped_p.gif
deleted file mode 100755
index 6d46aaf..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_trapped_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_ts_rule.gif b/usr/local/www/themes/pfsense/images/icons/icon_ts_rule.gif
deleted file mode 100755
index e15ab6c..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_ts_rule.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_ts_rule_d.gif
deleted file mode 100755
index f776281..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_ts_rule_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_up.gif b/usr/local/www/themes/pfsense/images/icons/icon_up.gif
deleted file mode 100755
index 883c5a2..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_up_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_up_d.gif
deleted file mode 100755
index 0ddcce2..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_up_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_up_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_up_mo.gif
deleted file mode 100755
index 9f869a4..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_up_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_wlan.gif b/usr/local/www/themes/pfsense/images/icons/icon_wlan.gif
deleted file mode 100755
index 1f0addc..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_wlan.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_wlan_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_wlan_d.gif
deleted file mode 100755
index 35bf580..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_wlan_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_wol_all.gif b/usr/local/www/themes/pfsense/images/icons/icon_wol_all.gif
deleted file mode 100755
index 2d22182..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_wol_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/pfsense/images/icons/icon_wzd_nsaved.png
deleted file mode 100644
index 21cb27d..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_wzd_nsaved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_wzd_saved.png b/usr/local/www/themes/pfsense/images/icons/icon_wzd_saved.png
deleted file mode 100644
index ab82946..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_wzd_saved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_x.gif b/usr/local/www/themes/pfsense/images/icons/icon_x.gif
deleted file mode 100755
index 24e4d49..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_x_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_x_d.gif
deleted file mode 100755
index d2bfbc8..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_x_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_x_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_x_mo.gif
deleted file mode 100755
index da7b57c..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_x_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/icon_x_p.gif b/usr/local/www/themes/pfsense/images/icons/icon_x_p.gif
deleted file mode 100755
index 8828fa6..0000000
--- a/usr/local/www/themes/pfsense/images/icons/icon_x_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/in.gif b/usr/local/www/themes/pfsense/images/icons/in.gif
deleted file mode 100644
index f1da771..0000000
--- a/usr/local/www/themes/pfsense/images/icons/in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/in_d.gif b/usr/local/www/themes/pfsense/images/icons/in_d.gif
deleted file mode 100644
index 18e26be..0000000
--- a/usr/local/www/themes/pfsense/images/icons/in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/out.gif b/usr/local/www/themes/pfsense/images/icons/out.gif
deleted file mode 100644
index 1a1d1d5..0000000
--- a/usr/local/www/themes/pfsense/images/icons/out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/icons/out_d.gif b/usr/local/www/themes/pfsense/images/icons/out_d.gif
deleted file mode 100644
index 879f1da..0000000
--- a/usr/local/www/themes/pfsense/images/icons/out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/log.png b/usr/local/www/themes/pfsense/images/log.png
deleted file mode 100755
index 762ba80..0000000
--- a/usr/local/www/themes/pfsense/images/log.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/logo.gif b/usr/local/www/themes/pfsense/images/logo.gif
deleted file mode 100755
index 553cbd5..0000000
--- a/usr/local/www/themes/pfsense/images/logo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/logobig.jpg b/usr/local/www/themes/pfsense/images/logobig.jpg
deleted file mode 100755
index 2ef196d..0000000
--- a/usr/local/www/themes/pfsense/images/logobig.jpg
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/bar_blue.gif b/usr/local/www/themes/pfsense/images/misc/bar_blue.gif
deleted file mode 100755
index 741186a..0000000
--- a/usr/local/www/themes/pfsense/images/misc/bar_blue.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/bar_gray.gif b/usr/local/www/themes/pfsense/images/misc/bar_gray.gif
deleted file mode 100755
index e86e245..0000000
--- a/usr/local/www/themes/pfsense/images/misc/bar_gray.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/bar_left.gif b/usr/local/www/themes/pfsense/images/misc/bar_left.gif
deleted file mode 100755
index af751fa..0000000
--- a/usr/local/www/themes/pfsense/images/misc/bar_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/bar_right.gif b/usr/local/www/themes/pfsense/images/misc/bar_right.gif
deleted file mode 100755
index ff12d9e..0000000
--- a/usr/local/www/themes/pfsense/images/misc/bar_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/button.gif b/usr/local/www/themes/pfsense/images/misc/button.gif
deleted file mode 100755
index e85dbb3..0000000
--- a/usr/local/www/themes/pfsense/images/misc/button.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/key_128.gif b/usr/local/www/themes/pfsense/images/misc/key_128.gif
deleted file mode 100755
index ea5ae34..0000000
--- a/usr/local/www/themes/pfsense/images/misc/key_128.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/key_152.gif b/usr/local/www/themes/pfsense/images/misc/key_152.gif
deleted file mode 100755
index 6c7fc03..0000000
--- a/usr/local/www/themes/pfsense/images/misc/key_152.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/key_256.gif b/usr/local/www/themes/pfsense/images/misc/key_256.gif
deleted file mode 100755
index 3e1c377..0000000
--- a/usr/local/www/themes/pfsense/images/misc/key_256.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/key_64.gif b/usr/local/www/themes/pfsense/images/misc/key_64.gif
deleted file mode 100755
index 87892bd..0000000
--- a/usr/local/www/themes/pfsense/images/misc/key_64.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/left_background.gif b/usr/local/www/themes/pfsense/images/misc/left_background.gif
deleted file mode 100755
index 529d827..0000000
--- a/usr/local/www/themes/pfsense/images/misc/left_background.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/loader.gif b/usr/local/www/themes/pfsense/images/misc/loader.gif
deleted file mode 100755
index 5d10ac3..0000000
--- a/usr/local/www/themes/pfsense/images/misc/loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/loader_tab.gif b/usr/local/www/themes/pfsense/images/misc/loader_tab.gif
deleted file mode 100755
index 05bb04c..0000000
--- a/usr/local/www/themes/pfsense/images/misc/loader_tab.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/logon.png b/usr/local/www/themes/pfsense/images/misc/logon.png
deleted file mode 100755
index baf8a9d..0000000
--- a/usr/local/www/themes/pfsense/images/misc/logon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/progress_bar.gif b/usr/local/www/themes/pfsense/images/misc/progress_bar.gif
deleted file mode 100755
index 3b4aa52..0000000
--- a/usr/local/www/themes/pfsense/images/misc/progress_bar.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/rrd_error.png b/usr/local/www/themes/pfsense/images/misc/rrd_error.png
deleted file mode 100755
index a79ecf3..0000000
--- a/usr/local/www/themes/pfsense/images/misc/rrd_error.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/tri_c.gif b/usr/local/www/themes/pfsense/images/misc/tri_c.gif
deleted file mode 100755
index 317b758..0000000
--- a/usr/local/www/themes/pfsense/images/misc/tri_c.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/tri_c_black.gif b/usr/local/www/themes/pfsense/images/misc/tri_c_black.gif
deleted file mode 100755
index 309846e..0000000
--- a/usr/local/www/themes/pfsense/images/misc/tri_c_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/tri_o.gif b/usr/local/www/themes/pfsense/images/misc/tri_o.gif
deleted file mode 100755
index eb95c32..0000000
--- a/usr/local/www/themes/pfsense/images/misc/tri_o.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/tri_o_black.gif b/usr/local/www/themes/pfsense/images/misc/tri_o_black.gif
deleted file mode 100755
index f818f3b..0000000
--- a/usr/local/www/themes/pfsense/images/misc/tri_o_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/misc/widget_loader.gif b/usr/local/www/themes/pfsense/images/misc/widget_loader.gif
deleted file mode 100755
index fad101f..0000000
--- a/usr/local/www/themes/pfsense/images/misc/widget_loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/new_tab_menu.png b/usr/local/www/themes/pfsense/images/new_tab_menu.png
deleted file mode 100755
index 4bdfcef..0000000
--- a/usr/local/www/themes/pfsense/images/new_tab_menu.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/status.png b/usr/local/www/themes/pfsense/images/status.png
deleted file mode 100755
index a3e368e..0000000
--- a/usr/local/www/themes/pfsense/images/status.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/transparent.gif b/usr/local/www/themes/pfsense/images/transparent.gif
deleted file mode 100755
index 89c5530..0000000
--- a/usr/local/www/themes/pfsense/images/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/images/transparent_pixel.gif b/usr/local/www/themes/pfsense/images/transparent_pixel.gif
deleted file mode 100755
index 35d42e8..0000000
--- a/usr/local/www/themes/pfsense/images/transparent_pixel.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense/javascript/niftyjsCode.js b/usr/local/www/themes/pfsense/javascript/niftyjsCode.js
deleted file mode 100644
index 75ef8b0..0000000
--- a/usr/local/www/themes/pfsense/javascript/niftyjsCode.js
+++ /dev/null
@@ -1,174 +0,0 @@
-function NiftyCheck(){
-if(!document.getElementById || !document.createElement)
- return(false);
-isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
-if(Array.prototype.push==null){Array.prototype.push=function(){
- this[this.length]=arguments[0]; return(this.length);};}
-return(true);
-}
-
-function Rounded(selector,wich,bk,color,opt){
-var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
-
-if(color=="transparent"){
- cn=cn+"x";
- ecolor=bk;
- bk="transparent";
- }
-else if(opt && opt.indexOf("border")>=0){
- var optar=opt.split(" ");
- for(i=0;i<optar.length;i++)
- if(optar[i].indexOf("#")>=0) ecolor=optar[i];
- if(ecolor=="") ecolor="#666";
- cn+="e";
- edges=true;
- }
-else if(opt && opt.indexOf("smooth")>=0){
- cn+="a";
- ecolor=Mix(bk,color);
- }
-if(opt && opt.indexOf("small")>=0) cn+="s";
-prefixt=cn;
-prefixb=cn;
-if(wich.indexOf("all")>=0){t=true;b=true;}
-else if(wich.indexOf("top")>=0) t="true";
-else if(wich.indexOf("tl")>=0){
- t="true";
- if(wich.indexOf("tr")<0) prefixt+="l";
- }
-else if(wich.indexOf("tr")>=0){
- t="true";
- prefixt+="r";
- }
-if(wich.indexOf("bottom")>=0) b=true;
-else if(wich.indexOf("bl")>=0){
- b="true";
- if(wich.indexOf("br")<0) prefixb+="l";
- }
-else if(wich.indexOf("br")>=0){
- b="true";
- prefixb+="r";
- }
-var v=getElementsBySelector(selector);
-var l=v.length;
-for(i=0;i<l;i++){
- if(edges) AddBorder(v[i],ecolor);
- if(t) AddTop(v[i],bk,color,ecolor,prefixt);
- if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
- }
-}
-
-function AddBorder(el,bc){
-var i;
-if(!el.passed){
- if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
- var t=el.firstChild.nodeValue;
- el.removeChild(el.lastChild);
- var d=CreateEl("span");
- d.style.display="block";
- d.appendChild(document.createTextNode(t));
- el.appendChild(d);
- }
- for(i=0;i<el.childNodes.length;i++){
- if(el.childNodes[i].nodeType==1){
- el.childNodes[i].style.borderLeft="1px solid "+bc;
- el.childNodes[i].style.borderRight="1px solid "+bc;
- }
- }
- }
-el.passed=true;
-}
-
-function AddTop(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=1;i<=lim;i++){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingTop=0;
-el.insertBefore(d,el.firstChild);
-}
-
-function AddBottom(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=lim;i>0;i--){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingBottom=0;
-el.appendChild(d);
-}
-
-function CreateEl(x){
-if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
-else return(document.createElement(x));
-}
-
-function getElementsBySelector(selector){
-var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
-
-if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
- s=selector.split(" ");
- var fs=s[0].split("#");
- if(fs.length==1) return(objlist);
- f=document.getElementById(fs[1]);
- if(f) return(f.getElementsByTagName(s[1]));
- return(objlist);
- }
-if(selector.indexOf("#")>0){ //id selector like "tag#id"
- s=selector.split("#");
- tag=s[0];
- selid=s[1];
- }
-if(selid!=""){
- f=document.getElementById(selid);
- if(f) objlist.push(f);
- return(objlist);
- }
-if(selector.indexOf(".")>0){ //class selector like "tag.class"
- s=selector.split(".");
- tag=s[0];
- selclass=s[1];
- }
-var v=document.getElementsByTagName(tag); // tag selector like "tag"
-if(selclass=="")
- return(v);
-for(i=0;i<v.length;i++){
- if(v[i].className.indexOf(selclass)>=0){
- objlist.push(v[i]);
- }
- }
-return(objlist);
-}
-
-function Mix(c1,c2){
-var i,step1,step2,x,y,r=new Array(3);
-if(c1.length==4)step1=1;
-else step1=2;
-if(c2.length==4) step2=1;
-else step2=2;
-for(i=0;i<3;i++){
- x=parseInt(c1.substr(1+step1*i,step1),16);
- if(step1==1) x=16*x+x;
- y=parseInt(c2.substr(1+step2*i,step2),16);
- if(step2==1) y=16*y+y;
- r[i]=Math.floor((x*50+y*50)/100);
- }
-return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
-} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense/loader.js b/usr/local/www/themes/pfsense/loader.js
deleted file mode 100644
index 2fc9b78..0000000
--- a/usr/local/www/themes/pfsense/loader.js
+++ /dev/null
@@ -1,30 +0,0 @@
-//<![CDATA[
-var browser = '';
-var version = '';
-var entrance = '';
-var cond = '';
-
-// BROWSER?
-if (browser == '') {
- if (navigator.appName.indexOf('Microsoft') != -1)
- browser = 'IE';
- else if (navigator.appName.indexOf('Netscape') != -1)
- browser = 'Netscape';
- else
- browser = 'IE';
-}
-
-if (version == '') {
- version= navigator.appVersion;
- paren = version.indexOf('(');
- whole_version = navigator.appVersion.substring(0,paren-1);
- version = parseInt(whole_version);
-}
-
-if (browser == 'IE' && version < 7) {
- document.write('<script type="text/javascript" src="/themes/metallic/javascript/ie7/ie7-standard-p.js"></script>');
-}
-
-document.write('<script type="text/javascript" src="/themes/pfsense/javascript/niftyjsCode.js"></script>');
-
-//]]>
diff --git a/usr/local/www/themes/pfsense/login.css b/usr/local/www/themes/pfsense/login.css
deleted file mode 100644
index f8abdfc..0000000
--- a/usr/local/www/themes/pfsense/login.css
+++ /dev/null
@@ -1,1127 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-/* please adjust the bgcolor to be used together with niftycorners! */
-.rtop, .artop {
- background-color: #999999;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 9px;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- background-position : center 0px;
- background-color: #999999;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
- font-size: 14px;
- color: #cccccc;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- /* background: url('images/menu.gif') no-repeat; */
- /* width: 693px; */
- position: relative;
- top: -25px;
- left: 3px;
- width: 810px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- /* width: 7.5em; */
- width: 8.77em;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #990000;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background-color: #666666;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 10px;
- padding-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 8px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-
-#login {
-/* background: #cccccc; */
- background-color: transparent;
- border: 0px solid #cccccc;
- margin: 5em auto;
- padding: 0em;
- width: 400px;
-/* filter:alpha(opacity=60);
- -moz-opacity:0.6;
- -khtml-opacity: 0.6;
- opacity: 0.6; */
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
-/* background: #ffffff; */
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 400px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -420px;
- left: 70px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- top: -300px; */
-}
-
-#login #username, #password {
- font-size: 1em;
- width: 60%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- left: 10px;
- top: -300px; */
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- text-align: center;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -20px;
- left: 170px;
-}
-
-/* loginerror box follows */
-
-#login #inputerrors {
- background-color: transparent;
- border: 0px solid #666666;
- margin: 5em auto;
- vertical-align: middle;
- padding: 0em;
- width: 330px;
- height: 50px;
- position: relative;
- top: -370px;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense/new_tab_menu.css b/usr/local/www/themes/pfsense/new_tab_menu.css
deleted file mode 100644
index 04c4cf2..0000000
--- a/usr/local/www/themes/pfsense/new_tab_menu.css
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- new_tab_menu.css
- part of pfSense
- Copyright (C) 2010-2011 Robert Zelaya
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-
- Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
- The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
-
- <tr>
- <td>
- <?php
- $tab_array_indent = 0; // move to the line in px
- $tab_array_space = 1; // space betwen lines in px
- $tab_array_char_limit = 82; // number or chr before the drop down box
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
-
-*/
-
-.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
-
-.newtabmenu li{float:left; margin-right:2px; text-align: center;}
-.newtabmenu a:link, .newtabmenu a:visited{
- background:url(images/new_tab_menu.png) right 45px;
- color:#ffffff; /* noactive font */
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- font-weight:bold;
- font-size:.9em;
- height:20px;
- line-height:20px;
- text-decoration:none;
-}
-.newtabmenu a span{
- background:url(images/new_tab_menu.png) left 45px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- height:20px;
- margin-right:7px;
- padding-left:7px;
-}
-.newtabmenu a:hover{
- background:url(images/new_tab_menu.png) right 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- color:#ffffff; /* hover over font */
-}
-.newtabmenu a:hover span{
- background:url(images/new_tab_menu.png) left 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
-}
-
-/* -------------------------------- */
-/* ACTIVE ELEMENTS */
-.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
- color:#000000; /* active font */
- background:url(images/new_tab_menu.png) right 0 no-repeat;
-}
-.newtabmenu_active a span, .newtabmenu_active a:hover span{
- background:url(images/new_tab_menu.png) left 0 no-repeat;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense/rrdcolors.inc.php b/usr/local/www/themes/pfsense/rrdcolors.inc.php
deleted file mode 100644
index dcb7a39..0000000
--- a/usr/local/www/themes/pfsense/rrdcolors.inc.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/* $Id$ */
-/*
- rrdcolors.inc.php
- Part of pfSense
- Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/* This file is included by the RRD graphing page and sets the colors */
-
-/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* 95th Percentile Lines Out, In */
-$colortraffic95 = array('660000', 'FF0000');
-
-/* State Table pfrate, pfstates, pfnat, srcip, dstip */
-$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
-
-/* Processor Usage user, nice, system, int, processes */
-$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
-
-/* Memory Usage active, inact, free, cache, wire */
-$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
-
-/* MBUF Usage current, cache, total, max */
-$colormbuf = array('0080FF','00E344','FF0000','000000');
-
-/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
-$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
-$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
-/* Quality Graph Loss */
-$colorqualityloss = 'ee0000';
-
-/* Wireless Graph SNR, Rate, Channel*/
-/* Cellular Graph RSSI, */
-$colorwireless = array('333333','a83c3c','999999');
-
-/* SPAMD Times min area, avg area, max area, Time line */
-$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
-/* SPAMD Connections max area, min area, min line, max line, avg line */
-$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
-
-/* OpenVPN Users Online Users */
-$colorvpnusers = array('990000');
-
-/* Captive Portal Total Users Total Users */
-/* Captive Portal Concurrent Concurrent Users */
-$colorcaptiveportalusers = array('990000');
-
-?>
diff --git a/usr/local/www/themes/pfsense/styles/jquery-ui-1.11.1.css b/usr/local/www/themes/pfsense/styles/jquery-ui-1.11.1.css
deleted file mode 100644
index 8a8c54f..0000000
--- a/usr/local/www/themes/pfsense/styles/jquery-ui-1.11.1.css
+++ /dev/null
@@ -1,1226 +0,0 @@
-/*! jQuery UI - v1.11.1 - 2014-09-22
-* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden {
- display: none;
-}
-.ui-helper-hidden-accessible {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
-}
-.ui-helper-reset {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- line-height: 1.3;
- text-decoration: none;
- font-size: 100%;
- list-style: none;
-}
-.ui-helper-clearfix:before,
-.ui-helper-clearfix:after {
- content: "";
- display: table;
- border-collapse: collapse;
-}
-.ui-helper-clearfix:after {
- clear: both;
-}
-.ui-helper-clearfix {
- min-height: 0; /* support: IE7 */
-}
-.ui-helper-zfix {
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- position: absolute;
- opacity: 0;
- filter:Alpha(Opacity=0); /* support: IE8 */
-}
-
-.ui-front {
- z-index: 100;
-}
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled {
- cursor: default !important;
-}
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- display: block;
- text-indent: -99999px;
- overflow: hidden;
- background-repeat: no-repeat;
-}
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-.ui-draggable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable {
- position: relative;
-}
-.ui-resizable-handle {
- position: absolute;
- font-size: 0.1px;
- display: block;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
- display: none;
-}
-.ui-resizable-n {
- cursor: n-resize;
- height: 7px;
- width: 100%;
- top: -5px;
- left: 0;
-}
-.ui-resizable-s {
- cursor: s-resize;
- height: 7px;
- width: 100%;
- bottom: -5px;
- left: 0;
-}
-.ui-resizable-e {
- cursor: e-resize;
- width: 7px;
- right: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-w {
- cursor: w-resize;
- width: 7px;
- left: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-se {
- cursor: se-resize;
- width: 12px;
- height: 12px;
- right: 1px;
- bottom: 1px;
-}
-.ui-resizable-sw {
- cursor: sw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- bottom: -5px;
-}
-.ui-resizable-nw {
- cursor: nw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- top: -5px;
-}
-.ui-resizable-ne {
- cursor: ne-resize;
- width: 9px;
- height: 9px;
- right: -5px;
- top: -5px;
-}
-.ui-selectable {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-selectable-helper {
- position: absolute;
- z-index: 100;
- border: 1px dotted black;
-}
-.ui-sortable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-accordion .ui-accordion-header {
- display: block;
- cursor: pointer;
- position: relative;
- margin: 2px 0 0 0;
- padding: .5em .5em .5em .7em;
- min-height: 0; /* support: IE7 */
- font-size: 100%;
-}
-.ui-accordion .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
- position: absolute;
- left: .5em;
- top: 50%;
- margin-top: -8px;
-}
-.ui-accordion .ui-accordion-content {
- padding: 1em 2.2em;
- border-top: 0;
- overflow: auto;
-}
-.ui-autocomplete {
- position: absolute;
- top: 0;
- left: 0;
- cursor: default;
-}
-.ui-button {
- display: inline-block;
- position: relative;
- padding: 0;
- line-height: normal;
- margin-right: .1em;
- cursor: pointer;
- vertical-align: middle;
- text-align: center;
- overflow: visible; /* removes extra width in IE */
-}
-.ui-button,
-.ui-button:link,
-.ui-button:visited,
-.ui-button:hover,
-.ui-button:active {
- text-decoration: none;
-}
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
- width: 2.2em;
-}
-/* button elements seem to need a little more width */
-button.ui-button-icon-only {
- width: 2.4em;
-}
-.ui-button-icons-only {
- width: 3.4em;
-}
-button.ui-button-icons-only {
- width: 3.7em;
-}
-
-/* button text element */
-.ui-button .ui-button-text {
- display: block;
- line-height: normal;
-}
-.ui-button-text-only .ui-button-text {
- padding: .4em 1em;
-}
-.ui-button-icon-only .ui-button-text,
-.ui-button-icons-only .ui-button-text {
- padding: .4em;
- text-indent: -9999999px;
-}
-.ui-button-text-icon-primary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 1em .4em 2.1em;
-}
-.ui-button-text-icon-secondary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 2.1em .4em 1em;
-}
-.ui-button-text-icons .ui-button-text {
- padding-left: 2.1em;
- padding-right: 2.1em;
-}
-/* no icon support for input elements, provide padding by default */
-input.ui-button {
- padding: .4em 1em;
-}
-
-/* button icon element(s) */
-.ui-button-icon-only .ui-icon,
-.ui-button-text-icon-primary .ui-icon,
-.ui-button-text-icon-secondary .ui-icon,
-.ui-button-text-icons .ui-icon,
-.ui-button-icons-only .ui-icon {
- position: absolute;
- top: 50%;
- margin-top: -8px;
-}
-.ui-button-icon-only .ui-icon {
- left: 50%;
- margin-left: -8px;
-}
-.ui-button-text-icon-primary .ui-button-icon-primary,
-.ui-button-text-icons .ui-button-icon-primary,
-.ui-button-icons-only .ui-button-icon-primary {
- left: .5em;
-}
-.ui-button-text-icon-secondary .ui-button-icon-secondary,
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
- right: .5em;
-}
-
-/* button sets */
-.ui-buttonset {
- margin-right: 7px;
-}
-.ui-buttonset .ui-button {
- margin-left: 0;
- margin-right: -.3em;
-}
-
-/* workarounds */
-/* reset extra padding in Firefox, see h5bp.com/l */
-input.ui-button::-moz-focus-inner,
-button.ui-button::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-.ui-datepicker {
- width: 17em;
- padding: .2em .2em 0;
- display: none;
-}
-.ui-datepicker .ui-datepicker-header {
- position: relative;
- padding: .2em 0;
-}
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-next {
- position: absolute;
- top: 2px;
- width: 1.8em;
- height: 1.8em;
-}
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
- top: 1px;
-}
-.ui-datepicker .ui-datepicker-prev {
- left: 2px;
-}
-.ui-datepicker .ui-datepicker-next {
- right: 2px;
-}
-.ui-datepicker .ui-datepicker-prev-hover {
- left: 1px;
-}
-.ui-datepicker .ui-datepicker-next-hover {
- right: 1px;
-}
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
- display: block;
- position: absolute;
- left: 50%;
- margin-left: -8px;
- top: 50%;
- margin-top: -8px;
-}
-.ui-datepicker .ui-datepicker-title {
- margin: 0 2.3em;
- line-height: 1.8em;
- text-align: center;
-}
-.ui-datepicker .ui-datepicker-title select {
- font-size: 1em;
- margin: 1px 0;
-}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year {
- width: 45%;
-}
-.ui-datepicker table {
- width: 100%;
- font-size: .9em;
- border-collapse: collapse;
- margin: 0 0 .4em;
-}
-.ui-datepicker th {
- padding: .7em .3em;
- text-align: center;
- font-weight: bold;
- border: 0;
-}
-.ui-datepicker td {
- border: 0;
- padding: 1px;
-}
-.ui-datepicker td span,
-.ui-datepicker td a {
- display: block;
- padding: .2em;
- text-align: right;
- text-decoration: none;
-}
-.ui-datepicker .ui-datepicker-buttonpane {
- background-image: none;
- margin: .7em 0 0 0;
- padding: 0 .2em;
- border-left: 0;
- border-right: 0;
- border-bottom: 0;
-}
-.ui-datepicker .ui-datepicker-buttonpane button {
- float: right;
- margin: .5em .2em .4em;
- cursor: pointer;
- padding: .2em .6em .3em .6em;
- width: auto;
- overflow: visible;
-}
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
- float: left;
-}
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi {
- width: auto;
-}
-.ui-datepicker-multi .ui-datepicker-group {
- float: left;
-}
-.ui-datepicker-multi .ui-datepicker-group table {
- width: 95%;
- margin: 0 auto .4em;
-}
-.ui-datepicker-multi-2 .ui-datepicker-group {
- width: 50%;
-}
-.ui-datepicker-multi-3 .ui-datepicker-group {
- width: 33.3%;
-}
-.ui-datepicker-multi-4 .ui-datepicker-group {
- width: 25%;
-}
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
- border-left-width: 0;
-}
-.ui-datepicker-multi .ui-datepicker-buttonpane {
- clear: left;
-}
-.ui-datepicker-row-break {
- clear: both;
- width: 100%;
- font-size: 0;
-}
-
-/* RTL support */
-.ui-datepicker-rtl {
- direction: rtl;
-}
-.ui-datepicker-rtl .ui-datepicker-prev {
- right: 2px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next {
- left: 2px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
- right: 1px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
- left: 1px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
- clear: right;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
- float: left;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
-.ui-datepicker-rtl .ui-datepicker-group {
- float: right;
-}
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
- border-right-width: 0;
- border-left-width: 1px;
-}
-.ui-dialog {
- overflow: hidden;
- position: absolute;
- top: 0;
- left: 0;
- padding: .2em;
- outline: 0;
-}
-.ui-dialog .ui-dialog-titlebar {
- padding: .4em 1em;
- position: relative;
-}
-.ui-dialog .ui-dialog-title {
- float: left;
- margin: .1em 0;
- white-space: nowrap;
- width: 90%;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.ui-dialog .ui-dialog-titlebar-close {
- position: absolute;
- right: .3em;
- top: 50%;
- width: 20px;
- margin: -10px 0 0 0;
- padding: 1px;
- height: 20px;
-}
-.ui-dialog .ui-dialog-content {
- position: relative;
- border: 0;
- padding: .5em 1em;
- background: none;
- overflow: auto;
-}
-.ui-dialog .ui-dialog-buttonpane {
- text-align: left;
- border-width: 1px 0 0 0;
- background-image: none;
- margin-top: .5em;
- padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
- float: right;
-}
-.ui-dialog .ui-dialog-buttonpane button {
- margin: .5em .4em .5em 0;
- cursor: pointer;
-}
-.ui-dialog .ui-resizable-se {
- width: 12px;
- height: 12px;
- right: -5px;
- bottom: -5px;
- background-position: 16px 16px;
-}
-.ui-draggable .ui-dialog-titlebar {
- cursor: move;
-}
-.ui-menu {
- list-style: none;
- padding: 0;
- margin: 0;
- display: block;
- outline: none;
-}
-.ui-menu .ui-menu {
- position: absolute;
-}
-.ui-menu .ui-menu-item {
- position: relative;
- margin: 0;
- padding: 3px 1em 3px .4em;
- cursor: pointer;
- min-height: 0; /* support: IE7 */
- /* support: IE10, see #8844 */
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
-}
-.ui-menu .ui-menu-divider {
- margin: 5px 0;
- height: 0;
- font-size: 0;
- line-height: 0;
- border-width: 1px 0 0 0;
-}
-.ui-menu .ui-state-focus,
-.ui-menu .ui-state-active {
- margin: -1px;
-}
-
-/* icon support */
-.ui-menu-icons {
- position: relative;
-}
-.ui-menu-icons .ui-menu-item {
- padding-left: 2em;
-}
-
-/* left-aligned */
-.ui-menu .ui-icon {
- position: absolute;
- top: 0;
- bottom: 0;
- left: .2em;
- margin: auto 0;
-}
-
-/* right-aligned */
-.ui-menu .ui-menu-icon {
- left: auto;
- right: 0;
-}
-.ui-progressbar {
- height: 1em;
- text-align: left;
- overflow: hidden;
-}
-.ui-progressbar .ui-progressbar-value {
- margin: -1px;
- height: 100%;
- background-color: #990000;
-}
-.ui-progressbar .ui-progressbar-overlay {
- background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
- height: 100%;
- filter: alpha(opacity=25); /* support: IE8 */
- opacity: 0.25;
-}
-.ui-progressbar-indeterminate .ui-progressbar-value {
- background-image: none;
-}
-.ui-selectmenu-menu {
- padding: 0;
- margin: 0;
- position: absolute;
- top: 0;
- left: 0;
- display: none;
-}
-.ui-selectmenu-menu .ui-menu {
- overflow: auto;
- /* Support: IE7 */
- overflow-x: hidden;
- padding-bottom: 1px;
-}
-.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
- font-size: 1em;
- font-weight: bold;
- line-height: 1.5;
- padding: 2px 0.4em;
- margin: 0.5em 0 0 0;
- height: auto;
- border: 0;
-}
-.ui-selectmenu-open {
- display: block;
-}
-.ui-selectmenu-button {
- display: inline-block;
- overflow: hidden;
- position: relative;
- text-decoration: none;
- cursor: pointer;
-}
-.ui-selectmenu-button span.ui-icon {
- right: 0.5em;
- left: auto;
- margin-top: -8px;
- position: absolute;
- top: 50%;
-}
-.ui-selectmenu-button span.ui-selectmenu-text {
- text-align: left;
- padding: 0.4em 2.1em 0.4em 1em;
- display: block;
- line-height: 1.4;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.ui-slider {
- position: relative;
- text-align: left;
-}
-.ui-slider .ui-slider-handle {
- position: absolute;
- z-index: 2;
- width: 1.2em;
- height: 1.2em;
- cursor: default;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-slider .ui-slider-range {
- position: absolute;
- z-index: 1;
- font-size: .7em;
- display: block;
- border: 0;
- background-position: 0 0;
-}
-
-/* support: IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
- filter: inherit;
-}
-
-.ui-slider-horizontal {
- height: .8em;
-}
-.ui-slider-horizontal .ui-slider-handle {
- top: -.3em;
- margin-left: -.6em;
-}
-.ui-slider-horizontal .ui-slider-range {
- top: 0;
- height: 100%;
-}
-.ui-slider-horizontal .ui-slider-range-min {
- left: 0;
-}
-.ui-slider-horizontal .ui-slider-range-max {
- right: 0;
-}
-
-.ui-slider-vertical {
- width: .8em;
- height: 100px;
-}
-.ui-slider-vertical .ui-slider-handle {
- left: -.3em;
- margin-left: 0;
- margin-bottom: -.6em;
-}
-.ui-slider-vertical .ui-slider-range {
- left: 0;
- width: 100%;
-}
-.ui-slider-vertical .ui-slider-range-min {
- bottom: 0;
-}
-.ui-slider-vertical .ui-slider-range-max {
- top: 0;
-}
-.ui-spinner {
- position: relative;
- display: inline-block;
- overflow: hidden;
- padding: 0;
- vertical-align: middle;
-}
-.ui-spinner-input {
- border: none;
- background: none;
- color: inherit;
- padding: 0;
- margin: .2em 0;
- vertical-align: middle;
- margin-left: .4em;
- margin-right: 22px;
-}
-.ui-spinner-button {
- width: 16px;
- height: 50%;
- font-size: .5em;
- padding: 0;
- margin: 0;
- text-align: center;
- position: absolute;
- cursor: default;
- display: block;
- overflow: hidden;
- right: 0;
-}
-/* more specificity required here to override default borders */
-.ui-spinner a.ui-spinner-button {
- border-top: none;
- border-bottom: none;
- border-right: none;
-}
-/* vertically center icon */
-.ui-spinner .ui-icon {
- position: absolute;
- margin-top: -8px;
- top: 50%;
- left: 0;
-}
-.ui-spinner-up {
- top: 0;
-}
-.ui-spinner-down {
- bottom: 0;
-}
-
-/* TR overrides */
-.ui-spinner .ui-icon-triangle-1-s {
- /* need to fix icons sprite */
- background-position: -65px -16px;
-}
-.ui-tabs {
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
- padding: .2em;
-}
-.ui-tabs .ui-tabs-nav {
- margin: 0;
- padding: .2em .2em 0;
-}
-.ui-tabs .ui-tabs-nav li {
- list-style: none;
- float: left;
- position: relative;
- top: 0;
- margin: 1px .2em 0 0;
- border-bottom-width: 0;
- padding: 0;
- white-space: nowrap;
-}
-.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
- float: left;
- padding: .5em 1em;
- text-decoration: none;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
- margin-bottom: -1px;
- padding-bottom: 1px;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
- cursor: text;
-}
-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
- cursor: pointer;
-}
-.ui-tabs .ui-tabs-panel {
- display: block;
- border-width: 0;
- padding: 1em 1.4em;
- background: none;
-}
-.ui-tooltip {
- padding: 8px;
- position: absolute;
- z-index: 9999;
- max-width: 300px;
- -webkit-box-shadow: 0 0 5px #aaa;
- box-shadow: 0 0 5px #aaa;
-}
-body .ui-tooltip {
- border-width: 2px;
-}
-
-/* Component containers
-----------------------------------*/
-.ui-widget {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1.1em;
-}
-.ui-widget .ui-widget {
- font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1em;
-}
-.ui-widget-content {
- border: 1px solid #aaaaaa;
- background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
- color: #333333;
-}
-.ui-widget-content a {
- color: #333333;
-}
-.ui-widget-header {
- border: 1px solid #bbbbbb;
- /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
- color: #444444;
- font-weight: bold;
-}
-.ui-widget-header a {
- color: #444444;
-}
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default {
- border: 1px solid #cccccc;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #3383bb;
-}
-.ui-state-default a,
-.ui-state-default a:link,
-.ui-state-default a:visited {
- color: #3383bb;
- text-decoration: none;
-}
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus {
- border: 1px solid #bbbbbb;
- background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #599fcf;
-}
-.ui-state-hover a,
-.ui-state-hover a:hover,
-.ui-state-hover a:link,
-.ui-state-hover a:visited,
-.ui-state-focus a,
-.ui-state-focus a:hover,
-.ui-state-focus a:link,
-.ui-state-focus a:visited {
- color: #599fcf;
- text-decoration: none;
-}
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active {
- border: 1px solid #999999;
- background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #ffffff;
-}
-.ui-state-active a,
-.ui-state-active a:link,
-.ui-state-active a:visited {
- color: #ffffff;
- text-decoration: none;
-}
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight,
-.ui-widget-header .ui-state-highlight {
- border: 1px solid #ffffff;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
- color: #444444;
-}
-.ui-state-highlight a,
-.ui-widget-content .ui-state-highlight a,
-.ui-widget-header .ui-state-highlight a {
- color: #444444;
-}
-.ui-state-error,
-.ui-widget-content .ui-state-error,
-.ui-widget-header .ui-state-error {
- border: 1px solid #c0402a;
- background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
- color: #ffffff;
-}
-.ui-state-error a,
-.ui-widget-content .ui-state-error a,
-.ui-widget-header .ui-state-error a {
- color: #ffffff;
-}
-.ui-state-error-text,
-.ui-widget-content .ui-state-error-text,
-.ui-widget-header .ui-state-error-text {
- color: #ffffff;
-}
-.ui-priority-primary,
-.ui-widget-content .ui-priority-primary,
-.ui-widget-header .ui-priority-primary {
- font-weight: bold;
-}
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary,
-.ui-widget-header .ui-priority-secondary {
- opacity: .7;
- filter:Alpha(Opacity=70); /* support: IE8 */
- font-weight: normal;
-}
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled,
-.ui-widget-header .ui-state-disabled {
- opacity: .35;
- filter:Alpha(Opacity=35); /* support: IE8 */
- background-image: none;
-}
-.ui-state-disabled .ui-icon {
- filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
-}
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- width: 16px;
- height: 16px;
-}
-.ui-icon,
-.ui-widget-content .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-widget-header .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-state-default .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
-}
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-active .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
-}
-.ui-state-highlight .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
-}
-
-/* positioning */
-.ui-icon-blank { background-position: 16px 16px; }
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-on { background-position: -96px -144px; }
-.ui-icon-radio-off { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
- border-top-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
- border-top-right-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
- border-bottom-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
- border-bottom-right-radius: 6px;
-}
-
-/* Overlays */
-.ui-widget-overlay {
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
- opacity: .8;
- filter: Alpha(Opacity=80); /* support: IE8 */
-}
-.ui-widget-shadow {
- margin: -4px 0 0 -4px;
- padding: 4px;
- background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
- opacity: .6;
- filter: Alpha(Opacity=60); /* support: IE8 */
- border-radius: 0pxdow;
-}
diff --git a/usr/local/www/themes/pfsense_ng/all.css b/usr/local/www/themes/pfsense_ng/all.css
deleted file mode 100644
index 39beb77..0000000
--- a/usr/local/www/themes/pfsense_ng/all.css
+++ /dev/null
@@ -1,1414 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, sans-serif;
- font-size: 0.9em;
-
-}
-
-.nowrap { white-space: nowrap; }
-
-.addgatewaybox {
- background-color: #990000;
- border-style: none none none none;
- width: 225px;
-}
-
-.infobox {
- width:100%;
-}
-
-.infoboxsave {
- padding-right: 10px;
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-.inputerrorsleft {
- background-color: #990000;
- width: 36px;
-}
-
-.inputerrorsright {
- background-color: #FFD9D1;
- color: #000000;
- font-size: 11px;
- padding-left: 8px;
- padding-top: 6px;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 220px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 11px;
- font-family: "Trebuchet MS", sans-serif;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- align: left;
- background: url('images/background.jpg') no-repeat;
- background-position : left 0px;
- background-attachment: fixed;
- background-color: #7f7f7f;
-}
-a:link {
- color: #550000;
-}
-
-a:visited {
- color: #550000;
-}
-
-a:active {
- color: #550000;
-}
-
-a:hover {
- color: #550000;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* style of disabled formelements */
-#wrap div {margin:1em 0}
-[disabled] {
- color:#666666;
- background:#eeeeee;
-}
-
-/* ID Based CSS Definitions */
-/* margin: 0px auto makes the content centered, margin 0px 0px makes it aligned to the left */
-#wrapper {
- width: 810px;
- margin: 0px 0px;
-/* left: 0px; */
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 40px;
- width: 810px;
- position: fixed;
- left: 0;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 40px;
- width: 80px;
- left: 0px;
- top:0px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 0px;
- left: 0px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 30px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-/* for forcing an alert run the following command from diagnostics>command, php command:
-file_notice("blah", "blah blah...testing my new theme...");
-*/
-
-#header-right .container .right #alerts {
- position: fixed;
- background: url('images/alert_bgr.png') no-repeat;
- height: 40px;
- width: 400px;
- top: 0px;
- left: 810px;
- z-index: 2;
- padding-top: 1px;
- padding-left: 10px;
- margin: 0px;
-}
-
-#header-right .container .right #hostname {
- position: fixed;
- background: url('images/hostname.png') no-repeat;
- height: 40px;
- width: 400px;
- z-index: 1;
- padding-right: 5px;
- margin: 0px;
- top: 0px;
- left: 810px;
- font-size: 12px;
- color: #000000;
- font-weight: bold;
- padding-left: 40px;
- padding-top: 2px;
- text-align: left;
-}
-
-
-
-
-table#marquee {
- position: relative;
- top: -4px;
- left: 15px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 350px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
-/* font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff; */
- font-size: 12px;
- font-weight: normal;
- font-style: italic;
- color: #000000;
- padding-left: 30px;
- padding-top: 2px;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 330px;
- height: 16px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-#content {
- position: relative;
- top: 0px;
- left: 75px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 50px;
- padding-left: 20px;
- width: 840px;
- background-color: #ffffff;
- background: url('images/horizontal.png') repeat-y;
-}
-
-
-/* try to abuse left as a fadeout at the end of the page */
-#left {
- width: 810px;
- height: 1px;
-}
-
-#right {
- position: relative;
- top: -10px;
- left: 0px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 20px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 90px;
- min-height: 400px;
-
-}
-
-#footer {
- position: relative;
-/* margin-bottom: 5px; */
- background: url('images/footer.png') no-repeat;
-/* top: -100px; */
- bottom: 0px;
- left: 75px;
-/* width: 1210px; */
- width: 840px;
- height: 60px;
- color: #000000;
- text-align: center;
- font-size: 0.9em;
- padding-top: 10px;
- padding-left: 10px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-
-}
-
-/* Style the List */
-#navigation {
- position: fixed;
- top: 0px;
- left: 100px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
- margin-left: 10px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- padding-right: 20px;
- top: 0px;
-}
-
-/* Text mainmenubar */
-#navigation ul li div {
- background-image: url(images/mainmenu-right.gif);
- background-position: 2% 50%;
- background-repeat: no-repeat;
- padding-top:0px;
- font-size: 12px;
- font-weight: normal;
- color: #ffffff;
- text-align: left;
- padding-left: 13px;
- height: 13px;
-}
-
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- font-weight: normal;
- margin-top: 1px;
- padding-top: 5px;
- background: #850000;
- border: 0px;
- /* transparent */
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=95);
- -moz-opacity: 0.95;
- -khtml-opacity: 0.95;
- opacity: 0.95;
- /* borders */
- border-bottom-right-radius: 0px;
- border-bottom-left-radius: 6px;
- border-top-left-radius: 6px;
- border-top-right-radius: 6px;
- /* Mozilla */
- -moz-border-radius-bottomright: 0px;
- -moz-border-radius-bottomleft: 6px;
- -moz-border-radius-topright: 6px;
- -moz-border-radius-topleft: 6px;
- /* WebKit */
- -webkit-border-bottom-right-radius: 0px;
- -webkit-border-bottom-left-radius: 6px;
- -webkit-border-top-right-radius: 6px;
- -webkit-border-top-left-radius: 6px;
- /* Shadow Effect */
- box-shadow: 5px 5px 10px #000000;
- -webkit-box-shadow: 5px 5px 10px #000000;
- -moz-box-shadow: 5px 5px 10px #000000;
- /* Vertical menu max size */
- /* max-height: 259px; /
- /* Horizontal menu max size */
- max-width: 128px;
- overflow-x: hidden;
- overflow-y: auto;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
- background-image: url(images/mainmenu-down.gif);
- background-position: 5% 50%;
- background-repeat: no-repeat;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #000000;
-}
-/* dropdownmenu */
-#navigation ul li ul li {
- border: 0px solid #850000;
- width: 128px;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #850000;
- /* borders */
- border-bottom-right-radius: 0px;
- border-bottom-left-radius: 3px;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
- /* Mozilla */
- -moz-border-radius-bottomright: 0px;
- -moz-border-radius-bottomleft: 3px;
- -moz-border-radius-topright: 3px;
- -moz-border-radius-topleft: 3px;
- /* WebKit */
- -webkit-border-bottom-right-radius: 0px;
- -webkit-border-bottom-left-radius: 3px;
- -webkit-border-top-right-radius: 3px;
- -webkit-border-top-left-radius: 3px;
-}
-/* last element in dropdown menu*/
-#navigation ul li ul li:last-child {
- margin-bottom: 5px;
-}
-#navigation ul li ul li:hover {
- margin-left: 5px;
- background-color: #666666;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=95);
- -moz-opacity: 0.95;
- -khtml-opacity: 0.95;
- opacity: 0.95;
-}
-
-/* textcolor in dropdownmenu */
-#navigation li li a {
- display: block;
- padding-left: 8px;
- padding-right: 8px;
- color: #ffffff;
- font-size: 11px;
- font-weight: normal;
- text-align: left;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-}
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
- background-color: transparent;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listrborder {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-left: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- color: #FFFFFF;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #DDDDDD;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-/* style of disabled formelements */
-[disabled] {
- color:#666666;
- background:#eeeeee;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 6px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-#login {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 340px;
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 50px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login #username, #password, #password2 {
- font-size: small;
- width: 60%;
- padding-left: 19px;
- padding: 3px;
- margin: 0em;
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-/* Widget CSS */
-.widgetsubheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #B1B1B1;
- padding-right: 6px;
- padding-left: 6px;
- color: #000000;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetdiv{
- margin:5px;
- padding: 5px;
- background:#CCCCCC;
-}
-.widgetconfigdiv{
- background:#BBBBBB;
- font-size: 11px;
- color: #000000;
- padding-right: 5px;
- padding-left: 5px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-
-div#log div.log-entry-mini {
- clear: both;
-}
-
-div#log div.log-entry-mini span {
- padding: 2px 2px 2px 2px;
- padding-left: 6px;
-}
-
-div#log span.log-action-mini-header,
-div#log span.log-time-mini-header,
-div#log span.log-interface-mini-header,
-div#log span.log-source-mini-header,
-div#log span.log-destination-mini-header,
-div#log span.log-protocol-mini-header {
- float: left;
- text-align: left;
- background-color: #B1B1B1;
- font-size: 12px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-time-mini,
-div#log span.log-interface-mini,
-div#log span.log-source-mini,
-div#log span.log-destination-mini,
-div#log span.log-protocol-mini {
- float: left;
- text-align: left;
- background-color: #FFFFFF;
- font-size: 11px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-action-mini-header {
- width: 6%;
-}
-
-div#log span.log-time-mini,
-div#log span.log-time-mini-header {
- width: 19%;
-}
-
-div#log span.log-interface-mini,
-div#log span.log-interface-mini-header {
- width: 8%;
-}
-
-div#log span.log-source-mini,
-div#log span.log-source-mini-header {
- width: 23%;
-}
-
-div#log span.log-destination-mini,
-div#log span.log-destination-mini-header {
- width: 31%;
-}
-
-div#log span.log-protocol-mini,
-div#log span.log-protocol-mini-header {
- width: 8%;
- border-right: 1px solid #999;
-}
-
-/* Sortable tables */
-table.sortable thead {
- cursor: default;
- /* background-color: #EEEEEE; this causing light gray rectangles to the right of many tables in gui */
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-
-/*thermal_sensors widget styles*/
-
-.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
-.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
-.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
- background-color: LimeGreen;
- border-top-width: 2px; border-top-color: Lime;
- border-left-width: 0px;
- border-right-width: 0px;
- border-bottom-width: 2px; border-bottom-color: Green;
-}
-.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
-.thermalSensorText { float: left; height: 20px; top: 3px; }
-.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
-
-.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-
-.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
-
-.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
-
-/* widget textarea styles - full width */
-.textarea_widget {
- width: 100%;
- resize:vertical;
- -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
- -moz-box-sizing: border-box; /* Firefox, other Gecko */
- box-sizing: border-box; /* IE 8+ */
-}
diff --git a/usr/local/www/themes/pfsense_ng/apple-touch-icon.png b/usr/local/www/themes/pfsense_ng/apple-touch-icon.png
deleted file mode 100755
index 7a4b975..0000000
--- a/usr/local/www/themes/pfsense_ng/apple-touch-icon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/bottom-loader.js b/usr/local/www/themes/pfsense_ng/bottom-loader.js
deleted file mode 100644
index a21f775..0000000
--- a/usr/local/www/themes/pfsense_ng/bottom-loader.js
+++ /dev/null
@@ -1,10 +0,0 @@
-//<![CDATA[
-
- NiftyCheck();
- Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
- Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
- Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
- Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
- Rounded("div#topbox","all","#FFF","#990000","smooth");
-
-//]]>
diff --git a/usr/local/www/themes/pfsense_ng/favicon.ico b/usr/local/www/themes/pfsense_ng/favicon.ico
deleted file mode 100644
index 3440bf2..0000000
--- a/usr/local/www/themes/pfsense_ng/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/graphlink.css b/usr/local/www/themes/pfsense_ng/graphlink.css
deleted file mode 100644
index 521059e..0000000
--- a/usr/local/www/themes/pfsense_ng/graphlink.css
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- $Id: graphlink.css,v 1.2.2.1 2007/01/17 18:43:30 sullrich Exp $
-
- This file is part of the GraphLink software.
- GraphLink is distributed under the MIT License.
- Copyright (C) 2005-2006 Max Khitrov <max@mxsoft.org>
-*******************************************************************************/
-
-/**
- * Defines the background image used for the graph, as well as the actual data
- * locations.
- * Use padding-left and padding-top to align the data area correctly with your
- * background image.
- * Width and height should same as the dimensions of the image, minus the
- * padding values in both directions.
- */
-div.GraphLink {
- width: 212px;
- height: 60px;
- padding-left: 38px;
- padding-top: 10px;
- background-image: url(/themes/nervecenter/images/misc/graph.png);
- overflow: hidden;
-}
-
-/**
- * Defines the data display area. Modify to fit your background image.
- */
-div.GraphLinkData {
- width: 200px;
- height: 50px;
- overflow: hidden;
-}
-
-/**
- * Defines the look of one bar. Nothing to change here other than the color.
- */
-span.GraphLinkBar {
- background-color: #990000;
- height: 100%;
- float: left;
- overflow: hidden;
-}
diff --git a/usr/local/www/themes/pfsense_ng/images/alert_bgr.png b/usr/local/www/themes/pfsense_ng/images/alert_bgr.png
deleted file mode 100755
index 5a8ac81..0000000
--- a/usr/local/www/themes/pfsense_ng/images/alert_bgr.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/alerter.png b/usr/local/www/themes/pfsense_ng/images/alerter.png
deleted file mode 100755
index e026bfe..0000000
--- a/usr/local/www/themes/pfsense_ng/images/alerter.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/background.jpg b/usr/local/www/themes/pfsense_ng/images/background.jpg
deleted file mode 100755
index ebdff47..0000000
--- a/usr/local/www/themes/pfsense_ng/images/background.jpg
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/footer.png b/usr/local/www/themes/pfsense_ng/images/footer.png
deleted file mode 100755
index b10002b..0000000
--- a/usr/local/www/themes/pfsense_ng/images/footer.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/header.png b/usr/local/www/themes/pfsense_ng/images/header.png
deleted file mode 100755
index 6f8128c..0000000
--- a/usr/local/www/themes/pfsense_ng/images/header.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/help.png b/usr/local/www/themes/pfsense_ng/images/help.png
deleted file mode 100755
index 1de05e3..0000000
--- a/usr/local/www/themes/pfsense_ng/images/help.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/horizontal.png b/usr/local/www/themes/pfsense_ng/images/horizontal.png
deleted file mode 100755
index f098bb3..0000000
--- a/usr/local/www/themes/pfsense_ng/images/horizontal.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/hostname.png b/usr/local/www/themes/pfsense_ng/images/hostname.png
deleted file mode 100755
index cd79f5c..0000000
--- a/usr/local/www/themes/pfsense_ng/images/hostname.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/favicon.ico b/usr/local/www/themes/pfsense_ng/images/icons/favicon.ico
deleted file mode 100644
index 3440bf2..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_3g.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_3g.gif
deleted file mode 100755
index 46ccb92..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_3g.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_3g_inactive.gif
deleted file mode 100755
index cf983e4..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_3g_inactive.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced.gif
deleted file mode 100755
index 3ede1ff..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced_s.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced_s.gif
deleted file mode 100755
index b233549..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_alert.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_alert.gif
deleted file mode 100755
index 7646941..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_alert.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_host.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_host.gif
deleted file mode 100755
index ad43e17..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_host.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_net.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_net.gif
deleted file mode 100755
index abd1b8b..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_net.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_port.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_port.gif
deleted file mode 100755
index 4acf2aa..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_port.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url.gif
deleted file mode 100755
index 660571e..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url_reload.gif
deleted file mode 100755
index 55c1c4a..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url_reload.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_block.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_block.gif
deleted file mode 100755
index 670c968..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_block.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gif
deleted file mode 100755
index eb726d6..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_block_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_block_d.gif
deleted file mode 100755
index e6345fe..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_block_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_cablenic.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_cablenic.gif
deleted file mode 100755
index a071c66..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_cablenic.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_cal.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_cal.gif
deleted file mode 100755
index a9c7c87..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_cal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_cal_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_cal_mo.gif
deleted file mode 100755
index 1647e2f..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_cal_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_carp.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_carp.gif
deleted file mode 100755
index 9454a82..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_carp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_carp_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_carp_d.gif
deleted file mode 100755
index 2ba8db2..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_carp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_chain.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_chain.png
deleted file mode 100755
index 12db07a..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_chain.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_check.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_check.gif
deleted file mode 100755
index 393674d..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_check.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_green.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_green.gif
deleted file mode 100755
index e171ba8..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_green.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_grey.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_grey.gif
deleted file mode 100755
index 00c865a..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_grey.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_red.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_red.gif
deleted file mode 100755
index 7b412ee..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_red.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_close.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_close.gif
deleted file mode 100755
index e0f86a7..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_close.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_configure.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_configure.gif
deleted file mode 100755
index 7182e0d..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_configure.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_down.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_down.gif
deleted file mode 100755
index b71a9c5..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_down_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_down_d.gif
deleted file mode 100755
index 70a7473..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_down_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_down_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_down_mo.gif
deleted file mode 100755
index 584587a..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_down_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_e.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_e.gif
deleted file mode 100755
index 2950800..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_e.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_e_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_e_mo.gif
deleted file mode 100755
index 9ba5738..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_e_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_error.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_error.gif
deleted file mode 100755
index e0fa659..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_error.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_exclam.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_exclam.gif
deleted file mode 100755
index 36c2ec7..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_exclam.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_de.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_de.png
deleted file mode 100755
index 069cbbe..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_de.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_en.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_en.png
deleted file mode 100755
index bd7f9a5..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_en.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_es.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_es.png
deleted file mode 100755
index 434776c..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_es.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_pt_BR.png
deleted file mode 100755
index f786349..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_pt_BR.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_cert.png
deleted file mode 100755
index 48a34b6..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_cert.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_file.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_file.png
deleted file mode 100755
index 48a9ed2..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_file.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_group.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_group.png
deleted file mode 100755
index 7d929c0..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_host.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_host.png
deleted file mode 100755
index 867ef2c..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_host.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_imp.png
deleted file mode 100755
index f667cfc..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_imp.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_mail.png
deleted file mode 100755
index d2d4548..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_mail.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_pwd.png
deleted file mode 100755
index 06b53a1..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_pwd.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_search.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_search.png
deleted file mode 100755
index 33de926..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_search.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_time.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_time.png
deleted file mode 100755
index aa8300a..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_time.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_unknown.png
deleted file mode 100755
index 1857d0e..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_unknown.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_url.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_url.png
deleted file mode 100755
index cf56792..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_url.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_user.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_user.png
deleted file mode 100755
index e00eebe..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_fw-update.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_fw-update.gif
deleted file mode 100755
index 52c18ac..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_fw-update.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_help.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_help.gif
deleted file mode 100644
index 84c84db..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_help.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias.gif
deleted file mode 100755
index 0c569a7..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias_d.gif
deleted file mode 100755
index faa84d4..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_import_alias.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_import_alias.gif
deleted file mode 100755
index d11a5f0..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_import_alias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_in.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_in_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_info_pkg.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_info_pkg.gif
deleted file mode 100755
index cd3a532..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_info_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_down.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_down.gif
deleted file mode 100755
index 0626655..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_up.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_up.gif
deleted file mode 100755
index 1449513..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_left.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_left.gif
deleted file mode 100755
index 8effefe..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_left_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_left_d.gif
deleted file mode 100755
index c778014..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_left_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_left_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_left_mo.gif
deleted file mode 100755
index 84c6fa2..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_left_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_log.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_log.gif
deleted file mode 100755
index 4a1983a..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_log.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_log_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_log_d.gif
deleted file mode 100755
index d31bd9b..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_log_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s.gif
deleted file mode 100755
index f9fda33..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s_d.gif
deleted file mode 100755
index fb2c05f..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_logs.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_logs.gif
deleted file mode 100644
index afe0104..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_logs.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_match.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_match.gif
deleted file mode 100644
index 215571f..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_match.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_match_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_match_d.gif
deleted file mode 100644
index 6e4c364..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_match_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_minus.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_minus.gif
deleted file mode 100755
index 417544f..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_minus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_open.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_open.gif
deleted file mode 100755
index ac3da14..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_open.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_other.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_other.gif
deleted file mode 100755
index e6f780f..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_other.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_other_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_other_d.gif
deleted file mode 100755
index b08d970..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_other_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_out.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_out_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_parp.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_parp.gif
deleted file mode 100755
index 96acaf3..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_parp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_parp_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_parp_d.gif
deleted file mode 100755
index 7d7d00e..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_parp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_pass.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_pass.gif
deleted file mode 100755
index fe1bb0d..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_pass.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gif
deleted file mode 100755
index f7f4c20..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_d.gif
deleted file mode 100755
index 6adc431..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus.gif
deleted file mode 100755
index 2a94eeb..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl.gif
deleted file mode 100755
index 8dcd7c0..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl_p.gif
deleted file mode 100755
index 0c79849..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_d.gif
deleted file mode 100755
index ebc7457..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_mo.gif
deleted file mode 100755
index 1c7ca08..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_p.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_p.gif
deleted file mode 100755
index eb41284..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall.gif
deleted file mode 100755
index d78b867..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_d.gif
deleted file mode 100755
index 13658f7..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_mo.gif
deleted file mode 100755
index 90b576e..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg.gif
deleted file mode 100755
index 9aebb03..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_d.gif
deleted file mode 100755
index 4ab4992..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_mo.gif
deleted file mode 100755
index 7025d20..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml.gif
deleted file mode 100755
index 4542432..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_d.gif
deleted file mode 100755
index 8d3a68d..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_mo.gif
deleted file mode 100755
index 15e0aed..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reject.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reject.gif
deleted file mode 100755
index 5565cd6..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_reject.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reject_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reject_d.gif
deleted file mode 100755
index 6c09fae..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_reject_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_right.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_right.gif
deleted file mode 100755
index fdf2d8b..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart.gif
deleted file mode 100755
index e49fbd7..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart_d.gif
deleted file mode 100755
index a5d6d7c..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_running.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_running.gif
deleted file mode 100644
index 543fd56..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_running.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start.gif
deleted file mode 100755
index 09bb58f..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start_d.gif
deleted file mode 100755
index f58f111..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_status.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_status.gif
deleted file mode 100644
index a93bcfb..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_status.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop.gif
deleted file mode 100755
index 922addc..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop_d.gif
deleted file mode 100755
index b4cfdea..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stopped.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stopped.gif
deleted file mode 100644
index f93a25d..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stopped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_services_restart_mo.gif
deleted file mode 100755
index a092b40..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_services_restart_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_services_start_mo.gif
deleted file mode 100755
index ecdb58f..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_services_start_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_services_stop_mo.gif
deleted file mode 100755
index c00e208..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_services_stop_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group-grey.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group-grey.png
deleted file mode 100755
index d7b964d..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group.png
deleted file mode 100755
index 1c974f2..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user-grey.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user-grey.png
deleted file mode 100755
index 2f6047d..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user.png
deleted file mode 100755
index ef82156..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_system_lock_screen.png
deleted file mode 100755
index 30f306d..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_system_lock_screen.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_system_logout.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_system_logout.png
deleted file mode 100755
index 9bbb6c7..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_system_logout.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped.gif
deleted file mode 100755
index ffeb2cd..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped_p.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped_p.gif
deleted file mode 100755
index 6d46aaf..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule.gif
deleted file mode 100755
index e15ab6c..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule_d.gif
deleted file mode 100755
index f776281..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_up.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_up.gif
deleted file mode 100755
index 883c5a2..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_up_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_up_d.gif
deleted file mode 100755
index 0ddcce2..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_up_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_up_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_up_mo.gif
deleted file mode 100755
index 9f869a4..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_up_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan.gif
deleted file mode 100755
index 1f0addc..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan_d.gif
deleted file mode 100755
index 35bf580..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_wol_all.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_wol_all.gif
deleted file mode 100755
index 2d22182..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_wol_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_nsaved.png
deleted file mode 100755
index 21cb27d..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_nsaved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_saved.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_saved.png
deleted file mode 100755
index ab82946..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_saved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_x.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_x.gif
deleted file mode 100755
index 24e4d49..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_x_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_x_d.gif
deleted file mode 100755
index d2bfbc8..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_x_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_x_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_x_mo.gif
deleted file mode 100755
index da7b57c..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_x_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_x_p.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_x_p.gif
deleted file mode 100755
index 8828fa6..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/icon_x_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/in.gif b/usr/local/www/themes/pfsense_ng/images/icons/in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/in_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/out.gif b/usr/local/www/themes/pfsense_ng/images/icons/out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/icons/out_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/pfsense_ng/images/icons/out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/log.png b/usr/local/www/themes/pfsense_ng/images/log.png
deleted file mode 100755
index 762ba80..0000000
--- a/usr/local/www/themes/pfsense_ng/images/log.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/logo.gif b/usr/local/www/themes/pfsense_ng/images/logo.gif
deleted file mode 100755
index e5da95c..0000000
--- a/usr/local/www/themes/pfsense_ng/images/logo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/logobig.jpg b/usr/local/www/themes/pfsense_ng/images/logobig.jpg
deleted file mode 100755
index 2ef196d..0000000
--- a/usr/local/www/themes/pfsense_ng/images/logobig.jpg
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/mainmenu-down.gif b/usr/local/www/themes/pfsense_ng/images/mainmenu-down.gif
deleted file mode 100755
index e59432a..0000000
--- a/usr/local/www/themes/pfsense_ng/images/mainmenu-down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/mainmenu-right.gif b/usr/local/www/themes/pfsense_ng/images/mainmenu-right.gif
deleted file mode 100755
index 14298a1..0000000
--- a/usr/local/www/themes/pfsense_ng/images/mainmenu-right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/mainmenuitem.gif b/usr/local/www/themes/pfsense_ng/images/mainmenuitem.gif
deleted file mode 100755
index 6e97478..0000000
--- a/usr/local/www/themes/pfsense_ng/images/mainmenuitem.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/menu-dot.gif b/usr/local/www/themes/pfsense_ng/images/menu-dot.gif
deleted file mode 100755
index c76609b..0000000
--- a/usr/local/www/themes/pfsense_ng/images/menu-dot.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/menu_footer.gif b/usr/local/www/themes/pfsense_ng/images/menu_footer.gif
deleted file mode 100755
index d06faa4..0000000
--- a/usr/local/www/themes/pfsense_ng/images/menu_footer.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/menu_right.gif b/usr/local/www/themes/pfsense_ng/images/menu_right.gif
deleted file mode 100755
index 881327c..0000000
--- a/usr/local/www/themes/pfsense_ng/images/menu_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/menubgr.png b/usr/local/www/themes/pfsense_ng/images/menubgr.png
deleted file mode 100755
index 45e0ec7..0000000
--- a/usr/local/www/themes/pfsense_ng/images/menubgr.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/menubgr_footer.png b/usr/local/www/themes/pfsense_ng/images/menubgr_footer.png
deleted file mode 100755
index fdff49f..0000000
--- a/usr/local/www/themes/pfsense_ng/images/menubgr_footer.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/menubgr_highlight.png b/usr/local/www/themes/pfsense_ng/images/menubgr_highlight.png
deleted file mode 100755
index 05f4832..0000000
--- a/usr/local/www/themes/pfsense_ng/images/menubgr_highlight.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/bar_blue.gif b/usr/local/www/themes/pfsense_ng/images/misc/bar_blue.gif
deleted file mode 100755
index 741186a..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/bar_blue.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/bar_gray.gif b/usr/local/www/themes/pfsense_ng/images/misc/bar_gray.gif
deleted file mode 100755
index e86e245..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/bar_gray.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/bar_left.gif b/usr/local/www/themes/pfsense_ng/images/misc/bar_left.gif
deleted file mode 100755
index af751fa..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/bar_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/bar_right.gif b/usr/local/www/themes/pfsense_ng/images/misc/bar_right.gif
deleted file mode 100755
index ff12d9e..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/bar_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_minus.png b/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_minus.png
deleted file mode 100755
index 37db2fd..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_minus.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_plus.png b/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_plus.png
deleted file mode 100755
index fba7af9..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_plus.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/button.gif b/usr/local/www/themes/pfsense_ng/images/misc/button.gif
deleted file mode 100755
index e85dbb3..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/button.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/graph.png b/usr/local/www/themes/pfsense_ng/images/misc/graph.png
deleted file mode 100755
index 507ec75..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/graph.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/key_128.gif b/usr/local/www/themes/pfsense_ng/images/misc/key_128.gif
deleted file mode 100755
index ea5ae34..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/key_128.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/key_152.gif b/usr/local/www/themes/pfsense_ng/images/misc/key_152.gif
deleted file mode 100755
index 6c7fc03..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/key_152.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/key_256.gif b/usr/local/www/themes/pfsense_ng/images/misc/key_256.gif
deleted file mode 100755
index 3e1c377..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/key_256.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/key_64.gif b/usr/local/www/themes/pfsense_ng/images/misc/key_64.gif
deleted file mode 100755
index 87892bd..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/key_64.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/left_background.gif b/usr/local/www/themes/pfsense_ng/images/misc/left_background.gif
deleted file mode 100755
index 529d827..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/left_background.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/loader.gif b/usr/local/www/themes/pfsense_ng/images/misc/loader.gif
deleted file mode 100755
index 5d10ac3..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/loader_all.gif b/usr/local/www/themes/pfsense_ng/images/misc/loader_all.gif
deleted file mode 100755
index cb6bc0c..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/loader_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/loader_filter.gif b/usr/local/www/themes/pfsense_ng/images/misc/loader_filter.gif
deleted file mode 100755
index b838b17..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/loader_filter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/loader_tab.gif b/usr/local/www/themes/pfsense_ng/images/misc/loader_tab.gif
deleted file mode 100755
index 05bb04c..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/loader_tab.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/logon.png b/usr/local/www/themes/pfsense_ng/images/misc/logon.png
deleted file mode 100755
index 98aa37a..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/logon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/progress_bar.gif b/usr/local/www/themes/pfsense_ng/images/misc/progress_bar.gif
deleted file mode 100755
index 3b4aa52..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/progress_bar.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/rrd_error.png b/usr/local/www/themes/pfsense_ng/images/misc/rrd_error.png
deleted file mode 100755
index a79ecf3..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/rrd_error.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/status_alerter.gif b/usr/local/www/themes/pfsense_ng/images/misc/status_alerter.gif
deleted file mode 100755
index 7ff1e95..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/status_alerter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/status_carpmaster.gif b/usr/local/www/themes/pfsense_ng/images/misc/status_carpmaster.gif
deleted file mode 100755
index 2c32908..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/status_carpmaster.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/status_left.gif b/usr/local/www/themes/pfsense_ng/images/misc/status_left.gif
deleted file mode 100755
index b5a2930..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/status_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/status_page_loading.gif b/usr/local/www/themes/pfsense_ng/images/misc/status_page_loading.gif
deleted file mode 100755
index 067ef18..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/status_page_loading.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/status_reload_all.gif b/usr/local/www/themes/pfsense_ng/images/misc/status_reload_all.gif
deleted file mode 100755
index 72de6bd..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/status_reload_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/status_reload_filter.gif b/usr/local/www/themes/pfsense_ng/images/misc/status_reload_filter.gif
deleted file mode 100755
index d72761a..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/status_reload_filter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/status_right.gif b/usr/local/www/themes/pfsense_ng/images/misc/status_right.gif
deleted file mode 100755
index bf66fdb..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/status_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/tri_c.gif b/usr/local/www/themes/pfsense_ng/images/misc/tri_c.gif
deleted file mode 100755
index 317b758..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/tri_c.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/tri_c_black.gif b/usr/local/www/themes/pfsense_ng/images/misc/tri_c_black.gif
deleted file mode 100755
index 309846e..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/tri_c_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/tri_o.gif b/usr/local/www/themes/pfsense_ng/images/misc/tri_o.gif
deleted file mode 100755
index eb95c32..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/tri_o.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/tri_o_black.gif b/usr/local/www/themes/pfsense_ng/images/misc/tri_o_black.gif
deleted file mode 100755
index f818f3b..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/tri_o_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/misc/widget_loader.gif b/usr/local/www/themes/pfsense_ng/images/misc/widget_loader.gif
deleted file mode 100755
index ca35e2a..0000000
--- a/usr/local/www/themes/pfsense_ng/images/misc/widget_loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/new_tab_menu.png b/usr/local/www/themes/pfsense_ng/images/new_tab_menu.png
deleted file mode 100755
index 4bdfcef..0000000
--- a/usr/local/www/themes/pfsense_ng/images/new_tab_menu.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/status.png b/usr/local/www/themes/pfsense_ng/images/status.png
deleted file mode 100755
index a3e368e..0000000
--- a/usr/local/www/themes/pfsense_ng/images/status.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/transparent.gif b/usr/local/www/themes/pfsense_ng/images/transparent.gif
deleted file mode 100755
index 89c5530..0000000
--- a/usr/local/www/themes/pfsense_ng/images/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/images/transparent_pixel.gif b/usr/local/www/themes/pfsense_ng/images/transparent_pixel.gif
deleted file mode 100755
index 35d42e8..0000000
--- a/usr/local/www/themes/pfsense_ng/images/transparent_pixel.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/blank.gif b/usr/local/www/themes/pfsense_ng/javascript/ie7/blank.gif
deleted file mode 100755
index a4fe2e6..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/blank.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-box-model.js
deleted file mode 100644
index 45543f6..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-box-model.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-core.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-core.js
deleted file mode 100644
index b11e2b1..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-core.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css-strict.js
deleted file mode 100644
index 4406d7a..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css-strict.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css2.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css2.js
deleted file mode 100644
index 7121c8e..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css2.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css3.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css3.js
deleted file mode 100644
index 86b24f5..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css3.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-fixed.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-fixed.js
deleted file mode 100644
index 4321cda..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-fixed.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-html4.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-html4.js
deleted file mode 100644
index 4d2baa9..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-html4.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-ie5.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-ie5.js
deleted file mode 100644
index 707fa56..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-ie5.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite-p.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite-p.js
deleted file mode 100644
index dd62a21..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í></Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite.js
deleted file mode 100644
index 88c764f..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-png.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-png.js
deleted file mode 100644
index 7b8f2cf..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-png.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-server.css b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-server.css
deleted file mode 100644
index 47c7edd..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-server.css
+++ /dev/null
@@ -1,43 +0,0 @@
-body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
-body {margin: 8px; background: #333;}
-h1 {margin: 0;}
-h1 a:hover {background-color: transparent;}
-h2 {font-size: 1.75em;}
-h3 {font-size: 1.1em;}
-a:active {color: #ff0000;}
-a:link {color: #0a6cce;}
-a:visited {color: #0a6cce;}
-code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
- padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
-code.box {display: block; padding: 10px; margin: 0.5em 0;}
-ul {list-style-type: square;}
-dd {margin: .2em 0 .5em 1em;}
-dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
-dl.library dd {font-style: italic; margin-left: 3em;}
-dt {font-weight: bold;}
-dt.pack {color: brown;}
-a img {border-style: none;}
-hr {height: 1px; color: #000; border-style: solid;}
-hr.short {height: 2px; width: 100px;}
-div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
-hr {border-bottom-width: 0px;}
-div.header hr {color: #0a6cce; background-color: #0a6cce;}
-div.content {min-height: 100px;}
-div.footer hr {color: #898e79; background-color: #898e79; }
-div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
-a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
-div.footer a:hover {background-color: transparent; text-decoration: none;}
-div.header .menu {text-align: right;}
-div.footer {font-size: x-small; margin-top: 8px;}
-div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
-#license {margin-top: 5px; font-size: xx-small;}
-table {border-top: 1px solid #000; border-left: 1px solid #000;}
-th {background-color: #fff; text-align: left;}
-th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
-th.small {width: 100px;}
-th.medium {width: 200px;}
-th.large {width: 270px;}
-th.x-large {width: 408px;}
-table.fixed {table-layout: fixed;}
-span.comment {color: #666;}
-
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js
deleted file mode 100644
index 73e99ac..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì></Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard.js
deleted file mode 100644
index 2109905..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/test-trans.png b/usr/local/www/themes/pfsense_ng/javascript/ie7/test-trans.png
deleted file mode 100755
index e187e2c..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/ie7/test-trans.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/javascript/img/grey-40.png b/usr/local/www/themes/pfsense_ng/javascript/img/grey-40.png
deleted file mode 100755
index 758b716..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/img/grey-40.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/javascript/img/submenu-off.gif b/usr/local/www/themes/pfsense_ng/javascript/img/submenu-off.gif
deleted file mode 100755
index ddcdcae..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/img/submenu-off.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/javascript/img/submenu-on.gif b/usr/local/www/themes/pfsense_ng/javascript/img/submenu-on.gif
deleted file mode 100755
index 7a58077..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/img/submenu-on.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/javascript/img/white-90.png b/usr/local/www/themes/pfsense_ng/javascript/img/white-90.png
deleted file mode 100755
index efc84b4..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/img/white-90.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/javascript/img/x.gif b/usr/local/www/themes/pfsense_ng/javascript/img/x.gif
deleted file mode 100755
index 5bfd67a..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/img/x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng/javascript/niftyjsCode.js b/usr/local/www/themes/pfsense_ng/javascript/niftyjsCode.js
deleted file mode 100644
index e71ea14..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/niftyjsCode.js
+++ /dev/null
@@ -1,174 +0,0 @@
-function NiftyCheck(){
-if(!document.getElementById || !document.createElement)
- return(false);
-isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
-if(Array.prototype.push==null){Array.prototype.push=function(){
- this[this.length]=arguments[0]; return(this.length);};}
-return(true);
-}
-
-function Rounded(selector,wich,bk,color,opt){
-var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
-
-if(color=="transparent"){
- cn=cn+"x";
- ecolor=bk;
- bk="transparent";
- }
-else if(opt && opt.indexOf("border")>=0){
- var optar=opt.split(" ");
- for(i=0;i<optar.length;i++)
- if(optar[i].indexOf("#")>=0) ecolor=optar[i];
- if(ecolor=="") ecolor="#666";
- cn+="e";
- edges=true;
- }
-else if(opt && opt.indexOf("smooth")>=0){
- cn+="a";
- ecolor=Mix(bk,color);
- }
-if(opt && opt.indexOf("small")>=0) cn+="s";
-prefixt=cn;
-prefixb=cn;
-if(wich.indexOf("all")>=0){t=true;b=true;}
-else if(wich.indexOf("top")>=0) t="true";
-else if(wich.indexOf("tl")>=0){
- t="true";
- if(wich.indexOf("tr")<0) prefixt+="l";
- }
-else if(wich.indexOf("tr")>=0){
- t="true";
- prefixt+="r";
- }
-if(wich.indexOf("bottom")>=0) b=true;
-else if(wich.indexOf("bl")>=0){
- b="true";
- if(wich.indexOf("br")<0) prefixb+="l";
- }
-else if(wich.indexOf("br")>=0){
- b="true";
- prefixb+="r";
- }
-var v=getElementsBySelector(selector);
-var l=v.length;
-for(i=0;i<l;i++){
- if(edges) AddBorder(v[i],ecolor);
- if(t) AddTop(v[i],bk,color,ecolor,prefixt);
- if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
- }
-}
-
-function AddBorder(el,bc){
-var i;
-if(!el.passed){
- if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
- var t=el.firstChild.nodeValue;
- el.removeChild(el.lastChild);
- var d=CreateEl("span");
- d.style.display="block";
- d.appendChild(document.createTextNode(t));
- el.appendChild(d);
- }
- for(i=0;i<el.childNodes.length;i++){
- if(el.childNodes[i].nodeType==1){
- el.childNodes[i].style.borderLeft="1px solid "+bc;
- el.childNodes[i].style.borderRight="1px solid "+bc;
- }
- }
- }
-el.passed=true;
-}
-
-function AddTop(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=1;i<=lim;i++){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingTop=0;
-el.insertBefore(d,el.firstChild);
-}
-
-function AddBottom(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=lim;i>0;i--){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingBottom=0;
-el.appendChild(d);
-}
-
-function CreateEl(x){
-if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
-else return(document.createElement(x));
-}
-
-function getElementsBySelector(selector){
-var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
-
-if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
- s=selector.split(" ");
- var fs=s[0].split("#");
- if(fs.length==1) return(objlist);
- f=document.getElementById(fs[1]);
- if(f) return(f.getElementsByTagName(s[1]));
- return(objlist);
- }
-if(selector.indexOf("#")>0){ //id selector like "tag#id"
- s=selector.split("#");
- tag=s[0];
- selid=s[1];
- }
-if(selid!=""){
- f=document.getElementById(selid);
- if(f) objlist.push(f);
- return(objlist);
- }
-if(selector.indexOf(".")>0){ //class selector like "tag.class"
- s=selector.split(".");
- tag=s[0];
- selclass=s[1];
- }
-var v=document.getElementsByTagName(tag); // tag selector like "tag"
-if(selclass=="")
- return(v);
-for(i=0;i<v.length;i++){
- if(v[i].className.indexOf(selclass)>=0){
- objlist.push(v[i]);
- }
- }
-return(objlist);
-}
-
-function Mix(c1,c2){
-var i,step1,step2,x,y,r=new Array(3);
-if(c1.length==4)step1=1;
-else step1=2;
-if(c2.length==4) step2=1;
-else step2=2;
-for(i=0;i<3;i++){
- x=parseInt(c1.substr(1+step1*i,step1),16);
- if(step1==1) x=16*x+x;
- y=parseInt(c2.substr(1+step2*i,step2),16);
- if(step2==1) y=16*y+y;
- r[i]=Math.floor((x*50+y*50)/100);
- }
-return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
-} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng/javascript/transmenu-body.php b/usr/local/www/themes/pfsense_ng/javascript/transmenu-body.php
deleted file mode 100644
index afb7090..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/transmenu-body.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/* $Id: transmenu-body.php,v 1.1.2.1 2007/01/17 18:43:47 sullrich Exp $ */
-/* ========================================================================== */
-/*
- transmenu-body.php
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-function nervecenterTransmenuGetBodyJS() {
- global $rootmenu;
-
- if (isset($rootmenu)) {
- return $rootmenu->getMenuJScript();
- } else if (empty($rootmenu)) {
- return "alert('No rootmenu object found.');";
- } else {
- return "alert('No JavaScript attached to rootmenu object.');";
- }
-}
-
-?>
diff --git a/usr/local/www/themes/pfsense_ng/javascript/transmenu-head.php b/usr/local/www/themes/pfsense_ng/javascript/transmenu-head.php
deleted file mode 100644
index afc6402..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/transmenu-head.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-/* $Id: transmenu-head.php,v 1.2.2.1 2007/01/17 18:43:47 sullrich Exp $ */
-/* ========================================================================== */
-/*
- transmenu-head.php
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-function nervecenterTransmenuGetHeadJS() {
- global $g, $rootmenu;
-
- $transmenu_stub =<<<EOD
- function tmenuinit() {
- //==========================================================================================
- // if supported, initialize TransMenus
- //==========================================================================================
- // Check isSupported() so that menus aren't accidentally sent to non-supporting browsers.
- // This is better than server-side checking because it will also catch browsers which would
- // normally support the menus but have javascript disabled.
- //
- // If supported, call initialize() and then hook whatever image rollover code you need to do
- // to the .onactivate and .ondeactivate events for each menu.
- //==========================================================================================
- if (TransMenu.isSupported()) {
- TransMenu.initialize();
-
- // hook all the highlight swapping of the main toolbar to menu activation/deactivation
- // instead of simple rollover to get the effect where the button stays hightlit until
- // the menu is closed.
- @@CHILD_JSCRIPT@@
- }
- } // end function
-EOD;
-
- if (empty($rootmenu)) {
- require_once("menudef.inc");
- }
-
- $childJScript = "";
- foreach ($rootmenu->getChildren() as $component) {
- $id = "mnua_" . str_replace(" ", "", strtolower($component->getID()));
-
- $childJScript .=<<<EOD
- {$id}.onactivate = function() { document.getElementById("{$id}").className = "hover"; };
- {$id}.ondeactivate = function() { document.getElementById("{$id}").className = ""; };
-
-EOD;
- }
-
- $transmenu_stub = basename($_SERVER['PHP_SELF']) != "wizard.php" ? str_replace("@@CHILD_JSCRIPT@@", $childJScript, $transmenu_stub) : "";
-
- return $transmenu_stub;
-}
-
-?>
diff --git a/usr/local/www/themes/pfsense_ng/javascript/transmenu.org b/usr/local/www/themes/pfsense_ng/javascript/transmenu.org
deleted file mode 100644
index 6c9e353..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/transmenu.org
+++ /dev/null
@@ -1,785 +0,0 @@
-/* =================================================================================================
- * TransMenu
- * March, 2003
- *
- * Customizable multi-level animated DHTML menus with transparency.
- *
- * Copyright 2003-2004, Aaron Boodman (www.youngpup.net)
- * =================================================================================================
- * "Can I use this?"
- *
- * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
- * out at: http://creativecommons.org/licenses/by/2.0/
- *
- * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
- * for writing it. You may not misrepresent yourself as the author of this code.
- * =================================================================================================
- * "It's kinda hard to read, though"
- *
- * The uncompressed, commented version of this script can be found at:
- * http://youngpup.net/projects/transMenus
- * =================================================================================================
- * updates:
- * 04.19.04 fixed cascade problem with menus nested greater than two levels.
- * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu.
- * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;)
- * also made gecko check a little more strict by specifying build no.
- * ============================================================================================== */
-
-
-
-//==================================================================================================
-// Configuration properties
-//==================================================================================================
-TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif
-TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat
-TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat
-TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed)
-TransMenu.menuPadding = 5; // padding between menu border and items grid
-TransMenu.itemPadding = 3; // additional padding around each item
-TransMenu.shadowSize = 2; // size of shadow under menu
-TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge
-TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS)
-TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5
-TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS)
-TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5
-TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu
-TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu
-
-
-//==================================================================================================
-// Internal use properties
-//==================================================================================================
-TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};
-TransMenu.direction = {down:1,right:2};
-TransMenu.registry = [];
-TransMenu._maxZ = 100;
-
-
-
-//==================================================================================================
-// Static methods
-//==================================================================================================
-// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0
-TransMenu.isSupported = function() {
- var ua = navigator.userAgent.toLowerCase();
- var pf = navigator.platform.toLowerCase();
- var an = navigator.appName;
- var r = false;
-
- if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0
- else if (an == "Microsoft Internet Explorer") {
- if (document.getElementById) { // ie5.1+ mac,win
- if (pf.indexOf("mac") == 0) {
- r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1;
- }
- else r = true;
- }
- }
-
- return r;
-}
-
-// call this in onload once menus have been created
-TransMenu.initialize = function() {
- for (var i = 0, menu = null; menu = this.registry[i]; i++) {
- menu.initialize();
- }
-}
-
-// call this in document body to write out menu html
-TransMenu.renderAll = function() {
- var aMenuHtml = [];
- for (var i = 0, menu = null; menu = this.registry[i]; i++) {
- aMenuHtml[i] = menu.toString();
- }
- document.write(aMenuHtml.join(""));
-}
-
-//==================================================================================================
-// TransMenu constructor (only called internally)
-//==================================================================================================
-// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a
-// reference to an HTML element, or a TransMenuItem from an existing menu.
-// iDirection : The direction to slide out. One of TransMenu.direction.
-// iLeft : Left pixel offset of menu from actuator
-// iTop : Top pixel offset of menu from actuator
-// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
-// parentMenuSet : Menuset this menu will be added to.
-//==================================================================================================
-function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) {
- // public methods
- this.addItem = addItem;
- this.addMenu = addMenu;
- this.toString = toString;
- this.initialize = initialize;
- this.isOpen = false;
- this.show = show;
- this.hide = hide;
- this.items = [];
-
- // events
- this.onactivate = new Function(); // when the menu starts to slide open
- this.ondeactivate = new Function(); // when the menu finishes sliding closed
- this.onmouseover = new Function(); // when the menu has been moused over
- this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future
- this.ondequeue = new Function();
-
- // initialization
- this.index = TransMenu.registry.length;
- TransMenu.registry[this.index] = this;
-
- var id = "TransMenu" + this.index;
- var contentHeight = null;
- var contentWidth = null;
- var childMenuSet = null;
- var animating = false;
- var childMenus = [];
- var slideAccel = -1;
- var elmCache = null;
- var ready = false;
- var _this = this;
- var a = null;
-
- var pos = iDirection == TransMenu.direction.down ? "top" : "left";
- var dim = null;
-
- // private and public method implimentations
- function addItem(sText, sUrl) {
- var item = new TransMenuItem(sText, sUrl, this);
- item._index = this.items.length;
- this.items[item._index] = item;
- }
-
- function addMenu(oMenuItem) {
- if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here");
-
- if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight);
-
- var m = childMenuSet.addMenu(oMenuItem);
-
- childMenus[oMenuItem._index] = m;
- m.onmouseover = child_mouseover;
- m.ondeactivate = child_deactivate;
- m.onqueue = child_queue;
- m.ondequeue = child_dequeue;
-
- return m;
- }
-
- function initialize() {
- initCache();
- initEvents();
- initSize();
- ready = true;
- }
-
- function show() {
- //dbg_dump("show");
- if (ready) {
- _this.isOpen = true;
- animating = true;
- setContainerPos();
- elmCache["clip"].style.visibility = "visible";
- elmCache["clip"].style.zIndex = TransMenu._maxZ++;
- //dbg_dump("maxZ: " + TransMenu._maxZ);
- slideStart();
- _this.onactivate();
- }
- }
-
- function hide() {
- if (ready) {
- _this.isOpen = false;
- animating = true;
-
- for (var i = 0, item = null; item = elmCache.item[i]; i++)
- dehighlight(item);
-
- if (childMenuSet) childMenuSet.hide();
-
- slideStart();
- _this.ondeactivate();
- }
- }
-
- function setContainerPos() {
- var sub = oActuator.constructor == TransMenuItem;
- var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator;
- var el = act;
-
- var x = 0;
- var y = 0;
-
-
- var minX = 0;
- var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width);
- var minY = 0;
- var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height);
-
- // add up all offsets... subtract any scroll offset
- while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) {
- x += el.offsetLeft;
- y += el.offsetTop;
-
- if (el.scrollLeft) x -= el.scrollLeft;
- if (el.scrollTop) y -= el.scrollTop;
-
- el = el.offsetParent;
- }
-
- if (oActuator.constructor == TransMenuItem) {
- x += parseInt(el.parentNode.style.left);
- y += parseInt(el.parentNode.style.top);
- }
-
- switch (iReferencePoint) {
- case TransMenu.reference.topLeft:
- break;
- case TransMenu.reference.topRight:
- x += act.offsetWidth;
- break;
- case TransMenu.reference.bottomLeft:
- y += act.offsetHeight;
- break;
- case TransMenu.reference.bottomRight:
- x += act.offsetWidth;
- y += act.offsetHeight;
- break;
- }
-
- x += iLeft;
- y += iTop;
-
- x = Math.max(Math.min(x, maxX), minX);
- y = Math.max(Math.min(y, maxY), minY);
-
- elmCache["clip"].style.left = x + "px";
- elmCache["clip"].style.top = y + "px";
- }
-
- function slideStart() {
- var x0 = parseInt(elmCache["content"].style[pos]);
- var x1 = _this.isOpen ? 0 : -dim;
-
- if (a != null) a.stop();
- a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel);
-
- a.onframe = slideFrame;
- a.onend = slideEnd;
-
- a.start();
- }
-
- function slideFrame(x) {
- elmCache["content"].style[pos] = x + "px";
- }
-
- function slideEnd() {
- if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden";
- animating = false;
- }
-
- function initSize() {
- // everything is based off the size of the items table...
- var ow = elmCache["items"].offsetWidth;
- var oh = elmCache["items"].offsetHeight;
- var ua = navigator.userAgent.toLowerCase();
-
- // clipping container should be ow/oh + the size of the shadow
- elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px";
- elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px";
-
- // same with content...
- elmCache["content"].style.width = ow + TransMenu.shadowSize + "px";
- elmCache["content"].style.height = oh + TransMenu.shadowSize + "px";
-
- contentHeight = oh + TransMenu.shadowSize;
- contentWidth = ow + TransMenu.shadowSize;
-
- dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth;
-
- // set initially closed
- elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px";
- elmCache["clip"].style.visibility = "hidden";
-
- // if *not* mac/ie 5
- if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) {
- // set background div to offset size
- elmCache["background"].style.width = ow + "px";
- elmCache["background"].style.height = oh + "px";
- elmCache["background"].style.backgroundColor = TransMenu.backgroundColor;
-
- // shadow left starts at offset left and is offsetHeight pixels high
- elmCache["shadowRight"].style.left = ow + "px";
- elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px";
- elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor;
-
- // shadow bottom starts at offset height and is offsetWidth - shadowOffset
- // pixels wide (we don't want the bottom and right shadows to overlap or we
- // get an extra bright bottom-right corner)
- elmCache["shadowBottom"].style.top = oh + "px";
- elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px";
- elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor;
- }
- // mac ie is a little different because we use a PNG for the transparency
- else {
- // set background div to offset size
- elmCache["background"].firstChild.src = TransMenu.backgroundPng;
- elmCache["background"].firstChild.width = ow;
- elmCache["background"].firstChild.height = oh;
-
- // shadow left starts at offset left and is offsetHeight pixels high
- elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng;
- elmCache["shadowRight"].style.left = ow + "px";
- elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize;
- elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize);
-
- // shadow bottom starts at offset height and is offsetWidth - shadowOffset
- // pixels wide (we don't want the bottom and right shadows to overlap or we
- // get an extra bright bottom-right corner)
- elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng;
- elmCache["shadowBottom"].style.top = oh + "px";
- elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize;
- elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset;
- }
- }
-
- function initCache() {
- var menu = document.getElementById(id);
- var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing
-
- elmCache = {};
- elmCache["clip"] = menu;
- elmCache["item"] = [];
-
- for (var i = 0, elm = null; elm = all[i]; i++) {
- switch (elm.className) {
- case "items":
- case "content":
- case "background":
- case "shadowRight":
- case "shadowBottom":
- elmCache[elm.className] = elm;
- break;
- case "item":
- elm._index = elmCache["item"].length;
- elmCache["item"][elm._index] = elm;
- break;
- }
- }
-
- // hack!
- _this.elmCache = elmCache;
- }
-
- function initEvents() {
- // hook item mouseover
- for (var i = 0, item = null; item = elmCache.item[i]; i++) {
- item.onmouseover = item_mouseover;
- item.onmouseout = item_mouseout;
- item.onclick = item_click;
- }
-
- // hook actuation
- if (typeof oActuator.tagName != "undefined") {
- oActuator.onmouseover = actuator_mouseover;
- oActuator.onmouseout = actuator_mouseout;
- }
-
- // hook menu mouseover
- elmCache["content"].onmouseover = content_mouseover;
- elmCache["content"].onmouseout = content_mouseout;
- }
-
- function highlight(oRow) {
- oRow.className = "item hover";
- if (childMenus[oRow._index])
- oRow.lastChild.firstChild.src = TransMenu.dingbatOn;
- }
-
- function dehighlight(oRow) {
- oRow.className = "item";
- if (childMenus[oRow._index])
- oRow.lastChild.firstChild.src = TransMenu.dingbatOff;
- }
-
- function item_mouseover() {
- if (!animating) {
- highlight(this);
-
- if (childMenus[this._index])
- childMenuSet.showMenu(childMenus[this._index]);
- else if (childMenuSet) childMenuSet.hide();
- }
- }
-
- function item_mouseout() {
- if (!animating) {
- if (childMenus[this._index])
- childMenuSet.hideMenu(childMenus[this._index]);
- else // otherwise child_deactivate will do this
- dehighlight(this);
- }
- }
-
- function item_click() {
- if (!animating) {
- if (_this.items[this._index].url)
- location.href = _this.items[this._index].url;
- }
- }
-
- function actuator_mouseover() {
- parentMenuSet.showMenu(_this);
- }
-
- function actuator_mouseout() {
- parentMenuSet.hideMenu(_this);
- }
-
- function content_mouseover() {
- if (!animating) {
- parentMenuSet.showMenu(_this);
- _this.onmouseover();
- }
- }
-
- function content_mouseout() {
- if (!animating) {
- parentMenuSet.hideMenu(_this);
- }
- }
-
- function child_mouseover() {
- if (!animating) {
- parentMenuSet.showMenu(_this);
- }
- }
-
- function child_deactivate() {
- for (var i = 0; i < childMenus.length; i++) {
- if (childMenus[i] == this) {
- dehighlight(elmCache["item"][i]);
- break;
- }
- }
- }
-
- function child_queue() {
- parentMenuSet.hideMenu(_this);
- }
-
- function child_dequeue() {
- parentMenuSet.showMenu(_this);
- }
-
- function toString() {
- var aHtml = [];
- var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : "");
-
- for (var i = 0, item = null; item = this.items[i]; i++) {
- aHtml[i] = item.toString(childMenus[i]);
- }
-
- return '<div id="' + id + '" class="' + sClassName + '">' +
- '<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">' +
- '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr>' +
- aHtml.join('') +
- '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr></table>' +
- '<div class="shadowBottom"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '<div class="shadowRight"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '<div class="background"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '</div></div>';
- }
-}
-
-
-//==================================================================================================
-// TransMenuSet
-//==================================================================================================
-// iDirection : The direction to slide out. One of TransMenu.direction.
-// iLeft : Left pixel offset of menus from actuator
-// iTop : Top pixel offset of menus from actuator
-// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
-//==================================================================================================
-TransMenuSet.registry = [];
-
-function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) {
- // public methods
- this.addMenu = addMenu;
- this.showMenu = showMenu;
- this.hideMenu = hideMenu;
- this.hide = hide;
- this.hideCurrent = hideCurrent;
-
- // initialization
- var menus = [];
- var _this = this;
- var current = null;
-
- this.index = TransMenuSet.registry.length;
- TransMenuSet.registry[this.index] = this;
-
- // method implimentations...
- function addMenu(oActuator) {
- var m = new TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, this);
- menus[menus.length] = m;
- return m;
- }
-
- function showMenu(oMenu) {
- if (oMenu != current) {
- // close currently open menu
- if (current != null) hide(current);
-
- // set current menu to this one
- current = oMenu;
-
- // if this menu is closed, open it
- oMenu.show();
- }
- else {
- // hide pending calls to close this menu
- cancelHide(oMenu);
- }
- }
-
- function hideMenu(oMenu) {
- //dbg_dump("hideMenu a " + oMenu.index);
- if (current == oMenu && oMenu.isOpen) {
- //dbg_dump("hideMenu b " + oMenu.index);
- if (!oMenu.hideTimer) scheduleHide(oMenu);
- }
- }
-
- function scheduleHide(oMenu) {
- //dbg_dump("scheduleHide " + oMenu.index);
- oMenu.onqueue();
- oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay);
- }
-
- function cancelHide(oMenu) {
- //dbg_dump("cancelHide " + oMenu.index);
- if (oMenu.hideTimer) {
- oMenu.ondequeue();
- window.clearTimeout(oMenu.hideTimer);
- oMenu.hideTimer = null;
- }
- }
-
- function hide(oMenu) {
- if (!oMenu && current) oMenu = current;
-
- if (oMenu && current == oMenu && oMenu.isOpen) {
- hideCurrent();
- }
- }
-
- function hideCurrent() {
- if (null != current) {
- cancelHide(current);
- current.hideTimer = null;
- current.hide();
- current = null;
- }
- }
-}
-
-//==================================================================================================
-// TransMenuItem (internal)
-// represents an item in a dropdown
-//==================================================================================================
-// sText : The item display text
-// sUrl : URL to load when the item is clicked
-// oParent : Menu this item is a part of
-//==================================================================================================
-function TransMenuItem(sText, sUrl, oParent) {
- this.toString = toString;
- this.text = sText;
- this.url = sUrl;
- this.parentMenu = oParent;
-
- function toString(bDingbat) {
- var sDingbat = bDingbat ? TransMenu.dingbatOff : TransMenu.spacerGif;
- var iEdgePadding = TransMenu.itemPadding + TransMenu.menuPadding;
- var sPaddingLeft = "padding:" + TransMenu.itemPadding + "px; padding-left:" + iEdgePadding + "px;"
- var sPaddingRight = "padding:" + TransMenu.itemPadding + "px; padding-right:" + iEdgePadding + "px;"
-
- return '<tr class="item"><td nowrap style="' + sPaddingLeft + '">' +
- sText + '</td><td width="14" style="' + sPaddingRight + '">' +
- '<img src="' + sDingbat + '" width="14" height="14"></td></tr>';
- }
-}
-
-
-
-
-
-
-//=====================================================================
-// Accel[erated] [an]imation object
-// change a property of an object over time in an accelerated fashion
-//=====================================================================
-// obj : reference to the object whose property you'd like to animate
-// prop : property you would like to change eg: "left"
-// to : final value of prop
-// time : time the animation should take to run
-// zip : optional. specify the zippiness of the acceleration. pick a
-// number between -1 and 1 where -1 is full decelerated, 1 is
-// full accelerated, and 0 is linear (no acceleration). default
-// is 0.
-// unit : optional. specify the units for use with prop. default is
-// "px".
-//=====================================================================
-// bezier functions lifted from the lib_animation.js file in the
-// 13th Parallel API. www.13thparallel.org
-//=====================================================================
-
-function Accelimation(from, to, time, zip) {
- if (typeof zip == "undefined") zip = 0;
- if (typeof unit == "undefined") unit = "px";
-
- this.x0 = from;
- this.x1 = to;
- this.dt = time;
- this.zip = -zip;
- this.unit = unit;
- this.timer = null;
- this.onend = new Function();
- this.onframe = new Function();
-}
-
-
-
-//=====================================================================
-// public methods
-//=====================================================================
-
-// after you create an accelimation, you call this to start it-a runnin'
-Accelimation.prototype.start = function() {
- this.t0 = new Date().getTime();
- this.t1 = this.t0 + this.dt;
- var dx = this.x1 - this.x0;
- this.c1 = this.x0 + ((1 + this.zip) * dx / 3);
- this.c2 = this.x0 + ((2 + this.zip) * dx / 3);
- Accelimation._add(this);
-}
-
-// and if you need to stop it early for some reason...
-Accelimation.prototype.stop = function() {
- Accelimation._remove(this);
-}
-
-
-
-//=====================================================================
-// private methods
-//=====================================================================
-
-// paints one frame. gets called by Accelimation._paintAll.
-Accelimation.prototype._paint = function(time) {
- if (time < this.t1) {
- var elapsed = time - this.t0;
- this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));
- }
- else this._end();
-}
-
-// ends the animation
-Accelimation.prototype._end = function() {
- Accelimation._remove(this);
- this.onframe(this.x1);
- this.onend();
-}
-
-
-
-
-//=====================================================================
-// static methods (all private)
-//=====================================================================
-
-// add a function to the list of ones to call periodically
-Accelimation._add = function(o) {
- var index = this.instances.length;
- this.instances[index] = o;
- // if this is the first one, start the engine
- if (this.instances.length == 1) {
- this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes);
- }
-}
-
-// remove a function from the list
-Accelimation._remove = function(o) {
- for (var i = 0; i < this.instances.length; i++) {
- if (o == this.instances[i]) {
- this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) );
- break;
- }
- }
- // if that was the last one, stop the engine
- if (this.instances.length == 0) {
- window.clearInterval(this.timerID);
- this.timerID = null;
- }
-}
-
-// "engine" - call each function in the list every so often
-Accelimation._paintAll = function() {
- var now = new Date().getTime();
- for (var i = 0; i < this.instances.length; i++) {
- this.instances[i]._paint(now);
- }
-}
-
-
-// Bezier functions:
-Accelimation._B1 = function(t) { return t*t*t }
-Accelimation._B2 = function(t) { return 3*t*t*(1-t) }
-Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) }
-Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) }
-
-
-//Finds the coordinates of a point at a certain stage through a bezier curve
-Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) {
- return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent);
-}
-
-
-//=====================================================================
-// static properties
-//=====================================================================
-
-Accelimation.instances = [];
-Accelimation.targetRes = 10;
-Accelimation.timerID = null;
-
-
-//=====================================================================
-// IE win memory cleanup
-//=====================================================================
-
-if (window.attachEvent) {
- var cearElementProps = [
- 'data',
- 'onmouseover',
- 'onmouseout',
- 'onmousedown',
- 'onmouseup',
- 'ondblclick',
- 'onclick',
- 'onselectstart',
- 'oncontextmenu'
- ];
-
- window.attachEvent("onunload", function() {
- var el;
- for(var d = document.all.length;d--;){
- el = document.all[d];
- for(var c = cearElementProps.length;c--;){
- el[cearElementProps[c]] = null;
- }
- }
- });
-} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng/javascript/transmenuC.js b/usr/local/www/themes/pfsense_ng/javascript/transmenuC.js
deleted file mode 100644
index 88626c7..0000000
--- a/usr/local/www/themes/pfsense_ng/javascript/transmenuC.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/* =================================================================================================
- * TransMenu
- * March, 2003
- * Customizable multi-level animated DHTML menus with transparency.
- * =================================================================================================
- * "Can I use this?"
- *
- * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
- * out at: http://creativecommons.org/licenses/by/2.0/
- *
- * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
- * for writing it. You may not misrepresent yourself as the author of this code.
- * =================================================================================================
- * "It's kinda hard to read, though"
- *
- * The uncompressed, commented version of this script can be found at:
- * http://youngpup.net/projects/transMenus
- * ============================================================================================== */
-TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;}
-else r=true;}}
-return r;}
-TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}}
-TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();}
-document.write(aMenuHtml.join(""));}
-function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;}
-function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;}
-function initialize(){initCache();initEvents();initSize();ready=true;}
-function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}}
-function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}}
-function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;}
-if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);}
-switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;}
-x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";}
-function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();}
-function slideFrame(x){elmCache["content"].style[pos]=x+"px";}
-function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;}
-function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;}
-else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}}
-function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}}
-_this.elmCache=elmCache;}
-function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;}
-if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;}
-elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;}
-function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;}
-function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;}
-function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}}
-function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}}
-function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}}
-function actuator_mouseover(){parentMenuSet.showMenu(_this);}
-function actuator_mouseout(){parentMenuSet.hideMenu(_this);}
-function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}}
-function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}}
-function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}}
-function child_deactivate(){for(var i=0;i<childMenus.length;i++){if(childMenus[i]==this){dehighlight(elmCache["item"][i]);break;}}}
-function child_queue(){parentMenuSet.hideMenu(_this);}
-function child_dequeue(){parentMenuSet.showMenu(_this);}
-function toString(){var aHtml=[];var sClassName="transMenu"+(oActuator.constructor!=TransMenuItem?" top":"");for(var i=0,item=null;item=this.items[i];i++){aHtml[i]=item.toString(childMenus[i]);}
-return'<div id="'+id+'" class="'+sClassName+'">'+'<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">'+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr>'+aHtml.join('')+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr></table>'+'<div class="shadowBottom"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="shadowRight"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="background"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'</div></div>';}}
-TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;}
-function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();}
-else{cancelHide(oMenu);}}
-function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}}
-function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);}
-function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}}
-function hide(oMenu){if(!oMenu&&current)oMenu=current;if(oMenu&&current==oMenu&&oMenu.isOpen){hideCurrent();}}
-function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}}
-function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;"
-var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;"
-return'<tr class="item"><td nowrap style="'+sPaddingLeft+'">'+sText+'</td><td width="14" style="'+sPaddingRight+'">'+'<img src="'+sDingbat+'" width="14" height="14"></td></tr>';}}
-function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();}
-Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);}
-Accelimation.prototype.stop=function(){Accelimation._remove(this);}
-Accelimation.prototype._paint=function(time){if(time<this.t1){var elapsed=time-this.t0;this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));}
-else this._end();}
-Accelimation.prototype._end=function(){Accelimation._remove(this);this.onframe(this.x1);this.onend();}
-Accelimation._add=function(o){var index=this.instances.length;this.instances[index]=o;if(this.instances.length==1){this.timerID=window.setInterval("Accelimation._paintAll()",this.targetRes);}}
-Accelimation._remove=function(o){for(var i=0;i<this.instances.length;i++){if(o==this.instances[i]){this.instances=this.instances.slice(0,i).concat(this.instances.slice(i+1));break;}}
-if(this.instances.length==0){window.clearInterval(this.timerID);this.timerID=null;}}
-Accelimation._paintAll=function(){var now=new Date().getTime();for(var i=0;i<this.instances.length;i++){this.instances[i]._paint(now);}}
-Accelimation._B1=function(t){return t*t*t}
-Accelimation._B2=function(t){return 3*t*t*(1-t)}
-Accelimation._B3=function(t){return 3*t*(1-t)*(1-t)}
-Accelimation._B4=function(t){return(1-t)*(1-t)*(1-t)}
-Accelimation._getBezier=function(percent,startPos,endPos,control1,control2){return endPos*this._B1(percent)+control2*this._B2(percent)+control1*this._B3(percent)+startPos*this._B4(percent);}
-Accelimation.instances=[];Accelimation.targetRes=10;Accelimation.timerID=null;
-if(window.attachEvent){var cearElementProps=['data','onmouseover','onmouseout','onmousedown','onmouseup','ondblclick','onclick','onselectstart','oncontextmenu'];window.attachEvent("onunload", function() {var el;for(var d=document.all.length;d--;){el=document.all[d];for(var c=cearElementProps.length;c--;){el[cearElementProps[c]] = null;}}});} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng/jsevents/body.def b/usr/local/www/themes/pfsense_ng/jsevents/body.def
deleted file mode 100644
index df461e2..0000000
--- a/usr/local/www/themes/pfsense_ng/jsevents/body.def
+++ /dev/null
@@ -1,7 +0,0 @@
-# Format: <event_name>=<jsfunction_name> !<forbidden_page_0>,<forbidden_page_1>...<forbidden_page_n>
-# where: forbidden pages are those pages that should *not* use
-# the particular JavaScript function within the JS event
-# specified below.
-# $Id: body.def,v 1.2.2.1 2007/01/17 18:43:52 sullrich Exp $
-#
-onload=tmenuinit(); !wizard.php \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng/loader.js b/usr/local/www/themes/pfsense_ng/loader.js
deleted file mode 100644
index ee215f3..0000000
--- a/usr/local/www/themes/pfsense_ng/loader.js
+++ /dev/null
@@ -1,36 +0,0 @@
-//<![CDATA[
-var browser = '';
-var version = '';
-var entrance = '';
-var cond = '';
-
-// BROWSER?
-if (browser == '') {
- if (navigator.appName.indexOf('Microsoft') != -1)
- browser = 'IE';
- else if (navigator.appName.indexOf('Netscape') != -1)
- browser = 'Netscape';
- else
- browser = 'IE';
-}
-if (version == '') {
- version= navigator.appVersion;
- paren = version.indexOf('(');
- whole_version = navigator.appVersion.substring(0,paren-1);
- version = parseInt(whole_version);
-}
-
-if (browser == 'IE' && version < 7) {
- document.write('<script type="text/javascript" src="/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js"></script>');
-}
-
-document.write('<script type="text/javascript" src="/themes/pfsense_ng/javascript/niftyjsCode.js"></script>');
-
-// jQuery function to define dropdown menu size
-jQuery(document).ready(function () {
- var hwindow = '';
- hwindow = (jQuery(window).height()-35);
- // Force the size dropdown menu
- jQuery('#navigation ul li ul').css('max-height', hwindow);
-});
-//]]>
diff --git a/usr/local/www/themes/pfsense_ng/login.css b/usr/local/www/themes/pfsense_ng/login.css
deleted file mode 100644
index f8abdfc..0000000
--- a/usr/local/www/themes/pfsense_ng/login.css
+++ /dev/null
@@ -1,1127 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-/* please adjust the bgcolor to be used together with niftycorners! */
-.rtop, .artop {
- background-color: #999999;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 9px;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- background-position : center 0px;
- background-color: #999999;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
- font-size: 14px;
- color: #cccccc;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- /* background: url('images/menu.gif') no-repeat; */
- /* width: 693px; */
- position: relative;
- top: -25px;
- left: 3px;
- width: 810px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- /* width: 7.5em; */
- width: 8.77em;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #990000;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background-color: #666666;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 10px;
- padding-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 8px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-
-#login {
-/* background: #cccccc; */
- background-color: transparent;
- border: 0px solid #cccccc;
- margin: 5em auto;
- padding: 0em;
- width: 400px;
-/* filter:alpha(opacity=60);
- -moz-opacity:0.6;
- -khtml-opacity: 0.6;
- opacity: 0.6; */
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
-/* background: #ffffff; */
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 400px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -420px;
- left: 70px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- top: -300px; */
-}
-
-#login #username, #password {
- font-size: 1em;
- width: 60%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- left: 10px;
- top: -300px; */
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- text-align: center;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -20px;
- left: 170px;
-}
-
-/* loginerror box follows */
-
-#login #inputerrors {
- background-color: transparent;
- border: 0px solid #666666;
- margin: 5em auto;
- vertical-align: middle;
- padding: 0em;
- width: 330px;
- height: 50px;
- position: relative;
- top: -370px;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng/menu.inc b/usr/local/www/themes/pfsense_ng/menu.inc
deleted file mode 100644
index d703daf..0000000
--- a/usr/local/www/themes/pfsense_ng/menu.inc
+++ /dev/null
@@ -1,177 +0,0 @@
-<?php
-/* $Id: menu.inc,v 1.3.2.1 2007/01/17 18:43:30 sullrich Exp $ */
-/* ========================================================================== */
-/*
- menu.inc
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-require("menu.inc");
-
-define("TMENU_STUB", "
- // set up drop downs anywhere in the body of the page. I think the bottom of the page is better..
- // but you can experiment with effect on loadtime.
- if (TransMenu.isSupported()) {
-
- //==================================================================================================
- // create a set of dropdowns
- //==================================================================================================
- // the first param should always be down, as it is here
- //
- // The second and third param are the top and left offset positions of the menus from their actuators
- // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use
- // something like -5, 5
- //
- // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner
- // of the actuator from which to measure the offset positions above. Here we are saying we want the
- // menu to appear directly below the bottom left corner of the actuator
- //==================================================================================================
- var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft);
-
- //==================================================================================================
- // create a dropdown menu
- //==================================================================================================
- // the first parameter should be the HTML element which will act actuator for the menu
- //==================================================================================================
-
- @@MENU_DEFINITIONS@@
-
- //==================================================================================================
- // write drop downs into page
- //==================================================================================================
- // this method writes all the HTML for the menus into the page with document.write(). It must be
- // called within the body of the HTML page.
- //==================================================================================================
- TransMenu.renderAll();
- }
-");
-
-class NervecenterMenu extends Menu {
- private $menuJScript = "NOT-SET";
- private $menuJScriptEvents = "NOT-SET";
- private $menuID = "NOT-SET";
-
- public function __construct($identification = "", $filename = "", Component $c = NULL) {
- parent::__construct($identification, $filename, $c);
-
- $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
- $this->menuID = $id;
-
- if ($this->hasParent()) {
- $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n";
- }
- } // end __construct
-
- public function getMenuID() {
- return $this->menuID;
- }
-
- public function setMenuID($myMenuID) {
- $this->menuID = $myMenuID;
- }
-
- public function getMenuJScript() {
- $childJScript = "";
- foreach ($this->getChildren() as $component) {
- $childJScript .= $component->getMenuJScript();
- }
-
- if (! $this->hasParent()) {
- $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB);
- } else {
- $this->menuJScript .= "\n$childJScript\n";
- }
-
- return $this->menuJScript;
- }
-
- public function getMenuJScriptEvents() {
- return $this->menuJScriptEvents;
- }
-
- public function __toString() {
- if (! $this->hasParent()) {
- $menuMarkup =<<<EOD
- <div id="menu">
- @@CHILD_ELEMENTS@@
- </div>
-
-EOD;
- } else {
- $name = gettext($this->getID());
- $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
-
- $menuMarkup =<<<EOD
- <a id="{$id}" href="#">{$name}</a>
- @@CHILD_ELEMENTS@@
-EOD;
- }
-
- $childMarkup = "";
- foreach ($this->getChildren() as $component) {
- $childMarkup .= $component;
- }
-
- $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup);
-
- return $menuMarkup;
- }
-}
-
-class NervecenterMenuItem extends MenuItem {
- private $menuJScript = "NOT-SET";
- private $menuJScriptEvents = "NOT-SET";
-
- public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) {
- parent::__construct($identification, $filename, $href, $c);
-
- $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}";
- $name = gettext($this->getID());
- $file = $this->getFile();
-
- $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n");
- }
-
- public function getMenuJScript() {
- return $this->menuJScript;
- }
-
- public function getMenuJScriptEvents() {
- return $this->menuJScriptEvents;
- }
-
- public function __toString() {
- return "";
- }
-}
-
-?>
diff --git a/usr/local/www/themes/pfsense_ng/new_tab_menu.css b/usr/local/www/themes/pfsense_ng/new_tab_menu.css
deleted file mode 100644
index 04c4cf2..0000000
--- a/usr/local/www/themes/pfsense_ng/new_tab_menu.css
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- new_tab_menu.css
- part of pfSense
- Copyright (C) 2010-2011 Robert Zelaya
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-
- Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
- The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
-
- <tr>
- <td>
- <?php
- $tab_array_indent = 0; // move to the line in px
- $tab_array_space = 1; // space betwen lines in px
- $tab_array_char_limit = 82; // number or chr before the drop down box
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
-
-*/
-
-.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
-
-.newtabmenu li{float:left; margin-right:2px; text-align: center;}
-.newtabmenu a:link, .newtabmenu a:visited{
- background:url(images/new_tab_menu.png) right 45px;
- color:#ffffff; /* noactive font */
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- font-weight:bold;
- font-size:.9em;
- height:20px;
- line-height:20px;
- text-decoration:none;
-}
-.newtabmenu a span{
- background:url(images/new_tab_menu.png) left 45px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- height:20px;
- margin-right:7px;
- padding-left:7px;
-}
-.newtabmenu a:hover{
- background:url(images/new_tab_menu.png) right 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- color:#ffffff; /* hover over font */
-}
-.newtabmenu a:hover span{
- background:url(images/new_tab_menu.png) left 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
-}
-
-/* -------------------------------- */
-/* ACTIVE ELEMENTS */
-.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
- color:#000000; /* active font */
- background:url(images/new_tab_menu.png) right 0 no-repeat;
-}
-.newtabmenu_active a span, .newtabmenu_active a:hover span{
- background:url(images/new_tab_menu.png) left 0 no-repeat;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng/no_big_logo b/usr/local/www/themes/pfsense_ng/no_big_logo
deleted file mode 100644
index 6e5c70d..0000000
--- a/usr/local/www/themes/pfsense_ng/no_big_logo
+++ /dev/null
@@ -1 +0,0 @@
-NO! DONT! \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng/rrdcolors.inc.php b/usr/local/www/themes/pfsense_ng/rrdcolors.inc.php
deleted file mode 100644
index dcb7a39..0000000
--- a/usr/local/www/themes/pfsense_ng/rrdcolors.inc.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/* $Id$ */
-/*
- rrdcolors.inc.php
- Part of pfSense
- Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/* This file is included by the RRD graphing page and sets the colors */
-
-/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* 95th Percentile Lines Out, In */
-$colortraffic95 = array('660000', 'FF0000');
-
-/* State Table pfrate, pfstates, pfnat, srcip, dstip */
-$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
-
-/* Processor Usage user, nice, system, int, processes */
-$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
-
-/* Memory Usage active, inact, free, cache, wire */
-$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
-
-/* MBUF Usage current, cache, total, max */
-$colormbuf = array('0080FF','00E344','FF0000','000000');
-
-/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
-$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
-$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
-/* Quality Graph Loss */
-$colorqualityloss = 'ee0000';
-
-/* Wireless Graph SNR, Rate, Channel*/
-/* Cellular Graph RSSI, */
-$colorwireless = array('333333','a83c3c','999999');
-
-/* SPAMD Times min area, avg area, max area, Time line */
-$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
-/* SPAMD Connections max area, min area, min line, max line, avg line */
-$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
-
-/* OpenVPN Users Online Users */
-$colorvpnusers = array('990000');
-
-/* Captive Portal Total Users Total Users */
-/* Captive Portal Concurrent Concurrent Users */
-$colorcaptiveportalusers = array('990000');
-
-?>
diff --git a/usr/local/www/themes/pfsense_ng/styles/jquery-ui-1.11.1.css b/usr/local/www/themes/pfsense_ng/styles/jquery-ui-1.11.1.css
deleted file mode 100644
index 8a8c54f..0000000
--- a/usr/local/www/themes/pfsense_ng/styles/jquery-ui-1.11.1.css
+++ /dev/null
@@ -1,1226 +0,0 @@
-/*! jQuery UI - v1.11.1 - 2014-09-22
-* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden {
- display: none;
-}
-.ui-helper-hidden-accessible {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
-}
-.ui-helper-reset {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- line-height: 1.3;
- text-decoration: none;
- font-size: 100%;
- list-style: none;
-}
-.ui-helper-clearfix:before,
-.ui-helper-clearfix:after {
- content: "";
- display: table;
- border-collapse: collapse;
-}
-.ui-helper-clearfix:after {
- clear: both;
-}
-.ui-helper-clearfix {
- min-height: 0; /* support: IE7 */
-}
-.ui-helper-zfix {
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- position: absolute;
- opacity: 0;
- filter:Alpha(Opacity=0); /* support: IE8 */
-}
-
-.ui-front {
- z-index: 100;
-}
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled {
- cursor: default !important;
-}
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- display: block;
- text-indent: -99999px;
- overflow: hidden;
- background-repeat: no-repeat;
-}
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-.ui-draggable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable {
- position: relative;
-}
-.ui-resizable-handle {
- position: absolute;
- font-size: 0.1px;
- display: block;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
- display: none;
-}
-.ui-resizable-n {
- cursor: n-resize;
- height: 7px;
- width: 100%;
- top: -5px;
- left: 0;
-}
-.ui-resizable-s {
- cursor: s-resize;
- height: 7px;
- width: 100%;
- bottom: -5px;
- left: 0;
-}
-.ui-resizable-e {
- cursor: e-resize;
- width: 7px;
- right: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-w {
- cursor: w-resize;
- width: 7px;
- left: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-se {
- cursor: se-resize;
- width: 12px;
- height: 12px;
- right: 1px;
- bottom: 1px;
-}
-.ui-resizable-sw {
- cursor: sw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- bottom: -5px;
-}
-.ui-resizable-nw {
- cursor: nw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- top: -5px;
-}
-.ui-resizable-ne {
- cursor: ne-resize;
- width: 9px;
- height: 9px;
- right: -5px;
- top: -5px;
-}
-.ui-selectable {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-selectable-helper {
- position: absolute;
- z-index: 100;
- border: 1px dotted black;
-}
-.ui-sortable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-accordion .ui-accordion-header {
- display: block;
- cursor: pointer;
- position: relative;
- margin: 2px 0 0 0;
- padding: .5em .5em .5em .7em;
- min-height: 0; /* support: IE7 */
- font-size: 100%;
-}
-.ui-accordion .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
- position: absolute;
- left: .5em;
- top: 50%;
- margin-top: -8px;
-}
-.ui-accordion .ui-accordion-content {
- padding: 1em 2.2em;
- border-top: 0;
- overflow: auto;
-}
-.ui-autocomplete {
- position: absolute;
- top: 0;
- left: 0;
- cursor: default;
-}
-.ui-button {
- display: inline-block;
- position: relative;
- padding: 0;
- line-height: normal;
- margin-right: .1em;
- cursor: pointer;
- vertical-align: middle;
- text-align: center;
- overflow: visible; /* removes extra width in IE */
-}
-.ui-button,
-.ui-button:link,
-.ui-button:visited,
-.ui-button:hover,
-.ui-button:active {
- text-decoration: none;
-}
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
- width: 2.2em;
-}
-/* button elements seem to need a little more width */
-button.ui-button-icon-only {
- width: 2.4em;
-}
-.ui-button-icons-only {
- width: 3.4em;
-}
-button.ui-button-icons-only {
- width: 3.7em;
-}
-
-/* button text element */
-.ui-button .ui-button-text {
- display: block;
- line-height: normal;
-}
-.ui-button-text-only .ui-button-text {
- padding: .4em 1em;
-}
-.ui-button-icon-only .ui-button-text,
-.ui-button-icons-only .ui-button-text {
- padding: .4em;
- text-indent: -9999999px;
-}
-.ui-button-text-icon-primary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 1em .4em 2.1em;
-}
-.ui-button-text-icon-secondary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 2.1em .4em 1em;
-}
-.ui-button-text-icons .ui-button-text {
- padding-left: 2.1em;
- padding-right: 2.1em;
-}
-/* no icon support for input elements, provide padding by default */
-input.ui-button {
- padding: .4em 1em;
-}
-
-/* button icon element(s) */
-.ui-button-icon-only .ui-icon,
-.ui-button-text-icon-primary .ui-icon,
-.ui-button-text-icon-secondary .ui-icon,
-.ui-button-text-icons .ui-icon,
-.ui-button-icons-only .ui-icon {
- position: absolute;
- top: 50%;
- margin-top: -8px;
-}
-.ui-button-icon-only .ui-icon {
- left: 50%;
- margin-left: -8px;
-}
-.ui-button-text-icon-primary .ui-button-icon-primary,
-.ui-button-text-icons .ui-button-icon-primary,
-.ui-button-icons-only .ui-button-icon-primary {
- left: .5em;
-}
-.ui-button-text-icon-secondary .ui-button-icon-secondary,
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
- right: .5em;
-}
-
-/* button sets */
-.ui-buttonset {
- margin-right: 7px;
-}
-.ui-buttonset .ui-button {
- margin-left: 0;
- margin-right: -.3em;
-}
-
-/* workarounds */
-/* reset extra padding in Firefox, see h5bp.com/l */
-input.ui-button::-moz-focus-inner,
-button.ui-button::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-.ui-datepicker {
- width: 17em;
- padding: .2em .2em 0;
- display: none;
-}
-.ui-datepicker .ui-datepicker-header {
- position: relative;
- padding: .2em 0;
-}
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-next {
- position: absolute;
- top: 2px;
- width: 1.8em;
- height: 1.8em;
-}
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
- top: 1px;
-}
-.ui-datepicker .ui-datepicker-prev {
- left: 2px;
-}
-.ui-datepicker .ui-datepicker-next {
- right: 2px;
-}
-.ui-datepicker .ui-datepicker-prev-hover {
- left: 1px;
-}
-.ui-datepicker .ui-datepicker-next-hover {
- right: 1px;
-}
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
- display: block;
- position: absolute;
- left: 50%;
- margin-left: -8px;
- top: 50%;
- margin-top: -8px;
-}
-.ui-datepicker .ui-datepicker-title {
- margin: 0 2.3em;
- line-height: 1.8em;
- text-align: center;
-}
-.ui-datepicker .ui-datepicker-title select {
- font-size: 1em;
- margin: 1px 0;
-}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year {
- width: 45%;
-}
-.ui-datepicker table {
- width: 100%;
- font-size: .9em;
- border-collapse: collapse;
- margin: 0 0 .4em;
-}
-.ui-datepicker th {
- padding: .7em .3em;
- text-align: center;
- font-weight: bold;
- border: 0;
-}
-.ui-datepicker td {
- border: 0;
- padding: 1px;
-}
-.ui-datepicker td span,
-.ui-datepicker td a {
- display: block;
- padding: .2em;
- text-align: right;
- text-decoration: none;
-}
-.ui-datepicker .ui-datepicker-buttonpane {
- background-image: none;
- margin: .7em 0 0 0;
- padding: 0 .2em;
- border-left: 0;
- border-right: 0;
- border-bottom: 0;
-}
-.ui-datepicker .ui-datepicker-buttonpane button {
- float: right;
- margin: .5em .2em .4em;
- cursor: pointer;
- padding: .2em .6em .3em .6em;
- width: auto;
- overflow: visible;
-}
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
- float: left;
-}
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi {
- width: auto;
-}
-.ui-datepicker-multi .ui-datepicker-group {
- float: left;
-}
-.ui-datepicker-multi .ui-datepicker-group table {
- width: 95%;
- margin: 0 auto .4em;
-}
-.ui-datepicker-multi-2 .ui-datepicker-group {
- width: 50%;
-}
-.ui-datepicker-multi-3 .ui-datepicker-group {
- width: 33.3%;
-}
-.ui-datepicker-multi-4 .ui-datepicker-group {
- width: 25%;
-}
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
- border-left-width: 0;
-}
-.ui-datepicker-multi .ui-datepicker-buttonpane {
- clear: left;
-}
-.ui-datepicker-row-break {
- clear: both;
- width: 100%;
- font-size: 0;
-}
-
-/* RTL support */
-.ui-datepicker-rtl {
- direction: rtl;
-}
-.ui-datepicker-rtl .ui-datepicker-prev {
- right: 2px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next {
- left: 2px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
- right: 1px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
- left: 1px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
- clear: right;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
- float: left;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
-.ui-datepicker-rtl .ui-datepicker-group {
- float: right;
-}
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
- border-right-width: 0;
- border-left-width: 1px;
-}
-.ui-dialog {
- overflow: hidden;
- position: absolute;
- top: 0;
- left: 0;
- padding: .2em;
- outline: 0;
-}
-.ui-dialog .ui-dialog-titlebar {
- padding: .4em 1em;
- position: relative;
-}
-.ui-dialog .ui-dialog-title {
- float: left;
- margin: .1em 0;
- white-space: nowrap;
- width: 90%;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.ui-dialog .ui-dialog-titlebar-close {
- position: absolute;
- right: .3em;
- top: 50%;
- width: 20px;
- margin: -10px 0 0 0;
- padding: 1px;
- height: 20px;
-}
-.ui-dialog .ui-dialog-content {
- position: relative;
- border: 0;
- padding: .5em 1em;
- background: none;
- overflow: auto;
-}
-.ui-dialog .ui-dialog-buttonpane {
- text-align: left;
- border-width: 1px 0 0 0;
- background-image: none;
- margin-top: .5em;
- padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
- float: right;
-}
-.ui-dialog .ui-dialog-buttonpane button {
- margin: .5em .4em .5em 0;
- cursor: pointer;
-}
-.ui-dialog .ui-resizable-se {
- width: 12px;
- height: 12px;
- right: -5px;
- bottom: -5px;
- background-position: 16px 16px;
-}
-.ui-draggable .ui-dialog-titlebar {
- cursor: move;
-}
-.ui-menu {
- list-style: none;
- padding: 0;
- margin: 0;
- display: block;
- outline: none;
-}
-.ui-menu .ui-menu {
- position: absolute;
-}
-.ui-menu .ui-menu-item {
- position: relative;
- margin: 0;
- padding: 3px 1em 3px .4em;
- cursor: pointer;
- min-height: 0; /* support: IE7 */
- /* support: IE10, see #8844 */
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
-}
-.ui-menu .ui-menu-divider {
- margin: 5px 0;
- height: 0;
- font-size: 0;
- line-height: 0;
- border-width: 1px 0 0 0;
-}
-.ui-menu .ui-state-focus,
-.ui-menu .ui-state-active {
- margin: -1px;
-}
-
-/* icon support */
-.ui-menu-icons {
- position: relative;
-}
-.ui-menu-icons .ui-menu-item {
- padding-left: 2em;
-}
-
-/* left-aligned */
-.ui-menu .ui-icon {
- position: absolute;
- top: 0;
- bottom: 0;
- left: .2em;
- margin: auto 0;
-}
-
-/* right-aligned */
-.ui-menu .ui-menu-icon {
- left: auto;
- right: 0;
-}
-.ui-progressbar {
- height: 1em;
- text-align: left;
- overflow: hidden;
-}
-.ui-progressbar .ui-progressbar-value {
- margin: -1px;
- height: 100%;
- background-color: #990000;
-}
-.ui-progressbar .ui-progressbar-overlay {
- background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
- height: 100%;
- filter: alpha(opacity=25); /* support: IE8 */
- opacity: 0.25;
-}
-.ui-progressbar-indeterminate .ui-progressbar-value {
- background-image: none;
-}
-.ui-selectmenu-menu {
- padding: 0;
- margin: 0;
- position: absolute;
- top: 0;
- left: 0;
- display: none;
-}
-.ui-selectmenu-menu .ui-menu {
- overflow: auto;
- /* Support: IE7 */
- overflow-x: hidden;
- padding-bottom: 1px;
-}
-.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
- font-size: 1em;
- font-weight: bold;
- line-height: 1.5;
- padding: 2px 0.4em;
- margin: 0.5em 0 0 0;
- height: auto;
- border: 0;
-}
-.ui-selectmenu-open {
- display: block;
-}
-.ui-selectmenu-button {
- display: inline-block;
- overflow: hidden;
- position: relative;
- text-decoration: none;
- cursor: pointer;
-}
-.ui-selectmenu-button span.ui-icon {
- right: 0.5em;
- left: auto;
- margin-top: -8px;
- position: absolute;
- top: 50%;
-}
-.ui-selectmenu-button span.ui-selectmenu-text {
- text-align: left;
- padding: 0.4em 2.1em 0.4em 1em;
- display: block;
- line-height: 1.4;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.ui-slider {
- position: relative;
- text-align: left;
-}
-.ui-slider .ui-slider-handle {
- position: absolute;
- z-index: 2;
- width: 1.2em;
- height: 1.2em;
- cursor: default;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-slider .ui-slider-range {
- position: absolute;
- z-index: 1;
- font-size: .7em;
- display: block;
- border: 0;
- background-position: 0 0;
-}
-
-/* support: IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
- filter: inherit;
-}
-
-.ui-slider-horizontal {
- height: .8em;
-}
-.ui-slider-horizontal .ui-slider-handle {
- top: -.3em;
- margin-left: -.6em;
-}
-.ui-slider-horizontal .ui-slider-range {
- top: 0;
- height: 100%;
-}
-.ui-slider-horizontal .ui-slider-range-min {
- left: 0;
-}
-.ui-slider-horizontal .ui-slider-range-max {
- right: 0;
-}
-
-.ui-slider-vertical {
- width: .8em;
- height: 100px;
-}
-.ui-slider-vertical .ui-slider-handle {
- left: -.3em;
- margin-left: 0;
- margin-bottom: -.6em;
-}
-.ui-slider-vertical .ui-slider-range {
- left: 0;
- width: 100%;
-}
-.ui-slider-vertical .ui-slider-range-min {
- bottom: 0;
-}
-.ui-slider-vertical .ui-slider-range-max {
- top: 0;
-}
-.ui-spinner {
- position: relative;
- display: inline-block;
- overflow: hidden;
- padding: 0;
- vertical-align: middle;
-}
-.ui-spinner-input {
- border: none;
- background: none;
- color: inherit;
- padding: 0;
- margin: .2em 0;
- vertical-align: middle;
- margin-left: .4em;
- margin-right: 22px;
-}
-.ui-spinner-button {
- width: 16px;
- height: 50%;
- font-size: .5em;
- padding: 0;
- margin: 0;
- text-align: center;
- position: absolute;
- cursor: default;
- display: block;
- overflow: hidden;
- right: 0;
-}
-/* more specificity required here to override default borders */
-.ui-spinner a.ui-spinner-button {
- border-top: none;
- border-bottom: none;
- border-right: none;
-}
-/* vertically center icon */
-.ui-spinner .ui-icon {
- position: absolute;
- margin-top: -8px;
- top: 50%;
- left: 0;
-}
-.ui-spinner-up {
- top: 0;
-}
-.ui-spinner-down {
- bottom: 0;
-}
-
-/* TR overrides */
-.ui-spinner .ui-icon-triangle-1-s {
- /* need to fix icons sprite */
- background-position: -65px -16px;
-}
-.ui-tabs {
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
- padding: .2em;
-}
-.ui-tabs .ui-tabs-nav {
- margin: 0;
- padding: .2em .2em 0;
-}
-.ui-tabs .ui-tabs-nav li {
- list-style: none;
- float: left;
- position: relative;
- top: 0;
- margin: 1px .2em 0 0;
- border-bottom-width: 0;
- padding: 0;
- white-space: nowrap;
-}
-.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
- float: left;
- padding: .5em 1em;
- text-decoration: none;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
- margin-bottom: -1px;
- padding-bottom: 1px;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
- cursor: text;
-}
-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
- cursor: pointer;
-}
-.ui-tabs .ui-tabs-panel {
- display: block;
- border-width: 0;
- padding: 1em 1.4em;
- background: none;
-}
-.ui-tooltip {
- padding: 8px;
- position: absolute;
- z-index: 9999;
- max-width: 300px;
- -webkit-box-shadow: 0 0 5px #aaa;
- box-shadow: 0 0 5px #aaa;
-}
-body .ui-tooltip {
- border-width: 2px;
-}
-
-/* Component containers
-----------------------------------*/
-.ui-widget {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1.1em;
-}
-.ui-widget .ui-widget {
- font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1em;
-}
-.ui-widget-content {
- border: 1px solid #aaaaaa;
- background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
- color: #333333;
-}
-.ui-widget-content a {
- color: #333333;
-}
-.ui-widget-header {
- border: 1px solid #bbbbbb;
- /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
- color: #444444;
- font-weight: bold;
-}
-.ui-widget-header a {
- color: #444444;
-}
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default {
- border: 1px solid #cccccc;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #3383bb;
-}
-.ui-state-default a,
-.ui-state-default a:link,
-.ui-state-default a:visited {
- color: #3383bb;
- text-decoration: none;
-}
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus {
- border: 1px solid #bbbbbb;
- background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #599fcf;
-}
-.ui-state-hover a,
-.ui-state-hover a:hover,
-.ui-state-hover a:link,
-.ui-state-hover a:visited,
-.ui-state-focus a,
-.ui-state-focus a:hover,
-.ui-state-focus a:link,
-.ui-state-focus a:visited {
- color: #599fcf;
- text-decoration: none;
-}
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active {
- border: 1px solid #999999;
- background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #ffffff;
-}
-.ui-state-active a,
-.ui-state-active a:link,
-.ui-state-active a:visited {
- color: #ffffff;
- text-decoration: none;
-}
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight,
-.ui-widget-header .ui-state-highlight {
- border: 1px solid #ffffff;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
- color: #444444;
-}
-.ui-state-highlight a,
-.ui-widget-content .ui-state-highlight a,
-.ui-widget-header .ui-state-highlight a {
- color: #444444;
-}
-.ui-state-error,
-.ui-widget-content .ui-state-error,
-.ui-widget-header .ui-state-error {
- border: 1px solid #c0402a;
- background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
- color: #ffffff;
-}
-.ui-state-error a,
-.ui-widget-content .ui-state-error a,
-.ui-widget-header .ui-state-error a {
- color: #ffffff;
-}
-.ui-state-error-text,
-.ui-widget-content .ui-state-error-text,
-.ui-widget-header .ui-state-error-text {
- color: #ffffff;
-}
-.ui-priority-primary,
-.ui-widget-content .ui-priority-primary,
-.ui-widget-header .ui-priority-primary {
- font-weight: bold;
-}
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary,
-.ui-widget-header .ui-priority-secondary {
- opacity: .7;
- filter:Alpha(Opacity=70); /* support: IE8 */
- font-weight: normal;
-}
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled,
-.ui-widget-header .ui-state-disabled {
- opacity: .35;
- filter:Alpha(Opacity=35); /* support: IE8 */
- background-image: none;
-}
-.ui-state-disabled .ui-icon {
- filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
-}
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- width: 16px;
- height: 16px;
-}
-.ui-icon,
-.ui-widget-content .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-widget-header .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-state-default .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
-}
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-active .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
-}
-.ui-state-highlight .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
-}
-
-/* positioning */
-.ui-icon-blank { background-position: 16px 16px; }
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-on { background-position: -96px -144px; }
-.ui-icon-radio-off { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
- border-top-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
- border-top-right-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
- border-bottom-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
- border-bottom-right-radius: 6px;
-}
-
-/* Overlays */
-.ui-widget-overlay {
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
- opacity: .8;
- filter: Alpha(Opacity=80); /* support: IE8 */
-}
-.ui-widget-shadow {
- margin: -4px 0 0 -4px;
- padding: 4px;
- background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
- opacity: .6;
- filter: Alpha(Opacity=60); /* support: IE8 */
- border-radius: 0pxdow;
-}
diff --git a/usr/local/www/themes/pfsense_ng/styles/menustyles.css b/usr/local/www/themes/pfsense_ng/styles/menustyles.css
deleted file mode 100644
index 06b3c7a..0000000
--- a/usr/local/www/themes/pfsense_ng/styles/menustyles.css
+++ /dev/null
@@ -1,44 +0,0 @@
-#navigation {
- /* border:1px solid black; */
- width: 98%;
- vertical-align: middle;
- height: 16px;
- padding-top: 4px;
- }
-
-#menu {
- /* background: #990000; */
- /* border-bottom:1px solid white; */
- padding: 0 0 0 0;
- width: 98%;
- vertical-align: middle;
- height: 16px;
- }
-#menu a {
- padding: 2px 28px 4px 28px;
- text-decoration: none;
- font-weight: bold;
- font-size: 1.0em;
- color: #FFFFFF;
- width: 08%;
- height: 16px;
- }
-#menu a.hover {
- background: #AF2020;
- }
-#menu span {
- display: none;
- }
-
-#subnav {
- font-size: 10px;
- margin-bottom: 2em;
- }
-#subnav a {
- color: #FF0000; /* #FB3B00; */
- margin-right: 1em;
- }
-#subnav span {
- color: silver;
- margin-right: 1em;
- }
diff --git a/usr/local/www/themes/pfsense_ng/styles/transmenu.css b/usr/local/www/themes/pfsense_ng/styles/transmenu.css
deleted file mode 100644
index f683574..0000000
--- a/usr/local/www/themes/pfsense_ng/styles/transmenu.css
+++ /dev/null
@@ -1,75 +0,0 @@
-/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */
-.transMenu {
- position:absolute;
- overflow:hidden;
- left:-1000px;
- top:-1000px;
- }
-
-/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */
-.transMenu .content {
- position:absolute;
- }
-
-/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */
-.transMenu .items {
- position:relative;
- left:0px; top:0px;
- z-index:2;
- }
-
-.transMenu.top .items {
- border-top:none;
- }
-
-/* each TR.item is one menu item */
-.transMenu .item {
- color: #FFFFFF; /* #336; */
- font-size: 1.1em;
- font-weight: normal;
- font-family:sans-serif;
- text-decoration:none;
- /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */
- border:none;
- cursor:pointer;
- cursor:hand;
- }
-
-/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */
-/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */
-.transMenu .background {
- position:absolute;
- left:0px; top:0px;
- z-index:1;
- -moz-opacity:.8;
- filter:alpha(opacity=80);
- }
-
-/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */
-.transMenu .shadowRight {
- position:absolute;
- z-index:3;
- top:3px; width:2px;
- -moz-opacity:.4;
- filter:alpha(opacity=40);
- }
-
-/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */
-.transMenu .shadowBottom {
- position:absolute;
- z-index:1;
- left:3px; height:2px;
- -moz-opacity:.4;
- filter:alpha(opacity=40);
- }
-
-/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */
-.transMenu .item.hover {
- background:#fdfdfd;
- color:black;
- }
-
-/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */
-.transMenu .item img {
- margin-left:10px;
- } \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng/wizard.css b/usr/local/www/themes/pfsense_ng/wizard.css
deleted file mode 100644
index f2c9f3e..0000000
--- a/usr/local/www/themes/pfsense_ng/wizard.css
+++ /dev/null
@@ -1,1117 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-
-}
-
-.nowrap { white-space: nowrap; }
-
-/* please adjust the bgcolor to be used together with niftycorners! */
-.rtop, .artop {
- background-color: #999999;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 9px;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- /* background: url('images/background.png') no-repeat; */
- background-position : center 0px;
- background-color: #999999;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
- font-size: 14px;
- color: #cccccc;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- /* background: url('images/menu.gif') no-repeat; */
- /* width: 693px; */
- position: relative;
- top: -25px;
- left: 3px;
- width: 810px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- /* width: 7.5em; */
- width: 8.77em;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #990000;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background-color: #666666;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 10px;
- padding-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 8px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-#login {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 340px;
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 50px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login #username, #password {
- font-size: 1em;
- width: 60%;
- padding: 3px;
- margin: 0em;
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-.infobox {
- width:100%;
-}
-
-.infoboxsave {
- padding-right: 10px;
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-.inputerrorsleft {
- background-color: #990000;
- width: 36px;
-}
-
-.inputerrorsright {
- background-color: #FFD9D1;
- color: #000000;
- font-size: 11px;
- padding-left: 8px;
- padding-top: 6px;
-}
diff --git a/usr/local/www/themes/pfsense_ng_fs/all.css b/usr/local/www/themes/pfsense_ng_fs/all.css
deleted file mode 100644
index 7286d1c..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/all.css
+++ /dev/null
@@ -1,1375 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, sans-serif;
- font-size: 0.9em;
-
-}
-
-.nowrap { white-space: nowrap; }
-
-.addgatewaybox {
- background-color: #990000;
- border-style: none none none none;
- width: 225px;
-}
-
-.infobox {
- width:100%;
-}
-
-.infoboxsave {
- padding-right: 10px;
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-.inputerrorsleft {
- background-color: #990000;
- width: 36px;
-}
-
-.inputerrorsright {
- background-color: #FFD9D1;
- color: #000000;
- font-size: 11px;
- padding-left: 8px;
- padding-top: 6px;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 220px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 11px;
- font-family: "Trebuchet MS", sans-serif;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-a:link {
- color: #550000;
-}
-
-a:visited {
- color: #550000;
-}
-
-a:active {
- color: #550000;
-}
-
-a:hover {
- color: #550000;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* style of disabled formelements */
-#wrap div {margin:1em 0}
-[disabled] {
- color:#666666;
- background:#eeeeee;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 40px;
- width: 810px;
- position: fixed;
- left: 0;
- margin-bottom: 5px;
- z-index: 2;
- top: 0;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 40px;
- width: 80px;
- left: 0px;
- top:0px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 0px;
- left: 0px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 30px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-/* for forcing an alert run the following command from diagnostics>command, php command:
-file_notice("blah", "blah blah...testing my new theme...");
-*/
-
-#header-right .container .right #alerts {
- position: fixed;
- background: url('images/alert_bgr.png') no-repeat;
- height: 40px;
- width: 400px;
- top: 0px;
- left: 810px;
- z-index: 2;
- padding-top: 1px;
- padding-left: 10px;
- margin: 0px;
-}
-
-#header-right .container .right #hostname {
- position: fixed;
- background: url('images/hostname.png') no-repeat;
- height: 40px;
- width: 400px;
- z-index: 1;
- padding-right: 5px;
- margin: 0px;
- top: 0px;
- left: 810px;
- font-size: 12px;
- color: #000000;
- font-weight: bold;
- padding-left: 40px;
- padding-top: 2px;
- text-align: left;
-}
-
-
-
-
-table#marquee {
- position: relative;
- top: -4px;
- left: 15px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 350px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
-/* font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff; */
- font-size: 12px;
- font-weight: normal;
- font-style: italic;
- color: #000000;
- padding-left: 30px;
- padding-top: 2px;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 330px;
- height: 16px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-#content {
- padding-top: 50px;
- padding-right: 40px;
- padding-left: 40px;
-}
-
-
-/* try to abuse left as a fadeout at the end of the page */
-#left {
- width: 810px;
- height: 1px;
-}
-
-#right {
- padding: 10px;
- margin-bottom: 30px;
- font-size: 12px;
- font-weight: 200;
- line-height: 12px;
- color: inherit;
- background-color: #eeeeee;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
-
-#footer {
- text-align: center;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-
-}
-
-/* Style the List */
-#navigation {
- position: fixed;
- top: 0px;
- left: 100px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
- margin-left: 10px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- padding-right: 20px;
- top: 0px;
-}
-
-/* Text mainmenubar */
-#navigation ul li div {
- background-image: url(images/mainmenu-right.gif);
- background-position: 2% 50%;
- background-repeat: no-repeat;
- padding-top:0px;
- font-size: 12px;
- font-weight: normal;
- color: #ffffff;
- text-align: left;
- padding-left: 13px;
- height: 13px;
-}
-
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- font-weight: normal;
- margin-top: 1px;
- padding-top: 5px;
- background: #850000;
- border: 0px;
- /* transparent */
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=95);
- -moz-opacity: 0.95;
- -khtml-opacity: 0.95;
- opacity: 0.95;
- /* borders */
- border-bottom-right-radius: 0px;
- border-bottom-left-radius: 6px;
- border-top-left-radius: 6px;
- border-top-right-radius: 6px;
- /* Mozilla */
- -moz-border-radius-bottomright: 0px;
- -moz-border-radius-bottomleft: 6px;
- -moz-border-radius-topright: 6px;
- -moz-border-radius-topleft: 6px;
- /* WebKit */
- -webkit-border-bottom-right-radius: 0px;
- -webkit-border-bottom-left-radius: 6px;
- -webkit-border-top-right-radius: 6px;
- -webkit-border-top-left-radius: 6px;
- /* Shadow Effect */
- box-shadow: 5px 5px 10px #000000;
- -webkit-box-shadow: 5px 5px 10px #000000;
- -moz-box-shadow: 5px 5px 10px #000000;
- /* Vertical menu max size */
- /* max-height: 259px; /
- /* Horizontal menu max size */
- max-width: 128px;
- overflow-x: hidden;
- overflow-y: auto;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
- background-image: url(images/mainmenu-down.gif);
- background-position: 5% 50%;
- background-repeat: no-repeat;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #000000;
-}
-/* dropdownmenu */
-#navigation ul li ul li {
- border: 0px solid #850000;
- width: 128px;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #850000;
- /* borders */
- border-bottom-right-radius: 0px;
- border-bottom-left-radius: 3px;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
- /* Mozilla */
- -moz-border-radius-bottomright: 0px;
- -moz-border-radius-bottomleft: 3px;
- -moz-border-radius-topright: 3px;
- -moz-border-radius-topleft: 3px;
- /* WebKit */
- -webkit-border-bottom-right-radius: 0px;
- -webkit-border-bottom-left-radius: 3px;
- -webkit-border-top-right-radius: 3px;
- -webkit-border-top-left-radius: 3px;
-}
-/* last element in dropdown menu*/
-#navigation ul li ul li:last-child {
- margin-bottom: 5px;
-}
-#navigation ul li ul li:hover {
- margin-left: 5px;
- background-color: #666666;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=95);
- -moz-opacity: 0.95;
- -khtml-opacity: 0.95;
- opacity: 0.95;
-}
-
-/* textcolor in dropdownmenu */
-#navigation li li a {
- display: block;
- padding-left: 8px;
- padding-right: 8px;
- color: #ffffff;
- font-size: 11px;
- font-weight: normal;
- text-align: left;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-}
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
- background-color: transparent;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listrborder {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-left: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- color: #FFFFFF;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #DDDDDD;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-/* style of disabled formelements */
-[disabled] {
- color:#666666;
- background:#eeeeee;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 6px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-#login {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 340px;
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 50px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login #username, #password, #password2 {
- font-size: small;
- width: 60%;
- padding-left: 19px;
- padding: 3px;
- margin: 0em;
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-/* Widget CSS */
-.widgetsubheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #B1B1B1;
- padding-right: 6px;
- padding-left: 6px;
- color: #000000;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetdiv{
- margin:5px;
- padding: 5px;
- background:#CCCCCC;
-}
-.widgetconfigdiv{
- background:#BBBBBB;
- font-size: 11px;
- color: #000000;
- padding-right: 5px;
- padding-left: 5px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-
-div#log div.log-entry-mini {
- clear: both;
-}
-
-div#log div.log-entry-mini span {
- padding: 2px 2px 2px 2px;
- padding-left: 6px;
-}
-
-div#log span.log-action-mini-header,
-div#log span.log-time-mini-header,
-div#log span.log-interface-mini-header,
-div#log span.log-source-mini-header,
-div#log span.log-destination-mini-header,
-div#log span.log-protocol-mini-header {
- float: left;
- text-align: left;
- background-color: #B1B1B1;
- font-size: 12px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-time-mini,
-div#log span.log-interface-mini,
-div#log span.log-source-mini,
-div#log span.log-destination-mini,
-div#log span.log-protocol-mini {
- float: left;
- text-align: left;
- background-color: #FFFFFF;
- font-size: 11px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-action-mini-header {
- width: 6%;
-}
-
-div#log span.log-time-mini,
-div#log span.log-time-mini-header {
- width: 19%;
-}
-
-div#log span.log-interface-mini,
-div#log span.log-interface-mini-header {
- width: 8%;
-}
-
-div#log span.log-source-mini,
-div#log span.log-source-mini-header {
- width: 23%;
-}
-
-div#log span.log-destination-mini,
-div#log span.log-destination-mini-header {
- width: 31%;
-}
-
-div#log span.log-protocol-mini,
-div#log span.log-protocol-mini-header {
- width: 8%;
- border-right: 1px solid #999;
-}
-
-/* Sortable tables */
-table.sortable thead {
- cursor: default;
- /* background-color: #EEEEEE; this causing light gray rectangles to the right of many tables in gui */
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-
-/*thermal_sensors widget styles*/
-
-.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
-.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
-.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
- background-color: LimeGreen;
- border-top-width: 2px; border-top-color: Lime;
- border-left-width: 0px;
- border-right-width: 0px;
- border-bottom-width: 2px; border-bottom-color: Green;
-}
-.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
-.thermalSensorText { float: left; height: 20px; top: 3px; }
-.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
-
-.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-
-.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
-
-.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
-
-/* widget textarea styles - full width */
-.textarea_widget {
- width: 100%;
- resize:vertical;
- -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
- -moz-box-sizing: border-box; /* Firefox, other Gecko */
- box-sizing: border-box; /* IE 8+ */
-}
diff --git a/usr/local/www/themes/pfsense_ng_fs/apple-touch-icon.png b/usr/local/www/themes/pfsense_ng_fs/apple-touch-icon.png
deleted file mode 100755
index 7a4b975..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/apple-touch-icon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/bottom-loader.js b/usr/local/www/themes/pfsense_ng_fs/bottom-loader.js
deleted file mode 100644
index a21f775..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/bottom-loader.js
+++ /dev/null
@@ -1,10 +0,0 @@
-//<![CDATA[
-
- NiftyCheck();
- Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
- Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
- Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
- Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
- Rounded("div#topbox","all","#FFF","#990000","smooth");
-
-//]]>
diff --git a/usr/local/www/themes/pfsense_ng_fs/favicon.ico b/usr/local/www/themes/pfsense_ng_fs/favicon.ico
deleted file mode 100644
index 3440bf2..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/graphlink.css b/usr/local/www/themes/pfsense_ng_fs/graphlink.css
deleted file mode 100644
index 521059e..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/graphlink.css
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- $Id: graphlink.css,v 1.2.2.1 2007/01/17 18:43:30 sullrich Exp $
-
- This file is part of the GraphLink software.
- GraphLink is distributed under the MIT License.
- Copyright (C) 2005-2006 Max Khitrov <max@mxsoft.org>
-*******************************************************************************/
-
-/**
- * Defines the background image used for the graph, as well as the actual data
- * locations.
- * Use padding-left and padding-top to align the data area correctly with your
- * background image.
- * Width and height should same as the dimensions of the image, minus the
- * padding values in both directions.
- */
-div.GraphLink {
- width: 212px;
- height: 60px;
- padding-left: 38px;
- padding-top: 10px;
- background-image: url(/themes/nervecenter/images/misc/graph.png);
- overflow: hidden;
-}
-
-/**
- * Defines the data display area. Modify to fit your background image.
- */
-div.GraphLinkData {
- width: 200px;
- height: 50px;
- overflow: hidden;
-}
-
-/**
- * Defines the look of one bar. Nothing to change here other than the color.
- */
-span.GraphLinkBar {
- background-color: #990000;
- height: 100%;
- float: left;
- overflow: hidden;
-}
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/alert_bgr.png b/usr/local/www/themes/pfsense_ng_fs/images/alert_bgr.png
deleted file mode 100755
index 5a8ac81..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/alert_bgr.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/alerter.png b/usr/local/www/themes/pfsense_ng_fs/images/alerter.png
deleted file mode 100755
index e026bfe..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/alerter.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/background.jpg b/usr/local/www/themes/pfsense_ng_fs/images/background.jpg
deleted file mode 100755
index ebdff47..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/background.jpg
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/footer.png b/usr/local/www/themes/pfsense_ng_fs/images/footer.png
deleted file mode 100755
index b10002b..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/footer.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/header.png b/usr/local/www/themes/pfsense_ng_fs/images/header.png
deleted file mode 100755
index 6f8128c..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/header.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/help.png b/usr/local/www/themes/pfsense_ng_fs/images/help.png
deleted file mode 100755
index 1de05e3..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/help.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/horizontal.png b/usr/local/www/themes/pfsense_ng_fs/images/horizontal.png
deleted file mode 100755
index f098bb3..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/horizontal.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/hostname.png b/usr/local/www/themes/pfsense_ng_fs/images/hostname.png
deleted file mode 100755
index cd79f5c..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/hostname.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/favicon.ico b/usr/local/www/themes/pfsense_ng_fs/images/icons/favicon.ico
deleted file mode 100644
index 3440bf2..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g.gif
deleted file mode 100755
index 46ccb92..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g_inactive.gif
deleted file mode 100755
index cf983e4..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g_inactive.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced.gif
deleted file mode 100755
index 3ede1ff..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced_s.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced_s.gif
deleted file mode 100755
index b233549..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alert.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alert.gif
deleted file mode 100755
index 7646941..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alert.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_host.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_host.gif
deleted file mode 100755
index ad43e17..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_host.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_net.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_net.gif
deleted file mode 100755
index abd1b8b..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_net.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_port.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_port.gif
deleted file mode 100755
index 4acf2aa..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_port.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url.gif
deleted file mode 100755
index 660571e..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url_reload.gif
deleted file mode 100755
index 55c1c4a..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url_reload.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block.gif
deleted file mode 100755
index 670c968..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_add.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_add.gif
deleted file mode 100755
index eb726d6..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_d.gif
deleted file mode 100755
index e6345fe..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cablenic.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cablenic.gif
deleted file mode 100755
index a071c66..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cablenic.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal.gif
deleted file mode 100755
index a9c7c87..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal_mo.gif
deleted file mode 100755
index 1647e2f..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp.gif
deleted file mode 100755
index 9454a82..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp_d.gif
deleted file mode 100755
index 2ba8db2..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_chain.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_chain.png
deleted file mode 100755
index 12db07a..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_chain.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_check.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_check.gif
deleted file mode 100755
index 393674d..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_check.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_green.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_green.gif
deleted file mode 100755
index e171ba8..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_green.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_grey.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_grey.gif
deleted file mode 100755
index 00c865a..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_grey.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_red.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_red.gif
deleted file mode 100755
index 7b412ee..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_red.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_close.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_close.gif
deleted file mode 100755
index e0f86a7..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_close.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_configure.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_configure.gif
deleted file mode 100755
index 7182e0d..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_configure.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down.gif
deleted file mode 100755
index b71a9c5..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_d.gif
deleted file mode 100755
index 70a7473..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_mo.gif
deleted file mode 100755
index 584587a..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e.gif
deleted file mode 100755
index 2950800..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e_mo.gif
deleted file mode 100755
index 9ba5738..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_error.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_error.gif
deleted file mode 100755
index e0fa659..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_error.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_exclam.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_exclam.gif
deleted file mode 100755
index 36c2ec7..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_exclam.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_de.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_de.png
deleted file mode 100755
index 069cbbe..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_de.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_en.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_en.png
deleted file mode 100755
index bd7f9a5..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_en.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_es.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_es.png
deleted file mode 100755
index 434776c..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_es.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_pt_BR.png
deleted file mode 100755
index f786349..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_pt_BR.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_cert.png
deleted file mode 100755
index 48a34b6..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_cert.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_file.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_file.png
deleted file mode 100755
index 48a9ed2..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_file.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_group.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_group.png
deleted file mode 100755
index 7d929c0..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_host.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_host.png
deleted file mode 100755
index 867ef2c..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_host.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_imp.png
deleted file mode 100755
index f667cfc..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_imp.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_mail.png
deleted file mode 100755
index d2d4548..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_mail.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_pwd.png
deleted file mode 100755
index 06b53a1..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_pwd.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_search.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_search.png
deleted file mode 100755
index 33de926..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_search.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_time.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_time.png
deleted file mode 100755
index aa8300a..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_time.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_unknown.png
deleted file mode 100755
index 1857d0e..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_unknown.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_url.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_url.png
deleted file mode 100755
index cf56792..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_url.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_user.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_user.png
deleted file mode 100755
index e00eebe..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_fw-update.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_fw-update.gif
deleted file mode 100755
index 52c18ac..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_fw-update.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_help.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_help.gif
deleted file mode 100644
index 84c84db..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_help.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias.gif
deleted file mode 100755
index 0c569a7..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias_d.gif
deleted file mode 100755
index faa84d4..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_import_alias.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_import_alias.gif
deleted file mode 100755
index d11a5f0..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_import_alias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_info_pkg.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_info_pkg.gif
deleted file mode 100755
index cd3a532..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_info_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_down.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_down.gif
deleted file mode 100755
index 0626655..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_up.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_up.gif
deleted file mode 100755
index 1449513..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left.gif
deleted file mode 100755
index 8effefe..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_d.gif
deleted file mode 100755
index c778014..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_mo.gif
deleted file mode 100755
index 84c6fa2..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log.gif
deleted file mode 100755
index 4a1983a..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_d.gif
deleted file mode 100755
index d31bd9b..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s.gif
deleted file mode 100755
index f9fda33..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s_d.gif
deleted file mode 100755
index fb2c05f..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_logs.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_logs.gif
deleted file mode 100644
index afe0104..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_logs.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match.gif
deleted file mode 100644
index 215571f..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match_d.gif
deleted file mode 100644
index 6e4c364..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_minus.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_minus.gif
deleted file mode 100755
index 417544f..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_minus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_open.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_open.gif
deleted file mode 100755
index ac3da14..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_open.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other.gif
deleted file mode 100755
index e6f780f..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other_d.gif
deleted file mode 100755
index b08d970..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp.gif
deleted file mode 100755
index 96acaf3..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp_d.gif
deleted file mode 100755
index 7d7d00e..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass.gif
deleted file mode 100755
index fe1bb0d..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_add.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_add.gif
deleted file mode 100755
index f7f4c20..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_d.gif
deleted file mode 100755
index 6adc431..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus.gif
deleted file mode 100755
index 2a94eeb..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl.gif
deleted file mode 100755
index 8dcd7c0..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl_p.gif
deleted file mode 100755
index 0c79849..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_d.gif
deleted file mode 100755
index ebc7457..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_mo.gif
deleted file mode 100755
index 1c7ca08..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_p.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_p.gif
deleted file mode 100755
index eb41284..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall.gif
deleted file mode 100755
index d78b867..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_d.gif
deleted file mode 100755
index 13658f7..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_mo.gif
deleted file mode 100755
index 90b576e..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg.gif
deleted file mode 100755
index 9aebb03..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_d.gif
deleted file mode 100755
index 4ab4992..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_mo.gif
deleted file mode 100755
index 7025d20..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml.gif
deleted file mode 100755
index 4542432..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_d.gif
deleted file mode 100755
index 8d3a68d..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_mo.gif
deleted file mode 100755
index 15e0aed..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject.gif
deleted file mode 100755
index 5565cd6..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject_d.gif
deleted file mode 100755
index 6c09fae..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_right.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_right.gif
deleted file mode 100755
index fdf2d8b..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart.gif
deleted file mode 100755
index e49fbd7..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart_d.gif
deleted file mode 100755
index a5d6d7c..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_running.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_running.gif
deleted file mode 100644
index 543fd56..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_running.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start.gif
deleted file mode 100755
index 09bb58f..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start_d.gif
deleted file mode 100755
index f58f111..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_status.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_status.gif
deleted file mode 100644
index a93bcfb..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_status.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop.gif
deleted file mode 100755
index 922addc..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop_d.gif
deleted file mode 100755
index b4cfdea..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stopped.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stopped.gif
deleted file mode 100644
index f93a25d..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stopped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_restart_mo.gif
deleted file mode 100755
index a092b40..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_restart_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_start_mo.gif
deleted file mode 100755
index ecdb58f..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_start_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_stop_mo.gif
deleted file mode 100755
index c00e208..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_stop_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group-grey.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group-grey.png
deleted file mode 100755
index d7b964d..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group.png
deleted file mode 100755
index 1c974f2..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user-grey.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user-grey.png
deleted file mode 100755
index 2f6047d..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user.png
deleted file mode 100755
index ef82156..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_lock_screen.png
deleted file mode 100755
index 30f306d..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_lock_screen.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_logout.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_logout.png
deleted file mode 100755
index 9bbb6c7..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_logout.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped.gif
deleted file mode 100755
index ffeb2cd..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped_p.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped_p.gif
deleted file mode 100755
index 6d46aaf..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule.gif
deleted file mode 100755
index e15ab6c..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule_d.gif
deleted file mode 100755
index f776281..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up.gif
deleted file mode 100755
index 883c5a2..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_d.gif
deleted file mode 100755
index 0ddcce2..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_mo.gif
deleted file mode 100755
index 9f869a4..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan.gif
deleted file mode 100755
index 1f0addc..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan_d.gif
deleted file mode 100755
index 35bf580..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wol_all.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wol_all.gif
deleted file mode 100755
index 2d22182..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wol_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_nsaved.png
deleted file mode 100755
index 21cb27d..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_nsaved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_saved.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_saved.png
deleted file mode 100755
index ab82946..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_saved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x.gif
deleted file mode 100755
index 24e4d49..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_d.gif
deleted file mode 100755
index d2bfbc8..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_mo.gif
deleted file mode 100755
index da7b57c..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_p.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_p.gif
deleted file mode 100755
index 8828fa6..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/in.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/in_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/out.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/out_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/icons/out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/log.png b/usr/local/www/themes/pfsense_ng_fs/images/log.png
deleted file mode 100755
index 762ba80..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/log.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/logo.gif b/usr/local/www/themes/pfsense_ng_fs/images/logo.gif
deleted file mode 100755
index e5da95c..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/logo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/logobig.jpg b/usr/local/www/themes/pfsense_ng_fs/images/logobig.jpg
deleted file mode 100755
index 2ef196d..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/logobig.jpg
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-down.gif b/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-down.gif
deleted file mode 100755
index e59432a..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-right.gif b/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-right.gif
deleted file mode 100755
index 14298a1..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/mainmenuitem.gif b/usr/local/www/themes/pfsense_ng_fs/images/mainmenuitem.gif
deleted file mode 100755
index 6e97478..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/mainmenuitem.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/menu-dot.gif b/usr/local/www/themes/pfsense_ng_fs/images/menu-dot.gif
deleted file mode 100755
index c76609b..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/menu-dot.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/menu_footer.gif b/usr/local/www/themes/pfsense_ng_fs/images/menu_footer.gif
deleted file mode 100755
index d06faa4..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/menu_footer.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/menu_right.gif b/usr/local/www/themes/pfsense_ng_fs/images/menu_right.gif
deleted file mode 100755
index 881327c..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/menu_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/menubgr.png b/usr/local/www/themes/pfsense_ng_fs/images/menubgr.png
deleted file mode 100755
index 45e0ec7..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/menubgr.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/menubgr_footer.png b/usr/local/www/themes/pfsense_ng_fs/images/menubgr_footer.png
deleted file mode 100755
index fdff49f..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/menubgr_footer.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/menubgr_highlight.png b/usr/local/www/themes/pfsense_ng_fs/images/menubgr_highlight.png
deleted file mode 100755
index 05f4832..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/menubgr_highlight.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_blue.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_blue.gif
deleted file mode 100755
index 741186a..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_blue.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_gray.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_gray.gif
deleted file mode 100755
index e86e245..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_gray.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_left.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_left.gif
deleted file mode 100755
index af751fa..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_right.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_right.gif
deleted file mode 100755
index ff12d9e..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_minus.png b/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_minus.png
deleted file mode 100755
index 37db2fd..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_minus.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_plus.png b/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_plus.png
deleted file mode 100755
index fba7af9..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_plus.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/button.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/button.gif
deleted file mode 100755
index e85dbb3..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/button.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/graph.png b/usr/local/www/themes/pfsense_ng_fs/images/misc/graph.png
deleted file mode 100755
index 507ec75..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/graph.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/key_128.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/key_128.gif
deleted file mode 100755
index ea5ae34..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/key_128.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/key_152.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/key_152.gif
deleted file mode 100755
index 6c7fc03..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/key_152.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/key_256.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/key_256.gif
deleted file mode 100755
index 3e1c377..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/key_256.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/key_64.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/key_64.gif
deleted file mode 100755
index 87892bd..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/key_64.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/left_background.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/left_background.gif
deleted file mode 100755
index 529d827..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/left_background.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/loader.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/loader.gif
deleted file mode 100755
index 5d10ac3..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_all.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_all.gif
deleted file mode 100755
index cb6bc0c..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_filter.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_filter.gif
deleted file mode 100755
index b838b17..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_filter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_tab.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_tab.gif
deleted file mode 100755
index 05bb04c..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_tab.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/logon.png b/usr/local/www/themes/pfsense_ng_fs/images/misc/logon.png
deleted file mode 100755
index 98aa37a..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/logon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/progress_bar.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/progress_bar.gif
deleted file mode 100755
index 3b4aa52..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/progress_bar.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/rrd_error.png b/usr/local/www/themes/pfsense_ng_fs/images/misc/rrd_error.png
deleted file mode 100755
index a79ecf3..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/rrd_error.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_alerter.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_alerter.gif
deleted file mode 100755
index 7ff1e95..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_alerter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_carpmaster.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_carpmaster.gif
deleted file mode 100755
index 2c32908..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_carpmaster.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_left.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_left.gif
deleted file mode 100755
index b5a2930..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_page_loading.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_page_loading.gif
deleted file mode 100755
index 067ef18..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_page_loading.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_all.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_all.gif
deleted file mode 100755
index 72de6bd..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_filter.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_filter.gif
deleted file mode 100755
index d72761a..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_filter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_right.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_right.gif
deleted file mode 100755
index bf66fdb..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c.gif
deleted file mode 100755
index 317b758..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c_black.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c_black.gif
deleted file mode 100755
index 309846e..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o.gif
deleted file mode 100755
index eb95c32..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o_black.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o_black.gif
deleted file mode 100755
index f818f3b..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/widget_loader.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/widget_loader.gif
deleted file mode 100755
index ca35e2a..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/misc/widget_loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/new_tab_menu.png b/usr/local/www/themes/pfsense_ng_fs/images/new_tab_menu.png
deleted file mode 100755
index 4bdfcef..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/new_tab_menu.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/status.png b/usr/local/www/themes/pfsense_ng_fs/images/status.png
deleted file mode 100755
index a3e368e..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/status.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/transparent.gif b/usr/local/www/themes/pfsense_ng_fs/images/transparent.gif
deleted file mode 100755
index 89c5530..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/images/transparent_pixel.gif b/usr/local/www/themes/pfsense_ng_fs/images/transparent_pixel.gif
deleted file mode 100755
index 35d42e8..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/images/transparent_pixel.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/blank.gif b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/blank.gif
deleted file mode 100755
index a4fe2e6..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/blank.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-box-model.js
deleted file mode 100644
index 45543f6..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-box-model.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-core.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-core.js
deleted file mode 100644
index b11e2b1..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-core.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css-strict.js
deleted file mode 100644
index 4406d7a..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css-strict.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css2.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css2.js
deleted file mode 100644
index 7121c8e..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css2.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css3.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css3.js
deleted file mode 100644
index 86b24f5..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css3.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-fixed.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-fixed.js
deleted file mode 100644
index 4321cda..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-fixed.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-html4.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-html4.js
deleted file mode 100644
index 4d2baa9..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-html4.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-ie5.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-ie5.js
deleted file mode 100644
index 707fa56..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-ie5.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite-p.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite-p.js
deleted file mode 100644
index 3a66d19..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í></Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite.js
deleted file mode 100644
index 88c764f..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-png.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-png.js
deleted file mode 100644
index 7b8f2cf..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-png.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-server.css b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-server.css
deleted file mode 100644
index 47c7edd..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-server.css
+++ /dev/null
@@ -1,43 +0,0 @@
-body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
-body {margin: 8px; background: #333;}
-h1 {margin: 0;}
-h1 a:hover {background-color: transparent;}
-h2 {font-size: 1.75em;}
-h3 {font-size: 1.1em;}
-a:active {color: #ff0000;}
-a:link {color: #0a6cce;}
-a:visited {color: #0a6cce;}
-code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
- padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
-code.box {display: block; padding: 10px; margin: 0.5em 0;}
-ul {list-style-type: square;}
-dd {margin: .2em 0 .5em 1em;}
-dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
-dl.library dd {font-style: italic; margin-left: 3em;}
-dt {font-weight: bold;}
-dt.pack {color: brown;}
-a img {border-style: none;}
-hr {height: 1px; color: #000; border-style: solid;}
-hr.short {height: 2px; width: 100px;}
-div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
-hr {border-bottom-width: 0px;}
-div.header hr {color: #0a6cce; background-color: #0a6cce;}
-div.content {min-height: 100px;}
-div.footer hr {color: #898e79; background-color: #898e79; }
-div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
-a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
-div.footer a:hover {background-color: transparent; text-decoration: none;}
-div.header .menu {text-align: right;}
-div.footer {font-size: x-small; margin-top: 8px;}
-div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
-#license {margin-top: 5px; font-size: xx-small;}
-table {border-top: 1px solid #000; border-left: 1px solid #000;}
-th {background-color: #fff; text-align: left;}
-th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
-th.small {width: 100px;}
-th.medium {width: 200px;}
-th.large {width: 270px;}
-th.x-large {width: 408px;}
-table.fixed {table-layout: fixed;}
-span.comment {color: #666;}
-
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard-p.js
deleted file mode 100644
index 73e99ac..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì></Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard.js
deleted file mode 100644
index 2109905..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/test-trans.png b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/test-trans.png
deleted file mode 100755
index e187e2c..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/test-trans.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/img/grey-40.png b/usr/local/www/themes/pfsense_ng_fs/javascript/img/grey-40.png
deleted file mode 100755
index 758b716..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/img/grey-40.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-off.gif b/usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-off.gif
deleted file mode 100755
index ddcdcae..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-off.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-on.gif b/usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-on.gif
deleted file mode 100755
index 7a58077..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-on.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/img/white-90.png b/usr/local/www/themes/pfsense_ng_fs/javascript/img/white-90.png
deleted file mode 100755
index efc84b4..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/img/white-90.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/img/x.gif b/usr/local/www/themes/pfsense_ng_fs/javascript/img/x.gif
deleted file mode 100755
index 5bfd67a..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/img/x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/niftyjsCode.js b/usr/local/www/themes/pfsense_ng_fs/javascript/niftyjsCode.js
deleted file mode 100644
index e71ea14..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/niftyjsCode.js
+++ /dev/null
@@ -1,174 +0,0 @@
-function NiftyCheck(){
-if(!document.getElementById || !document.createElement)
- return(false);
-isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
-if(Array.prototype.push==null){Array.prototype.push=function(){
- this[this.length]=arguments[0]; return(this.length);};}
-return(true);
-}
-
-function Rounded(selector,wich,bk,color,opt){
-var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
-
-if(color=="transparent"){
- cn=cn+"x";
- ecolor=bk;
- bk="transparent";
- }
-else if(opt && opt.indexOf("border")>=0){
- var optar=opt.split(" ");
- for(i=0;i<optar.length;i++)
- if(optar[i].indexOf("#")>=0) ecolor=optar[i];
- if(ecolor=="") ecolor="#666";
- cn+="e";
- edges=true;
- }
-else if(opt && opt.indexOf("smooth")>=0){
- cn+="a";
- ecolor=Mix(bk,color);
- }
-if(opt && opt.indexOf("small")>=0) cn+="s";
-prefixt=cn;
-prefixb=cn;
-if(wich.indexOf("all")>=0){t=true;b=true;}
-else if(wich.indexOf("top")>=0) t="true";
-else if(wich.indexOf("tl")>=0){
- t="true";
- if(wich.indexOf("tr")<0) prefixt+="l";
- }
-else if(wich.indexOf("tr")>=0){
- t="true";
- prefixt+="r";
- }
-if(wich.indexOf("bottom")>=0) b=true;
-else if(wich.indexOf("bl")>=0){
- b="true";
- if(wich.indexOf("br")<0) prefixb+="l";
- }
-else if(wich.indexOf("br")>=0){
- b="true";
- prefixb+="r";
- }
-var v=getElementsBySelector(selector);
-var l=v.length;
-for(i=0;i<l;i++){
- if(edges) AddBorder(v[i],ecolor);
- if(t) AddTop(v[i],bk,color,ecolor,prefixt);
- if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
- }
-}
-
-function AddBorder(el,bc){
-var i;
-if(!el.passed){
- if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
- var t=el.firstChild.nodeValue;
- el.removeChild(el.lastChild);
- var d=CreateEl("span");
- d.style.display="block";
- d.appendChild(document.createTextNode(t));
- el.appendChild(d);
- }
- for(i=0;i<el.childNodes.length;i++){
- if(el.childNodes[i].nodeType==1){
- el.childNodes[i].style.borderLeft="1px solid "+bc;
- el.childNodes[i].style.borderRight="1px solid "+bc;
- }
- }
- }
-el.passed=true;
-}
-
-function AddTop(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=1;i<=lim;i++){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingTop=0;
-el.insertBefore(d,el.firstChild);
-}
-
-function AddBottom(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=lim;i>0;i--){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingBottom=0;
-el.appendChild(d);
-}
-
-function CreateEl(x){
-if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
-else return(document.createElement(x));
-}
-
-function getElementsBySelector(selector){
-var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
-
-if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
- s=selector.split(" ");
- var fs=s[0].split("#");
- if(fs.length==1) return(objlist);
- f=document.getElementById(fs[1]);
- if(f) return(f.getElementsByTagName(s[1]));
- return(objlist);
- }
-if(selector.indexOf("#")>0){ //id selector like "tag#id"
- s=selector.split("#");
- tag=s[0];
- selid=s[1];
- }
-if(selid!=""){
- f=document.getElementById(selid);
- if(f) objlist.push(f);
- return(objlist);
- }
-if(selector.indexOf(".")>0){ //class selector like "tag.class"
- s=selector.split(".");
- tag=s[0];
- selclass=s[1];
- }
-var v=document.getElementsByTagName(tag); // tag selector like "tag"
-if(selclass=="")
- return(v);
-for(i=0;i<v.length;i++){
- if(v[i].className.indexOf(selclass)>=0){
- objlist.push(v[i]);
- }
- }
-return(objlist);
-}
-
-function Mix(c1,c2){
-var i,step1,step2,x,y,r=new Array(3);
-if(c1.length==4)step1=1;
-else step1=2;
-if(c2.length==4) step2=1;
-else step2=2;
-for(i=0;i<3;i++){
- x=parseInt(c1.substr(1+step1*i,step1),16);
- if(step1==1) x=16*x+x;
- y=parseInt(c2.substr(1+step2*i,step2),16);
- if(step2==1) y=16*y+y;
- r[i]=Math.floor((x*50+y*50)/100);
- }
-return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
-} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-body.php b/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-body.php
deleted file mode 100644
index afb7090..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-body.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/* $Id: transmenu-body.php,v 1.1.2.1 2007/01/17 18:43:47 sullrich Exp $ */
-/* ========================================================================== */
-/*
- transmenu-body.php
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-function nervecenterTransmenuGetBodyJS() {
- global $rootmenu;
-
- if (isset($rootmenu)) {
- return $rootmenu->getMenuJScript();
- } else if (empty($rootmenu)) {
- return "alert('No rootmenu object found.');";
- } else {
- return "alert('No JavaScript attached to rootmenu object.');";
- }
-}
-
-?>
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-head.php b/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-head.php
deleted file mode 100644
index afc6402..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-head.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-/* $Id: transmenu-head.php,v 1.2.2.1 2007/01/17 18:43:47 sullrich Exp $ */
-/* ========================================================================== */
-/*
- transmenu-head.php
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-function nervecenterTransmenuGetHeadJS() {
- global $g, $rootmenu;
-
- $transmenu_stub =<<<EOD
- function tmenuinit() {
- //==========================================================================================
- // if supported, initialize TransMenus
- //==========================================================================================
- // Check isSupported() so that menus aren't accidentally sent to non-supporting browsers.
- // This is better than server-side checking because it will also catch browsers which would
- // normally support the menus but have javascript disabled.
- //
- // If supported, call initialize() and then hook whatever image rollover code you need to do
- // to the .onactivate and .ondeactivate events for each menu.
- //==========================================================================================
- if (TransMenu.isSupported()) {
- TransMenu.initialize();
-
- // hook all the highlight swapping of the main toolbar to menu activation/deactivation
- // instead of simple rollover to get the effect where the button stays hightlit until
- // the menu is closed.
- @@CHILD_JSCRIPT@@
- }
- } // end function
-EOD;
-
- if (empty($rootmenu)) {
- require_once("menudef.inc");
- }
-
- $childJScript = "";
- foreach ($rootmenu->getChildren() as $component) {
- $id = "mnua_" . str_replace(" ", "", strtolower($component->getID()));
-
- $childJScript .=<<<EOD
- {$id}.onactivate = function() { document.getElementById("{$id}").className = "hover"; };
- {$id}.ondeactivate = function() { document.getElementById("{$id}").className = ""; };
-
-EOD;
- }
-
- $transmenu_stub = basename($_SERVER['PHP_SELF']) != "wizard.php" ? str_replace("@@CHILD_JSCRIPT@@", $childJScript, $transmenu_stub) : "";
-
- return $transmenu_stub;
-}
-
-?>
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu.org b/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu.org
deleted file mode 100644
index 6c9e353..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu.org
+++ /dev/null
@@ -1,785 +0,0 @@
-/* =================================================================================================
- * TransMenu
- * March, 2003
- *
- * Customizable multi-level animated DHTML menus with transparency.
- *
- * Copyright 2003-2004, Aaron Boodman (www.youngpup.net)
- * =================================================================================================
- * "Can I use this?"
- *
- * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
- * out at: http://creativecommons.org/licenses/by/2.0/
- *
- * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
- * for writing it. You may not misrepresent yourself as the author of this code.
- * =================================================================================================
- * "It's kinda hard to read, though"
- *
- * The uncompressed, commented version of this script can be found at:
- * http://youngpup.net/projects/transMenus
- * =================================================================================================
- * updates:
- * 04.19.04 fixed cascade problem with menus nested greater than two levels.
- * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu.
- * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;)
- * also made gecko check a little more strict by specifying build no.
- * ============================================================================================== */
-
-
-
-//==================================================================================================
-// Configuration properties
-//==================================================================================================
-TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif
-TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat
-TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat
-TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed)
-TransMenu.menuPadding = 5; // padding between menu border and items grid
-TransMenu.itemPadding = 3; // additional padding around each item
-TransMenu.shadowSize = 2; // size of shadow under menu
-TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge
-TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS)
-TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5
-TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS)
-TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5
-TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu
-TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu
-
-
-//==================================================================================================
-// Internal use properties
-//==================================================================================================
-TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};
-TransMenu.direction = {down:1,right:2};
-TransMenu.registry = [];
-TransMenu._maxZ = 100;
-
-
-
-//==================================================================================================
-// Static methods
-//==================================================================================================
-// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0
-TransMenu.isSupported = function() {
- var ua = navigator.userAgent.toLowerCase();
- var pf = navigator.platform.toLowerCase();
- var an = navigator.appName;
- var r = false;
-
- if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0
- else if (an == "Microsoft Internet Explorer") {
- if (document.getElementById) { // ie5.1+ mac,win
- if (pf.indexOf("mac") == 0) {
- r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1;
- }
- else r = true;
- }
- }
-
- return r;
-}
-
-// call this in onload once menus have been created
-TransMenu.initialize = function() {
- for (var i = 0, menu = null; menu = this.registry[i]; i++) {
- menu.initialize();
- }
-}
-
-// call this in document body to write out menu html
-TransMenu.renderAll = function() {
- var aMenuHtml = [];
- for (var i = 0, menu = null; menu = this.registry[i]; i++) {
- aMenuHtml[i] = menu.toString();
- }
- document.write(aMenuHtml.join(""));
-}
-
-//==================================================================================================
-// TransMenu constructor (only called internally)
-//==================================================================================================
-// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a
-// reference to an HTML element, or a TransMenuItem from an existing menu.
-// iDirection : The direction to slide out. One of TransMenu.direction.
-// iLeft : Left pixel offset of menu from actuator
-// iTop : Top pixel offset of menu from actuator
-// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
-// parentMenuSet : Menuset this menu will be added to.
-//==================================================================================================
-function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) {
- // public methods
- this.addItem = addItem;
- this.addMenu = addMenu;
- this.toString = toString;
- this.initialize = initialize;
- this.isOpen = false;
- this.show = show;
- this.hide = hide;
- this.items = [];
-
- // events
- this.onactivate = new Function(); // when the menu starts to slide open
- this.ondeactivate = new Function(); // when the menu finishes sliding closed
- this.onmouseover = new Function(); // when the menu has been moused over
- this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future
- this.ondequeue = new Function();
-
- // initialization
- this.index = TransMenu.registry.length;
- TransMenu.registry[this.index] = this;
-
- var id = "TransMenu" + this.index;
- var contentHeight = null;
- var contentWidth = null;
- var childMenuSet = null;
- var animating = false;
- var childMenus = [];
- var slideAccel = -1;
- var elmCache = null;
- var ready = false;
- var _this = this;
- var a = null;
-
- var pos = iDirection == TransMenu.direction.down ? "top" : "left";
- var dim = null;
-
- // private and public method implimentations
- function addItem(sText, sUrl) {
- var item = new TransMenuItem(sText, sUrl, this);
- item._index = this.items.length;
- this.items[item._index] = item;
- }
-
- function addMenu(oMenuItem) {
- if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here");
-
- if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight);
-
- var m = childMenuSet.addMenu(oMenuItem);
-
- childMenus[oMenuItem._index] = m;
- m.onmouseover = child_mouseover;
- m.ondeactivate = child_deactivate;
- m.onqueue = child_queue;
- m.ondequeue = child_dequeue;
-
- return m;
- }
-
- function initialize() {
- initCache();
- initEvents();
- initSize();
- ready = true;
- }
-
- function show() {
- //dbg_dump("show");
- if (ready) {
- _this.isOpen = true;
- animating = true;
- setContainerPos();
- elmCache["clip"].style.visibility = "visible";
- elmCache["clip"].style.zIndex = TransMenu._maxZ++;
- //dbg_dump("maxZ: " + TransMenu._maxZ);
- slideStart();
- _this.onactivate();
- }
- }
-
- function hide() {
- if (ready) {
- _this.isOpen = false;
- animating = true;
-
- for (var i = 0, item = null; item = elmCache.item[i]; i++)
- dehighlight(item);
-
- if (childMenuSet) childMenuSet.hide();
-
- slideStart();
- _this.ondeactivate();
- }
- }
-
- function setContainerPos() {
- var sub = oActuator.constructor == TransMenuItem;
- var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator;
- var el = act;
-
- var x = 0;
- var y = 0;
-
-
- var minX = 0;
- var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width);
- var minY = 0;
- var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height);
-
- // add up all offsets... subtract any scroll offset
- while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) {
- x += el.offsetLeft;
- y += el.offsetTop;
-
- if (el.scrollLeft) x -= el.scrollLeft;
- if (el.scrollTop) y -= el.scrollTop;
-
- el = el.offsetParent;
- }
-
- if (oActuator.constructor == TransMenuItem) {
- x += parseInt(el.parentNode.style.left);
- y += parseInt(el.parentNode.style.top);
- }
-
- switch (iReferencePoint) {
- case TransMenu.reference.topLeft:
- break;
- case TransMenu.reference.topRight:
- x += act.offsetWidth;
- break;
- case TransMenu.reference.bottomLeft:
- y += act.offsetHeight;
- break;
- case TransMenu.reference.bottomRight:
- x += act.offsetWidth;
- y += act.offsetHeight;
- break;
- }
-
- x += iLeft;
- y += iTop;
-
- x = Math.max(Math.min(x, maxX), minX);
- y = Math.max(Math.min(y, maxY), minY);
-
- elmCache["clip"].style.left = x + "px";
- elmCache["clip"].style.top = y + "px";
- }
-
- function slideStart() {
- var x0 = parseInt(elmCache["content"].style[pos]);
- var x1 = _this.isOpen ? 0 : -dim;
-
- if (a != null) a.stop();
- a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel);
-
- a.onframe = slideFrame;
- a.onend = slideEnd;
-
- a.start();
- }
-
- function slideFrame(x) {
- elmCache["content"].style[pos] = x + "px";
- }
-
- function slideEnd() {
- if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden";
- animating = false;
- }
-
- function initSize() {
- // everything is based off the size of the items table...
- var ow = elmCache["items"].offsetWidth;
- var oh = elmCache["items"].offsetHeight;
- var ua = navigator.userAgent.toLowerCase();
-
- // clipping container should be ow/oh + the size of the shadow
- elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px";
- elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px";
-
- // same with content...
- elmCache["content"].style.width = ow + TransMenu.shadowSize + "px";
- elmCache["content"].style.height = oh + TransMenu.shadowSize + "px";
-
- contentHeight = oh + TransMenu.shadowSize;
- contentWidth = ow + TransMenu.shadowSize;
-
- dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth;
-
- // set initially closed
- elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px";
- elmCache["clip"].style.visibility = "hidden";
-
- // if *not* mac/ie 5
- if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) {
- // set background div to offset size
- elmCache["background"].style.width = ow + "px";
- elmCache["background"].style.height = oh + "px";
- elmCache["background"].style.backgroundColor = TransMenu.backgroundColor;
-
- // shadow left starts at offset left and is offsetHeight pixels high
- elmCache["shadowRight"].style.left = ow + "px";
- elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px";
- elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor;
-
- // shadow bottom starts at offset height and is offsetWidth - shadowOffset
- // pixels wide (we don't want the bottom and right shadows to overlap or we
- // get an extra bright bottom-right corner)
- elmCache["shadowBottom"].style.top = oh + "px";
- elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px";
- elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor;
- }
- // mac ie is a little different because we use a PNG for the transparency
- else {
- // set background div to offset size
- elmCache["background"].firstChild.src = TransMenu.backgroundPng;
- elmCache["background"].firstChild.width = ow;
- elmCache["background"].firstChild.height = oh;
-
- // shadow left starts at offset left and is offsetHeight pixels high
- elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng;
- elmCache["shadowRight"].style.left = ow + "px";
- elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize;
- elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize);
-
- // shadow bottom starts at offset height and is offsetWidth - shadowOffset
- // pixels wide (we don't want the bottom and right shadows to overlap or we
- // get an extra bright bottom-right corner)
- elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng;
- elmCache["shadowBottom"].style.top = oh + "px";
- elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize;
- elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset;
- }
- }
-
- function initCache() {
- var menu = document.getElementById(id);
- var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing
-
- elmCache = {};
- elmCache["clip"] = menu;
- elmCache["item"] = [];
-
- for (var i = 0, elm = null; elm = all[i]; i++) {
- switch (elm.className) {
- case "items":
- case "content":
- case "background":
- case "shadowRight":
- case "shadowBottom":
- elmCache[elm.className] = elm;
- break;
- case "item":
- elm._index = elmCache["item"].length;
- elmCache["item"][elm._index] = elm;
- break;
- }
- }
-
- // hack!
- _this.elmCache = elmCache;
- }
-
- function initEvents() {
- // hook item mouseover
- for (var i = 0, item = null; item = elmCache.item[i]; i++) {
- item.onmouseover = item_mouseover;
- item.onmouseout = item_mouseout;
- item.onclick = item_click;
- }
-
- // hook actuation
- if (typeof oActuator.tagName != "undefined") {
- oActuator.onmouseover = actuator_mouseover;
- oActuator.onmouseout = actuator_mouseout;
- }
-
- // hook menu mouseover
- elmCache["content"].onmouseover = content_mouseover;
- elmCache["content"].onmouseout = content_mouseout;
- }
-
- function highlight(oRow) {
- oRow.className = "item hover";
- if (childMenus[oRow._index])
- oRow.lastChild.firstChild.src = TransMenu.dingbatOn;
- }
-
- function dehighlight(oRow) {
- oRow.className = "item";
- if (childMenus[oRow._index])
- oRow.lastChild.firstChild.src = TransMenu.dingbatOff;
- }
-
- function item_mouseover() {
- if (!animating) {
- highlight(this);
-
- if (childMenus[this._index])
- childMenuSet.showMenu(childMenus[this._index]);
- else if (childMenuSet) childMenuSet.hide();
- }
- }
-
- function item_mouseout() {
- if (!animating) {
- if (childMenus[this._index])
- childMenuSet.hideMenu(childMenus[this._index]);
- else // otherwise child_deactivate will do this
- dehighlight(this);
- }
- }
-
- function item_click() {
- if (!animating) {
- if (_this.items[this._index].url)
- location.href = _this.items[this._index].url;
- }
- }
-
- function actuator_mouseover() {
- parentMenuSet.showMenu(_this);
- }
-
- function actuator_mouseout() {
- parentMenuSet.hideMenu(_this);
- }
-
- function content_mouseover() {
- if (!animating) {
- parentMenuSet.showMenu(_this);
- _this.onmouseover();
- }
- }
-
- function content_mouseout() {
- if (!animating) {
- parentMenuSet.hideMenu(_this);
- }
- }
-
- function child_mouseover() {
- if (!animating) {
- parentMenuSet.showMenu(_this);
- }
- }
-
- function child_deactivate() {
- for (var i = 0; i < childMenus.length; i++) {
- if (childMenus[i] == this) {
- dehighlight(elmCache["item"][i]);
- break;
- }
- }
- }
-
- function child_queue() {
- parentMenuSet.hideMenu(_this);
- }
-
- function child_dequeue() {
- parentMenuSet.showMenu(_this);
- }
-
- function toString() {
- var aHtml = [];
- var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : "");
-
- for (var i = 0, item = null; item = this.items[i]; i++) {
- aHtml[i] = item.toString(childMenus[i]);
- }
-
- return '<div id="' + id + '" class="' + sClassName + '">' +
- '<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">' +
- '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr>' +
- aHtml.join('') +
- '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr></table>' +
- '<div class="shadowBottom"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '<div class="shadowRight"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '<div class="background"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '</div></div>';
- }
-}
-
-
-//==================================================================================================
-// TransMenuSet
-//==================================================================================================
-// iDirection : The direction to slide out. One of TransMenu.direction.
-// iLeft : Left pixel offset of menus from actuator
-// iTop : Top pixel offset of menus from actuator
-// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
-//==================================================================================================
-TransMenuSet.registry = [];
-
-function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) {
- // public methods
- this.addMenu = addMenu;
- this.showMenu = showMenu;
- this.hideMenu = hideMenu;
- this.hide = hide;
- this.hideCurrent = hideCurrent;
-
- // initialization
- var menus = [];
- var _this = this;
- var current = null;
-
- this.index = TransMenuSet.registry.length;
- TransMenuSet.registry[this.index] = this;
-
- // method implimentations...
- function addMenu(oActuator) {
- var m = new TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, this);
- menus[menus.length] = m;
- return m;
- }
-
- function showMenu(oMenu) {
- if (oMenu != current) {
- // close currently open menu
- if (current != null) hide(current);
-
- // set current menu to this one
- current = oMenu;
-
- // if this menu is closed, open it
- oMenu.show();
- }
- else {
- // hide pending calls to close this menu
- cancelHide(oMenu);
- }
- }
-
- function hideMenu(oMenu) {
- //dbg_dump("hideMenu a " + oMenu.index);
- if (current == oMenu && oMenu.isOpen) {
- //dbg_dump("hideMenu b " + oMenu.index);
- if (!oMenu.hideTimer) scheduleHide(oMenu);
- }
- }
-
- function scheduleHide(oMenu) {
- //dbg_dump("scheduleHide " + oMenu.index);
- oMenu.onqueue();
- oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay);
- }
-
- function cancelHide(oMenu) {
- //dbg_dump("cancelHide " + oMenu.index);
- if (oMenu.hideTimer) {
- oMenu.ondequeue();
- window.clearTimeout(oMenu.hideTimer);
- oMenu.hideTimer = null;
- }
- }
-
- function hide(oMenu) {
- if (!oMenu && current) oMenu = current;
-
- if (oMenu && current == oMenu && oMenu.isOpen) {
- hideCurrent();
- }
- }
-
- function hideCurrent() {
- if (null != current) {
- cancelHide(current);
- current.hideTimer = null;
- current.hide();
- current = null;
- }
- }
-}
-
-//==================================================================================================
-// TransMenuItem (internal)
-// represents an item in a dropdown
-//==================================================================================================
-// sText : The item display text
-// sUrl : URL to load when the item is clicked
-// oParent : Menu this item is a part of
-//==================================================================================================
-function TransMenuItem(sText, sUrl, oParent) {
- this.toString = toString;
- this.text = sText;
- this.url = sUrl;
- this.parentMenu = oParent;
-
- function toString(bDingbat) {
- var sDingbat = bDingbat ? TransMenu.dingbatOff : TransMenu.spacerGif;
- var iEdgePadding = TransMenu.itemPadding + TransMenu.menuPadding;
- var sPaddingLeft = "padding:" + TransMenu.itemPadding + "px; padding-left:" + iEdgePadding + "px;"
- var sPaddingRight = "padding:" + TransMenu.itemPadding + "px; padding-right:" + iEdgePadding + "px;"
-
- return '<tr class="item"><td nowrap style="' + sPaddingLeft + '">' +
- sText + '</td><td width="14" style="' + sPaddingRight + '">' +
- '<img src="' + sDingbat + '" width="14" height="14"></td></tr>';
- }
-}
-
-
-
-
-
-
-//=====================================================================
-// Accel[erated] [an]imation object
-// change a property of an object over time in an accelerated fashion
-//=====================================================================
-// obj : reference to the object whose property you'd like to animate
-// prop : property you would like to change eg: "left"
-// to : final value of prop
-// time : time the animation should take to run
-// zip : optional. specify the zippiness of the acceleration. pick a
-// number between -1 and 1 where -1 is full decelerated, 1 is
-// full accelerated, and 0 is linear (no acceleration). default
-// is 0.
-// unit : optional. specify the units for use with prop. default is
-// "px".
-//=====================================================================
-// bezier functions lifted from the lib_animation.js file in the
-// 13th Parallel API. www.13thparallel.org
-//=====================================================================
-
-function Accelimation(from, to, time, zip) {
- if (typeof zip == "undefined") zip = 0;
- if (typeof unit == "undefined") unit = "px";
-
- this.x0 = from;
- this.x1 = to;
- this.dt = time;
- this.zip = -zip;
- this.unit = unit;
- this.timer = null;
- this.onend = new Function();
- this.onframe = new Function();
-}
-
-
-
-//=====================================================================
-// public methods
-//=====================================================================
-
-// after you create an accelimation, you call this to start it-a runnin'
-Accelimation.prototype.start = function() {
- this.t0 = new Date().getTime();
- this.t1 = this.t0 + this.dt;
- var dx = this.x1 - this.x0;
- this.c1 = this.x0 + ((1 + this.zip) * dx / 3);
- this.c2 = this.x0 + ((2 + this.zip) * dx / 3);
- Accelimation._add(this);
-}
-
-// and if you need to stop it early for some reason...
-Accelimation.prototype.stop = function() {
- Accelimation._remove(this);
-}
-
-
-
-//=====================================================================
-// private methods
-//=====================================================================
-
-// paints one frame. gets called by Accelimation._paintAll.
-Accelimation.prototype._paint = function(time) {
- if (time < this.t1) {
- var elapsed = time - this.t0;
- this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));
- }
- else this._end();
-}
-
-// ends the animation
-Accelimation.prototype._end = function() {
- Accelimation._remove(this);
- this.onframe(this.x1);
- this.onend();
-}
-
-
-
-
-//=====================================================================
-// static methods (all private)
-//=====================================================================
-
-// add a function to the list of ones to call periodically
-Accelimation._add = function(o) {
- var index = this.instances.length;
- this.instances[index] = o;
- // if this is the first one, start the engine
- if (this.instances.length == 1) {
- this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes);
- }
-}
-
-// remove a function from the list
-Accelimation._remove = function(o) {
- for (var i = 0; i < this.instances.length; i++) {
- if (o == this.instances[i]) {
- this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) );
- break;
- }
- }
- // if that was the last one, stop the engine
- if (this.instances.length == 0) {
- window.clearInterval(this.timerID);
- this.timerID = null;
- }
-}
-
-// "engine" - call each function in the list every so often
-Accelimation._paintAll = function() {
- var now = new Date().getTime();
- for (var i = 0; i < this.instances.length; i++) {
- this.instances[i]._paint(now);
- }
-}
-
-
-// Bezier functions:
-Accelimation._B1 = function(t) { return t*t*t }
-Accelimation._B2 = function(t) { return 3*t*t*(1-t) }
-Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) }
-Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) }
-
-
-//Finds the coordinates of a point at a certain stage through a bezier curve
-Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) {
- return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent);
-}
-
-
-//=====================================================================
-// static properties
-//=====================================================================
-
-Accelimation.instances = [];
-Accelimation.targetRes = 10;
-Accelimation.timerID = null;
-
-
-//=====================================================================
-// IE win memory cleanup
-//=====================================================================
-
-if (window.attachEvent) {
- var cearElementProps = [
- 'data',
- 'onmouseover',
- 'onmouseout',
- 'onmousedown',
- 'onmouseup',
- 'ondblclick',
- 'onclick',
- 'onselectstart',
- 'oncontextmenu'
- ];
-
- window.attachEvent("onunload", function() {
- var el;
- for(var d = document.all.length;d--;){
- el = document.all[d];
- for(var c = cearElementProps.length;c--;){
- el[cearElementProps[c]] = null;
- }
- }
- });
-} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/transmenuC.js b/usr/local/www/themes/pfsense_ng_fs/javascript/transmenuC.js
deleted file mode 100644
index 88626c7..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/javascript/transmenuC.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/* =================================================================================================
- * TransMenu
- * March, 2003
- * Customizable multi-level animated DHTML menus with transparency.
- * =================================================================================================
- * "Can I use this?"
- *
- * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
- * out at: http://creativecommons.org/licenses/by/2.0/
- *
- * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
- * for writing it. You may not misrepresent yourself as the author of this code.
- * =================================================================================================
- * "It's kinda hard to read, though"
- *
- * The uncompressed, commented version of this script can be found at:
- * http://youngpup.net/projects/transMenus
- * ============================================================================================== */
-TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;}
-else r=true;}}
-return r;}
-TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}}
-TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();}
-document.write(aMenuHtml.join(""));}
-function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;}
-function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;}
-function initialize(){initCache();initEvents();initSize();ready=true;}
-function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}}
-function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}}
-function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;}
-if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);}
-switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;}
-x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";}
-function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();}
-function slideFrame(x){elmCache["content"].style[pos]=x+"px";}
-function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;}
-function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;}
-else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}}
-function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}}
-_this.elmCache=elmCache;}
-function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;}
-if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;}
-elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;}
-function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;}
-function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;}
-function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}}
-function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}}
-function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}}
-function actuator_mouseover(){parentMenuSet.showMenu(_this);}
-function actuator_mouseout(){parentMenuSet.hideMenu(_this);}
-function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}}
-function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}}
-function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}}
-function child_deactivate(){for(var i=0;i<childMenus.length;i++){if(childMenus[i]==this){dehighlight(elmCache["item"][i]);break;}}}
-function child_queue(){parentMenuSet.hideMenu(_this);}
-function child_dequeue(){parentMenuSet.showMenu(_this);}
-function toString(){var aHtml=[];var sClassName="transMenu"+(oActuator.constructor!=TransMenuItem?" top":"");for(var i=0,item=null;item=this.items[i];i++){aHtml[i]=item.toString(childMenus[i]);}
-return'<div id="'+id+'" class="'+sClassName+'">'+'<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">'+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr>'+aHtml.join('')+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr></table>'+'<div class="shadowBottom"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="shadowRight"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="background"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'</div></div>';}}
-TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;}
-function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();}
-else{cancelHide(oMenu);}}
-function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}}
-function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);}
-function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}}
-function hide(oMenu){if(!oMenu&&current)oMenu=current;if(oMenu&&current==oMenu&&oMenu.isOpen){hideCurrent();}}
-function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}}
-function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;"
-var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;"
-return'<tr class="item"><td nowrap style="'+sPaddingLeft+'">'+sText+'</td><td width="14" style="'+sPaddingRight+'">'+'<img src="'+sDingbat+'" width="14" height="14"></td></tr>';}}
-function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();}
-Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);}
-Accelimation.prototype.stop=function(){Accelimation._remove(this);}
-Accelimation.prototype._paint=function(time){if(time<this.t1){var elapsed=time-this.t0;this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));}
-else this._end();}
-Accelimation.prototype._end=function(){Accelimation._remove(this);this.onframe(this.x1);this.onend();}
-Accelimation._add=function(o){var index=this.instances.length;this.instances[index]=o;if(this.instances.length==1){this.timerID=window.setInterval("Accelimation._paintAll()",this.targetRes);}}
-Accelimation._remove=function(o){for(var i=0;i<this.instances.length;i++){if(o==this.instances[i]){this.instances=this.instances.slice(0,i).concat(this.instances.slice(i+1));break;}}
-if(this.instances.length==0){window.clearInterval(this.timerID);this.timerID=null;}}
-Accelimation._paintAll=function(){var now=new Date().getTime();for(var i=0;i<this.instances.length;i++){this.instances[i]._paint(now);}}
-Accelimation._B1=function(t){return t*t*t}
-Accelimation._B2=function(t){return 3*t*t*(1-t)}
-Accelimation._B3=function(t){return 3*t*(1-t)*(1-t)}
-Accelimation._B4=function(t){return(1-t)*(1-t)*(1-t)}
-Accelimation._getBezier=function(percent,startPos,endPos,control1,control2){return endPos*this._B1(percent)+control2*this._B2(percent)+control1*this._B3(percent)+startPos*this._B4(percent);}
-Accelimation.instances=[];Accelimation.targetRes=10;Accelimation.timerID=null;
-if(window.attachEvent){var cearElementProps=['data','onmouseover','onmouseout','onmousedown','onmouseup','ondblclick','onclick','onselectstart','oncontextmenu'];window.attachEvent("onunload", function() {var el;for(var d=document.all.length;d--;){el=document.all[d];for(var c=cearElementProps.length;c--;){el[cearElementProps[c]] = null;}}});} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng_fs/jsevents/body.def b/usr/local/www/themes/pfsense_ng_fs/jsevents/body.def
deleted file mode 100644
index df461e2..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/jsevents/body.def
+++ /dev/null
@@ -1,7 +0,0 @@
-# Format: <event_name>=<jsfunction_name> !<forbidden_page_0>,<forbidden_page_1>...<forbidden_page_n>
-# where: forbidden pages are those pages that should *not* use
-# the particular JavaScript function within the JS event
-# specified below.
-# $Id: body.def,v 1.2.2.1 2007/01/17 18:43:52 sullrich Exp $
-#
-onload=tmenuinit(); !wizard.php \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng_fs/loader.js b/usr/local/www/themes/pfsense_ng_fs/loader.js
deleted file mode 100644
index c8ebe60..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/loader.js
+++ /dev/null
@@ -1,294 +0,0 @@
-//<![CDATA[
-var browser = '';
-var version = '';
-var entrance = '';
-var cond = '';
-
-// BROWSER?
-if (browser == '')
-{
- if (navigator.appName.indexOf('Microsoft') != -1)
- browser = 'IE';
- else if (navigator.appName.indexOf('Netscape') != -1)
- browser = 'Netscape';
- else
- browser = 'IE';
-}
-if (version == '')
-{
- version= navigator.appVersion;
- paren = version.indexOf('(');
- whole_version = navigator.appVersion.substring(0,paren-1);
- version = parseInt(whole_version);
-}
-
-if (browser == 'IE' && version < 7)
- document.write('<script type="text/javascript" src="/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js"></script>');
-
-document.write('<script type="text/javascript" src="/themes/pfsense_ng/javascript/niftyjsCode.js"></script>');
-
-///////////////////////////////////////////
-// jQuery code for columns / widgets part 1
-///////////////////////////////////////////
-
-var noCols = 2;
-var printed3 = false;
-var printed4 = false;
-var printed5 = false;
-var printed6 = false;
-var printed7 = false;
-var printed8 = false;
-var printed9 = false;
-var printed10 = false;
-var id;
-var noColsOnLoad = noCols; // holds a reference to the number of displayed columns on load
-var existing =[]; // array to hold each columns contents
-var specifiedColWidth = 350; // width of columns for resizing
-
-///////////////////////////////////////////
-// jQuery Widget functions
-///////////////////////////////////////////
-
-// function to connect all columns to each other to allow jQuery interaction (drag and droppable)
-function connectColumns()
-{
- jQuery('.ui-sortable').sortable({connectWith: '.ui-sortable', dropOnEmpty: true, handle: '.widgetheader', change: showSave});
-}
-
-// function to add columns due to a window resize
-function resizeAddColumns()
-{
- if(noColsOnLoad > noCols) // if a column has previously been deleted
- {
- var maxCols = maxColsToDisplay(); // the maximum we can display
-
- if(noColsOnLoad < maxCols) // if the number of columns on load is less then the maximum number of columns we can display
- maxCols = noColsOnLoad; // change the maximum number of columns as we do not want to display them all
- if( (maxCols - noCols) > 0 ) // if we need to add more columns
- {
- replaceColumn();
-
- for(var i=noCols; i<maxCols; i++)
- {
- var addCols = i +1;
- jQuery('#col' + (i).toString() ).after("<div id=\"col" + addCols + "\" style=\"float: left; padding-bottom: 40px\" class=\"ui-sortable\"> </div>");
- jQuery(existing[i]).appendTo('#col' + addCols ); // append onLoad contents
- }
- noCols = maxCols;
- for(var i=noCols; i<noColsOnLoad ; i++)
- {
- jQuery(existing[i]).appendTo('#col' + maxCols ); // append widgets from stored array to columns
- }
- correctWidgetDisplay(noCols);
- connectColumns();
- showSave();
- }
- }
-}
-
-
-// function to remove columns due to a window resize
-function resizeRmColumns()
-{
- if( noCols > 1 ) // keep at least 1 column displayed at all times
- {
- var maxCols = maxColsToDisplay();
- var noColsToDel = noCols - maxCols;
-
- if(noColsToDel>0) // if columns need deleteing
- {
- for(var i=(noCols-noColsToDel); i<noColsOnLoad; i++)
- {
- jQuery(existing[i]).appendTo('#col' + maxCols ); // append widgets from stored array to columns
- }
- for(var i=0; i<noColsToDel; i++ )
- {
- var del = noCols -i;
- jQuery('#col' + del ).remove(); // remove columns
- }
- noCols = maxCols;
- correctWidgetDisplay(noCols);
- showSave();
- }
- }
-};
-
-
-// functions to removes the highest value column current displayed and replaces it with the same column number on load ie before any resizing took place
-function replaceColumn()
-{
- var tmpReplace = noCols -1;
- jQuery('#col' + noCols ).remove();
-
- // prepend column1 as we can't add it AFTER a column as none will exist
- if(tmpReplace==0)
- jQuery("#niftyOutter").prepend("<div id=\"col1\" style=\"float: left; padding-bottom: 40px\" class=\"ui-sortable\"> </div>");
- else
- jQuery('#col' + (tmpReplace).toString() ).after("<div id=\"col" + noCols + "\" style=\"float: left; padding-bottom: 40px\" class=\"ui-sortable\"> </div>");
- jQuery(existing[tmpReplace]).appendTo('#col' + noCols);
-}
-
-
-// function to calculate & return the maximum number of columns we can display
-function maxColsToDisplay()
-{
- var niftyWidth = jQuery('#niftyOutter.fakeClass').width();
- return Math.round(niftyWidth / specifiedColWidth);
-}
-
-// function to amend the widget width
-function correctWidgetDisplay(noCols)
-{
- var percent = ( 100 / noCols ) - 0.1;
- var percentStr = percent.toString() + '%';
-
- // set all column widths
- jQuery('.ui-sortable').width(percentStr);
-}
-
-// function to insert a new column we can place content into (from saved state)
-function printColumn(newNum)
-{
- if(newNum > noCols)
- {
- noCols = newNum;
- noColsOnLoad = noCols;
- }
-
- document.write("</div><div id=\"col" + newNum + "\" style=\"float:left; padding-bottom:40px\" class=\"ui-sortable\">");
- correctWidgetDisplay(noCols);
- connectColumns();
-}
-
-// function to create the columns
-function createColumn(colPos)
-{
- if (colpos == "col3" && printed3 == false){
- printColumn(3);
- printed3=true;
- }
- else if (colpos == "col4" && printed4 == false){
- printColumn(4);
- printed4=true;
- }
- else if (colpos == "col5" && printed5 == false){
- printColumn(5);
- printed5=true;
- }
- else if (colpos == "col6" && printed6 == false){
- printColumn(6);
- printed6=true;
- }
- else if (colpos == "col7" && printed7 == false){
- printColumn(7);
- printed7=true;
- }
- else if (colpos == "col8" && printed8 == false){
- printColumn(8);
- printed8=true;
- }
- else if (colpos == "col9" && printed9 == false){
- printColumn(9);
- printed9=true;
- }
- else if (colpos == "col10" && printed10 == false){
- printColumn(10);
- printed10=true;
- }
-}
-
-// function which is called when the broswer window is resized
-jQuery( window ).resize(function()
-{
- // stop resize firing twice: http://stackoverflow.com/questions/4298612/jquery-how-to-call-resize-event-only-once-its-finished-resizing
- clearTimeout(id);
- id = setTimeout(finishedResizing, 500);
-});
-
-// function called after the browser has finished resizing
-function finishedResizing()
-{
- var colWidth = jQuery("#col1").width();
- if( colWidth < specifiedColWidth ) // Columns width is too small to display all the columns properly so we delete some columns and resize the remaining columns
- resizeRmColumns(); // Check if we can delete any columns
- else if( colWidth > specifiedColWidth ) // Columns width COULD display more columns properly
- resizeAddColumns(); // Check if we can add any columns
-}
-
-///////////////// end widget code part 1 /////////////////////////
-
-// jQuery function to define dropdown menu size
-jQuery(document).ready(function ()
-{
- var hwindow = '';
- hwindow = (jQuery(window).height()-35);
- // Force the size dropdown menu
- jQuery('#navigation ul li ul').css('max-height', hwindow);
-
- ///////////////////////////////////////////
- // jQuery code for columns / widgets part 2
- ///////////////////////////////////////////
-
- // insert add/delete column buttons
- jQuery('<br /><br /><div id=\"columnModifier\"><div style=\"float:left\"><div id =\"addCol\" style=\"float:left\"><img src=\"./themes/pfsense_ng_fs/images/icons/icon_plus.gif\" style=\"cursor:pointer\" alt=\"Click here to add a column\"/></div>&nbsp;Add column&nbsp;</div><div style=\"float:left\"><div id =\"delCol\" style=\"float:left\"><img src=\"./themes/pfsense_ng_fs/images/icons/icon_x.gif\" style=\"cursor:pointer\" alt=\"Click here to delete a column\"/></div>&nbsp;Delete column</div><div id=\"columnWarningText\" style=\"float:left; margin-left:5em\"></div><br /><br />').insertBefore('#niftyOutter.fakeClass');
-
- if ( jQuery('#columnModifier').length > 0 ) // only perform resizing on the dashboard page
- {
- // correct the css for column 2
- jQuery('#col2').css("float","left");
-
- // Make a copy of the current state of columns on page load
- for ( var i = 1; i <= noCols; i = i + 1 )
- {
- var contents = jQuery('#col' + i ).html();
- existing.push( contents );
- }
-
- finishedResizing(); // on page load correct display of columns to fit
- }
-
- // on click add a new column and change column widths
- jQuery('#addCol').click(function()
- {
- var maxCols = maxColsToDisplay();
- if( (noCols < maxCols) && (noCols < 10) )
- {
- var colAfter = noCols;
- noCols++;
-
- // insert new column
- jQuery('#col' + (colAfter).toString() ).after("<div id=\"col" + noCols + "\" style=\"float: left; padding-bottom: 40px\" class=\"ui-sortable\"> </div>");
-
- correctWidgetDisplay(noCols);
- connectColumns();
- }
- else
- jQuery('#columnWarningText').html('<b>Maximum number of columns reached for the current window size</b>').show().delay(1000).fadeOut(1000);
- });
-
- // on click delete a columns and change column widths
- jQuery('#delCol').click(function()
- {
- if( noCols > 1 )
- {
- var colToDel = noCols;
- noCols -= 1;
-
- correctWidgetDisplay(noCols);
-
- // get column contents before deletion
- var colContent = jQuery('#col' + colToDel ).html();
-
- // remove column
- jQuery('#col' + colToDel ).remove();
-
- // append deleted columns content to preceeding column
- jQuery(colContent).appendTo('#col' + noCols );
-
- showSave();
- }
- else
- jQuery('#columnWarningText').html('<b>Minimum number of columns reached for the current window size</b>').show().delay(1000).fadeOut(1000);
- });
-});
-//]]>
diff --git a/usr/local/www/themes/pfsense_ng_fs/login.css b/usr/local/www/themes/pfsense_ng_fs/login.css
deleted file mode 100644
index f8abdfc..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/login.css
+++ /dev/null
@@ -1,1127 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-/* please adjust the bgcolor to be used together with niftycorners! */
-.rtop, .artop {
- background-color: #999999;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 9px;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- background-position : center 0px;
- background-color: #999999;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
- font-size: 14px;
- color: #cccccc;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- /* background: url('images/menu.gif') no-repeat; */
- /* width: 693px; */
- position: relative;
- top: -25px;
- left: 3px;
- width: 810px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- /* width: 7.5em; */
- width: 8.77em;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #990000;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background-color: #666666;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 10px;
- padding-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 8px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-
-#login {
-/* background: #cccccc; */
- background-color: transparent;
- border: 0px solid #cccccc;
- margin: 5em auto;
- padding: 0em;
- width: 400px;
-/* filter:alpha(opacity=60);
- -moz-opacity:0.6;
- -khtml-opacity: 0.6;
- opacity: 0.6; */
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
-/* background: #ffffff; */
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 400px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -420px;
- left: 70px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- top: -300px; */
-}
-
-#login #username, #password {
- font-size: 1em;
- width: 60%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- left: 10px;
- top: -300px; */
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- text-align: center;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -20px;
- left: 170px;
-}
-
-/* loginerror box follows */
-
-#login #inputerrors {
- background-color: transparent;
- border: 0px solid #666666;
- margin: 5em auto;
- vertical-align: middle;
- padding: 0em;
- width: 330px;
- height: 50px;
- position: relative;
- top: -370px;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng_fs/menu.inc b/usr/local/www/themes/pfsense_ng_fs/menu.inc
deleted file mode 100644
index d703daf..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/menu.inc
+++ /dev/null
@@ -1,177 +0,0 @@
-<?php
-/* $Id: menu.inc,v 1.3.2.1 2007/01/17 18:43:30 sullrich Exp $ */
-/* ========================================================================== */
-/*
- menu.inc
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-require("menu.inc");
-
-define("TMENU_STUB", "
- // set up drop downs anywhere in the body of the page. I think the bottom of the page is better..
- // but you can experiment with effect on loadtime.
- if (TransMenu.isSupported()) {
-
- //==================================================================================================
- // create a set of dropdowns
- //==================================================================================================
- // the first param should always be down, as it is here
- //
- // The second and third param are the top and left offset positions of the menus from their actuators
- // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use
- // something like -5, 5
- //
- // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner
- // of the actuator from which to measure the offset positions above. Here we are saying we want the
- // menu to appear directly below the bottom left corner of the actuator
- //==================================================================================================
- var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft);
-
- //==================================================================================================
- // create a dropdown menu
- //==================================================================================================
- // the first parameter should be the HTML element which will act actuator for the menu
- //==================================================================================================
-
- @@MENU_DEFINITIONS@@
-
- //==================================================================================================
- // write drop downs into page
- //==================================================================================================
- // this method writes all the HTML for the menus into the page with document.write(). It must be
- // called within the body of the HTML page.
- //==================================================================================================
- TransMenu.renderAll();
- }
-");
-
-class NervecenterMenu extends Menu {
- private $menuJScript = "NOT-SET";
- private $menuJScriptEvents = "NOT-SET";
- private $menuID = "NOT-SET";
-
- public function __construct($identification = "", $filename = "", Component $c = NULL) {
- parent::__construct($identification, $filename, $c);
-
- $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
- $this->menuID = $id;
-
- if ($this->hasParent()) {
- $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n";
- }
- } // end __construct
-
- public function getMenuID() {
- return $this->menuID;
- }
-
- public function setMenuID($myMenuID) {
- $this->menuID = $myMenuID;
- }
-
- public function getMenuJScript() {
- $childJScript = "";
- foreach ($this->getChildren() as $component) {
- $childJScript .= $component->getMenuJScript();
- }
-
- if (! $this->hasParent()) {
- $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB);
- } else {
- $this->menuJScript .= "\n$childJScript\n";
- }
-
- return $this->menuJScript;
- }
-
- public function getMenuJScriptEvents() {
- return $this->menuJScriptEvents;
- }
-
- public function __toString() {
- if (! $this->hasParent()) {
- $menuMarkup =<<<EOD
- <div id="menu">
- @@CHILD_ELEMENTS@@
- </div>
-
-EOD;
- } else {
- $name = gettext($this->getID());
- $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
-
- $menuMarkup =<<<EOD
- <a id="{$id}" href="#">{$name}</a>
- @@CHILD_ELEMENTS@@
-EOD;
- }
-
- $childMarkup = "";
- foreach ($this->getChildren() as $component) {
- $childMarkup .= $component;
- }
-
- $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup);
-
- return $menuMarkup;
- }
-}
-
-class NervecenterMenuItem extends MenuItem {
- private $menuJScript = "NOT-SET";
- private $menuJScriptEvents = "NOT-SET";
-
- public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) {
- parent::__construct($identification, $filename, $href, $c);
-
- $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}";
- $name = gettext($this->getID());
- $file = $this->getFile();
-
- $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n");
- }
-
- public function getMenuJScript() {
- return $this->menuJScript;
- }
-
- public function getMenuJScriptEvents() {
- return $this->menuJScriptEvents;
- }
-
- public function __toString() {
- return "";
- }
-}
-
-?>
diff --git a/usr/local/www/themes/pfsense_ng_fs/new_tab_menu.css b/usr/local/www/themes/pfsense_ng_fs/new_tab_menu.css
deleted file mode 100644
index 04c4cf2..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/new_tab_menu.css
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- new_tab_menu.css
- part of pfSense
- Copyright (C) 2010-2011 Robert Zelaya
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-
- Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
- The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
-
- <tr>
- <td>
- <?php
- $tab_array_indent = 0; // move to the line in px
- $tab_array_space = 1; // space betwen lines in px
- $tab_array_char_limit = 82; // number or chr before the drop down box
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
-
-*/
-
-.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
-
-.newtabmenu li{float:left; margin-right:2px; text-align: center;}
-.newtabmenu a:link, .newtabmenu a:visited{
- background:url(images/new_tab_menu.png) right 45px;
- color:#ffffff; /* noactive font */
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- font-weight:bold;
- font-size:.9em;
- height:20px;
- line-height:20px;
- text-decoration:none;
-}
-.newtabmenu a span{
- background:url(images/new_tab_menu.png) left 45px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- height:20px;
- margin-right:7px;
- padding-left:7px;
-}
-.newtabmenu a:hover{
- background:url(images/new_tab_menu.png) right 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- color:#ffffff; /* hover over font */
-}
-.newtabmenu a:hover span{
- background:url(images/new_tab_menu.png) left 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
-}
-
-/* -------------------------------- */
-/* ACTIVE ELEMENTS */
-.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
- color:#000000; /* active font */
- background:url(images/new_tab_menu.png) right 0 no-repeat;
-}
-.newtabmenu_active a span, .newtabmenu_active a:hover span{
- background:url(images/new_tab_menu.png) left 0 no-repeat;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng_fs/no_big_logo b/usr/local/www/themes/pfsense_ng_fs/no_big_logo
deleted file mode 100644
index 6e5c70d..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/no_big_logo
+++ /dev/null
@@ -1 +0,0 @@
-NO! DONT! \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng_fs/rrdcolors.inc.php b/usr/local/www/themes/pfsense_ng_fs/rrdcolors.inc.php
deleted file mode 100644
index dcb7a39..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/rrdcolors.inc.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/* $Id$ */
-/*
- rrdcolors.inc.php
- Part of pfSense
- Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/* This file is included by the RRD graphing page and sets the colors */
-
-/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* 95th Percentile Lines Out, In */
-$colortraffic95 = array('660000', 'FF0000');
-
-/* State Table pfrate, pfstates, pfnat, srcip, dstip */
-$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
-
-/* Processor Usage user, nice, system, int, processes */
-$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
-
-/* Memory Usage active, inact, free, cache, wire */
-$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
-
-/* MBUF Usage current, cache, total, max */
-$colormbuf = array('0080FF','00E344','FF0000','000000');
-
-/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
-$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
-$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
-/* Quality Graph Loss */
-$colorqualityloss = 'ee0000';
-
-/* Wireless Graph SNR, Rate, Channel*/
-/* Cellular Graph RSSI, */
-$colorwireless = array('333333','a83c3c','999999');
-
-/* SPAMD Times min area, avg area, max area, Time line */
-$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
-/* SPAMD Connections max area, min area, min line, max line, avg line */
-$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
-
-/* OpenVPN Users Online Users */
-$colorvpnusers = array('990000');
-
-/* Captive Portal Total Users Total Users */
-/* Captive Portal Concurrent Concurrent Users */
-$colorcaptiveportalusers = array('990000');
-
-?>
diff --git a/usr/local/www/themes/pfsense_ng_fs/styles/jquery-ui-1.11.1.css b/usr/local/www/themes/pfsense_ng_fs/styles/jquery-ui-1.11.1.css
deleted file mode 100644
index 8a8c54f..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/styles/jquery-ui-1.11.1.css
+++ /dev/null
@@ -1,1226 +0,0 @@
-/*! jQuery UI - v1.11.1 - 2014-09-22
-* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden {
- display: none;
-}
-.ui-helper-hidden-accessible {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
-}
-.ui-helper-reset {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- line-height: 1.3;
- text-decoration: none;
- font-size: 100%;
- list-style: none;
-}
-.ui-helper-clearfix:before,
-.ui-helper-clearfix:after {
- content: "";
- display: table;
- border-collapse: collapse;
-}
-.ui-helper-clearfix:after {
- clear: both;
-}
-.ui-helper-clearfix {
- min-height: 0; /* support: IE7 */
-}
-.ui-helper-zfix {
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- position: absolute;
- opacity: 0;
- filter:Alpha(Opacity=0); /* support: IE8 */
-}
-
-.ui-front {
- z-index: 100;
-}
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled {
- cursor: default !important;
-}
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- display: block;
- text-indent: -99999px;
- overflow: hidden;
- background-repeat: no-repeat;
-}
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-.ui-draggable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable {
- position: relative;
-}
-.ui-resizable-handle {
- position: absolute;
- font-size: 0.1px;
- display: block;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
- display: none;
-}
-.ui-resizable-n {
- cursor: n-resize;
- height: 7px;
- width: 100%;
- top: -5px;
- left: 0;
-}
-.ui-resizable-s {
- cursor: s-resize;
- height: 7px;
- width: 100%;
- bottom: -5px;
- left: 0;
-}
-.ui-resizable-e {
- cursor: e-resize;
- width: 7px;
- right: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-w {
- cursor: w-resize;
- width: 7px;
- left: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-se {
- cursor: se-resize;
- width: 12px;
- height: 12px;
- right: 1px;
- bottom: 1px;
-}
-.ui-resizable-sw {
- cursor: sw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- bottom: -5px;
-}
-.ui-resizable-nw {
- cursor: nw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- top: -5px;
-}
-.ui-resizable-ne {
- cursor: ne-resize;
- width: 9px;
- height: 9px;
- right: -5px;
- top: -5px;
-}
-.ui-selectable {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-selectable-helper {
- position: absolute;
- z-index: 100;
- border: 1px dotted black;
-}
-.ui-sortable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-accordion .ui-accordion-header {
- display: block;
- cursor: pointer;
- position: relative;
- margin: 2px 0 0 0;
- padding: .5em .5em .5em .7em;
- min-height: 0; /* support: IE7 */
- font-size: 100%;
-}
-.ui-accordion .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
- position: absolute;
- left: .5em;
- top: 50%;
- margin-top: -8px;
-}
-.ui-accordion .ui-accordion-content {
- padding: 1em 2.2em;
- border-top: 0;
- overflow: auto;
-}
-.ui-autocomplete {
- position: absolute;
- top: 0;
- left: 0;
- cursor: default;
-}
-.ui-button {
- display: inline-block;
- position: relative;
- padding: 0;
- line-height: normal;
- margin-right: .1em;
- cursor: pointer;
- vertical-align: middle;
- text-align: center;
- overflow: visible; /* removes extra width in IE */
-}
-.ui-button,
-.ui-button:link,
-.ui-button:visited,
-.ui-button:hover,
-.ui-button:active {
- text-decoration: none;
-}
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
- width: 2.2em;
-}
-/* button elements seem to need a little more width */
-button.ui-button-icon-only {
- width: 2.4em;
-}
-.ui-button-icons-only {
- width: 3.4em;
-}
-button.ui-button-icons-only {
- width: 3.7em;
-}
-
-/* button text element */
-.ui-button .ui-button-text {
- display: block;
- line-height: normal;
-}
-.ui-button-text-only .ui-button-text {
- padding: .4em 1em;
-}
-.ui-button-icon-only .ui-button-text,
-.ui-button-icons-only .ui-button-text {
- padding: .4em;
- text-indent: -9999999px;
-}
-.ui-button-text-icon-primary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 1em .4em 2.1em;
-}
-.ui-button-text-icon-secondary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 2.1em .4em 1em;
-}
-.ui-button-text-icons .ui-button-text {
- padding-left: 2.1em;
- padding-right: 2.1em;
-}
-/* no icon support for input elements, provide padding by default */
-input.ui-button {
- padding: .4em 1em;
-}
-
-/* button icon element(s) */
-.ui-button-icon-only .ui-icon,
-.ui-button-text-icon-primary .ui-icon,
-.ui-button-text-icon-secondary .ui-icon,
-.ui-button-text-icons .ui-icon,
-.ui-button-icons-only .ui-icon {
- position: absolute;
- top: 50%;
- margin-top: -8px;
-}
-.ui-button-icon-only .ui-icon {
- left: 50%;
- margin-left: -8px;
-}
-.ui-button-text-icon-primary .ui-button-icon-primary,
-.ui-button-text-icons .ui-button-icon-primary,
-.ui-button-icons-only .ui-button-icon-primary {
- left: .5em;
-}
-.ui-button-text-icon-secondary .ui-button-icon-secondary,
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
- right: .5em;
-}
-
-/* button sets */
-.ui-buttonset {
- margin-right: 7px;
-}
-.ui-buttonset .ui-button {
- margin-left: 0;
- margin-right: -.3em;
-}
-
-/* workarounds */
-/* reset extra padding in Firefox, see h5bp.com/l */
-input.ui-button::-moz-focus-inner,
-button.ui-button::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-.ui-datepicker {
- width: 17em;
- padding: .2em .2em 0;
- display: none;
-}
-.ui-datepicker .ui-datepicker-header {
- position: relative;
- padding: .2em 0;
-}
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-next {
- position: absolute;
- top: 2px;
- width: 1.8em;
- height: 1.8em;
-}
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
- top: 1px;
-}
-.ui-datepicker .ui-datepicker-prev {
- left: 2px;
-}
-.ui-datepicker .ui-datepicker-next {
- right: 2px;
-}
-.ui-datepicker .ui-datepicker-prev-hover {
- left: 1px;
-}
-.ui-datepicker .ui-datepicker-next-hover {
- right: 1px;
-}
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
- display: block;
- position: absolute;
- left: 50%;
- margin-left: -8px;
- top: 50%;
- margin-top: -8px;
-}
-.ui-datepicker .ui-datepicker-title {
- margin: 0 2.3em;
- line-height: 1.8em;
- text-align: center;
-}
-.ui-datepicker .ui-datepicker-title select {
- font-size: 1em;
- margin: 1px 0;
-}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year {
- width: 45%;
-}
-.ui-datepicker table {
- width: 100%;
- font-size: .9em;
- border-collapse: collapse;
- margin: 0 0 .4em;
-}
-.ui-datepicker th {
- padding: .7em .3em;
- text-align: center;
- font-weight: bold;
- border: 0;
-}
-.ui-datepicker td {
- border: 0;
- padding: 1px;
-}
-.ui-datepicker td span,
-.ui-datepicker td a {
- display: block;
- padding: .2em;
- text-align: right;
- text-decoration: none;
-}
-.ui-datepicker .ui-datepicker-buttonpane {
- background-image: none;
- margin: .7em 0 0 0;
- padding: 0 .2em;
- border-left: 0;
- border-right: 0;
- border-bottom: 0;
-}
-.ui-datepicker .ui-datepicker-buttonpane button {
- float: right;
- margin: .5em .2em .4em;
- cursor: pointer;
- padding: .2em .6em .3em .6em;
- width: auto;
- overflow: visible;
-}
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
- float: left;
-}
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi {
- width: auto;
-}
-.ui-datepicker-multi .ui-datepicker-group {
- float: left;
-}
-.ui-datepicker-multi .ui-datepicker-group table {
- width: 95%;
- margin: 0 auto .4em;
-}
-.ui-datepicker-multi-2 .ui-datepicker-group {
- width: 50%;
-}
-.ui-datepicker-multi-3 .ui-datepicker-group {
- width: 33.3%;
-}
-.ui-datepicker-multi-4 .ui-datepicker-group {
- width: 25%;
-}
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
- border-left-width: 0;
-}
-.ui-datepicker-multi .ui-datepicker-buttonpane {
- clear: left;
-}
-.ui-datepicker-row-break {
- clear: both;
- width: 100%;
- font-size: 0;
-}
-
-/* RTL support */
-.ui-datepicker-rtl {
- direction: rtl;
-}
-.ui-datepicker-rtl .ui-datepicker-prev {
- right: 2px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next {
- left: 2px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
- right: 1px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
- left: 1px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
- clear: right;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
- float: left;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
-.ui-datepicker-rtl .ui-datepicker-group {
- float: right;
-}
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
- border-right-width: 0;
- border-left-width: 1px;
-}
-.ui-dialog {
- overflow: hidden;
- position: absolute;
- top: 0;
- left: 0;
- padding: .2em;
- outline: 0;
-}
-.ui-dialog .ui-dialog-titlebar {
- padding: .4em 1em;
- position: relative;
-}
-.ui-dialog .ui-dialog-title {
- float: left;
- margin: .1em 0;
- white-space: nowrap;
- width: 90%;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.ui-dialog .ui-dialog-titlebar-close {
- position: absolute;
- right: .3em;
- top: 50%;
- width: 20px;
- margin: -10px 0 0 0;
- padding: 1px;
- height: 20px;
-}
-.ui-dialog .ui-dialog-content {
- position: relative;
- border: 0;
- padding: .5em 1em;
- background: none;
- overflow: auto;
-}
-.ui-dialog .ui-dialog-buttonpane {
- text-align: left;
- border-width: 1px 0 0 0;
- background-image: none;
- margin-top: .5em;
- padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
- float: right;
-}
-.ui-dialog .ui-dialog-buttonpane button {
- margin: .5em .4em .5em 0;
- cursor: pointer;
-}
-.ui-dialog .ui-resizable-se {
- width: 12px;
- height: 12px;
- right: -5px;
- bottom: -5px;
- background-position: 16px 16px;
-}
-.ui-draggable .ui-dialog-titlebar {
- cursor: move;
-}
-.ui-menu {
- list-style: none;
- padding: 0;
- margin: 0;
- display: block;
- outline: none;
-}
-.ui-menu .ui-menu {
- position: absolute;
-}
-.ui-menu .ui-menu-item {
- position: relative;
- margin: 0;
- padding: 3px 1em 3px .4em;
- cursor: pointer;
- min-height: 0; /* support: IE7 */
- /* support: IE10, see #8844 */
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
-}
-.ui-menu .ui-menu-divider {
- margin: 5px 0;
- height: 0;
- font-size: 0;
- line-height: 0;
- border-width: 1px 0 0 0;
-}
-.ui-menu .ui-state-focus,
-.ui-menu .ui-state-active {
- margin: -1px;
-}
-
-/* icon support */
-.ui-menu-icons {
- position: relative;
-}
-.ui-menu-icons .ui-menu-item {
- padding-left: 2em;
-}
-
-/* left-aligned */
-.ui-menu .ui-icon {
- position: absolute;
- top: 0;
- bottom: 0;
- left: .2em;
- margin: auto 0;
-}
-
-/* right-aligned */
-.ui-menu .ui-menu-icon {
- left: auto;
- right: 0;
-}
-.ui-progressbar {
- height: 1em;
- text-align: left;
- overflow: hidden;
-}
-.ui-progressbar .ui-progressbar-value {
- margin: -1px;
- height: 100%;
- background-color: #990000;
-}
-.ui-progressbar .ui-progressbar-overlay {
- background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
- height: 100%;
- filter: alpha(opacity=25); /* support: IE8 */
- opacity: 0.25;
-}
-.ui-progressbar-indeterminate .ui-progressbar-value {
- background-image: none;
-}
-.ui-selectmenu-menu {
- padding: 0;
- margin: 0;
- position: absolute;
- top: 0;
- left: 0;
- display: none;
-}
-.ui-selectmenu-menu .ui-menu {
- overflow: auto;
- /* Support: IE7 */
- overflow-x: hidden;
- padding-bottom: 1px;
-}
-.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
- font-size: 1em;
- font-weight: bold;
- line-height: 1.5;
- padding: 2px 0.4em;
- margin: 0.5em 0 0 0;
- height: auto;
- border: 0;
-}
-.ui-selectmenu-open {
- display: block;
-}
-.ui-selectmenu-button {
- display: inline-block;
- overflow: hidden;
- position: relative;
- text-decoration: none;
- cursor: pointer;
-}
-.ui-selectmenu-button span.ui-icon {
- right: 0.5em;
- left: auto;
- margin-top: -8px;
- position: absolute;
- top: 50%;
-}
-.ui-selectmenu-button span.ui-selectmenu-text {
- text-align: left;
- padding: 0.4em 2.1em 0.4em 1em;
- display: block;
- line-height: 1.4;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.ui-slider {
- position: relative;
- text-align: left;
-}
-.ui-slider .ui-slider-handle {
- position: absolute;
- z-index: 2;
- width: 1.2em;
- height: 1.2em;
- cursor: default;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-slider .ui-slider-range {
- position: absolute;
- z-index: 1;
- font-size: .7em;
- display: block;
- border: 0;
- background-position: 0 0;
-}
-
-/* support: IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
- filter: inherit;
-}
-
-.ui-slider-horizontal {
- height: .8em;
-}
-.ui-slider-horizontal .ui-slider-handle {
- top: -.3em;
- margin-left: -.6em;
-}
-.ui-slider-horizontal .ui-slider-range {
- top: 0;
- height: 100%;
-}
-.ui-slider-horizontal .ui-slider-range-min {
- left: 0;
-}
-.ui-slider-horizontal .ui-slider-range-max {
- right: 0;
-}
-
-.ui-slider-vertical {
- width: .8em;
- height: 100px;
-}
-.ui-slider-vertical .ui-slider-handle {
- left: -.3em;
- margin-left: 0;
- margin-bottom: -.6em;
-}
-.ui-slider-vertical .ui-slider-range {
- left: 0;
- width: 100%;
-}
-.ui-slider-vertical .ui-slider-range-min {
- bottom: 0;
-}
-.ui-slider-vertical .ui-slider-range-max {
- top: 0;
-}
-.ui-spinner {
- position: relative;
- display: inline-block;
- overflow: hidden;
- padding: 0;
- vertical-align: middle;
-}
-.ui-spinner-input {
- border: none;
- background: none;
- color: inherit;
- padding: 0;
- margin: .2em 0;
- vertical-align: middle;
- margin-left: .4em;
- margin-right: 22px;
-}
-.ui-spinner-button {
- width: 16px;
- height: 50%;
- font-size: .5em;
- padding: 0;
- margin: 0;
- text-align: center;
- position: absolute;
- cursor: default;
- display: block;
- overflow: hidden;
- right: 0;
-}
-/* more specificity required here to override default borders */
-.ui-spinner a.ui-spinner-button {
- border-top: none;
- border-bottom: none;
- border-right: none;
-}
-/* vertically center icon */
-.ui-spinner .ui-icon {
- position: absolute;
- margin-top: -8px;
- top: 50%;
- left: 0;
-}
-.ui-spinner-up {
- top: 0;
-}
-.ui-spinner-down {
- bottom: 0;
-}
-
-/* TR overrides */
-.ui-spinner .ui-icon-triangle-1-s {
- /* need to fix icons sprite */
- background-position: -65px -16px;
-}
-.ui-tabs {
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
- padding: .2em;
-}
-.ui-tabs .ui-tabs-nav {
- margin: 0;
- padding: .2em .2em 0;
-}
-.ui-tabs .ui-tabs-nav li {
- list-style: none;
- float: left;
- position: relative;
- top: 0;
- margin: 1px .2em 0 0;
- border-bottom-width: 0;
- padding: 0;
- white-space: nowrap;
-}
-.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
- float: left;
- padding: .5em 1em;
- text-decoration: none;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
- margin-bottom: -1px;
- padding-bottom: 1px;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
- cursor: text;
-}
-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
- cursor: pointer;
-}
-.ui-tabs .ui-tabs-panel {
- display: block;
- border-width: 0;
- padding: 1em 1.4em;
- background: none;
-}
-.ui-tooltip {
- padding: 8px;
- position: absolute;
- z-index: 9999;
- max-width: 300px;
- -webkit-box-shadow: 0 0 5px #aaa;
- box-shadow: 0 0 5px #aaa;
-}
-body .ui-tooltip {
- border-width: 2px;
-}
-
-/* Component containers
-----------------------------------*/
-.ui-widget {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1.1em;
-}
-.ui-widget .ui-widget {
- font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1em;
-}
-.ui-widget-content {
- border: 1px solid #aaaaaa;
- background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
- color: #333333;
-}
-.ui-widget-content a {
- color: #333333;
-}
-.ui-widget-header {
- border: 1px solid #bbbbbb;
- /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
- color: #444444;
- font-weight: bold;
-}
-.ui-widget-header a {
- color: #444444;
-}
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default {
- border: 1px solid #cccccc;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #3383bb;
-}
-.ui-state-default a,
-.ui-state-default a:link,
-.ui-state-default a:visited {
- color: #3383bb;
- text-decoration: none;
-}
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus {
- border: 1px solid #bbbbbb;
- background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #599fcf;
-}
-.ui-state-hover a,
-.ui-state-hover a:hover,
-.ui-state-hover a:link,
-.ui-state-hover a:visited,
-.ui-state-focus a,
-.ui-state-focus a:hover,
-.ui-state-focus a:link,
-.ui-state-focus a:visited {
- color: #599fcf;
- text-decoration: none;
-}
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active {
- border: 1px solid #999999;
- background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #ffffff;
-}
-.ui-state-active a,
-.ui-state-active a:link,
-.ui-state-active a:visited {
- color: #ffffff;
- text-decoration: none;
-}
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight,
-.ui-widget-header .ui-state-highlight {
- border: 1px solid #ffffff;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
- color: #444444;
-}
-.ui-state-highlight a,
-.ui-widget-content .ui-state-highlight a,
-.ui-widget-header .ui-state-highlight a {
- color: #444444;
-}
-.ui-state-error,
-.ui-widget-content .ui-state-error,
-.ui-widget-header .ui-state-error {
- border: 1px solid #c0402a;
- background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
- color: #ffffff;
-}
-.ui-state-error a,
-.ui-widget-content .ui-state-error a,
-.ui-widget-header .ui-state-error a {
- color: #ffffff;
-}
-.ui-state-error-text,
-.ui-widget-content .ui-state-error-text,
-.ui-widget-header .ui-state-error-text {
- color: #ffffff;
-}
-.ui-priority-primary,
-.ui-widget-content .ui-priority-primary,
-.ui-widget-header .ui-priority-primary {
- font-weight: bold;
-}
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary,
-.ui-widget-header .ui-priority-secondary {
- opacity: .7;
- filter:Alpha(Opacity=70); /* support: IE8 */
- font-weight: normal;
-}
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled,
-.ui-widget-header .ui-state-disabled {
- opacity: .35;
- filter:Alpha(Opacity=35); /* support: IE8 */
- background-image: none;
-}
-.ui-state-disabled .ui-icon {
- filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
-}
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- width: 16px;
- height: 16px;
-}
-.ui-icon,
-.ui-widget-content .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-widget-header .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-state-default .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
-}
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-active .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
-}
-.ui-state-highlight .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
-}
-
-/* positioning */
-.ui-icon-blank { background-position: 16px 16px; }
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-on { background-position: -96px -144px; }
-.ui-icon-radio-off { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
- border-top-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
- border-top-right-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
- border-bottom-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
- border-bottom-right-radius: 6px;
-}
-
-/* Overlays */
-.ui-widget-overlay {
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
- opacity: .8;
- filter: Alpha(Opacity=80); /* support: IE8 */
-}
-.ui-widget-shadow {
- margin: -4px 0 0 -4px;
- padding: 4px;
- background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
- opacity: .6;
- filter: Alpha(Opacity=60); /* support: IE8 */
- border-radius: 0pxdow;
-}
diff --git a/usr/local/www/themes/pfsense_ng_fs/styles/menustyles.css b/usr/local/www/themes/pfsense_ng_fs/styles/menustyles.css
deleted file mode 100644
index 06b3c7a..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/styles/menustyles.css
+++ /dev/null
@@ -1,44 +0,0 @@
-#navigation {
- /* border:1px solid black; */
- width: 98%;
- vertical-align: middle;
- height: 16px;
- padding-top: 4px;
- }
-
-#menu {
- /* background: #990000; */
- /* border-bottom:1px solid white; */
- padding: 0 0 0 0;
- width: 98%;
- vertical-align: middle;
- height: 16px;
- }
-#menu a {
- padding: 2px 28px 4px 28px;
- text-decoration: none;
- font-weight: bold;
- font-size: 1.0em;
- color: #FFFFFF;
- width: 08%;
- height: 16px;
- }
-#menu a.hover {
- background: #AF2020;
- }
-#menu span {
- display: none;
- }
-
-#subnav {
- font-size: 10px;
- margin-bottom: 2em;
- }
-#subnav a {
- color: #FF0000; /* #FB3B00; */
- margin-right: 1em;
- }
-#subnav span {
- color: silver;
- margin-right: 1em;
- }
diff --git a/usr/local/www/themes/pfsense_ng_fs/styles/transmenu.css b/usr/local/www/themes/pfsense_ng_fs/styles/transmenu.css
deleted file mode 100644
index f683574..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/styles/transmenu.css
+++ /dev/null
@@ -1,75 +0,0 @@
-/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */
-.transMenu {
- position:absolute;
- overflow:hidden;
- left:-1000px;
- top:-1000px;
- }
-
-/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */
-.transMenu .content {
- position:absolute;
- }
-
-/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */
-.transMenu .items {
- position:relative;
- left:0px; top:0px;
- z-index:2;
- }
-
-.transMenu.top .items {
- border-top:none;
- }
-
-/* each TR.item is one menu item */
-.transMenu .item {
- color: #FFFFFF; /* #336; */
- font-size: 1.1em;
- font-weight: normal;
- font-family:sans-serif;
- text-decoration:none;
- /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */
- border:none;
- cursor:pointer;
- cursor:hand;
- }
-
-/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */
-/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */
-.transMenu .background {
- position:absolute;
- left:0px; top:0px;
- z-index:1;
- -moz-opacity:.8;
- filter:alpha(opacity=80);
- }
-
-/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */
-.transMenu .shadowRight {
- position:absolute;
- z-index:3;
- top:3px; width:2px;
- -moz-opacity:.4;
- filter:alpha(opacity=40);
- }
-
-/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */
-.transMenu .shadowBottom {
- position:absolute;
- z-index:1;
- left:3px; height:2px;
- -moz-opacity:.4;
- filter:alpha(opacity=40);
- }
-
-/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */
-.transMenu .item.hover {
- background:#fdfdfd;
- color:black;
- }
-
-/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */
-.transMenu .item img {
- margin-left:10px;
- } \ No newline at end of file
diff --git a/usr/local/www/themes/pfsense_ng_fs/wizard.css b/usr/local/www/themes/pfsense_ng_fs/wizard.css
deleted file mode 100644
index f2c9f3e..0000000
--- a/usr/local/www/themes/pfsense_ng_fs/wizard.css
+++ /dev/null
@@ -1,1117 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-
-}
-
-.nowrap { white-space: nowrap; }
-
-/* please adjust the bgcolor to be used together with niftycorners! */
-.rtop, .artop {
- background-color: #999999;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 9px;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- /* background: url('images/background.png') no-repeat; */
- background-position : center 0px;
- background-color: #999999;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
- font-size: 14px;
- color: #cccccc;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- /* background: url('images/menu.gif') no-repeat; */
- /* width: 693px; */
- position: relative;
- top: -25px;
- left: 3px;
- width: 810px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- /* width: 7.5em; */
- width: 8.77em;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #990000;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background-color: #666666;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 10px;
- padding-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 8px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-#login {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 340px;
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 50px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login #username, #password {
- font-size: 1em;
- width: 60%;
- padding: 3px;
- margin: 0em;
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-.infobox {
- width:100%;
-}
-
-.infoboxsave {
- padding-right: 10px;
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-.inputerrorsleft {
- background-color: #990000;
- width: 36px;
-}
-
-.inputerrorsright {
- background-color: #FFD9D1;
- color: #000000;
- font-size: 11px;
- padding-left: 8px;
- padding-top: 6px;
-}
diff --git a/usr/local/www/themes/the_wall/all.css b/usr/local/www/themes/the_wall/all.css
deleted file mode 100644
index 35ddbd4..0000000
--- a/usr/local/www/themes/the_wall/all.css
+++ /dev/null
@@ -1,1308 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, sans-serif;
- font-size: 0.9em;
-
-}
-
-.nowrap { white-space: nowrap; }
-
-.addgatewaybox {
- background-color: #990000;
- border-style: none none none none;
- width: 225px;
-}
-
-.infobox {
- width:100%;
-}
-
-.infoboxsave {
- padding-right: 10px;
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-.inputerrorsleft {
- background-color: #990000;
- width: 36px;
- text-align: center;
-}
-
-.inputerrorsright {
- background-color: #FFD9D1;
- color: #000000;
- font-size: 11px;
- padding-left: 8px;
- padding-top: 6px;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 220px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 11px;
- font-family: "Trebuchet MS", sans-serif;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- background: url('images/background.jpg') repeat-x; background-attachment:fixed;
- background-position : center 0px;
- background-color: #999999;
-}
-
-a:link{color: #660000;}
-a:visited{color: #660000;}
-a:active{color: #660000;}
-a:hover{color: #660000;}
-
-
-
-
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 202px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 90px;
- width: 190px;
- z-index: 1;
- top: 55px;
- left: -5px;
- padding-top: 45px;
- padding-left: 0px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 128px;
- left: 230px;
- font-size: 14px;
- color: #000000;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -21px;
- left: -20px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 170px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.0em;
- font-weight: normal;
- font-family: Verdana;
- font-weight: bold;
- color: #000000;
- padding-left: 5px;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 170px;
- height: 16px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-#content {
- position: relative;
- top: -5px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background: url('images/horizontal.png') repeat-y;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -5px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- position: relative;
- top: -25px;
- left: 3px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 5px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- width: 80px;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-/* dropdownmenu mainitems textcolor */
-#navigation ul li {
- background-color: transparent;
- font-size:13px;
- color: #000000;
-}
-/* dropdownmenubackground */
-#navigation ul li ul li {
- border: 0px solid #999999;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #999999;
- color: #FFF;
- filter:alpha(opacity=90);
- -moz-opacity:0.9;
- -khtml-opacity: 0.9;
- opacity: 0.9;
-}
-#navigation ul li ul li:hover {
- background-color: #cccccc;
-}
-/* textcolor in dropdownmenu */
-#navigation li li a {
- display: block;
- padding-left: 5px;
- margin-right: 10px;
- color: #000000;
-}
-/* textcolor mouseover in dropdownmenu */
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
- color: #000000;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listrborder {
- background-color: #FFFFFF;
- border-left: 1px solid #999999;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- color: #FFFFFF;
- font-size: 11px;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 6px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #DDDDDD;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 6px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-#login {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 340px;
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 50px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
- margin: 0px auto;
- background: url('images/background.jpg') repeat-x; background-attachment:fixed;
- background-position : center 0px;
- background-color: #999999;
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login #username, #password, #password2 {
- font-size: small;
- width: 60%;
- padding-left: 19px;
- padding: 3px;
- margin: 0em;
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-/* Widget CSS */
-.widgetsubheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #B1B1B1;
- padding-right: 6px;
- padding-left: 6px;
- color: #000000;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetheader {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.widgetdiv{
- margin:5px;
- padding: 5px;
- background:#CCCCCC;
-}
-.widgetconfigdiv{
- background:#BBBBBB;
- font-size: 11px;
- color: #000000;
- padding-right: 5px;
- padding-left: 5px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-
-div#log div.log-entry-mini {
- clear: both;
-}
-
-div#log div.log-entry-mini span {
- padding: 2px 2px 2px 2px;
- padding-left: 6px;
-}
-
-div#log span.log-action-mini-header,
-div#log span.log-time-mini-header,
-div#log span.log-interface-mini-header,
-div#log span.log-source-mini-header,
-div#log span.log-destination-mini-header,
-div#log span.log-protocol-mini-header {
- float: left;
- text-align: left;
- background-color: #B1B1B1;
- font-size: 12px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-time-mini,
-div#log span.log-interface-mini,
-div#log span.log-source-mini,
-div#log span.log-destination-mini,
-div#log span.log-protocol-mini {
- float: left;
- text-align: left;
- background-color: #FFFFFF;
- font-size: 11px;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-action-mini,
-div#log span.log-action-mini-header {
- width: 6%;
-}
-
-div#log span.log-time-mini,
-div#log span.log-time-mini-header {
- width: 19%;
-}
-
-div#log span.log-interface-mini,
-div#log span.log-interface-mini-header {
- width: 8%;
-}
-
-div#log span.log-source-mini,
-div#log span.log-source-mini-header {
- width: 23%;
-}
-
-div#log span.log-destination-mini,
-div#log span.log-destination-mini-header {
- width: 31%;
-}
-
-div#log span.log-protocol-mini,
-div#log span.log-protocol-mini-header {
- width: 8%;
- border-right: 1px solid #999;
-}
-
-/* Sortable tables */
-table.sortable thead {
- cursor: default;
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-
-/*thermal_sensors widget styles*/
-
-.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
-.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
-.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
- background-color: LimeGreen;
- border-top-width: 2px; border-top-color: Lime;
- border-left-width: 0px;
- border-right-width: 0px;
- border-bottom-width: 2px; border-bottom-color: Green;
-}
-.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
-.thermalSensorText { float: left; height: 20px; top: 3px; }
-.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
-
-.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
-
-.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
-.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
-
-.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
-
-/* widget textarea styles - full width */
-.textarea_widget {
- width: 100%;
- resize:vertical;
- -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
- -moz-box-sizing: border-box; /* Firefox, other Gecko */
- box-sizing: border-box; /* IE 8+ */
-}
diff --git a/usr/local/www/themes/the_wall/apple-touch-icon.png b/usr/local/www/themes/the_wall/apple-touch-icon.png
deleted file mode 100755
index 7a4b975..0000000
--- a/usr/local/www/themes/the_wall/apple-touch-icon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/bottom-loader.js b/usr/local/www/themes/the_wall/bottom-loader.js
deleted file mode 100644
index a21f775..0000000
--- a/usr/local/www/themes/the_wall/bottom-loader.js
+++ /dev/null
@@ -1,10 +0,0 @@
-//<![CDATA[
-
- NiftyCheck();
- Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
- Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
- Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
- Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
- Rounded("div#topbox","all","#FFF","#990000","smooth");
-
-//]]>
diff --git a/usr/local/www/themes/the_wall/favicon.ico b/usr/local/www/themes/the_wall/favicon.ico
deleted file mode 100644
index 3440bf2..0000000
--- a/usr/local/www/themes/the_wall/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/graphlink.css b/usr/local/www/themes/the_wall/graphlink.css
deleted file mode 100644
index 13f65f0..0000000
--- a/usr/local/www/themes/the_wall/graphlink.css
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- $Id$
-
- This file is part of the GraphLink software.
- GraphLink is distributed under the MIT License.
- Copyright (C) 2005-2006 Max Khitrov <max@mxsoft.org>
-*******************************************************************************/
-
-/**
- * Defines the background image used for the graph, as well as the actual data
- * locations.
- * Use padding-left and padding-top to align the data area correctly with your
- * background image.
- * Width and height should same as the dimensions of the image, minus the
- * padding values in both directions.
- */
-div.GraphLink {
- width: 212px;
- height: 60px;
- padding-left: 38px;
- padding-top: 10px;
- background-image: url(/themes/nervecenter/images/misc/graph.png);
- overflow: hidden;
-}
-
-/**
- * Defines the data display area. Modify to fit your background image.
- */
-div.GraphLinkData {
- width: 200px;
- height: 50px;
- overflow: hidden;
-}
-
-/**
- * Defines the look of one bar. Nothing to change here other than the color.
- */
-span.GraphLinkBar {
- background-color: #990000;
- height: 100%;
- float: left;
- overflow: hidden;
-}
diff --git a/usr/local/www/themes/the_wall/images/alert_bgr.png b/usr/local/www/themes/the_wall/images/alert_bgr.png
deleted file mode 100755
index b186db0..0000000
--- a/usr/local/www/themes/the_wall/images/alert_bgr.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/background.jpg b/usr/local/www/themes/the_wall/images/background.jpg
deleted file mode 100755
index cdd1df6..0000000
--- a/usr/local/www/themes/the_wall/images/background.jpg
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/footer.png b/usr/local/www/themes/the_wall/images/footer.png
deleted file mode 100755
index 399e0ff..0000000
--- a/usr/local/www/themes/the_wall/images/footer.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/header.png b/usr/local/www/themes/the_wall/images/header.png
deleted file mode 100755
index 25b813c..0000000
--- a/usr/local/www/themes/the_wall/images/header.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/help.png b/usr/local/www/themes/the_wall/images/help.png
deleted file mode 100755
index 1de05e3..0000000
--- a/usr/local/www/themes/the_wall/images/help.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/horizontal.gif b/usr/local/www/themes/the_wall/images/horizontal.gif
deleted file mode 100755
index a280dcb..0000000
--- a/usr/local/www/themes/the_wall/images/horizontal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/horizontal.png b/usr/local/www/themes/the_wall/images/horizontal.png
deleted file mode 100755
index e774028..0000000
--- a/usr/local/www/themes/the_wall/images/horizontal.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/favicon.ico b/usr/local/www/themes/the_wall/images/icons/favicon.ico
deleted file mode 100644
index 3440bf2..0000000
--- a/usr/local/www/themes/the_wall/images/icons/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_3g.gif b/usr/local/www/themes/the_wall/images/icons/icon_3g.gif
deleted file mode 100755
index 46ccb92..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_3g.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/the_wall/images/icons/icon_3g_inactive.gif
deleted file mode 100755
index cf983e4..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_3g_inactive.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_advanced.gif b/usr/local/www/themes/the_wall/images/icons/icon_advanced.gif
deleted file mode 100755
index 3ede1ff..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_advanced.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_advanced_s.gif b/usr/local/www/themes/the_wall/images/icons/icon_advanced_s.gif
deleted file mode 100755
index b233549..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_advanced_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_alert.gif b/usr/local/www/themes/the_wall/images/icons/icon_alert.gif
deleted file mode 100755
index 7646941..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_alert.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_alias_host.gif b/usr/local/www/themes/the_wall/images/icons/icon_alias_host.gif
deleted file mode 100755
index ad43e17..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_alias_host.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_alias_net.gif b/usr/local/www/themes/the_wall/images/icons/icon_alias_net.gif
deleted file mode 100755
index abd1b8b..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_alias_net.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_alias_port.gif b/usr/local/www/themes/the_wall/images/icons/icon_alias_port.gif
deleted file mode 100755
index 4acf2aa..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_alias_port.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_alias_url.gif b/usr/local/www/themes/the_wall/images/icons/icon_alias_url.gif
deleted file mode 100755
index 660571e..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_alias_url.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/the_wall/images/icons/icon_alias_url_reload.gif
deleted file mode 100755
index 55c1c4a..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_alias_url_reload.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_block.gif b/usr/local/www/themes/the_wall/images/icons/icon_block.gif
deleted file mode 100755
index 670c968..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_block.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_block_add.gif b/usr/local/www/themes/the_wall/images/icons/icon_block_add.gif
deleted file mode 100755
index eb726d6..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_block_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_block_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_block_d.gif
deleted file mode 100755
index e6345fe..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_block_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_cablenic.gif b/usr/local/www/themes/the_wall/images/icons/icon_cablenic.gif
deleted file mode 100755
index a071c66..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_cablenic.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_cal.gif b/usr/local/www/themes/the_wall/images/icons/icon_cal.gif
deleted file mode 100755
index a9c7c87..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_cal.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_cal_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_cal_mo.gif
deleted file mode 100755
index 1647e2f..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_cal_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_carp.gif b/usr/local/www/themes/the_wall/images/icons/icon_carp.gif
deleted file mode 100755
index 9454a82..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_carp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_carp_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_carp_d.gif
deleted file mode 100755
index 2ba8db2..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_carp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_chain.png b/usr/local/www/themes/the_wall/images/icons/icon_chain.png
deleted file mode 100644
index 12db07a..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_chain.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_check.gif b/usr/local/www/themes/the_wall/images/icons/icon_check.gif
deleted file mode 100755
index 393674d..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_check.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_clock_green.gif b/usr/local/www/themes/the_wall/images/icons/icon_clock_green.gif
deleted file mode 100755
index e171ba8..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_clock_green.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_clock_grey.gif b/usr/local/www/themes/the_wall/images/icons/icon_clock_grey.gif
deleted file mode 100755
index 00c865a..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_clock_grey.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_clock_red.gif b/usr/local/www/themes/the_wall/images/icons/icon_clock_red.gif
deleted file mode 100755
index 7b412ee..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_clock_red.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_close.gif b/usr/local/www/themes/the_wall/images/icons/icon_close.gif
deleted file mode 100755
index e0f86a7..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_close.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_configure.gif b/usr/local/www/themes/the_wall/images/icons/icon_configure.gif
deleted file mode 100755
index 7182e0d..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_configure.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_down.gif b/usr/local/www/themes/the_wall/images/icons/icon_down.gif
deleted file mode 100755
index b71a9c5..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_down_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_down_d.gif
deleted file mode 100755
index 70a7473..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_down_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_down_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_down_mo.gif
deleted file mode 100755
index 584587a..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_down_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_e.gif b/usr/local/www/themes/the_wall/images/icons/icon_e.gif
deleted file mode 100755
index 2950800..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_e.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_e_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_e_mo.gif
deleted file mode 100755
index 9ba5738..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_e_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_error.gif b/usr/local/www/themes/the_wall/images/icons/icon_error.gif
deleted file mode 100755
index e0fa659..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_error.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_exclam.gif b/usr/local/www/themes/the_wall/images/icons/icon_exclam.gif
deleted file mode 100755
index 36c2ec7..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_exclam.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_flag_de.png b/usr/local/www/themes/the_wall/images/icons/icon_flag_de.png
deleted file mode 100755
index 069cbbe..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_flag_de.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_flag_en.png b/usr/local/www/themes/the_wall/images/icons/icon_flag_en.png
deleted file mode 100755
index bd7f9a5..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_flag_en.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_flag_es.png b/usr/local/www/themes/the_wall/images/icons/icon_flag_es.png
deleted file mode 100755
index 434776c..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_flag_es.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/the_wall/images/icons/icon_flag_pt_BR.png
deleted file mode 100755
index f786349..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_flag_pt_BR.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_cert.png
deleted file mode 100755
index 48a34b6..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_cert.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_file.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_file.png
deleted file mode 100755
index 48a9ed2..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_file.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_group.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_group.png
deleted file mode 100755
index 7d929c0..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_host.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_host.png
deleted file mode 100755
index 867ef2c..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_host.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_imp.png
deleted file mode 100755
index f667cfc..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_imp.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_mail.png
deleted file mode 100755
index d2d4548..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_mail.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_pwd.png
deleted file mode 100755
index 06b53a1..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_pwd.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_search.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_search.png
deleted file mode 100755
index 33de926..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_search.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_time.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_time.png
deleted file mode 100755
index aa8300a..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_time.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_unknown.png
deleted file mode 100755
index 1857d0e..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_unknown.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_url.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_url.png
deleted file mode 100755
index cf56792..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_url.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_user.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_user.png
deleted file mode 100755
index e00eebe..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_fw-update.gif b/usr/local/www/themes/the_wall/images/icons/icon_fw-update.gif
deleted file mode 100755
index 52c18ac..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_fw-update.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_help.gif b/usr/local/www/themes/the_wall/images/icons/icon_help.gif
deleted file mode 100644
index 84c84db..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_help.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_ifalias.gif b/usr/local/www/themes/the_wall/images/icons/icon_ifalias.gif
deleted file mode 100755
index 0c569a7..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_ifalias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_ifalias_d.gif
deleted file mode 100755
index faa84d4..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_ifalias_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_import_alias.gif b/usr/local/www/themes/the_wall/images/icons/icon_import_alias.gif
deleted file mode 100755
index d11a5f0..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_import_alias.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_in.gif b/usr/local/www/themes/the_wall/images/icons/icon_in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_in_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_info_pkg.gif b/usr/local/www/themes/the_wall/images/icons/icon_info_pkg.gif
deleted file mode 100755
index cd3a532..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_info_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_interface_down.gif b/usr/local/www/themes/the_wall/images/icons/icon_interface_down.gif
deleted file mode 100755
index 0626655..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_interface_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_interface_up.gif b/usr/local/www/themes/the_wall/images/icons/icon_interface_up.gif
deleted file mode 100755
index 1449513..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_interface_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_left.gif b/usr/local/www/themes/the_wall/images/icons/icon_left.gif
deleted file mode 100755
index 8effefe..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_left_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_left_d.gif
deleted file mode 100755
index c778014..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_left_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_left_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_left_mo.gif
deleted file mode 100755
index 84c6fa2..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_left_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_log.gif b/usr/local/www/themes/the_wall/images/icons/icon_log.gif
deleted file mode 100755
index 4a1983a..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_log.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_log_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_log_d.gif
deleted file mode 100755
index d31bd9b..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_log_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_log_s.gif b/usr/local/www/themes/the_wall/images/icons/icon_log_s.gif
deleted file mode 100755
index f9fda33..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_log_s.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_log_s_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_log_s_d.gif
deleted file mode 100755
index fb2c05f..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_log_s_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_logs.gif b/usr/local/www/themes/the_wall/images/icons/icon_logs.gif
deleted file mode 100644
index afe0104..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_logs.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_match.gif b/usr/local/www/themes/the_wall/images/icons/icon_match.gif
deleted file mode 100644
index 215571f..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_match.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_match_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_match_d.gif
deleted file mode 100644
index 6e4c364..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_match_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_minus.gif b/usr/local/www/themes/the_wall/images/icons/icon_minus.gif
deleted file mode 100755
index 417544f..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_minus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_open.gif b/usr/local/www/themes/the_wall/images/icons/icon_open.gif
deleted file mode 100755
index ac3da14..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_open.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_other.gif b/usr/local/www/themes/the_wall/images/icons/icon_other.gif
deleted file mode 100755
index e6f780f..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_other.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_other_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_other_d.gif
deleted file mode 100755
index b08d970..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_other_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_out.gif b/usr/local/www/themes/the_wall/images/icons/icon_out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_out_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_parp.gif b/usr/local/www/themes/the_wall/images/icons/icon_parp.gif
deleted file mode 100755
index 96acaf3..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_parp.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_parp_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_parp_d.gif
deleted file mode 100755
index 7d7d00e..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_parp_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_pass.gif b/usr/local/www/themes/the_wall/images/icons/icon_pass.gif
deleted file mode 100755
index fe1bb0d..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_pass.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_pass_add.gif b/usr/local/www/themes/the_wall/images/icons/icon_pass_add.gif
deleted file mode 100755
index f7f4c20..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_pass_add.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_pass_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_pass_d.gif
deleted file mode 100755
index 6adc431..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_pass_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_plus.gif b/usr/local/www/themes/the_wall/images/icons/icon_plus.gif
deleted file mode 100755
index 2a94eeb..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_plus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_plus_bl.gif b/usr/local/www/themes/the_wall/images/icons/icon_plus_bl.gif
deleted file mode 100755
index 8dcd7c0..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_plus_bl.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/the_wall/images/icons/icon_plus_bl_p.gif
deleted file mode 100755
index 0c79849..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_plus_bl_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_plus_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_plus_d.gif
deleted file mode 100755
index ebc7457..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_plus_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_plus_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_plus_mo.gif
deleted file mode 100755
index 1c7ca08..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_plus_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_plus_p.gif b/usr/local/www/themes/the_wall/images/icons/icon_plus_p.gif
deleted file mode 100755
index eb41284..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_plus_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall.gif
deleted file mode 100755
index d78b867..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_reinstall.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_d.gif
deleted file mode 100755
index 13658f7..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_mo.gif
deleted file mode 100755
index 90b576e..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg.gif
deleted file mode 100755
index 9aebb03..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_d.gif
deleted file mode 100755
index 4ab4992..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_mo.gif
deleted file mode 100755
index 7025d20..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml.gif
deleted file mode 100755
index 4542432..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_d.gif
deleted file mode 100755
index 8d3a68d..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_mo.gif
deleted file mode 100755
index 15e0aed..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reject.gif b/usr/local/www/themes/the_wall/images/icons/icon_reject.gif
deleted file mode 100755
index 5565cd6..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_reject.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reject_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_reject_d.gif
deleted file mode 100755
index 6c09fae..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_reject_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_right.gif b/usr/local/www/themes/the_wall/images/icons/icon_right.gif
deleted file mode 100755
index fdf2d8b..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_restart.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_restart.gif
deleted file mode 100755
index e49fbd7..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_service_restart.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_restart_d.gif
deleted file mode 100755
index a5d6d7c..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_service_restart_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_running.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_running.gif
deleted file mode 100644
index 543fd56..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_service_running.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_start.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_start.gif
deleted file mode 100755
index 09bb58f..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_service_start.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_start_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_start_d.gif
deleted file mode 100755
index f58f111..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_service_start_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_status.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_status.gif
deleted file mode 100644
index a93bcfb..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_service_status.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_stop.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_stop.gif
deleted file mode 100755
index 922addc..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_service_stop.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_stop_d.gif
deleted file mode 100755
index b4cfdea..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_service_stop_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_stopped.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_stopped.gif
deleted file mode 100644
index f93a25d..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_service_stopped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_services_restart_mo.gif
deleted file mode 100755
index a092b40..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_services_restart_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_services_start_mo.gif
deleted file mode 100755
index ecdb58f..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_services_start_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_services_stop_mo.gif
deleted file mode 100755
index c00e208..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_services_stop_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_system-group-grey.png b/usr/local/www/themes/the_wall/images/icons/icon_system-group-grey.png
deleted file mode 100755
index d7b964d..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_system-group-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_system-group.png b/usr/local/www/themes/the_wall/images/icons/icon_system-group.png
deleted file mode 100755
index 1c974f2..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_system-group.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_system-user-grey.png b/usr/local/www/themes/the_wall/images/icons/icon_system-user-grey.png
deleted file mode 100755
index 2f6047d..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_system-user-grey.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_system-user.png b/usr/local/www/themes/the_wall/images/icons/icon_system-user.png
deleted file mode 100755
index ef82156..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_system-user.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/the_wall/images/icons/icon_system_lock_screen.png
deleted file mode 100755
index 30f306d..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_system_lock_screen.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_system_logout.png b/usr/local/www/themes/the_wall/images/icons/icon_system_logout.png
deleted file mode 100755
index 9bbb6c7..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_system_logout.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_trapped.gif b/usr/local/www/themes/the_wall/images/icons/icon_trapped.gif
deleted file mode 100755
index ffeb2cd..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_trapped.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_trapped_p.gif b/usr/local/www/themes/the_wall/images/icons/icon_trapped_p.gif
deleted file mode 100755
index 6d46aaf..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_trapped_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_ts_rule.gif b/usr/local/www/themes/the_wall/images/icons/icon_ts_rule.gif
deleted file mode 100755
index e15ab6c..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_ts_rule.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_ts_rule_d.gif
deleted file mode 100755
index f776281..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_ts_rule_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_up.gif b/usr/local/www/themes/the_wall/images/icons/icon_up.gif
deleted file mode 100755
index 883c5a2..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_up_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_up_d.gif
deleted file mode 100755
index 0ddcce2..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_up_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_up_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_up_mo.gif
deleted file mode 100755
index 9f869a4..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_up_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_wlan.gif b/usr/local/www/themes/the_wall/images/icons/icon_wlan.gif
deleted file mode 100755
index 1f0addc..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_wlan.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_wlan_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_wlan_d.gif
deleted file mode 100755
index 35bf580..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_wlan_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_wol_all.gif b/usr/local/www/themes/the_wall/images/icons/icon_wol_all.gif
deleted file mode 100755
index 2d22182..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_wol_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/the_wall/images/icons/icon_wzd_nsaved.png
deleted file mode 100755
index 21cb27d..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_wzd_nsaved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_wzd_saved.png b/usr/local/www/themes/the_wall/images/icons/icon_wzd_saved.png
deleted file mode 100755
index ab82946..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_wzd_saved.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_x.gif b/usr/local/www/themes/the_wall/images/icons/icon_x.gif
deleted file mode 100755
index 24e4d49..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_x_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_x_d.gif
deleted file mode 100755
index d2bfbc8..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_x_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_x_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_x_mo.gif
deleted file mode 100755
index da7b57c..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_x_mo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/icon_x_p.gif b/usr/local/www/themes/the_wall/images/icons/icon_x_p.gif
deleted file mode 100755
index 8828fa6..0000000
--- a/usr/local/www/themes/the_wall/images/icons/icon_x_p.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/in.gif b/usr/local/www/themes/the_wall/images/icons/in.gif
deleted file mode 100755
index f1da771..0000000
--- a/usr/local/www/themes/the_wall/images/icons/in.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/in_d.gif b/usr/local/www/themes/the_wall/images/icons/in_d.gif
deleted file mode 100755
index 18e26be..0000000
--- a/usr/local/www/themes/the_wall/images/icons/in_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/out.gif b/usr/local/www/themes/the_wall/images/icons/out.gif
deleted file mode 100755
index 1a1d1d5..0000000
--- a/usr/local/www/themes/the_wall/images/icons/out.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/icons/out_d.gif b/usr/local/www/themes/the_wall/images/icons/out_d.gif
deleted file mode 100755
index 879f1da..0000000
--- a/usr/local/www/themes/the_wall/images/icons/out_d.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/log.png b/usr/local/www/themes/the_wall/images/log.png
deleted file mode 100755
index 762ba80..0000000
--- a/usr/local/www/themes/the_wall/images/log.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/logo.gif b/usr/local/www/themes/the_wall/images/logo.gif
deleted file mode 100755
index a71ce5a..0000000
--- a/usr/local/www/themes/the_wall/images/logo.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/logobig.jpg b/usr/local/www/themes/the_wall/images/logobig.jpg
deleted file mode 100755
index 2ef196d..0000000
--- a/usr/local/www/themes/the_wall/images/logobig.jpg
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/menu_down.gif b/usr/local/www/themes/the_wall/images/menu_down.gif
deleted file mode 100755
index 137de8d..0000000
--- a/usr/local/www/themes/the_wall/images/menu_down.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/menu_right.gif b/usr/local/www/themes/the_wall/images/menu_right.gif
deleted file mode 100755
index 881327c..0000000
--- a/usr/local/www/themes/the_wall/images/menu_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/bar_blue.gif b/usr/local/www/themes/the_wall/images/misc/bar_blue.gif
deleted file mode 100755
index 741186a..0000000
--- a/usr/local/www/themes/the_wall/images/misc/bar_blue.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/bar_gray.gif b/usr/local/www/themes/the_wall/images/misc/bar_gray.gif
deleted file mode 100755
index e86e245..0000000
--- a/usr/local/www/themes/the_wall/images/misc/bar_gray.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/bar_left.gif b/usr/local/www/themes/the_wall/images/misc/bar_left.gif
deleted file mode 100755
index af751fa..0000000
--- a/usr/local/www/themes/the_wall/images/misc/bar_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/bar_right.gif b/usr/local/www/themes/the_wall/images/misc/bar_right.gif
deleted file mode 100755
index ff12d9e..0000000
--- a/usr/local/www/themes/the_wall/images/misc/bar_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/bullet_toggle_minus.png b/usr/local/www/themes/the_wall/images/misc/bullet_toggle_minus.png
deleted file mode 100755
index 37db2fd..0000000
--- a/usr/local/www/themes/the_wall/images/misc/bullet_toggle_minus.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/bullet_toggle_plus.png b/usr/local/www/themes/the_wall/images/misc/bullet_toggle_plus.png
deleted file mode 100755
index fba7af9..0000000
--- a/usr/local/www/themes/the_wall/images/misc/bullet_toggle_plus.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/button.gif b/usr/local/www/themes/the_wall/images/misc/button.gif
deleted file mode 100755
index e85dbb3..0000000
--- a/usr/local/www/themes/the_wall/images/misc/button.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/graph.png b/usr/local/www/themes/the_wall/images/misc/graph.png
deleted file mode 100755
index 507ec75..0000000
--- a/usr/local/www/themes/the_wall/images/misc/graph.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/key_128.gif b/usr/local/www/themes/the_wall/images/misc/key_128.gif
deleted file mode 100755
index ea5ae34..0000000
--- a/usr/local/www/themes/the_wall/images/misc/key_128.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/key_152.gif b/usr/local/www/themes/the_wall/images/misc/key_152.gif
deleted file mode 100755
index 6c7fc03..0000000
--- a/usr/local/www/themes/the_wall/images/misc/key_152.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/key_256.gif b/usr/local/www/themes/the_wall/images/misc/key_256.gif
deleted file mode 100755
index 3e1c377..0000000
--- a/usr/local/www/themes/the_wall/images/misc/key_256.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/key_64.gif b/usr/local/www/themes/the_wall/images/misc/key_64.gif
deleted file mode 100755
index 87892bd..0000000
--- a/usr/local/www/themes/the_wall/images/misc/key_64.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/loader.gif b/usr/local/www/themes/the_wall/images/misc/loader.gif
deleted file mode 100755
index a98cf78..0000000
--- a/usr/local/www/themes/the_wall/images/misc/loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/loader_all.gif b/usr/local/www/themes/the_wall/images/misc/loader_all.gif
deleted file mode 100755
index cb6bc0c..0000000
--- a/usr/local/www/themes/the_wall/images/misc/loader_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/loader_filter.gif b/usr/local/www/themes/the_wall/images/misc/loader_filter.gif
deleted file mode 100755
index b838b17..0000000
--- a/usr/local/www/themes/the_wall/images/misc/loader_filter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/loader_tab.gif b/usr/local/www/themes/the_wall/images/misc/loader_tab.gif
deleted file mode 100755
index a98cf78..0000000
--- a/usr/local/www/themes/the_wall/images/misc/loader_tab.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/logon.png b/usr/local/www/themes/the_wall/images/misc/logon.png
deleted file mode 100755
index acd388b..0000000
--- a/usr/local/www/themes/the_wall/images/misc/logon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/progress_bar.gif b/usr/local/www/themes/the_wall/images/misc/progress_bar.gif
deleted file mode 100755
index 3b4aa52..0000000
--- a/usr/local/www/themes/the_wall/images/misc/progress_bar.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/rrd_error.png b/usr/local/www/themes/the_wall/images/misc/rrd_error.png
deleted file mode 100755
index a79ecf3..0000000
--- a/usr/local/www/themes/the_wall/images/misc/rrd_error.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/status_alerter.gif b/usr/local/www/themes/the_wall/images/misc/status_alerter.gif
deleted file mode 100755
index 7ff1e95..0000000
--- a/usr/local/www/themes/the_wall/images/misc/status_alerter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/status_carpmaster.gif b/usr/local/www/themes/the_wall/images/misc/status_carpmaster.gif
deleted file mode 100755
index 2c32908..0000000
--- a/usr/local/www/themes/the_wall/images/misc/status_carpmaster.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/status_left.gif b/usr/local/www/themes/the_wall/images/misc/status_left.gif
deleted file mode 100755
index b5a2930..0000000
--- a/usr/local/www/themes/the_wall/images/misc/status_left.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/status_page_loading.gif b/usr/local/www/themes/the_wall/images/misc/status_page_loading.gif
deleted file mode 100755
index 067ef18..0000000
--- a/usr/local/www/themes/the_wall/images/misc/status_page_loading.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/status_reload_all.gif b/usr/local/www/themes/the_wall/images/misc/status_reload_all.gif
deleted file mode 100755
index 72de6bd..0000000
--- a/usr/local/www/themes/the_wall/images/misc/status_reload_all.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/status_reload_filter.gif b/usr/local/www/themes/the_wall/images/misc/status_reload_filter.gif
deleted file mode 100755
index d72761a..0000000
--- a/usr/local/www/themes/the_wall/images/misc/status_reload_filter.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/status_right.gif b/usr/local/www/themes/the_wall/images/misc/status_right.gif
deleted file mode 100755
index bf66fdb..0000000
--- a/usr/local/www/themes/the_wall/images/misc/status_right.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/tri_c.gif b/usr/local/www/themes/the_wall/images/misc/tri_c.gif
deleted file mode 100755
index 317b758..0000000
--- a/usr/local/www/themes/the_wall/images/misc/tri_c.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/tri_c_black.gif b/usr/local/www/themes/the_wall/images/misc/tri_c_black.gif
deleted file mode 100755
index 309846e..0000000
--- a/usr/local/www/themes/the_wall/images/misc/tri_c_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/tri_o.gif b/usr/local/www/themes/the_wall/images/misc/tri_o.gif
deleted file mode 100755
index eb95c32..0000000
--- a/usr/local/www/themes/the_wall/images/misc/tri_o.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/tri_o_black.gif b/usr/local/www/themes/the_wall/images/misc/tri_o_black.gif
deleted file mode 100755
index f818f3b..0000000
--- a/usr/local/www/themes/the_wall/images/misc/tri_o_black.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/widget_loader.gif b/usr/local/www/themes/the_wall/images/misc/widget_loader.gif
deleted file mode 100755
index ca35e2a..0000000
--- a/usr/local/www/themes/the_wall/images/misc/widget_loader.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/misc/widget_loader_old.gif b/usr/local/www/themes/the_wall/images/misc/widget_loader_old.gif
deleted file mode 100755
index fad101f..0000000
--- a/usr/local/www/themes/the_wall/images/misc/widget_loader_old.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/new_tab_menu.png b/usr/local/www/themes/the_wall/images/new_tab_menu.png
deleted file mode 100755
index 4bdfcef..0000000
--- a/usr/local/www/themes/the_wall/images/new_tab_menu.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/status.png b/usr/local/www/themes/the_wall/images/status.png
deleted file mode 100755
index a3e368e..0000000
--- a/usr/local/www/themes/the_wall/images/status.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/transparent.gif b/usr/local/www/themes/the_wall/images/transparent.gif
deleted file mode 100755
index 89c5530..0000000
--- a/usr/local/www/themes/the_wall/images/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/images/transparent_pixel.gif b/usr/local/www/themes/the_wall/images/transparent_pixel.gif
deleted file mode 100755
index 35d42e8..0000000
--- a/usr/local/www/themes/the_wall/images/transparent_pixel.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/blank.gif b/usr/local/www/themes/the_wall/javascript/ie7/blank.gif
deleted file mode 100755
index a4fe2e6..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/blank.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-box-model.js
deleted file mode 100644
index 45543f6..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/ie7-box-model.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-core.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-core.js
deleted file mode 100644
index b11e2b1..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/ie7-core.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-css-strict.js
deleted file mode 100644
index 4406d7a..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/ie7-css-strict.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-css2.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-css2.js
deleted file mode 100644
index 7121c8e..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/ie7-css2.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-css3.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-css3.js
deleted file mode 100644
index 86b24f5..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/ie7-css3.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-fixed.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-fixed.js
deleted file mode 100644
index 4321cda..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/ie7-fixed.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-html4.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-html4.js
deleted file mode 100644
index 4d2baa9..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/ie7-html4.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-ie5.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-ie5.js
deleted file mode 100644
index 707fa56..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/ie7-ie5.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite-p.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite-p.js
deleted file mode 100644
index 3a66d19..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í></Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite.js
deleted file mode 100644
index 88c764f..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-png.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-png.js
deleted file mode 100644
index 7b8f2cf..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/ie7-png.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-server.css b/usr/local/www/themes/the_wall/javascript/ie7/ie7-server.css
deleted file mode 100644
index 47c7edd..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/ie7-server.css
+++ /dev/null
@@ -1,43 +0,0 @@
-body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
-body {margin: 8px; background: #333;}
-h1 {margin: 0;}
-h1 a:hover {background-color: transparent;}
-h2 {font-size: 1.75em;}
-h3 {font-size: 1.1em;}
-a:active {color: #ff0000;}
-a:link {color: #0a6cce;}
-a:visited {color: #0a6cce;}
-code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
- padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
-code.box {display: block; padding: 10px; margin: 0.5em 0;}
-ul {list-style-type: square;}
-dd {margin: .2em 0 .5em 1em;}
-dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
-dl.library dd {font-style: italic; margin-left: 3em;}
-dt {font-weight: bold;}
-dt.pack {color: brown;}
-a img {border-style: none;}
-hr {height: 1px; color: #000; border-style: solid;}
-hr.short {height: 2px; width: 100px;}
-div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
-hr {border-bottom-width: 0px;}
-div.header hr {color: #0a6cce; background-color: #0a6cce;}
-div.content {min-height: 100px;}
-div.footer hr {color: #898e79; background-color: #898e79; }
-div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
-a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
-div.footer a:hover {background-color: transparent; text-decoration: none;}
-div.header .menu {text-align: right;}
-div.footer {font-size: x-small; margin-top: 8px;}
-div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
-#license {margin-top: 5px; font-size: xx-small;}
-table {border-top: 1px solid #000; border-left: 1px solid #000;}
-th {background-color: #fff; text-align: left;}
-th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
-th.small {width: 100px;}
-th.medium {width: 200px;}
-th.large {width: 270px;}
-th.x-large {width: 408px;}
-table.fixed {table-layout: fixed;}
-span.comment {color: #666;}
-
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard-p.js
deleted file mode 100644
index 73e99ac..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard-p.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì></Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
-/* packed with http://dean.edwards.name/packer/ */
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard.js
deleted file mode 100644
index 2109905..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* IE7 version 0.7.3 (alpha) 2004/09/18 */
-if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/usr/local/www/themes/the_wall/javascript/ie7/test-trans.png b/usr/local/www/themes/the_wall/javascript/ie7/test-trans.png
deleted file mode 100755
index e187e2c..0000000
--- a/usr/local/www/themes/the_wall/javascript/ie7/test-trans.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/javascript/img/grey-40.png b/usr/local/www/themes/the_wall/javascript/img/grey-40.png
deleted file mode 100755
index 758b716..0000000
--- a/usr/local/www/themes/the_wall/javascript/img/grey-40.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/javascript/img/submenu-off.gif b/usr/local/www/themes/the_wall/javascript/img/submenu-off.gif
deleted file mode 100755
index ddcdcae..0000000
--- a/usr/local/www/themes/the_wall/javascript/img/submenu-off.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/javascript/img/submenu-on.gif b/usr/local/www/themes/the_wall/javascript/img/submenu-on.gif
deleted file mode 100755
index 7a58077..0000000
--- a/usr/local/www/themes/the_wall/javascript/img/submenu-on.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/javascript/img/white-90.png b/usr/local/www/themes/the_wall/javascript/img/white-90.png
deleted file mode 100755
index efc84b4..0000000
--- a/usr/local/www/themes/the_wall/javascript/img/white-90.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/javascript/img/x.gif b/usr/local/www/themes/the_wall/javascript/img/x.gif
deleted file mode 100755
index 5bfd67a..0000000
--- a/usr/local/www/themes/the_wall/javascript/img/x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/themes/the_wall/javascript/niftyjsCode.js b/usr/local/www/themes/the_wall/javascript/niftyjsCode.js
deleted file mode 100644
index e71ea14..0000000
--- a/usr/local/www/themes/the_wall/javascript/niftyjsCode.js
+++ /dev/null
@@ -1,174 +0,0 @@
-function NiftyCheck(){
-if(!document.getElementById || !document.createElement)
- return(false);
-isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
-if(Array.prototype.push==null){Array.prototype.push=function(){
- this[this.length]=arguments[0]; return(this.length);};}
-return(true);
-}
-
-function Rounded(selector,wich,bk,color,opt){
-var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
-
-if(color=="transparent"){
- cn=cn+"x";
- ecolor=bk;
- bk="transparent";
- }
-else if(opt && opt.indexOf("border")>=0){
- var optar=opt.split(" ");
- for(i=0;i<optar.length;i++)
- if(optar[i].indexOf("#")>=0) ecolor=optar[i];
- if(ecolor=="") ecolor="#666";
- cn+="e";
- edges=true;
- }
-else if(opt && opt.indexOf("smooth")>=0){
- cn+="a";
- ecolor=Mix(bk,color);
- }
-if(opt && opt.indexOf("small")>=0) cn+="s";
-prefixt=cn;
-prefixb=cn;
-if(wich.indexOf("all")>=0){t=true;b=true;}
-else if(wich.indexOf("top")>=0) t="true";
-else if(wich.indexOf("tl")>=0){
- t="true";
- if(wich.indexOf("tr")<0) prefixt+="l";
- }
-else if(wich.indexOf("tr")>=0){
- t="true";
- prefixt+="r";
- }
-if(wich.indexOf("bottom")>=0) b=true;
-else if(wich.indexOf("bl")>=0){
- b="true";
- if(wich.indexOf("br")<0) prefixb+="l";
- }
-else if(wich.indexOf("br")>=0){
- b="true";
- prefixb+="r";
- }
-var v=getElementsBySelector(selector);
-var l=v.length;
-for(i=0;i<l;i++){
- if(edges) AddBorder(v[i],ecolor);
- if(t) AddTop(v[i],bk,color,ecolor,prefixt);
- if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
- }
-}
-
-function AddBorder(el,bc){
-var i;
-if(!el.passed){
- if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
- var t=el.firstChild.nodeValue;
- el.removeChild(el.lastChild);
- var d=CreateEl("span");
- d.style.display="block";
- d.appendChild(document.createTextNode(t));
- el.appendChild(d);
- }
- for(i=0;i<el.childNodes.length;i++){
- if(el.childNodes[i].nodeType==1){
- el.childNodes[i].style.borderLeft="1px solid "+bc;
- el.childNodes[i].style.borderRight="1px solid "+bc;
- }
- }
- }
-el.passed=true;
-}
-
-function AddTop(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=1;i<=lim;i++){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingTop=0;
-el.insertBefore(d,el.firstChild);
-}
-
-function AddBottom(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=lim;i>0;i--){
- var x=CreateEl("b");
- x.className=cn + i;
- x.style.backgroundColor=color;
- if(bc) x.style.borderColor=bc;
- d.appendChild(x);
- }
-el.style.paddingBottom=0;
-el.appendChild(d);
-}
-
-function CreateEl(x){
-if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
-else return(document.createElement(x));
-}
-
-function getElementsBySelector(selector){
-var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
-
-if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
- s=selector.split(" ");
- var fs=s[0].split("#");
- if(fs.length==1) return(objlist);
- f=document.getElementById(fs[1]);
- if(f) return(f.getElementsByTagName(s[1]));
- return(objlist);
- }
-if(selector.indexOf("#")>0){ //id selector like "tag#id"
- s=selector.split("#");
- tag=s[0];
- selid=s[1];
- }
-if(selid!=""){
- f=document.getElementById(selid);
- if(f) objlist.push(f);
- return(objlist);
- }
-if(selector.indexOf(".")>0){ //class selector like "tag.class"
- s=selector.split(".");
- tag=s[0];
- selclass=s[1];
- }
-var v=document.getElementsByTagName(tag); // tag selector like "tag"
-if(selclass=="")
- return(v);
-for(i=0;i<v.length;i++){
- if(v[i].className.indexOf(selclass)>=0){
- objlist.push(v[i]);
- }
- }
-return(objlist);
-}
-
-function Mix(c1,c2){
-var i,step1,step2,x,y,r=new Array(3);
-if(c1.length==4)step1=1;
-else step1=2;
-if(c2.length==4) step2=1;
-else step2=2;
-for(i=0;i<3;i++){
- x=parseInt(c1.substr(1+step1*i,step1),16);
- if(step1==1) x=16*x+x;
- y=parseInt(c2.substr(1+step2*i,step2),16);
- if(step2==1) y=16*y+y;
- r[i]=Math.floor((x*50+y*50)/100);
- }
-return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
-} \ No newline at end of file
diff --git a/usr/local/www/themes/the_wall/javascript/transmenu-body.php b/usr/local/www/themes/the_wall/javascript/transmenu-body.php
deleted file mode 100644
index eea9235..0000000
--- a/usr/local/www/themes/the_wall/javascript/transmenu-body.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/* $Id$ */
-/* ========================================================================== */
-/*
- transmenu-body.php
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-function nervecenterTransmenuGetBodyJS() {
- global $rootmenu;
-
- if (isset($rootmenu)) {
- return $rootmenu->getMenuJScript();
- } else if (empty($rootmenu)) {
- return "alert('No rootmenu object found.');";
- } else {
- return "alert('No JavaScript attached to rootmenu object.');";
- }
-}
-
-?>
diff --git a/usr/local/www/themes/the_wall/javascript/transmenu-head.php b/usr/local/www/themes/the_wall/javascript/transmenu-head.php
deleted file mode 100644
index 66e1952..0000000
--- a/usr/local/www/themes/the_wall/javascript/transmenu-head.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-/* $Id$ */
-/* ========================================================================== */
-/*
- transmenu-head.php
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-function nervecenterTransmenuGetHeadJS() {
- global $g, $rootmenu;
-
- $transmenu_stub =<<<EOD
- function tmenuinit() {
- //==========================================================================================
- // if supported, initialize TransMenus
- //==========================================================================================
- // Check isSupported() so that menus aren't accidentally sent to non-supporting browsers.
- // This is better than server-side checking because it will also catch browsers which would
- // normally support the menus but have javascript disabled.
- //
- // If supported, call initialize() and then hook whatever image rollover code you need to do
- // to the .onactivate and .ondeactivate events for each menu.
- //==========================================================================================
- if (TransMenu.isSupported()) {
- TransMenu.initialize();
-
- // hook all the highlight swapping of the main toolbar to menu activation/deactivation
- // instead of simple rollover to get the effect where the button stays hightlit until
- // the menu is closed.
- @@CHILD_JSCRIPT@@
- }
- } // end function
-EOD;
-
- if (empty($rootmenu)) {
- require_once("menudef.inc");
- }
-
- $childJScript = "";
- foreach ($rootmenu->getChildren() as $component) {
- $id = "mnua_" . str_replace(" ", "", strtolower($component->getID()));
-
- $childJScript .=<<<EOD
- {$id}.onactivate = function() { document.getElementById("{$id}").className = "hover"; };
- {$id}.ondeactivate = function() { document.getElementById("{$id}").className = ""; };
-
-EOD;
- }
-
- $transmenu_stub = basename($_SERVER['PHP_SELF']) != "wizard.php" ? str_replace("@@CHILD_JSCRIPT@@", $childJScript, $transmenu_stub) : "";
-
- return $transmenu_stub;
-}
-
-?>
diff --git a/usr/local/www/themes/the_wall/javascript/transmenu.org b/usr/local/www/themes/the_wall/javascript/transmenu.org
deleted file mode 100644
index 6c9e353..0000000
--- a/usr/local/www/themes/the_wall/javascript/transmenu.org
+++ /dev/null
@@ -1,785 +0,0 @@
-/* =================================================================================================
- * TransMenu
- * March, 2003
- *
- * Customizable multi-level animated DHTML menus with transparency.
- *
- * Copyright 2003-2004, Aaron Boodman (www.youngpup.net)
- * =================================================================================================
- * "Can I use this?"
- *
- * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
- * out at: http://creativecommons.org/licenses/by/2.0/
- *
- * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
- * for writing it. You may not misrepresent yourself as the author of this code.
- * =================================================================================================
- * "It's kinda hard to read, though"
- *
- * The uncompressed, commented version of this script can be found at:
- * http://youngpup.net/projects/transMenus
- * =================================================================================================
- * updates:
- * 04.19.04 fixed cascade problem with menus nested greater than two levels.
- * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu.
- * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;)
- * also made gecko check a little more strict by specifying build no.
- * ============================================================================================== */
-
-
-
-//==================================================================================================
-// Configuration properties
-//==================================================================================================
-TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif
-TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat
-TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat
-TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed)
-TransMenu.menuPadding = 5; // padding between menu border and items grid
-TransMenu.itemPadding = 3; // additional padding around each item
-TransMenu.shadowSize = 2; // size of shadow under menu
-TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge
-TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS)
-TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5
-TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS)
-TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5
-TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu
-TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu
-
-
-//==================================================================================================
-// Internal use properties
-//==================================================================================================
-TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};
-TransMenu.direction = {down:1,right:2};
-TransMenu.registry = [];
-TransMenu._maxZ = 100;
-
-
-
-//==================================================================================================
-// Static methods
-//==================================================================================================
-// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0
-TransMenu.isSupported = function() {
- var ua = navigator.userAgent.toLowerCase();
- var pf = navigator.platform.toLowerCase();
- var an = navigator.appName;
- var r = false;
-
- if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0
- else if (an == "Microsoft Internet Explorer") {
- if (document.getElementById) { // ie5.1+ mac,win
- if (pf.indexOf("mac") == 0) {
- r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1;
- }
- else r = true;
- }
- }
-
- return r;
-}
-
-// call this in onload once menus have been created
-TransMenu.initialize = function() {
- for (var i = 0, menu = null; menu = this.registry[i]; i++) {
- menu.initialize();
- }
-}
-
-// call this in document body to write out menu html
-TransMenu.renderAll = function() {
- var aMenuHtml = [];
- for (var i = 0, menu = null; menu = this.registry[i]; i++) {
- aMenuHtml[i] = menu.toString();
- }
- document.write(aMenuHtml.join(""));
-}
-
-//==================================================================================================
-// TransMenu constructor (only called internally)
-//==================================================================================================
-// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a
-// reference to an HTML element, or a TransMenuItem from an existing menu.
-// iDirection : The direction to slide out. One of TransMenu.direction.
-// iLeft : Left pixel offset of menu from actuator
-// iTop : Top pixel offset of menu from actuator
-// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
-// parentMenuSet : Menuset this menu will be added to.
-//==================================================================================================
-function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) {
- // public methods
- this.addItem = addItem;
- this.addMenu = addMenu;
- this.toString = toString;
- this.initialize = initialize;
- this.isOpen = false;
- this.show = show;
- this.hide = hide;
- this.items = [];
-
- // events
- this.onactivate = new Function(); // when the menu starts to slide open
- this.ondeactivate = new Function(); // when the menu finishes sliding closed
- this.onmouseover = new Function(); // when the menu has been moused over
- this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future
- this.ondequeue = new Function();
-
- // initialization
- this.index = TransMenu.registry.length;
- TransMenu.registry[this.index] = this;
-
- var id = "TransMenu" + this.index;
- var contentHeight = null;
- var contentWidth = null;
- var childMenuSet = null;
- var animating = false;
- var childMenus = [];
- var slideAccel = -1;
- var elmCache = null;
- var ready = false;
- var _this = this;
- var a = null;
-
- var pos = iDirection == TransMenu.direction.down ? "top" : "left";
- var dim = null;
-
- // private and public method implimentations
- function addItem(sText, sUrl) {
- var item = new TransMenuItem(sText, sUrl, this);
- item._index = this.items.length;
- this.items[item._index] = item;
- }
-
- function addMenu(oMenuItem) {
- if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here");
-
- if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight);
-
- var m = childMenuSet.addMenu(oMenuItem);
-
- childMenus[oMenuItem._index] = m;
- m.onmouseover = child_mouseover;
- m.ondeactivate = child_deactivate;
- m.onqueue = child_queue;
- m.ondequeue = child_dequeue;
-
- return m;
- }
-
- function initialize() {
- initCache();
- initEvents();
- initSize();
- ready = true;
- }
-
- function show() {
- //dbg_dump("show");
- if (ready) {
- _this.isOpen = true;
- animating = true;
- setContainerPos();
- elmCache["clip"].style.visibility = "visible";
- elmCache["clip"].style.zIndex = TransMenu._maxZ++;
- //dbg_dump("maxZ: " + TransMenu._maxZ);
- slideStart();
- _this.onactivate();
- }
- }
-
- function hide() {
- if (ready) {
- _this.isOpen = false;
- animating = true;
-
- for (var i = 0, item = null; item = elmCache.item[i]; i++)
- dehighlight(item);
-
- if (childMenuSet) childMenuSet.hide();
-
- slideStart();
- _this.ondeactivate();
- }
- }
-
- function setContainerPos() {
- var sub = oActuator.constructor == TransMenuItem;
- var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator;
- var el = act;
-
- var x = 0;
- var y = 0;
-
-
- var minX = 0;
- var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width);
- var minY = 0;
- var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height);
-
- // add up all offsets... subtract any scroll offset
- while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) {
- x += el.offsetLeft;
- y += el.offsetTop;
-
- if (el.scrollLeft) x -= el.scrollLeft;
- if (el.scrollTop) y -= el.scrollTop;
-
- el = el.offsetParent;
- }
-
- if (oActuator.constructor == TransMenuItem) {
- x += parseInt(el.parentNode.style.left);
- y += parseInt(el.parentNode.style.top);
- }
-
- switch (iReferencePoint) {
- case TransMenu.reference.topLeft:
- break;
- case TransMenu.reference.topRight:
- x += act.offsetWidth;
- break;
- case TransMenu.reference.bottomLeft:
- y += act.offsetHeight;
- break;
- case TransMenu.reference.bottomRight:
- x += act.offsetWidth;
- y += act.offsetHeight;
- break;
- }
-
- x += iLeft;
- y += iTop;
-
- x = Math.max(Math.min(x, maxX), minX);
- y = Math.max(Math.min(y, maxY), minY);
-
- elmCache["clip"].style.left = x + "px";
- elmCache["clip"].style.top = y + "px";
- }
-
- function slideStart() {
- var x0 = parseInt(elmCache["content"].style[pos]);
- var x1 = _this.isOpen ? 0 : -dim;
-
- if (a != null) a.stop();
- a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel);
-
- a.onframe = slideFrame;
- a.onend = slideEnd;
-
- a.start();
- }
-
- function slideFrame(x) {
- elmCache["content"].style[pos] = x + "px";
- }
-
- function slideEnd() {
- if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden";
- animating = false;
- }
-
- function initSize() {
- // everything is based off the size of the items table...
- var ow = elmCache["items"].offsetWidth;
- var oh = elmCache["items"].offsetHeight;
- var ua = navigator.userAgent.toLowerCase();
-
- // clipping container should be ow/oh + the size of the shadow
- elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px";
- elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px";
-
- // same with content...
- elmCache["content"].style.width = ow + TransMenu.shadowSize + "px";
- elmCache["content"].style.height = oh + TransMenu.shadowSize + "px";
-
- contentHeight = oh + TransMenu.shadowSize;
- contentWidth = ow + TransMenu.shadowSize;
-
- dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth;
-
- // set initially closed
- elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px";
- elmCache["clip"].style.visibility = "hidden";
-
- // if *not* mac/ie 5
- if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) {
- // set background div to offset size
- elmCache["background"].style.width = ow + "px";
- elmCache["background"].style.height = oh + "px";
- elmCache["background"].style.backgroundColor = TransMenu.backgroundColor;
-
- // shadow left starts at offset left and is offsetHeight pixels high
- elmCache["shadowRight"].style.left = ow + "px";
- elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px";
- elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor;
-
- // shadow bottom starts at offset height and is offsetWidth - shadowOffset
- // pixels wide (we don't want the bottom and right shadows to overlap or we
- // get an extra bright bottom-right corner)
- elmCache["shadowBottom"].style.top = oh + "px";
- elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px";
- elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor;
- }
- // mac ie is a little different because we use a PNG for the transparency
- else {
- // set background div to offset size
- elmCache["background"].firstChild.src = TransMenu.backgroundPng;
- elmCache["background"].firstChild.width = ow;
- elmCache["background"].firstChild.height = oh;
-
- // shadow left starts at offset left and is offsetHeight pixels high
- elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng;
- elmCache["shadowRight"].style.left = ow + "px";
- elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize;
- elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize);
-
- // shadow bottom starts at offset height and is offsetWidth - shadowOffset
- // pixels wide (we don't want the bottom and right shadows to overlap or we
- // get an extra bright bottom-right corner)
- elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng;
- elmCache["shadowBottom"].style.top = oh + "px";
- elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize;
- elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset;
- }
- }
-
- function initCache() {
- var menu = document.getElementById(id);
- var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing
-
- elmCache = {};
- elmCache["clip"] = menu;
- elmCache["item"] = [];
-
- for (var i = 0, elm = null; elm = all[i]; i++) {
- switch (elm.className) {
- case "items":
- case "content":
- case "background":
- case "shadowRight":
- case "shadowBottom":
- elmCache[elm.className] = elm;
- break;
- case "item":
- elm._index = elmCache["item"].length;
- elmCache["item"][elm._index] = elm;
- break;
- }
- }
-
- // hack!
- _this.elmCache = elmCache;
- }
-
- function initEvents() {
- // hook item mouseover
- for (var i = 0, item = null; item = elmCache.item[i]; i++) {
- item.onmouseover = item_mouseover;
- item.onmouseout = item_mouseout;
- item.onclick = item_click;
- }
-
- // hook actuation
- if (typeof oActuator.tagName != "undefined") {
- oActuator.onmouseover = actuator_mouseover;
- oActuator.onmouseout = actuator_mouseout;
- }
-
- // hook menu mouseover
- elmCache["content"].onmouseover = content_mouseover;
- elmCache["content"].onmouseout = content_mouseout;
- }
-
- function highlight(oRow) {
- oRow.className = "item hover";
- if (childMenus[oRow._index])
- oRow.lastChild.firstChild.src = TransMenu.dingbatOn;
- }
-
- function dehighlight(oRow) {
- oRow.className = "item";
- if (childMenus[oRow._index])
- oRow.lastChild.firstChild.src = TransMenu.dingbatOff;
- }
-
- function item_mouseover() {
- if (!animating) {
- highlight(this);
-
- if (childMenus[this._index])
- childMenuSet.showMenu(childMenus[this._index]);
- else if (childMenuSet) childMenuSet.hide();
- }
- }
-
- function item_mouseout() {
- if (!animating) {
- if (childMenus[this._index])
- childMenuSet.hideMenu(childMenus[this._index]);
- else // otherwise child_deactivate will do this
- dehighlight(this);
- }
- }
-
- function item_click() {
- if (!animating) {
- if (_this.items[this._index].url)
- location.href = _this.items[this._index].url;
- }
- }
-
- function actuator_mouseover() {
- parentMenuSet.showMenu(_this);
- }
-
- function actuator_mouseout() {
- parentMenuSet.hideMenu(_this);
- }
-
- function content_mouseover() {
- if (!animating) {
- parentMenuSet.showMenu(_this);
- _this.onmouseover();
- }
- }
-
- function content_mouseout() {
- if (!animating) {
- parentMenuSet.hideMenu(_this);
- }
- }
-
- function child_mouseover() {
- if (!animating) {
- parentMenuSet.showMenu(_this);
- }
- }
-
- function child_deactivate() {
- for (var i = 0; i < childMenus.length; i++) {
- if (childMenus[i] == this) {
- dehighlight(elmCache["item"][i]);
- break;
- }
- }
- }
-
- function child_queue() {
- parentMenuSet.hideMenu(_this);
- }
-
- function child_dequeue() {
- parentMenuSet.showMenu(_this);
- }
-
- function toString() {
- var aHtml = [];
- var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : "");
-
- for (var i = 0, item = null; item = this.items[i]; i++) {
- aHtml[i] = item.toString(childMenus[i]);
- }
-
- return '<div id="' + id + '" class="' + sClassName + '">' +
- '<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">' +
- '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr>' +
- aHtml.join('') +
- '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr></table>' +
- '<div class="shadowBottom"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '<div class="shadowRight"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '<div class="background"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
- '</div></div>';
- }
-}
-
-
-//==================================================================================================
-// TransMenuSet
-//==================================================================================================
-// iDirection : The direction to slide out. One of TransMenu.direction.
-// iLeft : Left pixel offset of menus from actuator
-// iTop : Top pixel offset of menus from actuator
-// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
-//==================================================================================================
-TransMenuSet.registry = [];
-
-function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) {
- // public methods
- this.addMenu = addMenu;
- this.showMenu = showMenu;
- this.hideMenu = hideMenu;
- this.hide = hide;
- this.hideCurrent = hideCurrent;
-
- // initialization
- var menus = [];
- var _this = this;
- var current = null;
-
- this.index = TransMenuSet.registry.length;
- TransMenuSet.registry[this.index] = this;
-
- // method implimentations...
- function addMenu(oActuator) {
- var m = new TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, this);
- menus[menus.length] = m;
- return m;
- }
-
- function showMenu(oMenu) {
- if (oMenu != current) {
- // close currently open menu
- if (current != null) hide(current);
-
- // set current menu to this one
- current = oMenu;
-
- // if this menu is closed, open it
- oMenu.show();
- }
- else {
- // hide pending calls to close this menu
- cancelHide(oMenu);
- }
- }
-
- function hideMenu(oMenu) {
- //dbg_dump("hideMenu a " + oMenu.index);
- if (current == oMenu && oMenu.isOpen) {
- //dbg_dump("hideMenu b " + oMenu.index);
- if (!oMenu.hideTimer) scheduleHide(oMenu);
- }
- }
-
- function scheduleHide(oMenu) {
- //dbg_dump("scheduleHide " + oMenu.index);
- oMenu.onqueue();
- oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay);
- }
-
- function cancelHide(oMenu) {
- //dbg_dump("cancelHide " + oMenu.index);
- if (oMenu.hideTimer) {
- oMenu.ondequeue();
- window.clearTimeout(oMenu.hideTimer);
- oMenu.hideTimer = null;
- }
- }
-
- function hide(oMenu) {
- if (!oMenu && current) oMenu = current;
-
- if (oMenu && current == oMenu && oMenu.isOpen) {
- hideCurrent();
- }
- }
-
- function hideCurrent() {
- if (null != current) {
- cancelHide(current);
- current.hideTimer = null;
- current.hide();
- current = null;
- }
- }
-}
-
-//==================================================================================================
-// TransMenuItem (internal)
-// represents an item in a dropdown
-//==================================================================================================
-// sText : The item display text
-// sUrl : URL to load when the item is clicked
-// oParent : Menu this item is a part of
-//==================================================================================================
-function TransMenuItem(sText, sUrl, oParent) {
- this.toString = toString;
- this.text = sText;
- this.url = sUrl;
- this.parentMenu = oParent;
-
- function toString(bDingbat) {
- var sDingbat = bDingbat ? TransMenu.dingbatOff : TransMenu.spacerGif;
- var iEdgePadding = TransMenu.itemPadding + TransMenu.menuPadding;
- var sPaddingLeft = "padding:" + TransMenu.itemPadding + "px; padding-left:" + iEdgePadding + "px;"
- var sPaddingRight = "padding:" + TransMenu.itemPadding + "px; padding-right:" + iEdgePadding + "px;"
-
- return '<tr class="item"><td nowrap style="' + sPaddingLeft + '">' +
- sText + '</td><td width="14" style="' + sPaddingRight + '">' +
- '<img src="' + sDingbat + '" width="14" height="14"></td></tr>';
- }
-}
-
-
-
-
-
-
-//=====================================================================
-// Accel[erated] [an]imation object
-// change a property of an object over time in an accelerated fashion
-//=====================================================================
-// obj : reference to the object whose property you'd like to animate
-// prop : property you would like to change eg: "left"
-// to : final value of prop
-// time : time the animation should take to run
-// zip : optional. specify the zippiness of the acceleration. pick a
-// number between -1 and 1 where -1 is full decelerated, 1 is
-// full accelerated, and 0 is linear (no acceleration). default
-// is 0.
-// unit : optional. specify the units for use with prop. default is
-// "px".
-//=====================================================================
-// bezier functions lifted from the lib_animation.js file in the
-// 13th Parallel API. www.13thparallel.org
-//=====================================================================
-
-function Accelimation(from, to, time, zip) {
- if (typeof zip == "undefined") zip = 0;
- if (typeof unit == "undefined") unit = "px";
-
- this.x0 = from;
- this.x1 = to;
- this.dt = time;
- this.zip = -zip;
- this.unit = unit;
- this.timer = null;
- this.onend = new Function();
- this.onframe = new Function();
-}
-
-
-
-//=====================================================================
-// public methods
-//=====================================================================
-
-// after you create an accelimation, you call this to start it-a runnin'
-Accelimation.prototype.start = function() {
- this.t0 = new Date().getTime();
- this.t1 = this.t0 + this.dt;
- var dx = this.x1 - this.x0;
- this.c1 = this.x0 + ((1 + this.zip) * dx / 3);
- this.c2 = this.x0 + ((2 + this.zip) * dx / 3);
- Accelimation._add(this);
-}
-
-// and if you need to stop it early for some reason...
-Accelimation.prototype.stop = function() {
- Accelimation._remove(this);
-}
-
-
-
-//=====================================================================
-// private methods
-//=====================================================================
-
-// paints one frame. gets called by Accelimation._paintAll.
-Accelimation.prototype._paint = function(time) {
- if (time < this.t1) {
- var elapsed = time - this.t0;
- this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));
- }
- else this._end();
-}
-
-// ends the animation
-Accelimation.prototype._end = function() {
- Accelimation._remove(this);
- this.onframe(this.x1);
- this.onend();
-}
-
-
-
-
-//=====================================================================
-// static methods (all private)
-//=====================================================================
-
-// add a function to the list of ones to call periodically
-Accelimation._add = function(o) {
- var index = this.instances.length;
- this.instances[index] = o;
- // if this is the first one, start the engine
- if (this.instances.length == 1) {
- this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes);
- }
-}
-
-// remove a function from the list
-Accelimation._remove = function(o) {
- for (var i = 0; i < this.instances.length; i++) {
- if (o == this.instances[i]) {
- this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) );
- break;
- }
- }
- // if that was the last one, stop the engine
- if (this.instances.length == 0) {
- window.clearInterval(this.timerID);
- this.timerID = null;
- }
-}
-
-// "engine" - call each function in the list every so often
-Accelimation._paintAll = function() {
- var now = new Date().getTime();
- for (var i = 0; i < this.instances.length; i++) {
- this.instances[i]._paint(now);
- }
-}
-
-
-// Bezier functions:
-Accelimation._B1 = function(t) { return t*t*t }
-Accelimation._B2 = function(t) { return 3*t*t*(1-t) }
-Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) }
-Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) }
-
-
-//Finds the coordinates of a point at a certain stage through a bezier curve
-Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) {
- return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent);
-}
-
-
-//=====================================================================
-// static properties
-//=====================================================================
-
-Accelimation.instances = [];
-Accelimation.targetRes = 10;
-Accelimation.timerID = null;
-
-
-//=====================================================================
-// IE win memory cleanup
-//=====================================================================
-
-if (window.attachEvent) {
- var cearElementProps = [
- 'data',
- 'onmouseover',
- 'onmouseout',
- 'onmousedown',
- 'onmouseup',
- 'ondblclick',
- 'onclick',
- 'onselectstart',
- 'oncontextmenu'
- ];
-
- window.attachEvent("onunload", function() {
- var el;
- for(var d = document.all.length;d--;){
- el = document.all[d];
- for(var c = cearElementProps.length;c--;){
- el[cearElementProps[c]] = null;
- }
- }
- });
-} \ No newline at end of file
diff --git a/usr/local/www/themes/the_wall/javascript/transmenuC.js b/usr/local/www/themes/the_wall/javascript/transmenuC.js
deleted file mode 100644
index 88626c7..0000000
--- a/usr/local/www/themes/the_wall/javascript/transmenuC.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/* =================================================================================================
- * TransMenu
- * March, 2003
- * Customizable multi-level animated DHTML menus with transparency.
- * =================================================================================================
- * "Can I use this?"
- *
- * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
- * out at: http://creativecommons.org/licenses/by/2.0/
- *
- * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
- * for writing it. You may not misrepresent yourself as the author of this code.
- * =================================================================================================
- * "It's kinda hard to read, though"
- *
- * The uncompressed, commented version of this script can be found at:
- * http://youngpup.net/projects/transMenus
- * ============================================================================================== */
-TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;}
-else r=true;}}
-return r;}
-TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}}
-TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();}
-document.write(aMenuHtml.join(""));}
-function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;}
-function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;}
-function initialize(){initCache();initEvents();initSize();ready=true;}
-function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}}
-function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}}
-function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;}
-if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);}
-switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;}
-x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";}
-function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();}
-function slideFrame(x){elmCache["content"].style[pos]=x+"px";}
-function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;}
-function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;}
-else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}}
-function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}}
-_this.elmCache=elmCache;}
-function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;}
-if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;}
-elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;}
-function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;}
-function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;}
-function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}}
-function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}}
-function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}}
-function actuator_mouseover(){parentMenuSet.showMenu(_this);}
-function actuator_mouseout(){parentMenuSet.hideMenu(_this);}
-function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}}
-function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}}
-function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}}
-function child_deactivate(){for(var i=0;i<childMenus.length;i++){if(childMenus[i]==this){dehighlight(elmCache["item"][i]);break;}}}
-function child_queue(){parentMenuSet.hideMenu(_this);}
-function child_dequeue(){parentMenuSet.showMenu(_this);}
-function toString(){var aHtml=[];var sClassName="transMenu"+(oActuator.constructor!=TransMenuItem?" top":"");for(var i=0,item=null;item=this.items[i];i++){aHtml[i]=item.toString(childMenus[i]);}
-return'<div id="'+id+'" class="'+sClassName+'">'+'<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">'+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr>'+aHtml.join('')+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr></table>'+'<div class="shadowBottom"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="shadowRight"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="background"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'</div></div>';}}
-TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;}
-function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();}
-else{cancelHide(oMenu);}}
-function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}}
-function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);}
-function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}}
-function hide(oMenu){if(!oMenu&&current)oMenu=current;if(oMenu&&current==oMenu&&oMenu.isOpen){hideCurrent();}}
-function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}}
-function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;"
-var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;"
-return'<tr class="item"><td nowrap style="'+sPaddingLeft+'">'+sText+'</td><td width="14" style="'+sPaddingRight+'">'+'<img src="'+sDingbat+'" width="14" height="14"></td></tr>';}}
-function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();}
-Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);}
-Accelimation.prototype.stop=function(){Accelimation._remove(this);}
-Accelimation.prototype._paint=function(time){if(time<this.t1){var elapsed=time-this.t0;this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));}
-else this._end();}
-Accelimation.prototype._end=function(){Accelimation._remove(this);this.onframe(this.x1);this.onend();}
-Accelimation._add=function(o){var index=this.instances.length;this.instances[index]=o;if(this.instances.length==1){this.timerID=window.setInterval("Accelimation._paintAll()",this.targetRes);}}
-Accelimation._remove=function(o){for(var i=0;i<this.instances.length;i++){if(o==this.instances[i]){this.instances=this.instances.slice(0,i).concat(this.instances.slice(i+1));break;}}
-if(this.instances.length==0){window.clearInterval(this.timerID);this.timerID=null;}}
-Accelimation._paintAll=function(){var now=new Date().getTime();for(var i=0;i<this.instances.length;i++){this.instances[i]._paint(now);}}
-Accelimation._B1=function(t){return t*t*t}
-Accelimation._B2=function(t){return 3*t*t*(1-t)}
-Accelimation._B3=function(t){return 3*t*(1-t)*(1-t)}
-Accelimation._B4=function(t){return(1-t)*(1-t)*(1-t)}
-Accelimation._getBezier=function(percent,startPos,endPos,control1,control2){return endPos*this._B1(percent)+control2*this._B2(percent)+control1*this._B3(percent)+startPos*this._B4(percent);}
-Accelimation.instances=[];Accelimation.targetRes=10;Accelimation.timerID=null;
-if(window.attachEvent){var cearElementProps=['data','onmouseover','onmouseout','onmousedown','onmouseup','ondblclick','onclick','onselectstart','oncontextmenu'];window.attachEvent("onunload", function() {var el;for(var d=document.all.length;d--;){el=document.all[d];for(var c=cearElementProps.length;c--;){el[cearElementProps[c]] = null;}}});} \ No newline at end of file
diff --git a/usr/local/www/themes/the_wall/jsevents/body.def b/usr/local/www/themes/the_wall/jsevents/body.def
deleted file mode 100644
index 501d548..0000000
--- a/usr/local/www/themes/the_wall/jsevents/body.def
+++ /dev/null
@@ -1,7 +0,0 @@
-# Format: <event_name>=<jsfunction_name> !<forbidden_page_0>,<forbidden_page_1>...<forbidden_page_n>
-# where: forbidden pages are those pages that should *not* use
-# the particular JavaScript function within the JS event
-# specified below.
-# $Id$
-#
-onload=tmenuinit(); !wizard.php \ No newline at end of file
diff --git a/usr/local/www/themes/the_wall/loader.js b/usr/local/www/themes/the_wall/loader.js
deleted file mode 100644
index 20ecfbb..0000000
--- a/usr/local/www/themes/the_wall/loader.js
+++ /dev/null
@@ -1,30 +0,0 @@
-//<![CDATA[
-
-var browser = '';
-var version = '';
-var entrance = '';
-var cond = '';
-
-// BROWSER?
-if (browser == '') {
- if (navigator.appName.indexOf('Microsoft') != -1)
- browser = 'IE';
- else if (navigator.appName.indexOf('Netscape') != -1)
- browser = 'Netscape';
- else
- browser = 'IE';
-}
-if (version == '') {
- version= navigator.appVersion;
- paren = version.indexOf('(');
- whole_version = navigator.appVersion.substring(0,paren-1);
- version = parseInt(whole_version);
-}
-
-if (browser == 'IE' && version < 7) {
- document.write('<script type="text/javascript" src="/themes/the_wall/javascript/ie7/ie7-standard-p.js"></script>');
-}
-
-document.write('<script type="text/javascript" src="/themes/the_wall/javascript/niftyjsCode.js"></script>');
-
-//]]>
diff --git a/usr/local/www/themes/the_wall/login.css b/usr/local/www/themes/the_wall/login.css
deleted file mode 100644
index 3c97a9a..0000000
--- a/usr/local/www/themes/the_wall/login.css
+++ /dev/null
@@ -1,1159 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-
-}
-
-.infoboxnptd2 {
- width:100%;
- color:white;
- background-color:#990000;
- padding-right: 10px;
-}
-
-.infoboxnptd {
- width:8%;
- background-color:#990000;
-}
-
-.infoboxnptable {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnptable2 {
- height:32px;
- width:100%;
- background-color:#990000;
-}
-
-.infoboxnp {
- background-color:#990000;
- width:100%;
-}
-
-.infoboxnpimg {
- vertical-align:middle;
- width:28px;
- height:32px;
- background-color:#990000;
-}
-
-/* please adjust the bgcolor to be used together with niftycorners! */
-.rtop, .artop {
- background-color: #999999;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 9px;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- background: url('images/background.jpg') repeat-x; background-attachment:fixed;
- background-position : center 0px;
- background-color: #999999;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
- font-size: 14px;
- color: #cccccc;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- /* background: url('images/menu.gif') no-repeat; */
- /* width: 693px; */
- position: relative;
- top: -25px;
- left: 3px;
- width: 810px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- /* width: 7.5em; */
- width: 8.77em;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #990000;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background-color: #666666;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 10px;
- padding-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 20px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
- text-align: center;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 8px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-#login {
-/* background: #cccccc; */
- background-color: transparent;
- border: 0px solid #cccccc;
- margin: 5em auto;
- padding: 0em;
- width: 400px;
-/* filter:alpha(opacity=60);
- -moz-opacity:0.6;
- -khtml-opacity: 0.6;
- opacity: 0.6; */
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
-/* background: #ffffff; */
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 400px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -420px;
- left: 70px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- top: -300px; */
-}
-
-#login #username, #password {
- font-size: 1em;
- width: 60%;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px;
- position: relative;
- left: 10px;
- top: -300px; */
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- text-align: center;
- padding: 3px;
- margin: 0em;
-/* text-indent: 10px; */
- position: relative;
- top: -20px;
- left: 170px;
-}
-
-/* loginerror box follows */
-
-#login #inputerrors {
- background-color: transparent;
- border: 0px solid #666666;
- margin: 5em auto;
- vertical-align: middle;
- padding: 0em;
- width: 330px;
- height: 50px;
- position: relative;
- top: -370px;
-}
-/*
-#login #errortext {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 330px;
- position: relative;
- top: -350px;
-}
-
-#login #errordesc {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 330px;
- position: relative;
- top: -350px;
-}
-#login #errordesc h1 {
- background: url(/images/misc/logon.png) no-repeat top left;
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 50px;
- border-bottom: none;
-// position: relative;
-// top: -300px;
-}
-*/ \ No newline at end of file
diff --git a/usr/local/www/themes/the_wall/menu.inc b/usr/local/www/themes/the_wall/menu.inc
deleted file mode 100644
index a274410..0000000
--- a/usr/local/www/themes/the_wall/menu.inc
+++ /dev/null
@@ -1,177 +0,0 @@
-<?php
-/* $Id$ */
-/* ========================================================================== */
-/*
- menu.inc
- Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
- All rights reserved.
- */
-/* ========================================================================== */
-/*
- Originally part of m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-/* ========================================================================== */
-
-require("menu.inc");
-
-define("TMENU_STUB", "
- // set up drop downs anywhere in the body of the page. I think the bottom of the page is better..
- // but you can experiment with effect on loadtime.
- if (TransMenu.isSupported()) {
-
- //==================================================================================================
- // create a set of dropdowns
- //==================================================================================================
- // the first param should always be down, as it is here
- //
- // The second and third param are the top and left offset positions of the menus from their actuators
- // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use
- // something like -5, 5
- //
- // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner
- // of the actuator from which to measure the offset positions above. Here we are saying we want the
- // menu to appear directly below the bottom left corner of the actuator
- //==================================================================================================
- var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft);
-
- //==================================================================================================
- // create a dropdown menu
- //==================================================================================================
- // the first parameter should be the HTML element which will act actuator for the menu
- //==================================================================================================
-
- @@MENU_DEFINITIONS@@
-
- //==================================================================================================
- // write drop downs into page
- //==================================================================================================
- // this method writes all the HTML for the menus into the page with document.write(). It must be
- // called within the body of the HTML page.
- //==================================================================================================
- TransMenu.renderAll();
- }
-");
-
-class NervecenterMenu extends Menu {
- private $menuJScript = "NOT-SET";
- private $menuJScriptEvents = "NOT-SET";
- private $menuID = "NOT-SET";
-
- public function __construct($identification = "", $filename = "", Component $c = NULL) {
- parent::__construct($identification, $filename, $c);
-
- $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
- $this->menuID = $id;
-
- if ($this->hasParent()) {
- $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n";
- }
- } // end __construct
-
- public function getMenuID() {
- return $this->menuID;
- }
-
- public function setMenuID($myMenuID) {
- $this->menuID = $myMenuID;
- }
-
- public function getMenuJScript() {
- $childJScript = "";
- foreach ($this->getChildren() as $component) {
- $childJScript .= $component->getMenuJScript();
- }
-
- if (! $this->hasParent()) {
- $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB);
- } else {
- $this->menuJScript .= "\n$childJScript\n";
- }
-
- return $this->menuJScript;
- }
-
- public function getMenuJScriptEvents() {
- return $this->menuJScriptEvents;
- }
-
- public function __toString() {
- if (! $this->hasParent()) {
- $menuMarkup =<<<EOD
- <div id="menu">
- @@CHILD_ELEMENTS@@
- </div>
-
-EOD;
- } else {
- $name = gettext($this->getID());
- $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
-
- $menuMarkup =<<<EOD
- <a id="{$id}" href="#">{$name}</a>
- @@CHILD_ELEMENTS@@
-EOD;
- }
-
- $childMarkup = "";
- foreach ($this->getChildren() as $component) {
- $childMarkup .= $component;
- }
-
- $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup);
-
- return $menuMarkup;
- }
-}
-
-class NervecenterMenuItem extends MenuItem {
- private $menuJScript = "NOT-SET";
- private $menuJScriptEvents = "NOT-SET";
-
- public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) {
- parent::__construct($identification, $filename, $href, $c);
-
- $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}";
- $name = gettext($this->getID());
- $file = $this->getFile();
-
- $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n");
- }
-
- public function getMenuJScript() {
- return $this->menuJScript;
- }
-
- public function getMenuJScriptEvents() {
- return $this->menuJScriptEvents;
- }
-
- public function __toString() {
- return "";
- }
-}
-
-?>
diff --git a/usr/local/www/themes/the_wall/new_tab_menu.css b/usr/local/www/themes/the_wall/new_tab_menu.css
deleted file mode 100644
index 04c4cf2..0000000
--- a/usr/local/www/themes/the_wall/new_tab_menu.css
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- new_tab_menu.css
- part of pfSense
- Copyright (C) 2010-2011 Robert Zelaya
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-
- Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
- The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
-
- <tr>
- <td>
- <?php
- $tab_array_indent = 0; // move to the line in px
- $tab_array_space = 1; // space betwen lines in px
- $tab_array_char_limit = 82; // number or chr before the drop down box
- $tab_array = array();
- $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
- $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
- $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
- $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
- $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
- $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
-
-*/
-
-.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
-
-.newtabmenu li{float:left; margin-right:2px; text-align: center;}
-.newtabmenu a:link, .newtabmenu a:visited{
- background:url(images/new_tab_menu.png) right 45px;
- color:#ffffff; /* noactive font */
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- font-weight:bold;
- font-size:.9em;
- height:20px;
- line-height:20px;
- text-decoration:none;
-}
-.newtabmenu a span{
- background:url(images/new_tab_menu.png) left 45px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- height:20px;
- margin-right:7px;
- padding-left:7px;
-}
-.newtabmenu a:hover{
- background:url(images/new_tab_menu.png) right 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
- color:#ffffff; /* hover over font */
-}
-.newtabmenu a:hover span{
- background:url(images/new_tab_menu.png) left 23px;
- display:block;
- /* fix for IE6 */
- display: inline-block;
- /* END */
-}
-
-/* -------------------------------- */
-/* ACTIVE ELEMENTS */
-.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
- color:#000000; /* active font */
- background:url(images/new_tab_menu.png) right 0 no-repeat;
-}
-.newtabmenu_active a span, .newtabmenu_active a:hover span{
- background:url(images/new_tab_menu.png) left 0 no-repeat;
-} \ No newline at end of file
diff --git a/usr/local/www/themes/the_wall/no_big_logo b/usr/local/www/themes/the_wall/no_big_logo
deleted file mode 100644
index 6e5c70d..0000000
--- a/usr/local/www/themes/the_wall/no_big_logo
+++ /dev/null
@@ -1 +0,0 @@
-NO! DONT! \ No newline at end of file
diff --git a/usr/local/www/themes/the_wall/rrdcolors.inc.php b/usr/local/www/themes/the_wall/rrdcolors.inc.php
deleted file mode 100644
index dcb7a39..0000000
--- a/usr/local/www/themes/the_wall/rrdcolors.inc.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/* $Id$ */
-/*
- rrdcolors.inc.php
- Part of pfSense
- Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/* This file is included by the RRD graphing page and sets the colors */
-
-/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
-$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
-
-/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
-$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
-
-/* 95th Percentile Lines Out, In */
-$colortraffic95 = array('660000', 'FF0000');
-
-/* State Table pfrate, pfstates, pfnat, srcip, dstip */
-$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
-
-/* Processor Usage user, nice, system, int, processes */
-$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
-
-/* Memory Usage active, inact, free, cache, wire */
-$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
-
-/* MBUF Usage current, cache, total, max */
-$colormbuf = array('0080FF','00E344','FF0000','000000');
-
-/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
-$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
-$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
-
-/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
-$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
-/* Quality Graph Loss */
-$colorqualityloss = 'ee0000';
-
-/* Wireless Graph SNR, Rate, Channel*/
-/* Cellular Graph RSSI, */
-$colorwireless = array('333333','a83c3c','999999');
-
-/* SPAMD Times min area, avg area, max area, Time line */
-$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
-/* SPAMD Connections max area, min area, min line, max line, avg line */
-$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
-
-/* OpenVPN Users Online Users */
-$colorvpnusers = array('990000');
-
-/* Captive Portal Total Users Total Users */
-/* Captive Portal Concurrent Concurrent Users */
-$colorcaptiveportalusers = array('990000');
-
-?>
diff --git a/usr/local/www/themes/the_wall/styles/jquery-ui-1.11.1.css b/usr/local/www/themes/the_wall/styles/jquery-ui-1.11.1.css
deleted file mode 100644
index 8a8c54f..0000000
--- a/usr/local/www/themes/the_wall/styles/jquery-ui-1.11.1.css
+++ /dev/null
@@ -1,1226 +0,0 @@
-/*! jQuery UI - v1.11.1 - 2014-09-22
-* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden {
- display: none;
-}
-.ui-helper-hidden-accessible {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
-}
-.ui-helper-reset {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- line-height: 1.3;
- text-decoration: none;
- font-size: 100%;
- list-style: none;
-}
-.ui-helper-clearfix:before,
-.ui-helper-clearfix:after {
- content: "";
- display: table;
- border-collapse: collapse;
-}
-.ui-helper-clearfix:after {
- clear: both;
-}
-.ui-helper-clearfix {
- min-height: 0; /* support: IE7 */
-}
-.ui-helper-zfix {
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- position: absolute;
- opacity: 0;
- filter:Alpha(Opacity=0); /* support: IE8 */
-}
-
-.ui-front {
- z-index: 100;
-}
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled {
- cursor: default !important;
-}
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- display: block;
- text-indent: -99999px;
- overflow: hidden;
- background-repeat: no-repeat;
-}
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-.ui-draggable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable {
- position: relative;
-}
-.ui-resizable-handle {
- position: absolute;
- font-size: 0.1px;
- display: block;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
- display: none;
-}
-.ui-resizable-n {
- cursor: n-resize;
- height: 7px;
- width: 100%;
- top: -5px;
- left: 0;
-}
-.ui-resizable-s {
- cursor: s-resize;
- height: 7px;
- width: 100%;
- bottom: -5px;
- left: 0;
-}
-.ui-resizable-e {
- cursor: e-resize;
- width: 7px;
- right: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-w {
- cursor: w-resize;
- width: 7px;
- left: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-se {
- cursor: se-resize;
- width: 12px;
- height: 12px;
- right: 1px;
- bottom: 1px;
-}
-.ui-resizable-sw {
- cursor: sw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- bottom: -5px;
-}
-.ui-resizable-nw {
- cursor: nw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- top: -5px;
-}
-.ui-resizable-ne {
- cursor: ne-resize;
- width: 9px;
- height: 9px;
- right: -5px;
- top: -5px;
-}
-.ui-selectable {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-selectable-helper {
- position: absolute;
- z-index: 100;
- border: 1px dotted black;
-}
-.ui-sortable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-accordion .ui-accordion-header {
- display: block;
- cursor: pointer;
- position: relative;
- margin: 2px 0 0 0;
- padding: .5em .5em .5em .7em;
- min-height: 0; /* support: IE7 */
- font-size: 100%;
-}
-.ui-accordion .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
- position: absolute;
- left: .5em;
- top: 50%;
- margin-top: -8px;
-}
-.ui-accordion .ui-accordion-content {
- padding: 1em 2.2em;
- border-top: 0;
- overflow: auto;
-}
-.ui-autocomplete {
- position: absolute;
- top: 0;
- left: 0;
- cursor: default;
-}
-.ui-button {
- display: inline-block;
- position: relative;
- padding: 0;
- line-height: normal;
- margin-right: .1em;
- cursor: pointer;
- vertical-align: middle;
- text-align: center;
- overflow: visible; /* removes extra width in IE */
-}
-.ui-button,
-.ui-button:link,
-.ui-button:visited,
-.ui-button:hover,
-.ui-button:active {
- text-decoration: none;
-}
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
- width: 2.2em;
-}
-/* button elements seem to need a little more width */
-button.ui-button-icon-only {
- width: 2.4em;
-}
-.ui-button-icons-only {
- width: 3.4em;
-}
-button.ui-button-icons-only {
- width: 3.7em;
-}
-
-/* button text element */
-.ui-button .ui-button-text {
- display: block;
- line-height: normal;
-}
-.ui-button-text-only .ui-button-text {
- padding: .4em 1em;
-}
-.ui-button-icon-only .ui-button-text,
-.ui-button-icons-only .ui-button-text {
- padding: .4em;
- text-indent: -9999999px;
-}
-.ui-button-text-icon-primary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 1em .4em 2.1em;
-}
-.ui-button-text-icon-secondary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 2.1em .4em 1em;
-}
-.ui-button-text-icons .ui-button-text {
- padding-left: 2.1em;
- padding-right: 2.1em;
-}
-/* no icon support for input elements, provide padding by default */
-input.ui-button {
- padding: .4em 1em;
-}
-
-/* button icon element(s) */
-.ui-button-icon-only .ui-icon,
-.ui-button-text-icon-primary .ui-icon,
-.ui-button-text-icon-secondary .ui-icon,
-.ui-button-text-icons .ui-icon,
-.ui-button-icons-only .ui-icon {
- position: absolute;
- top: 50%;
- margin-top: -8px;
-}
-.ui-button-icon-only .ui-icon {
- left: 50%;
- margin-left: -8px;
-}
-.ui-button-text-icon-primary .ui-button-icon-primary,
-.ui-button-text-icons .ui-button-icon-primary,
-.ui-button-icons-only .ui-button-icon-primary {
- left: .5em;
-}
-.ui-button-text-icon-secondary .ui-button-icon-secondary,
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
- right: .5em;
-}
-
-/* button sets */
-.ui-buttonset {
- margin-right: 7px;
-}
-.ui-buttonset .ui-button {
- margin-left: 0;
- margin-right: -.3em;
-}
-
-/* workarounds */
-/* reset extra padding in Firefox, see h5bp.com/l */
-input.ui-button::-moz-focus-inner,
-button.ui-button::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-.ui-datepicker {
- width: 17em;
- padding: .2em .2em 0;
- display: none;
-}
-.ui-datepicker .ui-datepicker-header {
- position: relative;
- padding: .2em 0;
-}
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-next {
- position: absolute;
- top: 2px;
- width: 1.8em;
- height: 1.8em;
-}
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
- top: 1px;
-}
-.ui-datepicker .ui-datepicker-prev {
- left: 2px;
-}
-.ui-datepicker .ui-datepicker-next {
- right: 2px;
-}
-.ui-datepicker .ui-datepicker-prev-hover {
- left: 1px;
-}
-.ui-datepicker .ui-datepicker-next-hover {
- right: 1px;
-}
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
- display: block;
- position: absolute;
- left: 50%;
- margin-left: -8px;
- top: 50%;
- margin-top: -8px;
-}
-.ui-datepicker .ui-datepicker-title {
- margin: 0 2.3em;
- line-height: 1.8em;
- text-align: center;
-}
-.ui-datepicker .ui-datepicker-title select {
- font-size: 1em;
- margin: 1px 0;
-}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year {
- width: 45%;
-}
-.ui-datepicker table {
- width: 100%;
- font-size: .9em;
- border-collapse: collapse;
- margin: 0 0 .4em;
-}
-.ui-datepicker th {
- padding: .7em .3em;
- text-align: center;
- font-weight: bold;
- border: 0;
-}
-.ui-datepicker td {
- border: 0;
- padding: 1px;
-}
-.ui-datepicker td span,
-.ui-datepicker td a {
- display: block;
- padding: .2em;
- text-align: right;
- text-decoration: none;
-}
-.ui-datepicker .ui-datepicker-buttonpane {
- background-image: none;
- margin: .7em 0 0 0;
- padding: 0 .2em;
- border-left: 0;
- border-right: 0;
- border-bottom: 0;
-}
-.ui-datepicker .ui-datepicker-buttonpane button {
- float: right;
- margin: .5em .2em .4em;
- cursor: pointer;
- padding: .2em .6em .3em .6em;
- width: auto;
- overflow: visible;
-}
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
- float: left;
-}
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi {
- width: auto;
-}
-.ui-datepicker-multi .ui-datepicker-group {
- float: left;
-}
-.ui-datepicker-multi .ui-datepicker-group table {
- width: 95%;
- margin: 0 auto .4em;
-}
-.ui-datepicker-multi-2 .ui-datepicker-group {
- width: 50%;
-}
-.ui-datepicker-multi-3 .ui-datepicker-group {
- width: 33.3%;
-}
-.ui-datepicker-multi-4 .ui-datepicker-group {
- width: 25%;
-}
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
- border-left-width: 0;
-}
-.ui-datepicker-multi .ui-datepicker-buttonpane {
- clear: left;
-}
-.ui-datepicker-row-break {
- clear: both;
- width: 100%;
- font-size: 0;
-}
-
-/* RTL support */
-.ui-datepicker-rtl {
- direction: rtl;
-}
-.ui-datepicker-rtl .ui-datepicker-prev {
- right: 2px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next {
- left: 2px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
- right: 1px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
- left: 1px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
- clear: right;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
- float: left;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
-.ui-datepicker-rtl .ui-datepicker-group {
- float: right;
-}
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
- border-right-width: 0;
- border-left-width: 1px;
-}
-.ui-dialog {
- overflow: hidden;
- position: absolute;
- top: 0;
- left: 0;
- padding: .2em;
- outline: 0;
-}
-.ui-dialog .ui-dialog-titlebar {
- padding: .4em 1em;
- position: relative;
-}
-.ui-dialog .ui-dialog-title {
- float: left;
- margin: .1em 0;
- white-space: nowrap;
- width: 90%;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.ui-dialog .ui-dialog-titlebar-close {
- position: absolute;
- right: .3em;
- top: 50%;
- width: 20px;
- margin: -10px 0 0 0;
- padding: 1px;
- height: 20px;
-}
-.ui-dialog .ui-dialog-content {
- position: relative;
- border: 0;
- padding: .5em 1em;
- background: none;
- overflow: auto;
-}
-.ui-dialog .ui-dialog-buttonpane {
- text-align: left;
- border-width: 1px 0 0 0;
- background-image: none;
- margin-top: .5em;
- padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
- float: right;
-}
-.ui-dialog .ui-dialog-buttonpane button {
- margin: .5em .4em .5em 0;
- cursor: pointer;
-}
-.ui-dialog .ui-resizable-se {
- width: 12px;
- height: 12px;
- right: -5px;
- bottom: -5px;
- background-position: 16px 16px;
-}
-.ui-draggable .ui-dialog-titlebar {
- cursor: move;
-}
-.ui-menu {
- list-style: none;
- padding: 0;
- margin: 0;
- display: block;
- outline: none;
-}
-.ui-menu .ui-menu {
- position: absolute;
-}
-.ui-menu .ui-menu-item {
- position: relative;
- margin: 0;
- padding: 3px 1em 3px .4em;
- cursor: pointer;
- min-height: 0; /* support: IE7 */
- /* support: IE10, see #8844 */
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
-}
-.ui-menu .ui-menu-divider {
- margin: 5px 0;
- height: 0;
- font-size: 0;
- line-height: 0;
- border-width: 1px 0 0 0;
-}
-.ui-menu .ui-state-focus,
-.ui-menu .ui-state-active {
- margin: -1px;
-}
-
-/* icon support */
-.ui-menu-icons {
- position: relative;
-}
-.ui-menu-icons .ui-menu-item {
- padding-left: 2em;
-}
-
-/* left-aligned */
-.ui-menu .ui-icon {
- position: absolute;
- top: 0;
- bottom: 0;
- left: .2em;
- margin: auto 0;
-}
-
-/* right-aligned */
-.ui-menu .ui-menu-icon {
- left: auto;
- right: 0;
-}
-.ui-progressbar {
- height: 1em;
- text-align: left;
- overflow: hidden;
-}
-.ui-progressbar .ui-progressbar-value {
- margin: -1px;
- height: 100%;
- background-color: #990000;
-}
-.ui-progressbar .ui-progressbar-overlay {
- background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
- height: 100%;
- filter: alpha(opacity=25); /* support: IE8 */
- opacity: 0.25;
-}
-.ui-progressbar-indeterminate .ui-progressbar-value {
- background-image: none;
-}
-.ui-selectmenu-menu {
- padding: 0;
- margin: 0;
- position: absolute;
- top: 0;
- left: 0;
- display: none;
-}
-.ui-selectmenu-menu .ui-menu {
- overflow: auto;
- /* Support: IE7 */
- overflow-x: hidden;
- padding-bottom: 1px;
-}
-.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
- font-size: 1em;
- font-weight: bold;
- line-height: 1.5;
- padding: 2px 0.4em;
- margin: 0.5em 0 0 0;
- height: auto;
- border: 0;
-}
-.ui-selectmenu-open {
- display: block;
-}
-.ui-selectmenu-button {
- display: inline-block;
- overflow: hidden;
- position: relative;
- text-decoration: none;
- cursor: pointer;
-}
-.ui-selectmenu-button span.ui-icon {
- right: 0.5em;
- left: auto;
- margin-top: -8px;
- position: absolute;
- top: 50%;
-}
-.ui-selectmenu-button span.ui-selectmenu-text {
- text-align: left;
- padding: 0.4em 2.1em 0.4em 1em;
- display: block;
- line-height: 1.4;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.ui-slider {
- position: relative;
- text-align: left;
-}
-.ui-slider .ui-slider-handle {
- position: absolute;
- z-index: 2;
- width: 1.2em;
- height: 1.2em;
- cursor: default;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-slider .ui-slider-range {
- position: absolute;
- z-index: 1;
- font-size: .7em;
- display: block;
- border: 0;
- background-position: 0 0;
-}
-
-/* support: IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
- filter: inherit;
-}
-
-.ui-slider-horizontal {
- height: .8em;
-}
-.ui-slider-horizontal .ui-slider-handle {
- top: -.3em;
- margin-left: -.6em;
-}
-.ui-slider-horizontal .ui-slider-range {
- top: 0;
- height: 100%;
-}
-.ui-slider-horizontal .ui-slider-range-min {
- left: 0;
-}
-.ui-slider-horizontal .ui-slider-range-max {
- right: 0;
-}
-
-.ui-slider-vertical {
- width: .8em;
- height: 100px;
-}
-.ui-slider-vertical .ui-slider-handle {
- left: -.3em;
- margin-left: 0;
- margin-bottom: -.6em;
-}
-.ui-slider-vertical .ui-slider-range {
- left: 0;
- width: 100%;
-}
-.ui-slider-vertical .ui-slider-range-min {
- bottom: 0;
-}
-.ui-slider-vertical .ui-slider-range-max {
- top: 0;
-}
-.ui-spinner {
- position: relative;
- display: inline-block;
- overflow: hidden;
- padding: 0;
- vertical-align: middle;
-}
-.ui-spinner-input {
- border: none;
- background: none;
- color: inherit;
- padding: 0;
- margin: .2em 0;
- vertical-align: middle;
- margin-left: .4em;
- margin-right: 22px;
-}
-.ui-spinner-button {
- width: 16px;
- height: 50%;
- font-size: .5em;
- padding: 0;
- margin: 0;
- text-align: center;
- position: absolute;
- cursor: default;
- display: block;
- overflow: hidden;
- right: 0;
-}
-/* more specificity required here to override default borders */
-.ui-spinner a.ui-spinner-button {
- border-top: none;
- border-bottom: none;
- border-right: none;
-}
-/* vertically center icon */
-.ui-spinner .ui-icon {
- position: absolute;
- margin-top: -8px;
- top: 50%;
- left: 0;
-}
-.ui-spinner-up {
- top: 0;
-}
-.ui-spinner-down {
- bottom: 0;
-}
-
-/* TR overrides */
-.ui-spinner .ui-icon-triangle-1-s {
- /* need to fix icons sprite */
- background-position: -65px -16px;
-}
-.ui-tabs {
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
- padding: .2em;
-}
-.ui-tabs .ui-tabs-nav {
- margin: 0;
- padding: .2em .2em 0;
-}
-.ui-tabs .ui-tabs-nav li {
- list-style: none;
- float: left;
- position: relative;
- top: 0;
- margin: 1px .2em 0 0;
- border-bottom-width: 0;
- padding: 0;
- white-space: nowrap;
-}
-.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
- float: left;
- padding: .5em 1em;
- text-decoration: none;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
- margin-bottom: -1px;
- padding-bottom: 1px;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
- cursor: text;
-}
-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
- cursor: pointer;
-}
-.ui-tabs .ui-tabs-panel {
- display: block;
- border-width: 0;
- padding: 1em 1.4em;
- background: none;
-}
-.ui-tooltip {
- padding: 8px;
- position: absolute;
- z-index: 9999;
- max-width: 300px;
- -webkit-box-shadow: 0 0 5px #aaa;
- box-shadow: 0 0 5px #aaa;
-}
-body .ui-tooltip {
- border-width: 2px;
-}
-
-/* Component containers
-----------------------------------*/
-.ui-widget {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1.1em;
-}
-.ui-widget .ui-widget {
- font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
- font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
- font-size: 1em;
-}
-.ui-widget-content {
- border: 1px solid #aaaaaa;
- background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
- color: #333333;
-}
-.ui-widget-content a {
- color: #333333;
-}
-.ui-widget-header {
- border: 1px solid #bbbbbb;
- /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
- color: #444444;
- font-weight: bold;
-}
-.ui-widget-header a {
- color: #444444;
-}
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default {
- border: 1px solid #cccccc;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #3383bb;
-}
-.ui-state-default a,
-.ui-state-default a:link,
-.ui-state-default a:visited {
- color: #3383bb;
- text-decoration: none;
-}
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus {
- border: 1px solid #bbbbbb;
- background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #599fcf;
-}
-.ui-state-hover a,
-.ui-state-hover a:hover,
-.ui-state-hover a:link,
-.ui-state-hover a:visited,
-.ui-state-focus a,
-.ui-state-focus a:hover,
-.ui-state-focus a:link,
-.ui-state-focus a:visited {
- color: #599fcf;
- text-decoration: none;
-}
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active {
- border: 1px solid #999999;
- background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
- font-weight: bold;
- color: #ffffff;
-}
-.ui-state-active a,
-.ui-state-active a:link,
-.ui-state-active a:visited {
- color: #ffffff;
- text-decoration: none;
-}
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight,
-.ui-widget-header .ui-state-highlight {
- border: 1px solid #ffffff;
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
- color: #444444;
-}
-.ui-state-highlight a,
-.ui-widget-content .ui-state-highlight a,
-.ui-widget-header .ui-state-highlight a {
- color: #444444;
-}
-.ui-state-error,
-.ui-widget-content .ui-state-error,
-.ui-widget-header .ui-state-error {
- border: 1px solid #c0402a;
- background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
- color: #ffffff;
-}
-.ui-state-error a,
-.ui-widget-content .ui-state-error a,
-.ui-widget-header .ui-state-error a {
- color: #ffffff;
-}
-.ui-state-error-text,
-.ui-widget-content .ui-state-error-text,
-.ui-widget-header .ui-state-error-text {
- color: #ffffff;
-}
-.ui-priority-primary,
-.ui-widget-content .ui-priority-primary,
-.ui-widget-header .ui-priority-primary {
- font-weight: bold;
-}
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary,
-.ui-widget-header .ui-priority-secondary {
- opacity: .7;
- filter:Alpha(Opacity=70); /* support: IE8 */
- font-weight: normal;
-}
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled,
-.ui-widget-header .ui-state-disabled {
- opacity: .35;
- filter:Alpha(Opacity=35); /* support: IE8 */
- background-image: none;
-}
-.ui-state-disabled .ui-icon {
- filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
-}
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- width: 16px;
- height: 16px;
-}
-.ui-icon,
-.ui-widget-content .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-widget-header .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
-}
-.ui-state-default .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
-}
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-active .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
-}
-.ui-state-highlight .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
- background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
-}
-
-/* positioning */
-.ui-icon-blank { background-position: 16px 16px; }
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-on { background-position: -96px -144px; }
-.ui-icon-radio-off { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
- border-top-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
- border-top-right-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
- border-bottom-left-radius: 6px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
- border-bottom-right-radius: 6px;
-}
-
-/* Overlays */
-.ui-widget-overlay {
- background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
- opacity: .8;
- filter: Alpha(Opacity=80); /* support: IE8 */
-}
-.ui-widget-shadow {
- margin: -4px 0 0 -4px;
- padding: 4px;
- background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
- opacity: .6;
- filter: Alpha(Opacity=60); /* support: IE8 */
- border-radius: 0pxdow;
-}
diff --git a/usr/local/www/themes/the_wall/styles/menustyles.css b/usr/local/www/themes/the_wall/styles/menustyles.css
deleted file mode 100644
index 06b3c7a..0000000
--- a/usr/local/www/themes/the_wall/styles/menustyles.css
+++ /dev/null
@@ -1,44 +0,0 @@
-#navigation {
- /* border:1px solid black; */
- width: 98%;
- vertical-align: middle;
- height: 16px;
- padding-top: 4px;
- }
-
-#menu {
- /* background: #990000; */
- /* border-bottom:1px solid white; */
- padding: 0 0 0 0;
- width: 98%;
- vertical-align: middle;
- height: 16px;
- }
-#menu a {
- padding: 2px 28px 4px 28px;
- text-decoration: none;
- font-weight: bold;
- font-size: 1.0em;
- color: #FFFFFF;
- width: 08%;
- height: 16px;
- }
-#menu a.hover {
- background: #AF2020;
- }
-#menu span {
- display: none;
- }
-
-#subnav {
- font-size: 10px;
- margin-bottom: 2em;
- }
-#subnav a {
- color: #FF0000; /* #FB3B00; */
- margin-right: 1em;
- }
-#subnav span {
- color: silver;
- margin-right: 1em;
- }
diff --git a/usr/local/www/themes/the_wall/styles/transmenu.css b/usr/local/www/themes/the_wall/styles/transmenu.css
deleted file mode 100644
index f683574..0000000
--- a/usr/local/www/themes/the_wall/styles/transmenu.css
+++ /dev/null
@@ -1,75 +0,0 @@
-/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */
-.transMenu {
- position:absolute;
- overflow:hidden;
- left:-1000px;
- top:-1000px;
- }
-
-/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */
-.transMenu .content {
- position:absolute;
- }
-
-/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */
-.transMenu .items {
- position:relative;
- left:0px; top:0px;
- z-index:2;
- }
-
-.transMenu.top .items {
- border-top:none;
- }
-
-/* each TR.item is one menu item */
-.transMenu .item {
- color: #FFFFFF; /* #336; */
- font-size: 1.1em;
- font-weight: normal;
- font-family:sans-serif;
- text-decoration:none;
- /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */
- border:none;
- cursor:pointer;
- cursor:hand;
- }
-
-/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */
-/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */
-.transMenu .background {
- position:absolute;
- left:0px; top:0px;
- z-index:1;
- -moz-opacity:.8;
- filter:alpha(opacity=80);
- }
-
-/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */
-.transMenu .shadowRight {
- position:absolute;
- z-index:3;
- top:3px; width:2px;
- -moz-opacity:.4;
- filter:alpha(opacity=40);
- }
-
-/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */
-.transMenu .shadowBottom {
- position:absolute;
- z-index:1;
- left:3px; height:2px;
- -moz-opacity:.4;
- filter:alpha(opacity=40);
- }
-
-/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */
-.transMenu .item.hover {
- background:#fdfdfd;
- color:black;
- }
-
-/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */
-.transMenu .item img {
- margin-left:10px;
- } \ No newline at end of file
diff --git a/usr/local/www/themes/the_wall/wizard.css b/usr/local/www/themes/the_wall/wizard.css
deleted file mode 100644
index a2d31d5..0000000
--- a/usr/local/www/themes/the_wall/wizard.css
+++ /dev/null
@@ -1,1060 +0,0 @@
-/* Element CSS Definitions */
-html, body, td, th, input, select {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.9em;
-
-}
-
-.nowrap { white-space: nowrap; }
-
-/* please adjust the bgcolor to be used together with niftycorners! */
-.rtop, .artop {
- background-color: #999999;
-}
-
-div.GraphLink {
- position: relative;
-}
-
-span.GraphLinkLine {
- position: absolute;
- background-color: #990000;
- width: 100%;
-}
-
-/* DOM Tooltip CSS definitions */
-div.niceTitle
-{
- background-color: #333333;
- color: #FFFFFF;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- width: 250px;
- left: 0;
- top: 0;
- padding: 4px;
- position: absolute;
- text-align: left;
- z-index: 20;
- -moz-border-radius: 0 10px 10px 10px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
- -moz-opacity: .87;
- -khtml-opacity: .87;
- opacity: .87;
-}
-div.niceTitle h1
-{
- background: #990000;
- border-bottom: 1px dotted #FFFFFF;
- font-weight: bold;
- font-size: 13px;
- font-family: "Trebuchet MS", sans-serif;
- margin: 3px;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 3px;
- text-align: left;
- left: 0;
- top: 0;
- -moz-border-radius: 0 8px 0 0;
- -moz-opacity: 1;
-}
-div.niceTitle .contents
-{
- margin: 0;
- padding: 0 3px;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
-}
-div.niceTitle p
-{
- background: #FFFFFF;
- border: 1px solid #990000;
- color: #000000;
- font-size: 9px;
- padding: 5px;
- margin: 3px;
- text-align: left;
- -moz-opacity: 1;
- -moz-border-radius: 0 0 8px 8px;
-}
-
-body {
- margin: 0px auto;
- /* background: url('images/background.png') no-repeat; */
- background-position : center 0px;
- background-color: #999999;
-}
-
-form {
- margin: 0px;
-}
-a {
- text-decoration: none;
-}
-form input {
- font-size: 1.1em;
-}
-
-iframe {
- z-index: 1;
- border: 1px dashed #990000;
-}
-.iframe {
- background-color: #FFFFFF;
-}
-
-/* ID Based CSS Definitions */
-#wrapper {
- width: 810px;
- margin: 0px auto;
-}
-
-#header {
- background: url('images/header.png') no-repeat;
- background-position: 0px;
- height: 102px;
- width: 810px;
- margin-bottom: 5px;
- z-index: 2;
-}
-#header-left {
- position: relative;
- /* background: url('images/logo.gif') no-repeat; */
- background-position: center;
- height: 65px;
- width: 145px;
- left: 10px;
- float: left;
-}
-#header-left #status-link {
- position: relative;
- top: 10px;
- left: 6px;
-}
-#header-right {
- position: relative;
- /* background: url('images/header.gif') no-repeat; */
- height: 70px;
- color: #fff;
- left: 0px;
- margin-left: 165px;
-}
-#header-right .alert {
- position: relative;
- /* background: url('images/alert.gif') no-repeat; */
- background-position: 4px 2px;
- color: #fff;
- height: 17px;
- width: 500px;
- padding: 4px;
- padding-left: 27px;
- float: left;
-}
-#header-right .container {
- position: relative;
-}
-#header-right .container .left {
- position: relative;
- float: left;
- font-size: 1.3em;
- font-weight: bold;
- top: 15px;
- left: 4px;
- display: none;
-}
-#header-right .container .right {
- position: relative;
- float: right;
- top: 22px;
- padding-right: 4px;
- z-index: 1;
-}
-
-#header-right .container .right #alerts {
- position: relative;
- background: url('images/alert_bgr.png') no-repeat;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-top: 20px;
- padding-left: 5px;
- margin: 0px;
-}
-#header-right .container .right #hostname {
- position: relative;
- height: 39px;
- width: 431px;
- z-index: 1;
- padding-left: 5px;
- margin: 0px;
- top: 25px;
- left: 230px;
- font-size: 14px;
- color: #cccccc;
- font-weight: bold;
-}
-
-
-
-table#marquee {
- position: relative;
- top: -6px;
- left: -5px;
- border: 0;
- padding: 0;
- margin: 0;
- width: 424px;
- background-color: transparent;
- padding: 2px;
- border: 0px;
-}
-span#marquee-container {
- position: absolute;
- visibility: hidden;
- top: -100px;
- left: -10000px;
-}
-div#marquee-text {
- font-size: 1.18em;
- font-weight: normal;
- font-family: Verdana;
- color: #ffffff;
-}
-table#marquee div#container {
- position: relative;
- overflow: hidden;
- width: 418px;
- height: 20px;
-}
-table#marquee div#container div#scroller {
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-
-
-
-
-#content {
- position: relative;
- top: -15px;
- left: 0px;
- margin-top: 0px;
- margin-left: 0px;
- padding-top: 0px;
- width: 810px;
- background-color: #ffffff;
-}
-
-#left {
- width: 810px;
- height: 1px;
-}
-#right {
- position: relative;
- top: -10px;
- width: 770px;
- margin-top: 0px;
- margin-left: 5px;
- margin-right: 5px;
- padding-top: 5px;
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 20px;
- min-height: 400px;
-}
-
-#footer {
- position: relative;
- background: url('images/footer.png') no-repeat;
- top: -18px;
- left: 0px;
- width: 810px;
- height: 75px;
- color: #ffffff;
- text-align: center;;
- font-size: 0.9em;
- padding-top: 17px;
- margin-bottom: 20px;
- clear: both;
-}
-#footer p {
- padding: 0px;
- margin: 0px;
-}
-
-/* Style the List */
-#navigation {
- /* background: url('images/menu.gif') no-repeat; */
- /* width: 693px; */
- position: relative;
- top: -25px;
- left: 3px;
- width: 810px;
- padding: 0px;
- height: 28px;
- z-index: 3;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-#navigation ul#menu {
- padding-top: 3px;
- padding-left: 5px;
-}
-
-/* Style the List Elements */
-#navigation ul li {
- float: left;
- position: relative;
- /* width: 7.5em; */
- width: 8.77em;
-}
-#navigation ul li div {
- font-size: 1em;
- font-weight: bold;
-}
-/* Make the List inside the List Elements */
-/* initially hidden with absolute position */
-#navigation ul li ul {
- display: none;
- position: absolute;
- top: 2em;
- left: -2px;
- width: 9em;
- font-weight: normal;
- background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
- /* background-color: #202020;
- background: url("images/menu_footer.gif") no-repeat;
- background-position: bottom;
- */
- padding: 0em 0 0.4em 0;
- padding-top: 0.3em;
-}
-/* to override top and left in browsers other than IE */
-/* which will position to the top right of the containing */
-/* li, rather than bottom left */
-#navigation ul li > ul {
- top: auto;
- left: auto;
- left: -1px !important;
-}
-/* Show initial drop down upon mouse over, but do not show */
-/* nested side drop menus within listed elements */
-#navigation ul li:hover ul {
- display: block;
- cursor: pointer;
-}
-#navigation ul li:hover {
- cursor: pointer;
- cursor: pointer;
-}
-#navigation ul li:hover div {
- text-decoration: none;
-}
-
-#navigation ul li {
- background-color: transparent;
- color: #FFF;
-}
-#navigation ul li ul li {
- border: 1px solid #990000;
- width: 8.8em;
- height: 1.6em;
- line-height: 1.6em;
- background-color: #990000;
- color: #FFF;
-}
-#navigation ul li ul li:hover {
- background-color: #666666;
-}
-
-#navigation li li a {
- display: block;
- padding-left: 10px;
- padding-right: 10px;
-}
-
-#navigation ul li ul li a.navlnk:hover {
- text-decoration: none;
-}
-#navigation ul li.first {
- border-right: 0px;
-}
-#navigation ul li.middle {
- border-right: 0px;
-}
-#navigation ul li.last {
-
-}
-
-#navigation ul li.dropfirst {
- border-bottom: 0px;
-}
-#navigation ul li.dropmiddle {
- border-bottom: 0px;
-}
-#navigation ul li.droplast {
-}
-
-#wzdtabcont {
- float: left;
- background-color: #FFFFFF;
- color: #000000;
- padding: 0;
-}
-
-ul#wzdnav {
- font-size: 0.96em;
- float: left;
- width: 14.5em;
- margin: 0;
- padding-left: 18px;
-}
-
-ul#wzdnav li {
- list-style: none;
- margin: 0;
- padding-bottom: 0.2em;
- padding-left: 0;
-}
-
-ul#wzdnav a {
- display: block;
- padding: 0.3em;
- font-weight: normal;
-}
-
-#wzdnavbold a {
- display: block;
- padding: 0.3em;
- font-weight: bold ! important;
-}
-
-ul#wzdnav a:link {
- color: black;
- background-color: #eee;
-}
-
-ul#wzdnav a:visited {
- color: #666;
- background-color: #eee;
-}
-
-ul#wzdnav a:hover {
- color: black;
- background-color: white;
-}
-
-ul#wzdnav a:active {
- color: white;
- background-color: gray;
-}
-
-#graph {
- position: relative;
- z-index: 1;
-}
-
-#logoutbtn {
- position: absolute;
- left: 95%;
- vertical-align: middle;
-}
-
-/* Class Based CSS Definitions */
-.pgtitle {
- font-size: 18px;
- color: #777777;
- font-weight: bold;
-}
-.tfrtitle {
- font-size: 18px;
- color: #ffffff;
- font-weight: bold;
-}
-.vncell {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- border-bottom: 1px solid #999999;
-}
-.formfld {
- padding-left: 19px;
- font-size: small;
-}
-.formselect {
- font-size: 1.0em;
-}
-.langopt {
- padding-left: 34px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.saved {
- /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
-}
-.notsaved {
- /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
- list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
-}
-.en {
- background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
-}
-.de {
- background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
-}
-.es {
- background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
-}
-.pt_BR {
- background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
-}
-.host {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
-}
-.search {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
-}
-.file {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
-}
-.mail {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
-}
-.imp {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
-}
-.pwd {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
-}
-.user {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
-}
-.group {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
-}
-.url {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
-}
-.time {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
-}
-.unknown {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
-}
-.formfld_cert {
- background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
- padding-left: 28px;
- font-family: Courier New, Courier, monospaced;
- font-size: 11px;
-}
-.formfldalias {
- background-color: #990000;
- color: #FFFFFF;
-}
-.formpre {
- font-family: Courier New, Courier, monospaced;
- font-size: 10px;
-}
-.formbtn {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
-}
-.formbtns {
- font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- font-weight: bold;
-}
-.vvcell {
- background-color: #FFFFC6;
-}
-.errmsg {
- font-weight: bold;
- color: #CC0000;
-}
-.red {
- color: #CC0000;
-}
-.gray {
- color: #A0A0A0;
-}
-.vexpl {
- font-size: 11px;
-}
-.navlnk {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 13px;
-}
-.navlnks {
- color: #FFFFFF;
- text-decoration: none;
- font-size: 11px;
-}
-.redlnk {
- color: #990000;
- text-decoration: none;
-}
-.tblnk {
- color: #FFFFFF;
- text-decoration: none;
-}
-.vncellreq {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vncellt {
- background-color: #DDDDDD;
- padding-right: 20px;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
-}
-.vtable {
- border-bottom: 1px solid #999999;
-}
-.vnsepcell {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.cpline {
- font-size: 11px;
- color: #FFFFFF;
-}
-.hostname {
- font-size: 11px;
- color: #990000;
- font-weight: bold;
-}
-.vnsepcellr {
- background-color: #BBBBBB;
- padding-right: 20px;
- padding-left: 8px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listrpad {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-right: 16px;
- padding-left: 10px;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-.listn {
- font-size: 11px;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbg {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listbggrey {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #999999;
- padding-right: 16px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listhdr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdr a {
- color: #000000;
-}
-.listhdrr {
- background-color: #BBBBBB;
- padding-right: 16px;
- padding-left: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.listhdrr a {
- color: #000000;
-}
-.listlr {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listlrns {
- background-color: #FFFFFF;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- border-left: 1px solid #999999;
- font-size: 11px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.list {
- font-size: 11px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.listt {
- font-size: 11px;
- padding-top: 5px;
-}
-.listhdrrns {
- background-color: #BBBBBB;
- padding-left: 6px;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-right: 6px;
- font-weight: bold;
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
-}
-.listbgns {
- border-right: 1px solid #999999;
- border-bottom: 1px solid #999999;
- font-size: 11px;
- background-color: #D9DEE8;
- padding-left: 6px;
- padding-right: 4px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-.listtopic {
- border-right: 1px solid #999999;
- font-size: 11px;
- background-color: #990000;
- padding-right: 16px;
- padding-left: 6px;
- color: #FFFFFF;
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.optsect_t {
- border-right: 1px solid #999999;
- background-color: #990000;
- padding-right: 6px;
- padding-left: 6px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-.optsect_s {
- font-size: 11px;
- color: #FFFFFF;
- font-weight: bold;
-}
-.tabnavtbl {
-}
-
-
-/* MISC CSS Definitions */
-ul#tabnav {
- font-size: 11px;
- font-weight: bold;
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-ul#tabnav li.tabinact1 {
- float: left;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact {
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-ul#tabnav li.tabinact a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabinact1 a {
- float: left;
- display: block;
- text-decoration: none;
- padding: 5px 8px 5px 8px;
- color: #FFFFFF;
-}
-ul#tabnav li.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabcont {
- background-color: #EEEEEE;
- padding-right: 12px;
- padding-left: 12px;
- padding-top: 12px;
- padding-bottom: 12px;
-}
-.tabact {
- float: left;
- background-color: #EEEEEE;
- color: #000000;
- padding: 5px 8px 5px 8px;
- white-space: nowrap;
-}
-.tabinact {
- font-weight: bold;
- float: left;
- border-left: 1px solid #999999;
- background-color: #777777;
- color: #FFFFFF;
- padding: 0;
- white-space: nowrap;
-}
-.menu {
- background-color: #000000;
- white-space: nowrap;
- padding: 0px 5px 0px 5px;
- width: 100%;
- vertical-align: top;
-}
-
-
-/* Auto Complete Suggestions */
-div.suggestions {
- -moz-box-sizing: border-box;
- /* box-sizing: border-box; */
- border: 1px solid black;
- position: absolute;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div {
- cursor: default;
- padding: 0px 3px;
- background-color: #990000;
- color: #FFF;
-}
-
-div.suggestions div.current {
- background-color: #3366cc;
- color: #FFF;
-}
-/* End Auto Complete Suggestions */
-
-
-/* Nifty Corners Crap */
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
-/* End Nifty Corners Crap */
-
-
-
-/* CSS for Dynamic Log Viewer */
-/* Author: Erik Kristensen */
-div#log div.log-entry {
- clear: both;
-}
-
-div#log div.log-entry span,
-div#log div.log-header span {
- padding: 3px 2px 3px 2px;
- padding-left: 8px;
-}
-
-div#log div.log-entry span.log-action {
- padding-bottom: 6px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-div#log div.log-header span {
- border-top: 1px solid #999;
- background-color: #bbb;
- font-weight: bold;
- text-align: left;
-}
-
-div#log span.log-action,
-div#log span.log-time,
-div#log span.log-interface,
-div#log span.log-source,
-div#log span.log-destination,
-div#log span.log-protocol {
- float: left;
- text-align: left;
- border-left: 1px solid #999;
- border-bottom: 1px solid #999;
-}
-
-div#log span.log-general {
-
-}
-
-div#log span.log-protocol {
- border-right: 1px solid #999;
-}
-
-div#log span.log-action {
- width: 2em;
- text-align: center;
-}
-
-div#log span.log-time {
- width: 12.5em;
-}
-
-div#log span.log-interface {
- width: 5em;
-}
-
-div#log span.log-source,
-div#log span.log-destination {
- width: 17.6em;
-}
-
-div#log span.log-protocol {
- width: 5.5em;
-}
-/* END CSS FOR DYNAMIC LOG VIEWER */
-
-#login {
- background: #cccccc;
- border: 0px solid #666666;
- margin: 5em auto;
- padding: 0em;
- width: 340px;
-}
-
-#login h1 {
- background: url(images/misc/logon.png) no-repeat top left;
- margin-top: 0;
- display: block;
- text-indent: -1000px;
- height: 50px;
- border-bottom: none;
-}
-
-#login p {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login span {
- font-size: 1em;
- font-weight: bold;
- width: 20%;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login p#text {
- font-size: 1em;
- font-weight: normal;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
-
-#login #username, #password {
- font-size: 1em;
- width: 60%;
- padding: 3px;
- margin: 0em;
-}
-
-#login #submit {
- font-size: 1em;
- font-weight: bold;
- padding: 3px;
- margin: 0em;
- text-indent: 10px;
-}
diff --git a/usr/local/www/tree-images/empty.gif b/usr/local/www/tree-images/empty.gif
deleted file mode 100755
index b501ceb..0000000
--- a/usr/local/www/tree-images/empty.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree-images/join.gif b/usr/local/www/tree-images/join.gif
deleted file mode 100755
index 976ba7e..0000000
--- a/usr/local/www/tree-images/join.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree-images/joinbottom.gif b/usr/local/www/tree-images/joinbottom.gif
deleted file mode 100755
index 8552b66..0000000
--- a/usr/local/www/tree-images/joinbottom.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree-images/line.gif b/usr/local/www/tree-images/line.gif
deleted file mode 100755
index 976beda..0000000
--- a/usr/local/www/tree-images/line.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree-images/minus_.gif b/usr/local/www/tree-images/minus_.gif
deleted file mode 100755
index 7c3a143..0000000
--- a/usr/local/www/tree-images/minus_.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree-images/minus_up.gif b/usr/local/www/tree-images/minus_up.gif
deleted file mode 100755
index 16915d4..0000000
--- a/usr/local/www/tree-images/minus_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree-images/page.gif b/usr/local/www/tree-images/page.gif
deleted file mode 100755
index 531f133..0000000
--- a/usr/local/www/tree-images/page.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree-images/plus_.gif b/usr/local/www/tree-images/plus_.gif
deleted file mode 100755
index 34c1a5e..0000000
--- a/usr/local/www/tree-images/plus_.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree-images/plus_up.gif b/usr/local/www/tree-images/plus_up.gif
deleted file mode 100755
index d095e07..0000000
--- a/usr/local/www/tree-images/plus_up.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree-images/plus_updown.gif b/usr/local/www/tree-images/plus_updown.gif
deleted file mode 100755
index afc1753..0000000
--- a/usr/local/www/tree-images/plus_updown.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree-images/zone.gif b/usr/local/www/tree-images/zone.gif
deleted file mode 100755
index f49d647..0000000
--- a/usr/local/www/tree-images/zone.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree/i-bottom.gif b/usr/local/www/tree/i-bottom.gif
deleted file mode 100755
index f07fa99..0000000
--- a/usr/local/www/tree/i-bottom.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree/i-repeater.gif b/usr/local/www/tree/i-repeater.gif
deleted file mode 100755
index d5ab089..0000000
--- a/usr/local/www/tree/i-repeater.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree/index.html b/usr/local/www/tree/index.html
deleted file mode 100644
index f2c45d4..0000000
--- a/usr/local/www/tree/index.html
+++ /dev/null
@@ -1,228 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
-
- <head>
- <title>SilverStripe Tree Control</title>
- <link rel="stylesheet" type="text/css" media="all" href="tree.css" />
- <script type="text/javascript" src="tree.js"></script>
- <style>
- html {
- background-color: #DDD;
- }
- body {
- font-size: 80%;
- font-family: Arial, Helvetica, sans-serif;
- width: 50em;
- margin: 0 auto 3.5em auto;
- padding: 1em;
- background-color: white;
- border-left: 1px #CCC solid;
- border-right: 1px #CCC solid;
- }
- ul.tree a {
- font-size: 0.8em;
-
- }
- code {
- display: block;
- font-size: 1.2em;
- margin: 2em 5em;
- padding: 0.5em;
- border: 1px #CCC solid;
- background-color: #EEE;
- }
- #version {
- float: right;
- font-style: italic;
- margin-top: -4em;
- }
-
- dt {
- margin: 1.2em 0 0.2em 0;
- font-weight: bold;
- font-size: 1.1em
- }
- dd {
- margin: 0;
- }
- h2 {
- margin-top: 4em;
- border-bottom: 1px #CCC dotted;
- }
-
- #footer {
- position: fixed;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 3em;
- }
- #footer div {
- margin: auto;
- width: 52em;
- height: 3em;
- background-color: #777;
- color: white;
- }
- #footer a {
- color: white;
- }
- #footer p.left {
- float: left;
- margin: 0.75em 1em;
- }
- #footer p.right {
- float: right;
- margin: 0.75em 1em;
- }
-
- </style>
- </head>
-
-<body>
-
- <h1>SilverStripe Tree Control</h1>
- <p>This tree control was put together by <a href="sam@silverstripe.com">Sam Minn&eacute;e</a> at
- <a href="http://www.silverstripe.com/blog">SilverStripe</a> in New Zealand. We've put it out there
- for everyone to enjoy. Check out <a href="http://www.silverstripe.com/blog">our blog</a> if you're
- wondering what we're up to.</p>
- <p>This file came from <a href="http://www.silverstripe.com/downloads/tree/">http://www.silverstripe.com/downloads/tree/</a>.
- If you found this file elsewhere, check out that page: we might have posted an updated version.</p>
-
- <p>
- <b>Quick-links:</b>
- <a href="#Demo">Demo</a> | <a href="#Usage">Usage</a> | <a href="#Download">Download</a> | <a href="#HowItWorks">How it Works</a>
- </p>
-
- <h2 id="Demo">Demo</h2>
- <p>Here's a basic demo of the tree control. Our styling is fairly basic, but with updated CSS and
- images you can do whatever you like. Just for fun, try changing the text size.</p>
-
- <ul class="tree">
- <li><a href="#">item 1</a>
- <ul>
- <li><a href="#">item 1.1</a></li>
- <li class="closed"><a href="#">item 1.2</a>
- <ul>
- <li><a href="#">item 1.2.1</a></li>
- <li><a href="#">item 1.2.2</a></li>
- <li><a href="#">item 1.2.3</a></li>
- </ul>
- </li>
- <li><a href="#">item 1.3</a></li>
- </ul>
- </li>
- <li><a href="#">item 2</a>
- <ul>
- <li><a href="#">item 2.1</a></li>
- <li><a href="#">item 2.2</a></li>
- <li><a href="#">item 2.3</a></li>
- </ul>
- </li>
- </ul>
-
- <h2 id="Download">Download</h2>
-
- <p><a href="../tree.zip">Download everything you need here</a> - tree.zip, 11kb</p>
-
- <h2 id="Usage">Usage</h2>
-
- <p>The first thing to do is include the appropriate JavaScript and CSS files:</p>
-
- <code>
- &lt;link rel="stylesheet" type="text/css" media="all" href="tree.css" /&gt;<br />
- &lt;script type="text/javascript" src="tree.js"&gt;&lt;/script&gt;
- </code>
-
- <p>Then, create the HTML for you tree. This is basically a nested set of bullet pointed links. The
- "tree" class at the top is what the script will look for. Note that you can make a tree ndoe closed
- to begin with by adding class="closed".</p>
-
- <p>Here's the HTML code that I inserted to create the demo tree above.</p>
-
- <code>
- &lt;ul class="tree"&gt;<br />
- &lt;li&gt;&lt;a href="#"&gt;item 1&lt;/a&gt;<br />
- &lt;ul&gt;<br />
- &lt;li&gt;&lt;a href="#"&gt;item 1.1&lt;/a&gt;&lt;/li&gt;<br />
- &lt;li class="closed"&gt;&lt;a href="#"&gt;item 1.2&lt;/a&gt;<br />
- &lt;ul&gt;<br />
- &lt;li&gt;&lt;a href="#"&gt;item 1.2.1&lt;/a&gt;&lt;/li&gt;<br />
- &lt;li&gt;&lt;a href="#"&gt;item 1.2.2&lt;/a&gt;&lt;/li&gt;<br />
- &lt;li&gt;&lt;a href="#"&gt;item 1.2.3&lt;/a&gt;&lt;/li&gt;<br />
- &lt;/ul&gt; <br />
- &lt;/li&gt;<br />
- &lt;li&gt;&lt;a href="#"&gt;item 1.3&lt;/a&gt;&lt;/li&gt;<br />
- &lt;/ul&gt; <br />
- &lt;/li&gt;<br />
- &lt;li&gt;&lt;a href="#"&gt;item 2&lt;/a&gt;<br />
- &lt;ul&gt;<br />
- &lt;li&gt;&lt;a href="#"&gt;item 2.1&lt;/a&gt;&lt;/li&gt;<br />
- &lt;li&gt;&lt;a href="#"&gt;item 2.2&lt;/a&gt;&lt;/li&gt;<br />
- &lt;li&gt;&lt;a href="#"&gt;item 2.3&lt;/a&gt;&lt;/li&gt;<br />
- &lt;/ul&gt; <br />
- &lt;/li&gt;<br />
- &lt;/ul&gt;
- </code>
-
- <p>Your tree is now complete!</p>
-
- <h2 id="HowItWorks">How it works</h2>
- <dl>
- <dt>Starting the script</dt>
- <dd>In simple situations, creating an auto-loading script is a simple matter of setting window.onload
- to a function. But what if there's more than one script? To this end, we created an appendLoader()
- function that will execute multiple loader functions, including a previously defined loader function</dd>
-
- <dt>Finding the tree content</dt>
- <dd>Rather than write a piece of script to define we're your tree is, we've tried to make the script
- as automatic as possible - it finds all ULs with a class name containing "tree".</dd>
-
- <dt>Augmenting the HTML</dt>
- <dd>Unfortunately, an LI containing an A isn't sufficient for doing all of the necessary tree styling.
- Rather than force people to put non-semantic HTML into their file, the script generates extra &lt;span&gt; tags.
- So, the following HTML:
-
- <code>
- &lt;li&gt;&lt;a href="#"&gt;My item&lt;/a&gt;&lt;/li&gt;
- </code>
-
- Is turned into the more ungainly, and yet more easily styled:
-
- <code>
- &lt;li&gt;&lt;span class="a"&gt;&lt;span class="b"&gt;&lt;span class="c"&gt;&lt;a href="#"&gt;My item&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
- </code>
-
- Additionally, some helper classes are applied to the &lt;li&gt; and &lt;span class="a"&gt; elements:
- <ul>
- <li>"last" is applied to the last node of any subtree.</li>
- <li>"children" is applied to any node that has children.</li>
- </ul>
- </dd>
-
- <dt>Styling it up</dt>
- <dd>Why the heck do we need 5 styling elements? Basically, because there are 5 background-images to apply:
- <ul>
- <li><b>li:</b> A repeating vertical line is shown. Nested &lt;li&gt; tags
- give us the multiple vertical lines that we need.</li>
- <li><b>span.a:</b> We overlay the vertical line with 'L' and 'T' elements as needed.</li>
- <li><b>span.b:</b> We overlay '+' or '-' signs on nodes with children.</li>
- <li><b>span.c:</b> This is needed to fix up the vertical line.</li>
- <li><b>a:</b> Finally, we apply the page icon.</li>
- </ul>
- </dd>
-
- <dt>Opening / closing nodes</dt>
- <dd>Having come this far, the "dynamic" aspect of the tree control is very trivial. We set a "closed"
- class on the &lt;li&gt; and &lt;span class="a"&gt; elements, and our CSS takes care of hiding the
- children, changing the - to a + and changing the folder icon.</dd>
- </dl>
-
- <div id="footer">
- <div>
- <p class="left"><a href="http://www.silverstripe.com/downloads/tree">SilverStripe Tree Control</a>: v0.1, 30 Oct 2005</p>
- <p class="right">Copyright &copy; 2005 <a href="http://www.silverstripe.com/blog">SilverStripe Limited</a></p>
- </div>
- </div>
- </body>
-</html>
diff --git a/usr/local/www/tree/l.gif b/usr/local/www/tree/l.gif
deleted file mode 100755
index 1e8c707..0000000
--- a/usr/local/www/tree/l.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree/minus.gif b/usr/local/www/tree/minus.gif
deleted file mode 100755
index 7a7fd3b..0000000
--- a/usr/local/www/tree/minus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree/page-file.png b/usr/local/www/tree/page-file.png
deleted file mode 100755
index d3bb119..0000000
--- a/usr/local/www/tree/page-file.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree/page-file_play.gif b/usr/local/www/tree/page-file_play.gif
deleted file mode 100755
index 0c8e9ff..0000000
--- a/usr/local/www/tree/page-file_play.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree/page-file_x.gif b/usr/local/www/tree/page-file_x.gif
deleted file mode 100755
index 504f06e..0000000
--- a/usr/local/www/tree/page-file_x.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree/page-foldericon.png b/usr/local/www/tree/page-foldericon.png
deleted file mode 100755
index d26f2dc..0000000
--- a/usr/local/www/tree/page-foldericon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree/page-openfoldericon.png b/usr/local/www/tree/page-openfoldericon.png
deleted file mode 100755
index 8d00c39..0000000
--- a/usr/local/www/tree/page-openfoldericon.png
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree/plus.gif b/usr/local/www/tree/plus.gif
deleted file mode 100755
index 3530f59..0000000
--- a/usr/local/www/tree/plus.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree/t.gif b/usr/local/www/tree/t.gif
deleted file mode 100755
index a92da2a..0000000
--- a/usr/local/www/tree/t.gif
+++ /dev/null
Binary files differ
diff --git a/usr/local/www/tree/tree.css b/usr/local/www/tree/tree.css
deleted file mode 100644
index 31b7979..0000000
--- a/usr/local/www/tree/tree.css
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * CSS for Standard tree layout
- * Copyright (C) 2005 SilverStripe Limited
- * Feel free to use this on your websites, but please leave this message in the fies
- * http://www.silverstripe.com/blog
- */
-
-ul.tree{
- width: auto;
- padding-left : 0px;
- margin-left : 0px;
-}
-
-ul.tree img{
- border : none;
-}
-
-
-ul.tree, ul.tree ul {
- padding-left: 0;
-}
-
-ul.tree ul {
- margin-left: 16px;
-
-}
-ul.tree li.closed ul {
- display: none;
-}
-
-
-ul.tree li {
- list-style: none;
- background: url(i-repeater.gif) 0 0 repeat-y;
- display: block;
- width: auto;
- /* background-color:#FFFFFF; */
-}
-
-
-
-ul.tree li.last {
- list-style: none;
- background-image: none;
-}
-
-
-
-/* Span-A: I/L/I glpyhs */
-ul.tree span.a {
- background: url(t.gif) 0 50% no-repeat;
- display: block;
-}
-ul.tree span.a.last {
- background: url(l.gif) 0 50% no-repeat;
-}
-
-/* Span-B: Plus/Minus icon */
-ul.tree span.b {
-}
-ul.tree span.a.children span.b {
- background: url(minus.gif) 0 50% no-repeat;
- cursor: pointer;
-}
-ul.tree li.closed span.a.children span.b {
- background: url(plus.gif) 0 50% no-repeat;
- cursor: pointer;
-}
-
-/* Span-C: Spacing and extending tree line below the icon */
-ul.tree span.c {
- margin-left: 16px;
-}
-ul.tree span.a.children span.c {
- background: url(i-bottom.gif) 0 50% no-repeat;
-}
-ul.tree span.a.spanClosed span.c {
- background-image: none;
-}
-
-
-/* Anchor tag: Page icon */
-ul.tree a {
- white-space: nowrap;
- overflow: hidden;
-
-/* padding: 10px 0px 10px 18px; */
- padding: 3px 0px 3px 18px;
- line-height: 16px;
-
-/* background: url(page-file.png) 0 50% no-repeat; */
- background: url(page-file.png) 0 0 no-repeat;
-}
-ul.tree span.a.children a {
- background-image: url(page-openfoldericon.png);
-}
-ul.tree span.a.children.spanClosed a {
- background-image: url(page-foldericon.png);
-}
-
-/* Unformatted tree */
-ul.tree.unformatted li {
- background-image: none;
- padding-left: 16px;
-}
-ul.tree.unformatted li li {
- background-image: none;
- padding-left: 0px;
-}
-
-/*
- * Divs, by default store vertically aligned data
- */
-
-ul.tree li div {
- float: right;
- clear: right;
- height: 1em;
- margin-top: -26px;
-}
-/* As inside DIVs should be treated normally */
-ul.tree div a {
- padding: 0;
- background-image: none;
- min-height: auto;
- height: auto;
-}
-
-ul.tree li A:link, ul.tree li A:hover, ul.tree li A:visited {
- color : #111111;
-}
-
-
-ul.tree li .over{
- background-color : pink;
-}
diff --git a/usr/local/www/tree/tree.js b/usr/local/www/tree/tree.js
deleted file mode 100644
index 8e9651e..0000000
--- a/usr/local/www/tree/tree.js
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Content-separated javascript tree widget
- * Copyright (C) 2005 SilverStripe Limited
- * Feel free to use this on your websites, but please leave this message in the fies
- * http://www.silverstripe.com/blog
-*/
-
-/*
- * Initialise all trees identified by <ul class="tree">
- */
-function autoInit_trees() {
- var candidates = document.getElementsByTagName('ul');
- for(var i=0;i<candidates.length;i++) {
- if(candidates[i].className && candidates[i].className.indexOf('tree') != -1) {
- initTree(candidates[i]);
- candidates[i].className = candidates[i].className.replace(/ ?unformatted ?/, ' ');
- }
- }
-}
-
-/*
- * Initialise a tree node, converting all its LIs appropriately
- */
-function initTree(el) {
- var i,j;
- var spanA, spanB, spanC;
- var startingPoint, stoppingPoint, childUL;
-
- // Find all LIs to process
- for(i=0;i<el.childNodes.length;i++) {
- if(el.childNodes[i].tagName && el.childNodes[i].tagName.toLowerCase() == 'li') {
- var li = el.childNodes[i];
-
- // Create our extra spans
- spanA = document.createElement('span');
- spanB = document.createElement('span');
- spanC = document.createElement('span');
- spanA.appendChild(spanB);
- spanB.appendChild(spanC);
- spanA.className = 'a ' + li.className.replace('closed','spanClosed');
- spanA.onMouseOver = function() {};
- spanB.className = 'b';
- spanB.onclick = treeToggle;
- spanC.className = 'c';
-
-
- // Find the UL within the LI, if it exists
- stoppingPoint = li.childNodes.length;
- startingPoint = 0;
- childUL = null;
- for(j=0;j<li.childNodes.length;j++) {
- if(li.childNodes[j].tagName && li.childNodes[j].tagName.toLowerCase() == 'div') {
- startingPoint = j + 1;
- continue;
- }
-
- if(li.childNodes[j].tagName && li.childNodes[j].tagName.toLowerCase() == 'ul') {
- childUL = li.childNodes[j];
- stoppingPoint = j;
- break;
- }
- }
-
- // Move all the nodes up until that point into spanC
- for(j=startingPoint;j<stoppingPoint;j++) {
- spanC.appendChild(li.childNodes[startingPoint]);
- }
-
- // Insert the outermost extra span into the tree
- if(li.childNodes.length > startingPoint) li.insertBefore(spanA, li.childNodes[startingPoint]);
- else li.appendChild(spanA);
-
- // Process the children
- if(childUL != null) {
- if(initTree(childUL)) {
- addClass(li, 'children', 'closed');
- addClass(spanA, 'children', 'spanClosed');
- }
- }
- }
- }
-
- if(li) {
- // li and spanA will still be set to the last item
-
- addClass(li, 'last', 'closed');
- addClass(spanA, 'last', 'spanClosed');
- return true;
- } else {
- return false;
- }
-
-}
-
-
-/*
- * +/- toggle the tree, where el is the <span class="b"> node
- * force, will force it to "open" or "close"
- */
-function treeToggle(el, force) {
- el = this;
-
- while(el != null && (!el.tagName || el.tagName.toLowerCase() != "li")) el = el.parentNode;
-
- // Get UL within the LI
- var childSet = findChildWithTag(el, 'ul');
- var topSpan = findChildWithTag(el, 'span');
-
- if( force != null ){
-
- if( force == "open"){
- treeOpen( topSpan, el );
- }
- else if( force == "close" ){
- treeClose( topSpan, el );
- }
-
- }
-
- else if( childSet != null) {
- // Is open, close it
- if(!el.className.match(/(^| )closed($| )/)) {
- treeClose( topSpan, el );
- // Is closed, open it
- } else {
- treeOpen( topSpan, el );
- }
- }
-}
-
-
-function treeOpen( a, b ){
- removeClass(a,'spanClosed');
- removeClass(b,'closed');
-}
-
-
-function treeClose( a, b ){
- addClass(a,'spanClosed');
- addClass(b,'closed');
-}
-
-/*
- * Find the a child of el of type tag
- */
-function findChildWithTag(el, tag) {
- for(var i=0;i<el.childNodes.length;i++) {
- if(el.childNodes[i].tagName != null && el.childNodes[i].tagName.toLowerCase() == tag) return el.childNodes[i];
- }
- return null;
-}
-
-/*
- * Functions to add and remove class names
- * Mac IE hates unnecessary spaces
- */
-function addClass(el, cls, forceBefore) {
- if(forceBefore != null && el.className.match(new RegExp('(^| )' + forceBefore))) {
- el.className = el.className.replace(new RegExp("( |^)" + forceBefore), '$1' + cls + ' ' + forceBefore);
-
- } else if(!el.className.match(new RegExp('(^| )' + cls + '($| )'))) {
- el.className += ' ' + cls;
- el.className = el.className.replace(/(^ +)|( +$)/g, '');
- }
-}
-function removeClass(el, cls) {
- var old = el.className;
- var newCls = ' ' + el.className + ' ';
- newCls = newCls.replace(new RegExp(' (' + cls + ' +)+','g'), ' ');
- el.className = newCls.replace(/(^ +)|( +$)/g, '');
-}
-
-/*
- * Handlers for automated loading
- */
- _LOADERS = Array();
-
-function callAllLoaders() {
- var i, loaderFunc;
- for(i=0;i<_LOADERS.length;i++) {
- loaderFunc = _LOADERS[i];
- if(loaderFunc != callAllLoaders) loaderFunc();
- }
-}
-
-function appendLoader(loaderFunc) {
- if(window.onload && window.onload != callAllLoaders)
- _LOADERS[_LOADERS.length] = window.onload;
-
- window.onload = callAllLoaders;
-
- _LOADERS[_LOADERS.length] = loaderFunc;
-}
-
-appendLoader(autoInit_trees);
diff --git a/usr/local/www/treeview.css b/usr/local/www/treeview.css
deleted file mode 100644
index 3cdf792..0000000
--- a/usr/local/www/treeview.css
+++ /dev/null
@@ -1,48 +0,0 @@
-.treeview {
- border: 0px;
- margin: 0px;
- padding: 0px;
- font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
- font-size: 12px;
- color: #333;
- white-space: nowrap;
- border: 0px;
- vertical-align: middle;
-}
-.treeview img {
- border: 0px;
- margin: 0px;
- padding: 0px;
- vertical-align: top;
-}
-.treeview a {
- border: 0px;
- margin: 0px;
- padding: 0px;
- color: #000;
- text-decoration: none;
- vertical-align: top;/* r3b*/
-}
-.treeview a.node {
- border: 0px;
- margin: 0px;
- padding: 0px;
- white-space: nowrap;
- color: #00F;
- height:16px;
- width:auto;
- overflow:hidden;
- padding: 0px 0px 0px 0px;
- vertical-align: top;
-}
-
-.treeview a.nodeSel {
- border: 0px;
- margin: 0px;
- padding: 0px;
-
-}
-.treeview .clip {
- overflow: hidden;
-
-}
diff --git a/usr/local/www/uploadconfig.php b/usr/local/www/uploadconfig.php
deleted file mode 100644
index 35e7c55..0000000
--- a/usr/local/www/uploadconfig.php
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/local/bin/php
-<?php
-/*
- uploadconfig.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-hidden-uploadconfiguration
-##|*NAME=Hidden: Upload Configuration page
-##|*DESCR=Allow access to the 'Hidden: Upload Configuration' page.
-##|*MATCH=uploadconfig.php*
-##|-PRIV
-
-
-require("guiconfig.inc");
-
-header("Content-Type: text/plain");
-
-/* get config.xml in POST variable "config" */
-if ($_POST['config']) {
- $fd = @fopen("{$g['tmp_path']}/config.xml", "w");
- if (!$fd) {
- echo gettext("ERR Could not save configuration.")."\n";
- exit(0);
- }
- fwrite($fd, $_POST['config']);
- fclose($fd);
- if (config_install("{$g['tmp_path']}/config.xml") == 0) {
- echo gettext("OK")."\n";
- system_reboot();
- } else {
- echo gettext("ERR Could not install configuration.")."\n";
- }
-} else {
- echo gettext("ERR Invalid configuration received.")."\n";
-}
-
-exit(0);
-?>
diff --git a/usr/local/www/vpn_ipsec.php b/usr/local/www/vpn_ipsec.php
deleted file mode 100644
index 6ef6040..0000000
--- a/usr/local/www/vpn_ipsec.php
+++ /dev/null
@@ -1,704 +0,0 @@
-<?php
-/*
- vpn_ipsec.php
- part of m0n0wall (http://m0n0.ch/wall)
- part of pfSense
-
- Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2008 Shrew Soft Inc
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-vpn-ipsec
-##|*NAME=VPN: IPsec page
-##|*DESCR=Allow access to the 'VPN: IPsec' page.
-##|*MATCH=vpn_ipsec.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("ipsec.inc");
-require_once("vpn.inc");
-
-if (!is_array($config['ipsec']['phase1'])) {
- $config['ipsec']['phase1'] = array();
-}
-
-if (!is_array($config['ipsec']['phase2'])) {
- $config['ipsec']['phase2'] = array();
-}
-
-$a_phase1 = &$config['ipsec']['phase1'];
-$a_phase2 = &$config['ipsec']['phase2'];
-
-$pconfig['enable'] = isset($config['ipsec']['enable']);
-
-if ($_POST) {
- if ($_POST['apply']) {
- $retval = 0;
- $retval = vpn_ipsec_configure();
- /* reload the filter in the background */
- filter_configure();
- $savemsg = get_std_save_message($retval);
- if ($retval >= 0) {
- if (is_subsystem_dirty('ipsec')) {
- clear_subsystem_dirty('ipsec');
- }
- }
- } else if ($_POST['submit']) {
- $pconfig = $_POST;
-
- $config['ipsec']['enable'] = $_POST['enable'] ? true : false;
-
- write_config();
-
- $retval = vpn_ipsec_configure();
- } else if (isset($_POST['del_x'])) {
- /* delete selected p1 entries */
- if (is_array($_POST['p1entry']) && count($_POST['p1entry'])) {
- foreach ($_POST['p1entry'] as $p1entrydel) {
- unset($a_phase1[$p1entrydel]);
- }
- if (write_config()) {
- mark_subsystem_dirty('ipsec');
- }
- }
- } else if (isset($_POST['delp2_x'])) {
- /* delete selected p2 entries */
- if (is_array($_POST['p2entry']) && count($_POST['p2entry'])) {
- foreach ($_POST['p2entry'] as $p2entrydel) {
- unset($a_phase2[$p2entrydel]);
- }
- if (write_config()) {
- mark_subsystem_dirty('ipsec');
- }
- }
- } else {
- /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
- unset($delbtn, $delbtnp2, $movebtn, $movebtnp2, $togglebtn, $togglebtnp2);
- foreach ($_POST as $pn => $pd) {
- if (preg_match("/del_(\d+)_x/", $pn, $matches)) {
- $delbtn = $matches[1];
- } else if (preg_match("/delp2_(\d+)_x/", $pn, $matches)) {
- $delbtnp2 = $matches[1];
- } else if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
- $movebtn = $matches[1];
- } else if (preg_match("/movep2_(\d+)_x/", $pn, $matches)) {
- $movebtnp2 = $matches[1];
- } else if (preg_match("/toggle_(\d+)_x/", $pn, $matches)) {
- $togglebtn = $matches[1];
- } else if (preg_match("/togglep2_(\d+)_x/", $pn, $matches)) {
- $togglebtnp2 = $matches[1];
- }
- }
-
- $save = 1;
-
- /* move selected p1 entries before this */
- if (isset($movebtn) && is_array($_POST['p1entry']) && count($_POST['p1entry'])) {
- $a_phase1_new = array();
-
- /* copy all p1 entries < $movebtn and not selected */
- for ($i = 0; $i < $movebtn; $i++) {
- if (!in_array($i, $_POST['p1entry'])) {
- $a_phase1_new[] = $a_phase1[$i];
- }
- }
-
- /* copy all selected p1 entries */
- for ($i = 0; $i < count($a_phase1); $i++) {
- if ($i == $movebtn) {
- continue;
- }
- if (in_array($i, $_POST['p1entry'])) {
- $a_phase1_new[] = $a_phase1[$i];
- }
- }
-
- /* copy $movebtn p1 entry */
- if ($movebtn < count($a_phase1)) {
- $a_phase1_new[] = $a_phase1[$movebtn];
- }
-
- /* copy all p1 entries > $movebtn and not selected */
- for ($i = $movebtn+1; $i < count($a_phase1); $i++) {
- if (!in_array($i, $_POST['p1entry'])) {
- $a_phase1_new[] = $a_phase1[$i];
- }
- }
- if (count($a_phase1_new) > 0) {
- $a_phase1 = $a_phase1_new;
- }
-
- } else if (isset($movebtnp2) && is_array($_POST['p2entry']) && count($_POST['p2entry'])) {
- /* move selected p2 entries before this */
- $a_phase2_new = array();
-
- /* copy all p2 entries < $movebtnp2 and not selected */
- for ($i = 0; $i < $movebtnp2; $i++) {
- if (!in_array($i, $_POST['p2entry'])) {
- $a_phase2_new[] = $a_phase2[$i];
- }
- }
-
- /* copy all selected p2 entries */
- for ($i = 0; $i < count($a_phase2); $i++) {
- if ($i == $movebtnp2) {
- continue;
- }
- if (in_array($i, $_POST['p2entry'])) {
- $a_phase2_new[] = $a_phase2[$i];
- }
- }
-
- /* copy $movebtnp2 p2 entry */
- if ($movebtnp2 < count($a_phase2)) {
- $a_phase2_new[] = $a_phase2[$movebtnp2];
- }
-
- /* copy all p2 entries > $movebtnp2 and not selected */
- for ($i = $movebtnp2+1; $i < count($a_phase2); $i++) {
- if (!in_array($i, $_POST['p2entry'])) {
- $a_phase2_new[] = $a_phase2[$i];
- }
- }
- if (count($a_phase2_new) > 0) {
- $a_phase2 = $a_phase2_new;
- }
-
- } else if (isset($togglebtn)) {
- if (isset($a_phase1[$togglebtn]['disabled'])) {
- unset($a_phase1[$togglebtn]['disabled']);
- } else {
- $a_phase1[$togglebtn]['disabled'] = true;
- }
- } else if (isset($togglebtnp2)) {
- if (isset($a_phase2[$togglebtnp2]['disabled'])) {
- unset($a_phase2[$togglebtnp2]['disabled']);
- } else {
- $a_phase2[$togglebtnp2]['disabled'] = true;
- }
- } else if (isset($delbtn)) {
- /* remove static route if interface is not WAN */
- if ($a_phase1[$delbtn]['interface'] <> "wan") {
- mwexec("/sbin/route delete -host {$a_phase1[$delbtn]['remote-gateway']}");
- }
-
- /* remove all phase2 entries that match the ikeid */
- $ikeid = $a_phase1[$delbtn]['ikeid'];
- foreach ($a_phase2 as $p2index => $ph2tmp) {
- if ($ph2tmp['ikeid'] == $ikeid) {
- unset($a_phase2[$p2index]);
- }
- }
- unset($a_phase1[$delbtn]);
-
- } else if (isset($delbtnp2)) {
- unset($a_phase2[$delbtnp2]);
-
- } else {
- $save = 0;
- }
-
- if ($save === 1) {
- if (write_config()) {
- mark_subsystem_dirty('ipsec');
- }
- }
- }
-}
-
-$pgtitle = array(gettext("VPN"), gettext("IPsec"));
-$shortcut_section = "ipsec";
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="vpn_ipsec.php" method="post">
-<script type="text/javascript" src="/javascript/row_toggle.js"></script>
-<?php
- if ($savemsg) {
- print_info_box($savemsg);
- }
- if ($pconfig['enable'] && is_subsystem_dirty('ipsec')) {
- print_info_box_np(gettext("The IPsec tunnel configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));
- }
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn ipsec">
- <tr>
- <td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Tunnels"), true, "vpn_ipsec.php");
- $tab_array[1] = array(gettext("Mobile clients"), false, "vpn_ipsec_mobile.php");
- $tab_array[2] = array(gettext("Pre-Shared Keys"), false, "vpn_ipsec_keys.php");
- $tab_array[3] = array(gettext("Advanced Settings"), false, "vpn_ipsec_settings.php");
- display_top_tabs($tab_array);
-?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td class="vtable">
- <table border="0" cellspacing="2" cellpadding="0" summary="enable">
- <tr>
- <td>
- <input name="enable" type="checkbox" id="enable" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\"";?> />
- </td>
- <td>
- <strong><?=gettext("Enable IPsec"); ?></strong>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td>
- <input name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- </td>
- </tr>
- </table>
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="phase-1 entries">
- <tr id="frheader">
- <td class="list">&nbsp;</td>
- <td class="list">&nbsp;</td>
- <td class="listhdrr"><?=gettext("IKE"); ?></td>
- <td class="listhdrr"><?=gettext("Remote Gateway"); ?></td>
- <td class="listhdrr"><?=gettext("Mode"); ?></td>
- <td class="listhdrr"><?=gettext("P1 Protocol"); ?></td>
- <td class="listhdrr"><?=gettext("P1 Transforms"); ?></td>
- <td class="listhdrr"><?=gettext("P1 Description"); ?></td>
- <td class="list">
- </td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_phase1 as $ph1ent):
- $iconfn = "pass";
- $spans = $spane = "";
- if (isset($ph1ent['disabled'])) {
- $spans = "<span class=\"gray\">";
- $spane = "</span>";
- $iconfn .= "_d";
- }
-?>
- <tr valign="top" id="fr<?=$i;?>" ondblclick="document.location='vpn_ipsec_phase1.php?p1index=<?=$i;?>'">
- <td class="listt" align="center" valign="middle">
- <input type="checkbox" id="frc<?=$i;?>" name="p1entry[]" value="<?=$i;?>" onclick="fr_bgcolor('<?=$i;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
- </td>
- <td class="listt" align="center" valign="middle">
- <input name="toggle_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn?>.gif"
- title="<?=gettext("click to toggle enabled/disabled status");?>"
- type="image" style="height:11;width:11;border:0" />
- </td>
- <td class="listlr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>">
- <?=$spans;?>
-<?php
- if (empty($ph1ent['iketype']) || $ph1ent['iketype'] == "ikev1") {
- echo "V1";
- } else {
- echo "V2";
- }
-?>
- <?=$spane;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>">
- <?=$spans;?>
-<?php
- if ($ph1ent['interface']) {
- $iflabels = get_configured_interface_with_descr();
-
- $carplist = get_configured_carp_interface_list();
- foreach ($carplist as $cif => $carpip) {
- $iflabels[$cif] = $carpip." (".get_vip_descr($carpip).")";
- }
-
- $aliaslist = get_configured_ip_aliases_list();
- foreach ($aliaslist as $aliasip => $aliasif) {
- $iflabels[$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
- }
-
- $grouplist = return_gateway_groups_array();
- foreach ($grouplist as $name => $group) {
- if ($group[0]['vip'] <> "") {
- $vipif = $group[0]['vip'];
- } else {
- $vipif = $group[0]['int'];
- }
- $iflabels[$name] = "GW Group {$name}";
- }
- $if = htmlspecialchars($iflabels[$ph1ent['interface']]);
- } else {
- $if = "WAN";
- }
-
- if (!isset($ph1ent['mobile'])) {
- echo $if."<br />".$ph1ent['remote-gateway'];
- } else {
- echo $if."<br /><strong>" . gettext("Mobile Client") . "</strong>";
- }
-?>
- <?=$spane;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>">
- <?=$spans;?>
- <?php
- if (empty($ph1ent['iketype']) || $ph1ent['iketype'] == "ikev1") {
- echo "{$ph1ent['mode']}";
- }
- ?>
- <?=$spane;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>">
- <?=$spans;?>
- <?=$p1_ealgos[$ph1ent['encryption-algorithm']['name']]['name'];?>
-<?php
- if ($ph1ent['encryption-algorithm']['keylen']) {
- if ($ph1ent['encryption-algorithm']['keylen'] == "auto") {
- echo " (" . gettext("auto") . ")";
- } else {
- echo " ({$ph1ent['encryption-algorithm']['keylen']} " . gettext("bits") . ")";
- }
- }
-?>
- <?=$spane;?>
- </td>
- <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>">
- <?=$spans;?>
- <?=$p1_halgos[$ph1ent['hash-algorithm']];?>
- <?=$spane;?>
- </td>
- <td class="listbg" onclick="fr_toggle(<?=$i;?>)">
- <?=$spans;?>
- <?=htmlspecialchars($ph1ent['descr']);?>&nbsp;
- <?=$spane;?>
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td>
- <input onmouseover="fr_insline(<?=$i;?>, true)" onmouseout="fr_insline(<?=$i;?>, false)"
- name="move_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif"
- title="<?=gettext("move selected entries before this");?>"
- type="image" style="height:17;width:17;border:0" />
- </td>
- <td>
- <a href="vpn_ipsec_phase1.php?p1index=<?=$i;?>">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit phase1 entry"); ?>" width="17" height="17" border="0" alt="edit" />
- </a>
- </td>
- </tr>
- <tr>
- <td>
- <input name="del_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif"
- title="<?=gettext("delete phase1 entry");?>"
- type="image" style="height:17;width:17;border:0"
- onclick="return confirm('<?=gettext("Do you really want to delete this phase1 and all associated phase2 entries?"); ?>')" />
- </td>
- <td>
-<?php
- if (!isset($ph1ent['mobile'])):
-?>
- <a href="vpn_ipsec_phase1.php?dup=<?=$i;?>">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("copy phase1 entry"); ?>" width="17" height="17" border="0" alt="add" />
- </a>
-<?php
- endif;
-?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td class="listt">&nbsp;</td>
- <td class="listt">&nbsp;</td>
- <td class="listrborder" colspan="6">
-<?php
- if (isset($_POST["tdph2-{$i}-visible"])) {
- $tdph2_visible = htmlspecialchars($_POST["tdph2-{$i}-visible"]);
- } else {
- $tdph2_visible = 0;
- }
-?>
- <input type="hidden" name="tdph2-<?=$i;?>-visible" id="tdph2-<?=$i;?>-visible" value="<?=$tdph2_visible?>" />
- <div id="shph2but-<?=$i?>" <?php echo ($tdph2_visible == '1' ? 'style="display:none"' : '');?>>
-<?php
- $phase2count = 0;
- foreach ($a_phase2 as $ph2ent) {
- if ($ph2ent['ikeid'] != $ph1ent['ikeid']) {
- continue;
- }
- $phase2count++;
- }
- $fr_prefix = "frp2{$i}";
- $fr_header = $fr_prefix . "header";
-?>
- <input type="button" onclick="show_phase2('tdph2-<?=$i?>', 'shph2but-<?=$i?>')" value="+" /> - <?php printf(gettext("Show %s Phase-2 entries"), $phase2count); ?>
- </div>
- <div id="tdph2-<?=$i?>" <?php echo ($tdph2_visible != '1' ? 'style="display:none"' : '');?>>
- <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="phase-2 entries">
- <tr id="<?=$fr_header;?>">
- <td>&nbsp;</td>
- <td>&nbsp;</td>
- <td class="listhdrr"><?=gettext("Mode"); ?></td>
- <td class="listhdrr"><?=gettext("Local Subnet"); ?></td>
- <td class="listhdrr"><?=gettext("Remote Subnet"); ?></td>
- <td class="listhdrr"><?=gettext("P2 Protocol"); ?></td>
- <td class="listhdrr"><?=gettext("P2 Transforms"); ?></td>
- <td class="listhdrr"><?=gettext("P2 Auth Methods"); ?></td>
- <td class ="list">&nbsp;</td>
- </tr>
-<?php
- $j = 0;
- foreach ($a_phase2 as $ph2index => $ph2ent):
- if ($ph2ent['ikeid'] != $ph1ent['ikeid']) {
- continue;
- }
-
- $fr_c = $fr_prefix . "c" . $j;
- $fr_d = $fr_prefix . "d" . $j;
-
- $iconfn = "pass";
- $spans = $spane = "";
- if (isset($ph2ent['disabled']) || isset($ph1ent['disabled'])) {
- $spans = "<span class=\"gray\">";
- $spane = "</span>";
- $iconfn .= "_d";
- }
-?>
- <tr valign="top" id="<?=$fr_prefix . $j;?>" ondblclick="document.location='vpn_ipsec_phase2.php?p2index=<?=$ph2ent['uniqid'];?>'">
- <td class="listt" align="center" valign="middle">
- <input type="checkbox" id="<?=$fr_c;?>" name="p2entry[]" value="<?=$ph2index;?>" onclick="fr_bgcolor('<?=$j;?>', '<?=$fr_prefix;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
- </td>
- <td class="listt" align="center" valign="middle">
- <input name="togglep2_<?=$ph2index;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn?>.gif"
- title="<?=gettext("click to toggle enabled/disabled status");?>"
- type="image" style="height:11;width:11;border:0" />
- </td>
- <td class="listlr nowrap" id="<?=$fr_d;?>" onclick="fr_toggle('<?=$j;?>', '<?=$fr_prefix;?>')">
- <?=$spans;?>
- <?=$ph2ent['mode'];?>
- <?=$spane;?>
- </td>
-<?php
- if (($ph2ent['mode'] == "tunnel") or ($ph2ent['mode'] == "tunnel6")):
-?>
- <td class="listr nowrap" id="<?=$fr_d;?>" onclick="fr_toggle('<?=$j;?>', '<?=$fr_prefix;?>')">
- <?=$spans;?>
- <?=ipsec_idinfo_to_text($ph2ent['localid']); ?>
- <?=$spane;?>
- </td>
- <td class="listr nowrap" id="<?=$fr_d;?>" onclick="fr_toggle('<?=$j;?>', '<?=$fr_prefix;?>')">
- <?=$spans;?>
- <?=ipsec_idinfo_to_text($ph2ent['remoteid']); ?>
- <?=$spane;?>
- </td>
-<?php
- else:
- echo "<td class=\"listr nowrap\">&nbsp;</td><td class=\"listr nowrap\">&nbsp;</td>";
- endif;
-?>
- <td class="listr nowrap" id="<?=$fr_d;?>" onclick="fr_toggle('<?=$j;?>', '<?=$fr_prefix;?>')">
- <?=$spans;?>
- <?php echo $p2_protos[$ph2ent['protocol']]; ?>
- <?=$spane;?>
- </td>
- <td class="listr" id="<?=$fr_d;?>" onclick="fr_toggle('<?=$j;?>', '<?=$fr_prefix;?>')">
- <?=$spans;?>
-<?php
- foreach ($ph2ent['encryption-algorithm-option'] as $k => $ph2ea) {
- if ($k) {
- echo ", ";
- }
- echo $p2_ealgos[$ph2ea['name']]['name'];
- if ($ph2ea['keylen']) {
- if ($ph2ea['keylen'] == "auto") {
- echo " (" . gettext("auto") . ")";
- } else {
- echo " ({$ph2ea['keylen']} " . gettext("bits") . ")";
- }
- }
- }
-?>
- <?=$spane;?>
- </td>
- <td class="listr nowrap" id="<?=$fr_d;?>" onclick="fr_toggle('<?=$j;?>', '<?=$fr_prefix;?>')">
- <?=$spans;?>
-<?php
- if (!empty($ph2ent['hash-algorithm-option']) && is_array($ph2ent['hash-algorithm-option'])) {
- foreach ($ph2ent['hash-algorithm-option'] as $k => $ph2ha) {
- if ($k) {
- echo ", ";
- }
- echo $p2_halgos[$ph2ha];
- }
- }
-?>
- <?=$spane;?>
- </td>
- <td class="list nowrap" valign="middle">
- <input onmouseover="fr_insline(<?=$j;?>, true, '<?=$fr_prefix;?>')" onmouseout="fr_insline(<?=$j;?>, false, '<?=$fr_prefix;?>')"
- name="movep2_<?=$j;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif"
- title="<?=gettext("move selected entries before this");?>"
- type="image" style="height:17;width:17;border:0" />
- <a href="vpn_ipsec_phase2.php?p2index=<?=$ph2ent['uniqid'];?>">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit phase2 entry"); ?>" width="17" height="17" border="0" alt="edit" />
- </a>
- <input name="delp2_<?=$ph2index;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif"
- title="<?=gettext("delete phase2 entry");?>"
- type="image" style="height:17;width:17;border:0"
- onclick="return confirm('<?=gettext("Do you really want to delete this phase2 entry?"); ?>')" />
- <a href="vpn_ipsec_phase2.php?dup=<?=$ph2ent['uniqid'];?>">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add a new Phase 2 based on this one"); ?>" width="17" height="17" border="0" alt="add" />
- </a>
- </td>
- </tr>
-<?php
- $j++;
- endforeach;
-?>
- <tr valign="top" id="<?=$fr_prefix . $j;?>">
- <td class="list" colspan="8"></td>
- <td class="list nowrap" valign="middle">
-<?php
- if ($j == 0):
-?>
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected phase2 entries to end");?>" border="0" alt="move" />
-<?php
- else:
-?>
- <input onmouseover="fr_insline(<?=$j;?>, true, '<?=$fr_prefix;?>')" onmouseout="fr_insline(<?=$j;?>, false, '<?=$fr_prefix;?>')" name="movep2_<?=$j;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" style="width:17;height:17;border:0" title="<?=gettext("move selected phase2 entries to end");?>" />
-<?php
- endif;
-?>
- <a href="vpn_ipsec_phase2.php?ikeid=<?=$ph1ent['ikeid'];?><?php if (isset($ph1ent['mobile'])) echo "&amp;mobile=true";?>">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add phase2 entry"); ?>" width="17" height="17" border="0" alt="add" />
- </a>
-<?php
- if ($j == 0):
-?>
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected phase2 entries");?>" border="0" alt="delete" />
-<?php
- else:
-?>
- <input name="delp2" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" style="width:17;height:17" title="<?=gettext("delete selected phase2 entries");?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected phase2 entries?");?>')" />
-<?php
- endif;
-?>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-<?php
- $i++;
- endforeach; // $a_phase1 as $ph1ent
-?>
- <tr valign="top" id="fr<?=$i;?>">
- <td class="list" colspan="8"></td>
- <td class="list nowrap" valign="middle">
- <table border="0" cellspacing="0" cellpadding="1" summary="edit">
- <tr>
- <td>
-<?php
- if ($i == 0):
-?>
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected phase1 entries to end");?>" border="0" alt="move" />
-<?php
- else:
-?>
- <input onmouseover="fr_insline(<?=$i;?>, true)" onmouseout="fr_insline(<?=$i;?>, false)" name="move_<?=$i;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" style="width:17;height:17;border:0" title="<?=gettext("move selected phase1 entries to end");?>" />
-<?php
- endif;
-?>
- </td>
- <td>
- <a href="vpn_ipsec_phase1.php">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add new phase1");?>" alt="add" />
- </a>
- </td>
- </tr>
- <tr>
- <td>
-<?php
- if ($i == 0):
-?>
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected phase1 entries");?>" border="0" alt="delete" />
-<?php
- else:
-?>
- <input name="del" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" style="width:17;height:17" title="<?=gettext("delete selected phase1 entries");?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected phase1 entries?");?>')" />
-<?php
- endif;
-?>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td colspan="8">
- <p>
- <span class="vexpl">
- <span class="red">
- <strong><?=gettext("Note"); ?>:<br /></strong>
- </span>
- <?=gettext("You can check your IPsec status at"); ?> <a href="diag_ipsec.php"><?=gettext("Status:IPsec"); ?></a>.<br />
- <?=gettext("IPsec Debug Mode can be enabled at"); ?> <a href="vpn_ipsec_settings.php"><?=gettext("VPN:IPsec:Advanced Settings"); ?></a>.<br />
- <?=gettext("IPsec can be set to prefer older SAs at"); ?> <a href="vpn_ipsec_settings.php"><?=gettext("VPN:IPsec:Advanced Settings"); ?></a>.
- </span>
- </p>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-function show_phase2(id, buttonid) {
- document.getElementById(buttonid).innerHTML='';
- document.getElementById(id).style.display = "block";
- var visible = id + '-visible';
- document.getElementById(visible).value = "1";
-}
-//]]>
-</script>
-</body>
-</html>
diff --git a/usr/local/www/vpn_ipsec_keys.php b/usr/local/www/vpn_ipsec_keys.php
deleted file mode 100644
index 8c30d6b..0000000
--- a/usr/local/www/vpn_ipsec_keys.php
+++ /dev/null
@@ -1,230 +0,0 @@
-<?php
-/*
- vpn_ipsec_keys.php
- part of m0n0wall (http://m0n0.ch/wall)
- part of pfSense
-
- Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-vpn-ipsec-listkeys
-##|*NAME=VPN: IPsec: Pre-Shared Keys List
-##|*DESCR=Allow access to the 'VPN: IPsec: Pre-Shared Keys List' page.
-##|*MATCH=vpn_ipsec_keys.php*
-##|-PRIV
-
-require("functions.inc");
-require("guiconfig.inc");
-require_once("ipsec.inc");
-require_once("vpn.inc");
-require_once("filter.inc");
-
-if (!is_array($config['ipsec']['mobilekey'])) {
- $config['ipsec']['mobilekey'] = array();
-}
-ipsec_mobilekey_sort();
-$a_secret = &$config['ipsec']['mobilekey'];
-
-$userkeys = array();
-foreach ($config['system']['user'] as $id => $user) {
- if (!empty($user['ipsecpsk'])) {
- $userkeys[] = array('ident' => $user['name'], 'type' => 'PSK', 'pre-shared-key' => $user['ipsecpsk'], 'id' => $id);;
- }
-}
-
-if (isset($_POST['apply'])) {
- $retval = vpn_ipsec_configure();
- /* reload the filter in the background */
- filter_configure();
- $savemsg = get_std_save_message($retval);
- if (is_subsystem_dirty('ipsec')) {
- clear_subsystem_dirty('ipsec');
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($a_secret[$_GET['id']]) {
- unset($a_secret[$_GET['id']]);
- write_config(gettext("Deleted IPsec Pre-Shared Key"));
- mark_subsystem_dirty('ipsec');
- header("Location: vpn_ipsec_keys.php");
- exit;
- }
-}
-
-$pgtitle = gettext("VPN: IPsec: Keys");
-$shortcut_section = "ipsec";
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="vpn_ipsec_keys.php" method="post">
-<?php
-if ($savemsg) {
- print_info_box($savemsg);
-}
-if (is_subsystem_dirty('ipsec')) {
- print_info_box_np(gettext("The IPsec tunnel configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));
-}
-?>
-</form>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn ipsec keys">
- <tr><td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Tunnels"), false, "vpn_ipsec.php");
- $tab_array[1] = array(gettext("Mobile clients"), false, "vpn_ipsec_mobile.php");
- $tab_array[2] = array(gettext("Pre-Shared Keys"), true, "vpn_ipsec_keys.php");
- $tab_array[3] = array(gettext("Advanced Settings"), false, "vpn_ipsec_settings.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
- <td class="listhdrr"><?=gettext("Identifier"); ?></td>
- <td class="listhdrr"><?=gettext("Type"); ?></td>
- <td class="listhdr"><?=gettext("Pre-Shared Key"); ?></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add key">
- <tr>
- <td width="20" height="17"></td>
- <td>
- <a href="vpn_ipsec_keys_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add key"); ?>" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i = 0;
- foreach ($userkeys as $secretent):
-?>
- <tr>
- <td class="listlr gray">
- <?php
- if ($secretent['ident'] == 'allusers') {
- echo gettext("ANY USER");
- } else {
- echo htmlspecialchars($secretent['ident']);
- }
- ?>
- </td>
- <td class="listlr gray">
- <?php
- if (empty($secretent['type'])) {
- echo 'PSK';
- } else {
- echo htmlspecialchars($secretent['type']);
- }
- ?>
- </td>
- <td class="listr gray">
- <?=htmlspecialchars($secretent['pre-shared-key']);?>
- </td>
- <td class="list nowrap">
- <form action="system_usermanager.php" method="post" name="form_edit_key">
- <input type="hidden" name="act" value="edit" />
- <input type="hidden" name="userid" value="<?=$secretent['id'];?>" />
- <input type="image" name="edituser[]" width="17" height="17" border="0"
- src="/themes/<?=$g['theme'];?>/images/icons/icon_e.gif"
- title="<?=gettext("edit");?>" />
- </form>
- &nbsp;
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
-
-<?php
- $i = 0;
- foreach ($a_secret as $secretent):
-?>
- <tr>
- <td class="listlr">
- <?=htmlspecialchars($secretent['ident']);?>
- </td>
- <td class="listlr">
- <?php
- if (empty($secretent['type'])) {
- echo 'PSK';
- } else {
- echo htmlspecialchars($secretent['type']);
- }
- ?>
- </td>
- <td class="listr">
- <?=htmlspecialchars($secretent['pre-shared-key']);?>
- </td>
- <td class="list nowrap"><a href="vpn_ipsec_keys_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit key"); ?>" width="17" height="17" border="0" alt="edit" /></a>
- &nbsp;<a href="vpn_ipsec_keys.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this Pre-Shared Key?"); ?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete key"); ?>" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="3"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add key">
- <tr>
- <td width="20" height="17"></td>
- <td>
- <a href="vpn_ipsec_keys_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add key"); ?>" width="17" height="17" border="0" alt="add" /></a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- <tr>
- <td colspan="4">
- <p>
- <span class="vexpl">
- <span class="red">
- <strong><?=gettext("Note"); ?>:<br /></strong>
- </span>
- <?=gettext("PSK for any user can be set by using an identifier of any/ANY");?>
- </span>
- </p>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/vpn_ipsec_keys_edit.php b/usr/local/www/vpn_ipsec_keys_edit.php
deleted file mode 100644
index 6419a6b..0000000
--- a/usr/local/www/vpn_ipsec_keys_edit.php
+++ /dev/null
@@ -1,199 +0,0 @@
-<?php
-/*
- vpn_ipsec_keys_edit.php
- part of m0n0wall (http://m0n0.ch/wall)
- part of pfSense
-
- Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-vpn-ipsec-editkeys
-##|*NAME=VPN: IPsec: Edit Pre-Shared Keys
-##|*DESCR=Allow access to the 'VPN: IPsec: Edit Pre-Shared Keys' page.
-##|*MATCH=vpn_ipsec_keys_edit.php*
-##|-PRIV
-
-require("functions.inc");
-require("guiconfig.inc");
-require_once("ipsec.inc");
-require_once("vpn.inc");
-
-if (!is_array($config['ipsec']['mobilekey'])) {
- $config['ipsec']['mobilekey'] = array();
-}
-ipsec_mobilekey_sort();
-$a_secret = &$config['ipsec']['mobilekey'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_secret[$id]) {
- $pconfig['ident'] = $a_secret[$id]['ident'];
- $pconfig['type'] = $a_secret[$id]['type'];
- $pconfig['psk'] = $a_secret[$id]['pre-shared-key'];
-}
-
-if ($_POST) {
- $userids = array();
- foreach ($config['system']['user'] as $uid => $user) {
- $userids[$user['name']] = $uid;
- }
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "ident psk");
- $reqdfieldsn = array(gettext("Identifier"), gettext("Pre-Shared Key"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (preg_match("/[^a-zA-Z0-9@\.\-]/", $_POST['ident'])) {
- $input_errors[] = gettext("The identifier contains invalid characters.");
- }
-
- if (array_key_exists($_POST['ident'], $userids)) {
- $input_errors[] = gettext("A user with this name already exists. Add the key to the user instead.");
- }
- unset($userids);
-
- if (isset($_POST['psk']) && !preg_match('/^[[:ascii:]]*$/', $_POST['psk'])) {
- $input_errors[] = gettext("Pre-Shared Key contains invalid characters.");
- }
-
- if (!$input_errors && !(isset($id) && $a_secret[$id])) {
- /* make sure there are no dupes */
- foreach ($a_secret as $secretent) {
- if ($secretent['ident'] == $_POST['ident']) {
- $input_errors[] = gettext("Another entry with the same identifier already exists.");
- break;
- }
- }
- }
-
- if (!$input_errors) {
-
- if (isset($id) && $a_secret[$id]) {
- $secretent = $a_secret[$id];
- }
-
- $secretent['ident'] = $_POST['ident'];
- $secretent['type'] = $_POST['type'];
- $secretent['pre-shared-key'] = $_POST['psk'];
- $text = "";
-
- if (isset($id) && $a_secret[$id]) {
- $a_secret[$id] = $secretent;
- $text = gettext("Edited");
- } else {
- $a_secret[] = $secretent;
- $text = gettext("Added");
- }
-
- write_config("{$text} IPsec Pre-Shared Keys");
- mark_subsystem_dirty('ipsec');
-
- header("Location: vpn_ipsec_keys.php");
- exit;
- }
-}
-
-$pgtitle = gettext("VPN: IPsec: Edit Pre-Shared Key");
-$shortcut_section = "ipsec";
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<form action="vpn_ipsec_keys_edit.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="vpn ipsec keys edit">
- <tr>
- <td colspan="2" valign="top" class="listtopic">Edit pre-shared secret</td>
- </tr>
- <tr>
- <td valign="top" class="vncellreq"><?=gettext("Identifier"); ?></td>
- <td class="vtable">
- <?=$mandfldhtml;?><input name="ident" type="text" class="formfld unknown" id="ident" size="30" value="<?=htmlspecialchars($pconfig['ident']);?>" />
- <br />
- <?=gettext("This can be either an IP address, fully qualified domain name or an e-mail address"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Secret type"); ?></td>
- <td width="78%" class="vtable">
- <select name="type" class="formselect">
- <?php
- foreach ($ipsec_preshared_key_type as $value => $descr) {
- echo "<option value='{$value}' ";
- if ($pconfig['type'] == $value) {
- echo "selected=\"selected\"";
- }
- echo ">{$descr}</option>";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Pre-Shared Key"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="psk" type="text" class="formfld unknown" id="psk" size="40" value="<?=htmlspecialchars($pconfig['psk']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <?php if (isset($id) && $a_secret[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- <tr>
- <td colspan="4">
- <p>
- <span class="vexpl">
- <span class="red">
- <strong><?=gettext("Note"); ?>:<br /></strong>
- </span>
- <?=gettext("PSK for any user can be set by using an identifier of any/ANY");?>
- </span>
- </p>
- </td>
- </tr>
- </table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/vpn_ipsec_mobile.php b/usr/local/www/vpn_ipsec_mobile.php
deleted file mode 100644
index bb1ef75..0000000
--- a/usr/local/www/vpn_ipsec_mobile.php
+++ /dev/null
@@ -1,740 +0,0 @@
-<?php
-/*
- vpn_ipsec_mobile.php
-
- Copyright (C) 2008 Shrew Soft Inc
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-vpn-ipsec-mobile
-##|*NAME=VPN: IPsec: Mobile page
-##|*DESCR=Allow access to the 'VPN: IPsec: Mobile' page.
-##|*MATCH=vpn_ipsec_mobile.php*
-##|-PRIV
-
-require("functions.inc");
-require("guiconfig.inc");
-require_once("ipsec.inc");
-require_once("vpn.inc");
-require_once("filter.inc");
-
-if (!is_array($config['ipsec']['phase1'])) {
- $config['ipsec']['phase1'] = array();
-}
-
-$a_phase1 = &$config['ipsec']['phase1'];
-
-if (!is_array($config['ipsec']['client'])) {
- $config['ipsec']['client'] = array();
-}
-
-$a_client = &$config['ipsec']['client'];
-
-if (count($a_client)) {
-
- $pconfig['enable'] = $a_client['enable'];
-
- $pconfig['user_source'] = $a_client['user_source'];
- $pconfig['group_source'] = $a_client['group_source'];
-
- $pconfig['pool_address'] = $a_client['pool_address'];
- $pconfig['pool_netbits'] = $a_client['pool_netbits'];
- $pconfig['net_list'] = $a_client['net_list'];
- $pconfig['save_passwd'] = $a_client['save_passwd'];
- $pconfig['dns_domain'] = $a_client['dns_domain'];
- $pconfig['dns_split'] = $a_client['dns_split'];
- $pconfig['dns_server1'] = $a_client['dns_server1'];
- $pconfig['dns_server2'] = $a_client['dns_server2'];
- $pconfig['dns_server3'] = $a_client['dns_server3'];
- $pconfig['dns_server4'] = $a_client['dns_server4'];
- $pconfig['wins_server1'] = $a_client['wins_server1'];
- $pconfig['wins_server2'] = $a_client['wins_server2'];
- $pconfig['pfs_group'] = $a_client['pfs_group'];
- $pconfig['login_banner'] = $a_client['login_banner'];
-
- if (isset($pconfig['enable'])) {
- $pconfig['enable'] = true;
- }
-
- if ($pconfig['pool_address']&&$pconfig['pool_netbits']) {
- $pconfig['pool_enable'] = true;
- } else {
- $pconfig['pool_netbits'] = 24;
- }
-
- if (isset($pconfig['net_list'])) {
- $pconfig['net_list_enable'] = true;
- }
-
- if (isset($pconfig['save_passwd'])) {
- $pconfig['save_passwd_enable'] = true;
- }
-
- if ($pconfig['dns_domain']) {
- $pconfig['dns_domain_enable'] = true;
- }
-
- if ($pconfig['dns_split']) {
- $pconfig['dns_split_enable'] = true;
- }
-
- if ($pconfig['dns_server1']||$pconfig['dns_server2']||$pconfig['dns_server3']||$pconfig['dns_server4']) {
- $pconfig['dns_server_enable'] = true;
- }
-
- if ($pconfig['wins_server1']||$pconfig['wins_server2']) {
- $pconfig['wins_server_enable'] = true;
- }
-
- if (isset($pconfig['pfs_group'])) {
- $pconfig['pfs_group_enable'] = true;
- }
-
- if ($pconfig['login_banner']) {
- $pconfig['login_banner_enable'] = true;
- }
-}
-
-if ($_POST['create']) {
- header("Location: vpn_ipsec_phase1.php?mobile=true");
-}
-
-if ($_POST['apply']) {
- $retval = 0;
- /* NOTE: #4353 Always restart ipsec when mobile clients settings change */
- $retval = vpn_ipsec_configure(true);
- $savemsg = get_std_save_message($retval);
- if ($retval >= 0) {
- if (is_subsystem_dirty('ipsec')) {
- clear_subsystem_dirty('ipsec');
- }
- }
-}
-
-if ($_POST['submit']) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input consolidation */
-
- /* input validation */
-
- $reqdfields = explode(" ", "user_source group_source");
- $reqdfieldsn = array(gettext("User Authentication Source"), gettext("Group Authentication Source"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if ($pconfig['pool_enable']) {
- if (!is_ipaddr($pconfig['pool_address'])) {
- $input_errors[] = gettext("A valid IP address for 'Virtual Address Pool Network' must be specified.");
- }
- }
- if ($pconfig['dns_domain_enable']) {
- if (!is_domain($pconfig['dns_domain'])) {
- $input_errors[] = gettext("A valid value for 'DNS Default Domain' must be specified.");
- }
- }
- if ($pconfig['dns_split_enable']) {
- if (!empty($pconfig['dns_split'])) {
- /* Replace multiple spaces by single */
- $pconfig['dns_split'] = preg_replace('/\s+/', ' ', trim($pconfig['dns_split']));
- $domain_array = explode(' ', $pconfig['dns_split']);
- foreach ($domain_array as $curdomain) {
- if (!is_domain($curdomain)) {
- $input_errors[] = gettext("A valid split DNS domain list must be specified.");
- break;
- }
- }
- }
- }
-
- if ($pconfig['dns_server_enable']) {
- if (!$pconfig['dns_server1'] && !$pconfig['dns_server2'] &&
- !$pconfig['dns_server3'] && !$pconfig['dns_server4']) {
- $input_errors[] = gettext("At least one DNS server must be specified to enable the DNS Server option.");
- }
- if ($pconfig['dns_server1'] && !is_ipaddr($pconfig['dns_server1'])) {
- $input_errors[] = gettext("A valid IP address for 'DNS Server #1' must be specified.");
- }
- if ($pconfig['dns_server2'] && !is_ipaddr($pconfig['dns_server2'])) {
- $input_errors[] = gettext("A valid IP address for 'DNS Server #2' must be specified.");
- }
- if ($pconfig['dns_server3'] && !is_ipaddr($pconfig['dns_server3'])) {
- $input_errors[] = gettext("A valid IP address for 'DNS Server #3' must be specified.");
- }
- if ($pconfig['dns_server4'] && !is_ipaddr($pconfig['dns_server4'])) {
- $input_errors[] = gettext("A valid IP address for 'DNS Server #4' must be specified.");
- }
- }
-
- if ($pconfig['wins_server_enable']) {
- if (!$pconfig['wins_server1'] && !$pconfig['wins_server2']) {
- $input_errors[] = gettext("At least one WINS server must be specified to enable the DNS Server option.");
- }
- if ($pconfig['wins_server1'] && !is_ipaddr($pconfig['wins_server1'])) {
- $input_errors[] = gettext("A valid IP address for 'WINS Server #1' must be specified.");
- }
- if ($pconfig['wins_server2'] && !is_ipaddr($pconfig['wins_server2'])) {
- $input_errors[] = gettext("A valid IP address for 'WINS Server #2' must be specified.");
- }
- }
-
- if ($pconfig['login_banner_enable']) {
- if (!strlen($pconfig['login_banner'])) {
- $input_errors[] = gettext("A valid value for 'Login Banner' must be specified.");
- }
- }
-
- if (!$input_errors) {
- $client = array();
-
- if ($pconfig['enable']) {
- $client['enable'] = true;
- }
-
- if (!empty($pconfig['user_source'])) {
- $client['user_source'] = implode(",", $pconfig['user_source']);
- }
- $client['group_source'] = $pconfig['group_source'];
-
- if ($pconfig['pool_enable']) {
- $client['pool_address'] = $pconfig['pool_address'];
- $client['pool_netbits'] = $pconfig['pool_netbits'];
- }
-
- if ($pconfig['net_list_enable']) {
- $client['net_list'] = true;
- }
-
- if ($pconfig['save_passwd_enable']) {
- $client['save_passwd'] = true;
- }
-
- if ($pconfig['dns_domain_enable']) {
- $client['dns_domain'] = $pconfig['dns_domain'];
- }
-
- if ($pconfig['dns_split_enable']) {
- $client['dns_split'] = $pconfig['dns_split'];
- }
-
- if ($pconfig['dns_server_enable']) {
- $client['dns_server1'] = $pconfig['dns_server1'];
- $client['dns_server2'] = $pconfig['dns_server2'];
- $client['dns_server3'] = $pconfig['dns_server3'];
- $client['dns_server4'] = $pconfig['dns_server4'];
- }
-
- if ($pconfig['wins_server_enable']) {
- $client['wins_server1'] = $pconfig['wins_server1'];
- $client['wins_server2'] = $pconfig['wins_server2'];
- }
-
- if ($pconfig['pfs_group_enable']) {
- $client['pfs_group'] = $pconfig['pfs_group'];
- }
-
- if ($pconfig['login_banner_enable']) {
- $client['login_banner'] = $pconfig['login_banner'];
- }
-
- $a_client = $client;
-
- write_config();
- mark_subsystem_dirty('ipsec');
-
- header("Location: vpn_ipsec_mobile.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("VPN"), gettext("IPsec"), gettext("Mobile"));
-$shortcut_section = "ipsec";
-
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
-
-function pool_change() {
-
- if (document.iform.pool_enable.checked) {
- document.iform.pool_address.disabled = 0;
- document.iform.pool_netbits.disabled = 0;
- } else {
- document.iform.pool_address.disabled = 1;
- document.iform.pool_netbits.disabled = 1;
- }
-}
-
-function dns_domain_change() {
-
- if (document.iform.dns_domain_enable.checked) {
- document.iform.dns_domain.disabled = 0;
- } else {
- document.iform.dns_domain.disabled = 1;
- }
-}
-
-function dns_split_change() {
-
- if (document.iform.dns_split_enable.checked) {
- document.iform.dns_split.disabled = 0;
- } else {
- document.iform.dns_split.disabled = 1;
- }
-}
-
-function dns_server_change() {
-
- if (document.iform.dns_server_enable.checked) {
- document.iform.dns_server1.disabled = 0;
- document.iform.dns_server2.disabled = 0;
- document.iform.dns_server3.disabled = 0;
- document.iform.dns_server4.disabled = 0;
- } else {
- document.iform.dns_server1.disabled = 1;
- document.iform.dns_server2.disabled = 1;
- document.iform.dns_server3.disabled = 1;
- document.iform.dns_server4.disabled = 1;
- }
-}
-
-function wins_server_change() {
-
- if (document.iform.wins_server_enable.checked) {
- document.iform.wins_server1.disabled = 0;
- document.iform.wins_server2.disabled = 0;
- } else {
- document.iform.wins_server1.disabled = 1;
- document.iform.wins_server2.disabled = 1;
- }
-}
-
-function pfs_group_change() {
-
- if (document.iform.pfs_group_enable.checked) {
- document.iform.pfs_group.disabled = 0;
- } else {
- document.iform.pfs_group.disabled = 1;
- }
-}
-
-function login_banner_change() {
-
- if (document.iform.login_banner_enable.checked) {
- document.iform.login_banner.disabled = 0;
- } else {
- document.iform.login_banner.disabled = 1;
- }
-}
-
-//]]>
-</script>
-
-<form action="vpn_ipsec_mobile.php" method="post" name="iform" id="iform">
-
-<?php
- if ($savemsg) {
- print_info_box($savemsg);
- }
- if (isset($config['ipsec']['enable']) && is_subsystem_dirty('ipsec')) {
- print_info_box_np(gettext("The IPsec tunnel configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));
- }
- foreach ($a_phase1 as $ph1ent) {
- if (isset($ph1ent['mobile'])) {
- $ph1found = true;
- }
- }
- if ($pconfig['enable'] && !$ph1found) {
- print_info_box_np(gettext("Support for IPsec Mobile clients is enabled but a Phase1 definition was not found") . ".<br />" . gettext("Please click Create to define one."), gettext("create"), gettext("Create Phase1"));
- }
- if ($input_errors) {
- print_input_errors($input_errors);
- }
-?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn ipsec mobile">
- <tr>
- <td class="tabnavtbl">
- <?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Tunnels"), false, "vpn_ipsec.php");
- $tab_array[1] = array(gettext("Mobile clients"), true, "vpn_ipsec_mobile.php");
- $tab_array[2] = array(gettext("Pre-Shared Key"), false, "vpn_ipsec_keys.php");
- $tab_array[3] = array(gettext("Advanced Settings"), false, "vpn_ipsec_settings.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("IKE Extensions"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="2" cellpadding="0" summary="ike extensions">
- <tr>
- <td>
- <?php set_checked($pconfig['enable'], $chk); ?>
- <input name="enable" type="checkbox" id="enable" value="yes" <?=$chk;?> />
- </td>
- <td>
- <strong><?=gettext("Enable IPsec Mobile Client Support"); ?></strong>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic">
- <?=gettext("Extended Authentication (Xauth)"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("User Authentication"); ?></td>
- <td width="78%" class="vtable">
- <?=gettext("Source"); ?>:&nbsp;&nbsp;
- <select name="user_source[]" class="formselect" id="user_source" multiple="multiple" size="3">
- <?php
- $authmodes = explode(",", $pconfig['user_source']);
- $auth_servers = auth_get_authserver_list();
- foreach ($auth_servers as $auth_server) {
- $selected = "";
- if (in_array($auth_server['name'], $authmodes)) {
- $selected = "selected=\"selected\"";
- }
- echo "<option value='{$auth_server['name']}' {$selected}>{$auth_server['name']}</option>\n";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Group Authentication"); ?></td>
- <td width="78%" class="vtable">
- <?=gettext("Source"); ?>:&nbsp;&nbsp;
- <select name="group_source" class="formselect" id="group_source">
- <option value="none"><?=gettext("none"); ?></option>
- <option value="system" <?php if ($pconfig['group_source'] == "system") echo "selected=\"selected\""; ?> ><?=gettext("system"); ?></option>
- </select>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic">
- <?=gettext("Client Configuration (mode-cfg)"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Virtual Address Pool"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="2" cellpadding="0" summary="enable pool">
- <tr>
- <td>
- <?php set_checked($pconfig['pool_enable'], $chk); ?>
- <input name="pool_enable" type="checkbox" id="pool_enable" value="yes" <?=$chk;?> onclick="pool_change()" />
- </td>
- <td>
- <?=gettext("Provide a virtual IP address to clients"); ?><br />
- </td>
- </tr>
- </table>
- <table border="0" cellspacing="2" cellpadding="0" summary="virtual address pool">
- <tr>
- <td>
- <?=gettext("Network"); ?>:&nbsp;
- <input name="pool_address" type="text" class="formfld unknown" id="pool_address" size="20" value="<?=htmlspecialchars($pconfig['pool_address']);?>" />
- /
- <select name="pool_netbits" class="formselect" id="pool_netbits">
- <?php for ($i = 32; $i >= 0; $i--): ?>
- <option value="<?=$i;?>" <?php if ($i == $pconfig['pool_netbits']) echo "selected=\"selected\""; ?>>
- <?=$i;?>
- </option>
- <?php endfor; ?>
- </select>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Network List"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="2" cellpadding="0" summary="network list">
- <tr>
- <td>
- <?php set_checked($pconfig['net_list_enable'], $chk); ?>
- <input name="net_list_enable" type="checkbox" id="net_list_enable" value="yes" <?=$chk;?> />
- </td>
- <td>
- <?=gettext("Provide a list of accessible networks to clients"); ?><br />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Save Xauth Password"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="2" cellpadding="0" summary="password">
- <tr>
- <td>
- <?php set_checked($pconfig['save_passwd_enable'], $chk); ?>
- <input name="save_passwd_enable" type="checkbox" id="save_passwd_enable" value="yes" <?=$chk;?> />
- </td>
- <td>
- <?=gettext("Allow clients to save Xauth passwords (Cisco VPN client only)."); ?><br />
- <?=gettext("NOTE: With iPhone clients, this does not work when deployed via the iPhone configuration utility, only by manual entry."); ?><br />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("DNS Default Domain"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="2" cellpadding="0" summary="enable dns default domain">
- <tr>
- <td>
- <?php set_checked($pconfig['dns_domain_enable'], $chk); ?>
- <input name="dns_domain_enable" type="checkbox" id="dns_domain_enable" value="yes" <?=$chk;?> onclick="dns_domain_change()" />
- </td>
- <td>
- <?=gettext("Provide a default domain name to clients"); ?><br />
- </td>
- </tr>
- </table>
- <table border="0" cellspacing="2" cellpadding="0" summary="dns default domain">
- <tr>
- <td>
- <input name="dns_domain" type="text" class="formfld unknown" id="dns_domain" size="30" value="<?=htmlspecialchars($pconfig['dns_domain']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Split DNS"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="2" cellpadding="0" summary="enable split dns">
- <tr>
- <td>
- <?php set_checked($pconfig['dns_split_enable'], $chk); ?>
- <input name="dns_split_enable" type="checkbox" id="dns_split_enable" value="yes" <?=$chk;?> onclick="dns_split_change()" />
- </td>
- <td>
- <?=gettext("Provide a list of split DNS domain names to clients. Enter a space separated list."); ?><br />
- <?=gettext("NOTE: If left blank, and a default domain is set, it will be used for this value."); ?>
- </td>
- </tr>
- </table>
- <table border="0" cellspacing="2" cellpadding="0" summary="split dns">
- <tr>
- <td>
- <input name="dns_split" type="text" class="formfld unknown" id="dns_split" size="30" value="<?=htmlspecialchars($pconfig['dns_split']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("DNS Servers"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="2" cellpadding="0" summary="enable dns servers">
- <tr>
- <td>
- <?php set_checked($pconfig['dns_server_enable'], $chk); ?>
- <input name="dns_server_enable" type="checkbox" id="dns_server_enable" value="yes" <?=$chk;?> onclick="dns_server_change()" />
- </td>
- <td>
- <?=gettext("Provide a DNS server list to clients"); ?><br />
- </td>
- </tr>
- </table>
- <table border="0" cellspacing="2" cellpadding="0" summary="dns servers">
- <tr>
- <td>
- <?=gettext("Server"); ?> #1:&nbsp;
- <input name="dns_server1" type="text" class="formfld unknown" id="dns_server1" size="20" value="<?=htmlspecialchars($pconfig['dns_server1']);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <?=gettext("Server"); ?> #2:&nbsp;
- <input name="dns_server2" type="text" class="formfld unknown" id="dns_server2" size="20" value="<?=htmlspecialchars($pconfig['dns_server2']);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <?=gettext("Server"); ?> #3:&nbsp;
- <input name="dns_server3" type="text" class="formfld unknown" id="dns_server3" size="20" value="<?=htmlspecialchars($pconfig['dns_server3']);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <?=gettext("Server"); ?> #4:&nbsp;
- <input name="dns_server4" type="text" class="formfld unknown" id="dns_server4" size="20" value="<?=htmlspecialchars($pconfig['dns_server4']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("WINS Servers"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="2" cellpadding="0" summary="enable wins servers">
- <tr>
- <td>
- <?php set_checked($pconfig['wins_server_enable'], $chk); ?>
- <input name="wins_server_enable" type="checkbox" id="wins_server_enable" value="yes" <?=$chk;?> onclick="wins_server_change()" />
- </td>
- <td>
- <?=gettext("Provide a WINS server list to clients"); ?><br />
- </td>
- </tr>
- </table>
- <table border="0" cellspacing="2" cellpadding="0" summary="wins servers">
- <tr>
- <td>
- <?=gettext("Server"); ?> #1:&nbsp;
- <input name="wins_server1" type="text" class="formfld unknown" id="wins_server1" size="20" value="<?=htmlspecialchars($pconfig['wins_server1']);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <?=gettext("Server"); ?> #2:&nbsp;
- <input name="wins_server2" type="text" class="formfld unknown" id="wins_server2" size="20" value="<?=htmlspecialchars($pconfig['wins_server2']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Phase2 PFS Group"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="2" cellpadding="0" summary="enable pfs group">
- <tr>
- <td>
- <?php set_checked($pconfig['pfs_group_enable'], $chk); ?>
- <input name="pfs_group_enable" type="checkbox" id="pfs_group_enable" value="yes" <?=$chk;?> onclick="pfs_group_change()" />
- </td>
- <td>
- <?=gettext("Provide the Phase2 PFS group to clients ( overrides all mobile phase2 settings )"); ?><br />
- </td>
- </tr>
- </table>
- <table border="0" cellspacing="2" cellpadding="0" summary="phase-2 pfs group">
- <tr>
- <td>
- <?=gettext("Group"); ?>:&nbsp;&nbsp;
- <select name="pfs_group" class="formselect" id="pfs_group">
- <?php foreach ($p2_pfskeygroups as $keygroup => $keygroupname): ?>
- <option value="<?=$keygroup;?>" <?php if ($pconfig['pfs_group'] == $keygroup) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($keygroupname);?>
- </option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Login Banner"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="2" cellpadding="0" summary="enable login banner">
- <tr>
- <td>
- <?php set_checked($pconfig['login_banner_enable'], $chk); ?>
- <input name="login_banner_enable" type="checkbox" id="login_banner_enable" value="yes" <?=$chk;?> onclick="login_banner_change()" />
- </td>
- <td>
- <?=gettext("Provide a login banner to clients"); ?><br />
- </td>
- </tr>
- </table>
- <table border="0" cellspacing="2" cellpadding="0" summary="banner">
- <tr>
- <td>
- <?php $banner = htmlspecialchars($pconfig['login_banner']); ?>
- <textarea name="login_banner" cols="65" rows="7" id="login_banner" class="formpre"><?=htmlspecialchars($banner);?></textarea>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
-pool_change();
-dns_domain_change();
-dns_split_change();
-dns_server_change();
-wins_server_change();
-pfs_group_change();
-login_banner_change();
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
-
-<?php
-
-/* local utility functions */
-
-function set_checked($var,& $chk) {
- if ($var) {
- $chk = "checked=\"checked\"";
- } else {
- $chk = "";
- }
-}
-
-?>
diff --git a/usr/local/www/vpn_ipsec_phase1.php b/usr/local/www/vpn_ipsec_phase1.php
deleted file mode 100644
index 11a2e90..0000000
--- a/usr/local/www/vpn_ipsec_phase1.php
+++ /dev/null
@@ -1,1092 +0,0 @@
-<?php
-/*
- vpn_ipsec_phase1.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2008 Shrew Soft Inc
- Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2014 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-vpn-ipsec-editphase1
-##|*NAME=VPN: IPsec: Edit Phase 1 page
-##|*DESCR=Allow access to the 'VPN: IPsec: Edit Phase 1' page.
-##|*MATCH=vpn_ipsec_phase1.php*
-##|-PRIV
-
-require("functions.inc");
-require("guiconfig.inc");
-require_once("ipsec.inc");
-require_once("vpn.inc");
-require_once("filter.inc");
-
-if (!is_array($config['ipsec']['phase1'])) {
- $config['ipsec']['phase1'] = array();
-}
-
-if (!is_array($config['ipsec']['phase2'])) {
- $config['ipsec']['phase2'] = array();
-}
-
-$a_phase1 = &$config['ipsec']['phase1'];
-$a_phase2 = &$config['ipsec']['phase2'];
-
-if (is_numericint($_GET['p1index'])) {
- $p1index = $_GET['p1index'];
-}
-if (isset($_POST['p1index']) && is_numericint($_POST['p1index'])) {
- $p1index = $_POST['p1index'];
-}
-
-if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
- $p1index = $_GET['dup'];
-}
-
-if (isset($p1index) && $a_phase1[$p1index]) {
- // don't copy the ikeid on dup
- if (!isset($_GET['dup']) || !is_numericint($_GET['dup'])) {
- $pconfig['ikeid'] = $a_phase1[$p1index]['ikeid'];
- }
-
- $old_ph1ent = $a_phase1[$p1index];
-
- $pconfig['disabled'] = isset($a_phase1[$p1index]['disabled']);
-
- if ($a_phase1[$p1index]['interface']) {
- $pconfig['interface'] = $a_phase1[$p1index]['interface'];
- } else {
- $pconfig['interface'] = "wan";
- }
-
- list($pconfig['remotenet'], $pconfig['remotebits']) = explode("/", $a_phase1[$p1index]['remote-subnet']);
-
- if (isset($a_phase1[$p1index]['mobile'])) {
- $pconfig['mobile'] = 'true';
- } else {
- $pconfig['remotegw'] = $a_phase1[$p1index]['remote-gateway'];
- }
-
- if (empty($a_phase1[$p1index]['iketype'])) {
- $pconfig['iketype'] = "ikev1";
- } else {
- $pconfig['iketype'] = $a_phase1[$p1index]['iketype'];
- }
- $pconfig['mode'] = $a_phase1[$p1index]['mode'];
- $pconfig['protocol'] = $a_phase1[$p1index]['protocol'];
- $pconfig['myid_type'] = $a_phase1[$p1index]['myid_type'];
- $pconfig['myid_data'] = $a_phase1[$p1index]['myid_data'];
- $pconfig['peerid_type'] = $a_phase1[$p1index]['peerid_type'];
- $pconfig['peerid_data'] = $a_phase1[$p1index]['peerid_data'];
- $pconfig['ealgo'] = $a_phase1[$p1index]['encryption-algorithm'];
- $pconfig['halgo'] = $a_phase1[$p1index]['hash-algorithm'];
- $pconfig['dhgroup'] = $a_phase1[$p1index]['dhgroup'];
- $pconfig['lifetime'] = $a_phase1[$p1index]['lifetime'];
- $pconfig['authentication_method'] = $a_phase1[$p1index]['authentication_method'];
-
- if (($pconfig['authentication_method'] == "pre_shared_key") ||
- ($pconfig['authentication_method'] == "xauth_psk_server")) {
- $pconfig['pskey'] = $a_phase1[$p1index]['pre-shared-key'];
- } else {
- $pconfig['certref'] = $a_phase1[$p1index]['certref'];
- $pconfig['caref'] = $a_phase1[$p1index]['caref'];
- }
-
- $pconfig['descr'] = $a_phase1[$p1index]['descr'];
- $pconfig['nat_traversal'] = $a_phase1[$p1index]['nat_traversal'];
- $pconfig['mobike'] = $a_phase1[$p1index]['mobike'];
-
- if (isset($a_phase1[$p1index]['reauth_enable'])) {
- $pconfig['reauth_enable'] = true;
- }
- if (isset($a_phase1[$p1index]['rekey_enable'])) {
- $pconfig['rekey_enable'] = true;
- }
- if (isset($a_phase1[$p1index]['responderonly'])) {
- $pconfig['responderonly'] = true;
- }
-
- if ($a_phase1[$p1index]['dpd_delay'] && $a_phase1[$p1index]['dpd_maxfail']) {
- $pconfig['dpd_enable'] = true;
- $pconfig['dpd_delay'] = $a_phase1[$p1index]['dpd_delay'];
- $pconfig['dpd_maxfail'] = $a_phase1[$p1index]['dpd_maxfail'];
- }
-} else {
- /* defaults */
- $pconfig['interface'] = "wan";
- if ($config['interfaces']['lan']) {
- $pconfig['localnet'] = "lan";
- }
- $pconfig['mode'] = "main";
- $pconfig['protocol'] = "inet";
- $pconfig['myid_type'] = "myaddress";
- $pconfig['peerid_type'] = "peeraddress";
- $pconfig['authentication_method'] = "pre_shared_key";
- $pconfig['ealgo'] = array(name => "aes");
- $pconfig['halgo'] = "sha1";
- $pconfig['dhgroup'] = "2";
- $pconfig['lifetime'] = "28800";
- $pconfig['nat_traversal'] = 'on';
- $pconfig['mobike'] = 'off';
- $pconfig['dpd_enable'] = true;
- $pconfig['iketype'] = "ikev1";
-
- /* mobile client */
- if ($_GET['mobile']) {
- $pconfig['mobile'] = true;
- $pconfig['mode'] = "aggressive";
- }
-}
-
-if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
- unset($p1index);
-}
-
-if ($_POST) {
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
-
- $method = $pconfig['authentication_method'];
- // Unset ca and cert if not required to avoid storing in config
- if ($method == "pre_shared_key" || $method == "xauth_psk_server") {
- unset($pconfig['caref']);
- unset($pconfig['certref']);
- }
-
- // Only require PSK here for normal PSK tunnels (not mobile) or xauth.
- // For RSA methods, require the CA/Cert.
- switch ($method) {
- case 'eap-mschapv2':
- if ($pconfig['iketype'] != 'ikev2') {
- $input_errors[] = gettext("EAP-MSChapv2 can only be used with IKEv2 type VPNs.");
- }
- break;
- case "eap-tls":
- if ($pconfig['iketype'] != 'ikev2') {
- $input_errors[] = gettext("EAP-TLS can only be used with IKEv2 type VPNs.");
- }
- break;
- case "eap-radius":
- if ($pconfig['iketype'] != 'ikev2') {
- $input_errors[] = gettext("EAP-RADIUS can only be used with IKEv2 type VPNs.");
- }
- break;
- case "pre_shared_key":
- // If this is a mobile PSK tunnel the user PSKs go on
- // the PSK tab, not here, so skip the check.
- if ($pconfig['mobile']) {
- break;
- }
- case "xauth_psk_server":
- $reqdfields = explode(" ", "pskey");
- $reqdfieldsn = array(gettext("Pre-Shared Key"));
- $validate_pskey = true;
- break;
- case "hybrid_rsa_server":
- case "xauth_rsa_server":
- case "rsasig":
- $reqdfields = explode(" ", "caref certref");
- $reqdfieldsn = array(gettext("Certificate Authority"), gettext("Certificate"));
- break;
- }
- if (!$pconfig['mobile']) {
- $reqdfields[] = "remotegw";
- $reqdfieldsn[] = gettext("Remote gateway");
- }
-
- do_input_validation($pconfig, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (isset($validate_pskey) && isset($pconfig['pskey']) && !preg_match('/^[[:ascii:]]*$/', $pconfig['pskey'])) {
- unset($validate_pskey);
- $input_errors[] = gettext("Pre-Shared Key contains invalid characters.");
- }
-
- if (($pconfig['lifetime'] && !is_numeric($pconfig['lifetime']))) {
- $input_errors[] = gettext("The P1 lifetime must be an integer.");
- }
-
- if ($pconfig['remotegw']) {
- if (!is_ipaddr($pconfig['remotegw']) && !is_domain($pconfig['remotegw'])) {
- $input_errors[] = gettext("A valid remote gateway address or host name must be specified.");
- } elseif (is_ipaddrv4($pconfig['remotegw']) && ($pconfig['protocol'] != "inet")) {
- $input_errors[] = gettext("A valid remote gateway IPv4 address must be specified or you need to change protocol to IPv6");
- } elseif (is_ipaddrv6($pconfig['remotegw']) && ($pconfig['protocol'] != "inet6")) {
- $input_errors[] = gettext("A valid remote gateway IPv6 address must be specified or you need to change protocol to IPv4");
- }
- }
-
- if ($pconfig['remotegw'] && is_ipaddr($pconfig['remotegw']) && !isset($pconfig['disabled'])) {
- $t = 0;
- foreach ($a_phase1 as $ph1tmp) {
- if ($p1index <> $t) {
- $tremotegw = $pconfig['remotegw'];
- if (($ph1tmp['remote-gateway'] == $tremotegw) && !isset($ph1tmp['disabled'])) {
- $input_errors[] = sprintf(gettext('The remote gateway "%1$s" is already used by phase1 "%2$s".'), $tremotegw, $ph1tmp['descr']);
- }
- }
- $t++;
- }
- }
-
- if (is_array($a_phase2) && (count($a_phase2))) {
- foreach ($a_phase2 as $phase2) {
- if ($phase2['ikeid'] == $pconfig['ikeid']) {
- if (($pconfig['protocol'] == "inet") && ($phase2['mode'] == "tunnel6")) {
- $input_errors[] = gettext("There is a Phase 2 using IPv6, you cannot use IPv4.");
- break;
- }
- if (($pconfig['protocol'] == "inet6") && ($phase2['mode'] == "tunnel")) {
- $input_errors[] = gettext("There is a Phase 2 using IPv4, you cannot use IPv6.");
- break;
- }
- }
- }
- }
-
- /* My identity */
-
- if ($pconfig['myid_type'] == "myaddress") {
- $pconfig['myid_data'] = "";
- }
-
- if ($pconfig['myid_type'] == "address" and $pconfig['myid_data'] == "") {
- $input_errors[] = gettext("Please enter an address for 'My Identifier'");
- }
-
- if ($pconfig['myid_type'] == "keyid tag" and $pconfig['myid_data'] == "") {
- $input_errors[] = gettext("Please enter a keyid tag for 'My Identifier'");
- }
-
- if ($pconfig['myid_type'] == "fqdn" and $pconfig['myid_data'] == "") {
- $input_errors[] = gettext("Please enter a fully qualified domain name for 'My Identifier'");
- }
-
- if ($pconfig['myid_type'] == "user_fqdn" and $pconfig['myid_data'] == "") {
- $input_errors[] = gettext("Please enter a user and fully qualified domain name for 'My Identifier'");
- }
-
- if ($pconfig['myid_type'] == "dyn_dns" and $pconfig['myid_data'] == "") {
- $input_errors[] = gettext("Please enter a dynamic domain name for 'My Identifier'");
- }
-
- if (($pconfig['myid_type'] == "address") && !is_ipaddr($pconfig['myid_data'])) {
- $input_errors[] = gettext("A valid IP address for 'My identifier' must be specified.");
- }
-
- if (($pconfig['myid_type'] == "fqdn") && !is_domain($pconfig['myid_data'])) {
- $input_errors[] = gettext("A valid domain name for 'My identifier' must be specified.");
- }
-
- if ($pconfig['myid_type'] == "fqdn") {
- if (is_domain($pconfig['myid_data']) == false) {
- $input_errors[] = gettext("A valid FQDN for 'My identifier' must be specified.");
- }
- }
-
- if ($pconfig['myid_type'] == "user_fqdn") {
- $user_fqdn = explode("@", $pconfig['myid_data']);
- if (is_domain($user_fqdn[1]) == false) {
- $input_errors[] = gettext("A valid User FQDN in the form of user@my.domain.com for 'My identifier' must be specified.");
- }
- }
-
- if ($pconfig['myid_type'] == "dyn_dns") {
- if (is_domain($pconfig['myid_data']) == false) {
- $input_errors[] = gettext("A valid Dynamic DNS address for 'My identifier' must be specified.");
- }
- }
-
- /* Peer identity */
-
- if ($pconfig['myid_type'] == "peeraddress") {
- $pconfig['peerid_data'] = "";
- }
-
- // Only enforce peer ID if we are not dealing with a pure-psk mobile config.
- if (!(($pconfig['authentication_method'] == "pre_shared_key") && ($pconfig['mobile']))) {
- if ($pconfig['peerid_type'] == "address" and $pconfig['peerid_data'] == "") {
- $input_errors[] = gettext("Please enter an address for 'Peer Identifier'");
- }
-
- if ($pconfig['peerid_type'] == "keyid tag" and $pconfig['peerid_data'] == "") {
- $input_errors[] = gettext("Please enter a keyid tag for 'Peer Identifier'");
- }
-
- if ($pconfig['peerid_type'] == "fqdn" and $pconfig['peerid_data'] == "") {
- $input_errors[] = gettext("Please enter a fully qualified domain name for 'Peer Identifier'");
- }
-
- if ($pconfig['peerid_type'] == "user_fqdn" and $pconfig['peerid_data'] == "") {
- $input_errors[] = gettext("Please enter a user and fully qualified domain name for 'Peer Identifier'");
- }
-
- if ((($pconfig['peerid_type'] == "address") && !is_ipaddr($pconfig['peerid_data']))) {
- $input_errors[] = gettext("A valid IP address for 'Peer identifier' must be specified.");
- }
-
- if ((($pconfig['peerid_type'] == "fqdn") && !is_domain($pconfig['peerid_data']))) {
- $input_errors[] = gettext("A valid domain name for 'Peer identifier' must be specified.");
- }
-
- if ($pconfig['peerid_type'] == "fqdn") {
- if (is_domain($pconfig['peerid_data']) == false) {
- $input_errors[] = gettext("A valid FQDN for 'Peer identifier' must be specified.");
- }
- }
-
- if ($pconfig['peerid_type'] == "user_fqdn") {
- $user_fqdn = explode("@", $pconfig['peerid_data']);
- if (is_domain($user_fqdn[1]) == false) {
- $input_errors[] = gettext("A valid User FQDN in the form of user@my.domain.com for 'Peer identifier' must be specified.");
- }
- }
- }
-
- if ($pconfig['dpd_enable']) {
- if (!is_numeric($pconfig['dpd_delay'])) {
- $input_errors[] = gettext("A numeric value must be specified for DPD delay.");
- }
-
- if (!is_numeric($pconfig['dpd_maxfail'])) {
- $input_errors[] = gettext("A numeric value must be specified for DPD retries.");
- }
- }
-
- if (!empty($pconfig['iketype']) && $pconfig['iketype'] != "ikev1" && $pconfig['iketype'] != "ikev2") {
- $input_errors[] = gettext("Valid arguments for IKE type is v1 or v2");
- }
-
- if (!empty($_POST['ealgo']) && isset($config['system']['crypto_hardware'])) {
- if ($config['system']['crypto_hardware'] == "glxsb") {
- if ($_POST['ealgo'] == "aes" && $_POST['ealgo_keylen'] != "128") {
- $input_errors[] = gettext("Only 128 bit AES can be used where the glxsb crypto accelerator is enabled.");
- }
- }
- }
-
- /* build our encryption algorithms array */
- $pconfig['ealgo'] = array();
- $pconfig['ealgo']['name'] = $_POST['ealgo'];
- if ($pconfig['ealgo_keylen']) {
- $pconfig['ealgo']['keylen'] = $_POST['ealgo_keylen'];
- }
-
- if (!$input_errors) {
- $ph1ent['ikeid'] = $pconfig['ikeid'];
- $ph1ent['iketype'] = $pconfig['iketype'];
- if ($pconfig['iketype'] != 'ikev1') {
- unset($ph1ent['mode']);
- } else {
- $ph1ent['mode'] = $pconfig['mode'];
- }
- $ph1ent['disabled'] = $pconfig['disabled'] ? true : false;
- $ph1ent['interface'] = $pconfig['interface'];
- /* if the remote gateway changed and the interface is not WAN then remove route */
- /* the vpn_ipsec_configure() handles adding the route */
- if ($pconfig['interface'] <> "wan") {
- if ($old_ph1ent['remote-gateway'] <> $pconfig['remotegw']) {
- mwexec("/sbin/route delete -host {$old_ph1ent['remote-gateway']}");
- }
- }
-
- if ($pconfig['mobile']) {
- $ph1ent['mobile'] = true;
- } else {
- $ph1ent['remote-gateway'] = $pconfig['remotegw'];
- }
-
- $ph1ent['protocol'] = $pconfig['protocol'];
-
- $ph1ent['myid_type'] = $pconfig['myid_type'];
- $ph1ent['myid_data'] = $pconfig['myid_data'];
- $ph1ent['peerid_type'] = $pconfig['peerid_type'];
- $ph1ent['peerid_data'] = $pconfig['peerid_data'];
-
- $ph1ent['encryption-algorithm'] = $pconfig['ealgo'];
- $ph1ent['hash-algorithm'] = $pconfig['halgo'];
- $ph1ent['dhgroup'] = $pconfig['dhgroup'];
- $ph1ent['lifetime'] = $pconfig['lifetime'];
- $ph1ent['pre-shared-key'] = $pconfig['pskey'];
- $ph1ent['private-key'] = base64_encode($pconfig['privatekey']);
- $ph1ent['certref'] = $pconfig['certref'];
- $ph1ent['caref'] = $pconfig['caref'];
- $ph1ent['authentication_method'] = $pconfig['authentication_method'];
- $ph1ent['descr'] = $pconfig['descr'];
- $ph1ent['nat_traversal'] = $pconfig['nat_traversal'];
- $ph1ent['mobike'] = $pconfig['mobike'];
-
- if (isset($pconfig['reauth_enable'])) {
- $ph1ent['reauth_enable'] = true;
- } else {
- unset($ph1ent['reauth_enable']);
- }
- if (isset($pconfig['rekey_enable'])) {
- $ph1ent['rekey_enable'] = true;
- } else {
- unset($ph1ent['rekey_enable']);
- }
-
- if (isset($pconfig['responderonly'])) {
- $ph1ent['responderonly'] = true;
- } else {
- unset($ph1ent['responderonly']);
- }
-
- if (isset($pconfig['dpd_enable'])) {
- $ph1ent['dpd_delay'] = $pconfig['dpd_delay'];
- $ph1ent['dpd_maxfail'] = $pconfig['dpd_maxfail'];
- }
-
- /* generate unique phase1 ikeid */
- if ($ph1ent['ikeid'] == 0) {
- $ph1ent['ikeid'] = ipsec_ikeid_next();
- }
-
- if (isset($p1index) && $a_phase1[$p1index]) {
- $a_phase1[$p1index] = $ph1ent;
- } else {
- $a_phase1[] = $ph1ent;
- }
-
- write_config();
- mark_subsystem_dirty('ipsec');
-
- header("Location: vpn_ipsec.php");
- exit;
- }
-}
-
-if ($pconfig['mobile']) {
- $pgtitle = array(gettext("VPN"), gettext("IPsec"), gettext("Edit Phase 1"), gettext("Mobile Client"));
-} else {
- $pgtitle = array(gettext("VPN"), gettext("IPsec"), gettext("Edit Phase 1"));
-}
-$shortcut_section = "ipsec";
-
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-
-function myidsel_change() {
- index = document.iform.myid_type.selectedIndex;
- value = document.iform.myid_type.options[index].value;
- if (value == 'myaddress') {
- document.getElementById('myid_data').style.visibility = 'hidden';
- } else {
- document.getElementById('myid_data').style.visibility = 'visible';
- }
-}
-
-function iketype_change() {
- index = document.iform.iketype.selectedIndex;
- value = document.iform.iketype.options[index].value;
- if (value == 'ikev2') {
- document.getElementById('negmode').style.display= 'none';
- document.getElementById('mobike').style.display= '';
- document.getElementById('natt').style.display= 'none';
- document.getElementById('disablereauth').style.display= '';
- } else {
- document.getElementById('negmode').style.display = '';
- document.getElementById('mobike').style.display = 'none';
- document.getElementById('natt').style.display= '';
- document.getElementById('disablereauth').style.display= 'none';
- }
-}
-
-function peeridsel_change() {
- index = document.iform.peerid_type.selectedIndex;
- value = document.iform.peerid_type.options[index].value;
- if (value == 'peeraddress') {
- document.getElementById('peerid_data').style.visibility = 'hidden';
- } else if (value == 'any') {
- document.getElementById('peerid_data').style.visibility = 'hidden';
- } else {
- document.getElementById('peerid_data').style.visibility = 'visible';
- }
-}
-
-function methodsel_change() {
- index = document.iform.authentication_method.selectedIndex;
- value = document.iform.authentication_method.options[index].value;
-
- switch (value) {
- case 'eap-mschapv2':
- case 'eap-tls':
- case 'eap-radius':
- document.getElementById('opt_psk').style.display = 'none';
- document.getElementById('opt_peerid').style.display = '';
- document.getElementById('opt_cert').style.display = '';
- document.getElementById('opt_ca').style.display = '';
- document.getElementById('opt_cert').disabled = false;
- document.getElementById('opt_ca').disabled = false;
- break;
- case 'hybrid_rsa_server':
- document.getElementById('opt_psk').style.display = 'none';
- document.getElementById('opt_peerid').style.display = '';
- document.getElementById('opt_cert').style.display = '';
- document.getElementById('opt_ca').style.display = '';
- document.getElementById('opt_cert').disabled = false;
- document.getElementById('opt_ca').disabled = false;
- break;
- case 'xauth_rsa_server':
- case 'rsasig':
- document.getElementById('opt_psk').style.display = 'none';
- document.getElementById('opt_peerid').style.display = '';
- document.getElementById('opt_cert').style.display = '';
- document.getElementById('opt_ca').style.display = '';
- document.getElementById('opt_cert').disabled = false;
- document.getElementById('opt_ca').disabled = false;
- break;
-<?php if ($pconfig['mobile']) { ?>
- case 'pre_shared_key':
- document.getElementById('opt_psk').style.display = 'none';
- document.getElementById('opt_peerid').style.display = 'none';
- document.getElementById('opt_cert').style.display = 'none';
- document.getElementById('opt_ca').style.display = 'none';
- document.getElementById('opt_cert').disabled = true;
- document.getElementById('opt_ca').disabled = true;
- break;
-<?php } ?>
- default: /* psk modes*/
- document.getElementById('opt_psk').style.display = '';
- document.getElementById('opt_peerid').style.display = '';
- document.getElementById('opt_cert').style.display = 'none';
- document.getElementById('opt_ca').style.display = 'none';
- document.getElementById('opt_cert').disabled = true;
- document.getElementById('opt_ca').disabled = true;
- break;
- }
-}
-
-/* PHP generated java script for variable length keys */
-function ealgosel_change(bits) {
- switch (document.iform.ealgo.selectedIndex) {
-<?php
-$i = 0;
-foreach ($p1_ealgos as $algo => $algodata) {
- if (is_array($algodata['keysel'])) {
- echo " case {$i}:\n";
- echo " document.iform.ealgo_keylen.style.visibility = 'visible';\n";
- echo " document.iform.ealgo_keylen.options.length = 0;\n";
- // echo " document.iform.ealgo_keylen.options[document.iform.ealgo_keylen.options.length] = new Option( 'auto', 'auto' );\n";
-
- $key_hi = $algodata['keysel']['hi'];
- $key_lo = $algodata['keysel']['lo'];
- $key_step = $algodata['keysel']['step'];
-
- for ($keylen = $key_hi; $keylen >= $key_lo; $keylen -= $key_step) {
- echo " document.iform.ealgo_keylen.options[document.iform.ealgo_keylen.options.length] = new Option( '{$keylen} bits', '{$keylen}' );\n";
- }
- echo " break;\n";
- } else {
- echo " case {$i}:\n";
- echo " document.iform.ealgo_keylen.style.visibility = 'hidden';\n";
- echo " document.iform.ealgo_keylen.options.length = 0;\n";
- echo " break;\n";
- }
- $i++;
-}
-?>
- }
-
- if (bits) {
- document.iform.ealgo_keylen.value = bits;
- }
-}
-
-function dpdchkbox_change() {
- if (document.iform.dpd_enable.checked) {
- document.getElementById('opt_dpd').style.display = '';
- } else {
- document.getElementById('opt_dpd').style.display = 'none';
- }
-
- if (!document.iform.dpd_delay.value) {
- document.iform.dpd_delay.value = "10";
- }
-
- if (!document.iform.dpd_maxfail.value) {
- document.iform.dpd_maxfail.value = "5";
- }
-}
-
-//]]>
-</script>
-
-<form action="vpn_ipsec_phase1.php" method="post" name="iform" id="iform">
-
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
-?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn ipsec phase-1">
- <tr class="tabnavtbl">
- <td id="tabnav">
- <?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Tunnels"), true, "vpn_ipsec.php");
- $tab_array[1] = array(gettext("Mobile clients"), false, "vpn_ipsec_mobile.php");
- $tab_array[2] = array(gettext("Pre-Shared Keys"), false, "vpn_ipsec_keys.php");
- $tab_array[3] = array(gettext("Advanced Settings"), false, "vpn_ipsec_settings.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("General information"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
- <td width="78%" class="vtable">
- <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable this phase1 entry"); ?></strong><br />
- <span class="vexpl">
- <?=gettext("Set this option to disable this phase1 without removing it from the list"); ?>.
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Key Exchange version"); ?></td>
- <td width="78%" class="vtable">
- <select name="iketype" class="formselect" onchange='iketype_change()'>
- <?php
- $keyexchange = array("ikev1" => "V1", "ikev2" => "V2");
- foreach ($keyexchange as $kidx => $name):
- ?>
- <option value="<?=$kidx;?>" <?php if ($kidx == $pconfig['iketype']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($name);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Select the Internet Key Exchange protocol version to be used, IKEv1 or IKEv2"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Internet Protocol"); ?></td>
- <td width="78%" class="vtable">
- <select name="protocol" class="formselect">
- <?php
- $protocols = array("inet" => "IPv4", "inet6" => "IPv6");
- foreach ($protocols as $protocol => $name):
- ?>
- <option value="<?=$protocol;?>" <?php if ($protocol == $pconfig['protocol']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($name);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Select the Internet Protocol family from this dropdown"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
- <td width="78%" class="vtable">
- <select name="interface" class="formselect">
- <?php
- $interfaces = get_configured_interface_with_descr();
-
- $carplist = get_configured_carp_interface_list();
- foreach ($carplist as $cif => $carpip) {
- $interfaces[$cif] = $carpip." (".get_vip_descr($carpip).")";
- }
-
- $aliaslist = get_configured_ip_aliases_list();
- foreach ($aliaslist as $aliasip => $aliasif) {
- $interfaces[$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
- }
-
- $grouplist = return_gateway_groups_array();
- foreach ($grouplist as $name => $group) {
- if ($group[0]['vip'] <> "") {
- $vipif = $group[0]['vip'];
- } else {
- $vipif = $group[0]['int'];
- }
- $interfaces[$name] = "GW Group {$name}";
- }
-
-
- foreach ($interfaces as $iface => $ifacename):
- ?>
- <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br />
- <span class="vexpl"><?=gettext("Select the interface for the local endpoint of this phase1 entry"); ?>.</span>
- </td>
- </tr>
-
- <?php if (!$pconfig['mobile']): ?>
-
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Remote gateway"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="remotegw" type="text" class="formfld unknown" id="remotegw" size="28" value="<?=htmlspecialchars($pconfig['remotegw']);?>" />
- <br />
- <?=gettext("Enter the public IP address or host name of the remote gateway"); ?>
- </td>
- </tr>
-
- <?php endif; ?>
-
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed)"); ?>.
- </span>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic">
- <?=gettext("Phase 1 proposal (Authentication)"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Authentication method"); ?></td>
- <td width="78%" class="vtable">
- <select name="authentication_method" class="formselect" onchange="methodsel_change()">
- <?php
- foreach ($p1_authentication_methods as $method_type => $method_params):
- if (!$pconfig['mobile'] && $method_params['mobile']) {
- continue;
- }
- ?>
- <option value="<?=$method_type;?>" <?php if ($method_type == $pconfig['authentication_method']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($method_params['name']);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Must match the setting chosen on the remote side"); ?>.
- </span>
- </td>
- </tr>
- <tr id='negmode' >
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Negotiation mode"); ?></td>
- <td width="78%" class="vtable">
- <select name="mode" class="formselect">
- <?php
- $modes = array("main" => "Main", "aggressive" => "Aggressive");
- foreach ($modes as $mode => $mdescr):
- ?>
- <option value="<?=$mode;?>" <?php if ($mode == $pconfig['mode']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($mdescr);?>
- </option>
- <?php endforeach; ?>
- </select> <br /> <span class="vexpl"><?=gettext("Aggressive is more flexible, but less secure"); ?>.</span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("My identifier"); ?></td>
- <td width="78%" class="vtable">
- <select name="myid_type" class="formselect" onchange="myidsel_change()">
- <?php foreach ($my_identifier_list as $id_type => $id_params): ?>
- <option value="<?=$id_type;?>" <?php if ($id_type == $pconfig['myid_type']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($id_params['desc']);?>
- </option>
- <?php endforeach; ?>
- </select>
- <input name="myid_data" type="text" class="formfld unknown" id="myid_data" size="30" value="<?=htmlspecialchars($pconfig['myid_data']);?>" />
- </td>
- </tr>
- <tr id="opt_peerid">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Peer identifier"); ?></td>
- <td width="78%" class="vtable">
- <select name="peerid_type" class="formselect" onchange="peeridsel_change()">
- <?php
- foreach ($peer_identifier_list as $id_type => $id_params):
- if ($pconfig['mobile'] && !$id_params['mobile']) {
- continue;
- }
- ?>
- <option value="<?=$id_type;?>" <?php if ($id_type == $pconfig['peerid_type']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($id_params['desc']);?>
- </option>
- <?php endforeach; ?>
- </select>
- <input name="peerid_data" type="text" class="formfld unknown" id="peerid_data" size="30" value="<?=htmlspecialchars($pconfig['peerid_data']);?>" />
- <?php if ($pconfig['mobile']) { ?>
- <br /><br /><?=gettext("NOTE: This is known as the \"group\" setting on some VPN client implementations"); ?>.
- <?php } ?>
- </td>
- </tr>
- <tr id="opt_psk">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Pre-Shared Key"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?>
- <input name="pskey" type="text" class="formfld unknown" id="pskey" size="40" value="<?=htmlspecialchars($pconfig['pskey']);?>" />
- <span class="vexpl">
- <br />
- <?=gettext("Input your Pre-Shared Key string"); ?>.
- </span>
- </td>
- </tr>
- <tr id="opt_cert">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("My Certificate"); ?></td>
- <td width="78%" class="vtable">
- <select name="certref" class="formselect">
- <?php
- foreach ($config['cert'] as $cert):
- $selected = "";
- if ($pconfig['certref'] == $cert['refid']) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$cert['refid'];?>" <?=$selected;?>><?=htmlspecialchars($cert['descr']);?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Select a certificate previously configured in the Certificate Manager"); ?>.
- </span>
- </td>
- </tr>
- <tr id="opt_ca">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("My Certificate Authority"); ?></td>
- <td width="78%" class="vtable">
- <select name="caref" class="formselect">
- <?php
- foreach ($config['ca'] as $ca):
- $selected = "";
- if ($pconfig['caref'] == $ca['refid']) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$ca['refid'];?>" <?=$selected;?>><?=htmlspecialchars($ca['descr']);?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Select a certificate authority previously configured in the Certificate Manager"); ?>.
- </span>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic">
- <?=gettext("Phase 1 proposal (Algorithms)"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Encryption algorithm"); ?></td>
- <td width="78%" class="vtable">
- <select name="ealgo" class="formselect" onchange="ealgosel_change()">
- <?php
- foreach ($p1_ealgos as $algo => $algodata):
- $selected = "";
- if ($algo == $pconfig['ealgo']['name']) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$algo;?>"<?=$selected?>>
- <?=htmlspecialchars($algodata['name']);?>
- </option>
- <?php endforeach; ?>
- </select>
- <select name="ealgo_keylen" width="30" class="formselect">
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Hash algorithm"); ?></td>
- <td width="78%" class="vtable">
- <select name="halgo" class="formselect">
- <?php foreach ($p1_halgos as $algo => $algoname): ?>
- <option value="<?=$algo;?>" <?php if ($algo == $pconfig['halgo']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($algoname);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Must match the setting chosen on the remote side"); ?>.
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("DH key group"); ?></td>
- <td width="78%" class="vtable">
- <select name="dhgroup" class="formselect">
- <?php foreach ($p1_dhgroups as $keygroup => $keygroupname): ?>
- <option value="<?=$keygroup;?>" <?php if ($keygroup == $pconfig['dhgroup']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($keygroupname);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Must match the setting chosen on the remote side"); ?>.
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Lifetime"); ?></td>
- <td width="78%" class="vtable">
- <input name="lifetime" type="text" class="formfld unknown" id="lifetime" size="20" value="<?=htmlspecialchars($pconfig['lifetime']);?>" />
- <?=gettext("seconds"); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Advanced Options"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Disable Rekey");?></td>
- <td width="78%" class="vtable">
- <input name="rekey_enable" type="checkbox" id="rekey_enable" value="yes" <?php if (isset($pconfig['rekey_enable'])) echo "checked=\"checked\""; ?> />
- <?=gettext("Whether a connection should be renegotiated when it is about to expire."); ?><br />
- </td>
- </tr>
- <tr id='disablereauth'>
- <td width="22%" valign="top" class="vncell"><?=gettext("Disable Reauth");?></td>
- <td width="78%" class="vtable">
- <input name="reauth_enable" type="checkbox" id="reauth_enable" value="yes" <?php if (isset($pconfig['reauth_enable'])) echo "checked=\"checked\""; ?> />
- <?=gettext("Whether rekeying of an IKE_SA should also reauthenticate the peer. In IKEv1, reauthentication is always done."); ?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Responder Only");?></td>
- <td width="78%" class="vtable">
- <input name="responderonly" type="checkbox" id="responderonly" value="yes" <?php if (isset($pconfig['responderonly'])) echo "checked=\"checked\""; ?> />
- <?=gettext("Enable this option to never initiate this connection from this side, only respond to incoming requests."); ?><br />
- </td>
- </tr>
- <tr id='natt'>
- <td width="22%" valign="top" class="vncell"><?=gettext("NAT Traversal"); ?></td>
- <td width="78%" class="vtable">
- <select name="nat_traversal" class="formselect">
- <option value="on" <?php if ($pconfig['nat_traversal'] != 'on') echo "selected=\"selected\""; ?>><?=gettext("Auto"); ?></option>
- <option value="force" <?php if ($pconfig['nat_traversal'] == 'force') echo "selected=\"selected\""; ?>><?=gettext("Force"); ?></option>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Set this option to enable the use of NAT-T (i.e. the encapsulation of ESP in UDP packets) if needed, " .
- "which can help with clients that are behind restrictive firewalls"); ?>.
- </span>
- </td>
- </tr>
- <tr id='mobike'>
- <td width="22%" valign="top" class="vncell"><?=gettext("MOBIKE"); ?></td>
- <td width="78%" class="vtable">
- <select name="mobike" class="formselect">
- <option value="on" <?php if ($pconfig['mobike'] == 'on') echo "selected=\"selected\""; ?>><?=gettext("Enable"); ?></option>
- <option value="off" <?php if ($pconfig['mobike'] != 'on') echo "selected=\"selected\""; ?>><?=gettext("Disable"); ?></option>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("Set this option to control the use of MOBIKE"); ?>.
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Dead Peer Detection"); ?></td>
- <td width="78%" class="vtable">
- <input name="dpd_enable" type="checkbox" id="dpd_enable" value="yes" <?php if (isset($pconfig['dpd_enable'])) echo "checked=\"checked\""; ?> onclick="dpdchkbox_change()" />
- <?=gettext("Enable DPD"); ?><br />
- <div id="opt_dpd">
- <br />
- <input name="dpd_delay" type="text" class="formfld unknown" id="dpd_delay" size="5" value="<?=htmlspecialchars($pconfig['dpd_delay']);?>" />
- <?=gettext("seconds"); ?><br />
- <span class="vexpl">
- <?=gettext("Delay between requesting peer acknowledgement"); ?>.
- </span><br />
- <br />
- <input name="dpd_maxfail" type="text" class="formfld unknown" id="dpd_maxfail" size="5" value="<?=htmlspecialchars($pconfig['dpd_maxfail']);?>" />
- <?=gettext("retries"); ?><br />
- <span class="vexpl">
- <?=gettext("Number of consecutive failures allowed before disconnect"); ?>.
- </span>
- <br />
- </div>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <?php if (isset($p1index) && $a_phase1[$p1index]): ?>
- <input name="p1index" type="hidden" value="<?=htmlspecialchars($p1index);?>" />
- <?php endif; ?>
- <?php if ($pconfig['mobile']): ?>
- <input name="mobile" type="hidden" value="true" />
- <?php endif; ?>
- <input name="ikeid" type="hidden" value="<?=htmlspecialchars($pconfig['ikeid']);?>" />
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-
-<script type="text/javascript">
-//<![CDATA[
-<?php
- /* determine if we should init the key length */
- $keyset = '';
- if (isset($pconfig['ealgo']['keylen'])) {
- if (is_numeric($pconfig['ealgo']['keylen'])) {
- $keyset = $pconfig['ealgo']['keylen'];
- }
- }
-?>
-myidsel_change();
-peeridsel_change();
-iketype_change();
-methodsel_change();
-ealgosel_change(<?=$keyset;?>);
-dpdchkbox_change();
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/vpn_ipsec_phase2.php b/usr/local/www/vpn_ipsec_phase2.php
deleted file mode 100644
index f9a9805..0000000
--- a/usr/local/www/vpn_ipsec_phase2.php
+++ /dev/null
@@ -1,983 +0,0 @@
-<?php
-/*
- vpn_ipsec_phase2.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2008 Shrew Soft Inc
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-vpn-ipsec-editphase2
-##|*NAME=VPN: IPsec: Edit Phase 2 page
-##|*DESCR=Allow access to the 'VPN: IPsec: Edit Phase 2' page.
-##|*MATCH=vpn_ipsec_phase2.php*
-##|-PRIV
-
-require("functions.inc");
-require("guiconfig.inc");
-require_once("ipsec.inc");
-require_once("vpn.inc");
-
-if (!is_array($config['ipsec']['client'])) {
- $config['ipsec']['client'] = array();
-}
-
-$a_client = &$config['ipsec']['client'];
-
-if (!is_array($config['ipsec']['phase1'])) {
- $config['ipsec']['phase1'] = array();
-}
-
-if (!is_array($config['ipsec']['phase2'])) {
- $config['ipsec']['phase2'] = array();
-}
-
-$a_phase1 = &$config['ipsec']['phase1'];
-$a_phase2 = &$config['ipsec']['phase2'];
-
-if (!empty($_GET['p2index'])) {
- $uindex = $_GET['p2index'];
-}
-if (!empty($_POST['uniqid'])) {
- $uindex = $_POST['uniqid'];
-}
-
-if (!empty($_GET['dup'])) {
- $uindex = $_GET['dup'];
-}
-
-$ph2found = false;
-if (isset($uindex)) {
- foreach ($a_phase2 as $p2index => $ph2) {
- if ($ph2['uniqid'] == $uindex) {
- $ph2found = true;
- break;
- }
- }
-}
-
-if ($ph2found === true) {
- $pconfig['ikeid'] = $ph2['ikeid'];
- $pconfig['disabled'] = isset($ph2['disabled']);
- $pconfig['mode'] = $ph2['mode'];
- $pconfig['descr'] = $ph2['descr'];
- $pconfig['uniqid'] = $ph2['uniqid'];
-
- if (!empty($ph2['natlocalid'])) {
- idinfo_to_pconfig("natlocal", $ph2['natlocalid'], $pconfig);
- }
- idinfo_to_pconfig("local", $ph2['localid'], $pconfig);
- idinfo_to_pconfig("remote", $ph2['remoteid'], $pconfig);
-
- $pconfig['proto'] = $ph2['protocol'];
- ealgos_to_pconfig($ph2['encryption-algorithm-option'], $pconfig);
- $pconfig['halgos'] = $ph2['hash-algorithm-option'];
- $pconfig['pfsgroup'] = $ph2['pfsgroup'];
- $pconfig['lifetime'] = $ph2['lifetime'];
- $pconfig['pinghost'] = $ph2['pinghost'];
- $pconfig['reqid'] = $ph2['reqid'];
-
- if (isset($ph2['mobile'])) {
- $pconfig['mobile'] = true;
- }
-} else {
- $pconfig['ikeid'] = $_GET['ikeid'];
-
- /* defaults */
- $pconfig['localid_type'] = "lan";
- $pconfig['remoteid_type'] = "network";
- $pconfig['proto'] = "esp";
- $pconfig['ealgos'] = explode(",", "aes");
- $pconfig['halgos'] = explode(",", "hmac_sha1");
- $pconfig['pfsgroup'] = "0";
- $pconfig['lifetime'] = "3600";
- $pconfig['uniqid'] = uniqid();
-
- /* mobile client */
- if ($_GET['mobile']) {
- $pconfig['mobile']=true;
- }
-}
-
-unset($ph2);
-if (!empty($_GET['dup'])) {
- unset($uindex);
- unset($p2index);
- $pconfig['uniqid'] = uniqid();
- $pconfig['reqid'] = ipsec_new_reqid();
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- if (!isset($_POST['ikeid'])) {
- $input_errors[] = gettext("A valid ikeid must be specified.");
- }
-
- /* input validation */
- $reqdfields = explode(" ", "localid_type uniqid");
- $reqdfieldsn = array(gettext("Local network type"), gettext("Unique Identifier"));
- if (!isset($pconfig['mobile'])) {
- $reqdfields[] = "remoteid_type";
- $reqdfieldsn[] = gettext("Remote network type");
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (($pconfig['mode'] == "tunnel") || ($pconfig['mode'] == "tunnel6")) {
- switch ($pconfig['localid_type']) {
- case "network":
- if (($pconfig['localid_netbits'] != 0 && !$pconfig['localid_netbits']) || !is_numeric($pconfig['localid_netbits'])) {
- $input_errors[] = gettext("A valid local network bit count must be specified.");
- }
- case "address":
- if (!$pconfig['localid_address'] || !is_ipaddr($pconfig['localid_address'])) {
- $input_errors[] = gettext("A valid local network IP address must be specified.");
- } elseif (is_ipaddrv4($pconfig['localid_address']) && ($pconfig['mode'] != "tunnel")) {
- $input_errors[] = gettext("A valid local network IPv4 address must be specified or you need to change Mode to IPv6");
- } elseif (is_ipaddrv6($pconfig['localid_address']) && ($pconfig['mode'] != "tunnel6")) {
- $input_errors[] = gettext("A valid local network IPv6 address must be specified or you need to change Mode to IPv4");
- }
- break;
- }
- /* Check if the localid_type is an interface, to confirm if it has a valid subnet. */
- if (is_array($config['interfaces'][$pconfig['localid_type']])) {
- // Don't let an empty subnet into racoon.conf, it can cause parse errors. Ticket #2201.
- $address = get_interface_ip($pconfig['localid_type']);
- $netbits = get_interface_subnet($pconfig['localid_type']);
-
- if (empty($address) || empty($netbits)) {
- $input_errors[] = gettext("Invalid Local Network.") . " " . convert_friendly_interface_to_friendly_descr($pconfig['localid_type']) . " " . gettext("has no subnet.");
- }
- }
-
- if (!empty($pconfig['natlocalid_address'])) {
- switch ($pconfig['natlocalid_type']) {
- case "network":
- if (($pconfig['natlocalid_netbits'] != 0 && !$pconfig['natlocalid_netbits']) || !is_numeric($pconfig['natlocalid_netbits'])) {
- $input_errors[] = gettext("A valid NAT local network bit count must be specified.");
- }
- if ($pconfig['localid_type'] == "address") {
- $input_errors[] = gettext("You cannot configure a network type address for NAT while only an address type is selected for local source.");
- }
- case "address":
- if (!empty($pconfig['natlocalid_address']) && !is_ipaddr($pconfig['natlocalid_address'])) {
- $input_errors[] = gettext("A valid NAT local network IP address must be specified.");
- } elseif (is_ipaddrv4($pconfig['natlocalid_address']) && ($pconfig['mode'] != "tunnel")) {
- $input_errors[] = gettext("A valid NAT local network IPv4 address must be specified or you need to change Mode to IPv6");
- } elseif (is_ipaddrv6($pconfig['natlocalid_address']) && ($pconfig['mode'] != "tunnel6")) {
- $input_errors[] = gettext("A valid NAT local network IPv6 address must be specified or you need to change Mode to IPv4");
- }
- break;
- }
-
- if (is_array($config['interfaces'][$pconfig['natlocalid_type']])) {
- // Don't let an empty subnet into racoon.conf, it can cause parse errors. Ticket #2201.
- $address = get_interface_ip($pconfig['natlocalid_type']);
- $netbits = get_interface_subnet($pconfig['natlocalid_type']);
-
- if (empty($address) || empty($netbits)) {
- $input_errors[] = gettext("Invalid Local Network.") . " " . convert_friendly_interface_to_friendly_descr($pconfig['natlocalid_type']) . " " . gettext("has no subnet.");
- }
- }
- }
-
- switch ($pconfig['remoteid_type']) {
- case "network":
- if (($pconfig['remoteid_netbits'] != 0 && !$pconfig['remoteid_netbits']) || !is_numeric($pconfig['remoteid_netbits'])) {
- $input_errors[] = gettext("A valid remote network bit count must be specified.");
- }
- case "address":
- if (!$pconfig['remoteid_address'] || !is_ipaddr($pconfig['remoteid_address'])) {
- $input_errors[] = gettext("A valid remote network IP address must be specified.");
- } elseif (is_ipaddrv4($pconfig['remoteid_address']) && ($pconfig['mode'] != "tunnel")) {
- $input_errors[] = gettext("A valid remote network IPv4 address must be specified or you need to change Mode to IPv6");
- } elseif (is_ipaddrv6($pconfig['remoteid_address']) && ($pconfig['mode'] != "tunnel6")) {
- $input_errors[] = gettext("A valid remote network IPv6 address must be specified or you need to change Mode to IPv4");
- }
- break;
- }
- }
- /* Validate enabled phase2's are not duplicates */
- if (isset($pconfig['mobile'])) {
- /* User is adding phase 2 for mobile phase1 */
- foreach ($a_phase2 as $key => $name) {
- if (isset($name['mobile']) && $name['uniqid'] != $pconfig['uniqid']) {
- /* check duplicate localids only for mobile clents */
- $localid_data = ipsec_idinfo_to_cidr($name['localid'], false, $name['mode']);
- $entered = array();
- $entered['type'] = $pconfig['localid_type'];
- if (isset($pconfig['localid_address'])) $entered['address'] = $pconfig['localid_address'];
- if (isset($pconfig['localid_netbits'])) $entered['netbits'] = $pconfig['localid_netbits'];
- $entered_localid_data = ipsec_idinfo_to_cidr($entered, false, $pconfig['mode']);
- if ($localid_data == $entered_localid_data) {
- /* adding new p2 entry */
- $input_errors[] = gettext("Phase2 with this Local Network is already defined for mobile clients.");
- break;
- }
- }
- }
- } else {
- /* User is adding phase 2 for site-to-site phase1 */
- $input_error = 0;
- foreach ($a_phase2 as $key => $name) {
- if (!isset($name['mobile']) && $pconfig['ikeid'] == $name['ikeid'] && $pconfig['uniqid'] != $name['uniqid']) {
- /* check duplicate subnets only for given phase1 */
- $localid_data = ipsec_idinfo_to_cidr($name['localid'], false, $name['mode']);
- $remoteid_data = ipsec_idinfo_to_cidr($name['remoteid'], false, $name['mode']);
- $entered_local = array();
- $entered_local['type'] = $pconfig['localid_type'];
- if (isset($pconfig['localid_address'])) {
- $entered_local['address'] = $pconfig['localid_address'];
- }
- if (isset($pconfig['localid_netbits'])) {
- $entered_local['netbits'] = $pconfig['localid_netbits'];
- }
- $entered_localid_data = ipsec_idinfo_to_cidr($entered_local, false, $pconfig['mode']);
- $entered_remote = array();
- $entered_remote['type'] = $pconfig['remoteid_type'];
- if (isset($pconfig['remoteid_address'])) {
- $entered_remote['address'] = $pconfig['remoteid_address'];
- }
- if (isset($pconfig['remoteid_netbits'])) {
- $entered_remote['netbits'] = $pconfig['remoteid_netbits'];
- }
- $entered_remoteid_data = ipsec_idinfo_to_cidr($entered_remote, false, $pconfig['mode']);
- if ($localid_data == $entered_localid_data && $remoteid_data == $entered_remoteid_data) {
- /* adding new p2 entry */
- $input_errors[] = gettext("Phase2 with this Local/Remote networks combination is already defined for this Phase1.");
- break;
- }
- }
- }
- foreach ($a_phase1 as $phase1) {
- if ($phase1['ikeid'] == $pconfig['ikeid']) {
- /* This is the P1 for this entry, validate its remote-gateway and local interface isn't within tunnel */
- $entered_local = array();
- $entered_local['type'] = $pconfig['localid_type'];
- if (isset($pconfig['localid_address'])) {
- $entered_local['address'] = $pconfig['localid_address'];
- }
- if (isset($pconfig['localid_netbits'])) {
- $entered_local['netbits'] = $pconfig['localid_netbits'];
- }
- $entered_localid_data = ipsec_idinfo_to_cidr($entered_local, false, $pconfig['mode']);
- list($entered_local_network, $entered_local_mask) = explode('/', $entered_localid_data);
- $entered_remote = array();
- $entered_remote['type'] = $pconfig['remoteid_type'];
- if (isset($pconfig['remoteid_address'])) {
- $entered_remote['address'] = $pconfig['remoteid_address'];
- }
- if (isset($pconfig['remoteid_netbits'])) {
- $entered_remote['netbits'] = $pconfig['remoteid_netbits'];
- }
- $entered_remoteid_data = ipsec_idinfo_to_cidr($entered_remote, false, $pconfig['mode']);
- list($entered_remote_network, $entered_remote_mask) = explode('/', $entered_remoteid_data);
- if ($phase1['protocol'] == "inet6") {
- $if = get_failover_interface($phase1['interface'], "inet6");
- $interfaceip = get_interface_ipv6($if);
- } else {
- $if = get_failover_interface($phase1['interface']);
- $interfaceip = get_interface_ip($if);
- }
- /* skip validation for hostnames, they're subject to change anyway */
- if (is_ipaddr($phase1['remote-gateway'])) {
- if ($pconfig['mode'] == "tunnel") {
- if (check_subnets_overlap($interfaceip, 32, $entered_local_network, $entered_local_mask) && check_subnets_overlap($phase1['remote-gateway'], 32, $entered_remote_network, $entered_remote_mask)) {
- $input_errors[] = gettext("The local and remote networks of a phase 2 entry cannot overlap the outside of the tunnel (interface and remote gateway) configured in its phase 1.");
- break;
- }
- } else if ($pconfig['mode'] == "tunnel6") {
- if (check_subnetsv6_overlap($interfaceip, 128, $entered_local_network, $entered_local_mask) && check_subnets_overlap($phase1['remote-gateway'], 128, $entered_remote_network, $entered_remote_mask)) {
- $input_errors[] = gettext("The local and remote networks of a phase 2 entry cannot overlap the outside of the tunnel (interface and remote gateway) configured in its phase 1.");
- break;
- }
- }
- }
- }
- }
- }
-
- /* For ESP protocol, handle encryption algorithms */
- if ($pconfig['proto'] == "esp") {
- $ealgos = pconfig_to_ealgos($pconfig);
-
- if (!count($ealgos)) {
- $input_errors[] = gettext("At least one encryption algorithm must be selected.");
- } else {
- foreach ($ealgos as $ealgo) {
- if (isset($config['system']['crypto_hardware'])) {
- if ($config['system']['crypto_hardware'] == "glxsb") {
- if ($ealgo['name'] == "aes" && $ealgo['keylen'] != "128") {
- $input_errors[] = gettext("Only 128 bit AES can be used where the glxsb crypto accelerator is enabled.");
- }
- }
- }
- if (empty($pconfig['halgos'])) {
- if (!strpos($ealgo['name'], "gcm")) {
- $input_errors[] = gettext("At least one hashing algorithm needs to be selected.");
- break;
- }
- }
- }
- }
- }
- if (($_POST['lifetime'] && !is_numeric($_POST['lifetime']))) {
- $input_errors[] = gettext("The P2 lifetime must be an integer.");
- }
-
- if (!$input_errors) {
-
- $ph2ent = array();
- $ph2ent['ikeid'] = $pconfig['ikeid'];
- $ph2ent['uniqid'] = $pconfig['uniqid'];
- $ph2ent['mode'] = $pconfig['mode'];
- $ph2ent['disabled'] = $pconfig['disabled'] ? true : false;
- if (!isset($pconfig['reqid'])) {
- $ph2ent['reqid'] = ipsec_new_reqid();
- } else {
- $ph2ent['reqid'] = $pconfig['reqid'];
- }
-
- if (($ph2ent['mode'] == "tunnel") || ($ph2ent['mode'] == "tunnel6")) {
- if (!empty($pconfig['natlocalid_address'])) {
- $ph2ent['natlocalid'] = pconfig_to_idinfo("natlocal", $pconfig);
- }
- $ph2ent['localid'] = pconfig_to_idinfo("local", $pconfig);
- $ph2ent['remoteid'] = pconfig_to_idinfo("remote", $pconfig);
- }
-
- $ph2ent['protocol'] = $pconfig['proto'];
- $ph2ent['encryption-algorithm-option'] = $ealgos;
- if (!empty($pconfig['halgos'])) {
- $ph2ent['hash-algorithm-option'] = $pconfig['halgos'];
- } else {
- unset($ph2ent['hash-algorithm-option']);
- }
- $ph2ent['pfsgroup'] = $pconfig['pfsgroup'];
- $ph2ent['lifetime'] = $pconfig['lifetime'];
- $ph2ent['pinghost'] = $pconfig['pinghost'];
- $ph2ent['descr'] = $pconfig['descr'];
-
- if (isset($pconfig['mobile'])) {
- $ph2ent['mobile'] = true;
- }
-
- if ($ph2found === true && $a_phase2[$p2index]) {
- $a_phase2[$p2index] = $ph2ent;
- } else {
- $a_phase2[] = $ph2ent;
- }
-
- write_config();
- mark_subsystem_dirty('ipsec');
-
- header("Location: vpn_ipsec.php");
- exit;
- }
-}
-
-if ($pconfig['mobile']) {
- $pgtitle = array(gettext("VPN"), gettext("IPsec"), gettext("Edit Phase 2"), gettext("Mobile Client"));
-} else {
- $pgtitle = array(gettext("VPN"), gettext("IPsec"), gettext("Edit Phase 2"));
-}
-$shortcut_section = "ipsec";
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
-<script type="text/javascript">
-//<![CDATA[
-
-function change_mode() {
- index = document.iform.mode.selectedIndex;
- value = document.iform.mode.options[index].value;
- if ((value == 'tunnel') || (value == 'tunnel6')) {
- document.getElementById('opt_localid').style.display = '';
-<?php if (!isset($pconfig['mobile'])): ?>
- document.getElementById('opt_remoteid').style.display = '';
-<?php endif; ?>
- } else {
- document.getElementById('opt_localid').style.display = 'none';
-<?php if (!isset($pconfig['mobile'])): ?>
- document.getElementById('opt_remoteid').style.display = 'none';
-<?php endif; ?>
- }
-}
-
-function typesel_change_natlocal(bits) {
- var value = document.iform.mode.options[index].value;
- if (typeof(bits) === "undefined") {
- if (value === "tunnel") {
- bits = 24;
- } else if (value === "tunnel6") {
- bits = 64;
- }
- }
- var address_is_blank = !/\S/.test(document.iform.natlocalid_address.value);
- switch (document.iform.natlocalid_type.selectedIndex) {
- case 0: /* single */
- document.iform.natlocalid_address.disabled = 0;
- if (address_is_blank) {
- document.iform.natlocalid_netbits.value = 0;
- }
- document.iform.natlocalid_netbits.disabled = 1;
- break;
- case 1: /* network */
- document.iform.natlocalid_address.disabled = 0;
- if (address_is_blank) {
- document.iform.natlocalid_netbits.value = bits;
- }
- document.iform.natlocalid_netbits.disabled = 0;
- break;
- case 3: /* none */
- document.iform.natlocalid_address.disabled = 1;
- document.iform.natlocalid_netbits.disabled = 1;
- break;
- default:
- document.iform.natlocalid_address.value = "";
- document.iform.natlocalid_address.disabled = 1;
- if (address_is_blank) {
- document.iform.natlocalid_netbits.value = 0;
- }
- document.iform.natlocalid_netbits.disabled = 1;
- break;
- }
-}
-
-function typesel_change_local(bits) {
- var value = document.iform.mode.options[index].value;
- if (typeof(bits) === "undefined") {
- if (value === "tunnel") {
- bits = 24;
- } else if (value === "tunnel6") {
- bits = 64;
- }
- }
- var address_is_blank = !/\S/.test(document.iform.localid_address.value);
- switch (document.iform.localid_type.selectedIndex) {
- case 0: /* single */
- document.iform.localid_address.disabled = 0;
- if (address_is_blank) {
- document.iform.localid_netbits.value = 0;
- }
- document.iform.localid_netbits.disabled = 1;
- break;
- case 1: /* network */
- document.iform.localid_address.disabled = 0;
- if (address_is_blank) {
- document.iform.localid_netbits.value = bits;
- }
- document.iform.localid_netbits.disabled = 0;
- break;
- case 3: /* none */
- document.iform.localid_address.disabled = 1;
- document.iform.localid_netbits.disabled = 1;
- break;
- default:
- document.iform.localid_address.value = "";
- document.iform.localid_address.disabled = 1;
- if (address_is_blank) {
- document.iform.localid_netbits.value = 0;
- }
- document.iform.localid_netbits.disabled = 1;
- break;
- }
-}
-
-<?php if (!isset($pconfig['mobile'])): ?>
-
-function typesel_change_remote(bits) {
- var value = document.iform.mode.options[index].value;
- if (typeof(bits) === "undefined") {
- if (value === "tunnel") {
- bits = 24;
- }
- else if (value === "tunnel6") {
- bits = 64;
- }
- }
- var address_is_blank = !/\S/.test(document.iform.remoteid_address.value);
- switch (document.iform.remoteid_type.selectedIndex) {
- case 0: /* single */
- document.iform.remoteid_address.disabled = 0;
- if (address_is_blank) {
- document.iform.remoteid_netbits.value = 0;
- }
- document.iform.remoteid_netbits.disabled = 1;
- break;
- case 1: /* network */
- document.iform.remoteid_address.disabled = 0;
- if (address_is_blank) {
- document.iform.remoteid_netbits.value = bits;
- }
- document.iform.remoteid_netbits.disabled = 0;
- break;
- default:
- document.iform.remoteid_address.value = "";
- document.iform.remoteid_address.disabled = 1;
- if (address_is_blank) {
- document.iform.remoteid_netbits.value = 0;
- }
- document.iform.remoteid_netbits.disabled = 1;
- break;
- }
-}
-
-<?php endif; ?>
-
-function change_protocol() {
- index = document.iform.proto.selectedIndex;
- value = document.iform.proto.options[index].value;
- if (value == 'esp')
- document.getElementById('opt_enc').style.display = '';
- else
- document.getElementById('opt_enc').style.display = 'none';
-}
-
-//]]>
-</script>
-
-<form action="vpn_ipsec_phase2.php" method="post" name="iform" id="iform">
-
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
-?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn ipsec phase-2">
- <tr class="tabnavtbl">
- <td id="tabnav">
- <?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Tunnels"), true, "vpn_ipsec.php");
- $tab_array[1] = array(gettext("Mobile clients"), false, "vpn_ipsec_mobile.php");
- $tab_array[2] = array(gettext("Pre-Shared Keys"), false, "vpn_ipsec_keys.php");
- $tab_array[3] = array(gettext("Advanced Settings"), false, "vpn_ipsec_settings.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
- <td width="78%" class="vtable">
- <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable this phase2 entry"); ?></strong>
- <br />
- <span class="vexpl">
- <?=gettext("Set this option to disable this phase2 entry without removing it from the list"); ?>.
- </span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Mode"); ?></td>
- <td width="78%" class="vtable">
- <select name="mode" class="formselect" onchange="change_mode()">
- <?php
- foreach ($p2_modes as $name => $value):
- $selected = "";
- if ($name == $pconfig['mode']) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$name;?>" <?=$selected;?>><?=$value;?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr id="opt_localid">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Local Network"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="0" summary="local network">
- <tr>
- <td><?=gettext("Type"); ?>:&nbsp;&nbsp;</td>
- <td></td>
- <td>
- <select name="localid_type" class="formselect" onchange="typesel_change_local()">
- <option value="address" <?php if ($pconfig['localid_type'] == "address") echo "selected=\"selected\"";?>><?=gettext("Address"); ?></option>
- <option value="network" <?php if ($pconfig['localid_type'] == "network") echo "selected=\"selected\"";?>><?=gettext("Network"); ?></option>
- <?php
- $iflist = get_configured_interface_with_descr();
- foreach ($iflist as $ifname => $ifdescr):
- ?>
- <option value="<?=$ifname; ?>" <?php if ($pconfig['localid_type'] == $ifname) echo "selected=\"selected\"";?>><?=sprintf(gettext("%s subnet"), $ifdescr); ?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
- <td><?=$mandfldhtmlspc;?></td>
- <td>
- <input name="localid_address" type="text" class="formfld unknown ipv4v6" id="localid_address" size="28" value="<?=htmlspecialchars($pconfig['localid_address']);?>" />
- /
- <select name="localid_netbits" class="formselect ipv4v6" id="localid_netbits">
- <?php for ($i = 128; $i >= 0; $i--): ?>
- <option value="<?=$i;?>" <?php if (isset($pconfig['localid_netbits']) && $i == $pconfig['localid_netbits']) echo "selected=\"selected\""; ?>>
- <?=$i;?>
- </option>
- <?php endfor; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td colspan="3">
- <br />
- <?php echo gettext("In case you need NAT/BINAT on this network specify the address to be translated"); ?>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Type"); ?>:&nbsp;&nbsp;</td>
- <td></td>
- <td>
- <select name="natlocalid_type" class="formselect" onchange="typesel_change_natlocal()">
- <option value="address" <?php if ($pconfig['natlocalid_type'] == "address") echo "selected=\"selected\"";?>><?=gettext("Address"); ?></option>
- <option value="network" <?php if ($pconfig['natlocalid_type'] == "network") echo "selected=\"selected\"";?>><?=gettext("Network"); ?></option>
- <?php
- $iflist = get_configured_interface_with_descr();
- foreach ($iflist as $ifname => $ifdescr):
- ?>
- <option value="<?=$ifname; ?>" <?php if ($pconfig['natlocalid_type'] == $ifname) echo "selected=\"selected\"";?>><?=sprintf(gettext("%s subnet"), $ifdescr); ?></option>
- <?php endforeach; ?>
- <option value="none" <?php if (empty($pconfig['natlocalid_type']) || $pconfig['natlocalid_type'] == "none") echo "selected=\"selected\"";?>><?=gettext("None"); ?></option>
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
- <td><?=$mandfldhtmlspc;?></td>
- <td>
- <input name="natlocalid_address" type="text" class="formfld unknown ipv4v6" id="natlocalid_address" size="28" value="<?=htmlspecialchars($pconfig['natlocalid_address']);?>" />
- /
- <select name="natlocalid_netbits" class="formselect ipv4v6" id="natlocalid_netbits">
- <?php for ($i = 128; $i >= 0; $i--): ?>
- <option value="<?=$i;?>" <?php if (isset($pconfig['natlocalid_netbits']) && $i == $pconfig['natlocalid_netbits']) echo "selected=\"selected\""; ?>>
- <?=$i;?>
- </option>
- <?php endfor; ?>
- </select>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
- <?php if (!isset($pconfig['mobile'])): ?>
-
- <tr id="opt_remoteid">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Remote Network"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="0" summary="remote network">
- <tr>
- <td><?=gettext("Type"); ?>:&nbsp;&nbsp;</td>
- <td></td>
- <td>
- <select name="remoteid_type" class="formselect" onchange="typesel_change_remote()">
- <option value="address" <?php if ($pconfig['remoteid_type'] == "address") echo "selected=\"selected\""; ?>><?=gettext("Address"); ?></option>
- <option value="network" <?php if ($pconfig['remoteid_type'] == "network") echo "selected=\"selected\""; ?>><?=gettext("Network"); ?></option>
- </select>
- </td>
- </tr>
- <tr>
- <td><?=gettext("Address"); ?>:&nbsp;&nbsp;</td>
- <td><?=$mandfldhtmlspc;?></td>
- <td>
- <input name="remoteid_address" type="text" class="formfld unknown ipv4v6" id="remoteid_address" size="28" value="<?=htmlspecialchars($pconfig['remoteid_address']);?>" />
- /
- <select name="remoteid_netbits" class="formselect ipv4v6" id="remoteid_netbits">
- <?php for ($i = 128; $i >= 0; $i--) {
-
- echo "<option value=\"{$i}\"";
- if (isset($pconfig['remoteid_netbits']) && $i == $pconfig['remoteid_netbits']) echo " selected=\"selected\"";
- echo ">{$i}</option>\n";
- } ?>
- </select>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
- <?php endif; ?>
-
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- <span class="vexpl">
- <?=gettext("You may enter a description here for your reference (not parsed)"); ?>.
- </span>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic">
- <?=gettext("Phase 2 proposal (SA/Key Exchange)"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol"); ?></td>
- <td width="78%" class="vtable">
- <select name="proto" class="formselect" onchange="change_protocol()">
- <?php foreach ($p2_protos as $proto => $protoname): ?>
- <option value="<?=$proto;?>" <?php if ($proto == $pconfig['proto']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($protoname);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br />
- <span class="vexpl">
- <?=gettext("ESP is encryption, AH is authentication only"); ?>
- </span>
- </td>
- </tr>
- <tr id="opt_enc">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Encryption algorithms"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellspacing="0" cellpadding="0" summary="encryption">
- <?php
- foreach ($p2_ealgos as $algo => $algodata):
- $checked = '';
- if (is_array($pconfig['ealgos']) && in_array($algo, $pconfig['ealgos'])) {
- $checked = " checked=\"checked\"";
- }
- ?>
- <tr>
- <td>
- <input type="checkbox" name="ealgos[]" value="<?=$algo;?>"<?=$checked?> />
- </td>
- <td>
- <?=htmlspecialchars($algodata['name']);?>
- </td>
- <td>
- <?php if (is_array($algodata['keysel'])): ?>
- &nbsp;&nbsp;
- <select name="keylen_<?=$algo;?>" class="formselect">
- <option value="auto"><?=gettext("auto"); ?></option>
- <?php
- $key_hi = $algodata['keysel']['hi'];
- $key_lo = $algodata['keysel']['lo'];
- $key_step = $algodata['keysel']['step'];
- for ($keylen = $key_hi; $keylen >= $key_lo; $keylen -= $key_step):
- $selected = "";
- // if ($checked && in_array("keylen_".$algo, $pconfig))
- if ($keylen == $pconfig["keylen_".$algo]) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$keylen;?>"<?=$selected;?>><?=$keylen;?> <?=gettext("bits"); ?></option>
- <?php endfor; ?>
- </select>
- <?php endif; ?>
- </td>
- </tr>
-
- <?php endforeach; ?>
-
- </table>
- <br />
- <?=gettext("Hint: use 3DES for best compatibility or if you have a hardware " .
- "crypto accelerator card. Blowfish is usually the fastest in " .
- "software encryption"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Hash algorithms"); ?></td>
- <td width="78%" class="vtable">
- <?php foreach ($p2_halgos as $algo => $algoname): ?>
- <input type="checkbox" name="halgos[]" value="<?=$algo;?>" <?php if (in_array($algo, $pconfig['halgos'])) echo "checked=\"checked\""; ?> />
- <?=htmlspecialchars($algoname);?>
- <br />
- <?php endforeach; ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("PFS key group"); ?></td>
- <td width="78%" class="vtable">
- <?php if (!isset($pconfig['mobile']) || !isset($a_client['pfs_group'])): ?>
- <select name="pfsgroup" class="formselect">
- <?php foreach ($p2_pfskeygroups as $keygroup => $keygroupname): ?>
- <option value="<?=$keygroup;?>" <?php if ($keygroup == $pconfig['pfsgroup']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($keygroupname);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br />
- <?php else: ?>
-
- <select class="formselect" disabled="disabled">
- <option selected="selected"><?=$p2_pfskeygroups[$a_client['pfs_group']];?></option>
- </select>
- <input name="pfsgroup" type="hidden" value="<?=htmlspecialchars($pconfig['pfsgroup']);?>" />
- <br />
- <span class="vexpl"><em><?=gettext("Set globally in mobile client options"); ?></em></span>
- <?php endif; ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Lifetime"); ?></td>
- <td width="78%" class="vtable">
- <input name="lifetime" type="text" class="formfld unknown" id="lifetime" size="20" value="<?=htmlspecialchars($pconfig['lifetime']);?>" />
- <?=gettext("seconds"); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Advanced Options"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Automatically ping host"); ?></td>
- <td width="78%" class="vtable">
- <input name="pinghost" type="text" class="formfld unknown" id="pinghost" size="28" value="<?=htmlspecialchars($pconfig['pinghost']);?>" />
- <?=gettext("IP address"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <?php if ($pconfig['mobile']): ?>
- <input name="mobile" type="hidden" value="true" />
- <input name="remoteid_type" type="hidden" value="mobile" />
- <?php endif; ?>
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input name="ikeid" type="hidden" value="<?=htmlspecialchars($pconfig['ikeid']);?>" />
- <?php if (!empty($pconfig['reqid'])): ?>
- <input name="reqid" type="hidden" value="<?=htmlspecialchars($pconfig['reqid']);?>" />
- <?php endif; ?>
- <input name="uniqid" type="hidden" value="<?=htmlspecialchars($pconfig['uniqid']);?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
-change_mode('<?=htmlspecialchars($pconfig['mode'])?>');
-change_protocol('<?=htmlspecialchars($pconfig['proto'])?>');
-typesel_change_local(<?=htmlspecialchars($pconfig['localid_netbits'])?>);
-typesel_change_natlocal(<?=htmlspecialchars($pconfig['natlocalid_netbits'])?>);
-<?php if (!isset($pconfig['mobile'])): ?>
-typesel_change_remote(<?=htmlspecialchars($pconfig['remoteid_netbits'])?>);
-<?php endif; ?>
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
-
-<?php
-
-/* local utility functions */
-
-function pconfig_to_ealgos(& $pconfig) {
- global $p2_ealgos;
-
- $ealgos = array();
- if (is_array($pconfig['ealgos'])) {
- foreach ($p2_ealgos as $algo_name => $algo_data) {
- if (in_array($algo_name, $pconfig['ealgos'])) {
- $ealg = array();
- $ealg['name'] = $algo_name;
- if (is_array($algo_data['keysel'])) {
- $ealg['keylen'] = $_POST["keylen_".$algo_name];
- }
- $ealgos[] = $ealg;
- }
- }
- }
-
- return $ealgos;
-}
-
-function ealgos_to_pconfig(& $ealgos,& $pconfig) {
-
- $pconfig['ealgos'] = array();
- foreach ($ealgos as $algo_data) {
- $pconfig['ealgos'][] = $algo_data['name'];
- if (isset($algo_data['keylen'])) {
- $pconfig["keylen_".$algo_data['name']] = $algo_data['keylen'];
- }
- }
-
- return $ealgos;
-}
-
-function pconfig_to_idinfo($prefix,& $pconfig) {
-
- $type = $pconfig[$prefix."id_type"];
- $address = $pconfig[$prefix."id_address"];
- $netbits = $pconfig[$prefix."id_netbits"];
-
- switch ($type) {
- case "address":
- return array('type' => $type, 'address' => $address);
- case "network":
- return array('type' => $type, 'address' => $address, 'netbits' => $netbits);
- default:
- return array('type' => $type);
- }
-}
-
-function idinfo_to_pconfig($prefix,& $idinfo,& $pconfig) {
-
- switch ($idinfo['type']) {
- case "address":
- $pconfig[$prefix."id_type"] = $idinfo['type'];
- $pconfig[$prefix."id_address"] = $idinfo['address'];
- break;
- case "network":
- $pconfig[$prefix."id_type"] = $idinfo['type'];
- $pconfig[$prefix."id_address"] = $idinfo['address'];
- $pconfig[$prefix."id_netbits"] = $idinfo['netbits'];
- break;
- default:
- $pconfig[$prefix."id_type"] = $idinfo['type'];
- break;
- }
-}
-
-?>
diff --git a/usr/local/www/vpn_ipsec_settings.php b/usr/local/www/vpn_ipsec_settings.php
deleted file mode 100644
index ac3fde9..0000000
--- a/usr/local/www/vpn_ipsec_settings.php
+++ /dev/null
@@ -1,445 +0,0 @@
-<?php
-/*
- vpn_ipsec_settings.php
-
- Copyright (C) 2015 Electric Sheep Fencing, LLC
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-vpn-ipsec-settings
-##|*NAME=VPN: IPsec: Settings page
-##|*DESCR=Allow access to the 'VPN: IPsec: Settings' page.
-##|*MATCH=vpn_ipsec_settings.php*
-##|-PRIV
-
-require("functions.inc");
-require("guiconfig.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("ipsec.inc");
-require_once("vpn.inc");
-
-foreach ($ipsec_loglevels as $lkey => $ldescr) {
- if (!empty($config['ipsec']["ipsec_{$lkey}"])) {
- $pconfig["ipsec_{$lkey}"] = $config['ipsec']["ipsec_{$lkey}"];
- }
-}
-$pconfig['unityplugin'] = isset($config['ipsec']['unityplugin']);
-$pconfig['strictcrlpolicy'] = isset($config['ipsec']['strictcrlpolicy']);
-$pconfig['makebeforebreak'] = isset($config['ipsec']['makebeforebreak']);
-$pconfig['noshuntlaninterfaces'] = isset($config['ipsec']['noshuntlaninterfaces']);
-$pconfig['compression'] = isset($config['ipsec']['compression']);
-$pconfig['enableinterfacesuse'] = isset($config['ipsec']['enableinterfacesuse']);
-$pconfig['acceptunencryptedmainmode'] = isset($config['ipsec']['acceptunencryptedmainmode']);
-$pconfig['maxmss_enable'] = isset($config['system']['maxmss_enable']);
-$pconfig['maxmss'] = $config['system']['maxmss'];
-$pconfig['uniqueids'] = $config['ipsec']['uniqueids'];
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- if (!in_array($pconfig['ipsec_dmn'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for Daemon debug.";
- }
- if (!in_array($pconfig['ipsec_mgr'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for SA Manager debug.";
- }
- if (!in_array($pconfig['ipsec_ike'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for IKE SA debug.";
- }
- if (!in_array($pconfig['ipsec_chd'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for IKE Child SA debug.";
- }
- if (!in_array($pconfig['ipsec_job'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for Job Processing debug.";
- }
- if (!in_array($pconfig['ipsec_cfg'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for Configuration backend debug.";
- }
- if (!in_array($pconfig['ipsec_knl'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for Kernel Interface debug.";
- }
- if (!in_array($pconfig['ipsec_net'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for Networking debug.";
- }
- if (!in_array($pconfig['ipsec_asn'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for ASN Encoding debug.";
- }
- if (!in_array($pconfig['ipsec_enc'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for Message encoding debug.";
- }
- if (!in_array($pconfig['ipsec_imc'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for Integrity checker debug.";
- }
- if (!in_array($pconfig['ipsec_imv'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for Integrity Verifier debug.";
- }
- if (!in_array($pconfig['ipsec_pts'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for Platform Trust Service debug.";
- }
- if (!in_array($pconfig['ipsec_tls'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for TLS Handler debug.";
- }
- if (!in_array($pconfig['ipsec_esp'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for IPsec Traffic debug.";
- }
- if (!in_array($pconfig['ipsec_lib'], array('0', '1', '2', '3', '4', '5'), true)) {
- $input_errors[] = "A valid value must be specified for StrongSwan Lib debug.";
- }
- if (isset($pconfig['maxmss'])) {
- if (!is_numericint($pconfig['maxmss']) && $pconfig['maxmss'] <> '') {
- $input_errors[] = "An integer must be specified for Maximum MSS.";
- }
- if ($pconfig['maxmss'] <> '' && $pconfig['maxmss'] < 576 || $pconfig['maxmss'] > 65535) {
- $input_errors[] = "An integer between 576 and 65535 must be specified for Maximum MSS";
- }
- }
-
- if (!$input_errors) {
-
- foreach ($ipsec_loglevels as $lkey => $ldescr) {
- if (empty($_POST["ipsec_{$lkey}"])) {
- if (isset($config['ipsec']["ipsec_{$lkey}"])) {
- unset($config['ipsec']["ipsec_{$lkey}"]);
- }
- } else {
- $config['ipsec']["ipsec_{$lkey}"] = $_POST["ipsec_{$lkey}"];
- }
- }
-
- $needsrestart = false;
-
- if ($_POST['compression'] == "yes") {
- if (!isset($config['ipsec']['compression'])) {
- $needsrestart = true;
- }
- $config['ipsec']['compression'] = true;
- } elseif (isset($config['ipsec']['compression'])) {
- $needsrestart = true;
- unset($config['ipsec']['compression']);
- }
-
- if ($_POST['enableinterfacesuse'] == "yes") {
- if (!isset($config['ipsec']['enableinterfacesuse'])) {
- $needsrestart = true;
- }
- $config['ipsec']['enableinterfacesuse'] = true;
- } elseif (isset($config['ipsec']['enableinterfacesuse'])) {
- $needsrestart = true;
- unset($config['ipsec']['enableinterfacesuse']);
- }
-
- if ($_POST['unityplugin'] == "yes") {
- if (!isset($config['ipsec']['unityplugin'])) {
- $needsrestart = true;
- }
- $config['ipsec']['unityplugin'] = true;
- } elseif (isset($config['ipsec']['unityplugin'])) {
- $needsrestart = true;
- unset($config['ipsec']['unityplugin']);
- }
-
- if ($_POST['strictcrlpolicy'] == "yes") {
- $config['ipsec']['strictcrlpolicy'] = true;
- } elseif (isset($config['ipsec']['strictcrlpolicy'])) {
- unset($config['ipsec']['strictcrlpolicy']);
- }
-
- if ($_POST['makebeforebreak'] == "yes") {
- $config['ipsec']['makebeforebreak'] = true;
- } elseif (isset($config['ipsec']['makebeforebreak'])) {
- unset($config['ipsec']['makebeforebreak']);
- }
-
- if ($_POST['noshuntlaninterfaces'] == "yes") {
- if (isset($config['ipsec']['noshuntlaninterfaces'])) {
- unset($config['ipsec']['noshuntlaninterfaces']);
- }
- } else {
- $config['ipsec']['noshuntlaninterfaces'] = true;
- }
-
- if ($_POST['acceptunencryptedmainmode'] == "yes") {
- if (!isset($config['ipsec']['acceptunencryptedmainmode'])) {
- $needsrestart = true;
- }
- $config['ipsec']['acceptunencryptedmainmode'] = true;
- } elseif (isset($config['ipsec']['acceptunencryptedmainmode'])) {
- $needsrestart = true;
- unset($config['ipsec']['acceptunencryptedmainmode']);
- }
-
- if (!empty($_POST['uniqueids'])) {
- $config['ipsec']['uniqueids'] = $_POST['uniqueids'];
- } else if (isset($config['ipsec']['uniqueids'])) {
- unset($config['ipsec']['uniqueids']);
- }
-
- if ($_POST['maxmss_enable'] == "yes") {
- $config['system']['maxmss_enable'] = true;
- $config['system']['maxmss'] = $_POST['maxmss'];
- } else {
- if (isset($config['system']['maxmss_enable'])) {
- unset($config['system']['maxmss_enable']);
- }
- if (isset($config['system']['maxmss'])) {
- unset($config['system']['maxmss']);
- }
- }
-
- write_config();
-
- $retval = 0;
- $retval = filter_configure();
- if (stristr($retval, "error") <> true) {
- $savemsg = get_std_save_message(gettext($retval));
- } else {
- $savemsg = gettext($retval);
- }
-
- vpn_ipsec_configure($needsrestart);
- vpn_ipsec_configure_loglevels();
-
- header("Location: vpn_ipsec_settings.php");
- return;
- }
-
- // The logic value sent by $POST is opposite to the way it is stored in the config.
- // Reset the $pconfig value so it reflects the opposite of what was $POSTed.
- if ($_POST['noshuntlaninterfaces'] == "yes") {
- $pconfig['noshuntlaninterfaces'] = false;
- } else {
- $pconfig['noshuntlaninterfaces'] = true;
- }
-}
-
-$pgtitle = array(gettext("VPN"), gettext("IPsec"), gettext("Settings"));
-$shortcut_section = "ipsec";
-
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
-
-function maxmss_checked(obj) {
- if (obj.checked) {
- jQuery('#maxmss').attr('disabled', false);
- } else {
- jQuery('#maxmss').attr('disabled', 'true');
- }
-}
-
-//]]>
-</script>
-
-<form action="vpn_ipsec_settings.php" method="post" name="iform" id="iform">
-
-<?php
- if ($savemsg) {
- print_info_box($savemsg);
- }
- if ($input_errors) {
- print_input_errors($input_errors);
- }
-?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn ipsec settings">
- <tr>
- <td class="tabnavtbl">
- <?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Tunnels"), false, "vpn_ipsec.php");
- $tab_array[1] = array(gettext("Mobile clients"), false, "vpn_ipsec_mobile.php");
- $tab_array[2] = array(gettext("Pre-Shared Key"), false, "vpn_ipsec_keys.php");
- $tab_array[3] = array(gettext("Advanced Settings"), true, "vpn_ipsec_settings.php");
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td id="mainarea">
- <div class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("IPsec Advanced Settings"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IPsec Debug"); ?></td>
- <td width="78%" class="vtable">
- <strong><?=gettext("Start IPsec in debug mode based on sections selected"); ?></strong>
- <br />
- <table summary="ipsec debug">
- <?php foreach ($ipsec_loglevels as $lkey => $ldescr): ?>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=$ldescr;?></td>
- <td width="78%" valign="top" class="vncell">
- <?php
- echo "<select name=\"ipsec_{$lkey}\" id=\"ipsec_{$lkey}\">\n";
- foreach (array("Silent", "Audit", "Control", "Diag", "Raw", "Highest") as $lidx => $lvalue) {
- echo "<option value=\"{$lidx}\" ";
- if ($pconfig["ipsec_{$lkey}"] == $lidx) {
- echo "selected=\"selected\"";
- }
- echo ">{$lvalue}</option>\n";
- }
- ?>
- </select>
- </td>
- </tr>
- <?php endforeach; ?>
- <tr style="display:none;">
- <td></td>
- </tr>
- </table>
- <br /><?=gettext("Launches IPsec in debug mode so that more verbose logs " .
- "will be generated to aid in troubleshooting."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Unique IDs"); ?></td>
- <td width="78%" class="vtable">
- <strong><?=gettext("Configure Unique IDs as: "); ?></strong>
- <?php
- echo "<select name=\"uniqueids\" id=\"uniqueids\">\n";
- foreach ($ipsec_idhandling as $value => $lvalue) {
- echo "<option value=\"{$value}\" ";
- if ($pconfig['uniqueids'] == $value) {
- echo "selected=\"selected\"";
- }
- echo ">{$lvalue}</option>\n";
- }
- ?>
- </select>
- <br />
- <?=gettext("whether a particular participant ID should be kept unique, with any new IKE_SA using an ID " .
- "deemed to replace all old ones using that ID. Participant IDs normally are unique, so a new " .
- "IKE_SA using the same ID is almost invariably intended to replace an old one. " .
- "The difference between <b>no</b> and <b>never</b> is that the old IKE_SAs will be replaced when receiving an " .
- "INITIAL_CONTACT notify if the option is no but will ignore these notifies if <b>never</b> is configured. " .
- "The daemon also accepts the value <b>keep</b> to reject " .
- "new IKE_SA setups and keep the duplicate established earlier. Defaults to Yes."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IP Compression"); ?></td>
- <td width="78%" class="vtable">
- <input name="compression" type="checkbox" id="compression" value="yes" <?php if ($pconfig['compression']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable IPCompression"); ?></strong>
- <br />
- <?=gettext("IPComp compression of content is proposed on the connection."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Strict interface binding"); ?></td>
- <td width="78%" class="vtable">
- <input name="enableinterfacesuse" type="checkbox" id="enableinterfacesuse" value="yes" <?php if ($pconfig['enableinterfacesuse']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable strict interface binding"); ?></strong>
- <br />
- <?=gettext("Enable strongSwan's interfaces_use option to bind specific interfaces only. This option is known to break IPsec with dynamic IP interfaces. This is not recommended at this time."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Unencrypted payloads in IKEv1 Main Mode"); ?></td>
- <td width="78%" class="vtable">
- <input name="acceptunencryptedmainmode" type="checkbox" id="acceptunencryptedmainmode" value="yes" <?php if ($pconfig['acceptunencryptedmainmode']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Accept unencrypted ID and HASH payloads in IKEv1 Main Mode"); ?></strong>
- <br />
- <?=gettext("Some implementations send the third Main Mode message unencrypted, probably to find the PSKs for the specified ID for authentication." .
- "This is very similar to Aggressive Mode, and has the same security implications: " .
- "A passive attacker can sniff the negotiated Identity, and start brute forcing the PSK using the HASH payload." .
- " It is recommended to keep this option to no, unless you know exactly what the implications are and require compatibility to such devices (for example, some SonicWall boxes).");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Maximum MSS"); ?></td>
- <td width="78%" class="vtable">
- <input name="maxmss_enable" type="checkbox" id="maxmss_enable" value="yes" <?php if ($pconfig['maxmss_enable'] == true) echo "checked=\"checked\""; ?> onclick="maxmss_checked(this)" />
- <strong><?=gettext("Enable MSS clamping on VPN traffic"); ?></strong>
- <br />
- <input name="maxmss" id="maxmss" value="<?php if ($pconfig['maxmss'] <> "") echo htmlspecialchars($pconfig['maxmss']); else "1400"; ?>" class="formfld unknown" <?php if ($pconfig['maxmss_enable'] == false) echo "disabled=\"disabled\""; ?> />
- <br />
- <?=gettext("Enable MSS clamping on TCP flows over VPN. " .
- "This helps overcome problems with PMTUD on IPsec VPN links. If left blank, the default value is 1400 bytes. "); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Disable Cisco Extensions"); ?></td>
- <td width="78%" class="vtable">
- <input name="unityplugin" type="checkbox" id="unityplugin" value="yes" <?php if ($pconfig['unityplugin'] == true) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Disable Unity Plugin"); ?></strong>
- <br />
- <?=gettext("Disable Unity Plugin which provides Cisco Extension support as Split-Include, Split-Exclude, Split-Dns, ..."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Strict CRL Checking"); ?></td>
- <td width="78%" class="vtable">
- <input name="strictcrlpolicy" type="checkbox" id="strictcrlpolicy" value="yes" <?php if ($pconfig['strictcrlpolicy'] == true) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable strict Certificate Revocation List checking"); ?></strong>
- <br />
- <?=gettext("Check this to require availability of a fresh CRL for peer authentication based on RSA signatures to succeed."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Make before Break"); ?></td>
- <td width="78%" class="vtable">
- <input name="makebeforebreak" type="checkbox" id="makebeforebreak" value="yes" <?php if ($pconfig['makebeforebreak'] == true) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Initiate IKEv2 reauthentication with a make-before-break"); ?></strong>
- <br />
- <?=gettext("instead of a break-before-make scheme. Make-before-break uses overlapping IKE and CHILD_SA during reauthentication " .
- "by first recreating all new SAs before deleting the old ones. This behavior can be beneficial to avoid connectivity gaps " .
- "during reauthentication, but requires support for overlapping SAs by the peer.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Auto-exclude LAN address"); ?></td>
- <td width="78%" class="vtable">
- <input name="noshuntlaninterfaces" type="checkbox" id="noshuntlaninterfaces" value="yes" <?php if ($pconfig['noshuntlaninterfaces'] != true) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable bypass for LAN interface IP"); ?></strong>
- <br />
- <?=gettext("Exclude traffic from LAN subnet to LAN IP address from IPsec."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/vpn_l2tp.php b/usr/local/www/vpn_l2tp.php
deleted file mode 100644
index 88f4eae..0000000
--- a/usr/local/www/vpn_l2tp.php
+++ /dev/null
@@ -1,493 +0,0 @@
-<?php
-/*
- vpn_l2tp.php
- part of pfSense
-
- Copyright (C) 2005 Scott Ullrich (sullrich@gmail.com)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-vpn-vpnl2tp
-##|*NAME=VPN: VPN L2TP page
-##|*DESCR=Allow access to the 'VPN: VPN L2TP' page.
-##|*MATCH=vpn_l2tp.php*
-##|-PRIV
-
-$pgtitle = array(gettext("VPN"), gettext("L2TP"), gettext("L2TP"));
-$shortcut_section = "l2tps";
-
-require("guiconfig.inc");
-require_once("vpn.inc");
-
-if (!is_array($config['l2tp']['radius'])) {
- $config['l2tp']['radius'] = array();
-}
-$l2tpcfg = &$config['l2tp'];
-
-$pconfig['remoteip'] = $l2tpcfg['remoteip'];
-$pconfig['localip'] = $l2tpcfg['localip'];
-$pconfig['l2tp_subnet'] = $l2tpcfg['l2tp_subnet'];
-$pconfig['mode'] = $l2tpcfg['mode'];
-$pconfig['interface'] = $l2tpcfg['interface'];
-$pconfig['l2tp_dns1'] = $l2tpcfg['dns1'];
-$pconfig['l2tp_dns2'] = $l2tpcfg['dns2'];
-$pconfig['wins'] = $l2tpcfg['wins'];
-$pconfig['radiusenable'] = isset($l2tpcfg['radius']['enable']);
-$pconfig['radacct_enable'] = isset($l2tpcfg['radius']['accounting']);
-$pconfig['radiusserver'] = $l2tpcfg['radius']['server'];
-$pconfig['radiussecret'] = $l2tpcfg['radius']['secret'];
-$pconfig['radiusissueips'] = $l2tpcfg['radius']['radiusissueips'];
-$pconfig['n_l2tp_units'] = $l2tpcfg['n_l2tp_units'];
-$pconfig['paporchap'] = $l2tpcfg['paporchap'];
-$pconfig['secret'] = $l2tpcfg['secret'];
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if ($_POST['mode'] == "server") {
- $reqdfields = explode(" ", "localip remoteip");
- $reqdfieldsn = array(gettext("Server address"), gettext("Remote start address"));
-
- if ($_POST['radiusenable']) {
- $reqdfields = array_merge($reqdfields, explode(" ", "radiusserver radiussecret"));
- $reqdfieldsn = array_merge($reqdfieldsn,
- array(gettext("RADIUS server address"), gettext("RADIUS shared secret")));
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (($_POST['localip'] && !is_ipaddr($_POST['localip']))) {
- $input_errors[] = gettext("A valid server address must be specified.");
- }
- if (is_ipaddr_configured($_POST['localip'])) {
- $input_errors[] = gettext("'Server address' parameter should NOT be set to any IP address currently in use on this firewall.");
- }
- if (($_POST['l2tp_subnet'] && !is_ipaddr($_POST['remoteip']))) {
- $input_errors[] = gettext("A valid remote start address must be specified.");
- }
- if (($_POST['radiusserver'] && !is_ipaddr($_POST['radiusserver']))) {
- $input_errors[] = gettext("A valid RADIUS server address must be specified.");
- }
-
- /* if this is an AJAX caller then handle via JSON */
- if (isAjax() && is_array($input_errors)) {
- input_errors2Ajax($input_errors);
- exit;
- }
-
- if (!$input_errors) {
- $_POST['remoteip'] = $pconfig['remoteip'] = gen_subnet($_POST['remoteip'], $_POST['l2tp_subnet']);
- $subnet_start = ip2ulong($_POST['remoteip']);
- $subnet_end = ip2ulong($_POST['remoteip']) + $_POST['n_l2tp_units'] - 1;
-
- if ((ip2ulong($_POST['localip']) >= $subnet_start) &&
- (ip2ulong($_POST['localip']) <= $subnet_end)) {
- $input_errors[] = gettext("The specified server address lies in the remote subnet.");
- }
- if ($_POST['localip'] == get_interface_ip("lan")) {
- $input_errors[] = gettext("The specified server address is equal to the LAN interface address.");
- }
- }
- }
-
- /* if this is an AJAX caller then handle via JSON */
- if (isAjax() && is_array($input_errors)) {
- input_errors2Ajax($input_errors);
- exit;
- }
-
- if (!$input_errors) {
- $l2tpcfg['remoteip'] = $_POST['remoteip'];
- $l2tpcfg['localip'] = $_POST['localip'];
- $l2tpcfg['l2tp_subnet'] = $_POST['l2tp_subnet'];
- $l2tpcfg['mode'] = $_POST['mode'];
- $l2tpcfg['interface'] = $_POST['interface'];
- $l2tpcfg['n_l2tp_units'] = $_POST['n_l2tp_units'];
-
- $l2tpcfg['radius']['server'] = $_POST['radiusserver'];
- $l2tpcfg['radius']['secret'] = $_POST['radiussecret'];
- $l2tpcfg['secret'] = $_POST['secret'];
-
- if ($_POST['wins']) {
- $l2tpcfg['wins'] = $_POST['wins'];
- } else {
- unset($l2tpcfg['wins']);
- }
-
- $l2tpcfg['paporchap'] = $_POST['paporchap'];
-
-
- if ($_POST['l2tp_dns1'] == "") {
- if (isset($l2tpcfg['dns1'])) {
- unset($l2tpcfg['dns1']);
- }
- } else {
- $l2tpcfg['dns1'] = $_POST['l2tp_dns1'];
- }
-
- if ($_POST['l2tp_dns2'] == "") {
- if (isset($l2tpcfg['dns2'])) {
- unset($l2tpcfg['dns2']);
- }
- } else {
- $l2tpcfg['dns2'] = $_POST['l2tp_dns2'];
- }
-
- if ($_POST['radiusenable'] == "yes") {
- $l2tpcfg['radius']['enable'] = true;
- } else {
- unset($l2tpcfg['radius']['enable']);
- }
-
- if ($_POST['radacct_enable'] == "yes") {
- $l2tpcfg['radius']['accounting'] = true;
- } else {
- unset($l2tpcfg['radius']['accounting']);
- }
-
- if ($_POST['radiusissueips'] == "yes") {
- $l2tpcfg['radius']['radiusissueips'] = true;
- } else {
- unset($l2tpcfg['radius']['radiusissueips']);
- }
-
- write_config();
-
- $retval = 0;
- $retval = vpn_l2tp_configure();
- $savemsg = get_std_save_message($retval);
-
- /* if ajax is calling, give them an update message */
- if (isAjax()) {
- print_info_box_np($savemsg);
- }
- }
-}
-
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-
-<script type="text/javascript">
-//<![CDATA[
-function get_radio_value(obj) {
- for (i = 0; i < obj.length; i++) {
- if (obj[i].checked) {
- return obj[i].value;
- }
- }
- return null;
-}
-
-function enable_change(enable_over) {
- if ((get_radio_value(document.iform.mode) == "server") || enable_over) {
- document.iform.remoteip.disabled = 0;
- document.iform.localip.disabled = 0;
- document.iform.l2tp_subnet.disabled = 0;
- document.iform.radiusenable.disabled = 0;
- document.iform.radiusissueips.disabled = 0;
- document.iform.paporchap.disabled = 0;
- document.iform.interface.disabled = 0;
- document.iform.n_l2tp_units.disabled = 0;
- document.iform.secret.disabled = 0;
- document.iform.l2tp_dns1.disabled = 0;
- document.iform.l2tp_dns2.disabled = 0;
- /* fix colors */
- document.iform.remoteip.style.backgroundColor = '#FFFFFF';
- document.iform.localip.style.backgroundColor = '#FFFFFF';
- document.iform.l2tp_subnet.style.backgroundColor = '#FFFFFF';
- document.iform.radiusenable.style.backgroundColor = '#FFFFFF';
- document.iform.radiusissueips.style.backgroundColor = '#FFFFFF';
- document.iform.paporchap.style.backgroundColor = '#FFFFFF';
- document.iform.interface.style.backgroundColor = '#FFFFFF';
- document.iform.n_l2tp_units.style.backgroundColor = '#FFFFFF';
- document.iform.secret.style.backgroundColor = '#FFFFFF';
- if (document.iform.radiusenable.checked || enable_over) {
- document.iform.radacct_enable.disabled = 0;
- document.iform.radiusserver.disabled = 0;
- document.iform.radiussecret.disabled = 0;
- document.iform.radiusissueips.disabled = 0;
- /* fix colors */
- document.iform.radacct_enable.style.backgroundColor = '#FFFFFF';
- document.iform.radiusserver.style.backgroundColor = '#FFFFFF';
- document.iform.radiussecret.style.backgroundColor = '#FFFFFF';
- document.iform.radiusissueips.style.backgroundColor = '#FFFFFF';
- } else {
- document.iform.radacct_enable.disabled = 1;
- document.iform.radiusserver.disabled = 1;
- document.iform.radiussecret.disabled = 1;
- document.iform.radiusissueips.disabled = 1;
- /* fix colors */
- document.iform.radacct_enable.style.backgroundColor = '#D4D0C8';
- document.iform.radiusserver.style.backgroundColor = '#D4D0C8';
- document.iform.radiussecret.style.backgroundColor = '#D4D0C8';
- document.iform.radiusissueips.style.backgroundColor = '#D4D0C8';
- }
- } else {
- document.iform.interface.disabled = 1;
- document.iform.n_l2tp_units.disabled = 1;
- document.iform.l2tp_subnet.disabled = 1;
- document.iform.l2tp_dns1.disabled = 1;
- document.iform.l2tp_dns2.disabled = 1;
- document.iform.paporchap.disabled = 1;
- document.iform.remoteip.disabled = 1;
- document.iform.localip.disabled = 1;
- document.iform.radiusenable.disabled = 1;
- document.iform.radacct_enable.disabled = 1;
- document.iform.radiusserver.disabled = 1;
- document.iform.radiussecret.disabled = 1;
- document.iform.radiusissueips.disabled = 1;
- document.iform.secret.disabled = 1;
- /* fix colors */
- document.iform.interface.style.backgroundColor = '#D4D0C8';
- document.iform.n_l2tp_units.style.backgroundColor = '#D4D0C8';
- document.iform.l2tp_subnet.style.backgroundColor = '#D4D0C8';
- document.iform.paporchap.style.backgroundColor = '#D4D0C8';
- document.iform.remoteip.style.backgroundColor = '#D4D0C8';
- document.iform.localip.style.backgroundColor = '#D4D0C8';
- document.iform.radiusenable.style.backgroundColor = '#D4D0C8';
- document.iform.radacct_enable.style.backgroundColor = '#D4D0C8';
- document.iform.radiusserver.style.backgroundColor = '#D4D0C8';
- document.iform.radiussecret.style.backgroundColor = '#D4D0C8';
- document.iform.radiusissueips.style.backgroundColor = '#D4D0C8';
- document.iform.secret.style.backgroundColor = '#D4D0C8';
- }
-}
-//]]>
-</script>
-<form action="vpn_l2tp.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<div id="inputerrors"></div>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn l2tp">
- <tr><td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Configuration"), true, "vpn_l2tp.php");
- $tab_array[1] = array(gettext("Users"), false, "vpn_l2tp_users.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable">
- <input name="mode" type="radio" onclick="enable_change(false)" value="off"
- <?php if (($pconfig['mode'] != "server") && ($pconfig['mode'] != "redir")) echo "checked=\"checked\"";?> />
- <?=gettext("Off"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable">
- <input type="radio" name="mode" value="server" onclick="enable_change(false)" <?php if ($pconfig['mode'] == "server") echo "checked=\"checked\""; ?> />
- <?=gettext("Enable L2TP server"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><b><?=gettext("Interface");?></b></td>
- <td width="78%" valign="top" class="vtable">
- <select name="interface" class="formselect" id="interface">
- <?php
- $interfaces = get_configured_interface_with_descr();
- foreach ($interfaces as $iface => $ifacename):
- ?>
- <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br />
-
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Server Address");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="localip" type="text" class="formfld unknown" id="localip" size="20" value="<?=htmlspecialchars($pconfig['localip']);?>" />
- <br />
- <?=gettext("Enter the IP address the L2TP server should give to clients for use as their \"gateway\""); ?>.
- <br />
- <?=gettext("Typically this is set to an unused IP just outside of the client range"); ?>.
- <br />
- <br />
- <?=gettext("NOTE: This should NOT be set to any IP address currently in use on this firewall"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Remote Address Range");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="remoteip" type="text" class="formfld unknown" id="remoteip" size="20" value="<?=htmlspecialchars($pconfig['remoteip']);?>" />
- <br />
- <?=gettext("Specify the starting address for the client IP address subnet.");?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet Mask"); ?></td>
- <td width="78%" class="vtable">
- <select id="l2tp_subnet" name="l2tp_subnet">
- <?php
- for ($x = 0; $x < 33; $x++) {
- if ($x == $pconfig['l2tp_subnet']) {
- $SELECTED = " selected=\"selected\"";
- } else {
- $SELECTED = "";
- }
- echo "<option value=\"{$x}\"{$SELECTED}>{$x}</option>\n";
- }
- ?>
- </select>
- <br /><?=gettext("Hint:"); ?> 24 <?=gettext("is"); ?> 255.255.255.0
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Number of L2TP users"); ?></td>
- <td width="78%" class="vtable">
- <select id="n_l2tp_units" name="n_l2tp_units">
- <?php
- for ($x = 0; $x < 255; $x++) {
- if ($x == $pconfig['n_l2tp_units']) {
- $SELECTED = " selected=\"selected\"";
- } else {
- $SELECTED = "";
- }
- echo "<option value=\"{$x}\"{$SELECTED}>{$x}</option>\n";
- }
- ?>
- </select>
- <br /><?=gettext("Hint:"); ?> 10 <?=gettext("is ten L2TP clients"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Secret");?></td>
- <td width="78%" class="vtable">
- <input type="password" name="secret" id="secret" class="formfld pwd" value="<?php echo htmlspecialchars($pconfig['secret']); ?>" />
- <br />
- <?=gettext("Specify optional secret shared between peers. Required on some devices/setups.");?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Authentication Type");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?>
- <select name="paporchap" id="paporchap">
- <option value='chap'<?php if ($pconfig['paporchap'] == "chap") echo " selected=\"selected\""; ?>><?=gettext("CHAP"); ?></option>
- <option value='pap'<?php if ($pconfig['paporchap'] == "pap") echo " selected=\"selected\""; ?>><?=gettext("PAP"); ?></option>
- </select>
- <br />
- <?=gettext("Specifies which protocol to use for authentication.");?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("L2TP DNS Servers"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="l2tp_dns1" type="text" class="formfld unknown" id="l2tp_dns1" size="20" value="<?=htmlspecialchars($pconfig['l2tp_dns1']);?>" />
- <br />
- <input name="l2tp_dns2" type="text" class="formfld unknown" id="l2tp_dns2" size="20" value="<?=htmlspecialchars($pconfig['l2tp_dns2']);?>" />
- <br />
- <?=gettext("primary and secondary DNS servers assigned to L2TP clients"); ?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("WINS Server"); ?></td>
- <td width="78%" valign="top" class="vtable">
- <input name="wins" class="formfld unknown" id="wins" size="20" value="<?=htmlspecialchars($pconfig['wins']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS"); ?></td>
- <td width="78%" class="vtable">
- <input name="radiusenable" type="checkbox" id="radiusenable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radiusenable']) echo "checked=\"checked\""; ?> />
- <strong> <?=gettext("Use a RADIUS server for authentication");?><br /></strong>
- <?=gettext("When set, all users will be authenticated using the RADIUS server specified below. The local user database will not be used.");?><br />
- <br />
- <input name="radacct_enable" type="checkbox" id="radacct_enable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radacct_enable']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable RADIUS accounting");?></strong><br />
- <?=gettext("Sends accounting packets to the RADIUS server.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS Server");?></td>
- <td width="78%" class="vtable">
- <input name="radiusserver" type="text" class="formfld unknown" id="radiusserver" size="20" value="<?=htmlspecialchars($pconfig['radiusserver']);?>" />
- <br />
- <?=gettext("Enter the IP address of the RADIUS server.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS Shared Secret");?></td>
- <td width="78%" valign="top" class="vtable">
- <input name="radiussecret" type="password" class="formfld pwd" id="radiussecret" size="20" value="<?=htmlspecialchars($pconfig['radiussecret']);?>" />
- <br />
- <?=gettext("Enter the shared secret that will be used to authenticate to the RADIUS server.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS Issued IP's");?></td>
- <td width="78%" valign="top" class="vtable">
- <input name="radiusissueips" value="yes" type="checkbox" class="formfld" id="radiusissueips"<?php if (isset($pconfig['radiusissueips'])) echo " checked=\"checked\""; ?> />
- <br />
- <?=gettext("Issue IP Addresses via RADIUS server.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <span class="vexpl">
- <strong class="red"><?=gettext("Note:");?></strong><br />
- <?=gettext("Don't forget to add a firewall rule to permit traffic from L2TP clients!");?>
- </span>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-
-<script type="text/javascript">
-//<![CDATA[
- enable_change(false);
-//]]>
-</script>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/vpn_l2tp_users.php b/usr/local/www/vpn_l2tp_users.php
deleted file mode 100644
index 7ffc969..0000000
--- a/usr/local/www/vpn_l2tp_users.php
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-/*
- vpn_l2tp_users.php
- part of pfSense
-
- Copyright (C) 2005 Scott Ullrich (sullrich@gmail.com)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-vpn-vpnl2tp-users
-##|*NAME=VPN: VPN L2TP : Users page
-##|*DESCR=Allow access to the 'VPN: VPN L2TP : Users' page.
-##|*MATCH=vpn_l2tp_users.php*
-##|-PRIV
-
-$pgtitle = array(gettext("VPN"), gettext("L2TP"), gettext("Users"));
-$shortcut_section = "l2tps";
-
-require("guiconfig.inc");
-require_once("vpn.inc");
-
-if (!is_array($config['l2tp']['user'])) {
- $config['l2tp']['user'] = array();
-}
-$a_secret = &$config['l2tp']['user'];
-
-if ($_POST) {
-
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
- $retval = 0;
- if (!is_subsystem_dirty('rebootreq')) {
- $retval = vpn_l2tp_configure();
- }
- $savemsg = get_std_save_message($retval);
- if ($retval == 0) {
- if (is_subsystem_dirty('l2tpusers')) {
- clear_subsystem_dirty('l2tpusers');
- }
- }
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($a_secret[$_GET['id']]) {
- unset($a_secret[$_GET['id']]);
- write_config();
- mark_subsystem_dirty('l2tpusers');
- pfSenseHeader("vpn_l2tp_users.php");
- exit;
- }
-}
-
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-<div id="inputerrors"></div>
-<form action="vpn_l2tp_users.php" method="post">
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php
-if (isset($config['l2tp']['radius']['enable'])) {
- print_info_box(gettext("Warning: RADIUS is enabled. The local user database will not be used."));
-}
-?>
-<?php if (is_subsystem_dirty('l2tpusers')): ?><br/>
-<?php print_info_box_np(gettext("The l2tp user list has been modified") . ".<br />" . gettext("You must apply the changes in order for them to take effect") . ".<br /><b>" . gettext("Warning: this will terminate all current l2tp sessions!") . "</b>");?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn l2pt users">
- <tr><td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Configuration"), false, "vpn_l2tp.php");
- $tab_array[1] = array(gettext("Users"), true, "vpn_l2tp_users.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td class="listhdrr"><?=gettext("Username");?></td>
- <td class="listhdr"><?=gettext("IP address");?></td>
- <td class="list"></td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_secret as $secretent):
-?>
- <tr>
- <td class="listlr">
- <?=htmlspecialchars($secretent['name']);?>
- </td>
- <td class="listr">
- <?php if ($secretent['ip'] == "") $secretent['ip'] = "Dynamic"; ?>
- <?=htmlspecialchars($secretent['ip']);?>&nbsp;
- </td>
- <td class="list nowrap">
- <a href="vpn_l2tp_users_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="edit user" width="17" height="17" border="0" alt="edit" /></a>
- &nbsp;<a href="vpn_l2tp_users.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this user?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete user"); ?>" width="17" height="17" border="0" alt="delete" /></a>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="2"></td>
- <td class="list"> <a href="vpn_l2tp_users_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add user"); ?>" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/vpn_l2tp_users_edit.php b/usr/local/www/vpn_l2tp_users_edit.php
deleted file mode 100644
index 6cedc02..0000000
--- a/usr/local/www/vpn_l2tp_users_edit.php
+++ /dev/null
@@ -1,212 +0,0 @@
-<?php
-/*
- vpn_l2tp_users_edit.php
- part of pfSense
-
- Copyright (C) 2006 Scott Ullrich (sullrich@gmail.com)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-vpn-vpnl2tp-users-edit
-##|*NAME=VPN: VPN L2TP : Users : Edit page
-##|*DESCR=Allow access to the 'VPN: VPN L2TP : Users : Edit' page.
-##|*MATCH=vpn_l2tp_users_edit.php*
-##|-PRIV
-
-$pgtitle = array(gettext("VPN"), gettext("L2TP"), gettext("User"), gettext("Edit"));
-$shortcut_section = "l2tps";
-
-function l2tpusercmp($a, $b) {
- return strcasecmp($a['name'], $b['name']);
-}
-
-function l2tp_users_sort() {
- global $config;
-
- if (!is_array($config['l2tp']['user'])) {
- return;
- }
-
- usort($config['l2tp']['user'], "l2tpusercmp");
-}
-
-require("guiconfig.inc");
-require_once("vpn.inc");
-
-if (isset($_POST['referer'])) {
- $referer = $_POST['referer'];
-} else {
- $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/vpn_l2tp_users.php');
-}
-
-if (!is_array($config['l2tp']['user'])) {
- $config['l2tp']['user'] = array();
-}
-$a_secret = &$config['l2tp']['user'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_secret[$id]) {
- $pconfig['usernamefld'] = $a_secret[$id]['name'];
- $pconfig['ip'] = $a_secret[$id]['ip'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if (isset($id) && ($a_secret[$id])) {
- $reqdfields = explode(" ", "usernamefld");
- $reqdfieldsn = array(gettext("Username"));
- } else {
- $reqdfields = explode(" ", "usernamefld passwordfld");
- $reqdfieldsn = array(gettext("Username"), gettext("Password"));
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['usernamefld'])) {
- $input_errors[] = gettext("The username contains invalid characters.");
- }
-
- if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['passwordfld'])) {
- $input_errors[] = gettext("The password contains invalid characters.");
- }
-
- if (($_POST['passwordfld']) && ($_POST['passwordfld'] != $_POST['passwordfld2'])) {
- $input_errors[] = gettext("The passwords do not match.");
- }
- if (($_POST['ip'] && !is_ipaddr($_POST['ip']))) {
- $input_errors[] = gettext("The IP address entered is not valid.");
- }
-
- if (!$input_errors && !(isset($id) && $a_secret[$id])) {
- /* make sure there are no dupes */
- foreach ($a_secret as $secretent) {
- if ($secretent['name'] == $_POST['usernamefld']) {
- $input_errors[] = gettext("Another entry with the same username already exists.");
- break;
- }
- }
- }
-
- /* if this is an AJAX caller then handle via JSON */
- if (isAjax() && is_array($input_errors)) {
- input_errors2Ajax($input_errors);
- exit;
- }
-
- if (!$input_errors) {
-
- if (isset($id) && $a_secret[$id]) {
- $secretent = $a_secret[$id];
- }
-
- $secretent['name'] = $_POST['usernamefld'];
- $secretent['ip'] = $_POST['ip'];
-
- if ($_POST['passwordfld']) {
- $secretent['password'] = $_POST['passwordfld'];
- }
-
- if (isset($id) && $a_secret[$id]) {
- $a_secret[$id] = $secretent;
- } else {
- $a_secret[] = $secretent;
- }
- l2tp_users_sort();
-
- write_config();
-
- $retval = vpn_l2tp_configure();
-
- pfSenseHeader("vpn_l2tp_users.php");
-
- exit;
- }
-}
-
-include("head.inc");
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<div id="inputerrors"></div>
-<form action="vpn_l2tp_users_edit.php" method="post" name="iform" id="iform">
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="vpn l2tp users edit">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Username");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="usernamefld" type="text" class="formfld user" id="usernamefld" size="20" value="<?=htmlspecialchars($pconfig['usernamefld']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Password");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="passwordfld" type="password" class="formfld pwd" id="passwordfld" size="20" />
- <br /><?=$mandfldhtml;?><input name="passwordfld2" type="password" class="formfld pwd" id="passwordfld2" size="20" />
- &nbsp;(<?=gettext("confirmation");?>)
- <?php if (isset($id) && $a_secret[$id]): ?>
- <br />
- <span class="vexpl"><?=gettext("If you want to change the users password, enter it here twice.");?></span>
- <?php endif; ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IP address");?></td>
- <td width="78%" class="vtable">
- <input name="ip" type="text" class="formfld unknown" id="ip" size="20" value="<?=htmlspecialchars($pconfig['ip']);?>" />
- <br /><span class="vexpl"><?=gettext("If you want the user to be assigned a specific IP address, enter it here.");?></span>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext('Save');?>" />
- <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
- <input name="referer" type="hidden" value="<?=$referer;?>" />
- <?php if (isset($id) && $a_secret[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </div>
-</form>
-
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/vpn_openvpn_client.php b/usr/local/www/vpn_openvpn_client.php
deleted file mode 100644
index 7a06c70..0000000
--- a/usr/local/www/vpn_openvpn_client.php
+++ /dev/null
@@ -1,1271 +0,0 @@
-<?php
-/*
- vpn_openvpn_client.php
-
- Copyright (C) 2008 Shrew Soft Inc.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-openvpn-client
-##|*NAME=OpenVPN: Client page
-##|*DESCR=Allow access to the 'OpenVPN: Client' page.
-##|*MATCH=vpn_openvpn_client.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("openvpn.inc");
-require_once("pkg-utils.inc");
-
-$pgtitle = array(gettext("OpenVPN"), gettext("Client"));
-$shortcut_section = "openvpn";
-
-if (!is_array($config['openvpn']['openvpn-client'])) {
- $config['openvpn']['openvpn-client'] = array();
-}
-
-$a_client = &$config['openvpn']['openvpn-client'];
-
-if (!is_array($config['ca'])) {
- $config['ca'] = array();
-}
-
-$a_ca =& $config['ca'];
-
-if (!is_array($config['cert'])) {
- $config['cert'] = array();
-}
-
-$a_cert =& $config['cert'];
-
-if (!is_array($config['crl'])) {
- $config['crl'] = array();
-}
-
-$a_crl =& $config['crl'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-$act = $_GET['act'];
-if (isset($_POST['act'])) {
- $act = $_POST['act'];
-}
-
-if (isset($id) && $a_client[$id]) {
- $vpnid = $a_client[$id]['vpnid'];
-} else {
- $vpnid = 0;
-}
-
-if ($_GET['act'] == "del") {
-
- if (!isset($a_client[$id])) {
- pfSenseHeader("vpn_openvpn_client.php");
- exit;
- }
- if (!empty($a_client[$id])) {
- openvpn_delete('client', $a_client[$id]);
- }
- unset($a_client[$id]);
- write_config();
- $savemsg = gettext("Client successfully deleted")."<br />";
-}
-
-if ($_GET['act'] == "new") {
- $pconfig['autokey_enable'] = "yes";
- $pconfig['tlsauth_enable'] = "yes";
- $pconfig['autotls_enable'] = "yes";
- $pconfig['interface'] = "wan";
- $pconfig['server_port'] = 1194;
- $pconfig['verbosity_level'] = 1; // Default verbosity is 1
- // OpenVPN Defaults to SHA1
- $pconfig['digest'] = "SHA1";
-}
-
-global $simplefields;
-$simplefields = array('auth_user', 'auth_pass');
-
-if ($_GET['act'] == "edit") {
-
- if (isset($id) && $a_client[$id]) {
- foreach ($simplefields as $stat) {
- $pconfig[$stat] = $a_client[$id][$stat];
- }
-
- $pconfig['disable'] = isset($a_client[$id]['disable']);
- $pconfig['mode'] = $a_client[$id]['mode'];
- $pconfig['protocol'] = $a_client[$id]['protocol'];
- $pconfig['interface'] = $a_client[$id]['interface'];
- if (!empty($a_client[$id]['ipaddr'])) {
- $pconfig['interface'] = $pconfig['interface'] . '|' . $a_client[$id]['ipaddr'];
- }
- $pconfig['local_port'] = $a_client[$id]['local_port'];
- $pconfig['server_addr'] = $a_client[$id]['server_addr'];
- $pconfig['server_port'] = $a_client[$id]['server_port'];
- $pconfig['resolve_retry'] = $a_client[$id]['resolve_retry'];
- $pconfig['proxy_addr'] = $a_client[$id]['proxy_addr'];
- $pconfig['proxy_port'] = $a_client[$id]['proxy_port'];
- $pconfig['proxy_user'] = $a_client[$id]['proxy_user'];
- $pconfig['proxy_passwd'] = $a_client[$id]['proxy_passwd'];
- $pconfig['proxy_authtype'] = $a_client[$id]['proxy_authtype'];
- $pconfig['description'] = $a_client[$id]['description'];
- $pconfig['custom_options'] = $a_client[$id]['custom_options'];
- $pconfig['ns_cert_type'] = $a_client[$id]['ns_cert_type'];
- $pconfig['dev_mode'] = $a_client[$id]['dev_mode'];
-
- if ($pconfig['mode'] != "p2p_shared_key") {
- $pconfig['caref'] = $a_client[$id]['caref'];
- $pconfig['certref'] = $a_client[$id]['certref'];
- if ($a_client[$id]['tls']) {
- $pconfig['tlsauth_enable'] = "yes";
- $pconfig['tls'] = base64_decode($a_client[$id]['tls']);
- }
- } else {
- $pconfig['shared_key'] = base64_decode($a_client[$id]['shared_key']);
- }
- $pconfig['crypto'] = $a_client[$id]['crypto'];
- // OpenVPN Defaults to SHA1 if unset
- $pconfig['digest'] = !empty($a_client[$id]['digest']) ? $a_client[$id]['digest'] : "SHA1";
- $pconfig['engine'] = $a_client[$id]['engine'];
-
- $pconfig['tunnel_network'] = $a_client[$id]['tunnel_network'];
- $pconfig['tunnel_networkv6'] = $a_client[$id]['tunnel_networkv6'];
- $pconfig['remote_network'] = $a_client[$id]['remote_network'];
- $pconfig['remote_networkv6'] = $a_client[$id]['remote_networkv6'];
- $pconfig['use_shaper'] = $a_client[$id]['use_shaper'];
- $pconfig['compression'] = $a_client[$id]['compression'];
- $pconfig['passtos'] = $a_client[$id]['passtos'];
-
- // just in case the modes switch
- $pconfig['autokey_enable'] = "yes";
- $pconfig['autotls_enable'] = "yes";
-
- $pconfig['no_tun_ipv6'] = $a_client[$id]['no_tun_ipv6'];
- $pconfig['route_no_pull'] = $a_client[$id]['route_no_pull'];
- $pconfig['route_no_exec'] = $a_client[$id]['route_no_exec'];
- if (isset($a_client[$id]['verbosity_level'])) {
- $pconfig['verbosity_level'] = $a_client[$id]['verbosity_level'];
- } else {
- $pconfig['verbosity_level'] = 1; // Default verbosity is 1
- }
- }
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- if (isset($id) && $a_client[$id]) {
- $vpnid = $a_client[$id]['vpnid'];
- } else {
- $vpnid = 0;
- }
-
- list($iv_iface, $iv_ip) = explode ("|", $pconfig['interface']);
- if (is_ipaddrv4($iv_ip) && (stristr($pconfig['protocol'], "6") !== false)) {
- $input_errors[] = gettext("Protocol and IP address families do not match. You cannot select an IPv6 protocol and an IPv4 IP address.");
- } elseif (is_ipaddrv6($iv_ip) && (stristr($pconfig['protocol'], "6") === false)) {
- $input_errors[] = gettext("Protocol and IP address families do not match. You cannot select an IPv4 protocol and an IPv6 IP address.");
- } elseif ((stristr($pconfig['protocol'], "6") === false) && !get_interface_ip($iv_iface) && ($pconfig['interface'] != "any")) {
- $input_errors[] = gettext("An IPv4 protocol was selected, but the selected interface has no IPv4 address.");
- } elseif ((stristr($pconfig['protocol'], "6") !== false) && !get_interface_ipv6($iv_iface) && ($pconfig['interface'] != "any")) {
- $input_errors[] = gettext("An IPv6 protocol was selected, but the selected interface has no IPv6 address.");
- }
-
- if ($pconfig['mode'] != "p2p_shared_key") {
- $tls_mode = true;
- } else {
- $tls_mode = false;
- }
-
- /* input validation */
- if ($pconfig['local_port']) {
-
- if ($result = openvpn_validate_port($pconfig['local_port'], 'Local port')) {
- $input_errors[] = $result;
- }
-
- $portused = openvpn_port_used($pconfig['protocol'], $pconfig['interface'], $pconfig['local_port'], $vpnid);
- if (($portused != $vpnid) && ($portused != 0)) {
- $input_errors[] = gettext("The specified 'Local port' is in use. Please select another value");
- }
- }
-
- if ($result = openvpn_validate_host($pconfig['server_addr'], 'Server host or address')) {
- $input_errors[] = $result;
- }
-
- if ($result = openvpn_validate_port($pconfig['server_port'], 'Server port')) {
- $input_errors[] = $result;
- }
-
- if ($pconfig['proxy_addr']) {
-
- if ($result = openvpn_validate_host($pconfig['proxy_addr'], 'Proxy host or address')) {
- $input_errors[] = $result;
- }
-
- if ($result = openvpn_validate_port($pconfig['proxy_port'], 'Proxy port')) {
- $input_errors[] = $result;
- }
-
- if ($pconfig['proxy_authtype'] != "none") {
- if (empty($pconfig['proxy_user']) || empty($pconfig['proxy_passwd'])) {
- $input_errors[] = gettext("User name and password are required for proxy with authentication.");
- }
- }
- }
-
- if ($pconfig['tunnel_network']) {
- if ($result = openvpn_validate_cidr($pconfig['tunnel_network'], 'IPv4 Tunnel Network', false, "ipv4")) {
- $input_errors[] = $result;
- }
- }
-
- if ($pconfig['tunnel_networkv6']) {
- if ($result = openvpn_validate_cidr($pconfig['tunnel_networkv6'], 'IPv6 Tunnel Network', false, "ipv6")) {
- $input_errors[] = $result;
- }
- }
-
- if ($result = openvpn_validate_cidr($pconfig['remote_network'], 'IPv4 Remote Network', true, "ipv4")) {
- $input_errors[] = $result;
- }
-
- if ($result = openvpn_validate_cidr($pconfig['remote_networkv6'], 'IPv6 Remote Network', true, "ipv6")) {
- $input_errors[] = $result;
- }
-
- if (!empty($pconfig['use_shaper']) && (!is_numeric($pconfig['use_shaper']) || ($pconfig['use_shaper'] <= 0))) {
- $input_errors[] = gettext("The bandwidth limit must be a positive numeric value.");
- }
-
- if ($pconfig['autokey_enable']) {
- $pconfig['shared_key'] = openvpn_create_key();
- }
-
- if (!$tls_mode && !$pconfig['autokey_enable']) {
- if (!strstr($pconfig['shared_key'], "-----BEGIN OpenVPN Static key V1-----") ||
- !strstr($pconfig['shared_key'], "-----END OpenVPN Static key V1-----")) {
- $input_errors[] = gettext("The field 'Shared Key' does not appear to be valid");
- }
- }
-
- if ($tls_mode && $pconfig['tlsauth_enable'] && !$pconfig['autotls_enable']) {
- if (!strstr($pconfig['tls'], "-----BEGIN OpenVPN Static key V1-----") ||
- !strstr($pconfig['tls'], "-----END OpenVPN Static key V1-----")) {
- $input_errors[] = gettext("The field 'TLS Authentication Key' does not appear to be valid");
- }
- }
-
- /* If we are not in shared key mode, then we need the CA/Cert. */
- if ($pconfig['mode'] != "p2p_shared_key") {
- $reqdfields = explode(" ", "caref");
- $reqdfieldsn = array(gettext("Certificate Authority"));
- } elseif (!$pconfig['autokey_enable']) {
- /* We only need the shared key filled in if we are in shared key mode and autokey is not selected. */
- $reqdfields = array('shared_key');
- $reqdfieldsn = array(gettext('Shared key'));
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (($pconfig['mode'] != "p2p_shared_key") && empty($pconfig['certref']) && empty($pconfig['auth_user']) && empty($pconfig['auth_pass'])) {
- $input_errors[] = gettext("If no Client Certificate is selected, a username and/or password must be entered.");
- }
-
- if (!$input_errors) {
-
- $client = array();
-
- foreach ($simplefields as $stat) {
- update_if_changed($stat, $client[$stat], $_POST[$stat]);
- }
-
- if ($vpnid) {
- $client['vpnid'] = $vpnid;
- } else {
- $client['vpnid'] = openvpn_vpnid_next();
- }
-
- if ($_POST['disable'] == "yes") {
- $client['disable'] = true;
- }
- $client['protocol'] = $pconfig['protocol'];
- $client['dev_mode'] = $pconfig['dev_mode'];
- list($client['interface'], $client['ipaddr']) = explode ("|", $pconfig['interface']);
- $client['local_port'] = $pconfig['local_port'];
- $client['server_addr'] = $pconfig['server_addr'];
- $client['server_port'] = $pconfig['server_port'];
- $client['resolve_retry'] = $pconfig['resolve_retry'];
- $client['proxy_addr'] = $pconfig['proxy_addr'];
- $client['proxy_port'] = $pconfig['proxy_port'];
- $client['proxy_authtype'] = $pconfig['proxy_authtype'];
- $client['proxy_user'] = $pconfig['proxy_user'];
- $client['proxy_passwd'] = $pconfig['proxy_passwd'];
- $client['description'] = $pconfig['description'];
- $client['mode'] = $pconfig['mode'];
- $client['custom_options'] = str_replace("\r\n", "\n", $pconfig['custom_options']);
-
- if ($tls_mode) {
- $client['caref'] = $pconfig['caref'];
- $client['certref'] = $pconfig['certref'];
- if ($pconfig['tlsauth_enable']) {
- if ($pconfig['autotls_enable']) {
- $pconfig['tls'] = openvpn_create_key();
- }
- $client['tls'] = base64_encode($pconfig['tls']);
- }
- } else {
- $client['shared_key'] = base64_encode($pconfig['shared_key']);
- }
- $client['crypto'] = $pconfig['crypto'];
- $client['digest'] = $pconfig['digest'];
- $client['engine'] = $pconfig['engine'];
-
- $client['tunnel_network'] = $pconfig['tunnel_network'];
- $client['tunnel_networkv6'] = $pconfig['tunnel_networkv6'];
- $client['remote_network'] = $pconfig['remote_network'];
- $client['remote_networkv6'] = $pconfig['remote_networkv6'];
- $client['use_shaper'] = $pconfig['use_shaper'];
- $client['compression'] = $pconfig['compression'];
- $client['passtos'] = $pconfig['passtos'];
-
- $client['no_tun_ipv6'] = $pconfig['no_tun_ipv6'];
- $client['route_no_pull'] = $pconfig['route_no_pull'];
- $client['route_no_exec'] = $pconfig['route_no_exec'];
- $client['verbosity_level'] = $pconfig['verbosity_level'];
-
- if (isset($id) && $a_client[$id]) {
- $a_client[$id] = $client;
- } else {
- $a_client[] = $client;
- }
-
- openvpn_resync('client', $client);
- write_config();
-
- header("Location: vpn_openvpn_client.php");
- exit;
- }
-}
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-
-function mode_change() {
- index = document.iform.mode.selectedIndex;
- value = document.iform.mode.options[index].value;
- switch (value) {
- case "p2p_tls":
- document.getElementById("tls").style.display="";
- document.getElementById("tls_ca").style.display="";
- document.getElementById("tls_cert").style.display="";
- document.getElementById("userpass").style.display="";
- document.getElementById("userpassheader").style.display="";
- document.getElementById("psk").style.display="none";
- break;
- case "p2p_shared_key":
- document.getElementById("tls").style.display="none";
- document.getElementById("tls_ca").style.display="none";
- document.getElementById("tls_cert").style.display="none";
- document.getElementById("userpass").style.display="none";
- document.getElementById("userpassheader").style.display="none";
- document.getElementById("psk").style.display="";
- break;
- }
-}
-
-function dev_mode_change() {
- index = document.iform.dev_mode.selectedIndex;
- value = document.iform.dev_mode.options[index].value;
- switch (value) {
- case "tun":
- document.getElementById("chkboxNoTunIPv6").style.display="";
- break;
- case "tap":
- document.getElementById("chkboxNoTunIPv6").style.display="none";
- break;
- }
-}
-
-function autokey_change() {
- if (document.iform.autokey_enable.checked) {
- document.getElementById("autokey_opts").style.display="none";
- } else {
- document.getElementById("autokey_opts").style.display="";
- }
-}
-
-function useproxy_changed() {
-
- if (jQuery('#proxy_authtype').val() != 'none') {
- jQuery('#proxy_authtype_opts').show();
- } else {
- jQuery('#proxy_authtype_opts').hide();
- }
-}
-
-function tlsauth_change() {
-
-<?php if (!$pconfig['tls']): ?>
- if (document.iform.tlsauth_enable.checked) {
- document.getElementById("tlsauth_opts").style.display="";
- } else {
- document.getElementById("tlsauth_opts").style.display="none";
- }
-<?php endif; ?>
-
- autotls_change();
-}
-
-function autotls_change() {
-
-<?php if (!$pconfig['tls']): ?>
- autocheck = document.iform.autotls_enable.checked;
-<?php else: ?>
- autocheck = false;
-<?php endif; ?>
-
- if (document.iform.tlsauth_enable.checked && !autocheck) {
- document.getElementById("autotls_opts").style.display="";
- } else {
- document.getElementById("autotls_opts").style.display="none";
- }
-}
-
-//]]>
-</script>
-<?php
-if (!$savemsg) {
- $savemsg = "";
-}
-
-if ($input_errors) {
- print_input_errors($input_errors);
-}
-if ($savemsg) {
- print_info_box($savemsg);
-}
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn openvpn client">
- <tr>
- <td class="tabnavtbl">
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Server"), false, "vpn_openvpn_server.php");
- $tab_array[] = array(gettext("Client"), true, "vpn_openvpn_client.php");
- $tab_array[] = array(gettext("Client Specific Overrides"), false, "vpn_openvpn_csc.php");
- $tab_array[] = array(gettext("Wizards"), false, "wizard.php?xml=openvpn_wizard.xml");
- add_package_tabs("openvpn-client-export", $tab_array);
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td class="tabcont">
-
- <?php if ($act == "new" || $act == "edit"): ?>
-
- <form action="vpn_openvpn_client.php" method="post" name="iform" id="iform" onsubmit="presubmit()">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="general information">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("General information"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="0" cellspacing="0" summary="enable disable client">
- <tr>
- <td>
- <?php set_checked($pconfig['disable'], $chk); ?>
- <input name="disable" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- &nbsp;
- <span class="vexpl">
- <strong><?=gettext("Disable this client"); ?></strong><br />
- </span>
- </td>
- </tr>
- </table>
- <?=gettext("Set this option to disable this client without removing it from the list"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Server Mode");?></td>
- <td width="78%" class="vtable">
- <select name="mode" id="mode" class="formselect" onchange="mode_change()">
- <?php
- foreach ($openvpn_client_modes as $name => $desc):
- $selected = "";
- if ($pconfig['mode'] == $name) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$name;?>" <?=$selected;?>><?=$desc;?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol");?></td>
- <td width="78%" class="vtable">
- <select name='protocol' class="formselect">
- <?php
- foreach ($openvpn_prots as $prot):
- $selected = "";
- if ($pconfig['protocol'] == $prot) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$prot;?>" <?=$selected;?>><?=$prot;?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Device mode");?></td>
- <td width="78%" class="vtable">
- <select name='dev_mode' class="formselect" onchange="dev_mode_change()">
- <?php
- foreach ($openvpn_dev_mode as $mode):
- $selected = "";
- if ($pconfig['dev_mode'] == $mode) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$mode;?>" <?=$selected;?>><?=$mode;?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
- <td width="78%" class="vtable">
- <select name="interface" class="formselect">
- <?php
- $interfaces = get_configured_interface_with_descr();
- $carplist = get_configured_carp_interface_list();
- foreach ($carplist as $cif => $carpip) {
- $interfaces[$cif.'|'.$carpip] = $carpip." (".get_vip_descr($carpip).")";
- }
- $aliaslist = get_configured_ip_aliases_list();
- foreach ($aliaslist as $aliasip => $aliasif) {
- $interfaces[$aliasif.'|'.$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
- }
- $grouplist = return_gateway_groups_array();
- foreach ($grouplist as $name => $group) {
- if ($group['ipprotocol'] != inet) {
- continue;
- }
- if ($group[0]['vip'] <> "") {
- $vipif = $group[0]['vip'];
- } else {
- $vipif = $group[0]['int'];
- }
- $interfaces[$name] = "GW Group {$name}";
- }
- $interfaces['lo0'] = "Localhost";
- $interfaces['any'] = "any";
- foreach ($interfaces as $iface => $ifacename):
- $selected = "";
- if ($iface == $pconfig['interface']) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$iface;?>" <?=$selected;?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
- <?php endforeach; ?>
- </select> <br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Local port");?></td>
- <td width="78%" class="vtable">
- <input name="local_port" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($pconfig['local_port']);?>" />
- <br />
- <?=gettext("Set this option if you would like to bind to a specific port. Leave this blank or enter 0 for a random dynamic port."); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Server host or address");?></td>
- <td width="78%" class="vtable">
- <input name="server_addr" type="text" class="formfld unknown" size="30" value="<?=htmlspecialchars($pconfig['server_addr']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Server port");?></td>
- <td width="78%" class="vtable">
- <input name="server_port" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($pconfig['server_port']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Proxy host or address");?></td>
- <td width="78%" class="vtable">
- <input name="proxy_addr" type="text" class="formfld unknown" size="30" value="<?=htmlspecialchars($pconfig['proxy_addr']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Proxy port");?></td>
- <td width="78%" class="vtable">
- <input name="proxy_port" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($pconfig['proxy_port']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Proxy authentication extra options");?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="proxy authentication">
- <tr>
- <td align="right" width="25%">
- <span class="vexpl">
- &nbsp;<?=gettext("Authentication method"); ?> :&nbsp;
- </span>
- </td>
- <td>
- <select name="proxy_authtype" id="proxy_authtype" class="formfld select" onchange="useproxy_changed()">
- <option value="none" <?php if ($pconfig['proxy_authtype'] == "none") echo "selected=\"selected\""; ?>><?=gettext("none"); ?></option>
- <option value="basic" <?php if ($pconfig['proxy_authtype'] == "basic") echo "selected=\"selected\""; ?>><?=gettext("basic"); ?></option>
- <option value="ntlm" <?php if ($pconfig['proxy_authtype'] == "ntlm") echo "selected=\"selected\""; ?>><?=gettext("ntlm"); ?></option>
- </select>
- </td>
- </tr>
- </table>
- <br />
- <table border="0" cellpadding="2" cellspacing="0" id="proxy_authtype_opts" style="display:none" summary="proxy authentication options">
- <tr>
- <td align="right" width="25%">
- <span class="vexpl">
- &nbsp;<?=gettext("Username"); ?> :&nbsp;
- </span>
- </td>
- <td>
- <input name="proxy_user" id="proxy_user" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['proxy_user']);?>" />
- </td>
- </tr>
- <tr>
- <td align="right" width="25%">
- <span class="vexpl">
- &nbsp;<?=gettext("Password"); ?> :&nbsp;
- </span>
- </td>
- <td>
- <input name="proxy_passwd" id="proxy_passwd" type="password" class="formfld pwd" size="20" value="<?=htmlspecialchars($pconfig['proxy_passwd']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Server host name resolution"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="server host name resolution">
- <tr>
- <td>
- <?php set_checked($pconfig['resolve_retry'], $chk); ?>
- <input name="resolve_retry" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Infinitely resolve server"); ?>
- </span>
- </td>
- </tr>
- </table>
- <?=gettext("Continuously attempt to resolve the server host " .
- "name. Useful when communicating with a server " .
- "that is not permanently connected to the Internet"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="description" type="text" class="formfld unknown" size="30" value="<?=htmlspecialchars($pconfig['description']);?>" />
- <br />
- <?=gettext("You may enter a description here for your reference (not parsed)"); ?>.
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr id='userpassheader'>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("User Authentication Settings"); ?></td>
- </tr>
- <tr id='userpass'>
- <td width="22%" valign="top" class="vncell"><?=gettext("User name/pass"); ?></td>
- <td width="78%" class="vtable">
- <?=gettext("Leave empty when no user name and/or password are needed."); ?>
- <br/>
- <table border="0" cellpadding="2" cellspacing="0" summary="user name password">
- <tr>
- <td align="right" width="25%">
- <span class="vexpl">
- &nbsp;<?=gettext("Username"); ?> :&nbsp;
- </span>
- </td>
- <td>
- <input name="auth_user" id="auth_user" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['auth_user']);?>" />
- </td>
- </tr>
- <tr>
- <td align="right" width="25%">
- <span class="vexpl">
- &nbsp;<?=gettext("Password"); ?> :&nbsp;
- </span>
- </td>
- <td>
- <input name="auth_pass" id="auth_pass" type="password" class="formfld pwd" size="20" value="<?=htmlspecialchars($pconfig['auth_pass']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Cryptographic Settings"); ?></td>
- </tr>
- <tr id="tls">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("TLS Authentication"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="tls authentication">
- <tr>
- <td>
- <?php set_checked($pconfig['tlsauth_enable'], $chk); ?>
- <input name="tlsauth_enable" id="tlsauth_enable" type="checkbox" value="yes" <?=$chk;?> onclick="tlsauth_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Enable authentication of TLS packets"); ?>.
- </span>
- </td>
- </tr>
- </table>
- <?php if (!$pconfig['tls']): ?>
- <table border="0" cellpadding="2" cellspacing="0" id="tlsauth_opts" summary="tls authentication options">
- <tr>
- <td>
- <?php set_checked($pconfig['autotls_enable'], $chk); ?>
- <input name="autotls_enable" id="autotls_enable" type="checkbox" value="yes" <?=$chk;?> onclick="autotls_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Automatically generate a shared TLS authentication key"); ?>.
- </span>
- </td>
- </tr>
- </table>
- <?php endif; ?>
- <table border="0" cellpadding="2" cellspacing="0" id="autotls_opts" summary="tls authentication options">
- <tr>
- <td>
- <textarea name="tls" cols="65" rows="7" class="formpre"><?=htmlspecialchars($pconfig['tls']);?></textarea>
- <br />
- <?=gettext("Paste your shared key here"); ?>.
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr id="tls_ca">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Peer Certificate Authority"); ?></td>
- <td width="78%" class="vtable">
- <?php if (count($a_ca)): ?>
- <select name='caref' class="formselect">
- <?php
- foreach ($a_ca as $ca):
- $selected = "";
- if ($pconfig['caref'] == $ca['refid']) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$ca['refid'];?>" <?=$selected;?>><?=htmlspecialchars($ca['descr']);?></option>
- <?php endforeach; ?>
- </select>
- <?php else: ?>
- <b>No Certificate Authorities defined.</b> <br />Create one under <a href="system_camanager.php">System &gt; Cert Manager</a>.
- <?php endif; ?>
- </td>
- </tr>
- <tr id="tls_cert">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Client Certificate"); ?></td>
- <td width="78%" class="vtable">
- <select name='certref' class="formselect">
- <?php
- foreach ($a_cert as $cert):
- $selected = "";
- $caname = "";
- $inuse = "";
- $revoked = "";
- $ca = lookup_ca($cert['caref']);
- if ($ca) {
- $caname = " (CA: " . htmlspecialchars($ca['descr']) . ")";
- }
- if ($pconfig['certref'] == $cert['refid']) {
- $selected = "selected=\"selected\"";
- }
- if (cert_in_use($cert['refid'])) {
- $inuse = " *In Use";
- }
- if (is_cert_revoked($cert)) {
- $revoked = " *Revoked";
- }
- ?>
- <option value="<?=$cert['refid'];?>" <?=$selected;?>><?=htmlspecialchars($cert['descr']) . $caname . $inuse . $revoked;?></option>
- <?php endforeach; ?>
- <option value="" <?PHP if (empty($pconfig['certref'])) echo "selected=\"selected\""; ?>>None (Username and/or Password required)</option>
- </select>
- <?php if (!count($a_cert)): ?>
- <b>No Certificates defined.</b> <br />Create one under <a href="system_certmanager.php">System &gt; Cert Manager</a> if one is required for this connection.
- <?php endif; ?>
- </td>
- </tr>
- <tr id="psk">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Shared Key"); ?></td>
- <td width="78%" class="vtable">
- <?php if (!$pconfig['shared_key']): ?>
- <table border="0" cellpadding="2" cellspacing="0" summary="shared key">
- <tr>
- <td>
- <?php set_checked($pconfig['autokey_enable'], $chk); ?>
- <input name="autokey_enable" type="checkbox" value="yes" <?=$chk;?> onclick="autokey_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Automatically generate a shared key"); ?>.
- </span>
- </td>
- </tr>
- </table>
- <?php endif; ?>
- <table border="0" cellpadding="2" cellspacing="0" id="autokey_opts" summary="shared key options">
- <tr>
- <td>
- <textarea name="shared_key" cols="65" rows="7" class="formpre"><?=htmlspecialchars($pconfig['shared_key']);?></textarea>
- <br />
- <?=gettext("Paste your shared key here"); ?>.
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Encryption algorithm"); ?></td>
- <td width="78%" class="vtable">
- <select name="crypto" class="formselect">
- <?php
- $cipherlist = openvpn_get_cipherlist();
- foreach ($cipherlist as $name => $desc):
- $selected = "";
- if ($name == $pconfig['crypto']) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$name;?>"<?=$selected?>>
- <?=htmlspecialchars($desc);?>
- </option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Auth Digest Algorithm"); ?></td>
- <td width="78%" class="vtable">
- <select name="digest" class="formselect">
- <?php
- $digestlist = openvpn_get_digestlist();
- foreach ($digestlist as $name => $desc):
- $selected = "";
- if ($name == $pconfig['digest']) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$name;?>"<?=$selected?>>
- <?=htmlspecialchars($desc);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br /><?PHP echo gettext("NOTE: Leave this set to SHA1 unless the server is set to match. SHA1 is the default for OpenVPN."); ?>
- </td>
- </tr>
- <tr id="engine">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Hardware Crypto"); ?></td>
- <td width="78%" class="vtable">
- <select name="engine" class="formselect">
- <?php
- $engines = openvpn_get_engines();
- foreach ($engines as $name => $desc):
- $selected = "";
- if ($name == $pconfig['engine']) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$name;?>"<?=$selected?>>
- <?=htmlspecialchars($desc);?>
- </option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Tunnel Settings"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv4 Tunnel Network"); ?></td>
- <td width="78%" class="vtable">
- <input name="tunnel_network" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['tunnel_network']);?>" />
- <br />
- <?=gettext("This is the virtual network used for private " .
- "communications between this client and the " .
- "server expressed using CIDR (eg. 10.0.8.0/24). " .
- "The first network address is assumed to be the " .
- "server address and the second network address " .
- "will be assigned to the client virtual " .
- "interface"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Tunnel Network"); ?></td>
- <td width="78%" class="vtable">
- <input name="tunnel_networkv6" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['tunnel_networkv6']);?>" />
- <br />
- <?=gettext("This is the IPv6 virtual network used for private " .
- "communications between this client and the " .
- "server expressed using CIDR (eg. fe80::/64). " .
- "The first network address is assumed to be the " .
- "server address and the second network address " .
- "will be assigned to the client virtual " .
- "interface"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv4 Remote Network/s"); ?></td>
- <td width="78%" class="vtable">
- <input name="remote_network" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['remote_network']);?>" />
- <br />
- <?=gettext("These are the IPv4 networks that will be routed through " .
- "the tunnel, so that a site-to-site VPN can be " .
- "established without manually changing the routing tables. " .
- "Expressed as a comma-separated list of one or more CIDR ranges. " .
- "If this is a site-to-site VPN, enter the " .
- "remote LAN/s here. You may leave this blank to " .
- "only communicate with other clients"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Remote Network/s"); ?></td>
- <td width="78%" class="vtable">
- <input name="remote_networkv6" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['remote_networkv6']);?>" />
- <br />
- <?=gettext("These are the IPv6 networks that will be routed through " .
- "the tunnel, so that a site-to-site VPN can be " .
- "established without manually changing the routing tables. " .
- "Expressed as a comma-separated list of one or more IP/PREFIX. " .
- "If this is a site-to-site VPN, enter the " .
- "remote LAN/s here. You may leave this blank to " .
- "only communicate with other clients"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Limit outgoing bandwidth");?></td>
- <td width="78%" class="vtable">
- <input name="use_shaper" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($pconfig['use_shaper']);?>" />
- <br />
- <?=gettext("Maximum outgoing bandwidth for this tunnel. " .
- "Leave empty for no limit. The input value has " .
- "to be something between 100 bytes/sec and 100 " .
- "Mbytes/sec (entered as bytes per second)"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Compression"); ?></td>
- <td width="78%" class="vtable">
- <select name="compression" class="formselect">
- <?php
- foreach ($openvpn_compression_modes as $cmode => $cmodedesc):
- $selected = "";
- if ($cmode == $pconfig['compression']) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?= $cmode ?>" <?= $selected ?>><?= $cmodedesc ?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <?=gettext("Compress tunnel packets using the LZO algorithm. Adaptive compression will dynamically disable compression for a period of time if OpenVPN detects that the data in the packets is not being compressed efficiently."); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Type-of-Service"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="type-of-service">
- <tr>
- <td>
- <?php set_checked($pconfig['passtos'], $chk); ?>
- <input name="passtos" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Set the TOS IP header value of tunnel packets to match the encapsulated packet value"); ?>.
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
- <tr id="chkboxNoTunIPv6">
- <td width="22%" valign="top" class="vncell"><?=gettext("Disable IPv6"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="disable-ipv6">
- <tr>
- <td>
- <?php set_checked($pconfig['no_tun_ipv6'], $chk); ?>
- <input name="no_tun_ipv6" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Don't forward IPv6 traffic"); ?>.
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
- <tr id="chkboxRouteNoPull">
- <td width="22%" valign="top" class="vncell"><?=gettext("Don't pull routes"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="dont-pull-routes">
- <tr>
- <td>
- <?php set_checked($pconfig['route_no_pull'], $chk); ?>
- <input name="route_no_pull" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("This option effectively bars the server from adding routes to the client's routing table, however note that this option still allows the server to set the TCP/IP properties of the client's TUN/TAP interface"); ?>.
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
- <tr id="chkboxRouteNoExec">
- <td width="22%" valign="top" class="vncell"><?=gettext("Don't add/remove routes"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="dont-exec-routes">
- <tr>
- <td>
- <?php set_checked($pconfig['route_no_exec'], $chk); ?>
- <input name="route_no_exec" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Don't add or remove routes automatically. Instead pass routes to "); ?> <strong>--route-up</strong> <?=gettext("script using environmental variables"); ?>.
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" id="client_opts" summary="advance configuration">
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Advanced configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Advanced"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="advance configuration">
- <tr>
- <td>
- <textarea rows="6" cols="78" name="custom_options" id="custom_options"><?=htmlspecialchars($pconfig['custom_options']);?></textarea><br />
- <?=gettext("Enter any additional options you would like to add to the OpenVPN client configuration here, separated by a semicolon"); ?><br />
- <?=gettext("EXAMPLE:"); ?> <strong>remote server.example.com 1194;</strong> or <strong>remote 1.2.3.4 1194;</strong>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
- <tr id="comboboxVerbosityLevel">
- <td width="22%" valign="top" class="vncell"><?=gettext("Verbosity level");?></td>
- <td width="78%" class="vtable">
- <select name="verbosity_level" class="formselect">
- <?php
- foreach ($openvpn_verbosity_level as $verb_value => $verb_desc):
- $selected = "";
- if ($pconfig['verbosity_level'] == $verb_value) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$verb_value;?>" <?=$selected;?>><?=$verb_desc;?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <?=gettext("Each level shows all info from the previous levels. Level 3 is recommended if you want a good summary of what's happening without being swamped by output"); ?>.<br /> <br />
- <strong>none</strong> -- <?=gettext("No output except fatal errors"); ?>. <br />
- <strong>default</strong>-<strong>4</strong> -- <?=gettext("Normal usage range"); ?>. <br />
- <strong>5</strong> -- <?=gettext("Output R and W characters to the console for each packet read and write, uppercase is used for TCP/UDP packets and lowercase is used for TUN/TAP packets"); ?>. <br />
- <strong>6</strong>-<strong>11</strong> -- <?=gettext("Debug info range"); ?>.
- </td>
- </tr>
-
- </table>
-
- <br />
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="icons">
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input name="act" type="hidden" value="<?=$act;?>" />
- <?php if (isset($id) && $a_client[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </form>
-
- <?php else: ?>
-
- <table class="sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="list of openvpn clients">
- <thead>
- <tr>
- <td width="10%" class="listhdrr"><?=gettext("Disabled"); ?></td>
- <td width="10%" class="listhdrr"><?=gettext("Protocol"); ?></td>
- <td width="30%" class="listhdrr"><?=gettext("Server"); ?></td>
- <td width="40%" class="listhdrr"><?=gettext("Description"); ?></td>
- <td width="10%" class="list"></td>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <td class="list" colspan="4"></td>
- <td class="list">
- <a href="vpn_openvpn_client.php?act=new"><img src="./themes/<?=$g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("add client"); ?>" width="17" height="17" border="0" alt="add" />
- </a>
- </td>
- </tr>
- <tr>
- <td colspan="4">
- <p>
- <?=gettext("Additional OpenVPN clients can be added here.");?>
- </p>
- </td>
- </tr>
- </tfoot>
- <tbody>
- <?php
- $i = 0;
- foreach ($a_client as $client):
- $disabled = "NO";
- if (isset($client['disable'])) {
- $disabled = "YES";
- }
- $server = "{$client['server_addr']}:{$client['server_port']}";
- ?>
- <tr ondblclick="document.location='vpn_openvpn_client.php?act=edit&amp;id=<?=$i;?>'">
- <td class="listlr">
- <?=$disabled;?>
- </td>
- <td class="listr">
- <?=htmlspecialchars($client['protocol']);?>
- </td>
- <td class="listr">
- <?=htmlspecialchars($server);?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($client['description']);?>
- </td>
- <td valign="middle" class="list nowrap">
- <a href="vpn_openvpn_client.php?act=edit&amp;id=<?=$i;?>">
- <img src="./themes/<?=$g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("edit client"); ?>" width="17" height="17" border="0" alt="edit" />
- </a>
- &nbsp;
- <a href="vpn_openvpn_client.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this client?"); ?>')">
- <img src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete client"); ?>" width="17" height="17" border="0" alt="delete" />
- </a>
- </td>
- </tr>
- <?php
- $i++;
- endforeach;
- ?>
- <tr style="display:none;"><td></td></tr>
- </tbody>
- </table>
-
- <?php endif; ?>
-
- </td>
- </tr>
-</table>
-<script type="text/javascript">
-//<![CDATA[
-mode_change();
-autokey_change();
-tlsauth_change();
-useproxy_changed();
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
-
-<?php
-
-/* local utility functions */
-
-function set_checked($var, & $chk) {
- if ($var) {
- $chk = "checked=\"checked\"";
- } else {
- $chk = "";
- }
-}
-
-?>
diff --git a/usr/local/www/vpn_openvpn_csc.php b/usr/local/www/vpn_openvpn_csc.php
deleted file mode 100644
index 356db7f..0000000
--- a/usr/local/www/vpn_openvpn_csc.php
+++ /dev/null
@@ -1,868 +0,0 @@
-<?php
-/*
- vpn_openvpn_csc.php
-
- Copyright (C) 2008 Shrew Soft Inc.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-openvpn-csc
-##|*NAME=OpenVPN: Client Specific Override page
-##|*DESCR=Allow access to the 'OpenVPN: Client Specific Override' page.
-##|*MATCH=vpn_openvpn_csc.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("openvpn.inc");
-require_once("pkg-utils.inc");
-
-$pgtitle = array(gettext("OpenVPN"), gettext("Client Specific Override"));
-$shortcut_section = "openvpn";
-
-if (!is_array($config['openvpn']['openvpn-csc'])) {
- $config['openvpn']['openvpn-csc'] = array();
-}
-
-$a_csc = &$config['openvpn']['openvpn-csc'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-$act = $_GET['act'];
-if (isset($_POST['act'])) {
- $act = $_POST['act'];
-}
-
-if ($_GET['act'] == "del") {
-
- if (!$a_csc[$id]) {
- pfSenseHeader("vpn_openvpn_csc.php");
- exit;
- }
-
- openvpn_delete_csc($a_csc[$id]);
- unset($a_csc[$id]);
- write_config();
- $savemsg = gettext("Client Specific Override successfully deleted")."<br />";
-}
-
-if ($_GET['act'] == "edit") {
-
- if (isset($id) && $a_csc[$id]) {
- $pconfig['custom_options'] = $a_csc[$id]['custom_options'];
- $pconfig['disable'] = isset($a_csc[$id]['disable']);
- $pconfig['common_name'] = $a_csc[$id]['common_name'];
- $pconfig['block'] = $a_csc[$id]['block'];
- $pconfig['description'] = $a_csc[$id]['description'];
-
- $pconfig['tunnel_network'] = $a_csc[$id]['tunnel_network'];
- $pconfig['local_network'] = $a_csc[$id]['local_network'];
- $pconfig['local_networkv6'] = $a_csc[$id]['local_networkv6'];
- $pconfig['remote_network'] = $a_csc[$id]['remote_network'];
- $pconfig['remote_networkv6'] = $a_csc[$id]['remote_networkv6'];
- $pconfig['gwredir'] = $a_csc[$id]['gwredir'];
-
- $pconfig['push_reset'] = $a_csc[$id]['push_reset'];
-
- $pconfig['dns_domain'] = $a_csc[$id]['dns_domain'];
- if ($pconfig['dns_domain']) {
- $pconfig['dns_domain_enable'] = true;
- }
-
- $pconfig['dns_server1'] = $a_csc[$id]['dns_server1'];
- $pconfig['dns_server2'] = $a_csc[$id]['dns_server2'];
- $pconfig['dns_server3'] = $a_csc[$id]['dns_server3'];
- $pconfig['dns_server4'] = $a_csc[$id]['dns_server4'];
- if ($pconfig['dns_server1'] ||
- $pconfig['dns_server2'] ||
- $pconfig['dns_server3'] ||
- $pconfig['dns_server4']) {
- $pconfig['dns_server_enable'] = true;
- }
-
- $pconfig['ntp_server1'] = $a_csc[$id]['ntp_server1'];
- $pconfig['ntp_server2'] = $a_csc[$id]['ntp_server2'];
- if ($pconfig['ntp_server1'] ||
- $pconfig['ntp_server2']) {
- $pconfig['ntp_server_enable'] = true;
- }
-
- $pconfig['netbios_enable'] = $a_csc[$id]['netbios_enable'];
- $pconfig['netbios_ntype'] = $a_csc[$id]['netbios_ntype'];
- $pconfig['netbios_scope'] = $a_csc[$id]['netbios_scope'];
-
- $pconfig['wins_server1'] = $a_csc[$id]['wins_server1'];
- $pconfig['wins_server2'] = $a_csc[$id]['wins_server2'];
- if ($pconfig['wins_server1'] ||
- $pconfig['wins_server2']) {
- $pconfig['wins_server_enable'] = true;
- }
-
- $pconfig['nbdd_server1'] = $a_csc[$id]['nbdd_server1'];
- if ($pconfig['nbdd_server1']) {
- $pconfig['nbdd_server_enable'] = true;
- }
- }
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if ($result = openvpn_validate_cidr($pconfig['tunnel_network'], 'Tunnel network')) {
- $input_errors[] = $result;
- }
-
- if ($result = openvpn_validate_cidr($pconfig['local_network'], 'IPv4 Local Network', true, "ipv4")) {
- $input_errors[] = $result;
- }
-
- if ($result = openvpn_validate_cidr($pconfig['local_networkv6'], 'IPv6 Local Network', true, "ipv6")) {
- $input_errors[] = $result;
- }
-
- if ($result = openvpn_validate_cidr($pconfig['remote_network'], 'IPv4 Remote Network', true, "ipv4")) {
- $input_errors[] = $result;
- }
-
- if ($result = openvpn_validate_cidr($pconfig['remote_networkv6'], 'IPv6 Remote Network', true, "ipv6")) {
- $input_errors[] = $result;
- }
-
- if ($pconfig['dns_server_enable']) {
- if (!empty($pconfig['dns_server1']) && !is_ipaddr(trim($pconfig['dns_server1']))) {
- $input_errors[] = gettext("The field 'DNS Server #1' must contain a valid IP address");
- }
- if (!empty($pconfig['dns_server2']) && !is_ipaddr(trim($pconfig['dns_server2']))) {
- $input_errors[] = gettext("The field 'DNS Server #2' must contain a valid IP address");
- }
- if (!empty($pconfig['dns_server3']) && !is_ipaddr(trim($pconfig['dns_server3']))) {
- $input_errors[] = gettext("The field 'DNS Server #3' must contain a valid IP address");
- }
- if (!empty($pconfig['dns_server4']) && !is_ipaddr(trim($pconfig['dns_server4']))) {
- $input_errors[] = gettext("The field 'DNS Server #4' must contain a valid IP address");
- }
- }
-
- if ($pconfig['ntp_server_enable']) {
- if (!empty($pconfig['ntp_server1']) && !is_ipaddr(trim($pconfig['ntp_server1']))) {
- $input_errors[] = gettext("The field 'NTP Server #1' must contain a valid IP address");
- }
- if (!empty($pconfig['ntp_server2']) && !is_ipaddr(trim($pconfig['ntp_server2']))) {
- $input_errors[] = gettext("The field 'NTP Server #2' must contain a valid IP address");
- }
- if (!empty($pconfig['ntp_server3']) && !is_ipaddr(trim($pconfig['ntp_server3']))) {
- $input_errors[] = gettext("The field 'NTP Server #3' must contain a valid IP address");
- }
- if (!empty($pconfig['ntp_server4']) && !is_ipaddr(trim($pconfig['ntp_server4']))) {
- $input_errors[] = gettext("The field 'NTP Server #4' must contain a valid IP address");
- }
- }
-
- if ($pconfig['netbios_enable']) {
- if ($pconfig['wins_server_enable']) {
- if (!empty($pconfig['wins_server1']) && !is_ipaddr(trim($pconfig['wins_server1']))) {
- $input_errors[] = gettext("The field 'WINS Server #1' must contain a valid IP address");
- }
- if (!empty($pconfig['wins_server2']) && !is_ipaddr(trim($pconfig['wins_server2']))) {
- $input_errors[] = gettext("The field 'WINS Server #2' must contain a valid IP address");
- }
- }
- if ($pconfig['nbdd_server_enable']) {
- if (!empty($pconfig['nbdd_server1']) && !is_ipaddr(trim($pconfig['nbdd_server1']))) {
- $input_errors[] = gettext("The field 'NetBIOS Data Distribution Server #1' must contain a valid IP address");
- }
- }
- }
-
- $reqdfields[] = 'common_name';
- $reqdfieldsn[] = 'Common name';
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (!$input_errors) {
-
- $csc = array();
-
- $csc['custom_options'] = $pconfig['custom_options'];
- if ($_POST['disable'] == "yes") {
- $csc['disable'] = true;
- }
- $csc['common_name'] = $pconfig['common_name'];
- $csc['block'] = $pconfig['block'];
- $csc['description'] = $pconfig['description'];
-
- $csc['tunnel_network'] = $pconfig['tunnel_network'];
- $csc['local_network'] = $pconfig['local_network'];
- $csc['local_networkv6'] = $pconfig['local_networkv6'];
- $csc['remote_network'] = $pconfig['remote_network'];
- $csc['remote_networkv6'] = $pconfig['remote_networkv6'];
- $csc['gwredir'] = $pconfig['gwredir'];
-
- $csc['push_reset'] = $pconfig['push_reset'];
-
- if ($pconfig['dns_domain_enable']) {
- $csc['dns_domain'] = $pconfig['dns_domain'];
- }
-
- if ($pconfig['dns_server_enable']) {
- $csc['dns_server1'] = $pconfig['dns_server1'];
- $csc['dns_server2'] = $pconfig['dns_server2'];
- $csc['dns_server3'] = $pconfig['dns_server3'];
- $csc['dns_server4'] = $pconfig['dns_server4'];
- }
-
- if ($pconfig['ntp_server_enable']) {
- $csc['ntp_server1'] = $pconfig['ntp_server1'];
- $csc['ntp_server2'] = $pconfig['ntp_server2'];
- }
-
- $csc['netbios_enable'] = $pconfig['netbios_enable'];
- $csc['netbios_ntype'] = $pconfig['netbios_ntype'];
- $csc['netbios_scope'] = $pconfig['netbios_scope'];
-
- if ($pconfig['netbios_enable']) {
-
- if ($pconfig['wins_server_enable']) {
- $csc['wins_server1'] = $pconfig['wins_server1'];
- $csc['wins_server2'] = $pconfig['wins_server2'];
- }
-
- if ($pconfig['dns_server_enable']) {
- $csc['nbdd_server1'] = $pconfig['nbdd_server1'];
- }
- }
-
- if (isset($id) && $a_csc[$id]) {
- $old_csc_cn = $a_csc[$id]['common_name'];
- $a_csc[$id] = $csc;
- } else {
- $a_csc[] = $csc;
- }
-
- if (!empty($old_csc_cn)) {
- openvpn_cleanup_csc($old_csc_cn);
- }
- openvpn_resync_csc($csc);
- write_config();
-
- header("Location: vpn_openvpn_csc.php");
- exit;
- }
-}
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-
-function dns_domain_change() {
-
- if (document.iform.dns_domain_enable.checked) {
- document.getElementById("dns_domain_data").style.display="";
- } else {
- document.getElementById("dns_domain_data").style.display="none";
- }
-}
-
-function dns_server_change() {
-
- if (document.iform.dns_server_enable.checked) {
- document.getElementById("dns_server_data").style.display="";
- } else {
- document.getElementById("dns_server_data").style.display="none";
- }
-}
-
-function wins_server_change() {
-
- if (document.iform.wins_server_enable.checked) {
- document.getElementById("wins_server_data").style.display="";
- } else {
- document.getElementById("wins_server_data").style.display="none";
- }
-}
-
-function ntp_server_change() {
-
- if (document.iform.ntp_server_enable.checked) {
- document.getElementById("ntp_server_data").style.display="";
- } else {
- document.getElementById("ntp_server_data").style.display="none";
- }
-}
-
-function netbios_change() {
-
- if (document.iform.netbios_enable.checked) {
- document.getElementById("netbios_data").style.display="";
- document.getElementById("wins_opts").style.display="";
- } else {
- document.getElementById("netbios_data").style.display="none";
- document.getElementById("wins_opts").style.display="none";
- }
-}
-
-//]]>
-</script>
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn openvpn csc">
- <tr>
- <td class="tabnavtbl">
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Server"), false, "vpn_openvpn_server.php");
- $tab_array[] = array(gettext("Client"), false, "vpn_openvpn_client.php");
- $tab_array[] = array(gettext("Client Specific Overrides"), true, "vpn_openvpn_csc.php");
- $tab_array[] = array(gettext("Wizards"), false, "wizard.php?xml=openvpn_wizard.xml");
- add_package_tabs("openvpn-client-export", $tab_array);
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td class="tabcont">
-
- <?php if ($act == "new" || $act == "edit"): ?>
-
- <form action="vpn_openvpn_csc.php" method="post" name="iform" id="iform" onsubmit="presubmit()">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="general information">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("General information"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="0" cellspacing="0" summary="enable disable">
- <tr>
- <td>
- <?php set_checked($pconfig['disable'], $chk); ?>
- <input name="disable" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- &nbsp;
- <span class="vexpl">
- <strong><?=gettext("Disable this override"); ?></strong><br />
- </span>
- </td>
- </tr>
- </table>
- <?=gettext("Set this option to disable this client-specific override without removing it from the list"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Common name"); ?></td>
- <td width="78%" class="vtable">
- <input name="common_name" type="text" class="formfld unknown" size="30" value="<?=htmlspecialchars($pconfig['common_name']);?>" />
- <br />
- <?=gettext("Enter the client's X.509 common name here"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="description" type="text" class="formfld unknown" size="30" value="<?=htmlspecialchars($pconfig['description']);?>" />
- <br />
- <?=gettext("You may enter a description here for your reference (not parsed)"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Connection blocking"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="connection blocking">
- <tr>
- <td>
- <?php set_checked($pconfig['block'], $chk); ?>
- <input name="block" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Block this client connection based on its common name"); ?>.
- </span>
- </td>
- </tr>
- </table>
- <?=gettext("Don't use this option to permanently disable a " .
- "client due to a compromised key or password. " .
- "Use a CRL (certificate revocation list) instead"); ?>.
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Tunnel Settings"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Tunnel Network"); ?></td>
- <td width="78%" class="vtable">
- <input name="tunnel_network" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['tunnel_network']);?>" />
- <br />
- <?=gettext("This is the virtual network used for private " .
- "communications between this client and the " .
- "server expressed using CIDR (eg. 10.0.8.0/24). " .
- "The first network address is assumed to be the " .
- "server address and the second network address " .
- "will be assigned to the client virtual " .
- "interface"); ?>.
- </td>
- </tr>
- <tr id="local_optsv4">
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv4 Local Network/s"); ?></td>
- <td width="78%" class="vtable">
- <input name="local_network" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['local_network']);?>" />
- <br />
- <?=gettext("These are the IPv4 networks that will be accessible " .
- "from this particular client. Expressed as a comma-separated list of one or more CIDR ranges."); ?>
- <br /><?=gettext("NOTE: You do not need to specify networks here if they have " .
- "already been defined on the main server configuration.");?>
- </td>
- </tr>
- <tr id="local_optsv6">
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Local Network/s"); ?></td>
- <td width="78%" class="vtable">
- <input name="local_networkv6" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['local_networkv6']);?>" />
- <br />
- <?=gettext("These are the IPv6 networks that will be accessible " .
- "from this particular client. Expressed as a comma-separated list of one or more IP/PREFIX networks."); ?>
- <br /><?=gettext("NOTE: You do not need to specify networks here if they have " .
- "already been defined on the main server configuration.");?>
- </td>
- </tr>
- <tr id="remote_optsv4">
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv4 Remote Network/s"); ?></td>
- <td width="78%" class="vtable">
- <input name="remote_network" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['remote_network']);?>" />
- <br />
- <?=gettext("These are the IPv4 networks that will be routed " .
- "to this client specifically using iroute, so that a site-to-site " .
- "VPN can be established. " .
- "Expressed as a comma-separated list of one or more CIDR ranges. " .
- "You may leave this blank if there are no client-side networks to " .
- "be routed"); ?>.
- <br /><?=gettext("NOTE: Remember to add these subnets to the " .
- "IPv4 Remote Networks list on the corresponding OpenVPN server settings.");?>
- </td>
- </tr>
- <tr id="remote_optsv6">
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Remote Network/s"); ?></td>
- <td width="78%" class="vtable">
- <input name="remote_networkv6" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['remote_networkv6']);?>" />
- <br />
- <?=gettext("These are the IPv6 networks that will be routed " .
- "to this client specifically using iroute, so that a site-to-site " .
- "VPN can be established. " .
- "Expressed as a comma-separated list of one or more IP/PREFIX networks. " .
- "You may leave this blank if there are no client-side networks to " .
- "be routed"); ?>.
- <br /><?=gettext("NOTE: Remember to add these subnets to the " .
- "IPv6 Remote Networks list on the corresponding OpenVPN server settings.");?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Redirect Gateway"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="redirect gateway">
- <tr>
- <td>
- <?php set_checked($pconfig['gwredir'], $chk); ?>
- <input name="gwredir" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Force all client generated traffic through the tunnel"); ?>.
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Client Settings"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Server Definitions"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="server definitions">
- <tr>
- <td>
- <?php set_checked($pconfig['push_reset'], $chk); ?>
- <input name="push_reset" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Prevent this client from receiving any server-defined client settings"); ?>.
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("DNS Default Domain"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="dns default domain">
- <tr>
- <td>
- <?php set_checked($pconfig['dns_domain_enable'], $chk); ?>
- <input name="dns_domain_enable" type="checkbox" id="dns_domain_enable" value="yes" <?=$chk;?> onclick="dns_domain_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Provide a default domain name to clients"); ?><br />
- </span>
- </td>
- </tr>
- </table>
- <table border="0" cellpadding="2" cellspacing="0" id="dns_domain_data" summary="dns domain data">
- <tr>
- <td>
- <input name="dns_domain" type="text" class="formfld unknown" id="dns_domain" size="30" value="<?=htmlspecialchars($pconfig['dns_domain']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("DNS Servers"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="dns servers">
- <tr>
- <td>
- <?php set_checked($pconfig['dns_server_enable'], $chk); ?>
- <input name="dns_server_enable" type="checkbox" id="dns_server_enable" value="yes" <?=$chk;?> onclick="dns_server_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Provide a DNS server list to clients"); ?><br />
- </span>
- </td>
- </tr>
- </table>
- <table border="0" cellpadding="2" cellspacing="0" id="dns_server_data" summary="dns server list">
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #1:&nbsp;
- </span>
- <input name="dns_server1" type="text" class="formfld unknown" id="dns_server1" size="20" value="<?=htmlspecialchars($pconfig['dns_server1']);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #2:&nbsp;
- </span>
- <input name="dns_server2" type="text" class="formfld unknown" id="dns_server2" size="20" value="<?=htmlspecialchars($pconfig['dns_server2']);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #3:&nbsp;
- </span>
- <input name="dns_server3" type="text" class="formfld unknown" id="dns_server3" size="20" value="<?=htmlspecialchars($pconfig['dns_server3']);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #4:&nbsp;
- </span>
- <input name="dns_server4" type="text" class="formfld unknown" id="dns_server4" size="20" value="<?=htmlspecialchars($pconfig['dns_server4']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("NTP Servers"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="ntp servers">
- <tr>
- <td>
- <?php set_checked($pconfig['ntp_server_enable'], $chk); ?>
- <input name="ntp_server_enable" type="checkbox" id="ntp_server_enable" value="yes" <?=$chk;?> onclick="ntp_server_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Provide a NTP server list to clients"); ?><br />
- </span>
- </td>
- </tr>
- </table>
- <table border="0" cellpadding="2" cellspacing="0" id="ntp_server_data" summary="ntp server list">
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #1:&nbsp;
- </span>
- <input name="ntp_server1" type="text" class="formfld unknown" id="ntp_server1" size="20" value="<?=htmlspecialchars($pconfig['ntp_server1']);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #2:&nbsp;
- </span>
- <input name="ntp_server2" type="text" class="formfld unknown" id="ntp_server2" size="20" value="<?=htmlspecialchars($pconfig['ntp_server2']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("NetBIOS Options"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="netbios options">
- <tr>
- <td>
- <?php set_checked($pconfig['netbios_enable'], $chk); ?>
- <input name="netbios_enable" type="checkbox" id="netbios_enable" value="yes" <?=$chk;?> onclick="netbios_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Enable NetBIOS over TCP/IP"); ?><br />
- </span>
- </td>
- </tr>
- </table>
- <?=gettext("If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) will be disabled"); ?>.
- <br />
- <table border="0" cellpadding="2" cellspacing="0" id="netbios_data" summary="netbios options">
- <tr>
- <td>
- <br />
- <span class="vexpl">
- <?=gettext("Node Type"); ?>:&nbsp;
- </span>
- <select name='netbios_ntype' class="formselect">
- <?php
- foreach ($netbios_nodetypes as $type => $name):
- $selected = "";
- if ($pconfig['netbios_ntype'] == $type) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$type;?>" <?=$selected;?>><?=$name;?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <?=gettext("Possible options: b-node (broadcasts), p-node " .
- "(point-to-point name queries to a WINS server), " .
- "m-node (broadcast then query name server), and " .
- "h-node (query name server, then broadcast)"); ?>.
- </td>
- </tr>
- <tr>
- <td>
- <br />
- <span class="vexpl">
- Scope ID:&nbsp;
- </span>
- <input name="netbios_scope" type="text" class="formfld unknown" id="netbios_scope" size="30" value="<?=htmlspecialchars($pconfig['netbios_scope']);?>" />
- <br />
- <?=gettext("A NetBIOS Scope ID provides an extended naming " .
- "service for NetBIOS over TCP/IP. The NetBIOS " .
- "scope ID isolates NetBIOS traffic on a single " .
- "network to only those nodes with the same " .
- "NetBIOS scope ID"); ?>.
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr id="wins_opts">
- <td width="22%" valign="top" class="vncell"><?=gettext("WINS Servers"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="wins servers">
- <tr>
- <td>
- <?php set_checked($pconfig['wins_server_enable'], $chk); ?>
- <input name="wins_server_enable" type="checkbox" id="wins_server_enable" value="yes" <?=$chk;?> onclick="wins_server_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Provide a WINS server list to clients"); ?><br />
- </span>
- </td>
- </tr>
- </table>
- <table border="0" cellpadding="2" cellspacing="0" id="wins_server_data" summary="wins server list">
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #1:&nbsp;
- </span>
- <input name="wins_server1" type="text" class="formfld unknown" id="wins_server1" size="20" value="<?=htmlspecialchars($pconfig['wins_server1']);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #2:&nbsp;
- </span>
- <input name="wins_server2" type="text" class="formfld unknown" id="wins_server2" size="20" value="<?=htmlspecialchars($pconfig['wins_server2']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Advanced"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="advanced">
- <tr>
- <td>
- <textarea rows="6" cols="70" name="custom_options" id="custom_options"><?=$pconfig['custom_options'];?></textarea><br />
- <?=gettext("Enter any additional options you would like to add for this client specific override, separated by a semicolon"); ?><br />
- <?=gettext("EXAMPLE: push \"route 10.0.0.0 255.255.255.0\""); ?>;
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input name="act" type="hidden" value="<?=$act;?>" />
- <?php if (isset($id) && $a_csc[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </form>
-
- <?php else: ?>
-
- <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="list">
- <tr>
- <td width="10%" class="listhdrr"><?=gettext("Disabled"); ?></td>
- <td width="40%" class="listhdrr"><?=gettext("Common Name"); ?></td>
- <td width="40%" class="listhdrr"><?=gettext("Description"); ?></td>
- <td width="10%" class="list"></td>
- </tr>
- <?php
- $i = 0;
- foreach ($a_csc as $csc):
- $disabled = "NO";
- if (isset($csc['disable'])) {
- $disabled = "YES";
- }
- ?>
- <tr ondblclick="document.location='vpn_openvpn_csc.php?act=edit&amp;id=<?=$i;?>'">
- <td class="listlr">
- <?=$disabled;?>
- </td>
- <td class="listr">
- <?=htmlspecialchars($csc['common_name']);?>
- </td>
- <td class="listbg">
- <?=htmlspecialchars($csc['description']);?>
- </td>
- <td valign="middle" class="list nowrap">
- <a href="vpn_openvpn_csc.php?act=edit&amp;id=<?=$i;?>">
- <img src="./themes/<?=$g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("edit csc"); ?>" width="17" height="17" border="0" alt="edit" />
- </a>
- &nbsp;
- <a href="vpn_openvpn_csc.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this csc?"); ?>')">
- <img src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete csc"); ?>" width="17" height="17" border="0" alt="delete" />
- </a>
- </td>
- </tr>
- <?php
- $i++;
- endforeach;
- ?>
- <tr>
- <td class="list" colspan="3"></td>
- <td class="list">
- <a href="vpn_openvpn_csc.php?act=new"><img src="./themes/<?=$g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("add csc"); ?>" width="17" height="17" border="0" alt="add" />
- </a>
- </td>
- </tr>
- <tr>
- <td colspan="3">
- <p>
- <?=gettext("Additional OpenVPN client specific overrides can be added here.");?>
- </p>
- </td>
- </tr>
- </table>
-
- <?php endif; ?>
-
- </td>
- </tr>
-</table>
-<script type="text/javascript">
-//<![CDATA[
-dns_domain_change();
-dns_server_change();
-wins_server_change();
-ntp_server_change();
-netbios_change();
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
-
-<?php
-
-/* local utility functions */
-
-function set_checked($var, & $chk) {
- if ($var) {
- $chk = "checked=\"checked\"";
- } else {
- $chk = "";
- }
-}
-
-?>
diff --git a/usr/local/www/vpn_openvpn_server.php b/usr/local/www/vpn_openvpn_server.php
deleted file mode 100644
index a7ff4ce..0000000
--- a/usr/local/www/vpn_openvpn_server.php
+++ /dev/null
@@ -1,2042 +0,0 @@
-<?php
-/*
- vpn_openvpn_server.php
-
- Copyright (C) 2008 Shrew Soft Inc.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-openvpn-server
-##|*NAME=OpenVPN: Server page
-##|*DESCR=Allow access to the 'OpenVPN: Server' page.
-##|*MATCH=vpn_openvpn_server.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("openvpn.inc");
-require_once("pkg-utils.inc");
-
-if (!is_array($config['openvpn']['openvpn-server'])) {
- $config['openvpn']['openvpn-server'] = array();
-}
-
-$a_server = &$config['openvpn']['openvpn-server'];
-
-if (!is_array($config['ca'])) {
- $config['ca'] = array();
-}
-
-$a_ca =& $config['ca'];
-
-if (!is_array($config['cert'])) {
- $config['cert'] = array();
-}
-
-$a_cert =& $config['cert'];
-
-if (!is_array($config['crl'])) {
- $config['crl'] = array();
-}
-
-$a_crl =& $config['crl'];
-
-foreach ($a_crl as $cid => $acrl) {
- if (!isset($acrl['refid'])) {
- unset ($a_crl[$cid]);
- }
-}
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-$act = $_GET['act'];
-if (isset($_POST['act'])) {
- $act = $_POST['act'];
-}
-
-if (isset($id) && $a_server[$id]) {
- $vpnid = $a_server[$id]['vpnid'];
-} else {
- $vpnid = 0;
-}
-
-if ($_GET['act'] == "del") {
-
- if (!isset($a_server[$id])) {
- pfSenseHeader("vpn_openvpn_server.php");
- exit;
- }
- if (!empty($a_server[$id])) {
- openvpn_delete('server', $a_server[$id]);
- }
- unset($a_server[$id]);
- write_config();
- $savemsg = gettext("Server successfully deleted")."<br />";
-}
-
-if ($_GET['act'] == "new") {
- $pconfig['autokey_enable'] = "yes";
- $pconfig['tlsauth_enable'] = "yes";
- $pconfig['autotls_enable'] = "yes";
- $pconfig['dh_length'] = 1024;
- $pconfig['dev_mode'] = "tun";
- $pconfig['interface'] = "wan";
- $pconfig['local_port'] = openvpn_port_next('UDP');
- $pconfig['pool_enable'] = "yes";
- $pconfig['cert_depth'] = 1;
- $pconfig['verbosity_level'] = 1; // Default verbosity is 1
- // OpenVPN Defaults to SHA1
- $pconfig['digest'] = "SHA1";
-}
-
-if ($_GET['act'] == "edit") {
-
- if (isset($id) && $a_server[$id]) {
- $pconfig['disable'] = isset($a_server[$id]['disable']);
- $pconfig['mode'] = $a_server[$id]['mode'];
- $pconfig['protocol'] = $a_server[$id]['protocol'];
- $pconfig['authmode'] = $a_server[$id]['authmode'];
- $pconfig['dev_mode'] = $a_server[$id]['dev_mode'];
- $pconfig['interface'] = $a_server[$id]['interface'];
- if (!empty($a_server[$id]['ipaddr'])) {
- $pconfig['interface'] = $pconfig['interface'] . '|' . $a_server[$id]['ipaddr'];
- }
- $pconfig['local_port'] = $a_server[$id]['local_port'];
- $pconfig['description'] = $a_server[$id]['description'];
- $pconfig['custom_options'] = $a_server[$id]['custom_options'];
-
- if ($pconfig['mode'] != "p2p_shared_key") {
- if ($a_server[$id]['tls']) {
- $pconfig['tlsauth_enable'] = "yes";
- $pconfig['tls'] = base64_decode($a_server[$id]['tls']);
- }
- $pconfig['caref'] = $a_server[$id]['caref'];
- $pconfig['crlref'] = $a_server[$id]['crlref'];
- $pconfig['certref'] = $a_server[$id]['certref'];
- $pconfig['dh_length'] = $a_server[$id]['dh_length'];
- if (isset($a_server[$id]['cert_depth'])) {
- $pconfig['cert_depth'] = $a_server[$id]['cert_depth'];
- } else {
- $pconfig['cert_depth'] = 1;
- }
- if ($pconfig['mode'] == "server_tls_user") {
- $pconfig['strictusercn'] = $a_server[$id]['strictusercn'];
- }
- } else {
- $pconfig['shared_key'] = base64_decode($a_server[$id]['shared_key']);
- }
- $pconfig['crypto'] = $a_server[$id]['crypto'];
- // OpenVPN Defaults to SHA1 if unset
- $pconfig['digest'] = !empty($a_server[$id]['digest']) ? $a_server[$id]['digest'] : "SHA1";
- $pconfig['engine'] = $a_server[$id]['engine'];
-
- $pconfig['tunnel_network'] = $a_server[$id]['tunnel_network'];
- $pconfig['tunnel_networkv6'] = $a_server[$id]['tunnel_networkv6'];
-
- $pconfig['remote_network'] = $a_server[$id]['remote_network'];
- $pconfig['remote_networkv6'] = $a_server[$id]['remote_networkv6'];
- $pconfig['gwredir'] = $a_server[$id]['gwredir'];
- $pconfig['local_network'] = $a_server[$id]['local_network'];
- $pconfig['local_networkv6'] = $a_server[$id]['local_networkv6'];
- $pconfig['maxclients'] = $a_server[$id]['maxclients'];
- $pconfig['compression'] = $a_server[$id]['compression'];
- $pconfig['passtos'] = $a_server[$id]['passtos'];
- $pconfig['client2client'] = $a_server[$id]['client2client'];
-
- $pconfig['dynamic_ip'] = $a_server[$id]['dynamic_ip'];
- $pconfig['pool_enable'] = $a_server[$id]['pool_enable'];
- $pconfig['topology_subnet'] = $a_server[$id]['topology_subnet'];
-
- $pconfig['serverbridge_dhcp'] = $a_server[$id]['serverbridge_dhcp'];
- $pconfig['serverbridge_interface'] = $a_server[$id]['serverbridge_interface'];
- $pconfig['serverbridge_dhcp_start'] = $a_server[$id]['serverbridge_dhcp_start'];
- $pconfig['serverbridge_dhcp_end'] = $a_server[$id]['serverbridge_dhcp_end'];
-
- $pconfig['dns_domain'] = $a_server[$id]['dns_domain'];
- if ($pconfig['dns_domain']) {
- $pconfig['dns_domain_enable'] = true;
- }
-
- $pconfig['dns_server1'] = $a_server[$id]['dns_server1'];
- $pconfig['dns_server2'] = $a_server[$id]['dns_server2'];
- $pconfig['dns_server3'] = $a_server[$id]['dns_server3'];
- $pconfig['dns_server4'] = $a_server[$id]['dns_server4'];
- if ($pconfig['dns_server1'] ||
- $pconfig['dns_server2'] ||
- $pconfig['dns_server3'] ||
- $pconfig['dns_server4']) {
- $pconfig['dns_server_enable'] = true;
- }
-
- $pconfig['ntp_server1'] = $a_server[$id]['ntp_server1'];
- $pconfig['ntp_server2'] = $a_server[$id]['ntp_server2'];
- if ($pconfig['ntp_server1'] ||
- $pconfig['ntp_server2']) {
- $pconfig['ntp_server_enable'] = true;
- }
-
- $pconfig['netbios_enable'] = $a_server[$id]['netbios_enable'];
- $pconfig['netbios_ntype'] = $a_server[$id]['netbios_ntype'];
- $pconfig['netbios_scope'] = $a_server[$id]['netbios_scope'];
-
- $pconfig['wins_server1'] = $a_server[$id]['wins_server1'];
- $pconfig['wins_server2'] = $a_server[$id]['wins_server2'];
- if ($pconfig['wins_server1'] ||
- $pconfig['wins_server2']) {
- $pconfig['wins_server_enable'] = true;
- }
-
- $pconfig['client_mgmt_port'] = $a_server[$id]['client_mgmt_port'];
- if ($pconfig['client_mgmt_port']) {
- $pconfig['client_mgmt_port_enable'] = true;
- }
-
- $pconfig['nbdd_server1'] = $a_server[$id]['nbdd_server1'];
- if ($pconfig['nbdd_server1']) {
- $pconfig['nbdd_server_enable'] = true;
- }
-
- // just in case the modes switch
- $pconfig['autokey_enable'] = "yes";
- $pconfig['autotls_enable'] = "yes";
-
- $pconfig['duplicate_cn'] = isset($a_server[$id]['duplicate_cn']);
-
- $pconfig['no_tun_ipv6'] = $a_server[$id]['no_tun_ipv6'];
- if (isset($a_server[$id]['verbosity_level'])) {
- $pconfig['verbosity_level'] = $a_server[$id]['verbosity_level'];
- } else {
- $pconfig['verbosity_level'] = 1; // Default verbosity is 1
- }
-
- $pconfig['push_register_dns'] = $a_server[$id]['push_register_dns'];
- }
-}
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- if (isset($id) && $a_server[$id]) {
- $vpnid = $a_server[$id]['vpnid'];
- } else {
- $vpnid = 0;
- }
-
- list($iv_iface, $iv_ip) = explode ("|", $pconfig['interface']);
- if (is_ipaddrv4($iv_ip) && (stristr($pconfig['protocol'], "6") !== false)) {
- $input_errors[] = gettext("Protocol and IP address families do not match. You cannot select an IPv6 protocol and an IPv4 IP address.");
- } elseif (is_ipaddrv6($iv_ip) && (stristr($pconfig['protocol'], "6") === false)) {
- $input_errors[] = gettext("Protocol and IP address families do not match. You cannot select an IPv4 protocol and an IPv6 IP address.");
- } elseif ((stristr($pconfig['protocol'], "6") === false) && !get_interface_ip($iv_iface) && ($pconfig['interface'] != "any")) {
- $input_errors[] = gettext("An IPv4 protocol was selected, but the selected interface has no IPv4 address.");
- } elseif ((stristr($pconfig['protocol'], "6") !== false) && !get_interface_ipv6($iv_iface) && ($pconfig['interface'] != "any")) {
- $input_errors[] = gettext("An IPv6 protocol was selected, but the selected interface has no IPv6 address.");
- }
-
- if ($pconfig['mode'] != "p2p_shared_key") {
- $tls_mode = true;
- } else {
- $tls_mode = false;
- }
-
- if (empty($pconfig['authmode']) && (($pconfig['mode'] == "server_user") || ($pconfig['mode'] == "server_tls_user"))) {
- $input_errors[] = gettext("You must select a Backend for Authentication if the server mode requires User Auth.");
- }
-
- /* input validation */
- if ($result = openvpn_validate_port($pconfig['local_port'], 'Local port')) {
- $input_errors[] = $result;
- }
-
- if ($result = openvpn_validate_cidr($pconfig['tunnel_network'], 'IPv4 Tunnel Network', false, "ipv4")) {
- $input_errors[] = $result;
- }
-
- if ($result = openvpn_validate_cidr($pconfig['tunnel_networkv6'], 'IPv6 Tunnel Network', false, "ipv6")) {
- $input_errors[] = $result;
- }
-
- if ($result = openvpn_validate_cidr($pconfig['remote_network'], 'IPv4 Remote Network', true, "ipv4")) {
- $input_errors[] = $result;
- }
-
- if ($result = openvpn_validate_cidr($pconfig['remote_networkv6'], 'IPv6 Remote Network', true, "ipv6")) {
- $input_errors[] = $result;
- }
-
- if ($result = openvpn_validate_cidr($pconfig['local_network'], 'IPv4 Local Network', true, "ipv4")) {
- $input_errors[] = $result;
- }
-
- if ($result = openvpn_validate_cidr($pconfig['local_networkv6'], 'IPv6 Local Network', true, "ipv6")) {
- $input_errors[] = $result;
- }
-
- $portused = openvpn_port_used($pconfig['protocol'], $pconfig['interface'], $pconfig['local_port'], $vpnid);
- if (($portused != $vpnid) && ($portused != 0)) {
- $input_errors[] = gettext("The specified 'Local port' is in use. Please select another value");
- }
-
- if ($pconfig['autokey_enable']) {
- $pconfig['shared_key'] = openvpn_create_key();
- }
-
- if (!$tls_mode && !$pconfig['autokey_enable']) {
- if (!strstr($pconfig['shared_key'], "-----BEGIN OpenVPN Static key V1-----") ||
- !strstr($pconfig['shared_key'], "-----END OpenVPN Static key V1-----")) {
- $input_errors[] = gettext("The field 'Shared Key' does not appear to be valid");
- }
- }
-
- if ($tls_mode && $pconfig['tlsauth_enable'] && !$pconfig['autotls_enable']) {
- if (!strstr($pconfig['tls'], "-----BEGIN OpenVPN Static key V1-----") ||
- !strstr($pconfig['tls'], "-----END OpenVPN Static key V1-----")) {
- $input_errors[] = gettext("The field 'TLS Authentication Key' does not appear to be valid");
- }
- }
-
- if ($pconfig['dns_server_enable']) {
- if (!empty($pconfig['dns_server1']) && !is_ipaddr(trim($pconfig['dns_server1']))) {
- $input_errors[] = gettext("The field 'DNS Server #1' must contain a valid IP address");
- }
- if (!empty($pconfig['dns_server2']) && !is_ipaddr(trim($pconfig['dns_server2']))) {
- $input_errors[] = gettext("The field 'DNS Server #2' must contain a valid IP address");
- }
- if (!empty($pconfig['dns_server3']) && !is_ipaddr(trim($pconfig['dns_server3']))) {
- $input_errors[] = gettext("The field 'DNS Server #3' must contain a valid IP address");
- }
- if (!empty($pconfig['dns_server4']) && !is_ipaddr(trim($pconfig['dns_server4']))) {
- $input_errors[] = gettext("The field 'DNS Server #4' must contain a valid IP address");
- }
- }
-
- if ($pconfig['ntp_server_enable']) {
- if (!empty($pconfig['ntp_server1']) && !is_ipaddr(trim($pconfig['ntp_server1']))) {
- $input_errors[] = gettext("The field 'NTP Server #1' must contain a valid IP address");
- }
- if (!empty($pconfig['ntp_server2']) && !is_ipaddr(trim($pconfig['ntp_server2']))) {
- $input_errors[] = gettext("The field 'NTP Server #2' must contain a valid IP address");
- }
- if (!empty($pconfig['ntp_server3']) && !is_ipaddr(trim($pconfig['ntp_server3']))) {
- $input_errors[] = gettext("The field 'NTP Server #3' must contain a valid IP address");
- }
- if (!empty($pconfig['ntp_server4']) && !is_ipaddr(trim($pconfig['ntp_server4']))) {
- $input_errors[] = gettext("The field 'NTP Server #4' must contain a valid IP address");
- }
- }
-
- if ($pconfig['netbios_enable']) {
- if ($pconfig['wins_server_enable']) {
- if (!empty($pconfig['wins_server1']) && !is_ipaddr(trim($pconfig['wins_server1']))) {
- $input_errors[] = gettext("The field 'WINS Server #1' must contain a valid IP address");
- }
- if (!empty($pconfig['wins_server2']) && !is_ipaddr(trim($pconfig['wins_server2']))) {
- $input_errors[] = gettext("The field 'WINS Server #2' must contain a valid IP address");
- }
- }
- if ($pconfig['nbdd_server_enable']) {
- if (!empty($pconfig['nbdd_server1']) && !is_ipaddr(trim($pconfig['nbdd_server1']))) {
- $input_errors[] = gettext("The field 'NetBIOS Data Distribution Server #1' must contain a valid IP address");
- }
- }
- }
-
- if ($pconfig['client_mgmt_port_enable']) {
- if ($result = openvpn_validate_port($pconfig['client_mgmt_port'], 'Client management port')) {
- $input_errors[] = $result;
- }
- }
-
- if ($pconfig['maxclients'] && !is_numeric($pconfig['maxclients'])) {
- $input_errors[] = gettext("The field 'Concurrent connections' must be numeric.");
- }
-
- /* If we are not in shared key mode, then we need the CA/Cert. */
- if ($pconfig['mode'] != "p2p_shared_key") {
- $reqdfields = explode(" ", "caref certref");
- $reqdfieldsn = array(gettext("Certificate Authority"), gettext("Certificate"));
- } elseif (!$pconfig['autokey_enable']) {
- /* We only need the shared key filled in if we are in shared key mode and autokey is not selected. */
- $reqdfields = array('shared_key');
- $reqdfieldsn = array(gettext('Shared key'));
- }
-
- if ($pconfig['dev_mode'] != "tap") {
- $reqdfields[] = 'tunnel_network';
- $reqdfieldsn[] = gettext('Tunnel network');
- } else {
- if ($pconfig['serverbridge_dhcp'] && $pconfig['tunnel_network']) {
- $input_errors[] = gettext("Using a tunnel network and server bridge settings together is not allowed.");
- }
- if (($pconfig['serverbridge_dhcp_start'] && !$pconfig['serverbridge_dhcp_end']) ||
- (!$pconfig['serverbridge_dhcp_start'] && $pconfig['serverbridge_dhcp_end'])) {
- $input_errors[] = gettext("Server Bridge DHCP Start and End must both be empty, or defined.");
- }
- if (($pconfig['serverbridge_dhcp_start'] && !is_ipaddrv4($pconfig['serverbridge_dhcp_start']))) {
- $input_errors[] = gettext("Server Bridge DHCP Start must be an IPv4 address.");
- }
- if (($pconfig['serverbridge_dhcp_end'] && !is_ipaddrv4($pconfig['serverbridge_dhcp_end']))) {
- $input_errors[] = gettext("Server Bridge DHCP End must be an IPv4 address.");
- }
- if (ip2ulong($pconfig['serverbridge_dhcp_start']) > ip2ulong($pconfig['serverbridge_dhcp_end'])) {
- $input_errors[] = gettext("The Server Bridge DHCP range is invalid (start higher than end).");
- }
- }
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (!$input_errors) {
-
- $server = array();
-
- if ($id && $pconfig['dev_mode'] <> $a_server[$id]['dev_mode']) {
- openvpn_delete('server', $a_server[$id]);// delete(rename) old interface so a new TUN or TAP interface can be created.
- }
-
- if ($vpnid) {
- $server['vpnid'] = $vpnid;
- } else {
- $server['vpnid'] = openvpn_vpnid_next();
- }
-
- if ($_POST['disable'] == "yes") {
- $server['disable'] = true;
- }
- $server['mode'] = $pconfig['mode'];
- if (!empty($pconfig['authmode']) && (($pconfig['mode'] == "server_user") || ($pconfig['mode'] == "server_tls_user"))) {
- $server['authmode'] = implode(",", $pconfig['authmode']);
- }
- $server['protocol'] = $pconfig['protocol'];
- $server['dev_mode'] = $pconfig['dev_mode'];
- list($server['interface'], $server['ipaddr']) = explode ("|", $pconfig['interface']);
- $server['local_port'] = $pconfig['local_port'];
- $server['description'] = $pconfig['description'];
- $server['custom_options'] = str_replace("\r\n", "\n", $pconfig['custom_options']);
-
- if ($tls_mode) {
- if ($pconfig['tlsauth_enable']) {
- if ($pconfig['autotls_enable']) {
- $pconfig['tls'] = openvpn_create_key();
- }
- $server['tls'] = base64_encode($pconfig['tls']);
- }
- $server['caref'] = $pconfig['caref'];
- $server['crlref'] = $pconfig['crlref'];
- $server['certref'] = $pconfig['certref'];
- $server['dh_length'] = $pconfig['dh_length'];
- $server['cert_depth'] = $pconfig['cert_depth'];
- if ($pconfig['mode'] == "server_tls_user") {
- $server['strictusercn'] = $pconfig['strictusercn'];
- }
- } else {
- $server['shared_key'] = base64_encode($pconfig['shared_key']);
- }
- $server['crypto'] = $pconfig['crypto'];
- $server['digest'] = $pconfig['digest'];
- $server['engine'] = $pconfig['engine'];
-
- $server['tunnel_network'] = $pconfig['tunnel_network'];
- $server['tunnel_networkv6'] = $pconfig['tunnel_networkv6'];
- $server['remote_network'] = $pconfig['remote_network'];
- $server['remote_networkv6'] = $pconfig['remote_networkv6'];
- $server['gwredir'] = $pconfig['gwredir'];
- $server['local_network'] = $pconfig['local_network'];
- $server['local_networkv6'] = $pconfig['local_networkv6'];
- $server['maxclients'] = $pconfig['maxclients'];
- $server['compression'] = $pconfig['compression'];
- $server['passtos'] = $pconfig['passtos'];
- $server['client2client'] = $pconfig['client2client'];
-
- $server['dynamic_ip'] = $pconfig['dynamic_ip'];
- $server['pool_enable'] = $pconfig['pool_enable'];
- $server['topology_subnet'] = $pconfig['topology_subnet'];
-
- $server['serverbridge_dhcp'] = $pconfig['serverbridge_dhcp'];
- $server['serverbridge_interface'] = $pconfig['serverbridge_interface'];
- $server['serverbridge_dhcp_start'] = $pconfig['serverbridge_dhcp_start'];
- $server['serverbridge_dhcp_end'] = $pconfig['serverbridge_dhcp_end'];
-
- if ($pconfig['dns_domain_enable']) {
- $server['dns_domain'] = $pconfig['dns_domain'];
- }
-
- if ($pconfig['dns_server_enable']) {
- $server['dns_server1'] = $pconfig['dns_server1'];
- $server['dns_server2'] = $pconfig['dns_server2'];
- $server['dns_server3'] = $pconfig['dns_server3'];
- $server['dns_server4'] = $pconfig['dns_server4'];
- }
-
- if ($pconfig['push_register_dns']) {
- $server['push_register_dns'] = $pconfig['push_register_dns'];
- }
-
- if ($pconfig['ntp_server_enable']) {
- $server['ntp_server1'] = $pconfig['ntp_server1'];
- $server['ntp_server2'] = $pconfig['ntp_server2'];
- }
-
- $server['netbios_enable'] = $pconfig['netbios_enable'];
- $server['netbios_ntype'] = $pconfig['netbios_ntype'];
- $server['netbios_scope'] = $pconfig['netbios_scope'];
-
- $server['no_tun_ipv6'] = $pconfig['no_tun_ipv6'];
- $server['verbosity_level'] = $pconfig['verbosity_level'];
-
- if ($pconfig['netbios_enable']) {
-
- if ($pconfig['wins_server_enable']) {
- $server['wins_server1'] = $pconfig['wins_server1'];
- $server['wins_server2'] = $pconfig['wins_server2'];
- }
-
- if ($pconfig['dns_server_enable']) {
- $server['nbdd_server1'] = $pconfig['nbdd_server1'];
- }
- }
-
- if ($pconfig['client_mgmt_port_enable']) {
- $server['client_mgmt_port'] = $pconfig['client_mgmt_port'];
- }
-
- if ($_POST['duplicate_cn'] == "yes") {
- $server['duplicate_cn'] = true;
- }
-
- if (isset($id) && $a_server[$id]) {
- $a_server[$id] = $server;
- } else {
- $a_server[] = $server;
- }
-
- openvpn_resync('server', $server);
- write_config();
-
- header("Location: vpn_openvpn_server.php");
- exit;
- }
- if (!empty($pconfig['authmode'])) {
- $pconfig['authmode'] = implode(",", $pconfig['authmode']);
- }
-}
-$pgtitle = array(gettext("OpenVPN"), gettext("Server"));
-$shortcut_section = "openvpn";
-
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-
-function mode_change() {
- index = document.iform.mode.selectedIndex;
- value = document.iform.mode.options[index].value;
- switch (value) {
- case "p2p_tls":
- case "server_tls":
- case "server_user":
- document.getElementById("tls").style.display="";
- document.getElementById("tls_ca").style.display="";
- document.getElementById("tls_crl").style.display="";
- document.getElementById("tls_cert").style.display="";
- document.getElementById("tls_dh").style.display="";
- document.getElementById("cert_depth").style.display="";
- document.getElementById("strictusercn").style.display="none";
- document.getElementById("psk").style.display="none";
- break;
- case "server_tls_user":
- document.getElementById("tls").style.display="";
- document.getElementById("tls_ca").style.display="";
- document.getElementById("tls_crl").style.display="";
- document.getElementById("tls_cert").style.display="";
- document.getElementById("tls_dh").style.display="";
- document.getElementById("cert_depth").style.display="";
- document.getElementById("strictusercn").style.display="";
- document.getElementById("psk").style.display="none";
- break;
- case "p2p_shared_key":
- document.getElementById("tls").style.display="none";
- document.getElementById("tls_ca").style.display="none";
- document.getElementById("tls_crl").style.display="none";
- document.getElementById("tls_cert").style.display="none";
- document.getElementById("tls_dh").style.display="none";
- document.getElementById("cert_depth").style.display="none";
- document.getElementById("strictusercn").style.display="none";
- document.getElementById("psk").style.display="";
- break;
- }
- switch (value) {
- case "p2p_shared_key":
- document.getElementById("client_opts").style.display="none";
- document.getElementById("remote_optsv4").style.display="";
- document.getElementById("remote_optsv6").style.display="";
- document.getElementById("gwredir_opts").style.display="none";
- document.getElementById("local_optsv4").style.display="none";
- document.getElementById("local_optsv6").style.display="none";
- document.getElementById("authmodetr").style.display="none";
- document.getElementById("inter_client_communication").style.display="none";
- break;
- case "p2p_tls":
- document.getElementById("client_opts").style.display="none";
- document.getElementById("remote_optsv4").style.display="";
- document.getElementById("remote_optsv6").style.display="";
- document.getElementById("gwredir_opts").style.display="";
- document.getElementById("local_optsv4").style.display="";
- document.getElementById("local_optsv6").style.display="";
- document.getElementById("authmodetr").style.display="none";
- document.getElementById("inter_client_communication").style.display="none";
- break;
- case "server_user":
- case "server_tls_user":
- document.getElementById("authmodetr").style.display="";
- document.getElementById("client_opts").style.display="";
- document.getElementById("remote_optsv4").style.display="none";
- document.getElementById("remote_optsv6").style.display="none";
- document.getElementById("gwredir_opts").style.display="";
- document.getElementById("local_optsv4").style.display="";
- document.getElementById("local_optsv6").style.display="";
- document.getElementById("inter_client_communication").style.display="";
- break;
- case "server_tls":
- document.getElementById("authmodetr").style.display="none";
- default:
- document.getElementById("client_opts").style.display="";
- document.getElementById("remote_optsv4").style.display="none";
- document.getElementById("remote_optsv6").style.display="none";
- document.getElementById("gwredir_opts").style.display="";
- document.getElementById("local_optsv4").style.display="";
- document.getElementById("local_optsv6").style.display="";
- document.getElementById("inter_client_communication").style.display="";
- break;
- }
- gwredir_change();
-}
-
-function autokey_change() {
-
- if ((document.iform.autokey_enable != null) && (document.iform.autokey_enable.checked)) {
- document.getElementById("autokey_opts").style.display="none";
- } else {
- document.getElementById("autokey_opts").style.display="";
- }
-}
-
-function tlsauth_change() {
-
-<?php if (!$pconfig['tls']): ?>
- if (document.iform.tlsauth_enable.checked) {
- document.getElementById("tlsauth_opts").style.display="";
- } else {
- document.getElementById("tlsauth_opts").style.display="none";
- }
-<?php endif; ?>
-
- autotls_change();
-}
-
-function autotls_change() {
-
-<?php if (!$pconfig['tls']): ?>
- autocheck = document.iform.autotls_enable.checked;
-<?php else: ?>
- autocheck = false;
-<?php endif; ?>
-
- if (document.iform.tlsauth_enable.checked && !autocheck) {
- document.getElementById("autotls_opts").style.display="";
- } else {
- document.getElementById("autotls_opts").style.display="none";
- }
-}
-
-function gwredir_change() {
-
- if (document.iform.gwredir.checked) {
- document.getElementById("local_optsv4").style.display="none";
- document.getElementById("local_optsv6").style.display="none";
- } else {
- document.getElementById("local_optsv4").style.display="";
- document.getElementById("local_optsv6").style.display="";
- }
-}
-
-function dns_domain_change() {
-
- if (document.iform.dns_domain_enable.checked) {
- document.getElementById("dns_domain_data").style.display="";
- } else {
- document.getElementById("dns_domain_data").style.display="none";
- }
-}
-
-function dns_server_change() {
-
- if (document.iform.dns_server_enable.checked) {
- document.getElementById("dns_server_data").style.display="";
- } else {
- document.getElementById("dns_server_data").style.display="none";
- }
-}
-
-function wins_server_change() {
-
- if (document.iform.wins_server_enable.checked) {
- document.getElementById("wins_server_data").style.display="";
- } else {
- document.getElementById("wins_server_data").style.display="none";
- }
-}
-
-function client_mgmt_port_change() {
-
- if (document.iform.client_mgmt_port_enable.checked) {
- document.getElementById("client_mgmt_port_data").style.display="";
- } else {
- document.getElementById("client_mgmt_port_data").style.display="none";
- }
-}
-
-function ntp_server_change() {
-
- if (document.iform.ntp_server_enable.checked) {
- document.getElementById("ntp_server_data").style.display="";
- } else {
- document.getElementById("ntp_server_data").style.display="none";
- }
-}
-
-function netbios_change() {
-
- if (document.iform.netbios_enable.checked) {
- document.getElementById("netbios_data").style.display="";
- document.getElementById("wins_opts").style.display="";
- } else {
- document.getElementById("netbios_data").style.display="none";
- document.getElementById("wins_opts").style.display="none";
- }
-}
-
-function tuntap_change() {
-
- mindex = document.iform.mode.selectedIndex;
- mvalue = document.iform.mode.options[mindex].value;
-
- switch (mvalue) {
- case "p2p_tls":
- case "p2p_shared_key":
- p2p = true;
- break;
- default:
- p2p = false;
- break;
- }
-
- index = document.iform.dev_mode.selectedIndex;
- value = document.iform.dev_mode.options[index].value;
- switch (value) {
- case "tun":
- document.getElementById("chkboxNoTunIPv6").style.display="";
- document.getElementById("ipv4_tunnel_network").className="vncellreq";
- document.getElementById("serverbridge_dhcp").style.display="none";
- document.getElementById("serverbridge_interface").style.display="none";
- document.getElementById("serverbridge_dhcp_start").style.display="none";
- document.getElementById("serverbridge_dhcp_end").style.display="none";
- document.getElementById("topology_subnet_opt").style.display="";
- break;
- case "tap":
- document.getElementById("chkboxNoTunIPv6").style.display="none";
- document.getElementById("ipv4_tunnel_network").className="vncell";
- if (!p2p) {
- document.getElementById("serverbridge_dhcp").style.display="";
- document.getElementById("serverbridge_interface").style.display="";
- document.getElementById("serverbridge_dhcp_start").style.display="";
- document.getElementById("serverbridge_dhcp_end").style.display="";
- document.getElementById("topology_subnet_opt").style.display="none";
- document.iform.serverbridge_dhcp.disabled = false;
- if (document.iform.serverbridge_dhcp.checked) {
- document.iform.serverbridge_interface.disabled = false;
- document.iform.serverbridge_dhcp_start.disabled = false;
- document.iform.serverbridge_dhcp_end.disabled = false;
- } else {
- document.iform.serverbridge_interface.disabled = true;
- document.iform.serverbridge_dhcp_start.disabled = true;
- document.iform.serverbridge_dhcp_end.disabled = true;
- }
- } else {
- document.getElementById("topology_subnet_opt").style.display="none";
- document.iform.serverbridge_dhcp.disabled = true;
- document.iform.serverbridge_interface.disabled = true;
- document.iform.serverbridge_dhcp_start.disabled = true;
- document.iform.serverbridge_dhcp_end.disabled = true;
- }
- break;
- }
-}
-//]]>
-</script>
-<?php
-if (!$savemsg) {
- $savemsg = "";
-}
-
-if ($input_errors) {
- print_input_errors($input_errors);
-}
-if ($savemsg) {
- print_info_box_np($savemsg);
-}
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn openvpn server">
- <tr>
- <td class="tabnavtbl">
- <?php
- $tab_array = array();
- $tab_array[] = array(gettext("Server"), true, "vpn_openvpn_server.php");
- $tab_array[] = array(gettext("Client"), false, "vpn_openvpn_client.php");
- $tab_array[] = array(gettext("Client Specific Overrides"), false, "vpn_openvpn_csc.php");
- $tab_array[] = array(gettext("Wizards"), false, "wizard.php?xml=openvpn_wizard.xml");
- add_package_tabs("openvpn-client-export", $tab_array);
- display_top_tabs($tab_array);
- ?>
- </td>
- </tr>
- <tr>
- <td class="tabcont">
-
- <?php if ($act == "new" || $act == "edit"): ?>
-
- <form action="vpn_openvpn_server.php" method="post" name="iform" id="iform" onsubmit="presubmit()">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="general information">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("General information"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="0" cellspacing="0" summary="enable disable server">
- <tr>
- <td>
- <?php set_checked($pconfig['disable'], $chk); ?>
- <input name="disable" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- &nbsp;
- <span class="vexpl">
- <strong><?=gettext("Disable this server"); ?></strong><br />
- </span>
- </td>
- </tr>
- </table>
- <?=gettext("Set this option to disable this server without removing it from the list"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Server Mode");?></td>
- <td width="78%" class="vtable">
- <select name='mode' id='mode' class="formselect" onchange='mode_change(); tuntap_change()'>
- <?php
- foreach ($openvpn_server_modes as $name => $desc):
- $selected = "";
- if ($pconfig['mode'] == $name) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$name;?>" <?=$selected;?>><?=$desc;?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr id="authmodetr" style="display:none">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Backend for authentication");?></td>
- <td width="78%" class="vtable">
- <select name='authmode[]' id='authmode' class="formselect" multiple="multiple" size="<?php echo count($auth_servers); ?>">
- <?php
- $authmodes = explode(",", $pconfig['authmode']);
- $auth_servers = auth_get_authserver_list();
- // If no authmodes set then default to selecting the first entry in auth_servers
- if (empty($authmodes[0]) && !empty(key($auth_servers))) {
- $authmodes[0] = key($auth_servers);
- }
-
- foreach ($auth_servers as $auth_server_key => $auth_server):
- $selected = "";
- if (in_array($auth_server_key, $authmodes)) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$auth_server_key;?>" <?=$selected;?>><?=$auth_server['name'];?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol");?></td>
- <td width="78%" class="vtable">
- <select name='protocol' class="formselect">
- <?php
- foreach ($openvpn_prots as $prot):
- $selected = "";
- if ($pconfig['protocol'] == $prot) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$prot;?>" <?=$selected;?>><?=$prot;?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Device Mode"); ?></td>
- <td width="78%" class="vtable">
- <select name="dev_mode" class="formselect" onchange='tuntap_change()'>
- <?php
- foreach ($openvpn_dev_mode as $device):
- $selected = "";
- if (!empty($pconfig['dev_mode'])) {
- if ($pconfig['dev_mode'] == $device) {
- $selected = "selected=\"selected\"";
- }
- } else {
- if ($device == "tun") {
- $selected = "selected=\"selected\"";
- }
- }
- ?>
- <option value="<?=$device;?>" <?=$selected;?>><?=$device;?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
- <td width="78%" class="vtable">
- <select name="interface" class="formselect">
- <?php
- $interfaces = get_configured_interface_with_descr();
- $carplist = get_configured_carp_interface_list();
- foreach ($carplist as $cif => $carpip) {
- $interfaces[$cif.'|'.$carpip] = $carpip." (".get_vip_descr($carpip).")";
- }
- $aliaslist = get_configured_ip_aliases_list();
- foreach ($aliaslist as $aliasip => $aliasif) {
- $interfaces[$aliasif.'|'.$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
- }
- $grouplist = return_gateway_groups_array();
- foreach ($grouplist as $name => $group) {
- if ($group['ipprotocol'] != inet) {
- continue;
- }
- if ($group[0]['vip'] <> "") {
- $vipif = $group[0]['vip'];
- } else {
- $vipif = $group[0]['int'];
- }
- $interfaces[$name] = "GW Group {$name}";
- }
- $interfaces['lo0'] = "Localhost";
- $interfaces['any'] = "any";
- foreach ($interfaces as $iface => $ifacename):
- $selected = "";
- if ($iface == $pconfig['interface']) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$iface;?>" <?=$selected;?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
- <?php endforeach; ?>
- </select> <br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Local port");?></td>
- <td width="78%" class="vtable">
- <input name="local_port" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($pconfig['local_port']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <input name="description" type="text" class="formfld unknown" size="30" value="<?=htmlspecialchars($pconfig['description']);?>" />
- <br />
- <?=gettext("You may enter a description here for your reference (not parsed)"); ?>.
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Cryptographic Settings"); ?></td>
- </tr>
- <tr id="tls">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("TLS Authentication"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="tls authentication">
- <tr>
- <td>
- <?php set_checked($pconfig['tlsauth_enable'], $chk); ?>
- <input name="tlsauth_enable" id="tlsauth_enable" type="checkbox" value="yes" <?=$chk;?> onclick="tlsauth_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Enable authentication of TLS packets"); ?>.
- </span>
- </td>
- </tr>
- </table>
- <?php if (!$pconfig['tls']): ?>
- <table border="0" cellpadding="2" cellspacing="0" id="tlsauth_opts" summary="tls authentication options">
- <tr>
- <td>
- <?php set_checked($pconfig['autotls_enable'], $chk); ?>
- <input name="autotls_enable" id="autotls_enable" type="checkbox" value="yes" <?=$chk;?> onclick="autotls_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Automatically generate a shared TLS authentication key"); ?>.
- </span>
- </td>
- </tr>
- </table>
- <?php endif; ?>
- <table border="0" cellpadding="2" cellspacing="0" id="autotls_opts" summary="tls authentication key">
- <tr>
- <td>
- <textarea name="tls" cols="65" rows="7" class="formpre"><?=htmlspecialchars($pconfig['tls']);?></textarea>
- <br />
- <?=gettext("Paste your shared key here"); ?>.
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr id="tls_ca">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Peer Certificate Authority"); ?></td>
- <td width="78%" class="vtable">
- <?php if (count($a_ca)): ?>
- <select name='caref' class="formselect">
- <?php
- foreach ($a_ca as $ca):
- $selected = "";
- if ($pconfig['caref'] == $ca['refid']) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$ca['refid'];?>" <?=$selected;?>><?=htmlspecialchars($ca['descr']);?></option>
- <?php endforeach; ?>
- </select>
- <?php else: ?>
- <b>No Certificate Authorities defined.</b> <br />Create one under <a href="system_camanager.php">System &gt; Cert Manager</a>.
- <?php endif; ?>
- </td>
- </tr>
- <tr id="tls_crl">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Peer Certificate Revocation List"); ?></td>
- <td width="78%" class="vtable">
- <?php if (count($a_crl)): ?>
- <select name='crlref' class="formselect">
- <option value="">None</option>
- <?php
- foreach ($a_crl as $crl):
- $selected = "";
- $caname = "";
- $ca = lookup_ca($crl['caref']);
- if ($ca) {
- $caname = " (CA: " . htmlspecialchars($ca['descr']) . ")";
- if ($pconfig['crlref'] == $crl['refid']) {
- $selected = "selected=\"selected\"";
- }
- }
- ?>
- <option value="<?=$crl['refid'];?>" <?=$selected;?>><?=htmlspecialchars($crl['descr']) . $caname;?></option>
- <?php endforeach; ?>
- </select>
- <?php else: ?>
- <b>No Certificate Revocation Lists (CRLs) defined.</b> <br />Create one under <a href="system_crlmanager.php">System &gt; Cert Manager</a>.
- <?php endif; ?>
- </td>
- </tr>
- <tr id="tls_cert">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Server Certificate"); ?></td>
- <td width="78%" class="vtable">
- <?php if (count($a_cert)): ?>
- <select name='certref' class="formselect">
- <?php
- foreach ($a_cert as $cert):
- $selected = "";
- $caname = "";
- $inuse = "";
- $revoked = "";
- $ca = lookup_ca($cert['caref']);
- if ($ca) {
- $caname = " (CA: " . htmlspecialchars($ca['descr']) . ")";
- }
- if ($pconfig['certref'] == $cert['refid']) {
- $selected = "selected=\"selected\"";
- }
- if (cert_in_use($cert['refid'])) {
- $inuse = " *In Use";
- }
- if (is_cert_revoked($cert)) {
- $revoked = " *Revoked";
- }
- ?>
- <option value="<?=$cert['refid'];?>" <?=$selected;?>><?=htmlspecialchars($cert['descr']) . $caname . $inuse . $revoked;?></option>
- <?php endforeach; ?>
- </select>
- <?php else: ?>
- <b>No Certificates defined.</b> <br />Create one under <a href="system_certmanager.php">System &gt; Cert Manager</a>.
- <?php endif; ?>
- </td>
- </tr>
- <tr id="tls_dh">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("DH Parameters Length"); ?></td>
- <td width="78%" class="vtable">
- <select name="dh_length" class="formselect">
- <?php
- foreach ($openvpn_dh_lengths as $length):
- $selected = "";
- if ($length == $pconfig['dh_length']) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option<?=$selected?>><?=$length;?></option>
- <?php endforeach; ?>
- </select>
- <span class="vexpl">
- <?=gettext("bits"); ?>
- </span>
- </td>
- </tr>
- <tr id="psk">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Shared Key"); ?></td>
- <td width="78%" class="vtable">
- <?php if (!$pconfig['shared_key']): ?>
- <table border="0" cellpadding="2" cellspacing="0" summary="shared key">
- <tr>
- <td>
- <?php set_checked($pconfig['autokey_enable'], $chk); ?>
- <input name="autokey_enable" type="checkbox" value="yes" <?=$chk;?> onclick="autokey_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Automatically generate a shared key"); ?>.
- </span>
- </td>
- </tr>
- </table>
- <?php endif; ?>
- <table border="0" cellpadding="2" cellspacing="0" id="autokey_opts" summary="shared key">
- <tr>
- <td>
- <textarea name="shared_key" cols="65" rows="7" class="formpre"><?=htmlspecialchars($pconfig['shared_key']);?></textarea>
- <br />
- <?=gettext("Paste your shared key here"); ?>.
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Encryption algorithm"); ?></td>
- <td width="78%" class="vtable">
- <select name="crypto" class="formselect">
- <?php
- $cipherlist = openvpn_get_cipherlist();
- foreach ($cipherlist as $name => $desc):
- $selected = "";
- if ($name == $pconfig['crypto']) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$name;?>"<?=$selected?>>
- <?=htmlspecialchars($desc);?>
- </option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Auth Digest Algorithm"); ?></td>
- <td width="78%" class="vtable">
- <select name="digest" class="formselect">
- <?php
- $digestlist = openvpn_get_digestlist();
- foreach ($digestlist as $name => $desc):
- $selected = "";
- if ($name == $pconfig['digest']) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$name;?>"<?=$selected?>>
- <?=htmlspecialchars($desc);?>
- </option>
- <?php endforeach; ?>
- </select>
- <br /><?PHP echo gettext("NOTE: Leave this set to SHA1 unless all clients are set to match. SHA1 is the default for OpenVPN."); ?>
- </td>
- </tr>
- <tr id="engine">
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Hardware Crypto"); ?></td>
- <td width="78%" class="vtable">
- <select name="engine" class="formselect">
- <?php
- $engines = openvpn_get_engines();
- foreach ($engines as $name => $desc):
- $selected = "";
- if ($name == $pconfig['engine']) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?=$name;?>"<?=$selected?>>
- <?=htmlspecialchars($desc);?>
- </option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr id="cert_depth">
- <td width="22%" valign="top" class="vncell"><?=gettext("Certificate Depth"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="certificate depth">
- <tr>
- <td>
- <select name="cert_depth" class="formselect">
- <option value="">Do Not Check</option>
- <?php
- foreach ($openvpn_cert_depths as $depth => $depthdesc):
- $selected = "";
- if ($depth == $pconfig['cert_depth']) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?= $depth ?>" <?= $selected ?>><?= $depthdesc ?></option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("When a certificate-based client logs in, do not accept certificates below this depth. Useful for denying certificates made with intermediate CAs generated from the same CA as the server."); ?>
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr id="strictusercn">
- <td width="22%" valign="top" class="vncell"><?=gettext("Strict User/CN Matching"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="strict user/cn matching">
- <tr>
- <td>
- <?php set_checked($pconfig['strictusercn'], $chk); ?>
- <input name="strictusercn" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("When authenticating users, enforce a match between the common name of the client certificate and the username given at login."); ?>
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Tunnel Settings"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq" id="ipv4_tunnel_network"><?=gettext("IPv4 Tunnel Network"); ?></td>
- <td width="78%" class="vtable">
- <input name="tunnel_network" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['tunnel_network']);?>" />
- <br />
- <?=gettext("This is the IPv4 virtual network used for private " .
- "communications between this server and client " .
- "hosts expressed using CIDR (eg. 10.0.8.0/24). " .
- "The first network address will be assigned to " .
- "the server virtual interface. The remaining " .
- "network addresses can optionally be assigned " .
- "to connecting clients. (see Address Pool)"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Tunnel Network"); ?></td>
- <td width="78%" class="vtable">
- <input name="tunnel_networkv6" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['tunnel_networkv6']);?>" />
- <br />
- <?=gettext("This is the IPv6 virtual network used for private " .
- "communications between this server and client " .
- "hosts expressed using CIDR (eg. fe80::/64). " .
- "The first network address will be assigned to " .
- "the server virtual interface. The remaining " .
- "network addresses can optionally be assigned " .
- "to connecting clients. (see Address Pool)"); ?>
- </td>
- </tr>
- <tr id="serverbridge_dhcp">
- <td width="22%" valign="top" class="vncell"><?=gettext("Bridge DHCP"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="bridge dhcp">
- <tr>
- <td>
- <?php set_checked($pconfig['serverbridge_dhcp'], $chk); ?>
- <input name="serverbridge_dhcp" type="checkbox" value="yes" <?=$chk;?> onchange="tuntap_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Allow clients on the bridge to obtain DHCP."); ?><br />
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr id="serverbridge_interface">
- <td width="22%" valign="top" class="vncell"><?=gettext("Bridge Interface"); ?></td>
- <td width="78%" class="vtable">
- <select name="serverbridge_interface" class="formselect">
- <?php
- $serverbridge_interface['none'] = "none";
- $serverbridge_interface = array_merge($serverbridge_interface, get_configured_interface_with_descr());
- $carplist = get_configured_carp_interface_list();
- foreach ($carplist as $cif => $carpip) {
- $serverbridge_interface[$cif.'|'.$carpip] = $carpip." (".get_vip_descr($carpip).")";
- }
- $aliaslist = get_configured_ip_aliases_list();
- foreach ($aliaslist as $aliasip => $aliasif) {
- $serverbridge_interface[$aliasif.'|'.$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
- }
- foreach ($serverbridge_interface as $iface => $ifacename):
- $selected = "";
- if ($iface == $pconfig['serverbridge_interface']) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$iface;?>" <?=$selected;?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
- <?php endforeach; ?>
- </select> <br />
- <?=gettext("The interface to which this tap instance will be " .
- "bridged. This is not done automatically. You must assign this " .
- "interface and create the bridge separately. " .
- "This setting controls which existing IP address and subnet " .
- "mask are used by OpenVPN for the bridge. Setting this to " .
- "'none' will cause the Server Bridge DHCP settings below to be ignored."); ?>
- </td>
- </tr>
- <tr id="serverbridge_dhcp_start">
- <td width="22%" valign="top" class="vncell"><?=gettext("Server Bridge DHCP Start"); ?></td>
- <td width="78%" class="vtable">
- <input name="serverbridge_dhcp_start" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['serverbridge_dhcp_start']);?>" />
- <br />
- <?=gettext("When using tap mode as a multi-point server, " .
- "you may optionally supply a DHCP range to use on the " .
- "interface to which this tap instance is bridged. " .
- "If these settings are left blank, DHCP will be passed " .
- "through to the LAN, and the interface setting above " .
- "will be ignored."); ?>
- </td>
- </tr>
- <tr id="serverbridge_dhcp_end">
- <td width="22%" valign="top" class="vncell"><?=gettext("Server Bridge DHCP End"); ?></td>
- <td width="78%" class="vtable">
- <input name="serverbridge_dhcp_end" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['serverbridge_dhcp_end']);?>" />
- <br />
- </td>
- </tr>
- <tr id="gwredir_opts">
- <td width="22%" valign="top" class="vncell"><?=gettext("Redirect Gateway"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="redirect gateway">
- <tr>
- <td>
- <?php set_checked($pconfig['gwredir'], $chk); ?>
- <input name="gwredir" type="checkbox" value="yes" <?=$chk;?> onclick="gwredir_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Force all client generated traffic through the tunnel"); ?>.
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr id="local_optsv4">
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv4 Local Network/s"); ?></td>
- <td width="78%" class="vtable">
- <input name="local_network" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['local_network']);?>" />
- <br />
- <?=gettext("These are the IPv4 networks that will be accessible " .
- "from the remote endpoint. Expressed as a comma-separated list of one or more CIDR ranges. " .
- "You may leave this blank if you don't " .
- "want to add a route to the local network " .
- "through this tunnel on the remote machine. " .
- "This is generally set to your LAN network"); ?>.
- </td>
- </tr>
- <tr id="local_optsv6">
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Local Network/s"); ?></td>
- <td width="78%" class="vtable">
- <input name="local_networkv6" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['local_networkv6']);?>" />
- <br />
- <?=gettext("These are the IPv6 networks that will be accessible " .
- "from the remote endpoint. Expressed as a comma-separated list of one or more IP/PREFIX. " .
- "You may leave this blank if you don't " .
- "want to add a route to the local network " .
- "through this tunnel on the remote machine. " .
- "This is generally set to your LAN network"); ?>.
- </td>
- </tr>
- <tr id="remote_optsv4">
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv4 Remote Network/s"); ?></td>
- <td width="78%" class="vtable">
- <input name="remote_network" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['remote_network']);?>" />
- <br />
- <?=gettext("These are the IPv4 networks that will be routed through " .
- "the tunnel, so that a site-to-site VPN can be " .
- "established without manually changing the routing tables. " .
- "Expressed as a comma-separated list of one or more CIDR ranges. " .
- "If this is a site-to-site VPN, enter the " .
- "remote LAN/s here. You may leave this blank if " .
- "you don't want a site-to-site VPN"); ?>.
- </td>
- </tr>
- <tr id="remote_optsv6">
- <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Remote Network/s"); ?></td>
- <td width="78%" class="vtable">
- <input name="remote_networkv6" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['remote_networkv6']);?>" />
- <br />
- <?=gettext("These are the IPv6 networks that will be routed through " .
- "the tunnel, so that a site-to-site VPN can be " .
- "established without manually changing the routing tables. " .
- "Expressed as a comma-separated list of one or more IP/PREFIX. " .
- "If this is a site-to-site VPN, enter the " .
- "remote LAN/s here. You may leave this blank if " .
- "you don't want a site-to-site VPN"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Concurrent connections");?></td>
- <td width="78%" class="vtable">
- <input name="maxclients" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($pconfig['maxclients']);?>" />
- <br />
- <?=gettext("Specify the maximum number of clients allowed to concurrently connect to this server"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Compression"); ?></td>
- <td width="78%" class="vtable">
- <select name="compression" class="formselect">
- <?php
- foreach ($openvpn_compression_modes as $cmode => $cmodedesc):
- $selected = "";
- if ($cmode == $pconfig['compression']) {
- $selected = " selected=\"selected\"";
- }
- ?>
- <option value="<?= $cmode ?>" <?= $selected ?>><?= $cmodedesc ?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <?=gettext("Compress tunnel packets using the LZO algorithm. Adaptive compression will dynamically disable compression for a period of time if OpenVPN detects that the data in the packets is not being compressed efficiently"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Type-of-Service"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="type-of-service">
- <tr>
- <td>
- <?php set_checked($pconfig['passtos'], $chk); ?>
- <input name="passtos" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Set the TOS IP header value of tunnel packets to match the encapsulated packet value"); ?>.
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr id="inter_client_communication">
- <td width="22%" valign="top" class="vncell"><?=gettext("Inter-client communication"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="inter-client communication">
- <tr>
- <td>
- <?php set_checked($pconfig['client2client'], $chk); ?>
- <input name="client2client" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Allow communication between clients connected to this server"); ?>
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr id="duplicate_cn">
- <td width="22%" valign="top" class="vncell"><?=gettext("Duplicate Connections"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="duplicate connection">
- <tr>
- <td>
- <?php set_checked($pconfig['duplicate_cn'], $chk); ?>
- <input name="duplicate_cn" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Allow multiple concurrent connections from clients using the same Common Name.<br />NOTE: This is not generally recommended, but may be needed for some scenarios."); ?>
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
- <tr id="chkboxNoTunIPv6">
- <td width="22%" valign="top" class="vncell"><?=gettext("Disable IPv6"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="disable-ipv6-srv">
- <tr>
- <td>
- <?php set_checked($pconfig['no_tun_ipv6'], $chk); ?>
- <input name="no_tun_ipv6" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Don't forward IPv6 traffic"); ?>.
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" id="client_opts" summary="client settings">
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Client Settings"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Dynamic IP"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="dynamic ip">
- <tr>
- <td>
- <?php set_checked($pconfig['dynamic_ip'], $chk); ?>
- <input name="dynamic_ip" type="checkbox" id="dynamic_ip" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Allow connected clients to retain their connections if their IP address changes"); ?>.<br />
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Address Pool"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="address pool">
- <tr>
- <td>
- <?php set_checked($pconfig['pool_enable'], $chk); ?>
- <input name="pool_enable" type="checkbox" id="pool_enable" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Provide a virtual adapter IP address to clients (see Tunnel Network)"); ?><br />
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr id="topology_subnet_opt">
- <td width="22%" valign="top" class="vncell"><?=gettext("Topology"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="topology">
- <tr>
- <td>
- <?php set_checked($pconfig['topology_subnet'], $chk); ?>
- <input name="topology_subnet" type="checkbox" id="topology_subnet" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Allocate only one IP per client (topology subnet), rather than an isolated subnet per client (topology net30)."); ?><br />
- </span>
- </td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <td>
- <?=gettext("Relevant when supplying a virtual adapter IP address to clients when using tun mode on IPv4."); ?><br />
- <?=gettext("Some clients may require this even for IPv6, such as OpenVPN Connect (iOS/Android). Others may break if it is present, such as older versions of OpenVPN or clients such as Yealink phones."); ?><br />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("DNS Default Domain"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="dns default domain">
- <tr>
- <td>
- <?php set_checked($pconfig['dns_domain_enable'], $chk); ?>
- <input name="dns_domain_enable" type="checkbox" id="dns_domain_enable" value="yes" <?=$chk;?> onclick="dns_domain_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Provide a default domain name to clients"); ?><br />
- </span>
- </td>
- </tr>
- </table>
- <table border="0" cellpadding="2" cellspacing="0" id="dns_domain_data" summary="dns domain data">
- <tr>
- <td>
- <input name="dns_domain" type="text" class="formfld unknown" id="dns_domain" size="30" value="<?=htmlspecialchars($pconfig['dns_domain']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("DNS Servers"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="dns servers">
- <tr>
- <td>
- <?php set_checked($pconfig['dns_server_enable'], $chk); ?>
- <input name="dns_server_enable" type="checkbox" id="dns_server_enable" value="yes" <?=$chk;?> onclick="dns_server_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Provide a DNS server list to clients"); ?><br />
- </span>
- </td>
- </tr>
- </table>
- <table border="0" cellpadding="2" cellspacing="0" id="dns_server_data" summary="dns servers">
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #1:&nbsp;
- </span>
- <input name="dns_server1" type="text" class="formfld unknown" id="dns_server1" size="20" value="<?=htmlspecialchars($pconfig['dns_server1']);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #2:&nbsp;
- </span>
- <input name="dns_server2" type="text" class="formfld unknown" id="dns_server2" size="20" value="<?=htmlspecialchars($pconfig['dns_server2']);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #3:&nbsp;
- </span>
- <input name="dns_server3" type="text" class="formfld unknown" id="dns_server3" size="20" value="<?=htmlspecialchars($pconfig['dns_server3']);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #4:&nbsp;
- </span>
- <input name="dns_server4" type="text" class="formfld unknown" id="dns_server4" size="20" value="<?=htmlspecialchars($pconfig['dns_server4']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
- <tr id="chkboxPushRegisterDNS">
- <td width="22%" valign="top" class="vncell"><?=gettext("Force DNS cache update"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="push register dns">
- <tr>
- <td>
- <?php set_checked($pconfig['push_register_dns'], $chk); ?>
- <input name="push_register_dns" type="checkbox" value="yes" <?=$chk;?> />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Run ''net stop dnscache'', ''net start dnscache'', ''ipconfig /flushdns'' and ''ipconfig /registerdns'' on connection initiation. This is known to kick Windows into recognizing pushed DNS servers."); ?><br />
- </span>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("NTP Servers"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="ntp servers">
- <tr>
- <td>
- <?php set_checked($pconfig['ntp_server_enable'], $chk); ?>
- <input name="ntp_server_enable" type="checkbox" id="ntp_server_enable" value="yes" <?=$chk;?> onclick="ntp_server_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Provide a NTP server list to clients"); ?><br />
- </span>
- </td>
- </tr>
- </table>
- <table border="0" cellpadding="2" cellspacing="0" id="ntp_server_data" summary="ntp servers">
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #1:&nbsp;
- </span>
- <input name="ntp_server1" type="text" class="formfld unknown" id="ntp_server1" size="20" value="<?=htmlspecialchars($pconfig['ntp_server1']);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #2:&nbsp;
- </span>
- <input name="ntp_server2" type="text" class="formfld unknown" id="ntp_server2" size="20" value="<?=htmlspecialchars($pconfig['ntp_server2']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("NetBIOS Options"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="netboios options">
- <tr>
- <td>
- <?php set_checked($pconfig['netbios_enable'], $chk); ?>
- <input name="netbios_enable" type="checkbox" id="netbios_enable" value="yes" <?=$chk;?> onclick="netbios_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Enable NetBIOS over TCP/IP"); ?><br />
- </span>
- </td>
- </tr>
- </table>
- <?=gettext("If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) will be disabled"); ?>.
- <br />
- <table border="0" cellpadding="2" cellspacing="0" id="netbios_data" summary="netboios options">
- <tr>
- <td>
- <br />
- <span class="vexpl">
- <?=gettext("Node Type"); ?>:&nbsp;
- </span>
- <select name='netbios_ntype' class="formselect">
- <?php
- foreach ($netbios_nodetypes as $type => $name):
- $selected = "";
- if ($pconfig['netbios_ntype'] == $type) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$type;?>" <?=$selected;?>><?=$name;?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <?=gettext("Possible options: b-node (broadcasts), p-node " .
- "(point-to-point name queries to a WINS server), " .
- "m-node (broadcast then query name server), and " .
- "h-node (query name server, then broadcast)"); ?>.
- </td>
- </tr>
- <tr>
- <td>
- <br />
- <span class="vexpl">
- <?=gettext("Scope ID"); ?>:&nbsp;
- </span>
- <input name="netbios_scope" type="text" class="formfld unknown" id="netbios_scope" size="30" value="<?=htmlspecialchars($pconfig['netbios_scope']);?>" />
- <br />
- <?=gettext("A NetBIOS Scope ID provides an extended naming " .
- "service for NetBIOS over TCP/IP. The NetBIOS " .
- "scope ID isolates NetBIOS traffic on a single " .
- "network to only those nodes with the same " .
- "NetBIOS scope ID"); ?>.
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr id="wins_opts">
- <td width="22%" valign="top" class="vncell"><?=gettext("WINS Servers"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="wins servers">
- <tr>
- <td>
- <?php set_checked($pconfig['wins_server_enable'], $chk); ?>
- <input name="wins_server_enable" type="checkbox" id="wins_server_enable" value="yes" <?=$chk;?> onclick="wins_server_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Provide a WINS server list to clients"); ?><br />
- </span>
- </td>
- </tr>
- </table>
- <table border="0" cellpadding="2" cellspacing="0" id="wins_server_data" summary="wins servers">
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #1:&nbsp;
- </span>
- <input name="wins_server1" type="text" class="formfld unknown" id="wins_server1" size="20" value="<?=htmlspecialchars($pconfig['wins_server1']);?>" />
- </td>
- </tr>
- <tr>
- <td>
- <span class="vexpl">
- <?=gettext("Server"); ?> #2:&nbsp;
- </span>
- <input name="wins_server2" type="text" class="formfld unknown" id="wins_server2" size="20" value="<?=htmlspecialchars($pconfig['wins_server2']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Client Management Port"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="client management port">
- <tr>
- <td>
- <?php set_checked($pconfig['client_mgmt_port_enable'], $chk); ?>
- <input name="client_mgmt_port_enable" type="checkbox" id="client_mgmt_port_enable" value="yes" <?=$chk;?> onclick="client_mgmt_port_change()" />
- </td>
- <td>
- <span class="vexpl">
- <?=gettext("Use a different management port on clients. The default port is 166. Specify a different port if the client machines need to select from multiple OpenVPN links."); ?><br />
- </span>
- </td>
- </tr>
- </table>
- <table border="0" cellpadding="2" cellspacing="0" id="client_mgmt_port_data" summary="client management port">
- <tr>
- <td>
- <input name="client_mgmt_port" type="text" class="formfld unknown" id="client_mgmt_port" size="30" value="<?=htmlspecialchars($pconfig['client_mgmt_port']);?>" />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
-
- <table width="100%" border="0" cellpadding="6" cellspacing="0" id="client_opts" summary="advance configuration">
- <tr>
- <td colspan="2" class="list" height="12"></td>
- </tr>
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Advanced configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Advanced"); ?></td>
- <td width="78%" class="vtable">
- <table border="0" cellpadding="2" cellspacing="0" summary="advance configuration">
- <tr>
- <td>
- <textarea rows="6" cols="78" name="custom_options" id="custom_options"><?=htmlspecialchars($pconfig['custom_options']);?></textarea><br />
- <?=gettext("Enter any additional options you would like to add to the OpenVPN server configuration here, separated by a semicolon"); ?><br />
- <?=gettext("EXAMPLE: push \"route 10.0.0.0 255.255.255.0\""); ?>;
- </td>
- </tr>
- </table>
- </td>
- </tr>
-
- <tr id="comboboxVerbosityLevel">
- <td width="22%" valign="top" class="vncell"><?=gettext("Verbosity level");?></td>
- <td width="78%" class="vtable">
- <select name="verbosity_level" class="formselect">
- <?php
- foreach ($openvpn_verbosity_level as $verb_value => $verb_desc):
- $selected = "";
- if ($pconfig['verbosity_level'] == $verb_value) {
- $selected = "selected=\"selected\"";
- }
- ?>
- <option value="<?=$verb_value;?>" <?=$selected;?>><?=$verb_desc;?></option>
- <?php endforeach; ?>
- </select>
- <br />
- <?=gettext("Each level shows all info from the previous levels. Level 3 is recommended if you want a good summary of what's happening without being swamped by output"); ?>.<br /> <br />
- <strong>none</strong> -- <?=gettext("No output except fatal errors"); ?>. <br />
- <strong>default</strong>-<strong>4</strong> -- <?=gettext("Normal usage range"); ?>. <br />
- <strong>5</strong> -- <?=gettext("Output R and W characters to the console for each packet read and write, uppercase is used for TCP/UDP packets and lowercase is used for TUN/TAP packets"); ?>. <br />
- <strong>6</strong>-<strong>11</strong> -- <?=gettext("Debug info range"); ?>.
- </td>
- </tr>
-
- </table>
-
- <br />
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="icons">
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
- <input name="act" type="hidden" value="<?=$act;?>" />
- <?php if (isset($id) && $a_server[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </form>
-
- <?php else: ?>
-
- <table class="sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="list">
- <thead>
- <tr>
- <td width="10%" class="listhdrr"><?=gettext("Disabled"); ?></td>
- <td width="10%" class="listhdrr"><?=gettext("Protocol / Port"); ?></td>
- <td width="30%" class="listhdrr"><?=gettext("Tunnel Network"); ?></td>
- <td width="40%" class="listhdrr"><?=gettext("Description"); ?></td>
- <td width="10%" class="list"></td>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <td class="list" colspan="4"></td>
- <td class="list">
- <a href="vpn_openvpn_server.php?act=new"><img src="./themes/<?=$g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("add server"); ?>" width="17" height="17" border="0" alt="add" />
- </a>
- </td>
- </tr>
- </tfoot>
- <tbody>
- <?php
- $i = 0;
- foreach ($a_server as $server):
- $disabled = "NO";
- if (isset($server['disable'])) {
- $disabled = "YES";
- }
- ?>
- <tr>
- <td class="listlr" ondblclick="document.location='vpn_openvpn_server.php?act=edit&amp;id=<?=$i;?>'">
- <?=$disabled;?>
- </td>
- <td class="listr" ondblclick="document.location='vpn_openvpn_server.php?act=edit&amp;id=<?=$i;?>'">
- <?=htmlspecialchars($server['protocol']);?> / <?=htmlspecialchars($server['local_port']);?>
- </td>
- <td class="listr" ondblclick="document.location='vpn_openvpn_server.php?act=edit&amp;id=<?=$i;?>'">
- <?=htmlspecialchars($server['tunnel_network']);?><br />
- <?=htmlspecialchars($server['tunnel_networkv6']);?><br />
- </td>
- <td class="listbg" ondblclick="document.location='vpn_openvpn_server.php?act=edit&amp;id=<?=$i;?>'">
- <?=htmlspecialchars($server['description']);?>
- </td>
- <td valign="middle" class="list nowrap">
- <a href="vpn_openvpn_server.php?act=edit&amp;id=<?=$i;?>">
- <img src="./themes/<?=$g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("edit server"); ?>" width="17" height="17" border="0" alt="edit" />
- </a>
- &nbsp;
- <a href="vpn_openvpn_server.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this server?"); ?>')">
- <img src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete server"); ?>" width="17" height="17" border="0" alt="delete" />
- </a>
- </td>
- </tr>
- <?php
- $i++;
- endforeach;
- ?>
- <tr style="display:none;"><td></td></tr>
- </tbody>
- </table>
-
- <?=gettext("Additional OpenVPN servers can be added here.");?>
-
- <?php endif; ?>
-
- </td>
- </tr>
-</table>
-<script type="text/javascript">
-//<![CDATA[
-mode_change();
-autokey_change();
-tlsauth_change();
-gwredir_change();
-dns_domain_change();
-dns_server_change();
-wins_server_change();
-client_mgmt_port_change();
-ntp_server_change();
-netbios_change();
-tuntap_change();
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
-<?php
-
-/* local utility functions */
-
-function set_checked($var,& $chk) {
- if ($var) {
- $chk = "checked=\"checked\"";
- } else {
- $chk = "";
- }
-}
-
-?>
diff --git a/usr/local/www/vpn_pppoe.php b/usr/local/www/vpn_pppoe.php
deleted file mode 100644
index 4ad8d72..0000000
--- a/usr/local/www/vpn_pppoe.php
+++ /dev/null
@@ -1,167 +0,0 @@
-<?php
-/*
- vpn_pppoe.php
- Copyright (C) 2010 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_MODULE: pppoe
-*/
-
-##|+PRIV
-##|*IDENT=page-services-pppoeserver
-##|*NAME=Services: PPPoE Server page
-##|*DESCR=Allow access to the 'Services: PPPoE Server' page.
-##|*MATCH=vpn_pppoe.php*
-##|-PRIV
-
-require_once("guiconfig.inc");
-require_once("filter.inc");
-require_once("vpn.inc");
-
-if (!is_array($config['pppoes']['pppoe'])) {
- $config['pppoes']['pppoe'] = array();
-}
-
-$a_pppoes = &$config['pppoes']['pppoe'];
-
-if ($_POST) {
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
- if (file_exists("{$g['tmp_path']}/.vpn_pppoe.apply")) {
- $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.vpn_pppoe.apply"));
- foreach ($toapplylist as $pppoeid) {
- if (!is_numeric($pppoeid)) {
- continue;
- }
- if (is_array($config['pppoes']['pppoe'])) {
- foreach ($config['pppoes']['pppoe'] as $pppoe) {
- if ($pppoe['pppoeid'] == $pppoeid) {
- vpn_pppoe_configure($pppoe);
- break;
- }
- }
- }
- }
- @unlink("{$g['tmp_path']}/.vpn_pppoe.apply");
- }
- $retval = 0;
- $retval |= filter_configure();
- $savemsg = get_std_save_message($retval);
- clear_subsystem_dirty('vpnpppoe');
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($a_pppoes[$_GET['id']]) {
- if ("{$g['varrun_path']}/pppoe" . $a_pppoes[$_GET['id']]['pppoeid'] . "-vpn.pid") {
- killbypid("{$g['varrun_path']}/pppoe" . $a_pppoes[$_GET['id']]['pppoeid'] . "-vpn.pid");
- }
- if (is_dir("{$g['varetc_path']}/pppoe" . $a_pppoes[$_GET['id']]['pppoeid'])) {
- mwexec("/bin/rm -r {$g['varetc_path']}/pppoe" . $a_pppoes[$_GET['id']]['pppoeid']);
- }
- unset($a_pppoes[$_GET['id']]);
- write_config();
- header("Location: vpn_pppoe.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("VPN"), gettext("PPPoE"));
-$shortcut_section = "pppoes";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="vpn_pppoe.php" method="post">
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (is_subsystem_dirty('vpnpppoe')): ?><br/>
-<?php print_info_box_np(gettext("The PPPoE entry list has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?>
-<?php endif; ?>
-
-<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td width="15%" class="listhdrr"><?=gettext("Interface");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Local IP");?></td>
- <td width="25%" class="listhdrr"><?=gettext("Number of users");?></td>
- <td width="25%" class="listhdr"><?=gettext("Description");?></td>
- <td width="5%" class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="pppoe server">
- <tr>
- <td valign="middle" width="17">&nbsp;</td>
- <td valign="middle"><a href="vpn_pppoe_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new pppoe instance");?>" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i = 0;
- foreach ($a_pppoes as $pppoe):
-?>
- <tr>
- <td class="listlr" ondblclick="document.location='vpn_pppoe_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars(convert_friendly_interface_to_friendly_descr($pppoe['interface']));?>
- </td>
- <td class="listlr" ondblclick="document.location='vpn_pppoe_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($pppoe['localip']);?>
- </td>
- <td class="listr" ondblclick="document.location='vpn_pppoe_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($pppoe['n_pppoe_units']);?>
- </td>
- <td class="listbg" ondblclick="document.location='vpn_pppoe_edit.php?id=<?=$i;?>';">
- <?=htmlspecialchars($pppoe['descr']);?>&nbsp;
- </td>
- <td valign="middle" class="list nowrap">
- <table border="0" cellspacing="0" cellpadding="1" summary="icons">
- <tr>
- <td valign="middle"><a href="vpn_pppoe_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit PPPoE instance"); ?>" alt="edit" /></a></td>
- <td><a href="vpn_pppoe.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this entry? All elements that still use it will become invalid (e.g. filter rules)!");?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete pppoe instance");?>" alt="delete" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
-<?php
- $i++;
- endforeach;
-?>
- <tr>
- <td class="list" colspan="4"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td valign="middle" width="17">&nbsp;</td>
- <td valign="middle"><a href="vpn_pppoe_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new pppoe instance");?>" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/vpn_pppoe_edit.php b/usr/local/www/vpn_pppoe_edit.php
deleted file mode 100644
index 343c1f9..0000000
--- a/usr/local/www/vpn_pppoe_edit.php
+++ /dev/null
@@ -1,671 +0,0 @@
-<?php
-/*
- vpn_pppoe_edit.php
- part of pfSense
-
- Copyright (C) 2005 Scott Ullrich (sullrich@gmail.com)
- Copyright (C) 2010 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-services-pppoeserver-edit
-##|*NAME=Services: PPPoE Server: Edit page
-##|*DESCR=Allow access to the 'Services: PPPoE Server: Edit' page.
-##|*MATCH=vpn_pppoe_edit.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("vpn.inc");
-
-function vpn_pppoe_get_id() {
- global $config;
-
- $vpnid = 1;
- if (is_array($config['pppoes']['pppoe'])) {
- foreach ($config['pppoes']['pppoe'] as $pppoe) {
- if ($vpnid == $pppoe['pppoeid']) {
- $vpnid++;
- } else {
- return $vpnid;
- }
- }
- }
-
- return $vpnid;
-}
-
-if (!is_array($config['pppoes']['pppoe'])) {
- $config['pppoes']['pppoe'] = array();
-}
-$a_pppoes = &$config['pppoes']['pppoe'];
-
-if (is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
-if (isset($id) && $a_pppoes[$id]) {
- $pppoecfg =& $a_pppoes[$id];
-
- $pconfig['remoteip'] = $pppoecfg['remoteip'];
- $pconfig['localip'] = $pppoecfg['localip'];
- $pconfig['mode'] = $pppoecfg['mode'];
- $pconfig['interface'] = $pppoecfg['interface'];
- $pconfig['n_pppoe_units'] = $pppoecfg['n_pppoe_units'];
- $pconfig['pppoe_subnet'] = $pppoecfg['pppoe_subnet'];
- $pconfig['pppoe_dns1'] = $pppoecfg['dns1'];
- $pconfig['pppoe_dns2'] = $pppoecfg['dns2'];
- $pconfig['descr'] = $pppoecfg['descr'];
- $pconfig['username'] = $pppoecfg['username'];
- $pconfig['pppoeid'] = $pppoecfg['pppoeid'];
- if (is_array($pppoecfg['radius'])) {
- $pconfig['radacct_enable'] = isset($pppoecfg['radius']['accounting']);
- $pconfig['radiusissueips'] = isset($pppoecfg['radius']['radiusissueips']);
- if (is_array($pppoecfg['radius']['server'])) {
- $pconfig['radiusenable'] = isset($pppoecfg['radius']['server']['enable']);
- $pconfig['radiusserver'] = $pppoecfg['radius']['server']['ip'];
- $pconfig['radiusserverport'] = $pppoecfg['radius']['server']['port'];
- $pconfig['radiusserveracctport'] = $pppoecfg['radius']['server']['acctport'];
- $pconfig['radiussecret'] = $pppoecfg['radius']['server']['secret'];
- }
- if (is_array($pppoecfg['radius']['server2'])) {
- $pconfig['radiussecenable'] = isset($pppoecfg['radius']['server2']['enable']);
- $pconfig['radiusserver2'] = $pppoecfg['radius']['server2']['ip'];
- $pconfig['radiusserver2port'] = $pppoecfg['radius']['server2']['port'];
- $pconfig['radiusserver2acctport'] = $pppoecfg['radius']['server2']['acctport'];
- $pconfig['radiussecret2'] = $pppoecfg['radius']['server2']['secret2'];
- }
- $pconfig['radius_nasip'] = $pppoecfg['radius']['nasip'];
- $pconfig['radius_acct_update'] = $pppoecfg['radius']['acct_update'];
- }
-}
-
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if ($_POST['mode'] == "server") {
- $reqdfields = explode(" ", "localip remoteip");
- $reqdfieldsn = array(gettext("Server address"), gettext("Remote start address"));
-
- if ($_POST['radiusenable']) {
- $reqdfields = array_merge($reqdfields, explode(" ", "radiusserver radiussecret"));
- $reqdfieldsn = array_merge($reqdfieldsn,
- array(gettext("RADIUS server address"), gettext("RADIUS shared secret")));
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (($_POST['localip'] && !is_ipaddr($_POST['localip']))) {
- $input_errors[] = gettext("A valid server address must be specified.");
- }
- if (($_POST['pppoe_subnet'] && !is_ipaddr($_POST['remoteip']))) {
- $input_errors[] = gettext("A valid remote start address must be specified.");
- }
- if (($_POST['radiusserver'] && !is_ipaddr($_POST['radiusserver']))) {
- $input_errors[] = gettext("A valid RADIUS server address must be specified.");
- }
-
- $_POST['remoteip'] = $pconfig['remoteip'] = gen_subnet($_POST['remoteip'], $_POST['pppoe_subnet']);
- $subnet_start = ip2ulong($_POST['remoteip']);
- $subnet_end = ip2ulong($_POST['remoteip']) + $_POST['pppoe_subnet'] - 1;
- if ((ip2ulong($_POST['localip']) >= $subnet_start) &&
- (ip2ulong($_POST['localip']) <= $subnet_end)) {
- $input_errors[] = gettext("The specified server address lies in the remote subnet.");
- }
- if ($_POST['localip'] == get_interface_ip($_POST['interface'])) {
- $input_errors[] = gettext("The specified server address is equal to an interface ip address.");
- }
-
- for ($x = 0; $x < 4999; $x++) {
- if ($_POST["username{$x}"]) {
- if (empty($_POST["password{$x}"])) {
- $input_errors[] = sprintf(gettext("No password specified for username %s"), $_POST["username{$x}"]);
- }
- if ($_POST["ip{$x}"] <> "" && !is_ipaddr($_POST["ip{$x}"])) {
- $input_errors[] = sprintf(gettext("Incorrect ip address specified for username %s"), $_POST["username{$x}"]);
- }
- }
- }
- }
-
- if ($_POST['pppoeid'] && !is_numeric($_POST['pppoeid'])) {
- $input_errors[] = gettext("Wrong data submitted");
- }
-
- if (!$input_errors) {
- $pppoecfg = array();
-
- $pppoecfg['remoteip'] = $_POST['remoteip'];
- $pppoecfg['localip'] = $_POST['localip'];
- $pppoecfg['mode'] = $_POST['mode'];
- $pppoecfg['interface'] = $_POST['interface'];
- $pppoecfg['n_pppoe_units'] = $_POST['n_pppoe_units'];
- $pppoecfg['pppoe_subnet'] = $_POST['pppoe_subnet'];
- $pppoecfg['descr'] = $_POST['descr'];
- if ($_POST['radiusserver'] || $_POST['radiusserver2']) {
- $pppoecfg['radius'] = array();
-
- $pppoecfg['radius']['nasip'] = $_POST['radius_nasip'];
- $pppoecfg['radius']['acct_update'] = $_POST['radius_acct_update'];
- }
- if ($_POST['radiusserver']) {
- $pppoecfg['radius']['server'] = array();
-
- $pppoecfg['radius']['server']['ip'] = $_POST['radiusserver'];
- $pppoecfg['radius']['server']['secret'] = $_POST['radiussecret'];
- $pppoecfg['radius']['server']['port'] = $_POST['radiusserverport'];
- $pppoecfg['radius']['server']['acctport'] = $_POST['radiusserveracctport'];
- }
- if ($_POST['radiusserver2']) {
- $pppoecfg['radius']['server2'] = array();
-
- $pppoecfg['radius']['server2']['ip'] = $_POST['radiusserver2'];
- $pppoecfg['radius']['server2']['secret2'] = $_POST['radiussecret2'];
- $pppoecfg['radius']['server2']['port'] = $_POST['radiusserver2port'];
- $pppoecfg['radius']['server2']['acctport'] = $_POST['radiusserver2acctport'];
- }
-
- if ($_POST['pppoe_dns1'] <> "") {
- $pppoecfg['dns1'] = $_POST['pppoe_dns1'];
- }
-
- if ($_POST['pppoe_dns2'] <> "") {
- $pppoecfg['dns2'] = $_POST['pppoe_dns2'];
- }
-
- if ($_POST['radiusenable'] == "yes") {
- $pppoecfg['radius']['server']['enable'] = true;
- }
-
- if ($_POST['radiussecenable'] == "yes") {
- $pppoecfg['radius']['server2']['enable'] = true;
- }
-
- if ($_POST['radacct_enable'] == "yes") {
- $pppoecfg['radius']['accounting'] = true;
- }
-
- if ($_POST['radiusissueips'] == "yes") {
- $pppoecfg['radius']['radiusissueips'] = true;
- }
-
- if ($_POST['pppoeid']) {
- $pppoecfg['pppoeid'] = $_POST['pppoeid'];
- } else {
- $pppoecfg['pppoeid'] = vpn_pppoe_get_id();
- }
-
- $users = array();
- for ($x = 0; $x < 4999; $x++) {
- if ($_POST["username{$x}"]) {
- $usernam = $_POST["username{$x}"] . ":" . base64_encode($_POST["password{$x}"]);
- if ($_POST["ip{$x}"]) {
- $usernam .= ":" . $_POST["ip{$x}"];
- }
- $users[] = $usernam;
- }
- }
- if (count($users) > 0) {
- $pppoecfg['username'] = implode(" ", $users);
- }
-
- if (!isset($id)) {
- $id = count($a_pppoes);
- }
- if (file_exists("{$g['tmp_path']}/.vpn_pppoe.apply")) {
- $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.vpn_pppoe.apply"));
- } else {
- $toapplylist = array();
- }
-
- $toapplylist[] = $pppoecfg['pppoeid'];
- $a_pppoes[$id] = $pppoecfg;
-
- write_config();
- mark_subsystem_dirty('vpnpppoe');
- file_put_contents("{$g['tmp_path']}/.vpn_pppoe.apply", serialize($toapplylist));
- header("Location: vpn_pppoe.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("Services"), gettext("PPPoE Server"), gettext("Edit"));
-$shortcut_section = "pppoes";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript" src="/javascript/row_helper.js"></script>
-
-<input type='hidden' name='username' value='textbox' class="formfld unknown" />
-<input type='hidden' name='password' value='textbox' />
-<input type='hidden' name='ip' value='textbox' />
-
-<script type="text/javascript">
- //<![CDATA[
- rowname[0] = "username";
- rowtype[0] = "textbox";
- rowsize[0] = "20";
-
- rowname[1] = "password";
- rowtype[1] = "password";
- rowsize[1] = "20";
-
- rowname[2] = "ip";
- rowtype[2] = "textbox";
- rowsize[2] = "10";
- //]]>
-</script>
-
-<script type="text/javascript">
-//<![CDATA[
-function get_radio_value(obj) {
- for (i = 0; i < obj.length; i++) {
- if (obj[i].checked) {
- return obj[i].value;
- }
- }
- return null;
-}
-
-function enable_change(enable_over) {
- if ((get_radio_value(document.iform.mode) == "server") || enable_over) {
- document.iform.remoteip.disabled = 0;
- document.iform.descr.disabled = 0;
- document.iform.localip.disabled = 0;
- document.iform.radiusenable.disabled = 0;
- document.iform.interface.disabled = 0;
- document.iform.n_pppoe_units.disabled = 0;
- document.iform.pppoe_subnet.disabled = 0;
- document.iform.pppoe_dns1.disabled = 0;
- document.iform.pppoe_dns2.disabled = 0;
- if (document.iform.radiusenable.checked || enable_over) {
- document.iform.radacct_enable.disabled = 0;
- document.iform.radiusserver.disabled = 0;
- document.iform.radiussecret.disabled = 0;
- document.iform.radiusserverport.disabled = 0;
- document.iform.radiusserveracctport.disabled = 0;
- document.iform.radiusissueips.disabled = 0;
- document.iform.radius_nasip.disabled = 0;
- document.iform.radiusissueips.disabled = 0;
- document.iform.radius_nasip.disabled = 0;
- document.iform.radius_acct_update.disabled = 0;
- document.iform.radiussecenable.disabled = 0;
- if (document.iform.radiussecenable.checked || enable_over) {
- document.iform.radiusserver2.disabled = 0;
- document.iform.radiussecret2.disabled = 0;
- document.iform.radiusserver2port.disabled = 0;
- document.iform.radiusserver2acctport.disabled = 0;
- } else {
-
- document.iform.radiusserver2.disabled = 1;
- document.iform.radiussecret2.disabled = 1;
- document.iform.radiusserver2port.disabled = 1;
- document.iform.radiusserver2acctport.disabled = 1;
- }
- } else {
- document.iform.radacct_enable.disabled = 1;
- document.iform.radiusserver.disabled = 1;
- document.iform.radiussecret.disabled = 1;
- document.iform.radiusserverport.disabled = 1;
- document.iform.radiusserveracctport.disabled = 1;
- document.iform.radiusissueips.disabled = 1;
- document.iform.radius_nasip.disabled = 1;
- document.iform.radius_acct_update.disabled = 1;
- document.iform.radiussecenable.disabled = 1;
- }
- } else {
- document.iform.interface.disabled = 1;
- document.iform.n_pppoe_units.disabled = 1;
- document.iform.pppoe_subnet.disabled = 1;
- document.iform.remoteip.disabled = 1;
- document.iform.descr.disabled = 1;
- document.iform.localip.disabled = 1;
- document.iform.pppoe_dns1.disabled = 1;
- document.iform.pppoe_dns2.disabled = 1;
- document.iform.radiusenable.disabled = 1;
- document.iform.radiussecenable.disabled = 1;
- document.iform.radacct_enable.disabled = 1;
- document.iform.radiusserver.disabled = 1;
- document.iform.radiussecret.disabled = 1;
- document.iform.radiusserverport.disabled = 1;
- document.iform.radiusserveracctport.disabled = 1;
- document.iform.radiusserver2.disabled = 1;
- document.iform.radiussecret2.disabled = 1;
- document.iform.radiusserver2port.disabled = 1;
- document.iform.radiusserver2acctport.disabled = 1;
- document.iform.radiusissueips.disabled = 1;
- document.iform.radius_nasip.disabled = 1;
- document.iform.radius_acct_update.disabled = 1;
- }
-}
-//]]>
-</script>
-<form action="vpn_pppoe_edit.php" method="post" name="iform" id="iform">
-<?php
-if ($input_errors) {
- print_input_errors($input_errors);
-}
-if ($savemsg) {
- print_info_box($savemsg);
-}
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="pppoe edit">
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td height="16" colspan="2" class="listtopic" valign="top"><?php echo gettext("PPPoE server configuration"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable">
- <input name="mode" type="radio" onclick="enable_change(false)" value="off" <?php if ($pconfig['mode'] != "server") echo "checked=\"checked\"";?> />
- <?=gettext("Off"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable">
- <input type="radio" name="mode" value="server" onclick="enable_change(false)" <?php if ($pconfig['mode'] == "server") echo "checked=\"checked\""; ?> />
- <?=gettext("Enable PPPoE server"); ?>
- </td>
- </tr>
-
- <tr>
- <td width="22%" valign="top" class="vncell"><b><?=gettext("Interface"); ?></b></td>
- <td width="78%" valign="top" class="vtable">
-
- <select name="interface" class="formselect" id="interface">
-<?php
- $interfaces = get_configured_interface_with_descr();
- foreach ($interfaces as $iface => $ifacename):
-?>
- <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
-<?php
- endforeach;
-?>
- </select> <br />
-
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet netmask"); ?></td>
- <td width="78%" class="vtable">
- <select id="pppoe_subnet" name="pppoe_subnet">
-<?php
- for ($x = 0; $x < 33; $x++) {
- if ($x == $pconfig['pppoe_subnet']) {
- $selected = "selected=\"selected\"";
- } else {
- $selected = "";
- }
- echo "<option value=\"{$x}\" {$selected}>{$x}</option>\n";
- }
-?>
- </select>
- <br /><?=gettext("Hint"); ?>: 24 <?=gettext("is"); ?> 255.255.255.0
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("No. PPPoE users"); ?></td>
- <td width="78%" class="vtable">
- <select id="n_pppoe_units" name="n_pppoe_units">
-<?php
- for ($x = 0; $x < 255; $x++) {
- if ($x == $pconfig['n_pppoe_units']) {
- $selected = "selected=\"selected\"";
- } else {
- $selected = "";
- }
- echo "<option value=\"{$x}\" {$selected}>{$x}</option>\n";
- }
-?>
- </select>
- <br /><?=gettext("Hint: 10 is ten PPPoE clients"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Server address"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="localip" type="text" class="formfld unknown" id="localip" size="20" value="<?=htmlspecialchars($pconfig['localip']);?>" />
- <br />
- <?=gettext("Enter the IP address the PPPoE server should give to clients for use as their \"gateway\""); ?>.
- <br />
- <?=gettext("Typically this is set to an unused IP just outside of the client range"); ?>.
- <br />
- <br />
- <?=gettext("NOTE: This should NOT be set to any IP address currently in use on this firewall"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Remote address range"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="remoteip" type="text" class="formfld unknown" id="remoteip" size="20" value="<?=htmlspecialchars($pconfig['remoteip']);?>" />
- <br />
- <?=gettext("Specify the starting address for the client IP address subnet"); ?>.<br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
- <br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("DNS servers"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="pppoe_dns1" type="text" class="formfld unknown" id="pppoe_dns1" size="20" value="<?=htmlspecialchars($pconfig['pppoe_dns1']);?>" />
- <br />
- <input name="pppoe_dns2" type="text" class="formfld unknown" id="pppoe_dns2" size="20" value="<?=htmlspecialchars($pconfig['pppoe_dns2']);?>" />
- <br />
- <?=gettext("If entered they will be given to all PPPoE clients, else LAN DNS and one WAN DNS will go to all clients"); ?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS"); ?></td>
- <td width="78%" class="vtable">
- <input name="radiusenable" type="checkbox" id="radiusenable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radiusenable']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Use a RADIUS server for authentication"); ?><br />
- </strong><?=gettext("When set, all users will be authenticated using " .
- "the RADIUS server specified below. The local user database " .
- "will not be used"); ?>.<br />
- <br />
- <input name="radacct_enable" type="checkbox" id="radacct_enable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radacct_enable']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable RADIUS accounting"); ?> <br />
- <br />
- </strong><?=gettext("Sends accounting packets to the RADIUS server"); ?>.<br />
- <input name="radiussecenable" type="checkbox" id="radiussecenable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radiussecenable']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Use Backup RADIUS Server"); ?></strong><br />
- <?=gettext("When set, if primary server fails all requests will be sent via backup server"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("NAS IP Address"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="radius_nasip" type="text" class="formfld unknown" id="radius_nasip" size="20" value="<?=htmlspecialchars($pconfig['radius_nasip']);?>" />
- <br /><?=gettext("RADIUS server NAS IP Address"); ?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("RADIUS Accounting Update"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="radius_acct_update" type="text" class="formfld unknown" id="radius_acct_update" size="20" value="<?=htmlspecialchars($pconfig['radius_acct_update']);?>" />
- <br /><?=gettext("RADIUS accounting update period in seconds"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS issued IPs"); ?></td>
- <td width="78%" valign="top" class="vtable">
- <input name="radiusissueips" value="yes" type="checkbox" class="formfld" id="radiusissueips" <?php if ($pconfig['radiusissueips']) echo "checked=\"checked\""; ?> />
- <br /><?=gettext("Issue IP Addresses via RADIUS server"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS server Primary"); ?></td>
- <td width="78%" class="vtable">
- <input name="radiusserver" type="text" class="formfld unknown" id="radiusserver" size="20" value="<?=htmlspecialchars($pconfig['radiusserver']);?>" />
- <input name="radiusserverport" type="text" class="formfld unknown" id="radiusserverport" size="4" value="<?=htmlspecialchars($pconfig['radiusserverport']);?>" />
- <input name="radiusserveracctport" type="text" class="formfld unknown" id="radiusserveracctport" size="4" value="<?=htmlspecialchars($pconfig['radiusserveracctport']);?>" />
- <br /><?=gettext("Enter the IP address, authentication port and accounting port (optional) of the RADIUS server."); ?><br />
- <br /> <?=gettext("standard port 1812 and 1813 accounting"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS primary shared secret"); ?></td>
- <td width="78%" valign="top" class="vtable">
- <input name="radiussecret" type="password" class="formfld pwd" id="radiussecret" size="20" value="<?=htmlspecialchars($pconfig['radiussecret']);?>" />
- <br /><?=gettext("Enter the shared secret that will be used to authenticate " .
- "to the RADIUS server"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS server Secondary"); ?></td>
- <td width="78%" class="vtable">
- <input name="radiusserver2" type="text" class="formfld unknown" id="radiusserver2" size="20" value="<?=htmlspecialchars($pconfig['radiusserver2']);?>" />
- <input name="radiusserver2port" type="text" class="formfld unknown" id="radiusserver2port" size="4" value="<?=htmlspecialchars($pconfig['radiusserver2port']);?>" />
- <input name="radiusserver2acctport" type="text" class="formfld unknown" id="radiusserver2acctport" size="4" value="<?=htmlspecialchars($pconfig['radiusserver2acctport']);?>" />
- <br /><?=gettext("Enter the IP address, authentication port and accounting port (optional) of the backup RADIUS server."); ?><br />
- <br /> <?=gettext("standard port 1812 and 1813 accounting"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS secondary shared secret"); ?></td>
- <td width="78%" valign="top" class="vtable">
- <input name="radiussecret2" type="password" class="formfld pwd" id="radiussecret2" size="20" value="<?=htmlspecialchars($pconfig['radiussecret2']);?>" />
- <br />
- <?=gettext("Enter the shared secret that will be used to authenticate " .
- "to the RADIUS server"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><div id="addressnetworkport"><?=gettext("User (s)");?></div></td>
- <td width="78%" class="vtable">
- <table id="usertable" summary="users">
- <tbody>
- <tr>
- <td><div id="onecolumn"><?=gettext("Username");?></div></td>
- <td><div id="twocolumn"><?=gettext("Password");?></div></td>
- <td><div id="thirdcolumn"><?=gettext("IP");?></div></td>
- </tr>
-<?php
- $counter = 0;
- $usernames = $pconfig['username'];
- if ($usernames <> ""):
- $item = explode(" ", $usernames);
- foreach ($item as $ww):
- $wws = explode(":", $ww);
- $user = $wws[0];
- $passwd = base64_decode($wws[1]);
- $ip = $wws[2];
- $tracker = $counter;
-?>
- <tr>
- <td>
- <input name="username<?php echo $tracker; ?>" type="text" class="formfld unknown" id="username<?php echo $tracker; ?>" size="20" value="<?=htmlspecialchars($user);?>" />
- </td>
- <td>
- <input name="password<?php echo $tracker; ?>" type="password" class="formfld pwd" id="password<?php echo $tracker; ?>" size="20" value="<?=htmlspecialchars($passwd);?>" />
- </td>
- <td>
- <input name="ip<?php echo $tracker; ?>" type="text" class="formfld unknown" id="ip<?php echo $tracker; ?>" size="10" value="<?=htmlspecialchars($ip);?>" />
- </td>
- <td>
- <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="delete" /></a>
- </td>
- </tr>
-<?php
- $counter++;
- endforeach;
- endif;
-?>
- </tbody>
- </table>
- <a onclick="javascript:addRowTo('usertable'); return false;" href="#">
- <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
- </a>
- </td>
- </tr>
- <tr>
- <td height="16" colspan="2" valign="top"></td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
-<?php
- if (isset($id)) {
- echo "<input type=\"hidden\" name=\"id\" id=\"id\" value=\"" . htmlspecialchars($id, ENT_QUOTES | ENT_HTML401) . "\" />";
- }
-?>
-<?php
- if (isset($pconfig['pppoeid'])) {
- echo "<input type=\"hidden\" name=\"pppoeid\" id=\"pppoeid\" value=\"{$pppoeid}\" />";
- }
-?>
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
- <a href="vpn_pppoe.php"><input name="Cancel" type="button" class="formbtn" value="<?=gettext("Cancel"); ?>" /></a>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <span class="vexpl">
- <span class="red"><strong><?=gettext("Note"); ?>:<br /></strong></span>
- <?=gettext("don't forget to add a firewall rule to permit traffic from PPPoE clients"); ?>!
- </span>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-</form>
-<script type="text/javascript">
- //<![CDATA[
- enable_change(false);
-
- field_counter_js = 3;
- rows = 1;
- totalrows = <?php echo $counter; ?>;
- loaded = <?php echo $counter; ?>;
- //]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/vpn_pptp.php b/usr/local/www/vpn_pptp.php
deleted file mode 100644
index b6ded68..0000000
--- a/usr/local/www/vpn_pptp.php
+++ /dev/null
@@ -1,504 +0,0 @@
-<?php
-/*
- vpn_pptp.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-vpn-vpnpptp
-##|*NAME=VPN: VPN PPTP page
-##|*DESCR=Allow access to the 'VPN: VPN PPTP' page.
-##|*MATCH=vpn_pptp.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("functions.inc");
-require_once("filter.inc");
-require_once("shaper.inc");
-require_once("vpn.inc");
-
-if (!is_array($config['pptpd']['radius'])) {
- $config['pptpd']['radius'] = array();
-}
-$pptpcfg = &$config['pptpd'];
-
-$pconfig['remoteip'] = $pptpcfg['remoteip'];
-$pconfig['localip'] = $pptpcfg['localip'];
-$pconfig['redir'] = $pptpcfg['redir'];
-$pconfig['mode'] = $pptpcfg['mode'];
-$pconfig['wins'] = $pptpcfg['wins'];
-$pconfig['req128'] = isset($pptpcfg['req128']);
-$pconfig['n_pptp_units'] = $pptpcfg['n_pptp_units'];
-$pconfig['pptp_dns1'] = $pptpcfg['dns1'];
-$pconfig['pptp_dns2'] = $pptpcfg['dns2'];
-$pconfig['radiusenable'] = isset($pptpcfg['radius']['server']['enable']);
-$pconfig['radiusissueips'] = isset($pptpcfg['radius']['radiusissueips']);
-$pconfig['radiussecenable'] = isset($pptpcfg['radius']['server2']['enable']);
-$pconfig['radacct_enable'] = isset($pptpcfg['radius']['accounting']);
-$pconfig['radiusserver'] = $pptpcfg['radius']['server']['ip'];
-$pconfig['radiusserverport'] = $pptpcfg['radius']['server']['port'];
-$pconfig['radiusserveracctport'] = $pptpcfg['radius']['server']['acctport'];
-$pconfig['radiussecret'] = $pptpcfg['radius']['server']['secret'];
-$pconfig['radiusserver2'] = $pptpcfg['radius']['server2']['ip'];
-$pconfig['radiusserver2port'] = $pptpcfg['radius']['server2']['port'];
-$pconfig['radiusserver2acctport'] = $pptpcfg['radius']['server2']['acctport'];
-$pconfig['radiussecret2'] = $pptpcfg['radius']['server2']['secret2'];
-$pconfig['radius_acct_update'] = $pptpcfg['radius']['acct_update'];
-$pconfig['radius_nasip'] = $pptpcfg['radius']['nasip'];
-
-if ($_POST) {
-
- if (isset($input_errors))
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if ($_POST['mode'] == "server") {
- $reqdfields = explode(" ", "localip remoteip");
- $reqdfieldsn = array(gettext("Server address"),gettext("Remote start address"));
-
- if ($_POST['radiusenable']) {
- $reqdfields = array_merge($reqdfields, explode(" ", "radiusserver radiussecret"));
- $reqdfieldsn = array_merge($reqdfieldsn,
- array(gettext("RADIUS server address"),gettext("RADIUS shared secret")));
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (($_POST['localip'] && !is_ipaddr($_POST['localip']))) {
- $input_errors[] = gettext("A valid server address must be specified.");
- }
- if (is_ipaddr_configured($_POST['localip'])) {
- $input_errors[] = gettext("'Server address' parameter should NOT be set to any IP address currently in use on this firewall.");
- }
- if (!is_ipaddr($_POST['remoteip'])) {
- $input_errors[] = gettext("A valid remote start address must be specified.");
- }
- if (($_POST['radiusserver'] && !is_ipaddr($_POST['radiusserver']))) {
- $input_errors[] = gettext("A valid RADIUS server address must be specified.");
- }
-
- if (!$input_errors) {
- $subnet_start = ip2ulong($_POST['remoteip']);
- $subnet_end = ip2ulong($_POST['remoteip']) + $_POST['n_pptp_units'] - 1;
-
- if ((ip2ulong($_POST['localip']) >= $subnet_start) &&
- (ip2ulong($_POST['localip']) <= $subnet_end)) {
- $input_errors[] = gettext("The specified server address lies in the remote subnet.");
- }
- // TODO: Should this check be for any local IP address?
- if ($_POST['localip'] == $config['interfaces']['lan']['ipaddr']) {
- $input_errors[] = gettext("The specified server address is equal to the LAN interface address.");
- }
- }
- } else if ($_POST['mode'] == "redir") {
- $reqdfields = explode(" ", "redir");
- $reqdfieldsn = array(gettext("PPTP redirection target address"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (($_POST['redir'] && !is_ipaddr($_POST['redir']))) {
- $input_errors[] = gettext("A valid target address must be specified.");
- }
- } else if (isset($config['pptpd']['mode'])) {
- unset($config['pptpd']['mode']);
- }
-
- if (!$input_errors) {
- $pptpcfg['remoteip'] = $_POST['remoteip'];
- $pptpcfg['redir'] = $_POST['redir'];
- $pptpcfg['localip'] = $_POST['localip'];
- $pptpcfg['mode'] = $_POST['mode'];
- $pptpcfg['wins'] = $_POST['wins'];
- $pptpcfg['n_pptp_units'] = $_POST['n_pptp_units'];
- $pptpcfg['radius']['server']['ip'] = $_POST['radiusserver'];
- $pptpcfg['radius']['server']['port'] = $_POST['radiusserverport'];
- $pptpcfg['radius']['server']['acctport'] = $_POST['radiusserveracctport'];
- $pptpcfg['radius']['server']['secret'] = $_POST['radiussecret'];
- $pptpcfg['radius']['server2']['ip'] = $_POST['radiusserver2'];
- $pptpcfg['radius']['server2']['port'] = $_POST['radiusserver2port'];
- $pptpcfg['radius']['server2']['acctport'] = $_POST['radiusserver2acctport'];
- $pptpcfg['radius']['server2']['secret2'] = $_POST['radiussecret2'];
- $pptpcfg['radius']['nasip'] = $_POST['radius_nasip'];
- $pptpcfg['radius']['acct_update'] = $_POST['radius_acct_update'];
-
- if ($_POST['pptp_dns1'] == "") {
- if (isset($pptpcfg['dns1']))
- unset($pptpcfg['dns1']);
- } else
- $pptpcfg['dns1'] = $_POST['pptp_dns1'];
-
- if ($_POST['pptp_dns2'] == "") {
- if (isset($pptpcfg['dns2']))
- unset($pptpcfg['dns2']);
- } else
- $pptpcfg['dns2'] = $_POST['pptp_dns2'];
-
- if($_POST['req128'] == "yes")
- $pptpcfg['req128'] = true;
- else if (isset($pptpcfg['req128']))
- unset($pptpcfg['req128']);
-
- if($_POST['radiusenable'] == "yes")
- $pptpcfg['radius']['server']['enable'] = true;
- else if (isset($pptpcfg['radius']['server']['enable']))
- unset($pptpcfg['radius']['server']['enable']);
-
- if($_POST['radiussecenable'] == "yes")
- $pptpcfg['radius']['server2']['enable'] = true;
- else if (isset($pptpcfg['radius']['server2']['enable']))
- unset($pptpcfg['radius']['server2']['enable']);
-
- if($_POST['radacct_enable'] == "yes")
- $pptpcfg['radius']['accounting'] = true;
- else if (isset($pptpcfg['radius']['accounting']))
- unset($pptpcfg['radius']['accounting']);
-
- if($_POST['radiusissueips'] == "yes") {
- $pptpcfg['radius']['radiusissueips'] = true;
- } else if (isset($pptpcfg['radius']['radiusissueips']))
- unset($pptpcfg['radius']['radiusissueips']);
-
- write_config();
-
- $retval = 0;
- $retval = vpn_pptpd_configure();
- $savemsg = get_std_save_message($retval);
-
- filter_configure();
- }
-}
-
-$pgtitle = array(gettext("VPN"),gettext("VPN PPTP"));
-$shortcut_section = "pptps";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<script type="text/javascript">
-//<![CDATA[
-function get_radio_value(obj)
-{
- for (i = 0; i < obj.length; i++) {
- if (obj[i].checked)
- return obj[i].value;
- }
- return null;
-}
-
-function enable_change(enable_over) {
- if ((get_radio_value(document.iform.mode) == "server") || enable_over) {
- document.iform.remoteip.disabled = 0;
- document.iform.localip.disabled = 0;
- document.iform.req128.disabled = 0;
- document.iform.radiusenable.disabled = 0;
- document.iform.radiusissueips.disabled = 0;
- document.iform.wins.disabled = 0;
- document.iform.n_pptp_units.disabled = 0;
- document.iform.pptp_dns1.disabled = 0;
- document.iform.pptp_dns2.disabled = 0;
-
- if (document.iform.radiusenable.checked || enable_over) {
- document.iform.radiussecenable.disabled = 0;
- document.iform.radacct_enable.disabled = 0;
- document.iform.radiusserver.disabled = 0;
- document.iform.radiusserverport.disabled = 0;
- document.iform.radiusserveracctport.disabled = 0;
- document.iform.radiussecret.disabled = 0;
- document.iform.radius_nasip.disabled = 0;
- document.iform.radius_acct_update.disabled = 0;
- document.iform.radiusissueips.disabled = 0;
- if (document.iform.radiussecenable.checked || enable_over) {
- document.iform.radiusserver2.disabled = 0;
- document.iform.radiussecret2.disabled = 0;
- document.iform.radiusserver2port.disabled = 0;
- document.iform.radiusserver2acctport.disabled = 0;
- } else {
-
- document.iform.radiusserver2.disabled = 1;
- document.iform.radiussecret2.disabled = 1;
- document.iform.radiusserver2port.disabled = 1;
- document.iform.radiusserver2acctport.disabled = 1;
- }
- } else {
- document.iform.radacct_enable.disabled = 1;
- document.iform.radiusserver.disabled = 1;
- document.iform.radiusserverport.disabled = 1;
- document.iform.radiusissueips.disabled = 1;
- document.iform.radiusserveracctport.disabled = 1;
- document.iform.radiussecret.disabled = 1;
- document.iform.radius_nasip.disabled = 1;
- document.iform.radius_acct_update.disabled = 1;
- document.iform.radiusissueips.disabled = 1;
- document.iform.radiusserver2.disabled = 1;
- document.iform.radiussecret2.disabled = 1;
- document.iform.radiusserver2port.disabled = 1;
- document.iform.radiusserver2acctport.disabled = 1;
- }
-
- } else {
- document.iform.remoteip.disabled = 1;
- document.iform.localip.disabled = 1;
- document.iform.req128.disabled = 1;
- document.iform.n_pptp_units.disabled = 1;
- document.iform.pptp_dns1.disabled = 1;
- document.iform.pptp_dns2.disabled = 1;
- document.iform.radiusenable.disabled = 1;
- document.iform.radacct_enable.disabled = 1;
- document.iform.radiusserver.disabled = 1;
- document.iform.radiusserverport.disabled = 1;
- document.iform.radiusissueips.disabled = 1;
- document.iform.radiusserveracctport.disabled = 1;
- document.iform.radiussecret.disabled = 1;
- document.iform.radius_nasip.disabled = 1;
- document.iform.radius_acct_update.disabled = 1;
- document.iform.radiussecenable.disabled = 1;
- document.iform.radiusserver2.disabled = 1;
- document.iform.radiusserver2port.disabled = 1;
- document.iform.radiusserver2acctport.disabled = 1;
- document.iform.radiussecret2.disabled = 1;
- document.iform.wins.disabled = 1;
- document.iform.radiusissueips.disabled = 1;
- }
- if ((get_radio_value(document.iform.mode) == "redir") || enable_over) {
- document.iform.redir.disabled = 0;
- } else {
- document.iform.redir.disabled = 1;
- }
-}
-//]]>
-</script>
-<form action="vpn_pptp.php" method="post" name="iform" id="iform">
-<?php if ($input_errors) print_input_errors($input_errors); ?>
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php print_info_box(gettext("PPTP is no longer considered a secure VPN technology because it relies upon MS-CHAPv2 which has been compromised. If you continue to use PPTP be aware that intercepted traffic can be decrypted by a third party, so it should be considered unencrypted. We advise migrating to another VPN type such as OpenVPN or IPsec.<br /><br /><a href=\"https://isc.sans.edu/diary/End+of+Days+for+MS-CHAPv2/13807\">Read More</a>")); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn pptp">
- <tr><td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Configuration"), true, "vpn_pptp.php");
- $tab_array[1] = array(gettext("Users"), false, "vpn_pptp_users.php");
- display_top_tabs($tab_array);
-?>
- </td></tr>
- <tr>
- <td>
-<div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable">
- <input name="mode" type="radio" onclick="enable_change(false)" value="off"
- <?php if (($pconfig['mode'] != "server") && ($pconfig['mode'] != "redir")) echo "checked=\"checked\"";?> />
- <?=gettext("Off"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable">
-
- <input type="radio" name="mode" value="redir" onclick="enable_change(false)" <?php if ($pconfig['mode'] == "redir") echo "checked=\"checked\"" ?> />
- <?=gettext("Redirect incoming PPTP connections to");?>:</td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("PPTP redirection");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="redir" type="text" class="formfld unknown" id="redir" size="20" value="<?=htmlspecialchars($pconfig['redir']);?>" />
- <br />
- <?=gettext("Enter the IP address of a host which will accept incoming " .
- "PPTP connections"); ?>.</td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vtable">&nbsp;</td>
- <td width="78%" class="vtable">
- <input type="radio" name="mode" value="server" onclick="enable_change(false)" <?php if ($pconfig['mode'] == "server") echo "checked=\"checked\""; ?> />
- <?=gettext("Enable PPTP server"); ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("No. PPTP users"); ?></td>
- <td width="78%" class="vtable">
- <select id="n_pptp_units" name="n_pptp_units">
- <?php
- $toselect = ($pconfig['n_pptp_units'] > 0) ? $pconfig['n_pptp_units'] : 16;
- for($x=1; $x<255; $x++) {
- if($x == $toselect)
- $SELECTED = " selected=\"selected\"";
- else
- $SELECTED = "";
- echo "<option value=\"{$x}\"{$SELECTED}>{$x}</option>\n";
- }
- ?>
- </select>
- <br /><?=gettext("Hint: 10 is ten PPTP clients"); ?>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Server address"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="localip" type="text" class="formfld unknown" id="localip" size="20" value="<?=htmlspecialchars($pconfig['localip']);?>" />
- <br />
- <?=gettext("Enter the IP address the PPTP server should give to clients for use as their \"gateway\""); ?>.
- <br />
- <?=gettext("Typically this is set to an unused IP just outside of the client range"); ?>.
- <br />
- <br />
- <?=gettext("NOTE: This should NOT be set to any IP address currently in use on this firewall"); ?>.</td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Remote address " .
- "range"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="remoteip" type="text" class="formfld unknown" id="remoteip" size="20" value="<?=htmlspecialchars($pconfig['remoteip']);?>" />
- <br />
- <?=gettext("Specify the starting address for the client IP subnet"); ?>.<br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("PPTP DNS Servers"); ?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="pptp_dns1" type="text" class="formfld unknown" id="pptp_dns1" size="20" value="<?=htmlspecialchars($pconfig['pptp_dns1']);?>" />
- <br />
- <input name="pptp_dns2" type="text" class="formfld unknown" id="pptp_dns2" size="20" value="<?=htmlspecialchars($pconfig['pptp_dns2']);?>" />
- <br />
- <?=gettext("primary and secondary DNS servers assigned to PPTP clients"); ?><br />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("WINS Server"); ?></td>
- <td width="78%" valign="top" class="vtable">
- <input name="wins" class="formfld unknown" id="wins" size="20" value="<?=htmlspecialchars($pconfig['wins']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS"); ?></td>
- <td width="78%" class="vtable">
- <input name="radiusenable" type="checkbox" id="radiusenable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radiusenable']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Use a RADIUS server for authentication"); ?></strong><br />
- <?=gettext("When set, all users will be authenticated using " .
- "the RADIUS server specified below. The local user database " .
- "will not be used"); ?>.<br />
- <br />
- <input name="radacct_enable" type="checkbox" id="radacct_enable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radacct_enable']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Enable RADIUS accounting"); ?> <br />
- </strong><?=gettext("Sends accounting packets to the RADIUS server"); ?>.<br />
- <br />
- <input name="radiussecenable" type="checkbox" id="radiussecenable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radiussecenable']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Secondary RADIUS server for failover authentication"); ?></strong><br />
- <?=gettext("When set, all requests will go to the secondary server when primary fails"); ?><br />
- <br />
- <input name="radiusissueips" value="yes" type="checkbox" class="formfld" id="radiusissueips"<?php if($pconfig['radiusissueips']) echo " checked=\"checked\""; ?> />
- <strong><?=gettext("RADIUS issued IPs"); ?></strong>
- <br /><?=gettext("Issue IP addresses via RADIUS server"); ?>.
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS NAS IP"); ?></td>
- <td width="78%" valign="top" class="vtable">
- <input name="radius_nasip" class="formfld unknown" id="radius_nasip" size="20" value="<?=htmlspecialchars($pconfig['radius_nasip']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS Accounting Update"); ?></td>
- <td width="78%" valign="top" class="vtable">
- <input name="radius_acct_update" class="formfld unknown" id="radius_acct_update" size="20" value="<?=htmlspecialchars($pconfig['radius_acct_update']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS Server"); ?> </td>
- <td width="78%" class="vtable">
- <input name="radiusserver" type="text" class="formfld unknown" id="radiusserver" size="20" value="<?=htmlspecialchars($pconfig['radiusserver']);?>" />
- <input name="radiusserverport" type="text" class="formfld unknown" id="radiusserverport" size="4" value="<?=htmlspecialchars($pconfig['radiusserverport']);?>" />
- <input name="radiusserveracctport" type="text" class="formfld unknown" id="radiusserveracctport" size="4" value="<?=htmlspecialchars($pconfig['radiusserveracctport']);?>" />
- <br />
- <?=gettext("Enter the IP address, RADIUS port, and RADIUS accounting port of the RADIUS server"); ?>.</td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS shared secret"); ?></td>
- <td width="78%" valign="top" class="vtable">
- <input name="radiussecret" type="password" class="formfld pwd" id="radiussecret" size="20" value="<?=htmlspecialchars($pconfig['radiussecret']);?>" />
- <br />
- <?=gettext("Enter the shared secret that will be used to authenticate " .
- "to the RADIUS server"); ?>.</td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Secondary RADIUS server"); ?> </td>
- <td width="78%" class="vtable">
- <input name="radiusserver2" type="text" class="formfld unknown" id="radiusserver2" size="20" value="<?=htmlspecialchars($pconfig['radiusserver2']);?>" />
- <input name="radiusserver2port" type="text" class="formfld unknown" id="radiusserver2port" size="4" value="<?=htmlspecialchars($pconfig['radiusserver2port']);?>" />
- <input name="radiusserver2acctport" type="text" class="formfld unknown" id="radiusserver2acctport" size="4" value="<?=htmlspecialchars($pconfig['radiusserver2acctport']);?>" />
- <br />
- <?=gettext("Enter the IP address, RADIUS port, and RADIUS accounting port of the RADIUS server"); ?>.</td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("Secondary RADIUS shared secret"); ?></td>
- <td width="78%" valign="top" class="vtable">
- <input name="radiussecret2" type="password" class="formfld pwd" id="radiussecret2" size="20" value="<?=htmlspecialchars($pconfig['radiussecret2']);?>" />
- <br />
- <?=gettext("Enter the shared secret that will be used to authenticate " .
- "to the secondary RADIUS server"); ?>.</td>
- </tr>
- <tr>
- <td height="16" colspan="2" valign="top"></td>
- </tr>
- <tr>
- <td width="22%" valign="middle">&nbsp;</td>
- <td width="78%" class="vtable">
- <input name="req128" type="checkbox" id="req128" value="yes" <?php if ($pconfig['req128']) echo "checked=\"checked\""; ?> />
- <strong><?=gettext("Require 128-bit encryption"); ?></strong><br />
- <?=gettext("When set, only 128-bit encryption will be accepted. Otherwise " .
- "40-bit and 56-bit encryption will be accepted as well. Note that " .
- "encryption will always be forced on PPTP connections (i.e. " .
- "unencrypted connections will not be accepted)"); ?>.</td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%"><span class="vexpl"><span class="red"><strong><?=gettext("Note");?>:<br />
- </strong></span><?=gettext("don't forget to ");?><a href="firewall_rules.php?if=pptp"><?=gettext("add a firewall rule"); ?></a> <?=gettext("to permit ".
- "traffic from PPTP clients");?>!</span></td>
- </tr>
- </table>
-</div>
- </td>
- </tr>
-</table>
-</form>
-<script type="text/javascript">
-//<![CDATA[
-enable_change(false);
-//]]>
-</script>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/vpn_pptp_users.php b/usr/local/www/vpn_pptp_users.php
deleted file mode 100644
index 553888f..0000000
--- a/usr/local/www/vpn_pptp_users.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-/*
- vpn_pptp_users.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-vpn-vpnpptp-users
-##|*NAME=VPN: VPN PPTP: Users page
-##|*DESCR=Allow access to the 'VPN: VPN PPTP: Users' page.
-##|*MATCH=vpn_pptp_users.php*
-##|-PRIV
-
-require("guiconfig.inc");
-require_once("vpn.inc");
-
-if (!is_array($config['pptpd']['user'])) {
- $config['pptpd']['user'] = array();
-}
-$a_secret = &$config['pptpd']['user'];
-
-if ($_POST) {
-
- $pconfig = $_POST;
-
- if ($_POST['apply']) {
- $retval = 0;
- $retval = vpn_setup();
- $savemsg = get_std_save_message($retval);
- if ($retval == 0) {
- if (is_subsystem_dirty('pptpusers'))
- clear_subsystem_dirty('pptpusers');
- }
- }
-}
-
-if ($_GET['act'] == "del") {
- if ($a_secret[$_GET['id']]) {
- unset($a_secret[$_GET['id']]);
- write_config();
- mark_subsystem_dirty('pptpusers');
- header("Location: vpn_pptp_users.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("VPN"),gettext("VPN PPTP"),gettext("Users"));
-$shortcut_section = "pptps";
-include("head.inc");
-
-?>
-
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<form action="vpn_pptp_users.php" method="post">
-<?php if ($savemsg) print_info_box($savemsg); ?>
-<?php if (isset($config['pptpd']['radius']['enable']))
- print_info_box(gettext("Warning: RADIUS is enabled. The local user database will not be used.")); ?>
-<?php if (is_subsystem_dirty('pptpusers')): ?><br/>
-<?php print_info_box_np(gettext("The PPTP user list has been modified").".<br />".gettext("You must apply the changes in order for them to take effect").".<br /></b><b>".gettext("Warning: this will terminate all current PPTP sessions")."!");?><br />
-<?php endif; ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn pptp users">
- <tr><td class="tabnavtbl">
-<?php
- $tab_array = array();
- $tab_array[0] = array(gettext("Configuration"), false, "vpn_pptp.php");
- $tab_array[1] = array(gettext("Users"), true, "vpn_pptp_users.php");
- display_top_tabs($tab_array);
-?> </td></tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td class="listhdrr"><?=gettext("Username");?></td>
- <td class="listhdr"><?=gettext("IP address");?></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17"></td>
- <td><a href="vpn_pptp_users_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add user");?>" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- <?php $i = 0; foreach ($a_secret as $secretent): ?>
- <tr>
- <td class="listlr">
- <?=htmlspecialchars($secretent['name']);?>
- </td>
- <td class="listr">
- <?=htmlspecialchars($secretent['ip']);?>&nbsp;
- </td>
- <td class="list nowrap"><a href="vpn_pptp_users_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit user");?>" width="17" height="17" border="0" alt="edit" /></a>
- &nbsp;<a href="vpn_pptp_users.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this user?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete user");?>" width="17" height="17" border="0" alt="delete" /></a></td>
- </tr>
- <?php $i++; endforeach; ?>
- <tr>
- <td class="list" colspan="2"></td>
- <td class="list">
- <table border="0" cellspacing="0" cellpadding="1" summary="add">
- <tr>
- <td width="17"></td>
- <td><a href="vpn_pptp_users_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add user");?>" width="17" height="17" border="0" alt="add" /></a></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
-</div>
- </td>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/vpn_pptp_users_edit.php b/usr/local/www/vpn_pptp_users_edit.php
deleted file mode 100644
index 8b09a7f..0000000
--- a/usr/local/www/vpn_pptp_users_edit.php
+++ /dev/null
@@ -1,184 +0,0 @@
-<?php
-/*
- vpn_pptp_users_edit.php
- part of m0n0wall (http://m0n0.ch/wall)
- part of pfSense
-
- Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-vpn-vpnpptp-user-edit
-##|*NAME=VPN: VPN PPTP: User: Edit page
-##|*DESCR=Allow access to the 'VPN: VPN PPTP: User: Edit' page.
-##|*MATCH=vpn_pptp_users_edit.php*
-##|-PRIV
-
-function pptpusercmp($a, $b) {
- return strcasecmp($a['name'], $b['name']);
-}
-
-function pptpd_users_sort() {
- global $config;
-
- if (!is_array($config['ppptpd']['user']))
- return;
-
- usort($config['pptpd']['user'], "pptpusercmp");
-}
-
-require("guiconfig.inc");
-require_once("vpn.inc");
-
-if (!is_array($config['pptpd']['user'])) {
- $config['pptpd']['user'] = array();
-}
-$a_secret = &$config['pptpd']['user'];
-
-if (is_numericint($_GET['id']))
- $id = $_GET['id'];
-if (isset($_POST['id']) && is_numericint($_POST['id']))
- $id = $_POST['id'];
-
-if (isset($id) && $a_secret[$id]) {
- $pconfig['username'] = $a_secret[$id]['name'];
- $pconfig['ip'] = $a_secret[$id]['ip'];
-}
-
-if ($_POST) {
-
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- if (isset($id) && ($a_secret[$id])) {
- $reqdfields = explode(" ", "username");
- $reqdfieldsn = array(gettext("Username"));
- } else {
- $reqdfields = explode(" ", "username passwordfld1");
- $reqdfieldsn = array(gettext("Username"),gettext("Password"));
- }
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
- if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['username']))
- $input_errors[] = gettext("The username contains invalid characters.");
-
- if (preg_match("/^!/", $_POST['passwordfld1']))
- $input_errors[] = gettext("The password cannot start with '!'.");
-
- if (!preg_match("/^[\x20-\x7E]*$/", $_POST['passwordfld1']))
- $input_errors[] = gettext("The password contains invalid characters.");
-
- if (($_POST['passwordfld1']) && ($_POST['passwordfld1'] != $_POST['passwordfld2'])) {
- $input_errors[] = gettext("The passwords do not match.");
- }
- if (($_POST['ip'] && !is_ipaddr($_POST['ip']))) {
- $input_errors[] = gettext("The IP address entered is not valid.");
- }
-
- if (!$input_errors && !(isset($id) && $a_secret[$id])) {
- /* make sure there are no dupes */
- foreach ($a_secret as $secretent) {
- if ($secretent['name'] == $_POST['username']) {
- $input_errors[] = gettext("Another entry with the same username already exists.");
- break;
- }
- }
- }
-
- if (!$input_errors) {
-
- if (isset($id) && $a_secret[$id])
- $secretent = $a_secret[$id];
-
- $secretent['name'] = $_POST['username'];
- $secretent['ip'] = $_POST['ip'];
-
- if ($_POST['passwordfld1'])
- $secretent['password'] = $_POST['passwordfld1'];
-
- if (isset($id) && $a_secret[$id])
- $a_secret[$id] = $secretent;
- else
- $a_secret[] = $secretent;
- pptpd_users_sort();
-
- write_config();
- mark_subsystem_dirty('pptpusers');
-
- header("Location: vpn_pptp_users.php");
- exit;
- }
-}
-
-$pgtitle = array(gettext("VPN"),gettext("VPN PPTP"),gettext("User"),gettext("Edit"));
-$shortcut_section = "pptps";
-include("head.inc");
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<?php include("fbegin.inc"); ?>
-<?php if ($input_errors) print_input_errors($input_errors); ?>
- <form action="vpn_pptp_users_edit.php" method="post" name="iform" id="iform">
- <div id="mainarea">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="vpn pptp users edit">
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Username");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="username" type="text" class="formfld user" id="username" size="20" value="<?=htmlspecialchars($pconfig['username']);?>" />
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Password");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="passwordfld1" type="password" class="formfld pwd" id="passwordfld1" size="20" />
- <br /><?=$mandfldhtml;?><input name="passwordfld2" type="password" class="formfld pwd" id="passwordfld2" size="20" />
- &nbsp;(<?=gettext("confirmation");?>)<?php if (isset($id) && $a_secret[$id]): ?><br />
- <span class="vexpl"><?=gettext("If you want to change the users' password, ".
- "enter it here twice.");?></span><?php endif; ?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncell"><?=gettext("IP address");?></td>
- <td width="78%" class="vtable">
- <input name="ip" type="text" class="formfld unknown" id="ip" size="20" value="<?=htmlspecialchars($pconfig['ip']);?>" />
- <br /><span class="vexpl"><?=gettext("If you want the user to be assigned a specific IP address, enter it here.");?></span></td>
- </tr>
- <tr>
- <td class="vncell" width="22%" valign="top">&nbsp;</td>
- <td class="vncell" width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
- <?php if (isset($id) && $a_secret[$id]): ?>
- <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
- <?php endif; ?>
- </td>
- </tr>
- </table>
- </div>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
diff --git a/usr/local/www/widgets/include/captiveportal.inc b/usr/local/www/widgets/include/captiveportal.inc
deleted file mode 100644
index 3714209..0000000
--- a/usr/local/www/widgets/include/captiveportal.inc
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-$captive_portal_status_title = "Captive Portal Status";
-$captive_portal_status_title_link = "status_captiveportal.php";
-?>
diff --git a/usr/local/www/widgets/include/carp_status.inc b/usr/local/www/widgets/include/carp_status.inc
deleted file mode 100644
index 79d3c03..0000000
--- a/usr/local/www/widgets/include/carp_status.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-//set variable for custom title
-$carp_status_title = "Carp Status";
-$carp_status_title_link = "carp_status.php";
-
-?>
diff --git a/usr/local/www/widgets/include/dyn_dns_status.inc b/usr/local/www/widgets/include/dyn_dns_status.inc
deleted file mode 100644
index 8116fe7..0000000
--- a/usr/local/www/widgets/include/dyn_dns_status.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-//set variable for custom title
-$dyn_dns_status_title = "Dyn DNS Status";
-$dyn_dns_status_title_link = "services_dyndns.php";
-
-?>
diff --git a/usr/local/www/widgets/include/gateways.inc b/usr/local/www/widgets/include/gateways.inc
deleted file mode 100644
index 4666689..0000000
--- a/usr/local/www/widgets/include/gateways.inc
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-//set variable for custom title
-$gateways_title = "Gateways";
-$gateways_title_link = "status_gateways.php";
-?>
diff --git a/usr/local/www/widgets/include/gmirror_status.inc b/usr/local/www/widgets/include/gmirror_status.inc
deleted file mode 100644
index 6547d4d..0000000
--- a/usr/local/www/widgets/include/gmirror_status.inc
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-$gmirror_status_title = "GEOM Mirror Status";
-$gmirror_status_title_link = "diag_gmirror.php";
-?> \ No newline at end of file
diff --git a/usr/local/www/widgets/include/installed_packages.inc b/usr/local/www/widgets/include/installed_packages.inc
deleted file mode 100644
index a978191..0000000
--- a/usr/local/www/widgets/include/installed_packages.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-//set variable for custom title
-$installed_packages_title = "Installed Packages";
-$installed_packages_title_link = "pkg_mgr_installed.php";
-
-?> \ No newline at end of file
diff --git a/usr/local/www/widgets/include/interface_statistics.inc b/usr/local/www/widgets/include/interface_statistics.inc
deleted file mode 100644
index c789418..0000000
--- a/usr/local/www/widgets/include/interface_statistics.inc
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-//set variable for custom title
-$interface_statistics_title = "Interface Statistics";
-$interface_statistics_title_link = "status_interfaces.php";
-?> \ No newline at end of file
diff --git a/usr/local/www/widgets/include/interfaces.inc b/usr/local/www/widgets/include/interfaces.inc
deleted file mode 100644
index 6c19a6b..0000000
--- a/usr/local/www/widgets/include/interfaces.inc
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-//set variable for custom title
-$interfaces_title = "Interfaces";
-$interfaces_title_link = "status_interfaces.php";
-
-?> \ No newline at end of file
diff --git a/usr/local/www/widgets/include/ipsec.inc b/usr/local/www/widgets/include/ipsec.inc
deleted file mode 100644
index 6df0a7c..0000000
--- a/usr/local/www/widgets/include/ipsec.inc
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-$ipsec_title = "IPsec";
-$ipsec_title_link = "diag_ipsec.php";
-?>
diff --git a/usr/local/www/widgets/include/load_balancer.inc b/usr/local/www/widgets/include/load_balancer.inc
deleted file mode 100644
index 367ea46..0000000
--- a/usr/local/www/widgets/include/load_balancer.inc
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-$load_balancer_status_title = "Load Balancer Status";
-$load_balancer_status_title_link = "status_lb_pool.php";
-?>
diff --git a/usr/local/www/widgets/include/log.inc b/usr/local/www/widgets/include/log.inc
deleted file mode 100644
index 7ad453a..0000000
--- a/usr/local/www/widgets/include/log.inc
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-//set variable for custom title
-$log_title = "Firewall Logs";
-$log_title_link = "diag_logs_filter.php";
-
-?> \ No newline at end of file
diff --git a/usr/local/www/widgets/include/ntp_status.inc b/usr/local/www/widgets/include/ntp_status.inc
deleted file mode 100644
index 1115095..0000000
--- a/usr/local/www/widgets/include/ntp_status.inc
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-//set variable for custom title
-$ntp_status_title = "NTP Status";
-$ntp_status_title_link = "status_ntpd.php";
-?>
diff --git a/usr/local/www/widgets/include/openvpn.inc b/usr/local/www/widgets/include/openvpn.inc
deleted file mode 100644
index 075d0e5..0000000
--- a/usr/local/www/widgets/include/openvpn.inc
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-$openvpn_title = "OpenVPN";
-$openvpn_title_link = "status_openvpn.php";
-?> \ No newline at end of file
diff --git a/usr/local/www/widgets/include/services_status.inc b/usr/local/www/widgets/include/services_status.inc
deleted file mode 100644
index 685aee4..0000000
--- a/usr/local/www/widgets/include/services_status.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-//set variable for custom title
-$services_status_title = "Services Status";
-$services_status_title_link = "status_services.php";
-
-?> \ No newline at end of file
diff --git a/usr/local/www/widgets/include/smart_status.inc b/usr/local/www/widgets/include/smart_status.inc
deleted file mode 100644
index bbfa274..0000000
--- a/usr/local/www/widgets/include/smart_status.inc
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-//set variable for custom title
-$smart_status_title = "SMART Status";
-$smart_status_title_link = "diag_smart.php";
-?>
diff --git a/usr/local/www/widgets/include/thermal_sensors.inc b/usr/local/www/widgets/include/thermal_sensors.inc
deleted file mode 100644
index a6e727a..0000000
--- a/usr/local/www/widgets/include/thermal_sensors.inc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/*
- $Id: thermal_sensors.inc
- File location:
- \usr\local\www\widgets\include\
-
- Used by:
- \usr\local\www\widgets\widgets\thermal_sensors.widget.php
-
-
-*/
-
-//set variable for custom title
-$thermal_sensors_widget_title = "Thermal Sensors";
-//$thermal_sensors_widget_link = "thermal_sensors.php";
-
-
-//returns core temp data (from coretemp.ko or amdtemp.ko driver) as "|"-delimited string.
-//NOTE: depends on proper config in System >> Advanced >> Miscellaneous tab >> Thermal Sensors section.
-function getThermalSensorsData() {
-
- $_gb = exec("/sbin/sysctl -a | grep temperature", $dfout);
- $thermalSensorsData = join("|", $dfout);
- return $thermalSensorsData;
-
-}
-?>
diff --git a/usr/local/www/widgets/include/traffic_graph.inc b/usr/local/www/widgets/include/traffic_graph.inc
deleted file mode 100644
index 3901db6..0000000
--- a/usr/local/www/widgets/include/traffic_graph.inc
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-$traffic_graphs_title = "Traffic Graphs";
-$traffic_graphs_title_link = "status_graph.php";
-?>
diff --git a/usr/local/www/widgets/include/wake_on_lan.inc b/usr/local/www/widgets/include/wake_on_lan.inc
deleted file mode 100644
index af3229c..0000000
--- a/usr/local/www/widgets/include/wake_on_lan.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-//set variable for custom title
-$wake_on_lan_title = "Wake On Lan";
-$wake_on_lan_title_link = "services_wol.php";
-
-?> \ No newline at end of file
diff --git a/usr/local/www/widgets/javascript/cpu_graphs.js b/usr/local/www/widgets/javascript/cpu_graphs.js
deleted file mode 100644
index 1fc690a..0000000
--- a/usr/local/www/widgets/javascript/cpu_graphs.js
+++ /dev/null
@@ -1,245 +0,0 @@
-/******************************************************************************
- $Id: graphlink.js,v 1.1 2006/12/21 17:10:25 dberlin Exp $
-
- This file is part of the GraphLink software.
- GraphLink is distributed under the MIT License.
- Copyright (C) 2005-2006 Max Khitrov <max@mxsoft.org>
- ******************************************************************************/
-
-/***** Global data ************************************************************/
-
-var gl_graphCount = 0; // Number of graphs on the current page
-
-/***** Constants **************************************************************/
-
-var GL_START = 0;
-var GL_END = 1;
-var GL_STATIC = 0;
-var GL_DYNAMIC = 1;
-
-/***** Public functions *******************************************************/
-
-/**
- * Creates a graph and returns the graph data structure which can later be
- * manipulated using the other graph functions.
- *
- * element_id - DOM element id (should be a DIV) that will contain the graph.
- * width - The width of the graph in pixels.
- * height - Height of the graph in pixels.
- * bar_width - Width of each bar on the graph. This number should divide width
- * evenly, or else width will be adjusted to meet this requirement.
- * General formula to keep in mind:
- * Smaller bar width = more bars = higher CPU usage on client-side.
- *
- * Returns graph data structure on success, false on error.
- */
-function GraphInitialize(element_id, width, height, bar_width) {
- // Find the page element which will contain the graph
- var owner;
- if((owner = jQuery('#' + element_id)) == null) {
- alert("GraphLink Error: Element ID '" + element_id + "' not found.");
- return false;
- }
-
- // Make sure width is divisible by bar_width
- if(width / bar_width != Math.floor(width / bar_width))
- width = Math.floor(width / bar_width) * bar_width;
-
- var bar_count = width / bar_width;
-
- // Create the graph data structure
- var graph = new Array();
- graph['id'] = gl_graphCount; // ID used to separate elements of one graph from those of another
- graph['width'] = width; // Graph width
- graph['height'] = height; // Graph height
- graph['bar_count'] = bar_count; // Number of bars on the graph
- graph['scale_type'] = GL_STATIC; // How the graph is scaled
- graph['scale'] = 1; // Multiplier for the bar height
- graph['max'] = 0; // Largest value currently on the graph
- graph['vmax'] = height; // Virtual graph maximum
- graph['spans'] = new Array(bar_count); // References to all the spans for each graph
- graph['vals'] = new Array(bar_count); // The height of each bar on the graph, actually it's (graph height - bar height)
- gl_graphCount++;
-
- // Build the graph (x)html
- var graph_html = '';
- graph_html += '<div id="GraphLinkData' + graph['id'] + '" class="GraphLinkData">';
-
- for(var i = 0; i < bar_count; i++) {
- graph['vals'][i] = height;
- graph_html += '<span id="GraphLinkBar' + graph['id'] + '_' + i + '" class="GraphLinkBar"></span>';
- }
-
- graph_html += '</div>';
- owner.html(graph_html);
- graph['element_id'] = jQuery('#GraphLinkData' + graph['id']);
-
- for(i = 0; i < bar_count; i++) {
- graph['spans'][i] = jQuery('#GraphLinkBar' + graph['id'] + '_' + i);
- graph['spans'][i].css('width',bar_width + 'px');
- graph['spans'][i].css('margin-top',height + 'px');
- }
-
- return graph;
-}
-
-/**
- * Adds a new value to a graph.
- *
- * graph - Graph object to which to add the new value.
- * value - Value to add.
- * where - (optional) GL_START (0) or GL_END (1), depending on where you want
- * the new value to appear. GL_START will add the value on the left
- * of the graph, GL_END will add it on the right (default).
- */
-function GraphValue(graph, value, where) {
- if(typeof(where) == 'undefined')
- where = GL_END;
-
- var rescale = false;
- var lost = 0;
-
- if(value < 0)
- value = 0;
-
- if(graph['scale_type'] == GL_DYNAMIC && value > graph['max'])
- rescale = true;
-
- if(graph['scale_type'] == GL_STATIC) {
- if(value > graph['vmax'])
- value = graph['vmax'];
- value = Math.round(value * graph['scale']);
- }
-
- if(where == GL_START) {
- graph['vals'].unshift(graph['height'] - value);
- lost = graph['vals'].pop();
- }
- else {
- graph['vals'].push(graph['height'] - value);
- lost = graph['vals'].shift();
- }
-
- if(graph['scale_type'] == GL_DYNAMIC && (graph['height'] - lost) == graph['max'])
- rescale = true;
-
- if(rescale)
- GraphAdjustScale(graph)
-
- GraphDraw(graph);
-}
-
-/**
- * Sets a virtual maximum for the graph allowing you to have non-scaled graphs
- * that can show a value greater then the graph height. This function will
- * automatically set the graph to a static scale mode, meaning that no values
- * above the maximum will be permitted. If you need to have a graph with no
- * pre-defined maximum, make it dynamic. Also note that if you set a vmax on a
- * graph that has data larger than vmax, that data will be reduced.
- *
- * graph - Graph object for which to set virtual max.
- * vmax - The virtual maximum value for the graph.
- */
-function GraphSetVMax(graph, vmax) {
- graph['scale_type'] = GL_STATIC;
- graph['vmax'] = vmax;
-
- GraphAdjustScale(graph);
- GraphDraw(graph);
-}
-
-/**
- * This function instructs the graph to be scaled according to what the maximum
- * value is. That value is used as the graph maximum and is reevaluated whenever
- * a new value is added, or the current maximum is removed. Dynamic scaling is a
- * good way of showing data for which you don't know what the maximum will be,
- * but it also is a bit more resource-intensive then statically scaled graphs.
- *
- * graph - Graph object for which to enable dynamic scaling.
- */
-function GraphDynamicScale(graph) {
- graph['scale_type'] = GL_DYNAMIC;
-
- GraphAdjustScale(graph);
- GraphDraw(graph);
-}
-
-/***** Private functions ******************************************************/
-
-/**
- * Checks if the current scale of the graph is still valid, or needs to be
- * adjusted.
- *
- * graph - Graph object for which to check the scale.
- */
-function GraphAdjustScale(graph) {
- var limit = graph['bar_count'];
- var new_max = 0;
- var new_scale = 0;
- var val = 0;
-
- if(graph['scale_type'] == GL_STATIC) {
- new_max = graph['vmax'];
- new_scale = graph['height'] / new_max;
-
- if(new_scale == graph['scale'])
- return;
- }
-
- for(var i = 0; i < limit; i++) {
- if(graph['scale_type'] == GL_STATIC) {
- val = (graph['height'] - graph['vals'][i]) * graph['scale'];
- val = val * new_scale;
-
- if(val > new_max)
- val = new_max;
-
- graph['vals'][i] = graph['height'] - Math.round(val * new_scale);
-
- }
- else if((graph['height'] - graph['vals'][i]) > new_max) {
- new_max = graph['height'] - graph['vals'][i];
- }
- }
-
-
- if(graph['scale_type'] == GL_STATIC) {
- graph['scale'] = new_scale;
- }
- else {
- if(new_max == 0)
- graph['scale'] = 1;
- else
- graph['scale'] = graph['height'] / new_max;
-
- graph['max'] = new_max;
- }
-}
-
-/**
- * Redraws the graph on the screen.
- *
- * graph - Graph object which needs to be re-drawn.
- */
-function GraphDraw(graph) {
- var count = graph['bar_count'];
-
- if(graph['scale_type'] == GL_STATIC)
- var getMargin = function(i) {
- return graph['vals'][i] + 'px';
- };
- else
- var getMargin = function(i) {
- var h = graph['height'];
- var s = graph['scale'];
- var v = graph['vals'][i];
- return (h - Math.round((h - v) * s)) + 'px';
- };
-
- graph['spans'][count - 1].css("display", "none");
-
- for(var i = 0; i < count; i++)
- graph['spans'][i].css("marginTop", getMargin(i));
-
-// jQuery('#' + graph['spans'][count - 1]).fadeIn(500);
-}
diff --git a/usr/local/www/widgets/javascript/ipsec.js b/usr/local/www/widgets/javascript/ipsec.js
deleted file mode 100644
index d38f6cd..0000000
--- a/usr/local/www/widgets/javascript/ipsec.js
+++ /dev/null
@@ -1,9 +0,0 @@
-function updateIpsec() {
- selectIntLink = "ipsecDetailed";
- ipsecsettings = "ipsecDetail=";
- ipsecsettings += d.getElementById(selectIntLink).checked;
-
- selectIntLink = "ipsec-config";
- textlink = d.getElementById(selectIntLink);
- textlink.value = ipsecsettings;
-} \ No newline at end of file
diff --git a/usr/local/www/widgets/javascript/thermal_sensors.js b/usr/local/www/widgets/javascript/thermal_sensors.js
deleted file mode 100644
index 7415b01..0000000
--- a/usr/local/www/widgets/javascript/thermal_sensors.js
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- $Id: thermal_sensors.js
- Description:
- Javascript functions to get and show thermal sensors data in thermal_sensors.widget.php.
- NOTE: depends on proper config in System >> Advanced >> Miscellaneous tab >> Thermal Sensors section.
- File location:
- \usr\local\www\widgets\javascript\
- Used by:
- \usr\local\www\widgets\widgets\thermal_sensors.widget.php
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-
-//should be called from "thermal_sensors.widget.php"
-function showThermalSensorsData() {
-
- //get data from thermal_sensors.widget.php
- url = "/widgets/widgets/thermal_sensors.widget.php?getThermalSensorsData=1"
- //IE fix to disable cache when using http:// , just append timespan
- + new Date().getTime();
-
- jQuery.ajax(url, {
- type: 'get',
- success: function(data) {
- var thermalSensorsData = data || "";
- buildThermalSensorsData(thermalSensorsData);
- },
- error: function(jqXHR, status, error) {
- buildThermalSensorsDataRaw(
- "Error getting data from [thermal_sensors.widget.php] - |" +
- "status: [" + (status || "") + "]|" +
- "error: [" + (error || "") + "]");
- }
- });
-
- //call itself in 11 seconds
- window.setTimeout(showThermalSensorsData, 11000);
-}
-
-function buildThermalSensorsData(thermalSensorsData) {
- //NOTE: variable thermal_sensors_widget_showRawOutput is declared/set in "thermal_sensors.widget.php"
- if (thermal_sensors_widget_showRawOutput) {
- buildThermalSensorsDataRaw(thermalSensorsData);
- } else {
- buildThermalSensorsDataGraph(thermalSensorsData);
- }
-}
-
-function buildThermalSensorsDataRaw(thermalSensorsData) {
-
- var thermalSensorsContent = "";
-
- if (thermalSensorsData && thermalSensorsData != "") {
- thermalSensorsContent = thermalSensorsData.replace(/\|/g, "<br />");
- //rawData = thermalSensorsData.split("|").join("<br />");
- }
-
- loadThermalSensorsContainer(thermalSensorsContent);
-}
-
-function loadThermalSensorsContainer (thermalSensorsContent) {
-
- if (thermalSensorsContent && thermalSensorsContent != "") {
- //load generated graph (or raw data) into thermalSensorsContainer (thermalSensorsContainer DIV defined in "thermal_sensors.widget.php")
- jQuery('#thermalSensorsContainer').html(thermalSensorsContent);
- } else {
- jQuery('#thermalSensorsContainer').html("No Thermal Sensors data available.<br /><br />");
- jQuery('<div/>').html(
- "<span>* You can configure a proper Thermal Sensor / Module under <br />" +
- "&nbsp;&nbsp;&nbsp;<a href='system_advanced_misc.php'>System &gt; Advanced &gt; Miscellaneous : Thermal Sensors section</a>.</span>"
- ).appendTo('#thermalSensorsContainer');
- }
-}
-
-function buildThermalSensorsDataGraph(thermalSensorsData) {
-
- //local constants
- var normalColor = "LimeGreen";
- var normalColorShadowTop = "Lime";
- var normalColorShadowBottom = "Green";
-
- var warningColor = "Orange";
- var warningColorShadowBottom = "Chocolate";
-
- var criticalColor = "Red";
- var criticalColorShadowBottom = "DarkRed";
-
- //local variables
- var barBgColor = normalColor; //green/normal as default
- var barBgColorShadowTop = normalColorShadowTop; //green/normal as default
- var barBgColorShadowBottom = normalColorShadowBottom; //green/normal as default
-
- var thermalSensorsArray = new Array();
-
- if (thermalSensorsData && thermalSensorsData != "") {
- thermalSensorsArray = thermalSensorsData.split("|");
- }
-
- var thermalSensorsHTMLContent = "";
- var itemsToPulsate = new Array();
-
- //generate graph for each temperature sensor and append to thermalSensorsHTMLContent string
- for (var i = 0; i < thermalSensorsArray.length; i++) {
-
- var sensorDataArray = thermalSensorsArray[i].split(":");
- var sensorName = sensorDataArray[0].trim();
- var thermalSensorValue = getThermalSensorValue(sensorDataArray[1]);
-
- var pulsateTimes = 0;
- var pulsateDuration = 0;
-
- var warningTempThresholdPosition = 0;
- var criticalTempThresholdPosition = 0;
-
- //NOTE: the following variables are declared/set in "thermal_sensors.widget.php":
- // thermal_sensors_widget_coreWarningTempThreshold, thermal_sensors_widget_coreCriticalTempThreshold,
- // thermal_sensors_widget_zoneWarningTempThreshold, thermal_sensors_widget_zoneCriticalTempThreshold
- // thermal_sensors_widget_pulsateWarning, thermal_sensors_widget_pulsateCritical
-
- //set graph color and pulsate parameters
- if (sensorName.indexOf("cpu") > -1) { //check CPU Threshold config settings
-
- warningTempThresholdPosition = thermal_sensors_widget_coreWarningTempThreshold;
- criticalTempThresholdPosition = thermal_sensors_widget_coreCriticalTempThreshold;
-
- if (thermalSensorValue < thermal_sensors_widget_coreWarningTempThreshold) {
- barBgColor = normalColor;
- barBgColorShadowTop = normalColorShadowTop;
- barBgColorShadowBottom = normalColorShadowBottom;
- pulsateTimes = 0;
- pulsateDuration = 0;
- } else if (thermalSensorValue >= thermal_sensors_widget_coreWarningTempThreshold && thermalSensorValue < thermal_sensors_widget_coreCriticalTempThreshold) {
- barBgColor = warningColor;
- barBgColorShadowTop = warningColor;
- barBgColorShadowBottom = warningColorShadowBottom;
- pulsateTimes = thermal_sensors_widget_pulsateWarning ? 4 : 0;
- pulsateDuration = thermal_sensors_widget_pulsateWarning ? 900 : 0;
- } else { // thermalSensorValue > thermal_sensors_widget_coreCriticalTempThreshold
- barBgColor = criticalColor;
- barBgColorShadowTop = criticalColor;
- barBgColorShadowBottom = criticalColorShadowBottom;
- pulsateTimes = thermal_sensors_widget_pulsateCritical ? 7 : 0;
- pulsateDuration = thermal_sensors_widget_pulsateCritical ? 900 : 0;
- }
- } else { //assuming sensor is for a zone, check Zone Threshold config settings
-
- warningTempThresholdPosition = thermal_sensors_widget_zoneWarningTempThreshold;
- criticalTempThresholdPosition = thermal_sensors_widget_zoneCriticalTempThreshold;
-
- if (thermalSensorValue < thermal_sensors_widget_zoneWarningTempThreshold) {
-
- barBgColor = normalColor;
- barBgColorShadowTop = normalColorShadowTop;
- barBgColorShadowBottom = normalColorShadowBottom;
- pulsateTimes = 0;
- pulsateDuration = 0;
-
- } else if (thermalSensorValue >= thermal_sensors_widget_zoneWarningTempThreshold &&
- thermalSensorValue < thermal_sensors_widget_zoneCriticalTempThreshold) {
-
- barBgColor = warningColor;
- barBgColorShadowTop = warningColor;
- barBgColorShadowBottom = warningColorShadowBottom;
- pulsateTimes = thermal_sensors_widget_pulsateWarning ? 4 : 0;
- pulsateDuration = thermal_sensors_widget_pulsateWarning ? 900 : 0;
-
- } else { // thermalSensorValue > thermal_sensors_widget_zoneCriticalTempThreshold
-
- barBgColor = criticalColor;
- barBgColorShadowTop = criticalColor;
- barBgColorShadowBottom = criticalColorShadowBottom;
- pulsateTimes = thermal_sensors_widget_pulsateCritical ? 7 : 0;
- pulsateDuration = thermal_sensors_widget_pulsateCritical ? 900 : 0;
- }
- }
-
- //NOTE: variable thermal_sensors_widget_showFullSensorName is declared/set in "thermal_sensors.widget.php"
- if (!thermal_sensors_widget_showFullSensorName) {
- sensorName = getSensorFriendlyName(sensorName);
- }
-
- //build temperature item/row for a sensor
- //NOTE: additional styles are set in 'thermal_sensors.widget.php'
- var thermalSensorRow = "<div class='thermalSensorRow' id='thermalSensorRow" + i + "' >" +
- //sensor name and temperature value
- " <div class='thermalSensorTextShell'><div class='thermalSensorText' id='thermalSensorText" + i + "'>" + sensorName + ": </div><div class='thermalSensorValue' id='thermalSensorValue" + i + "'>" + thermalSensorValue + " &deg;C</div></div>" +
- //temperature bar
- " <div class='thermalSensorBarShell' id='thermalSensorBarShell" + i + "' >" +
- " <div class='thermalSensorBar' id='thermalSensorBar" + i + "' style='background-color: " + barBgColor + "; border-top-color: " + barBgColorShadowTop + "; border-bottom-color: " + barBgColorShadowBottom + "; width:" + thermalSensorValue + "%;' ></div>" +
- //threshold targets (warning and critical)
- " <div class='thermalSensorWarnThresh' id='thermalSensorWarnThresh" + i + "' style='left:" + warningTempThresholdPosition + "%;' ></div>" +
- " <div class='thermalSensorCritThresh' id='thermalSensorCritThresh" + i + "' style='left:" + criticalTempThresholdPosition + "%;' ></div>" +
- //temperature scale (max 100 C)
- " <div class='thermal_sensors_widget_scale000'></div>" +
- " <div class='thermal_sensors_widget_scale010'></div>" +
- " <div class='thermal_sensors_widget_scale020'></div>" +
- " <div class='thermal_sensors_widget_scale030'></div>" +
- " <div class='thermal_sensors_widget_scale040'></div>" +
- " <div class='thermal_sensors_widget_scale050'></div>" +
- " <div class='thermal_sensors_widget_scale060'></div>" +
- " <div class='thermal_sensors_widget_scale070'></div>" +
- " <div class='thermal_sensors_widget_scale080'></div>" +
- " <div class='thermal_sensors_widget_scale090'></div>" +
- " <div class='thermal_sensors_widget_scale100'></div>" +
- " <div class='thermal_sensors_widget_mark100'>100&deg;</div>" +
- " </div>" +
- "</div>";
-
- //collect parameters for warning/critical items we need to pulsate
- if (pulsateTimes > 0) {
- var params = i + "|" + barBgColor + "|" + pulsateTimes + "|" + pulsateDuration;
- itemsToPulsate.push(params);
- }
-
- //append HTML item
- thermalSensorsHTMLContent = thermalSensorsHTMLContent + thermalSensorRow;
- }
-
- //load generated graph into thermalSensorsContainer (DIV defined in "thermal_sensors.widget.php")
- loadThermalSensorsContainer(thermalSensorsHTMLContent);
-
- if (itemsToPulsate.length > 0) {
- //pulsate/flash warning/critical items we collected
- pulsateThermalSensorsItems(itemsToPulsate);
- }
-}
-
-function pulsateThermalSensorsItems(itemsToPulsate) {
-
- //pulsate/flash warning/critical items we collected
- for (var i = 0; i < itemsToPulsate.length; i++) {
-
- var pulsateParams = itemsToPulsate[i].split("|");
- var rowNum = parseInt(pulsateParams[0]);
- //var textColor = pulsateParams[1];
- var pulsateTimes = parseInt(pulsateParams[2]);
- var pulsateDuration = parseInt(pulsateParams[3]);
-
- //pulsate temp Value
- var divThermalSensorValue = jQuery("#thermalSensorValue" + rowNum); //get temp value by id
- divThermalSensorValue.effect("pulsate", {
- times: pulsateTimes,
- easing: 'linear' //'easeInExpo'
- }, pulsateDuration);
- ////set Temp Value color
- //divThermalSensorValue.css({ color: textColor });
-
- //pulsate temp Bar
- var divThermalSensorBar = jQuery("#thermalSensorBar" + rowNum); //get temp bar by id
- divThermalSensorBar.effect("pulsate", {
- times: pulsateTimes,
- easing: 'linear' //'easeInExpo'
- }, pulsateDuration);
-
- }
-}
-
-function getSensorFriendlyName(sensorFullName) {
- var rzone = /^hw\.acpi\.thermal\.tz([0-9]+)\.temperature$/;
- var rcore = /^dev\.cpu\.([0-9]+)\.temperature$/;
-
- if (rzone.test(sensorFullName)) {
- return "Zone " + rzone.exec(sensorFullName)[1];
- }
-
- if (rcore.test(sensorFullName)) {
- return "Core " + rcore.exec(sensorFullName)[1];
- }
-
- return sensorFullName;
-}
-
-function getThermalSensorValue(stringValue) {
- return (+parseFloat(stringValue) || 0).toFixed(1);
-}
diff --git a/usr/local/www/widgets/javascript/traffic_graph.js b/usr/local/www/widgets/javascript/traffic_graph.js
deleted file mode 100644
index 383a549..0000000
--- a/usr/local/www/widgets/javascript/traffic_graph.js
+++ /dev/null
@@ -1,41 +0,0 @@
-function trafficshowDiv(incDiv,ifDescription,refreshIntervalSec,swapButtons) {
- // put the graph object HTML in the element and make it appear
- selectedDiv = incDiv + "graphdiv";
- jQuery('#' + selectedDiv).html(
- '<object data="graph.php?ifnum=' + incDiv + '&amp;ifname=' + ifDescription + '&amp;timeint=' + refreshIntervalSec + '&amp;initdelay=0" height="100%" width="100%">' +
- '<param name="id" value="graph" />' +
- '<param name="type" value="image/svg+xml" />' +
- '<param name="pluginspage" value="http://www.adobe.com/svg/viewer/install/auto" />' +
- '</object>');
- jQuery('#' + selectedDiv).effect('blind',{mode:'show'},1000);
- d = document;
- if (swapButtons) {
- selectIntLink = selectedDiv + "-min";
- textlink = d.getElementById(selectIntLink);
- textlink.style.display = "inline";
-
- selectIntLink = selectedDiv + "-open";
- textlink = d.getElementById(selectIntLink);
- textlink.style.display = "none";
- }
- document.traffic_graphs_widget_iform["shown[" + incDiv + "]"].value = "show";
-}
-
-function trafficminimizeDiv(incDiv,swapButtons) {
- // remove the graph object HTML from the element (so it does not keep using CPU) and fade
- selectedDiv = incDiv + "graphdiv";
- jQuery('#' + selectedDiv).html('');
- jQuery('#' + selectedDiv).effect('blind',{mode:'hide'},1000);
- d = document;
- if (swapButtons) {
- selectIntLink = selectedDiv + "-open";
- textlink = d.getElementById(selectIntLink);
- textlink.style.display = "inline";
-
- selectIntLink = selectedDiv + "-min";
- textlink = d.getElementById(selectIntLink);
- textlink.style.display = "none";
- }
- document.traffic_graphs_widget_iform["shown[" + incDiv + "]"].value = "hide";
-}
-
diff --git a/usr/local/www/widgets/widgets/captive_portal_status.widget.php b/usr/local/www/widgets/widgets/captive_portal_status.widget.php
deleted file mode 100644
index 21c44e3..0000000
--- a/usr/local/www/widgets/widgets/captive_portal_status.widget.php
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-/*
- captive_portal_status.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Copyright (C) 2007 Sam Wenham
- All rights reserved.
-
- status_captiveportal.php
- part of m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("globals.inc");
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-require_once("captiveportal.inc");
-
-?>
-
-<?php
-
-if (!is_array($config['captiveportal'])) {
- $config['captiveportal'] = array();
-}
-$a_cp =& $config['captiveportal'];
-
-$cpzone = $_GET['zone'];
-if (isset($_POST['zone'])) {
- $cpzone = $_POST['zone'];
-}
-
-if (isset($cpzone) && !empty($cpzone) && isset($a_cp[$cpzone]['zoneid'])) {
- $cpzoneid = $a_cp[$cpzone]['zoneid'];
-}
-
-if (($_GET['act'] == "del") && !empty($cpzone) && isset($cpzoneid)) {
- captiveportal_disconnect_client($_GET['id']);
-}
-unset($cpzone);
-
-flush();
-
-function clientcmp($a, $b) {
- global $order;
- return strcmp($a[$order], $b[$order]);
-}
-
-$cpdb_all = array();
-
-$showact = isset($_GET['showact']) ? 1 : 0;
-
-foreach ($a_cp as $cpzone => $cp) {
- $cpdb = captiveportal_read_db();
- foreach ($cpdb as $cpent) {
- $cpent[10] = $cpzone;
- if ($showact == 1) {
- $cpent[11] = captiveportal_get_last_activity($cpent[2], $cpentry[3]);
- }
- $cpdb_all[] = $cpent;
- }
-}
-
-if ($_GET['order']) {
- if ($_GET['order'] == "ip") {
- $order = 2;
- } else if ($_GET['order'] == "mac") {
- $order = 3;
- } else if ($_GET['order'] == "user") {
- $order = 4;
- } else if ($_GET['order'] == "lastact") {
- $order = 5;
- } else if ($_GET['order'] == "zone") {
- $order = 10;
- } else {
- $order = 0;
- }
- usort($cpdb_all, "clientcmp");
-}
-?>
-<table class="sortable" id="sortabletable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="captive portal status">
- <tr>
- <td class="listhdrr"><a href="?order=ip&amp;showact=<?=$showact;?>">IP address</a></td>
- <td class="listhdrr"><a href="?order=mac&amp;showact=<?=$showact;?>">MAC address</a></td>
- <td class="listhdrr"><a href="?order=user&amp;showact=<?=$showact;?>"><?=gettext("Username");?></a></td>
-<?php
- if ($showact == 1):
-?>
- <td class="listhdrr"><a href="?order=start&amp;showact=<?=$showact;?>"><?=gettext("Session start");?></a></td>
- <td class="listhdrr"><a href="?order=start&amp;showact=<?=$showact;?>"><?=gettext("Last activity");?></a></td>
-<?php
- endif;
-?>
- </tr>
-<?php
-foreach ($cpdb_all as $cpent):
-?>
- <tr>
- <td class="listlr"><?=$cpent[2];?></td>
- <td class="listr"><?=$cpent[3];?>&nbsp;</td>
- <td class="listr"><?=$cpent[4];?>&nbsp;</td>
-<?php
- if ($showact == 1):
-?>
- <td class="listr"><?=htmlspecialchars(date("m/d/Y H:i:s", $cpent[0]));?></td>
- <td class="listr"><?php if ($cpent[11] && ($cpent[11] > 0)) echo htmlspecialchars(date("m/d/Y H:i:s", $cpent[11]));?></td>
-<?php
- endif;
-?>
- <td valign="middle" class="list nowrap">
- <a href="?order=<?=htmlspecialchars($_GET['order']);?>&amp;showact=<?=$showact;?>&amp;act=del&amp;zone=<?=$cpent[10];?>&amp;id=<?=$cpent[5];?>" onclick="return confirm('Do you really want to disconnect this client?')">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="x" />
- </a>
- </td>
- </tr>
-<?php
-endforeach;
-?>
-</table>
diff --git a/usr/local/www/widgets/widgets/carp_status.widget.php b/usr/local/www/widgets/widgets/carp_status.widget.php
deleted file mode 100644
index bb68dbd..0000000
--- a/usr/local/www/widgets/widgets/carp_status.widget.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-/*
- $Id$
- carp_status.widget.php
- Copyright (C) 2007 Sam Wenham
- All rights reserved.
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-require_once("/usr/local/www/widgets/include/carp_status.inc");
-
-$carp_enabled = get_carp_status();
-
-?>
-<table bgcolor="#990000" width="100%" border="0" cellspacing="0" cellpadding="0" summary="carp status">
-<?php
- if (is_array($config['virtualip']['vip'])) {
- $carpint=0;
- foreach ($config['virtualip']['vip'] as $carp) {
- if ($carp['mode'] != "carp") {
- continue;
- }
- $ipaddress = $carp['subnet'];
- $password = $carp['password'];
- $netmask = $carp['subnet_bits'];
- $vhid = $carp['vhid'];
- $advskew = $carp['advskew'];
- $status = get_carp_interface_status("_vip{$carp['uniqid']}");
-?>
-<tr>
- <td class="vncellt" width="35%">
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_cablenic.gif" alt="cablenic" />&nbsp;
- <strong><a href="/system_hasync.php">
- <span style="color:#000000"><?=htmlspecialchars(convert_friendly_interface_to_friendly_descr($carp['interface']) . "@{$vhid}");?></span></a></strong>
- </td>
- <td width="65%" class="listr">
-<?php
- if ($carp_enabled == false) {
- $status = "DISABLED";
- echo "<img src='/themes/".$g['theme']."/images/icons/icon_block.gif' title=\"$status\" alt=\"$status\" />";
- } else {
- if($status == "MASTER") {
- echo "<img src='/themes/".$g['theme']."/images/icons/icon_pass.gif' title=\"$status\" alt=\"$status\" />";
- } else if($status == "BACKUP") {
- echo "<img src='/themes/".$g['theme']."/images/icons/icon_pass_d.gif' title=\"$status\" alt=\"$status\" />";
- } else if($status == "INIT") {
- echo "<img src='/themes/".$g['theme']."/images/icons/icon_log.gif' title=\"$status\" alt=\"$status\" />";
- }
- }
- if ($ipaddress){ ?> &nbsp;
- <?=htmlspecialchars($status);?> &nbsp;
- <?=htmlspecialchars($ipaddress);}?>
-</td></tr><?php }
- } else { ?>
- <tr><td class="listr">No CARP Interfaces Defined. Click <a href="carp_status.php">here</a> to configure CARP.</td></tr>
-<?php } ?>
-</table>
diff --git a/usr/local/www/widgets/widgets/deactivated/cpu_graphs.widget.php b/usr/local/www/widgets/widgets/deactivated/cpu_graphs.widget.php
deleted file mode 100644
index 09723d7..0000000
--- a/usr/local/www/widgets/widgets/deactivated/cpu_graphs.widget.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-/*
- $Id$
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Copyright 2007 Scott Dale
- Part of pfSense widgets (https://www.pfsense.org)
- originally based on m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
- and Jonathan Watt <jwatt@jwatt.org>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-?>
-<link href="/themes/<?=$g['theme'];?>/graphlink.css" rel="stylesheet" type="text/css" />
-<script src="/widgets/javascript/cpu_graphs.js" type="text/javascript"></script>
-<script type="text/javascript">
- /* initialize the graph */
- // --- Global Data --- //
- var graphs; // An array that stores all created graphs
- var graph_dir; // The direction in which each graph moves
- var last_val; // An array of values for each graph
- var last_val_span; // References to Last Value span tags for each graph
- var pause; // Controls execution
-
- var ajaxStarted = false;
-
- /**
- * Launches the GraphLink demo. It initializes the graph along with the ajax
- * engine and starts the main execution loop.
- */
- graph = new Array();
- graph_dir = new Array();
- last_val = new Array();
- last_val_span = new Array();
-</script>
-<div style='display: block; margin-left: auto; margin-right: auto' class="GraphLink" id="GraphOutput"></div>
-<script type="text/javascript">
-
- // Graph 1
- graph[0] = GraphInitialize('GraphOutput', 200, 50, 4);
- graph_dir[0] = GL_END;
- last_val[0] = Math.floor(Math.random() * 50);
- last_val_span[0] = document.getElementById('LastValue0');
-
- GraphSetVMax(graph[0], 100);
- GraphDynamicScale(graph[0]);
-
-</script>
diff --git a/usr/local/www/widgets/widgets/dyn_dns_status.widget.php b/usr/local/www/widgets/widgets/dyn_dns_status.widget.php
deleted file mode 100644
index c2eee76..0000000
--- a/usr/local/www/widgets/widgets/dyn_dns_status.widget.php
+++ /dev/null
@@ -1,174 +0,0 @@
-<?php
-/*
- Original status page code from: services_dyndns.php
- Copyright (C) 2008 Ermal Luçi
- Edits to convert it to a widget: dyn_dns_status.widget.php
- Copyright (C) 2013 Stanley P. Miller \ stan-qaz
- All rights reserved.
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INClUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
- pfSense_BUILDER_BINARIES: /usr/bin/host
- pfSense_MODULE: dyndns
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-require_once("/usr/local/www/widgets/include/dyn_dns_status.inc");
-
-if (!is_array($config['dyndnses']['dyndns'])) {
- $config['dyndnses']['dyndns'] = array();
-}
-
-$a_dyndns = &$config['dyndnses']['dyndns'];
-
-if ($_REQUEST['getdyndnsstatus']) {
- $first_entry = true;
- foreach ($a_dyndns as $dyndns) {
- if ($first_entry) {
- $first_entry = false;
- } else {
- // Put a vertical bar delimiter between the echoed HTML for each entry processed.
- echo "|";
- }
-
- $filename = "{$g['conf_path']}/dyndns_{$dyndns['interface']}{$dyndns['type']}" . escapeshellarg($dyndns['host']) . "{$dyndns['id']}.cache";
- if (file_exists($filename)) {
- $ipaddr = dyndnsCheckIP($dyndns['interface']);
- $cached_ip_s = explode(':', file_get_contents($filename));
- $cached_ip = $cached_ip_s[0];
- if ($ipaddr <> $cached_ip) {
- echo "<font color='red'>";
- } else {
- echo "<font color='green'>";
- }
- echo htmlspecialchars($cached_ip);
- echo "</font>";
- } else {
- echo "N/A " . date("H:i:s");
- }
- }
- exit;
-}
-
-?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td width="5%" class="listhdrr"><?=gettext("Int.");?></td>
- <td width="15%" class="listhdrr"><?=gettext("Service");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Hostname");?></td>
- <td width="20%" class="listhdrr"><?=gettext("Cached IP");?></td>
- </tr>
- <?php $i = 0; foreach ($a_dyndns as $dyndns): ?>
- <tr ondblclick="document.location='services_dyndns_edit.php?id=<?=$i;?>'">
- <td class="listlr">
- <?php $iflist = get_configured_interface_with_descr();
- foreach ($iflist as $if => $ifdesc) {
- if ($dyndns['interface'] == $if) {
- if (!isset($dyndns['enable'])) {
- echo "<span class=\"gray\">{$ifdesc}</span>";
- } else {
- echo "{$ifdesc}";
- }
- break;
- }
- }
- $groupslist = return_gateway_groups_array();
- foreach ($groupslist as $if => $group) {
- if ($dyndns['interface'] == $if) {
- if (!isset($dyndns['enable'])) {
- echo "<span class=\"gray\">{$if}</span>";
- } else {
- echo "{$if}";
- }
- break;
- }
- }
- ?>
- </td>
- <td class="listr">
- <?php
- $types = explode(",", DYNDNS_PROVIDER_DESCRIPTIONS);
- $vals = explode(" ", DYNDNS_PROVIDER_VALUES);
- for ($j = 0; $j < count($vals); $j++) {
- if ($vals[$j] == $dyndns['type']) {
- if (!isset($dyndns['enable'])) {
- echo "<span class=\"gray\">".htmlspecialchars($types[$j])."</span>";
- } else {
- echo htmlspecialchars($types[$j]);
- }
- break;
- }
- }
- ?>
- </td>
- <td class="listr">
- <?php
- if (!isset($dyndns['enable'])) {
- echo "<span class=\"gray\">".htmlspecialchars($dyndns['host'])."</span>";
- } else {
- echo htmlspecialchars($dyndns['host']);
- }
- ?>
- </td>
- <td class="listr">
- <div id='dyndnsstatus<?php echo $i; ?>'><?php echo gettext("Checking ..."); ?></div>
- </td>
- </tr>
- <?php $i++; endforeach; ?>
-</table>
-<script type="text/javascript">
-//<![CDATA[
- function dyndns_getstatus() {
- scroll(0,0);
- var url = "/widgets/widgets/dyn_dns_status.widget.php";
- var pars = 'getdyndnsstatus=yes';
- jQuery.ajax(
- url,
- {
- type: 'get',
- data: pars,
- complete: dyndnscallback
- });
- // Refresh the status every 5 minutes
- setTimeout('dyndns_getstatus()', 5*60*1000);
- }
- function dyndnscallback(transport) {
- // The server returns a string of statuses separated by vertical bars
- var responseStrings = transport.responseText.split("|");
- for (var count=0; count<responseStrings.length; count++) {
- var divlabel = '#dyndnsstatus' + count;
- jQuery(divlabel).prop('innerHTML',responseStrings[count]);
- }
- }
- // Do the first status check 2 seconds after the dashboard opens
- setTimeout('dyndns_getstatus()', 2000);
-//]]>
-</script>
diff --git a/usr/local/www/widgets/widgets/gateways.widget.php b/usr/local/www/widgets/widgets/gateways.widget.php
deleted file mode 100644
index 26a6f4d..0000000
--- a/usr/local/www/widgets/widgets/gateways.widget.php
+++ /dev/null
@@ -1,227 +0,0 @@
-<?php
-/*
- gateways.widget.php
- Copyright 2008 Seth Mos
- Part of pfSense widgets (https://www.pfsense.org)
- originally based on m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-require_once("/usr/local/www/widgets/include/gateways.inc");
-
-if ($_POST) {
- if (!is_array($config["widgets"]["gateways_widget"])) {
- $config["widgets"]["gateways_widget"] = array();
- }
- if (isset($_POST["display_type"])) {
- $config["widgets"]["gateways_widget"]["display_type"] = $_POST["display_type"];
- }
- write_config("Updated gateways widget settings via dashboard.");
- header("Location: /");
- exit(0);
-}
-
-if (isset($config["widgets"]["gateways_widget"]["display_type"])) {
- $display_type = $config["widgets"]["gateways_widget"]["display_type"];
-} else {
- $display_type = "gw_ip";
-}
-
-$a_gateways = return_gateways_array();
-$gateways_status = array();
-$gateways_status = return_gateways_status(true);
-
-$counter = 1;
-
-?>
-
-<input type="hidden" id="gateways-config" name="gateways-config" value="" />
-
-<div id="gateways-settings" class="widgetconfigdiv" style="display:none;">
-<form action="/widgets/widgets/gateways.widget.php" method="post" name="gateways_widget_iform" id="gateways_widget_iform">
- Display:
- <?php
- $display_type_gw_ip="checked=\"checked\"";
- $display_type_monitor_ip="";
- $display_type_both_ip="";
- if (isset($config["widgets"]["gateways_widget"]["display_type"])) {
- $selected_radio = $config["widgets"]["gateways_widget"]["display_type"];
- if ($selected_radio == "gw_ip") {
- $display_type_gw_ip = "checked=\"checked\"";
- $display_type_monitor_ip="";
- $display_type_both_ip="";
- } else if ($selected_radio == "monitor_ip") {
- $display_type_gw_ip = "";
- $display_type_monitor_ip="checked=\"checked\"";
- $display_type_both_ip="";
- } else if ($selected_radio == "both_ip") {
- $display_type_gw_ip = "";
- $display_type_monitor_ip="";
- $display_type_both_ip="checked=\"checked\"";
- }
- }
- ?>
- <input name="display_type" class="radio" type="radio" id="display_type_gw_ip" value="gw_ip" <?php echo $display_type_gw_ip; ?> onchange="updateGatewayDisplays();" /> <span>Gateway IP</span>
- <input name="display_type" class="radio" type="radio" id="display_type_monitor_ip" value="monitor_ip" <?php echo $display_type_monitor_ip; ?> onchange="updateGatewayDisplays();" /> <span>Monitor IP</span>
- <input name="display_type" class="radio" type="radio" id="display_type_both_ip" value="both_ip" <?php echo $display_type_both_ip; ?> onchange="updateGatewayDisplays();" /> <span>Both</span>
- <br /><br />
- <input id="submit_settings" name="submit_settings" type="submit" onclick="return updatePref();" class="formbtn" value="Save Settings" />
-</form>
-</div>
-
-<script type="text/javascript">
-//<![CDATA[
- d = document;
- selectIntLink = "gateways-configure";
- textlink = d.getElementById(selectIntLink);
- textlink.style.display = "inline";
-//]]>
-</script>
-
-<table bgcolor="#990000" width="100%" border="0" cellspacing="0" cellpadding="0" summary="gateway status">
- <tr>
- <td class="listhdrr" id="gatewayname" align="center">Name</td>
- <td class="listhdrr" align="center">RTT</td>
- <td class="listhdrr" align="center">Loss</td>
- <td class="listhdrr" align="center">Status</td>
- </tr>
- <?php foreach ($a_gateways as $gname => $gateway) { ?>
- <tr>
- <td class="listhdrr" id="gateway<?php echo $counter; ?>" rowspan="2" align="center">
- <strong>
- <?php echo htmlspecialchars($gateway['name']); ?>
- </strong>
- <?php $counter++; ?>
- </td>
- <td colspan="3" class="listr ellipsis" align="center">
- <div id="gateway<?php echo $counter; ?>" style="display:inline"><b>
- <?php
- $monitor_address = "";
- $monitor_address_disp = "";
- if ($display_type == "monitor_ip" || $display_type == "both_ip") {
- $monitor_address = $gateway['monitor'];
- if ($monitor_address != "" && $display_type == "both_ip") {
- $monitor_address_disp = " (" . $monitor_address . ")";
- } else {
- $monitor_address_disp = $monitor_address;
- }
- }
- $if_gw = '';
- // If the user asked to display Gateway IP or both IPs, or asked for just monitor IP but the monitor IP is blank
- // then find the gateway IP (which is also the monitor IP if the monitor IP was not explicitly set).
- if ($display_type == "gw_ip" || $display_type == "both_ip" || ($display_type == "monitor_ip" && $monitor_address == "")) {
- if (is_ipaddr($gateway['gateway'])) {
- $if_gw = htmlspecialchars($gateway['gateway']);
- } else {
- if ($gateway['ipprotocol'] == "inet") {
- $if_gw = htmlspecialchars(get_interface_gateway($gateway['friendlyiface']));
- }
- if ($gateway['ipprotocol'] == "inet6") {
- $if_gw = htmlspecialchars(get_interface_gateway_v6($gateway['friendlyiface']));
- }
- }
- if ($if_gw == "") {
- $if_gw = "~";
- }
- }
- if ($monitor_address == $if_gw) {
- $monitor_address_disp = "";
- }
- echo $if_gw . $monitor_address_disp;
- unset ($if_gw);
- unset ($monitor_address);
- unset ($monitor_address_disp);
- $counter++;
- ?>
- </b></div>
- </td>
- </tr>
- <tr>
- <td class="listr ellipsis" align="center" id="gateway<?php echo $counter; ?>">
- <?php
- if ($gateways_status[$gname]) {
- echo htmlspecialchars($gateways_status[$gname]['delay']);
- } else {
- echo gettext("Pending");
- }
- ?>
- <?php $counter++; ?>
- </td>
- <td class="listr ellipsis" align="center" id="gateway<?php echo $counter; ?>">
- <?php
- if ($gateways_status[$gname]) {
- echo htmlspecialchars($gateways_status[$gname]['loss']);
- } else {
- echo gettext("Pending");
- }
- ?>
- <?php $counter++; ?>
- </td>
- <?php
- if ($gateways_status[$gname]) {
- if (stristr($gateways_status[$gname]['status'], "force_down")) {
- $online = "Offline (forced)";
- $bgcolor = "#F08080"; // lightcoral
- } elseif (stristr($gateways_status[$gname]['status'], "down")) {
- $online = "Offline";
- $bgcolor = "#F08080"; // lightcoral
- } elseif (stristr($gateways_status[$gname]['status'], "loss")) {
- $online = "Packetloss";
- $bgcolor = "#F0E68C"; // khaki
- } elseif (stristr($gateways_status[$gname]['status'], "delay")) {
- $online = "Latency";
- $bgcolor = "#F0E68C"; // khaki
- } elseif ($gateways_status[$gname]['status'] == "none") {
- $online = "Online";
- $bgcolor = "#90EE90"; // lightgreen
- } elseif ($gateways_status[$gname]['status'] == "") {
- $online = "Pending";
- $bgcolor = "#D3D3D3"; // lightgray
- }
- } else {
- $online = gettext("Unknown");
- $bgcolor = "#ADD8E6"; // lightblue
- }
- echo "<td class=\"listr ellipsis\" align=\"center\" id=\"gateway$counter\">$online</td>\n";
- ?>
- <td style="display:none;">
- <script type="text/javascript">
- //<![CDATA[
- jQuery('#gateway<?php echo $counter;?>').css('background-color',"<?php echo $bgcolor;?>");
- //]]>
- </script>
- </td>
- <?php
- $counter++;
- ?>
- </tr>
- <?php } // foreach ?>
-</table>
diff --git a/usr/local/www/widgets/widgets/gmirror_status.widget.php b/usr/local/www/widgets/widgets/gmirror_status.widget.php
deleted file mode 100644
index 59e7f16..0000000
--- a/usr/local/www/widgets/widgets/gmirror_status.widget.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/*
- gmirror_status.widget.php
- Copyright (C) 2009-2010 Jim Pingle
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INClUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("gmirror.inc");
-
-if ($_GET['textonly'] == "true") {
- header("Cache-Control: no-cache");
- echo gmirror_html_status();
- exit;
-}
-?>
-<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="gmirror status">
- <tbody id="gmirror_status_table">
- <?php echo gmirror_html_status(); ?>
- </tbody>
-</table>
-
-<script type="text/javascript">
-//<![CDATA[
- var gmirrorupdater = new Ajax.PeriodicalUpdater('gmirror_status_table', '/widgets/widgets/gmirror_status.widget.php?textonly=true',
- { method: 'get', frequency: 5 } );
-//]]>
-</script>
diff --git a/usr/local/www/widgets/widgets/installed_packages.widget.php b/usr/local/www/widgets/widgets/installed_packages.widget.php
deleted file mode 100644
index 3190e1b..0000000
--- a/usr/local/www/widgets/widgets/installed_packages.widget.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-/*
- installed_packages.widget.php
-
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright 2007 Scott Dale
- Part of pfSense widgets (https://www.pfsense.org)
- originally based on m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
- and Jonathan Watt <jwatt@jwatt.org>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-require_once("/usr/local/www/widgets/include/installed_packages.inc");
-require_once("pkg-utils.inc");
-
-if (is_array($config['installedpackages']['package'])) {
- foreach ($config['installedpackages']['package'] as $instpkg) {
- $tocheck[] = $instpkg['name'];
- }
- $currentvers = get_pkg_info($tocheck, array('version', 'xmlver'));
-}
-
-$updateavailable = false;
-?>
-
-<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="installed packages">
- <tr>
- <td width="15%" class="listhdrr">Package Name</td>
- <td width="15%" class="listhdrr">Category</td>
- <td width="30%" class="listhdrr">Package Version</td>
- </tr>
- <?php
- if ($config['installedpackages']['package'] != "") {
- $instpkgs = array();
- foreach ($config['installedpackages']['package'] as $instpkg) {
- $instpkgs[] = $instpkg['name'];
- }
- natcasesort($instpkgs);
- $y=1;
- foreach ($instpkgs as $index => $pkgname){
-
- $pkg = $config['installedpackages']['package'][$index];
- if ($pkg['name'] <> "") { ?>
- <tr valign="top">
- <td class="listlr">
- <?= $pkg['name'] ?>
- </td>
- <td class="listr">
- <?= $pkg['category'] ?>
- </td>
- <td class="listr">
- <?php
- $latest_package = $currentvers[$pkg['name']]['version'];
- if ($latest_package == false) {
- // We can't determine this package's version status.
- echo "Current: Unknown.<br />Installed: " . $pkg['version'];
- } elseif (strcmp($pkg['version'], $latest_package) > 0) {
- /* we're running a newer version of the package */
- echo "Current: {$latest_package}";
- echo "<br />Installed: {$pkg['version']}";
- } elseif (strcmp($pkg['version'], $latest_package) < 0) {
- /* our package is out of date */
- $updateavailable = true;
- ?>
- <div id="updatediv-<?php echo $y; ?>" style="color:red">
- <b>Update Available!</b></div><div style="float:left">
- Current: <?php echo $latest_package; ?><br />
- Installed: <?php echo $pkg['version']; ?></div><div style="float:right">
- <a href="pkg_mgr_install.php?mode=reinstallpkg&amp;pkg=<?= $pkg['name']; ?>"><img title="Update this package." src="./themes/<?= $g['theme']; ?>/images/icons/icon_reinstall_pkg.gif" width="17" height="17" border="0" alt="reinstall" /></a>
- </div>
- <?php
- $y++;
- } else {
- echo $pkg['version'];
- } ?>
- </td>
- </tr>
- <?php }
- }
- } else {
- echo "<tr><td colspan=\"5\" align=\"center\">There are no packages currently installed.</td></tr>";
- }
- ?>
-</table>
-
-<?php if ($updateavailable): ?>
-<script type="text/javascript">
-//<![CDATA[
- window.onload = function(in_event)
- {
- for (y=1; y<=<?php echo $y;?>; y++) {
- textID = "#updatediv-" + y;
- jQuery(textID).effect('pulsate');
- }
- }
-//]]>
-</script>
-<?php endif; ?>
diff --git a/usr/local/www/widgets/widgets/interface_statistics.widget.php b/usr/local/www/widgets/widgets/interface_statistics.widget.php
deleted file mode 100644
index a124ea3..0000000
--- a/usr/local/www/widgets/widgets/interface_statistics.widget.php
+++ /dev/null
@@ -1,216 +0,0 @@
-<?php
-/*
- $Id: interface_statistics.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Copyright 2007 Scott Dale
- Part of pfSense widgets (https://www.pfsense.org)
- originally based on m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
- and Jonathan Watt <jwatt@jwatt.org>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-require_once("/usr/local/www/widgets/include/interface_statistics.inc");
-
-$ifdescrs = get_configured_interface_with_descr();
-
-$array_in_packets = array();
-$array_out_packets = array();
-$array_in_bytes = array();
-$array_out_bytes = array();
-$array_in_errors = array();
-$array_out_errors = array();
-$array_collisions = array();
-$array_interrupt = array();
-$interfacecounter = 0;
-
-//build data arrays
-foreach ($ifdescrs as $ifdescr => $ifname) {
- $ifinfo = get_interface_info($ifdescr);
- $interfacecounter++;
- if ($ifinfo['status'] != "down") {
- $array_in_packets[] = $ifinfo['inpkts'];
- $array_out_packets[] = $ifinfo['outpkts'];
- $array_in_bytes[] = format_bytes($ifinfo['inbytes']);
- $array_out_bytes[] = format_bytes($ifinfo['outbytes']);
- if (isset($ifinfo['inerrs'])) {
- $array_in_errors[] = $ifinfo['inerrs'];
- $array_out_errors[] = $ifinfo['outerrs'];
- } else {
- $array_in_errors[] = "n/a";
- $array_out_errors[] = "n/a";
- }
- if (isset($ifinfo['collisions'])) {
- $array_collisions[] = htmlspecialchars($ifinfo['collisions']);
- } else {
- $array_collisions[] = "n/a";
- }
- }
-} //end for
-
-
-
-
-?>
- <div id="int_labels" style="float:left;width:32%">
- <table width="100%" border="0" cellspacing="0" cellpadding="0" summary="interfaces statistics">
- <tr>
- <td class="widgetsubheader" style="height:25px">&nbsp;&nbsp;&nbsp;</td>
- </tr>
- <tr>
- <td class="vncellt" style="height:25px">Packets In</td>
- </tr>
- <tr>
- <td class="vncellt" style="height:25px">Packets Out</td>
- </tr>
- <tr>
- <td class="vncellt" style="height:25px">Bytes In</td>
- </tr>
- <tr>
- <td class="vncellt" style="height:25px">Bytes Out</td>
- </tr>
- <tr>
- <td class="vncellt" style="height:25px">Errors In</td>
- </tr>
- <tr>
- <td class="vncellt" style="height:25px">Errors Out</td>
- </tr>
- <tr>
- <td class="vncellt" style="height:25px">Collisions</td>
- </tr>
- </table>
- </div>
- <div id="interfacestats" style="float:right;overflow: auto; width:68%">
- <table width="100%" border="0" cellspacing="0" cellpadding="0" summary="the stats">
- <tr>
- <?php
- $interface_names = array();
- foreach ($ifdescrs as $ifdescr => $ifname):
- $ifinfo = get_interface_info($ifdescr);
- if ($ifinfo['status'] != "down") { ?>
- <td class="widgetsubheader nowrap" style="height:25px">
- <?=htmlspecialchars($ifname);?>
- </td>
- <?php
- //build array of interface names
- $interface_names[] = $ifname;
- }
- endforeach;
- ?>
- </tr>
-
- <tr>
- <?php
- $counter = 1;
- foreach ($array_in_packets as $data):
- ?>
- <td class="listr nowrap" id="stat<?php echo $counter?>" style="height:25px">
- <?=htmlspecialchars($data);?>
- </td>
- <?php
- $counter = $counter + 7;
- endforeach;
- ?>
- </tr>
-
- <tr>
- <?php
- $counter = 2;
- foreach ($array_out_packets as $data): ?>
- <td class="listr nowrap" id="stat<?php echo $counter;?>" style="height:25px">
- <?=htmlspecialchars($data);?>
- </td>
- <?php
- $counter = $counter + 7;
- endforeach; ?>
- </tr>
-
- <tr>
- <?php
- $counter = 3;
- foreach ($array_in_bytes as $data): ?>
- <td class="listr nowrap" id="stat<?php echo $counter;?>" style="height:25px">
- <?=htmlspecialchars($data);?>
- </td>
- <?php
- $counter = $counter + 7;
- endforeach; ?>
- </tr>
-
- <tr>
- <?php
- $counter = 4;
- foreach ($array_out_bytes as $data): ?>
- <td class="listr nowrap" id="stat<?php echo $counter;?>" style="height:25px">
- <?=htmlspecialchars($data);?>
- </td>
- <?php
- $counter = $counter + 7;
- endforeach; ?>
- </tr>
-
- <tr>
- <?php
- $counter = 5;
- foreach ($array_in_errors as $data): ?>
- <td class="listr nowrap" id="stat<?php echo $counter;?>" style="height:25px">
- <?=htmlspecialchars($data);?>
- </td>
- <?php
- $counter = $counter + 7;
- endforeach; ?>
- </tr>
-
- <tr>
- <?php
- $counter = 6;
- foreach ($array_out_errors as $data): ?>
- <td class="listr nowrap" id="stat<?php echo $counter;?>" style="height:25px">
- <?=htmlspecialchars($data);?>
- </td>
- <?php
- $counter = $counter + 7;
- endforeach; ?>
- </tr>
-
- <tr>
- <?php
- $counter = 7;
- foreach ($array_collisions as $data): ?>
- <td class="listr nowrap" id="stat<?php echo $counter;?>" style="height:25px">
- <?=htmlspecialchars($data);?>
- </td>
- <?php
- $counter = $counter + 7;
- endforeach; ?>
- </tr>
- </table>
- </div>
diff --git a/usr/local/www/widgets/widgets/interfaces.widget.php b/usr/local/www/widgets/widgets/interfaces.widget.php
deleted file mode 100644
index e49a030..0000000
--- a/usr/local/www/widgets/widgets/interfaces.widget.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-/*
- interfaces.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Copyright 2007 Scott Dale
- Part of pfSense widgets (https://www.pfsense.org)
- originally based on m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
- and Jonathan Watt <jwatt@jwatt.org>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-require_once("/usr/local/www/widgets/include/interfaces.inc");
-
-$ifdescrs = get_configured_interface_with_descr();
-?>
-
-<table bgcolor="#990000" width="100%" border="0" cellspacing="0" cellpadding="0" summary="interfaces">
-<?php
-foreach ($ifdescrs as $ifdescr => $ifname):
- $ifinfo = get_interface_info($ifdescr);
-
- if ($ifinfo['ppplink']) {
- $icon = '3g';
- } else if (is_interface_wireless($ifdescr)) {
- if ($ifinfo['status'] == "associated") {
- $icon = 'wlan';
- } else {
- $icon = 'wlan_d';
- }
- } else {
- $icon = 'cablenic';
- }
-
- if ($ifinfo['status'] == "up" || $ifinfo['status'] == "associated") {
- $known_status = true;
- $up_display = "inline";
- $down_display = "none";
- $block_display = "none";
- } elseif ($ifinfo['status'] == "no carrier") {
- $known_status = true;
- $up_display = "none";
- $down_display = "inline";
- $block_display = "none";
- } elseif ($ifinfo['status'] == "down") {
- $known_status = true;
- $up_display = "none";
- $down_display = "none";
- $block_display = "inline";
- } else {
- $known_status = false;
- }
-?>
- <tr>
- <td class="vncellt" rowspan="2">
- <span onclick="location.href='/interfaces.php?if=<?=$ifdescr; ?>'" style="cursor:pointer; white-space:nowrap">
- <img src="./themes/<?=$g['theme'];?>/images/icons/icon_<?=$icon;?>.gif" alt="<?=$icon;?>" />
- <u><?=htmlspecialchars($ifname);?></u>
- </span>
-<?php
- if ($ifinfo['dhcplink']) {
- echo "<br />(DHCP)";
- }
-?>
- </td>
-<?php
- if ($known_status):
-?>
- <td rowspan="2" class="listr" align="center">
- <div id="<?php echo $ifname . "-up";?>" style="display:<?=$up_display;?>" >
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_interface_up.gif" title="<?=$ifname;?> is up" alt="up" />
- </div>
- <div id="<?php echo $ifname . "-down";?>" style="display:<?=$down_display;?>" >
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_interface_down.gif" title="<?=$ifname;?> is down" alt="down" />
- </div>
- <div id="<?php echo $ifname . "-block";?>" style="display:<?=$block_display;?>" >
- <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" title="<?=$ifname;?> is disabled" alt="block" />
- </div>
- </td>
-<?php
- else:
- echo htmlspecialchars($ifinfo['status']);
- endif;
-?>
- <td class="listr">
- <div id="<?php echo $ifname;?>-media" style="display:inline"><?=htmlspecialchars($ifinfo['media']);?></div>
- </td>
- </tr>
- <tr>
- <td class="listr">
- <div id="<?php echo $ifname;?>-ip" style="display:inline"><strong><?=htmlspecialchars($ifinfo['ipaddr']);?> </strong><?php if ($ifinfo['ipaddr']) echo "<br />";?></div>
- <div id="<?php echo $ifname;?>-ipv6" style="display:inline"><strong><?=htmlspecialchars($ifinfo['ipaddrv6']);?> </strong></div>
- </td>
- </tr>
-<?php
-endforeach;
-?>
-</table>
diff --git a/usr/local/www/widgets/widgets/ipsec.widget.php b/usr/local/www/widgets/widgets/ipsec.widget.php
deleted file mode 100644
index 49250ce..0000000
--- a/usr/local/www/widgets/widgets/ipsec.widget.php
+++ /dev/null
@@ -1,265 +0,0 @@
-<?php
-/*
- ipsec.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Copyright 2007 Scott Dale
- Part of pfSense widgets (https://www.pfsense.org)
- originally based on m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
- and Jonathan Watt <jwatt@jwatt.org>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("functions.inc");
-require_once("ipsec.inc");
-
-if (isset($config['ipsec']['phase1'])) {
-?>
- <div>&nbsp;</div>
-<?php
- $tab_array = array();
- $tab_array[0] = array("Overview", true, "ipsec-Overview");
- $tab_array[1] = array("Tunnels", false, "ipsec-tunnel");
- $tab_array[2] = array("Mobile", false, "ipsec-mobile");
- display_widget_tabs($tab_array);
-
- $spd = ipsec_dump_spd();
- $sad = ipsec_dump_sad();
- $mobile = ipsec_dump_mobile();
- $ipsec_status = ipsec_smp_dump_status();
-
- $activecounter = 0;
- $inactivecounter = 0;
-
- if (!is_array($ipsec_status['query'])) {
- $ipsec_status['query'] = array();
- $ipsec_status['query']['ikesalist'] = array();
- $ipsec_status['query']['ikesalist']['ikesa'] = array();
- } else if (!is_array($ipsec_status['query']['ikesalist'])) {
- $ipsec_status['query']['ikesalist'] = array();
- $ipsec_status['query']['ikesalist']['ikesa'] = array();
- } else if (!is_array($ipsec_status['query']['ikesalist']['ikesa'])) {
- $ipsec_status['query']['ikesalist']['ikesa'] = array();
- }
-
- $ipsec_detail_array = array();
- $ikenum = array();
- if (isset($config['ipsec']['phase2'])) {
- foreach ($config['ipsec']['phase2'] as $ph2ent) {
- if (!ipsec_lookup_phase1($ph2ent,$ph1ent)) {
- continue;
- }
-
- if ($ph2ent['remoteid']['type'] == "mobile" || isset($ph1ent['mobile'])) {
- continue;
- }
- if (isset($ph1ent['disabled']) || isset($ph2ent['disabled'])) {
- continue;
- }
-
- if (empty($ph1ent['iketype']) || $ph1ent['iketype'] == 'ikev1') {
- if (!isset($ikenum[$ph1ent['ikeid']])) {
- $ikenum[$ph1ent['ikeid']] = 0;
- } else {
- $ikenum[$ph1ent['ikeid']]++;
- }
- $ikeid = "con{$ph1ent['ikeid']}00" . $ikenum[$ph1ent['ikeid']];
- } else {
- if (isset($ikenum[$ph1ent['ikeid']])) {
- continue;
- }
- $ikeid = "con{$ph1ent['ikeid']}";
- $ikenum[$ph1ent['ikeid']] = true;
- }
-
- $found = false;
- foreach ($ipsec_status['query']['ikesalist']['ikesa'] as $ikesa) {
- if (isset($ikesa['childsalist']) && isset($ikesa['childsalist']['childsa'])) {
- foreach ($ikesa['childsalist']['childsa'] as $childsa) {
- if ($ikeid == $childsa['childconfig']) {
- $found = true;
- break;
- }
- }
- } else if ($ikeid == $ikesa['peerconfig']) {
- $found = true;
- }
-
- if ($found === true) {
- if ($ikesa['status'] == 'established') {
- /* tunnel is up */
- $iconfn = "true";
- $activecounter++;
- } else {
- /* tunnel is down */
- $iconfn = "false";
- $inactivecounter++;
- }
- break;
- }
- }
-
- if ($found === false) {
- /* tunnel is down */
- $iconfn = "false";
- $inactivecounter++;
- }
-
- $ipsec_detail_array[] = array('src' => convert_friendly_interface_to_friendly_descr($ph1ent['interface']),
- 'dest' => $ph1ent['remote-gateway'],
- 'remote-subnet' => ipsec_idinfo_to_text($ph2ent['remoteid']),
- 'descr' => $ph2ent['descr'],
- 'status' => $iconfn);
- }
- }
- unset($ikenum);
-}
-
-if (isset($config['ipsec']['phase2'])) {
-?>
-
-<div id="ipsec-Overview" style="display:block;background-color:#EEEEEE;">
- <div>
- <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="heading">
- <tr>
- <td class="listhdrr nowrap">Active Tunnels</td>
- <td class="listhdrr nowrap">Inactive Tunnels</td>
- <td class="listhdrr nowrap">Mobile Users</td>
- </tr>
- <tr>
- <td class="listlr"><?php echo $activecounter; ?></td>
- <td class="listr"><?php echo $inactivecounter; ?></td>
- <td class="listr"><?php if (is_array($mobile['pool'])) echo htmlspecialchars($mobile['pool'][0]['usage']); else echo 0; ?></td>
- </tr>
- </table>
- </div>
-</div>
-
-<div id="ipsec-tunnel" style="display:none;background-color:#EEEEEE;">
- <div style="padding: 10px">
- <div style="display:table-row;">
- <div class="widgetsubheader" style="display:table-cell;width:40px">Source</div>
- <div class="widgetsubheader" style="display:table-cell;width:100px">Destination</div>
- <div class="widgetsubheader" style="display:table-cell;width:90px">Description</div>
- <div class="widgetsubheader" style="display:table-cell;width:30px">Status</div>
- </div>
- <div style="max-height:105px;overflow:auto;">
-
- <?php
- foreach ($ipsec_detail_array as $ipsec) :
- ?>
-
- <div style="display:table-row;">
- <div class="listlr" style="display:table-cell;width:39px">
- <?php echo htmlspecialchars($ipsec['src']);?>
- </div>
- <div class="listr" style="display:table-cell;width:100px">
- <?php echo $ipsec['remote-subnet'];?>
- <br />
- (<?php echo htmlspecialchars($ipsec['dest']);?>)
- </div>
- <div class="listr" style="display:table-cell;width:90px">
- <?php echo htmlspecialchars($ipsec['descr']);?>
- </div>
- <div class="listr" style="display:table-cell;width:37px" align="center">
- <?php
- if ($ipsec['status'] == "true") {
- /* tunnel is up */
- $iconfn = "interface_up";
- } else {
- /* tunnel is down */
- $iconfn = "interface_down";
- }
-
- echo "<img src ='/themes/{$g['theme']}/images/icons/icon_{$iconfn}.gif' alt='Tunnel status' width='11' height='11' />";
- ?>
- </div>
- </div>
- <?php
- endforeach;
- ?>
- </div>
- </div>
-</div>
-<div id="ipsec-mobile" style="display:none;background-color:#EEEEEE;">
- <div style="padding: 10px">
- <div style="display:table-row;">
- <div class="widgetsubheader" style="display:table-cell;width:140px">User</div>
- <div class="widgetsubheader" style="display:table-cell;width:130px">IP</div>
- <div class="widgetsubheader" style="display:table-cell;width:30px">Status</div>
- </div>
- <div style="max-height:105px;overflow:auto;">
-<?php
- if (is_array($mobile['pool'])):
- foreach ($mobile['pool'] as $pool):
- if (is_array($pool['lease'])):
- foreach ($pool['lease'] as $muser) :
-?>
- <div style="display:table-row;">
- <div class="listlr" style="display:table-cell;width:139px">
- <?php echo htmlspecialchars($muser['id']);?><br />
- </div>
- <div class="listr" style="display:table-cell;width:130px">
- <?php echo htmlspecialchars($muser['host']);?><br />
- </div>
- <div class="listr" style="display:table-cell;width:30px">
- <?php echo htmlspecialchars($muser['status']);?><br/>
- </div>
- </div>
-<?php
- endforeach;
- endif;
- endforeach;
- endif;
-?>
- </div>
- </div>
-</div>
-<?php // end if tunnels are configured, else show code below
-} else {
-?>
-<div style="display:block">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="note">
- <tr>
- <td colspan="4">
- <span class="vexpl">
- <span class="red">
- <strong>
- Note: There are no configured IPsec Tunnels<br />
- </strong>
- </span>
- You can configure your IPsec <a href="vpn_ipsec.php">here</a>.
- </span>
- </td>
- </tr>
- </table>
-</div>
-<?php
-}
-?>
diff --git a/usr/local/www/widgets/widgets/load_balancer_status.widget.php b/usr/local/www/widgets/widgets/load_balancer_status.widget.php
deleted file mode 100644
index f5ddda9..0000000
--- a/usr/local/www/widgets/widgets/load_balancer_status.widget.php
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-/*
- load_balancer_status.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Copyright 2010 Jim Pingle
- Portions copied from status_lb_pool.php, status_lb_vs.php, and vslb.inc:
- Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
- Copyright (C) 2005-2008 Bill Marquette
-
- Part of pfSense widgets (https://www.pfsense.org)
- originally based on m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
- and Jonathan Watt <jwatt@jwatt.org>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-require_once("vslb.inc");
-
-$now = time();
-$year = date("Y");
-
-if (!is_array($config['load_balancer']['lbpool'])) {
- $config['load_balancer']['lbpool'] = array();
-}
-if (!is_array($config['load_balancer']['virtual_server'])) {
- $config['load_balancer']['virtual_server'] = array();
-}
-$a_vs = &$config['load_balancer']['virtual_server'];
-$a_pool = &$config['load_balancer']['lbpool'];
-$rdr_a = get_lb_redirects();
-$relay_hosts = get_lb_summary();
-
-$lb_logfile = "{$g['varlog_path']}/relayd.log";
-$nentries = $config['syslog']['nentries'];
-if (!$nentries) {
- $nentries = 50;
-}
-
-?>
-
-<table bgcolor="#990000" width="100%" border="0" cellspacing="0" cellpadding="0" summary="load balancer">
- <tr>
- <td width="10%" class="listhdrr">Server</td>
- <td width="10%" class="listhdrr">Pool</td>
- <td width="30%" class="listhdr">Description</td>
- </tr>
-<?php
-$i = 0;
-foreach ($a_vs as $vsent):
-?>
- <tr>
- <?php
- switch (trim($rdr_a[$vsent['name']]['status'])) {
- case 'active':
- $bgcolor = "#90EE90"; // lightgreen
- $rdr_a[$vsent['name']]['status'] = "Active";
- break;
- case 'down':
- $bgcolor = "#F08080"; // lightcoral
- $rdr_a[$vsent['name']]['status'] = "Down";
- break;
- default:
- $bgcolor = "#D3D3D3"; // lightgray
- $rdr_a[$vsent['name']]['status'] = 'Unknown - relayd not running?';
- }
- ?>
- <td class="listlr">
- <?=$vsent['name'];?><br />
- <span style="background-color: <?=$bgcolor?>; display: block"><i><?=$rdr_a[$vsent['name']]['status']?></i></span>
- <?=$vsent['ipaddr'].":".$vsent['port'];?><br />
- </td>
- <td class="listr" align="center" >
- <table border="0" cellpadding="0" cellspacing="2" summary="status">
- <?php
- foreach ($a_pool as $pool) {
- if ($pool['name'] == $vsent['poolname']) {
- $pool_hosts=array();
- foreach ((array) $pool['servers'] as $server) {
- $svr['ip']['addr']=$server;
- $svr['ip']['state']=$relay_hosts[$pool['name'].":".$pool['port']][$server]['state'];
- $svr['ip']['avail']=$relay_hosts[$pool['name'].":".$pool['port']][$server]['avail'];
- $pool_hosts[]=$svr;
- }
- foreach ((array) $pool['serversdisabled'] as $server) {
- $svr['ip']['addr']="$server";
- $svr['ip']['state']='disabled';
- $svr['ip']['avail']='disabled';
- $pool_hosts[]=$svr;
- }
- asort($pool_hosts);
- foreach ((array) $pool_hosts as $server) {
- if ($server['ip']['addr']!="") {
- switch ($server['ip']['state']) {
- case 'up':
- $bgcolor = "#90EE90"; // lightgreen
- $checked = "checked";
- break;
- case 'disabled':
- $bgcolor = "#FFFFFF"; // white
- $checked = "";
- break;
- default:
- $bgcolor = "#F08080"; // lightcoral
- $checked = "checked";
- }
- echo "<tr>";
- echo "<td bgcolor=\"{$bgcolor}\">&nbsp;{$server['ip']['addr']}:{$pool['port']}&nbsp;</td><td bgcolor=\"{$bgcolor}\">&nbsp;";
- if ($server['ip']['avail']) {
- echo " ({$server['ip']['avail']}) ";
- }
- echo "&nbsp;</td></tr>";
- }
- }
- }
- }
- ?>
- </table>
- </td>
- <td class="listbg" >
- <font color="#FFFFFF"><?=$vsent['descr'];?></font>
- </td>
- </tr>
-<?php
- $i++;
-endforeach;
-?>
-</table>
diff --git a/usr/local/www/widgets/widgets/log.widget.php b/usr/local/www/widgets/widgets/log.widget.php
deleted file mode 100644
index 45205a4..0000000
--- a/usr/local/www/widgets/widgets/log.widget.php
+++ /dev/null
@@ -1,281 +0,0 @@
-<?php
-/*
- log.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Copyright 2007 Scott Dale
- Part of pfSense widgets (https://www.pfsense.org)
- originally based on m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
- and Jonathan Watt <jwatt@jwatt.org>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-
-/* In an effort to reduce duplicate code, many shared functions have been moved here. */
-require_once("filter_log.inc");
-
-if (is_numeric($_POST['filterlogentries'])) {
- $config['widgets']['filterlogentries'] = $_POST['filterlogentries'];
-
- $acts = array();
- if ($_POST['actpass']) {
- $acts[] = "Pass";
- }
- if ($_POST['actblock']) {
- $acts[] = "Block";
- }
- if ($_POST['actreject']) {
- $acts[] = "Reject";
- }
-
- if (!empty($acts)) {
- $config['widgets']['filterlogentriesacts'] = implode(" ", $acts);
- } else {
- unset($config['widgets']['filterlogentriesacts']);
- }
- unset($acts);
-
- if (($_POST['filterlogentriesinterfaces']) and ($_POST['filterlogentriesinterfaces'] != "All")) {
- $config['widgets']['filterlogentriesinterfaces'] = trim($_POST['filterlogentriesinterfaces']);
- } else {
- unset($config['widgets']['filterlogentriesinterfaces']);
- }
-
- write_config("Saved Filter Log Entries via Dashboard");
- Header("Location: /");
- exit(0);
-}
-
-$nentries = isset($config['widgets']['filterlogentries']) ? $config['widgets']['filterlogentries'] : 5;
-
-//set variables for log
-
-$nentriesacts = isset($config['widgets']['filterlogentriesacts']) ? $config['widgets']['filterlogentriesacts'] : 'All';
-$nentriesinterfaces = isset($config['widgets']['filterlogentriesinterfaces']) ? $config['widgets']['filterlogentriesinterfaces'] : 'All';
-
-$filterfieldsarray = array(
- "act" => $nentriesacts,
- "interface" => $nentriesinterfaces
-);
-
-$filter_logfile = "{$g['varlog_path']}/filter.log";
-$filterlog = conv_log_filter($filter_logfile, $nentries, 50, $filterfieldsarray); //Get log entries
-
-/* AJAX related routines */
-handle_ajax($nentries, $nentries + 20);
-
-?>
-
-<script type="text/javascript">
-//<![CDATA[
-lastsawtime = '<?php echo time(); ?>';
-var lines = Array();
-var timer;
-var updateDelay = 30000;
-var isBusy = false;
-var isPaused = false;
-var nentries = <?php echo $nentries; ?>;
-
-<?php
-if (isset($config['syslog']['reverse'])) {
- echo "var isReverse = true;\n";
-} else {
- echo "var isReverse = false;\n";
-}
-?>
-
-/* Called by the AJAX updater */
-function format_log_line(row) {
- var rrText = "<?php echo gettext("Reverse Resolve with DNS"); ?>";
-
- if (row[8] == '6') {
- srcIP = '[' + row[3] + ']';
- dstIP = '[' + row[5] + ']';
- } else {
- srcIP = row[3];
- dstIP = row[5];
- }
-
- if (row[4] == '') {
- srcPort = '';
- } else {
- srcPort = ':' + row[4];
- }
- if (row[6] == '') {
- dstPort = '';
- } else {
- dstPort = ':' + row[6];
- }
-
- var line = '<td class="listMRlr" align="center">' + row[0] + '</td>' +
- '<td class="listMRr ellipsis" title="' + row[1] + '">' + row[1].slice(0,-3) + '</td>' +
- '<td class="listMRr ellipsis" title="' + row[2] + '">' + row[2] + '</td>' +
- '<td class="listMRr ellipsis" title="' + srcIP + srcPort + '"><a href="diag_dns.php?host=' + row[3] + '" title="' + rrText + '">' + srcIP + '</a></td>' +
- '<td class="listMRr ellipsis" title="' + dstIP + dstPort + '"><a href="diag_dns.php?host=' + row[5] + '" title="' + rrText + '">' + dstIP + '</a>' + dstPort + '</td>';
-
- var nentriesacts = "<?php echo $nentriesacts; ?>";
- var nentriesinterfaces = "<?php echo $nentriesinterfaces; ?>";
-
- var Action = row[0].match(/alt=.*?(pass|block|reject)/i).join("").match(/pass|block|reject/i).join("");
- var Interface = row[2];
-
- if (!(in_arrayi(Action, nentriesacts.replace (/\s+/g, ',').split(','))) && (nentriesacts != 'All')) {
- return false;
- }
- if (!(in_arrayi(Interface, nentriesinterfaces.replace(/\s+/g, ',').split(','))) && (nentriesinterfaces != 'All')) {
- return false;
- }
-
- return line;
-}
-//]]>
-</script>
-<script src="/javascript/filter_log.js" type="text/javascript"></script>
-<input type="hidden" id="log-config" name="log-config" value="" />
-
-<div id="log-settings" class="widgetconfigdiv" style="display:none;">
- <form action="/widgets/widgets/log.widget.php" method="post" name="log_widget_iform">
- Number of lines to display:
- <select name="filterlogentries" class="formfld unknown" id="filterlogentries">
- <?php for ($i = 1; $i <= 20; $i++) { ?>
- <option value="<?php echo $i;?>" <?php if ($nentries == $i) echo "selected=\"selected\"";?>><?php echo $i;?></option>
- <?php } ?>
- </select>
-
-<?php
- $Include_Act = explode(" ", $nentriesacts);
- if ($nentriesinterfaces == "All") {
- $nentriesinterfaces = "";
- }
-?>
- <input id="actpass" name="actpass" type="checkbox" value="Pass" <?php if (in_arrayi('Pass', $Include_Act)) echo "checked=\"checked\""; ?> /> Pass
- <input id="actblock" name="actblock" type="checkbox" value="Block" <?php if (in_arrayi('Block', $Include_Act)) echo "checked=\"checked\""; ?> /> Block
- <input id="actreject" name="actreject" type="checkbox" value="Reject" <?php if (in_arrayi('Reject', $Include_Act)) echo "checked=\"checked\""; ?> /> Reject
- <br />
- Interfaces:
- <select id="filterlogentriesinterfaces" name="filterlogentriesinterfaces" class="formselect">
- <option value="All">ALL</option>
-<?php
- $interfaces = get_configured_interface_with_descr();
- foreach ($interfaces as $iface => $ifacename):
-?>
- <option value="<?=$iface;?>" <?php if ($nentriesinterfaces == $iface) echo "selected=\"selected\"";?>>
- <?=htmlspecialchars($ifacename);?>
- </option>
-<?php
- endforeach;
- unset($interfaces);
- unset($Include_Act);
-?>
- </select>
-
- <input id="log_widget_submit" name="log_widget_submit" type="submit" class="formbtn" value="Save" />
- </form>
-</div>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" style="table-layout: fixed;" summary="logs">
- <colgroup>
- <col style='width: 7%;' />
- <col style='width: 23%;' />
- <col style='width: 11%;' />
- <col style='width: 28%;' />
- <col style='width: 31%;' />
- </colgroup>
- <thead>
- <tr>
- <td class="listhdrr"><?=gettext("Act");?></td>
- <td class="listhdrr"><?=gettext("Time");?></td>
- <td class="listhdrr"><?=gettext("IF");?></td>
- <td class="listhdrr"><?=gettext("Source");?></td>
- <td class="listhdrr"><?=gettext("Destination");?></td>
- </tr>
- </thead>
- <tbody id='filter-log-entries'>
- <?php
- $rowIndex = 0;
- foreach ($filterlog as $filterent):
- $evenRowClass = $rowIndex % 2 ? " listMReven" : " listMRodd";
- $rowIndex++;
- if ($filterent['version'] == '6') {
- $srcIP = "[" . htmlspecialchars($filterent['srcip']) . "]";
- $dstIP = "[" . htmlspecialchars($filterent['dstip']) . "]";
- } else {
- $srcIP = htmlspecialchars($filterent['srcip']);
- $dstIP = htmlspecialchars($filterent['dstip']);
- }
-
- if ($filterent['srcport']) {
- $srcPort = ":" . htmlspecialchars($filterent['srcport']);
- } else {
- $srcPort = "";
- }
-
- if ($filterent['dstport']) {
- $dstPort = ":" . htmlspecialchars($filterent['dstport']);
- } else {
- $dstPort = "";
- }
-
- ?>
- <tr class="<?=$evenRowClass?>">
- <td class="listMRlr nowrap" align="center">
- <a href="#" onclick="javascript:getURL('diag_logs_filter.php?getrulenum=<?php echo "{$filterent['rulenum']},{$filterent['tracker']},{$filterent['act']}"; ?>', outputrule);">
- <img border="0" src="<?php echo find_action_image($filterent['act']);?>" width="11" height="11" alt="<?php echo $filterent['act'];?>" title="<?php echo $filterent['act'];?>" />
- </a>
- </td>
- <td class="listMRr ellipsis nowrap" title="<?php echo htmlspecialchars($filterent['time']);?>"><?php echo substr(htmlspecialchars($filterent['time']),0,-3);?></td>
- <td class="listMRr ellipsis nowrap" title="<?php echo htmlspecialchars($filterent['interface']);?>"><?php echo htmlspecialchars($filterent['interface']);?></td>
- <td class="listMRr ellipsis nowrap" title="<?php echo $srcIP . $srcPort;?>">
- <a href="diag_dns.php?host=<?php echo "{$filterent['srcip']}"; ?>" title="<?=gettext("Reverse Resolve with DNS");?>">
- <?php echo $srcIP;?></a></td>
- <td class="listMRr ellipsis nowrap" title="<?php echo $dstIP . $dstPort;?>">
- <a href="diag_dns.php?host=<?php echo "{$filterent['dstip']}"; ?>" title="<?=gettext("Reverse Resolve with DNS");?>">
- <?php echo $dstIP;?></a><?php echo $dstPort;?></td>
- <?php
- if ($filterent['proto'] == "TCP") {
- $filterent['proto'] .= ":{$filterent['tcpflags']}";
- }
- ?>
- </tr>
- <?php
- endforeach;
- ?>
- </tbody>
-</table>
-
-<!-- needed to display the widget settings menu -->
-<script type="text/javascript">
-//<![CDATA[
- selectIntLink = "log-configure";
- textlink = document.getElementById(selectIntLink);
- textlink.style.display = "inline";
-//]]>
-</script>
diff --git a/usr/local/www/widgets/widgets/ntp_status.widget.php b/usr/local/www/widgets/widgets/ntp_status.widget.php
deleted file mode 100644
index 64522be..0000000
--- a/usr/local/www/widgets/widgets/ntp_status.widget.php
+++ /dev/null
@@ -1,515 +0,0 @@
-<?php
-/*
- ntp_status.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Copyright 2007 Scott Dale
- Part of pfSense widgets (https://www.pfsense.org)
- originally based on m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
- and Jonathan Watt <jwatt@jwatt.org>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-
-require_once("/usr/local/www/widgets/include/ntp_status.inc");
-
-if ($_REQUEST['updateme']) {
-//this block displays only on ajax refresh
- if (isset($config['system']['ipv6allow'])) {
- $inet_version = "";
- } else {
- $inet_version = " -4";
- }
-
- exec("/usr/local/sbin/ntpq -pn $inet_version | /usr/bin/tail +3", $ntpq_output);
- $ntpq_counter = 0;
- foreach ($ntpq_output as $line) {
- if (substr($line, 0, 1) == "*") {
- //Active NTP Peer
- $line = substr($line, 1);
- $peerinfo = preg_split("/[\s\t]+/", $line);
- if ($peerinfo[2] == "1") {
- $syncsource = $peerinfo[0] . " (stratum " . $peerinfo[2] . ", " . $peerinfo[1] . ")";
- } else {
- $syncsource = $peerinfo[0] . " (stratum " . $peerinfo[2] . ")";
- }
- $ntpq_counter++;
- } elseif (substr($line, 0, 1) == "o") {
- //Local PPS Peer
- $line = substr($line, 1);
- $peerinfo = preg_split("/[\s\t]+/", $line);
- $syncsource = $peerinfo[1] . " (stratum " . $peerinfo[2] . ", PPS)";
- $ntpq_counter++;
- }
- }
-
- exec("/usr/local/sbin/ntpq -c clockvar $inet_version", $ntpq_clockvar_output);
- foreach ($ntpq_clockvar_output as $line) {
- if (substr($line, 0, 9) == "timecode=") {
- $tmp = explode('"', $line);
- $tmp = $tmp[1];
- if (substr($tmp, 0, 6) == '$GPRMC') {
- $gps_vars = explode(",", $tmp);
- $gps_ok = ($gps_vars[2] == "A");
- $gps_lat_deg = substr($gps_vars[3], 0, 2);
- $gps_lat_min = substr($gps_vars[3], 2) / 60.0;
- $gps_lon_deg = substr($gps_vars[5], 0, 3);
- $gps_lon_min = substr($gps_vars[5], 3) / 60.0;
- $gps_lat = $gps_lat_deg + $gps_lat_min;
- $gps_lat = $gps_lat * (($gps_vars[4] == "N") ? 1 : -1);
- $gps_lon = $gps_lon_deg + $gps_lon_min;
- $gps_lon = $gps_lon * (($gps_vars[6] == "E") ? 1 : -1);
- $gps_la = $gps_vars[4];
- $gps_lo = $gps_vars[6];
- } elseif (substr($tmp, 0, 6) == '$GPGGA') {
- $gps_vars = explode(",", $tmp);
- $gps_ok = $gps_vars[6];
- $gps_lat_deg = substr($gps_vars[2], 0, 2);
- $gps_lat_min = substr($gps_vars[2], 2) / 60.0;
- $gps_lon_deg = substr($gps_vars[4], 0, 3);
- $gps_lon_min = substr($gps_vars[4], 3) / 60.0;
- $gps_lat = $gps_lat_deg + $gps_lat_min;
- $gps_lat = $gps_lat * (($gps_vars[3] == "N") ? 1 : -1);
- $gps_lon = $gps_lon_deg + $gps_lon_min;
- $gps_lon = $gps_lon * (($gps_vars[5] == "E") ? 1 : -1);
- $gps_alt = $gps_vars[9];
- $gps_alt_unit = $gps_vars[10];
- $gps_sat = $gps_vars[7];
- $gps_la = $gps_vars[3];
- $gps_lo = $gps_vars[5];
- } elseif (substr($tmp, 0, 6) == '$GPGLL') {
- $gps_vars = explode(",", $tmp);
- $gps_ok = ($gps_vars[6] == "A");
- $gps_lat_deg = substr($gps_vars[1], 0, 2);
- $gps_lat_min = substr($gps_vars[1], 2) / 60.0;
- $gps_lon_deg = substr($gps_vars[3], 0, 3);
- $gps_lon_min = substr($gps_vars[3], 3) / 60.0;
- $gps_lat = $gps_lat_deg + $gps_lat_min;
- $gps_lat = $gps_lat * (($gps_vars[2] == "N") ? 1 : -1);
- $gps_lon = $gps_lon_deg + $gps_lon_min;
- $gps_lon = $gps_lon * (($gps_vars[4] == "E") ? 1 : -1);
- $gps_la = $gps_vars[2];
- $gps_lo = $gps_vars[4];
- }
- }
- }
-
- if (isset($config['ntpd']['gps']['type']) && ($config['ntpd']['gps']['type'] == 'SureGPS') && (isset($gps_ok))) {
- //GSV message is only enabled by init commands in services_ntpd_gps.php for SureGPS board
- $gpsport = fopen("/dev/gps0", "r+");
- while ($gpsport) {
- $buffer = fgets($gpsport);
- if (substr($buffer, 0, 6)=='$GPGSV') {
- //echo $buffer."\n";
- $gpgsv = explode(',',$buffer);
- $gps_satview = $gpgsv[3];
- break;
- }
- }
- }
-?>
-
-<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="clock">
- <tbody>
- <tr>
- <td width="40%" class="vncellt">Sync Source</td>
- <td width="60%" class="listr">
- <?php if ($ntpq_counter == 0): ?>
- No active peers available
- <?php else: ?>
- <?php echo $syncsource; ?>
- <?php endif; ?>
- </td>
- </tr>
- <?php if (($gps_ok) && ($gps_lat) && ($gps_lon)): ?>
- <tr>
- <td width="40%" class="vncellt">Clock location</td>
- <td width="60%" class="listr">
- <a target="_gmaps" href="http://maps.google.com/?q=<?php echo $gps_lat; ?>,<?php echo $gps_lon; ?>">
- <?php
- echo sprintf("%.5f", $gps_lat) . " " . $gps_la . ", " . sprintf("%.5f", $gps_lon) . " " . $gps_lo;
- ?>
- </a>
- <?php
- if (isset($gps_alt)) {
- echo " (" . $gps_alt . " " . $gps_alt_unit . " alt.)";
- }
- ?>
- </td>
- </tr>
- <?php if (isset($gps_sat) || isset($gps_satview)): ?>
- <tr>
- <td width="40%" class="vncellt">Satellites</td>
- <td width="60%" class="listr">
- <?php
- if (isset($gps_satview)) {
- echo 'in view ' . intval($gps_satview);
- }
- if (isset($gps_sat) && isset($gps_satview)) {
- echo ', ';
- }
- if (isset($gps_sat)) {
- echo 'in use ' . $gps_sat;
- }
- ?>
- </td>
- </tr>
- <?php endif; ?>
- <?php endif; ?>
- </tbody>
-</table>
-<?php
- exit;
-}
-
-/*** Clock -- beginning of server-side support code
-by Andrew Shearer, http://www.shearersoftware.com/
-v2.1.2-PHP, 2003-08-07. For updates and explanations, see
-<http://www.shearersoftware.com/software/web-tools/clock/>. ***/
-
-/* Prevent this page from being cached (though some browsers still
- cache the page anyway, which is why we use cookies). This is
- only important if the cookie is deleted while the page is still
- cached (and for ancient browsers that don't know about Cache-Control).
- If that's not an issue, you may be able to get away with
- "Cache-Control: private" instead. */
-
-/* Grab the current server time. */
-$gDate = time();
-/* Are the seconds shown by default? When changing this, also change the
- JavaScript client code's definition of clockShowsSeconds below to match. */
-$gClockShowsSeconds = true;
-
-function getServerDateItems($inDate) {
- return date('Y,n,j,G,',$inDate).intval(date('i',$inDate)).','.intval(date('s',$inDate));
- // year (4-digit),month,day,hours (0-23),minutes,seconds
- // use intval to strip leading zero from minutes and seconds
- // so JavaScript won't try to interpret them in octal
- // (use intval instead of ltrim, which translates '00' to '')
-}
-
-function clockDateString($inDate) {
- return date('Y. F j l',$inDate); // eg "Monday, January 1, 2002"
-}
-
-function clockTimeString($inDate, $showSeconds) {
- return date($showSeconds ? 'G:i:s' : 'g:i',$inDate).' ';
-}
-/*** Clock -- end of server-side support code ***/
-?>
-
-<script type="text/javascript">
-//<![CDATA[
-/* set up variables used to init clock in BODY's onLoad handler;
- should be done as early as possible */
-var clockLocalStartTime = new Date();
-var clockServerStartTime = new Date(<?php echo(getServerDateItems($gDate))?>);
-
-/* stub functions for older browsers;
- will be overridden by next JavaScript1.2 block */
-function clockInit() {
-}
-//]]>
-</script>
-
-
-<script type="text/javascript">
-//<![CDATA[
-/*** simpleFindObj, by Andrew Shearer
-
-Efficiently finds an object by name/id, using whichever of the IE,
-classic Netscape, or Netscape 6/W3C DOM methods is available.
-The optional inLayer argument helps Netscape 4 find objects in
-the named layer or floating DIV. */
-function simpleFindObj(name, inLayer) {
- return document[name] || (document.all && document.all[name])
- || (document.getElementById && document.getElementById(name))
- || (document.layers && inLayer && document.layers[inLayer].document[name]);
-}
-
-/*** Beginning of Clock 2.1.2, by Andrew Shearer
-See: http://www.shearersoftware.com/software/web-tools/clock/
-Redistribution is permitted with the above notice intact.
-
-Client-side clock, based on computed time differential between browser &
-server. The server time is inserted by server-side JavaScript, and local
-time is subtracted from it by client-side JavaScript while the page is
-loading.
-
-Cookies: The local and remote times are saved in cookies named
-localClock and remoteClock, so that when the page is loaded from local
-cache (e.g. by the Back button) the clock will know that the embedded
-server time is stale compared to the local time, since it already
-matches its cookie. It can then base the calculations on both cookies,
-without reloading the page from the server. (IE 4 & 5 for Windows didn't
-respect Response.Expires = 0, so if cookies weren't used, the clock
-would be wrong after going to another page then clicking Back. Netscape
-& Mac IE were OK.)
-
-Every so often (by default, one hour) the clock will reload the page, to
-make sure the clock is in sync (as well as to update the rest of the
-page content).
-
-Compatibility: IE 4.x and 5.0, Netscape 4.x and 6.0, Mozilla 1.0. Mac & Windows.
-
-History: 1.0 2000-05-09 GIF-image digits
- 2.0 2000-06-29 Uses text DIV layers (so 4.0 browsers req'd), &
- cookies to work around Win IE stale-time bug
- 2.1 2002-10-12 Noted Mozilla 1.0 compatibility; released PHP version.
- 2.1.1 2002-10-20 Fixed octal bug in the PHP translation; the number of
- minutes & seconds were misinterpreted when less than 10
- 2.1.2 2003-08-07 The previous fix had introduced a bug when the
- minutes or seconds were exactly 0. Thanks to Man Bui
- for reporting the bug.
-*/
-var clockIncrementMillis = 1000;
-var localTime;
-var clockOffset;
-var clockExpirationLocal;
-var clockShowsSeconds = true;
-var clockTimerID = null;
-
-function clockInit(localDateObject, serverDateObject)
-{
- var origRemoteClock = parseInt(clockGetCookieData("remoteClock"));
- var origLocalClock = parseInt(clockGetCookieData("localClock"));
- var newRemoteClock = serverDateObject.getTime();
- // May be stale (WinIE); will check against cookie later
- // Can't use the millisec. ctor here because of client inconsistencies.
- var newLocalClock = localDateObject.getTime();
- var maxClockAge = 60 * 60 * 1000; // get new time from server every 1hr
-
- if (newRemoteClock != origRemoteClock) {
- // new clocks are up-to-date (newer than any cookies)
- document.cookie = "remoteClock=" + newRemoteClock;
- document.cookie = "localClock=" + newLocalClock;
- clockOffset = newRemoteClock - newLocalClock;
- clockExpirationLocal = newLocalClock + maxClockAge;
- localTime = newLocalClock; // to keep clockUpdate() happy
- } else if (origLocalClock != origLocalClock) {
- // error; localClock cookie is invalid (parsed as NaN)
- clockOffset = null;
- clockExpirationLocal = null;
- } else {
- // fall back to clocks in cookies
- clockOffset = origRemoteClock - origLocalClock;
- clockExpirationLocal = origLocalClock + maxClockAge;
- localTime = origLocalClock;
- // so clockUpdate() will reload if newLocalClock
- // is earlier (clock was reset)
- }
- /* Reload page at server midnight to display the new date,
- by expiring the clock then */
- var nextDayLocal = (new Date(serverDateObject.getFullYear(),
- serverDateObject.getMonth(),
- serverDateObject.getDate() + 1)).getTime() - clockOffset;
- if (nextDayLocal < clockExpirationLocal) {
- clockExpirationLocal = nextDayLocal;
- }
-}
-
-function clockOnLoad()
-{
- clockUpdate();
-}
-
-function clockOnUnload() {
- clockClearTimeout();
-}
-
-function clockClearTimeout() {
- if (clockTimerID) {
- clearTimeout(clockTimerID);
- clockTimerID = null;
- }
-}
-
-function clockToggleSeconds()
-{
- clockClearTimeout();
- if (clockShowsSeconds) {
- clockShowsSeconds = false;
- clockIncrementMillis = 60000;
- } else {
- clockShowsSeconds = true;
- clockIncrementMillis = 1000;
- }
- clockUpdate();
-}
-
-function clockTimeString(inHours, inMinutes, inSeconds) {
- return inHours
- + (inMinutes < 10 ? ":0" : ":") + inMinutes
- + (inSeconds < 10 ? ":0" : ":") + inSeconds;
-}
-
-function clockDisplayTime(inHours, inMinutes, inSeconds) {
- clockWriteToDiv("ClockTime", clockTimeString(inHours, inMinutes, inSeconds));
-}
-
-function clockWriteToDiv(divName, newValue) // APS 6/29/00
-{
- var divObject = simpleFindObj(divName);
- newValue = '<b>' + newValue + '<' + '/b>';
- if (divObject && divObject.innerHTML) {
- divObject.innerHTML = newValue;
- } else if (divObject && divObject.document) {
- divObject.document.writeln(newValue);
- divObject.document.close();
- }
- // else divObject wasn't found; it's only a clock, so don't bother complaining
-}
-
-function clockGetCookieData(label) {
- /* find the value of the specified cookie in the document's
- semicolon-delimited collection. For IE Win98 compatibility, search
- from the end of the string (to find most specific host/path) and
- don't require "=" between cookie name & empty cookie values. Returns
- null if cookie not found. One remaining problem: Under IE 5 [Win98],
- setting a cookie with no equals sign creates a cookie with no name,
- just data, which is indistinguishable from a cookie with that name
- but no data but can't be overwritten by any cookie with an equals
- sign. */
- var c = document.cookie;
- if (c) {
- var labelLen = label.length, cEnd = c.length;
- while (cEnd > 0) {
- var cStart = c.lastIndexOf(';',cEnd-1) + 1;
- /* bug fix to Danny Goodman's code: calculate cEnd, to
- prevent walking the string char-by-char & finding cookie
- labels that contained the desired label as suffixes */
- // skip leading spaces
- while (cStart < cEnd && c.charAt(cStart)==" ") {
- cStart++;
- }
- if (cStart + labelLen <= cEnd && c.substr(cStart,labelLen) == label) {
- if (cStart + labelLen == cEnd) {
- return ""; // empty cookie value, no "="
- } else if (c.charAt(cStart+labelLen) == "=") {
- // has "=" after label
- return unescape(c.substring(cStart + labelLen + 1,cEnd));
- }
- }
- cEnd = cStart - 1; // skip semicolon
- }
- }
- return null;
-}
-
-/* Called regularly to update the clock display as well as onLoad (user
- may have clicked the Back button to arrive here, so the clock would need
- an immediate update) */
-function clockUpdate()
-{
- var lastLocalTime = localTime;
- localTime = (new Date()).getTime();
-
- /* Sanity-check the diff. in local time between successive calls;
- reload if user has reset system clock */
- if (clockOffset == null) {
- clockDisplayTime(null, null, null);
- } else if (localTime < lastLocalTime || clockExpirationLocal < localTime) {
- /* Clock expired, or time appeared to go backward (user reset
- the clock). Reset cookies to prevent infinite reload loop if
- server doesn't give a new time. */
- document.cookie = 'remoteClock=-';
- document.cookie = 'localClock=-';
- location.reload(); // will refresh time values in cookies
- } else {
- // Compute what time would be on server
- var serverTime = new Date(localTime + clockOffset);
- clockDisplayTime(serverTime.getHours(), serverTime.getMinutes(),
- serverTime.getSeconds());
-
- // Reschedule this func to run on next even clockIncrementMillis boundary
- clockTimerID = setTimeout("clockUpdate()",
- clockIncrementMillis - (serverTime.getTime() % clockIncrementMillis));
- }
-}
-
-/*** End of Clock ***/
-window.onload=clockInit(clockLocalStartTime, clockServerStartTime);clockOnLoad();
-window.onunload=clockOnUnload()
-clockUpdate();
-//]]>
-</script>
-
-
-<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="clock">
- <tbody>
- <tr>
- <td width="40%" class="vncellt">Server Time</td>
- <td width="60%" class="listr">
- <div id="ClockTime">
- <b><?php echo(clockTimeString($gDate,$gClockShowsSeconds));?></b>
- </div>
- </td>
- </tr>
- </tbody>
-</table>
-
-<div id='ntpstatus'>
-<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="clock">
- <tbody>
- <tr>
- <td width="100%" class="listr">
- Updating...
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-
-<script type="text/javascript">
-//<![CDATA[
- function ntp_getstatus() {
- scroll(0,0);
- var url = "/widgets/widgets/ntp_status.widget.php";
- var pars = 'updateme=yes';
- jQuery.ajax(
- url,
- {
- type: 'get',
- data: pars,
- complete: ntpstatuscallback
- });
- // Refresh the status every 1 minute
- setTimeout('ntp_getstatus()', 1*60*1000);
- }
- function ntpstatuscallback(transport) {
- // The server returns formatted html code
- var responseStringNtp = transport.responseText
- jQuery('#ntpstatus').prop('innerHTML',responseStringNtp);
- }
- // Do the first status check 1 second after the dashboard opens
- setTimeout('ntp_getstatus()', 1000);
-//]]>
-</script>
diff --git a/usr/local/www/widgets/widgets/openvpn.widget.php b/usr/local/www/widgets/widgets/openvpn.widget.php
deleted file mode 100644
index 6f813c5..0000000
--- a/usr/local/www/widgets/widgets/openvpn.widget.php
+++ /dev/null
@@ -1,290 +0,0 @@
-<?php
-
-/*
- openvpn.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Part of pfSense widgets (https://www.pfsense.org)
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("openvpn.inc");
-
-/* Handle AJAX */
-if ($_GET['action']) {
- if ($_GET['action'] == "kill") {
- $port = $_GET['port'];
- $remipp = $_GET['remipp'];
- if (!empty($port) and !empty($remipp)) {
- $retval = kill_client($port, $remipp);
- echo htmlentities("|{$port}|{$remipp}|{$retval}|");
- } else {
- echo gettext("invalid input");
- }
- exit;
- }
-}
-
-
-function kill_client($port, $remipp) {
- global $g;
-
- //$tcpsrv = "tcp://127.0.0.1:{$port}";
- $tcpsrv = "unix://{$g['varetc_path']}/openvpn/{$port}.sock";
- $errval;
- $errstr;
-
- /* open a tcp connection to the management port of each server */
- $fp = @stream_socket_client($tcpsrv, $errval, $errstr, 1);
- $killed = -1;
- if ($fp) {
- stream_set_timeout($fp, 1);
- fputs($fp, "kill {$remipp}\n");
- while (!feof($fp)) {
- $line = fgets($fp, 1024);
-
- $info = stream_get_meta_data($fp);
- if ($info['timed_out']) {
- break;
- }
-
- /* parse header list line */
- if (strpos($line, "INFO:") !== false) {
- continue;
- }
- if (strpos($line, "SUCCESS") !== false) {
- $killed = 0;
- }
- break;
- }
- fclose($fp);
- }
- return $killed;
-}
-
-$servers = openvpn_get_active_servers();
-$sk_servers = openvpn_get_active_servers("p2p");
-$clients = openvpn_get_active_clients();
-?>
-
-<br />
-<script type="text/javascript">
-//<![CDATA[
- function killClient(mport, remipp) {
- var busy = function(index,icon) {
- jQuery(icon).bind("onclick","");
- jQuery(icon).attr('src',jQuery(icon).attr('src').replace("\.gif", "_d.gif"));
- jQuery(icon).css("cursor","wait");
- }
-
- jQuery('img[name="i:' + mport + ":" + remipp + '"]').each(busy);
-
- jQuery.ajax(
- "<?=$_SERVER['SCRIPT_NAME'];?>" +
- "?action=kill&port=" + mport + "&remipp=" + remipp,
- { type: "get", complete: killComplete }
- );
- }
-
- function killComplete(req) {
- var values = req.responseText.split("|");
- if (values[3] != "0") {
- alert('<?=gettext("An error occurred.");?>' + ' (' + values[3] + ')');
- return;
- }
-
- jQuery('tr[name="r:' + values[1] + ":" + values[2] + '"]').each(
- function(index,row) { jQuery(row).fadeOut(1000); }
- );
- }
-//]]>
-</script>
-
-<?php foreach ($servers as $server): ?>
-
-<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td colspan="6" class="listtopic">
- <?=$server['name'];?> Client connections
- </td>
- </tr>
- <tr>
- <td>
- <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" sortableMultirow="2">
- <tr>
- <td class="listhdrr">Name/Time</td>
- <td class="listhdrr">Real/Virtual IP</td>
- </tr>
- <?php
- $rowIndex = 0;
- foreach ($server['conns'] as $conn):
- $evenRowClass = $rowIndex % 2 ? " listMReven" : " listMRodd";
- $rowIndex++;
- ?>
- <tr name='<?php echo "r:{$server['mgmt']}:{$conn['remote_host']}"; ?>' class="<?=$evenRowClass?>">
- <td class="listMRlr">
- <?=$conn['common_name'];?>
- </td>
- <td class="listMRr">
- <?=$conn['remote_host'];?>
- </td>
- <td class='listMR' rowspan="2">
- <img src='/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif' height='17' width='17' border='0'
- onclick="killClient('<?php echo $server['mgmt']; ?>', '<?php echo $conn['remote_host']; ?>');" style='cursor:pointer;'
- name='<?php echo "i:{$server['mgmt']}:{$conn['remote_host']}"; ?>'
- title='Kill client connection from <?php echo $conn['remote_host']; ?>' alt='' />
- </td>
- </tr>
- <tr name='<?php echo "r:{$server['mgmt']}:{$conn['remote_host']}"; ?>' class="<?=$evenRowClass?>">
- <td class="listMRlr">
- <?=$conn['connect_time'];?>
- </td>
- <td class="listMRr">
- <?=$conn['virtual_addr'];?>
- </td>
- </tr>
-
- <?php endforeach; ?>
- <tfoot>
- <tr>
- <td colspan="6" class="list" height="12"></td>
- </tr>
- </tfoot>
- </table>
- </td>
- </tr>
-</table>
-
-<?php endforeach; ?>
-<?php if (!empty($sk_servers)) { ?>
-<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td colspan="6" class="listtopic">
- Peer to Peer Server Instance Statistics
- </td>
- </tr>
- <tr>
- <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td class="listhdrr">Name/Time</td>
- <td class="listhdrr">Remote/Virtual IP</td>
- </tr>
-
-<?php foreach ($sk_servers as $sk_server): ?>
- <tr name='<?php echo "r:{$sk_server['port']}:{$sk_server['remote_host']}"; ?>'>
- <td class="listlr">
- <?=$sk_server['name'];?>
- </td>
- <td class="listr">
- <?=$sk_server['remote_host'];?>
- </td>
- <td rowspan="2" align="center">
- <?php
- if ($sk_server['status'] == "up") {
- /* tunnel is up */
- $iconfn = "interface_up";
- } else {
- /* tunnel is down */
- $iconfn = "interface_down";
- }
- echo "<img src ='/themes/{$g['theme']}/images/icons/icon_{$iconfn}.gif' alt='' />";
- ?>
- </td>
- </tr>
- <tr name='<?php echo "r:{$sk_server['port']}:{$sk_server['remote_host']}"; ?>'>
- <td class="listlr">
- <?=$sk_server['connect_time'];?>
- </td>
- <td class="listr">
- <?=$sk_server['virtual_addr'];?>
- </td>
- </tr>
-<?php endforeach; ?>
- </table>
- </tr>
-</table>
-
-<?php
-} ?>
-<?php if (!empty($clients)) { ?>
-<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td colspan="6" class="listtopic">
- Client Instance Statistics
- </td>
- </tr>
- <tr>
- <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td class="listhdrr">Name/Time</td>
- <td class="listhdrr">Remote/Virtual IP</td>
- </tr>
-
- <?php foreach ($clients as $client): ?>
- <tr name='<?php echo "r:{$client['port']}:{$client['remote_host']}"; ?>'>
- <td class="listlr">
- <?=$client['name'];?>
- </td>
- <td class="listr">
- <?=$client['remote_host'];?>
- </td>
- <td rowspan="2" align="center">
- <?php
- if ($client['status'] == "up") {
- /* tunnel is up */
- $iconfn = "interface_up";
- } else {
- /* tunnel is down */
- $iconfn = "interface_down";
- }
- echo "<img src ='/themes/{$g['theme']}/images/icons/icon_{$iconfn}.gif' alt='' />";
- ?>
- </td>
- </tr>
- <tr name='<?php echo "r:{$client['port']}:{$client['remote_host']}"; ?>'>
- <td class="listlr">
- <?=$client['connect_time'];?>
- </td>
- <td class="listr">
- <?=$client['virtual_addr'];?>
- </td>
- </tr>
- <?php endforeach; ?>
- </table>
- </tr>
-</table>
-
-<?php
-}
-
-if ($DisplayNote) {
- echo "<br /><b>NOTE:</b> You need to bind each OpenVPN client to enable its management daemon: use 'Local port' setting in the OpenVPN client screen";
-}
-
-if ((empty($clients)) && (empty($servers)) && (empty($sk_servers))) {
- echo "No OpenVPN instances defined";
-}
-?>
diff --git a/usr/local/www/widgets/widgets/picture.widget.php b/usr/local/www/widgets/widgets/picture.widget.php
deleted file mode 100644
index 02a002a..0000000
--- a/usr/local/www/widgets/widgets/picture.widget.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-/*
- picture.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright 2009 Scott Ullrich
- Part of pfSense widgets (https://www.pfsense.org)
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-
-if ($_GET['getpic']=="true") {
- $pic_type_s = explode(".", $config['widgets']['picturewidget_filename']);
- $pic_type = $pic_type_s[1];
- if ($config['widgets']['picturewidget']) {
- $data = base64_decode($config['widgets']['picturewidget']);
- }
- header("Content-Disposition: inline; filename=\"{$config['widgets']['picturewidget_filename']}\"");
- header("Content-Type: image/{$pic_type}");
- header("Content-Length: " . strlen($data));
- echo $data;
- exit;
-}
-
-if ($_POST) {
- if (is_uploaded_file($_FILES['pictfile']['tmp_name'])) {
- /* read the file contents */
- $fd_pic = fopen($_FILES['pictfile']['tmp_name'], "rb");
- while (($buf=fread($fd_pic, 8192)) != '') {
- // Here, $buf is guaranteed to contain data
- $data .= $buf;
- }
- fclose($fd_pic);
- if (!$data) {
- log_error("Warning, could not read file " . $_FILES['pictfile']['tmp_name']);
- die("Could not read temporary file");
- } else {
- $picname = basename($_FILES['uploadedfile']['name']);
- $config['widgets']['picturewidget'] = base64_encode($data);
- $config['widgets']['picturewidget_filename'] = $_FILES['pictfile']['name'];
- write_config("Picture widget saved via Dashboard.");
- header("Location: /index.php");
- exit;
- }
- }
-}
-
-?>
-
-<input type="hidden" id="picture-config" name="picture-config" value="" />
-
-<div id="picture-settings" class="widgetconfigdiv" style="display:none;">
- <form action="/widgets/widgets/picture.widget.php" method="post" name="picture_widget_iform" enctype="multipart/form-data">
- <input name="pictfile" type="file" class="formbtn" id="pictfile" size="20" />
- <input id="picture_widget_submit" name="picture_widget_submit" type="submit" class="formbtn" value="Upload" />
- </form>
-</div>
-
-<div id="picture-widgets" style="padding: 5px">
- <a href='/widgets/widgets/picture.widget.php?getpic=true' target='_blank'>
- <img border="0" width="100%" height="100%" src="/widgets/widgets/picture.widget.php?getpic=true" alt="picture" />
- </a>
-</div>
-
-<!-- needed to show the settings widget icon -->
-<script type="text/javascript">
-//<![CDATA[
- selectIntLink = "picture-configure";
- textlink = document.getElementById(selectIntLink);
- textlink.style.display = "inline";
-//]]>
-</script>
diff --git a/usr/local/www/widgets/widgets/rss.widget.php b/usr/local/www/widgets/widgets/rss.widget.php
deleted file mode 100644
index 0850039..0000000
--- a/usr/local/www/widgets/widgets/rss.widget.php
+++ /dev/null
@@ -1,198 +0,0 @@
-<?php
-/*
- rss.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Copyright 2009 Scott Ullrich
- Part of pfSense widgets (https://www.pfsense.org)
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-
-if ($_POST['rssfeed']) {
- $config['widgets']['rssfeed'] = str_replace("\n", ",", htmlspecialchars($_POST['rssfeed'], ENT_QUOTES | ENT_HTML401));
- $config['widgets']['rssmaxitems'] = str_replace("\n", ",", htmlspecialchars($_POST['rssmaxitems'], ENT_QUOTES | ENT_HTML401));
- $config['widgets']['rsswidgetheight'] = htmlspecialchars($_POST['rsswidgetheight'], ENT_QUOTES | ENT_HTML401);
- $config['widgets']['rsswidgettextlength'] = htmlspecialchars($_POST['rsswidgettextlength'], ENT_QUOTES | ENT_HTML401);
- write_config("Saved RSS Widget feed via Dashboard");
- header("Location: /");
-}
-
-// Use saved feed and max items
-if ($config['widgets']['rssfeed']) {
- $rss_feed_s = explode(",", $config['widgets']['rssfeed']);
-}
-
-if ($config['widgets']['rssmaxitems']) {
- $max_items = $config['widgets']['rssmaxitems'];
-}
-
-if (is_numeric($config['widgets']['rsswidgetheight'])) {
- $rsswidgetheight = $config['widgets']['rsswidgetheight'];
-}
-
-if (is_numeric($config['widgets']['rsswidgettextlength'])) {
- $rsswidgettextlength = $config['widgets']['rsswidgettextlength'];
-}
-
-// Set a default feed if none exists
-if (!$rss_feed_s) {
- $rss_feed_s = "https://blog.pfsense.org";
- $config['widgets']['rssfeed'] = "https://blog.pfsense.org";
-}
-
-if (!$max_items) {
- $max_items = 10;
-}
-
-if (!$rsswidgetheight) {
- $rsswidgetheight = 300;
-}
-
-if (!$rsswidgettextlength) {
- $rsswidgettextlength = 140; // oh twitter, how do we love thee?
-}
-
-if ($config['widgets']['rssfeed']) {
- $textarea_txt = str_replace(",", "\n", $config['widgets']['rssfeed']);
-} else {
- $textarea_txt = "";
-}
-
-?>
-
-<input type="hidden" id="rss-config" name="rss-config" value="" />
-
-<div id="rss-settings" class="widgetconfigdiv" style="display:none;">
- <form action="/widgets/widgets/rss.widget.php" method="post" name="rss_widget_iform">
- <textarea name="rssfeed" class="formfld unknown textarea_widget" id="rssfeed" cols="40" rows="3"><?=$textarea_txt;?></textarea>
- <br />
- <table summary="rss widget">
- <tr>
- <td align="right">
- Display number of items:
- </td>
- <td>
- <select name='rssmaxitems' id='rssmaxitems'>
- <option value='<?= $max_items ?>'><?= $max_items ?></option>
- <?php
- for ($x=100; $x<5100; $x=$x+100) {
- echo "<option value='{$x}'>{$x}</option>\n";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td align="right">
- Widget height:
- </td>
- <td>
- <select name='rsswidgetheight' id='rsswidgetheight'>
- <option value='<?= $rsswidgetheight ?>'><?= $rsswidgetheight ?>px</option>
- <?php
- for ($x=100; $x<5100; $x=$x+100) {
- echo "<option value='{$x}'>{$x}px</option>\n";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td align="right">
- Show how many characters from story:
- </td>
- <td>
- <select name='rsswidgettextlength' id='rsswidgettextlength'>
- <option value='<?= $rsswidgettextlength ?>'><?= $rsswidgettextlength ?></option>
- <?php
- for ($x=10; $x<5100; $x=$x+10) {
- echo "<option value='{$x}'>{$x}</option>\n";
- }
- ?>
- </select>
- </td>
- </tr>
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
- <input id="rss_widget_submit" name="rss_widget_submit" type="submit" class="formbtn" value="Save" />
- </td>
- </tr>
- </table>
- </form>
-</div>
-
-<div id="rss-widgets" style="padding: 5px; height: <?=$rsswidgetheight?>px; overflow:scroll;">
-<?php
- if (!is_dir("/tmp/simplepie")) {
- mkdir("/tmp/simplepie");
- mkdir("/tmp/simplepie/cache");
- }
- exec("chmod a+rw /tmp/simplepie/.");
- exec("chmod a+rw /tmp/simplepie/cache/.");
- require_once("simplepie/simplepie.inc");
- function textLimit($string, $length, $replacer = '...') {
- if (strlen($string) > $length) {
- return (preg_match('/^(.*)\W.*$/', substr($string, 0, $length+1), $matches) ? $matches[1] : substr($string, 0, $length)) . $replacer;
- }
- return $string;
- }
- $feed = new SimplePie();
- $feed->set_cache_location("/tmp/simplepie/");
- $feed->set_feed_url($rss_feed_s);
- $feed->init();
- $feed->handle_content_type();
- $counter = 1;
- foreach ($feed->get_items() as $item) {
- $feed = $item->get_feed();
- $feed->strip_htmltags();
- echo "<a target='blank' href='" . $item->get_permalink() . "'>" . $item->get_title() . "</a><br />";
- $content = $item->get_content();
- $content = strip_tags($content);
- echo textLimit($content, $rsswidgettextlength) . "<br />";
- echo "Source: <a target='_blank' href='" . $item->get_permalink() . "'><img src='" . $feed->get_favicon() . "' alt='" . $feed->get_title() . "' title='" . $feed->get_title() . "' border='0' width='16' height='16' /></a><br />";
- $counter++;
- if ($counter > $max_items) {
- break;
- }
- echo "<hr/>";
- }
-?>
-</div>
-
-<!-- needed to display the widget settings menu -->
-<script type="text/javascript">
-//<![CDATA[
- selectIntLink = "rss-configure";
- textlink = document.getElementById(selectIntLink);
- textlink.style.display = "inline";
-//]]>
-</script>
diff --git a/usr/local/www/widgets/widgets/services_status.widget.php b/usr/local/www/widgets/widgets/services_status.widget.php
deleted file mode 100644
index f4c3542..0000000
--- a/usr/local/www/widgets/widgets/services_status.widget.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-/*
- services_status.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Copyright (C) 2004, 2005 Scott Ullrich
- All rights reserved.
-
- services_status.widget.php
- Copyright (C) 2007 Sam Wenham
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INClUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("captiveportal.inc");
-require_once("service-utils.inc");
-require_once("ipsec.inc");
-require_once("vpn.inc");
-require_once("/usr/local/www/widgets/include/services_status.inc");
-
-$services = get_services();
-
-if (isset($_POST['servicestatusfilter'])) {
- $config['widgets']['servicestatusfilter'] = htmlspecialchars($_POST['servicestatusfilter'], ENT_QUOTES | ENT_HTML401);
- write_config("Saved Service Status Filter via Dashboard");
- header("Location: ../../index.php");
-}
-?>
-<input type="hidden" id="services_status-config" name="services_status-config" value="" />
-<div id="services_status-settings" class="widgetconfigdiv" style="display:none;">
- <form action="/widgets/widgets/services_status.widget.php" method="post" name="services_status_widget_iform">
- Comma separated list of services to NOT display in the widget<br />
- <input type="text" size="30" name="servicestatusfilter" class="formfld unknown" id="servicestatusfilter" value="<?= $config['widgets']['servicestatusfilter'] ?>" />
- <input id="services_status_widget_submit" name="services_status_widget_submit" type="submit" class="formbtn" value="Save" />
- </form>
-</div>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="services">
- <tr>
- <td class="widgetsubheader" align="center"><b>Service</b></td>
- <td class="widgetsubheader" align="center"><b>Description</b></td>
- <td class="widgetsubheader" align="center"><b>Status</b></td>
- <td class="widgetsubheader">&nbsp;</td>
- </tr>
-<?php
-$skipservices = explode(",", $config['widgets']['servicestatusfilter']);
-
-if (count($services) > 0) {
- uasort($services, "service_name_compare");
- foreach ($services as $service) {
- if ((!$service['name']) || (in_array($service['name'], $skipservices)) || (!is_service_enabled($service['name']))) {
- continue;
- }
- if (empty($service['description'])) {
- $service['description'] = get_pkg_descr($service['name']);
- }
- $service_desc = explode(".",$service['description']);
- echo "<tr><td class=\"listlr\">" . $service['name'] . "</td>\n";
- echo "<td class=\"listr\">" . $service_desc[0] . "</td>\n";
- // if service is running then listr else listbg
- $bgclass = null;
- if (get_service_status($service)) {
- $bgclass = "listr";
- } else {
- $bgclass = "listbg";
- }
- echo "<td class=\"" . $bgclass . "\" align=\"center\">" . get_service_status_icon($service, false, true) . "</td>\n";
- echo "<td valign=\"middle\" class=\"list nowrap\">" . get_service_control_links($service) . "</td></tr>\n";
- }
-} else {
- echo "<tr><td colspan=\"3\" align=\"center\">" . gettext("No services found") . " . </td></tr>\n";
-}
-?>
-</table>
-
-<!-- needed to display the widget settings menu -->
-<script type="text/javascript">
-//<![CDATA[
- selectIntLink = "services_status-configure";
- textlink = document.getElementById(selectIntLink);
- textlink.style.display = "inline";
-//]]>
-</script>
diff --git a/usr/local/www/widgets/widgets/smart_status.widget.php b/usr/local/www/widgets/widgets/smart_status.widget.php
deleted file mode 100644
index 87f0605..0000000
--- a/usr/local/www/widgets/widgets/smart_status.widget.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-/*
- smart_status.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright 2012 mkirbst @ pfSense Forum
- Part of pfSense widgets (https://www.pfsense.org)
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-require_once("/usr/local/www/widgets/include/smart_status.inc");
-?>
-
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="smart status">
- <tr>
- <td class="widgetsubheader" align="center"><b><?php echo gettext("Drive") ?></b></td>
- <td class="widgetsubheader" align="center"><b><?php echo gettext("Ident") ?></b></td>
- <td class="widgetsubheader" align="center"><b><?php echo gettext("SMART Status") ?></b></td>
- </tr>
-
-<?php
-$devs = array();
-## Get all adX, daX, and adaX (IDE, SCSI, and AHCI) devices currently installed
-$devs = get_smart_drive_list();
-
-if (count($devs) > 0) {
- foreach ($devs as $dev) { ## for each found drive do
- $dev_ident = exec("diskinfo -v /dev/$dev | grep ident | awk '{print $1}'"); ## get identifier from drive
- $dev_state = trim(exec("smartctl -H /dev/$dev | awk -F: '/^SMART overall-health self-assessment test result/ {print $2;exit}
-/^SMART Health Status/ {print $2;exit}'")); ## get SMART state from drive
- switch ($dev_state) {
- case "PASSED":
- case "OK":
- $color = "#90EE90";
- break;
- case "":
- $dev_state = "Unknown";
- $color = "#C0B788";
- break;
- default:
- $color = "#F08080";
- break;
- }
-?>
- <tr>
- <td class="listlr"><?php echo $dev; ?></td>
- <td class="listr" align="center"><?php echo $dev_ident; ?></td>
- <td class="listr" align="center"><span style="background-color:<?php echo $color; ?>">&nbsp;<?php echo $dev_state; ?>&nbsp;</span></td>
- </tr>
-<?php }
-}
-?>
-</table>
diff --git a/usr/local/www/widgets/widgets/system_information.widget.php b/usr/local/www/widgets/widgets/system_information.widget.php
deleted file mode 100644
index 231f2ee..0000000
--- a/usr/local/www/widgets/widgets/system_information.widget.php
+++ /dev/null
@@ -1,322 +0,0 @@
-<?php
-/*
- system_information.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright 2007 Scott Dale
- Part of pfSense widgets (https://www.pfsense.org)
- originally based on m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
- and Jonathan Watt <jwatt@jwatt.org>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-require_once("functions.inc");
-require_once("guiconfig.inc");
-require_once('notices.inc');
-include_once("includes/functions.inc.php");
-
-if ($_REQUEST['getupdatestatus']) {
- if (isset($config['system']['firmware']['disablecheck'])) {
- exit;
- }
- if (isset($config['system']['firmware']['alturl']['enable'])) {
- $updater_url = "{$config['system']['firmware']['alturl']['firmwareurl']}";
- } else {
- $updater_url = $g['update_url'];
- }
-
- $nanosize = "";
- if ($g['platform'] == "nanobsd") {
- if (file_exists("/etc/nano_use_vga.txt")) {
- $nanosize = "-nanobsd-vga-";
- } else {
- $nanosize = "-nanobsd-";
- }
- $nanosize .= strtolower(trim(file_get_contents("/etc/nanosize.txt")));
- }
-
- @unlink("/tmp/{$g['product_name']}_version");
- if (download_file_with_progress_bar("{$updater_url}/version{$nanosize}", "/tmp/{$g['product_name']}_version", 'read_body', 5, 5) === true) {
- $remote_version = trim(@file_get_contents("/tmp/{$g['product_name']}_version"));
- }
-
- if (empty($remote_version)) {
- echo "<br /><br />Unable to check for updates.";
- } else {
- $current_installed_buildtime = trim(file_get_contents("/etc/version.buildtime"));
-
- if (!$remote_version) {
- echo "<br /><br />Unable to check for updates.";
- } else {
- $needs_system_upgrade = false;
- if (pfs_version_compare($current_installed_buildtime, $g['product_version'], $remote_version) == -1) {
- echo "<br /><span class=\"red\" id=\"updatealert\"><b>Update available. </b></span><a href=\"/system_firmware_check.php\">Click Here</a> to view update.";
- echo "\n<script type=\"text/javascript\">\n";
- echo "//<![CDATA[\n";
- echo "jQuery('#updatealert').effect('pulsate',{times: 30},10000);\n";
- echo "//]]>\n";
- echo "</script>\n";
- } else {
- echo "<br />You are on the latest version.";
- }
- }
- }
- exit;
-}
-
-$curcfg = $config['system']['firmware'];
-
-$filesystems = get_mounted_filesystems();
-
-?>
-<script type="text/javascript">
-//<![CDATA[
- jQuery(function() {
- jQuery("#statePB").progressbar( { value: <?php echo get_pfstate(true); ?> } );
- jQuery("#mbufPB").progressbar( { value: <?php echo get_mbuf(true); ?> } );
- jQuery("#cpuPB").progressbar( { value:false } );
- jQuery("#memUsagePB").progressbar( { value: <?php echo mem_usage(); ?> } );
-
-<?PHP $d = 0; ?>
-<?PHP foreach ($filesystems as $fs): ?>
- jQuery("#diskUsagePB<?php echo $d++; ?>").progressbar( { value: <?php echo $fs['percent_used']; ?> } );
-<?PHP endforeach; ?>
-
- <?php if ($showswap == true): ?>
- jQuery("#swapUsagePB").progressbar( { value: <?php echo swap_usage(); ?> } );
- <?php endif; ?>
- <?php if (get_temp() != ""): ?>
- jQuery("#tempPB").progressbar( { value: <?php echo get_temp(); ?> } );
- <?php endif; ?>
- });
-//]]>
-</script>
-
-<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="system information">
- <tbody>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("Name");?></td>
- <td width="75%" class="listr"><?php echo $config['system']['hostname'] . "." . $config['system']['domain']; ?></td>
- </tr>
- <tr>
- <td width="25%" valign="top" class="vncellt"><?=gettext("Version");?></td>
- <td width="75%" class="listr">
- <strong><?=$g['product_version']?></strong>
- (<?php echo php_uname("m"); ?>)
- <br />
- built on <?php readfile("/etc/version.buildtime"); ?>
- <?php if (!$g['hideuname']): ?>
- <br />
- <div id="uname"><a href="#" onclick='swapuname(); return false;'><?php echo php_uname("s") . " " . php_uname("r"); ?></a></div>
- <?php endif; ?>
- <?php if (!isset($config['system']['firmware']['disablecheck'])): ?>
- <div id='updatestatus'><br /><?php echo gettext("Obtaining update status"); ?> ...</div>
- <?php endif; ?>
- </td>
- </tr>
- <?php if (!$g['hideplatform']): ?>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("Platform");?></td>
- <td width="75%" class="listr">
- <?=htmlspecialchars($g['platform']);?>
- <?php if (($g['platform'] == "nanobsd") && (file_exists("/etc/nanosize.txt"))) {
- echo " (" . htmlspecialchars(trim(file_get_contents("/etc/nanosize.txt"))) . ")";
- } ?>
- </td>
- </tr>
- <?php endif; ?>
- <?php if ($g['platform'] == "nanobsd"): ?>
- <?
- global $SLICE, $OLDSLICE, $TOFLASH, $COMPLETE_PATH, $COMPLETE_BOOT_PATH;
- global $GLABEL_SLICE, $UFS_ID, $OLD_UFS_ID, $BOOTFLASH;
- global $BOOT_DEVICE, $REAL_BOOT_DEVICE, $BOOT_DRIVE, $ACTIVE_SLICE;
- nanobsd_detect_slice_info();
- $rw = is_writable("/") ? "(rw)" : "(ro)";
- ?>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("NanoBSD Boot Slice");?></td>
- <td width="75%" class="listr">
- <?=htmlspecialchars(nanobsd_friendly_slice_name($BOOT_DEVICE));?> / <?=htmlspecialchars($BOOTFLASH);?> <?php echo $rw; ?>
- <?php if ($BOOTFLASH != $ACTIVE_SLICE): ?>
- <br /><br />Next Boot:<br />
- <?=htmlspecialchars(nanobsd_friendly_slice_name($GLABEL_SLICE));?> / <?=htmlspecialchars($ACTIVE_SLICE);?>
- <?php endif; ?>
- </td>
- </tr>
- <?php endif; ?>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("CPU Type");?></td>
- <td width="75%" class="listr">
- <?php
- echo (htmlspecialchars(get_single_sysctl("hw.model")));
- ?>
- <div id="cpufreq"><?= get_cpufreq(); ?></div>
- <?php
- $cpucount = get_cpu_count();
- if ($cpucount > 1): ?>
- <div id="cpucount">
- <?= htmlspecialchars($cpucount) ?> CPUs: <?= htmlspecialchars(get_cpu_count(true)); ?></div>
- <?php endif; ?>
- </td>
- </tr>
- <?php if ($hwcrypto): ?>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("Hardware crypto");?></td>
- <td width="75%" class="listr"><?=htmlspecialchars($hwcrypto);?></td>
- </tr>
- <?php endif; ?>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("Uptime");?></td>
- <td width="75%" class="listr" id="uptime"><?= htmlspecialchars(get_uptime()); ?></td>
- </tr>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("Current date/time");?></td>
- <td width="75%" class="listr">
- <div id="datetime"><?= date("D M j G:i:s T Y"); ?></div>
- </td>
- </tr>
- <tr>
- <td width="30%" class="vncellt"><?=gettext("DNS server(s)");?></td>
- <td width="70%" class="listr">
- <?php
- $dns_servers = get_dns_servers();
- foreach ($dns_servers as $dns) {
- echo "{$dns}<br />";
- }
- ?>
- </td>
- </tr>
- <?php if ($config['revision']): ?>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("Last config change");?></td>
- <td width="75%" class="listr"><?= htmlspecialchars(date("D M j G:i:s T Y", intval($config['revision']['time'])));?></td>
- </tr>
- <?php endif; ?>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("State table size");?></td>
- <td width="75%" class="listr">
- <?php
- $pfstatetext = get_pfstate();
- $pfstateusage = get_pfstate(true);
- ?>
- <div id="statePB"></div>
- <span id="pfstateusagemeter"><?= $pfstateusage.'%'; ?></span> (<span id="pfstate"><?= htmlspecialchars($pfstatetext); ?></span>)
- <br />
- <a href="diag_dump_states.php"><?=gettext("Show states");?></a>
- </td>
- </tr>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("MBUF Usage");?></td>
- <td width="75%" class="listr">
- <?php
- $mbufstext = get_mbuf();
- $mbufusage = get_mbuf(true);
- ?>
- <div id="mbufPB"></div>
- <span id="mbufusagemeter"><?= $mbufusage.'%'; ?></span> (<span id="mbuf"><?= $mbufstext ?></span>)
- </td>
- </tr>
- <?php if (get_temp() != ""): ?>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("Temperature");?></td>
- <td width="75%" class="listr">
- <?php $TempMeter = $temp = get_temp(); ?>
- <div id="tempPB"></div>
- <span id="tempmeter"><?= $temp."&#176;C"; ?></span>
- </td>
- </tr>
- <?php endif; ?>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("Load average");?></td>
- <td width="75%" class="listr">
- <div id="load_average" title="Last 1, 5 and 15 minutes"><?= get_load_average(); ?></div>
- </td>
- </tr>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("CPU usage");?></td>
- <td width="75%" class="listr">
- <div id="cpuPB"></div>
- <span id="cpumeter">(Updating in 10 seconds)</span>
- </td>
- </tr>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("Memory usage");?></td>
- <td width="75%" class="listr">
- <?php $memUsage = mem_usage(); ?>
- <div id="memUsagePB"></div>
- <span id="memusagemeter"><?= $memUsage.'%'; ?></span> of <?= sprintf("%.0f", get_single_sysctl('hw.physmem') / (1024*1024)) ?> MB
- </td>
- </tr>
- <?php if ($showswap == true): ?>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("SWAP usage");?></td>
- <td width="75%" class="listr">
- <?php $swapusage = swap_usage(); ?>
- <div id="swapUsagePB"></div>
- <span id="swapusagemeter"><?= $swapusage.'%'; ?></span> of <?= sprintf("%.0f", `/usr/sbin/swapinfo -m | /usr/bin/grep -v Device | /usr/bin/awk '{ print $2;}'`) ?> MB
- </td>
- </tr>
- <?php endif; ?>
- <tr>
- <td width="25%" class="vncellt"><?=gettext("Disk usage");?></td>
- <td width="75%" class="listr">
- <?php $d = 0; ?>
- <?php foreach ($filesystems as $fs): ?>
- <div id="diskUsagePB<?php echo $d; ?>"></div>
- <?php if (substr(basename($fs['device']), 0, 2) == "md") $fs['type'] .= " in RAM"; ?>
- <?php echo "{$fs['mountpoint']} ({$fs['type']})";?>: <span id="diskusagemeter<?php echo $d++ ?>"><?= $fs['percent_used'].'%'; ?></span> of <?PHP echo $fs['total_size'];?>
- <br />
- <?php endforeach; ?>
- </td>
- </tr>
- </tbody>
-</table>
-<script type="text/javascript">
-//<![CDATA[
- function swapuname() {
- jQuery('#uname').html("<?php echo php_uname("a"); ?>");
- }
- <?php if (!isset($config['system']['firmware']['disablecheck'])): ?>
- function getstatus() {
- scroll(0,0);
- var url = "/widgets/widgets/system_information.widget.php";
- var pars = 'getupdatestatus=yes';
- jQuery.ajax(
- url,
- {
- type: 'get',
- data: pars,
- complete: activitycallback
- });
- }
- function activitycallback(transport) {
- // .html() method process all script tags contained in responseText,
- // to avoid this we set the innerHTML property
- jQuery('#updatestatus').prop('innerHTML',transport.responseText);
- }
- setTimeout('getstatus()', 4000);
- <?php endif; ?>
-//]]>
-</script>
diff --git a/usr/local/www/widgets/widgets/thermal_sensors.widget.php b/usr/local/www/widgets/widgets/thermal_sensors.widget.php
deleted file mode 100644
index 0dac0cb..0000000
--- a/usr/local/www/widgets/widgets/thermal_sensors.widget.php
+++ /dev/null
@@ -1,279 +0,0 @@
-<?php
-/*
- $Id: thermal_sensors.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Description: Thermal Sensors Widget.
- NOTE: depends on proper config in System >> Advanced >> Miscellaneous tab >> Thermal Sensors section.
-
- File location:
- \usr\local\www\widgets\widgets\
- Depends on:
- \usr\local\www\widgets\javascript\thermal_sensors.js
- \usr\local\www\widgets\include\thermal_sensors.inc
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */
-
-require_once("guiconfig.inc");
-require_once("/usr/local/www/widgets/include/thermal_sensors.inc");
-
-//=========================================================================
-//called by showThermalSensorsData() (jQuery Ajax call) in thermal_sensors.js
-if (isset($_GET["getThermalSensorsData"])) {
- //get Thermal Sensors data and return
- echo getThermalSensorsData();
- return;
-}
-//=========================================================================
-
-
-const WIDGETS_CONFIG_SECTION_KEY = "widgets";
-const THERMAL_SENSORS_WIDGET_SUBSECTION_KEY = "thermal_sensors_widget";
-
-//default constants
-const DEFAULT_WARNING_THRESHOLD = 60; //60 C
-const DEFAULT_CRITICAL_THRESHOLD = 70; //70 C
-const MIN_THRESHOLD_VALUE = 1; //deg C
-const MAX_THRESHOLD_VALUE = 100; //deg C
-
-//NOTE: keys used in $_POST and $config should match text and checkbox inputs' IDs/names in HTML code section
-//=========================================================================
-//save widget config settings on POST
-if ($_POST) {
- saveThresholdSettings($config, $_POST, "thermal_sensors_widget_zone_warning_threshold", "thermal_sensors_widget_zone_critical_threshold");
- saveThresholdSettings($config, $_POST, "thermal_sensors_widget_core_warning_threshold", "thermal_sensors_widget_core_critical_threshold");
-
- //handle checkboxes separately
- saveGraphDisplaySettings($config, $_POST, "thermal_sensors_widget_show_raw_output");
- saveGraphDisplaySettings($config, $_POST, "thermal_sensors_widget_show_full_sensor_name");
- saveGraphDisplaySettings($config, $_POST, "thermal_sensors_widget_pulsate_warning");
- saveGraphDisplaySettings($config, $_POST, "thermal_sensors_widget_pulsate_critical");
-
- //write settings to config file
- write_config("Saved thermal_sensors_widget settings via Dashboard.");
- header("Location: ../../index.php");
-}
-
-function saveThresholdSettings(&$configArray, &$postArray, $warningValueKey, $criticalValueKey) {
- $warningValue = 0;
- $criticalValue = 0;
-
- if (isset($postArray[$warningValueKey])) {
- $warningValue = (int) $postArray[$warningValueKey];
- }
-
- if (isset($postArray[$criticalValueKey])) {
- $criticalValue = (int) $postArray[$criticalValueKey];
- }
-
- if (($warningValue >= MIN_THRESHOLD_VALUE && $warningValue <= MAX_THRESHOLD_VALUE) &&
- ($criticalValue >= MIN_THRESHOLD_VALUE && $criticalValue <= MAX_THRESHOLD_VALUE) &&
- ($warningValue < $criticalValue)) {
- //all validated ok, save to config array
- $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$warningValueKey] = $warningValue;
- $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$criticalValueKey] = $criticalValue;
- }
-}
-
-function saveGraphDisplaySettings(&$configArray, &$postArray, $valueKey) {
- $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey] = isset($postArray[$valueKey]) ? 1 : 0;
-}
-
-//=========================================================================
-//get Threshold settings from config (apply defaults if missing)
-$thermal_sensors_widget_zoneWarningTempThreshold = getThresholdValueFromConfig($config, "thermal_sensors_widget_zone_warning_threshold", DEFAULT_WARNING_THRESHOLD);
-$thermal_sensors_widget_zoneCriticalTempThreshold = getThresholdValueFromConfig($config, "thermal_sensors_widget_zone_critical_threshold", DEFAULT_CRITICAL_THRESHOLD);
-$thermal_sensors_widget_coreWarningTempThreshold = getThresholdValueFromConfig($config, "thermal_sensors_widget_core_warning_threshold", DEFAULT_WARNING_THRESHOLD);
-$thermal_sensors_widget_coreCriticalTempThreshold = getThresholdValueFromConfig($config, "thermal_sensors_widget_core_critical_threshold", DEFAULT_CRITICAL_THRESHOLD);
-
-//get display settings from config (apply defaults if missing)
-$thermal_sensors_widget_showRawOutput = getBoolValueFromConfig($config, "thermal_sensors_widget_show_raw_output", false);
-$thermal_sensors_widget_showFullSensorName = getBoolValueFromConfig($config, "thermal_sensors_widget_show_full_sensor_name", false);
-$thermal_sensors_widget_pulsateWarning = getBoolValueFromConfig($config, "thermal_sensors_widget_pulsate_warning", true);
-$thermal_sensors_widget_pulsateCritical = getBoolValueFromConfig($config, "thermal_sensors_widget_pulsate_critical", true);
-
-function getThresholdValueFromConfig(&$configArray, $valueKey, $defaultValue) {
-
- $thresholdValue = $defaultValue;
-
- if (isset($configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey])) {
- $thresholdValue = (int) $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey];
- }
-
- if ($thresholdValue < MIN_THRESHOLD_VALUE || $thresholdValue > MAX_THRESHOLD_VALUE) {
- //set to default if not in allowed range
- $thresholdValue = $defaultValue;
- }
- return $thresholdValue;
-}
-
-function getBoolValueFromConfig(&$configArray, $valueKey, $defaultValue) {
-
- $boolValue = false;
-
- if (isset($configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey])) {
- $boolValue = (bool) $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey];
- } else {
- //set to default if not in allowed range
- $boolValue = $defaultValue;
- }
- return $boolValue;
-}
-
-//=========================================================================
-?>
-
-<script type="text/javascript">
-//<![CDATA[
- //set Thresholds, to be used in thermal_sensors.js
- var thermal_sensors_widget_zoneWarningTempThreshold = <?= $thermal_sensors_widget_zoneWarningTempThreshold; ?>;
- var thermal_sensors_widget_zoneCriticalTempThreshold = <?= $thermal_sensors_widget_zoneCriticalTempThreshold; ?>;
- var thermal_sensors_widget_coreWarningTempThreshold = <?= $thermal_sensors_widget_coreWarningTempThreshold; ?>;
- var thermal_sensors_widget_coreCriticalTempThreshold = <?= $thermal_sensors_widget_coreCriticalTempThreshold; ?>;
-
- //set Graph display settings, to be used in thermal_sensors.js
- var thermal_sensors_widget_showRawOutput = <?= $thermal_sensors_widget_showRawOutput ? "true" : "false"; ?>;
- var thermal_sensors_widget_showFullSensorName = <?= $thermal_sensors_widget_showFullSensorName ? "true" : "false"; ?>;
- var thermal_sensors_widget_pulsateWarning = <?= $thermal_sensors_widget_pulsateWarning ? "true" : "false"; ?>;
- var thermal_sensors_widget_pulsateCritical = <?= $thermal_sensors_widget_pulsateCritical ? "true" : "false"; ?>;
-
- //start showing temp data
- //NOTE: the refresh interval will be reset to a proper value in showThermalSensorsData() (thermal_sensors.js).
- jQuery(document).ready(function() {
- showThermalSensorsData();
- });
-//]]>
-</script>
-
-<input type="hidden" id="thermal_sensors-config" name="thermal_sensors-config" value="" />
-<div id="thermal_sensors-settings" class="widgetconfigdiv" style="display:none;">
- <form action="/widgets/widgets/thermal_sensors.widget.php" method="post" id="thermal_sensors_widget_iform" name="thermal_sensors_widget_iform">
- <table width="100%" border="0" summary="thermal sensors widget">
- <tr>
- <td align="left" colspan="2">
- <span style="font-weight: bold" >Thresholds in &deg;C (1 to 100):</span>
- </td>
- <td align="right" colspan="1">
- <span style="font-weight: bold" >Display settings:</span>
- </td>
- </tr>
- <tr>
- <td align="right">
- Zone Warning:
- </td>
- <td>
- <input type="text" maxlength="3" size="3" class="formfld unknown"
- name="thermal_sensors_widget_zone_warning_threshold"
- id="thermal_sensors_widget_zone_warning_threshold"
- value="<?= $thermal_sensors_widget_zoneWarningTempThreshold; ?>" />
- </td>
- <td align="right">
- <label for="thermal_sensors_widget_show_raw_output">Show raw output (no graph): </label>
- <input type="checkbox"
- id="thermal_sensors_widget_show_raw_output"
- name="thermal_sensors_widget_show_raw_output"
- value="<?= $thermal_sensors_widget_showRawOutput; ?>" <?= ($thermal_sensors_widget_showRawOutput) ? " checked='checked'" : ""; ?> />
- </td>
- </tr>
- <tr>
- <td align="right">
- Zone Critical:
- </td>
- <td>
- <input type="text" maxlength="3" size="3" class="formfld unknown"
- name="thermal_sensors_widget_zone_critical_threshold"
- id="thermal_sensors_widget_zone_critical_threshold"
- value="<?= $thermal_sensors_widget_zoneCriticalTempThreshold; ?>" />
- </td>
- <td align="right">
- <label for="thermal_sensors_widget_show_full_sensor_name">Show full sensor name: </label>
- <input type="checkbox"
- id="thermal_sensors_widget_show_full_sensor_name"
- name="thermal_sensors_widget_show_full_sensor_name"
- value="<?= $thermal_sensors_widget_showFullSensorName; ?>" <?= ($thermal_sensors_widget_showFullSensorName) ? " checked='checked'" : ""; ?> />
- </td>
- </tr>
- <tr>
- <td align="right">
- Core Warning:
- </td>
- <td>
- <input type="text" maxlength="3" size="3" class="formfld unknown"
- name="thermal_sensors_widget_core_warning_threshold"
- id="thermal_sensors_widget_core_warning_threshold"
- value="<?= $thermal_sensors_widget_coreWarningTempThreshold ?>" />
- </td>
- <td align="right">
- <label for="thermal_sensors_widget_pulsate_warning">Pulsate Warning: </label>
- <input type="checkbox"
- id="thermal_sensors_widget_pulsate_warning"
- name="thermal_sensors_widget_pulsate_warning"
- value="<?= $thermal_sensors_widget_pulsateWarning; ?>" <?= ($thermal_sensors_widget_pulsateWarning) ? " checked='checked'" : ""; ?> />
- </td>
- </tr>
- <tr>
- <td align="right">
- Core Critical:
- </td>
- <td>
- <input type="text" maxlength="3" size="3" class="formfld unknown"
- name="thermal_sensors_widget_core_critical_threshold"
- id="thermal_sensors_widget_core_critical_threshold"
- value="<?= $thermal_sensors_widget_coreCriticalTempThreshold ?>" />
- </td>
- <td align="right">
- <label for="thermal_sensors_widget_pulsate_critical">Pulsate Critical: </label>
- <input type="checkbox"
- id="thermal_sensors_widget_pulsate_critical"
- name="thermal_sensors_widget_pulsate_critical"
- value="<?= $thermal_sensors_widget_pulsateCritical; ?>" <?= ($thermal_sensors_widget_pulsateCritical) ? " checked='checked'" : ""; ?> />
- </td>
- </tr>
- <tr>
- <td align="right" colspan="3">
- <input type="submit" id="thermal_sensors_widget_submit" name="thermal_sensors_widget_submit" class="formbtn" value="Save" />
- </td>
- </tr>
- <tr>
- <td align="left" colspan="3">
- <span>* You can configure a proper Thermal Sensor / Module under <br />
- &nbsp;&nbsp;&nbsp;<a href="system_advanced_misc.php">System &gt; Advanced &gt; Miscellaneous : Thermal Sensors section</a>.</span>
- </td>
- </tr>
- </table>
- </form>
-</div>
-
-<div style="padding: 5px">
- <div id="thermalSensorsContainer" class="listr">
- (Updating...)<br /><br />
- </div>
-</div>
-
-<!-- needed to display the widget settings menu -->
-<script type="text/javascript">
-//<![CDATA[
- textlink = jQuery("#thermal_sensors-configure");
- textlink.css({display: "inline"});
-//]]>
-</script>
diff --git a/usr/local/www/widgets/widgets/traffic_graphs.widget.php b/usr/local/www/widgets/widgets/traffic_graphs.widget.php
deleted file mode 100644
index c5f6286..0000000
--- a/usr/local/www/widgets/widgets/traffic_graphs.widget.php
+++ /dev/null
@@ -1,193 +0,0 @@
-<?php
-/*
- traffic_graphs.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Copyright 2007 Scott Dale
- Part of pfSense widgets (https://www.pfsense.org)
- originally based on m0n0wall (http://m0n0.ch/wall)
-
- Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
- and Jonathan Watt <jwatt@jwatt.org>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("pfsense-utils.inc");
-require_once("functions.inc");
-
-$first_time = false;
-if (!is_array($config["widgets"]["trafficgraphs"])) {
- $first_time = true;
- $config["widgets"]["trafficgraphs"] = array();
-}
-$a_config = &$config["widgets"]["trafficgraphs"];
-
-if (!is_array($a_config["shown"])) {
- $a_config["shown"] = array();
-}
-if (!is_array($a_config["shown"]["item"])) {
- $a_config["shown"]["item"] = array();
-}
-
-$ifdescrs = get_configured_interface_with_descr();
-if (isset($config['ipsec']['enable'])) {
- $ifdescrs['enc0'] = "IPsec";
-}
-
-if ($_POST) {
- if (isset($_POST["refreshinterval"])) {
- $a_config["refreshinterval"] = $_POST["refreshinterval"];
- }
- if (isset($_POST["scale_type"])) {
- $a_config["scale_type"] = $_POST["scale_type"];
- }
- $a_config["shown"]["item"] = array();
- foreach ($ifdescrs as $ifname => $ifdescr) {
- $state = $_POST["shown"][$ifname];
- if ($state === "show") {
- $a_config["shown"]["item"][] = $ifname;
- }
- }
- write_config("Updated traffic graph settings via dashboard.");
- header("Location: /");
- exit(0);
-}
-
-$shown = array();
-foreach ($a_config["shown"]["item"] as $if) {
- $shown[$if] = true;
-}
-if ($first_time) {
- $keys = array_keys($ifdescrs);
- $shown[$keys[0]] = true;
-}
-
-if (isset($a_config["refreshinterval"])) {
- $refreshinterval = $a_config["refreshinterval"];
-} else {
- $refreshinterval = 10;
-}
-
-if (isset($a_config["scale_type"])) {
- $scale_type = $a_config["scale_type"];
-} else {
- $scale_type = "up";
-}
-
-?>
-<input type="hidden" id="traffic_graphs-config" name="traffic_graphs-config" value="" />
-
-<div id="traffic_graphs-settings" class="widgetconfigdiv" style="display:none;">
-<form action="/widgets/widgets/traffic_graphs.widget.php" method="post" name="traffic_graphs_widget_iform" id="traffic_graphs_widget_iform">
- <?php foreach ($ifdescrs as $ifname => $ifdescr) { ?>
- <input type="hidden" name="shown[<?= $ifname ?>]" value="<?= $shown[$ifname] ? "show" : "hide" ?>" />
- <?php } ?>
- Default AutoScale:
- <?php
- $scale_type_up="checked=\"checked\"";
- $scale_type_follow="";
- if (isset($config["widgets"]["trafficgraphs"]["scale_type"])) {
- $selected_radio = $config["widgets"]["trafficgraphs"]["scale_type"];
- if ($selected_radio == "up") {
- $scale_type_up = "checked=\"checked\"";
- $scale_type_follow="";
- } else if ($selected_radio == "follow") {
- $scale_type_up="";
- $scale_type_follow = "checked=\"checked\"";
- }
- }
- ?>
- <input name="scale_type" class="radio" type="radio" id="scale_type_up" value="up" <?php echo $scale_type_up; ?> onchange="updateGraphDisplays();" /> <span>up</span>
- <input name="scale_type" class="radio" type="radio" id="scale_type_follow" value="follow" <?php echo $scale_type_follow; ?> onchange="updateGraphDisplays();" /> <span>follow</span><br /><br />
- Refresh Interval:
- <select name="refreshinterval" class="formfld" id="refreshinterval" onchange="updateGraphDisplays();">
- <?php for ($i = 1; $i <= 10; $i += 1) { ?>
- <option value="<?= $i ?>" <?php if ($refreshinterval == $i) echo "selected=\"selected\"";?>><?= $i ?></option>
- <?php } ?>
- </select>&nbsp; Seconds<br />&nbsp; &nbsp; &nbsp; <b>Note:</b> changing this setting will increase CPU utilization<br /><br />
- <input id="traffic_graphs_widget_submit" name="traffic_graphs_widget_submit" type="submit" onclick="return updatePref();" class="formbtn" value="Save Settings" />
-</form>
-</div>
-
-<script type="text/javascript">
-//<![CDATA[
- d = document;
- selectIntLink = "traffic_graphs-configure";
- textlink = d.getElementById(selectIntLink);
- textlink.style.display = "inline";
-//]]>
-</script>
-
-<?php
-$graphcounter = 0;
-foreach ($ifdescrs as $ifname => $ifdescr) {
- $ifinfo = get_interface_info($ifname);
- if ($shown[$ifname]) {
- $mingraphbutton = "inline";
- $showgraphbutton = "none";
- $graphdisplay = "inline";
- $interfacevalue = "show";
- $graphcounter++;
- } else {
- $mingraphbutton = "none";
- $showgraphbutton = "inline";
- $graphdisplay = "none";
- $interfacevalue = "hide";
- }
- if ($ifinfo['status'] != "down") { ?>
- <div id="<?=$ifname;?>trafficdiv" style="padding: 5px">
- <div id="<?=$ifname;?>topic" class="widgetsubheader">
- <div style="float:left;width:49%">
- <span onclick="location.href='/status_graph.php?if=<?=$ifname;?>'" style="cursor:pointer">Current <?=$ifdescr;?> Traffic</span>
- </div>
- <div align="right" style="float:right;width:49%">
- <div id="<?=$ifname;?>graphdiv-min" onclick='return trafficminimizeDiv("<?= $ifname ?>", true);'
- style="display:<?php echo $mingraphbutton;?>; cursor:pointer" ><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_minus.gif" alt="Minimize <?=$ifname;?> traffic graph" /></div>
- <div id="<?=$ifname;?>graphdiv-open" onclick='return trafficshowDiv("<?= $ifname ?>", "<?= rawurlencode($ifdescr); ?>", "<?= $refreshinterval ?>", true);'
- style="display:<?php echo $showgraphbutton;?>; cursor:pointer" ><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_open.gif" alt="Show <?=$ifname;?> traffic graph" /></div>
- </div>
- <div style="clear:both;"></div>
- </div>
- <div id="<?=$ifname;?>graphdiv" style="display:<?php echo $graphdisplay;?>">
-<?php
- // If the graph is already enabled by the config then put the object inside the div now.
- // Otherwise the graph object is inserted by trafficshowDiv JS when the user opens it.
- if ($graphdisplay == "inline") {
-?>
- <object data="graph.php?ifnum=<?=$ifname;?>&amp;ifname=<?=rawurlencode($ifdescr);?>&amp;timeint=<?=$refreshinterval;?>&amp;initdelay=<?=$graphcounter * 2;?>" height="100%" width="100%">
- <param name="id" value="graph" />
- <param name="type" value="image/svg+xml" />
- <param name="pluginspage" value="http://www.adobe.com/svg/viewer/install/auto" />
- </object>
-<?php
- }
-?>
- </div>
- </div>
- <?php }
-}
-?>
diff --git a/usr/local/www/widgets/widgets/wake_on_lan.widget.php b/usr/local/www/widgets/widgets/wake_on_lan.widget.php
deleted file mode 100644
index 9cb760a..0000000
--- a/usr/local/www/widgets/widgets/wake_on_lan.widget.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/*
- wake_on_lan.widget.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
-
- Copyright (C) 2010 Yehuda Katz
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INClUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-$nocsrf = true;
-
-require_once("guiconfig.inc");
-require_once("/usr/local/www/widgets/include/wake_on_lan.inc");
-
-if (is_array($config['wol']['wolentry'])) {
- $wolcomputers = $config['wol']['wolentry'];
-} else {
- $wolcomputers = array();
-}
-
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="wol status">
- <tr>
- <?php
- echo '<td class="widgetsubheader" align="center">' . gettext("Computer / Device") . '</td>';
- echo '<td class="widgetsubheader" align="center">' . gettext("Interface") . '</td>';
- echo '<td class="widgetsubheader" align="center">' . gettext("Status") . '</td>';
- ?>
- <td class="widgetsubheader">&nbsp;</td>
- </tr>
-<?php
-
-if (count($wolcomputers) > 0) {
- foreach ($wolcomputers as $wolent) {
- echo '<tr><td class="listlr">' . $wolent['descr'] . '<br />' . $wolent['mac'] . '</td>' . "\n";
- echo '<td class="listr">' . convert_friendly_interface_to_friendly_descr($wolent['interface']) . '</td>' . "\n";
-
- $is_active = exec("/usr/sbin/arp -an |/usr/bin/grep {$wolent['mac']}| /usr/bin/wc -l|/usr/bin/awk '{print $1;}'");
- if ($is_active == 1) {
- echo '<td class="listr" align="center">' . "\n";
- echo "<img src=\"/themes/" . $g["theme"] . "/images/icons/icon_pass.gif\" alt=\"pass\" /> " . gettext("Online") . "</td>\n";
- } else {
- echo '<td class="listbg" align="center">' . "\n";
- echo "<img src=\"/themes/" . $g["theme"] . "/images/icons/icon_block.gif\" alt=\"block\" />&nbsp;<font color=\"white\">" . gettext("Offline") . "</font></td>\n";
- }
- echo '<td valign="middle" class="list nowrap">';
- /*if ($is_active) { */
- /* Will always show wake-up button even if pfsense thinks it is awake */
- /* } else { */
- echo "<a href='services_wol.php?mac={$wolent['mac']}&amp;if={$wolent['interface']}'> ";
- echo "<img title='" . gettext("Wake Up") . "' border='0' src='./themes/".$g['theme']."/images/icons/icon_wol_all.gif' alt='wol' /></a>\n";
- /* } */
- echo "</td></tr>\n";
- }
-} else {
- echo "<tr><td colspan=\"4\" align=\"center\">" . gettext("No saved WoL addresses") . ".</td></tr>\n";
-}
-?>
-</table>
-<center><a href="status_dhcp_leases.php" class="navlink">DHCP Leases Status</a></center>
diff --git a/usr/local/www/wizard.php b/usr/local/www/wizard.php
deleted file mode 100644
index adab493..0000000
--- a/usr/local/www/wizard.php
+++ /dev/null
@@ -1,1061 +0,0 @@
-<?php
-/* $Id$ */
-/*
- wizard.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2010 Ermal Luçi
- Copyright (C) 2004 Scott Ullrich
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-pfsensewizardsubsystem
-##|*NAME=pfSense wizard subsystem page
-##|*DESCR=Allow access to the 'pfSense wizard subsystem' page.
-##|*MATCH=wizard.php*
-##|-PRIV
-
-
-require("globals.inc");
-require("guiconfig.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("shaper.inc");
-require_once("rrd.inc");
-
-function gentitle_pkg($pgname) {
- global $config;
- return $config['system']['hostname'] . "." . $config['system']['domain'] . " - " . $pgname;
-}
-
-global $g;
-
-$stepid = htmlspecialchars($_GET['stepid']);
-if (isset($_POST['stepid'])) {
- $stepid = htmlspecialchars($_POST['stepid']);
-}
-if (!$stepid) {
- $stepid = "0";
-}
-
-$xml = htmlspecialchars($_GET['xml']);
-if ($_POST['xml']) {
- $xml = htmlspecialchars($_POST['xml']);
-}
-
-if (empty($xml)) {
- $xml = "not_defined";
- print_info_box_np(sprintf(gettext("ERROR: Could not open %s."), $xml));
- die;
-} else {
- if (file_exists("{$g['www_path']}/wizards/{$xml}")) {
- $pkg = parse_xml_config_pkg("{$g['www_path']}/wizards/" . $xml, "pfsensewizard");
- } else {
- print_info_box_np(sprintf(gettext("ERROR: Could not open %s."), $xml));
- die;
- }
-}
-
-if (!is_array($pkg)) {
- print_info_box_np(sprintf(gettext("ERROR: Could not parse %s/wizards/%s file."), $g['www_path'], $xml));
- die;
-}
-
-$title = preg_replace("/pfSense/i", $g['product_name'], $pkg['step'][$stepid]['title']);
-$description = preg_replace("/pfSense/i", $g['product_name'], $pkg['step'][$stepid]['description']);
-$totalsteps = $pkg['totalsteps'];
-
-if ($pkg['includefile']) {
- require_once($pkg['includefile']);
-}
-
-if ($pkg['step'][$stepid]['includefile']) {
- require_once($pkg['step'][$stepid]['includefile']);
-}
-
-if ($pkg['step'][$stepid]['stepsubmitbeforesave']) {
- eval($pkg['step'][$stepid]['stepsubmitbeforesave']);
-}
-
-if ($_POST && !$input_errors) {
- foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
- if (!empty($field['bindstofield']) and $field['type'] <> "submit") {
- $fieldname = $field['name'];
- $fieldname = str_replace(" ", "", $fieldname);
- $fieldname = strtolower($fieldname);
- // update field with posted values.
- if ($field['unsetfield'] <> "") {
- $unset_fields = "yes";
- } else {
- $unset_fields = "";
- }
- if ($field['arraynum'] <> "") {
- $arraynum = $field['arraynum'];
- } else {
- $arraynum = "";
- }
-
- update_config_field($field['bindstofield'], $_POST[$fieldname], $unset_fields, $arraynum, $field['type']);
- }
-
- }
- // run custom php code embedded in xml config.
- if ($pkg['step'][$stepid]['stepsubmitphpaction'] <> "") {
- eval($pkg['step'][$stepid]['stepsubmitphpaction']);
- }
- if (!$input_errors) {
- write_config();
- }
- $stepid++;
- if ($stepid > $totalsteps) {
- $stepid = $totalsteps;
- }
-}
-
-function update_config_field($field, $updatetext, $unset, $arraynum, $field_type) {
- global $config;
- $field_split = explode("->", $field);
- foreach ($field_split as $f) {
- $field_conv .= "['" . $f . "']";
- }
- if ($field_conv == "") {
- return;
- }
- if ($arraynum <> "") {
- $field_conv .= "[" . $arraynum . "]";
- }
- if (($field_type == "checkbox" and $updatetext <> "on") || $updatetext == "") {
- /*
- * item is a checkbox, it should have the value "on"
- * if it was checked
- */
- $var = "\$config{$field_conv}";
- $text = "if (isset({$var})) unset({$var});";
- eval($text);
- return;
- }
-
- if ($field_type == "interfaces_selection") {
- $var = "\$config{$field_conv}";
- $text = "if (isset({$var})) unset({$var});";
- $text .= "\$config" . $field_conv . " = \"" . $updatetext . "\";";
- eval($text);
- return;
- }
-
- if ($unset == "yes") {
- $text = "unset(\$config" . $field_conv . ");";
- eval($text);
- }
- $text = "\$config" . $field_conv . " = \"" . addslashes($updatetext) . "\";";
- eval($text);
-}
-
-$title = preg_replace("/pfSense/i", $g['product_name'], $pkg['step'][$stepid]['title']);
-$description = preg_replace("/pfSense/i", $g['product_name'], $pkg['step'][$stepid]['description']);
-
-// handle before form display event.
-do {
- $oldstepid = $stepid;
- if ($pkg['step'][$stepid]['stepbeforeformdisplay'] <> "") {
- eval($pkg['step'][$stepid]['stepbeforeformdisplay']);
- }
-} while ($oldstepid != $stepid);
-
-$closehead = false;
-$pgtitle = array($title);
-include("head.inc");
-
-if (file_exists("/usr/local/www/themes/{$g['theme']}/wizard.css")) {
- echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/themes/{$g['theme']}/wizard.css\" media=\"all\" />\n";
-} else {
- echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/themes/{$g['theme']}/all.css\" media=\"all\" />";
-}
-?>
-</head>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC" >
-
-<?php if ($pkg['step'][$stepid]['fields']['field'] <> "") { ?>
-<script type="text/javascript">
-//<![CDATA[
-
-function FieldValidate(userinput, regexp, message) {
- if (!userinput.match(regexp)) {
- alert(message);
- }
-}
-
-function enablechange() {
-<?php
- foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
- if (isset($field['enablefields']) or isset($field['checkenablefields'])) {
- print "\t" . 'if (document.iform.' . strtolower($field['name']) . '.checked) {' . "\n";
- if (isset($field['enablefields'])) {
- $enablefields = explode(',', $field['enablefields']);
- foreach ($enablefields as $enablefield) {
- $enablefield = strtolower($enablefield);
- print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 0;' . "\n";
- }
- }
- if (isset($field['checkenablefields'])) {
- $checkenablefields = explode(',', $field['checkenablefields']);
- foreach ($checkenablefields as $checkenablefield) {
- $checkenablefield = strtolower($checkenablefield);
- print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 0;' . "\n";
- }
- }
- print "\t" . '} else {' . "\n";
- if (isset($field['enablefields'])) {
- $enablefields = explode(',', $field['enablefields']);
- foreach ($enablefields as $enablefield) {
- $enablefield = strtolower($enablefield);
- print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 1;' . "\n";
- }
- }
- if (isset($field['checkenablefields'])) {
- $checkenablefields = explode(',', $field['checkenablefields']);
- foreach ($checkenablefields as $checkenablefield) {
- $checkenablefield = strtolower($checkenablefield);
- print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 1;' . "\n";
- }
- }
- print "\t" . '}' . "\n";
- }
- }
-?>
-}
-
-function disablechange() {
-<?php
- foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
- if (isset($field['disablefields']) or isset($field['checkdisablefields'])) {
- print "\t" . 'if (document.iform.' . strtolower($field['name']) . '.checked) {' . "\n";
- if (isset($field['disablefields'])) {
- $enablefields = explode(',', $field['disablefields']);
- foreach ($enablefields as $enablefield) {
- $enablefield = strtolower($enablefield);
- print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 1;' . "\n";
- }
- }
- if (isset($field['checkdisablefields'])) {
- $checkenablefields = explode(',', $field['checkdisablefields']);
- foreach ($checkenablefields as $checkenablefield) {
- $checkenablefield = strtolower($checkenablefield);
- print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 1;' . "\n";
- }
- }
- print "\t" . '} else {' . "\n";
- if (isset($field['disablefields'])) {
- $enablefields = explode(',', $field['disablefields']);
- foreach ($enablefields as $enablefield) {
- $enablefield = strtolower($enablefield);
- print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 0;' . "\n";
- }
- }
- if (isset($field['checkdisablefields'])) {
- $checkenablefields = explode(',', $field['checkdisablefields']);
- foreach ($checkenablefields as $checkenablefield) {
- $checkenablefield = strtolower($checkenablefield);
- print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 0;' . "\n";
- }
- }
- print "\t" . '}' . "\n";
- }
- }
-?>
-}
-
-function showchange() {
-<?php
- foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
- if (isset($field['showfields'])) {
- print "\t" . 'if (document.iform.' . strtolower($field['name']) . '.checked == false) {' . "\n";
- if (isset($field['showfields'])) {
- $showfields = explode(',', $field['showfields']);
- foreach ($showfields as $showfield) {
- $showfield = strtolower($showfield);
- //print "\t\t" . 'document.iform.' . $showfield . ".display =\"none\";\n";
- print "\t\t jQuery('#". $showfield . "').hide();";
- }
- }
- print "\t" . '} else {' . "\n";
- if (isset($field['showfields'])) {
- $showfields = explode(',', $field['showfields']);
- foreach ($showfields as $showfield) {
- $showfield = strtolower($showfield);
- #print "\t\t" . 'document.iform.' . $showfield . ".display =\"\";\n";
- print "\t\t jQuery('#". $showfield . "').show();";
- }
- }
- print "\t" . '}' . "\n";
- }
- }
-?>
-}
-//]]>
-</script>
-<?php } ?>
-
-<form action="wizard.php" method="post" name="iform" id="iform">
-<input type="hidden" name="xml" value="<?= htmlspecialchars($xml) ?>" />
-<input type="hidden" name="stepid" value="<?= htmlspecialchars($stepid) ?>" />
-
-<center>
-
-&nbsp;<br />
-
-<?php
- if ($title == "Reload in progress") {
- $ip = fixup_string("\$myurl");
- } else {
- $ip = "/";
- }
- echo "<a href='$ip'>";
-?>
-<img border="0" src="./themes/<?= $g['theme']; ?>/images/logo.gif" alt="logo" /></a>
-<p>&nbsp;</p>
-<div style="width:800px;background-color:#ffffff" id="roundme">
-<?php
- if ($input_errors) {
- print_input_errors($input_errors);
- }
- if ($savemsg) {
- print_info_box($savemsg);
- }
- if ($_GET['message'] != "") {
- print_info_box(htmlspecialchars($_GET['message']));
- }
- if ($_POST['message'] != "") {
- print_info_box(htmlspecialchars($_POST['message']));
- }
-?>
-<table bgcolor="#ffffff" width="95%" border="0" cellspacing="0" cellpadding="2" summary="wizard">
- <!-- wizard goes here -->
- <tr><td>&nbsp;</td></tr>
- <tr>
- <td class="tabcont">
- <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
- <tr>
- <td colspan="2" align="center"><font size="2"><b><?= fixup_string($description) ?></b></font></td>
- </tr>
- <tr>
- <td>&nbsp;</td>
- </tr>
-<?php
- if (!$pkg['step'][$stepid]['disableheader']) {
- echo "<tr><td colspan=\"2\" class=\"listtopic\">" . fixup_string($title) . "</td></tr>";
- }
-?>
-
-<?php
- $inputaliases = array();
- if ($pkg['step'][$stepid]['fields']['field'] <> "") {
- foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
-
- $value = $field['value'];
- $name = $field['name'];
-
- $name = preg_replace("/\s+/", "", $name);
- $name = strtolower($name);
-
- if ($field['bindstofield'] <> "") {
- $arraynum = "";
- $field_conv = "";
- $field_split = explode("->", $field['bindstofield']);
- // arraynum is used in cases where there is an array of the same field
- // name such as dnsserver (2 of them)
- if ($field['arraynum'] <> "") {
- $arraynum = "[" . $field['arraynum'] . "]";
- }
- foreach ($field_split as $f) {
- $field_conv .= "['" . $f . "']";
- }
- if ($field['type'] == "checkbox") {
- $toeval = "if (isset(\$config" . $field_conv . $arraynum . ")) { \$value = \$config" . $field_conv . $arraynum . "; if (empty(\$value)) \$value = true; }";
- } else {
- $toeval = "if (isset(\$config" . $field_conv . $arraynum . ")) \$value = \$config" . $field_conv . $arraynum . ";";
- }
- eval($toeval);
- }
-
- if (!$field['combinefieldsend']) {
- echo "<tr>";
- }
-
- switch ($field['type']) {
- case "input":
- if ($field['displayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo $field['displayname'];
- echo ":</td>\n";
- } else if (!$field['dontdisplayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo fixup_string($field['name']);
- echo ":</td>\n";
- }
- if (!$field['dontcombinecells']) {
- echo "<td class=\"vtable\">\n";
- }
-
- echo "<input class='formfld unknown' id='" . $name . "' name='" . $name . "' value=\"" . htmlspecialchars($value) . "\"";
- if ($field['size']) {
- echo " size='" . $field['size'] . "' ";
- }
- if ($field['validate']) {
- echo " onchange='FieldValidate(this.value, \"{$field['validate']}\", \"{$field['message']}\");'";
- }
- echo " />\n";
-
- if ($field['description'] <> "") {
- echo "<br /> " . $field['description'];
- }
- break;
- case "text":
- echo "<td colspan=\"2\" align=\"center\" class=\"vncell\">\n";
- if ($field['description'] <> "") {
- echo "<center><br /> " . $field['description'] . "</center>";
- }
- break;
- case "inputalias":
- if ($field['displayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo $field['displayname'];
- echo ":</td>\n";
- } else if (!$field['dontdisplayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo fixup_string($field['name']);
- echo ":</td>\n";
- }
- if (!$field['dontcombinecells']) {
- echo "<td class=\"vtable\">\n";
- }
-
- $inputaliases[] = $name;
- echo "<input class='formfldalias' autocomplete='off' id='" . $name . "' name='" . $name . "' value=\"" . htmlspecialchars($value) . "\"";
- if ($field['size']) {
- echo " size='" . $field['size'] . "' ";
- }
- if ($field['validate']) {
- echo " onchange='FieldValidate(this.value, \"{$field['validate']}\", \"{$field['message']}\");'";
- }
- echo " />\n";
-
- if ($field['description'] <> "") {
- echo "<br /> " . $field['description'];
- }
- break;
- case "interfaces_selection":
- case "interface_select":
- $size = "";
- $multiple = "";
- $name = strtolower($name);
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n";
- echo "</td>";
- echo "<td class=\"vtable\">\n";
- if ($field['size'] <> "") {
- $size = "size=\"{$field['size']}\"";
- }
- if ($field['multiple'] <> "" and $field['multiple'] <> "0") {
- $multiple = "multiple=\"multiple\"";
- $name .= "[]";
- }
- echo "<select class='formselect' id='{$name}' name='{$name}' {$size} {$multiple}>\n";
- if ($field['add_to_interfaces_selection'] <> "") {
- $SELECTED = "";
- if ($field['add_to_interfaces_selection'] == $value) {
- $SELECTED = " selected=\"selected\"";
- }
- echo "<option value='" . $field['add_to_interfaces_selection'] . "'" . $SELECTED . ">" . $field['add_to_interfaces_selection'] . "</option>\n";
- }
- if ($field['type'] == "interface_select") {
- $interfaces = get_interface_list();
- } else {
- $interfaces = get_configured_interface_with_descr();
- }
- foreach ($interfaces as $ifname => $iface) {
- if ($field['type'] == "interface_select") {
- $iface = $ifname;
- if ($iface['mac']) {
- $iface .= " ({$iface['mac']})";
- }
- }
- $SELECTED = "";
- if ($value == $ifname) $SELECTED = " selected=\"selected\"";
- $to_echo = "<option value='" . $ifname . "'" . $SELECTED . ">" . $iface . "</option>\n";
- $to_echo .= "<!-- {$value} -->";
- $canecho = 0;
- if ($field['interface_filter'] <> "") {
- if (stristr($ifname, $field['interface_filter']) == true) {
- $canecho = 1;
- }
- } else {
- $canecho = 1;
- }
- if ($canecho == 1) {
- echo $to_echo;
- }
- }
- echo "</select>\n";
-
- if ($field['description'] <> "") {
- echo "<br /> " . $field['description'];
- }
-
- break;
- case "password":
- if ($field['displayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo $field['displayname'];
- echo ":</td>\n";
- } else if (!$field['dontdisplayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo fixup_string($field['name']);
- echo ":</td>\n";
- }
- if (!$field['dontcombinecells']) {
- echo "<td class=\"vtable\">";
- }
- echo "<input class='formfld pwd' id='" . $name . "' name='" . $name . "' value=\"" . htmlspecialchars($value) . "\" type='password' ";
- if ($field['size']) {
- echo " size='" . $field['size'] . "' ";
- }
- echo " />\n";
-
- if ($field['description'] <> "") {
- echo "<br /> " . $field['description'];
- }
-
- break;
- case "certca_selection":
- $size = "";
- $multiple = "";
- $name = strtolower($name);
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n";
- echo "</td>";
- echo "<td class=\"vtable\">\n";
- if ($field['size'] <> "") {
- $size = "size=\"{$field['size']}\"";
- }
- echo "<select id='{$name}' name='{$name}' {$size}>\n";
- if ($field['add_to_certca_selection'] <> "") {
- $SELECTED = "";
- if ($field['add_to_certca_selection'] == $value) {
- $SELECTED = " selected=\"selected\"";
- }
- echo "<option value='" . $field['add_to_certca_selection'] . "'" . $SELECTED . ">" . $field['add_to_certca_selection'] . "</option>\n";
- }
- foreach ($config['ca'] as $ca) {
- $name = htmlspecialchars($ca['descr']);
- $SELECTED = "";
- if ($value == $name) $SELECTED = " selected=\"selected\"";
- $to_echo = "<option value='" . $ca['refid'] . "'" . $SELECTED . ">" . $name . "</option>\n";
- $to_echo .= "<!-- {$value} -->";
- $canecho = 0;
- if ($field['certca_filter'] <> "") {
- if (stristr($name, $field['certca_filter']) == true) {
- $canecho = 1;
- }
- } else {
- $canecho = 1;
- }
- if ($canecho == 1) {
- echo $to_echo;
- }
- }
- echo "</select>\n";
-
- if ($field['description'] <> "") {
- echo "<br /> " . $field['description'];
- }
-
- break;
- case "cert_selection":
- $size = "";
- $multiple = "";
- $name = strtolower($name);
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n";
- echo "</td>";
- echo "<td class=\"vtable\">\n";
- if ($field['size'] <> "") {
- $size = "size=\"{$field['size']}\"";
- }
- echo "<select id='{$name}' name='{$name}' {$size}>\n";
- if ($field['add_to_cert_selection'] <> "") {
- $SELECTED = "";
- if ($field['add_to_cert_selection'] == $value) {
- $SELECTED = " selected=\"selected\"";
- }
- echo "<option value='" . $field['add_to_cert_selection'] . "'" . $SELECTED . ">" . $field['add_to_cert_selection'] . "</option>\n";
- }
- foreach ($config['cert'] as $ca) {
- if (stristr($ca['descr'], "webconf")) {
- continue;
- }
- $name = htmlspecialchars($ca['descr']);
- $SELECTED = "";
- if ($value == $name) {
- $SELECTED = " selected=\"selected\"";
- }
- $to_echo = "<option value='" . $ca['refid'] . "'" . $SELECTED . ">" . $name . "</option>\n";
- $to_echo .= "<!-- {$value} -->";
- $canecho = 0;
- if ($field['cert_filter'] <> "") {
- if (stristr($name, $field['cert_filter']) == true) {
- $canecho = 1;
- }
- } else {
- $canecho = 1;
- }
- if ($canecho == 1) {
- echo $to_echo;
- }
- }
- echo "</select>\n";
-
- if ($field['description'] <> "") {
- echo "<br /> " . $field['description'];
- }
-
- break;
- case "select":
- if ($field['displayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo $field['displayname'];
- echo ":</td>\n";
- } else if (!$field['dontdisplayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo fixup_string($field['name']);
- echo ":</td>\n";
- }
- if ($field['size']) {
- $size = " size='" . $field['size'] . "' ";
- }
- if ($field['multiple'] == "yes") {
- $multiple = "multiple=\"multiple\" ";
- }
- if (!$field['dontcombinecells']) {
- echo "<td class=\"vtable\">\n";
- }
- $onchange = "";
- foreach ($field['options']['option'] as $opt) {
- if ($opt['enablefields'] <> "") {
- $onchange = "onchange=\"enableitems(this.selectedIndex);\" ";
- }
- }
- echo "<select class='formselect' " . $onchange . $multiple . $size . "id='" . $name . "' name='" . $name . "'>\n";
- foreach ($field['options']['option'] as $opt) {
- $selected = "";
- if ($value == $opt['value']) {
- $selected = " selected=\"selected\"";
- }
- echo "\t<option value='" . $opt['value'] . "'" . $selected . ">";
- if ($opt['displayname']) {
- echo $opt['displayname'];
- } else {
- echo $opt['name'];
- }
- echo "</option>\n";
- }
- echo "</select>\n";
- echo "<!-- {$value} -->\n";
-
- if ($field['description'] <> "") {
- echo $field['description'];
- }
-
- break;
- case "textarea":
- if ($field['displayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo $field['displayname'];
- echo ":</td>\n";
- } else if (!$field['dontdisplayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo fixup_string($field['name']);
- echo ":</td>";
- }
- if (!$field['dontcombinecells']) {
- echo "<td class=\"vtable\">";
- }
- echo "<textarea class='formpre' id='" . $name . "' name='" . $name . "'";
- if ($field['rows']) {
- echo " rows='" . $field['rows'] . "' ";
- }
- if ($field['cols']) {
- echo " cols='" . $field['cols'] . "' ";
- }
- echo ">" . $value . "</textarea>\n";
-
-
- if ($field['description'] <> "") {
- echo "<br /> " . $field['description'];
- }
-
- break;
- case "submit":
- echo "<td>&nbsp;<br /></td></tr>";
- echo "<tr><td colspan=\"2\" align=\"center\">";
- echo "<input type='submit' name='" . $name . "' value=\"" . htmlspecialchars($field['name']) . "\" />\n";
-
- if ($field['description'] <> "") {
- echo "<br /> " . $field['description'];
- }
-
- break;
- case "listtopic":
- echo "<td>&nbsp;</td></tr>";
- echo "<tr><td colspan=\"2\" class=\"listtopic\">" . $field['name'] . "<br />\n";
-
- break;
- case "subnet_select":
- if ($field['displayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo $field['displayname'];
- echo ":</td>\n";
- } else if (!$field['dontdisplayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo fixup_string($field['name']);
- echo ":</td>";
- }
- if (!$field['dontcombinecells']) {
- echo "<td class=\"vtable\">";
- }
- echo "<select class='formselect' name='{$name}'>\n";
- for ($x=1; $x<33; $x++) {
- $CHECKED = "";
- if ($value == $x) {
- $CHECKED = " selected=\"selected\"";
- }
- if ($x <> 31) {
- echo "<option value='{$x}' {$CHECKED}>{$x}</option>\n";
- }
- }
- echo "</select>\n";
-
- if ($field['description'] <> "") {
- echo "<br /> " . $field['description'];
- }
-
- break;
- case "timezone_select":
- exec('/usr/bin/tar -tzf /usr/share/zoneinfo.tgz', $timezonelist);
- $timezonelist = array_filter($timezonelist, 'is_timezone');
- sort($timezonelist);
-
- /* kill carriage returns */
- for ($x = 0; $x < count($timezonelist); $x++) {
- $timezonelist[$x] = str_replace("\n", "", $timezonelist[$x]);
- }
-
- if ($field['displayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo $field['displayname'];
- echo ":</td>\n";
- } else if (!$field['dontdisplayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo fixup_string($field['name']);
- echo ":</td>";
- }
- if (!$field['dontcombinecells']) {
- echo "<td class=\"vtable\">";
- }
- echo "<select class='formselect' name='{$name}'>\n";
- foreach ($timezonelist as $tz) {
- if (strstr($tz, "GMT")) {
- continue;
- }
- $SELECTED = "";
- if ($value == $tz) {
- $SELECTED = " selected=\"selected\"";
- }
- echo "<option value=\"" . htmlspecialchars($tz) . "\" {$SELECTED}>";
- echo htmlspecialchars($tz);
- echo "</option>\n";
- }
- echo "</select>\n";
-
- if ($field['description'] <> "") {
- echo "<br /> " . $field['description'];
- }
-
- break;
- case "checkbox":
- if ($field['displayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo $field['displayname'];
- echo ":</td>\n";
- } else if (!$field['dontdisplayname']) {
- echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
- echo $field['name'];
- echo ":</td>";
- }
- $checked = "";
- if ($value <> "") {
- $checked = " checked=\"checked\"";
- }
- echo "<td class=\"vtable\"><input value=\"on\" type='checkbox' id='" . $name . "' name='" . $name . "' " . $checked;
- if (isset($field['enablefields']) or isset($field['checkenablefields'])) {
- echo " onclick=\"enablechange()\"";
- } else if (isset($field['disablefields']) or isset($field['checkdisablefields'])) {
- echo " onclick=\"disablechange()\"";
- }
- echo " />\n";
-
- if ($field['description'] <> "") {
- echo $field['description'];
- }
-
- break;
- }
-
- if ($field['typehint'] <> "") {
- echo $field['typehint'];
- }
- if ($field['warning'] <> "") {
- echo "<br /><b><font color=\"red\">" . $field['warning'] . "</font></b>";
- }
-
- if (!$field['combinefieldsbegin']) {
- if (!$field['dontcombinecells']) {
- echo "</td>";
- }
-
- echo "</tr>\n";
- }
-
- }
- }
-?>
- </table>
- </td>
- </tr>
-</table>
-<br />&nbsp;
-</div>
-</center>
-</form>
-<script type="text/javascript">
-//<![CDATA[
- if (typeof ext_change != 'undefined') {
- ext_change();
- }
- if (typeof proto_change != 'undefined') {
- ext_change();
- }
- if (typeof proto_change != 'undefined') {
- proto_change();
- }
-
-<?php
- $isfirst = 0;
- $aliases = "";
- $addrisfirst = 0;
- $aliasesaddr = "";
- if ($config['aliases']['alias'] <> "" and is_array($config['aliases']['alias'])) {
- foreach ($config['aliases']['alias'] as $alias_name) {
- if ($isfirst == 1) {
- $aliases .= ",";
- }
- $aliases .= "'" . $alias_name['name'] . "'";
- $isfirst = 1;
- }
- }
-?>
-
- var customarray=new Array(<?php echo $aliases; ?>);
-
- window.onload = function () {
-
-<?php
- $counter = 0;
- foreach ($inputaliases as $alias) {
- echo "var oTextbox$counter = new AutoSuggestControl(document.getElementById(\"$alias\"), new StateSuggestions(customarray));\n";
- $counter++;
- }
-?>
-
- }
-
-//]]>
-</script>
-
-<?php
-
-$fieldnames_array = Array();
-if ($pkg['step'][$stepid]['disableallfieldsbydefault'] <> "") {
- // create a fieldname loop that can be used with javascript
- // hide and enable features.
- echo "\n<script type=\"text/javascript\">\n";
- echo "//<![CDATA[\n";
- echo "function disableall() {\n";
- foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
- if ($field['type'] <> "submit" and $field['type'] <> "listtopic") {
- if (!$field['donotdisable'] <> "") {
- array_push($fieldnames_array, $field['name']);
- $fieldname = preg_replace("/\s+/", "", $field['name']);
- $fieldname = strtolower($fieldname);
- echo "\tdocument.forms[0]." . $fieldname . ".disabled = 1;\n";
- }
- }
- }
- echo "}\ndisableall();\n";
- echo "function enableitems(selectedindex) {\n";
- echo "disableall();\n";
- $idcounter = 0;
- if ($pkg['step'][$stepid]['fields']['field'] <> "") {
- echo "\tswitch (selectedindex) {\n";
- foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
- if ($field['options']['option'] <> "") {
- foreach ($field['options']['option'] as $opt) {
- if ($opt['enablefields'] <> "") {
- echo "\t\tcase " . $idcounter . ":\n";
- $enablefields_split = explode(",", $opt['enablefields']);
- foreach ($enablefields_split as $efs) {
- $fieldname = preg_replace("/\s+/", "", $efs);
- $fieldname = strtolower($fieldname);
- if ($fieldname <> "") {
- $onchange = "\t\t\tdocument.forms[0]." . $fieldname . ".disabled = 0; \n";
- echo $onchange;
- }
- }
- echo "\t\t\tbreak;\n";
- }
- $idcounter = $idcounter + 1;
- }
- }
- }
- echo "\t}\n";
- }
- echo "}\n";
- echo "//]]>\n";
- echo "</script>\n\n";
-}
-?>
-
-<script type="text/javascript">
-//<![CDATA[
-NiftyCheck();
-var bgcolor = document.getElementsByTagName("body")[0].style.backgroundColor;
-Rounded("div#roundme","all",bgcolor,"#FFFFFF","smooth");
-enablechange();
-disablechange();
-showchange();
-//]]>
-</script>
-
-<?php
-if ($pkg['step'][$stepid]['stepafterformdisplay'] <> "") {
- // handle after form display event.
- eval($pkg['step'][$stepid]['stepafterformdisplay']);
-}
-
-if ($pkg['step'][$stepid]['javascriptafterformdisplay'] <> "") {
- // handle after form display event.
- echo "\n<script type=\"text/javascript\">\n";
- echo "//<![CDATA[\n";
- echo $pkg['step'][$stepid]['javascriptafterformdisplay'] . "\n";
- echo "//]]>\n";
- echo "</script>\n\n";
-}
-
-/*
- * HELPER FUNCTIONS
- */
-
-function fixup_string($string) {
- global $config, $g, $myurl, $title;
- $newstring = $string;
- // fixup #1: $myurl -> http[s]://ip_address:port/
- switch ($config['system']['webgui']['protocol']) {
- case "http":
- $proto = "http";
- break;
- case "https":
- $proto = "https";
- break;
- default:
- $proto = "http";
- break;
- }
- $port = $config['system']['webgui']['port'];
- if ($port != "") {
- if (($port == "443" and $proto != "https") or ($port == "80" and $proto != "http")) {
- $urlport = ":" . $port;
- } elseif ($port != "80" and $port != "443") {
- $urlport = ":" . $port;
- } else {
- $urlport = "";
- }
- }
- $http_host = $_SERVER['SERVER_NAME'];
- $urlhost = $http_host;
- // If finishing the setup wizard, check if accessing on a LAN or WAN address that changed
- if ($title == "Reload in progress") {
- if (is_ipaddr($urlhost)) {
- $host_if = find_ip_interface($urlhost);
- if ($host_if) {
- $host_if = convert_real_interface_to_friendly_interface_name($host_if);
- if ($host_if && is_ipaddr($config['interfaces'][$host_if]['ipaddr'])) {
- $urlhost = $config['interfaces'][$host_if]['ipaddr'];
- }
- }
- } else if ($urlhost == $config['system']['hostname']) {
- $urlhost = $config['wizardtemp']['system']['hostname'];
- } else if ($urlhost == $config['system']['hostname'] . '.' . $config['system']['domain']) {
- $urlhost = $config['wizardtemp']['system']['hostname'] . '.' . $config['wizardtemp']['system']['domain'];
- }
- }
- if ($urlhost != $http_host) {
- file_put_contents("{$g['tmp_path']}/setupwizard_lastreferrer", $proto . "://" . $http_host . $urlport . $_SERVER['REQUEST_URI']);
- }
- $myurl = $proto . "://" . $urlhost . $urlport . "/";
-
- if (strstr($newstring, "\$myurl")) {
- $newstring = str_replace("\$myurl", $myurl, $newstring);
- }
- // fixup #2: $wanip
- if (strstr($newstring, "\$wanip")) {
- $curwanip = get_interface_ip();
- $newstring = str_replace("\$wanip", $curwanip, $newstring);
- }
- // fixup #3: $lanip
- if (strstr($newstring, "\$lanip")) {
- $lanip = get_interface_ip("lan");
- $newstring = str_replace("\$lanip", $lanip, $newstring);
- }
- // fixup #4: fix'r'up here.
- return $newstring;
-}
-
-function is_timezone($elt) {
- return !preg_match("/\/$/", $elt);
-}
-
-?>
-
-</body>
-</html>
diff --git a/usr/local/www/wizards/openvpn_wizard.inc b/usr/local/www/wizards/openvpn_wizard.inc
deleted file mode 100644
index ee530a2..0000000
--- a/usr/local/www/wizards/openvpn_wizard.inc
+++ /dev/null
@@ -1,676 +0,0 @@
-<?php
-/*
- Copyright (C) 2010 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- pfSense_MODULE: openvpn
-*/
-require_once("openvpn.inc");
-
-function has_special_chars($text) {
- return preg_match('/[^A-Za-z0-9 _-]/', $text);
-}
-
-function step1_submitphpaction() {
- global $stepid, $config;
- if ($_POST['authtype'] == "local") {
- $stepid = 4;
- $config['ovpnserver']['step1']['type'] = "local";
- } else if ($_POST['authtype'] == "ldap") {
- $stepid = 0;
- } else if ($_POST['authtype'] == "radius") {
- $stepid = 2;
- $config['ovpnserver']['step1']['type'] = "radius";
- unset($config['ovpnserver']['step1']['uselist']);
- }
-}
-
-function step2_stepbeforeformdisplay() {
- global $pkg, $stepid;
-
- $fields =& $pkg['step'][1]['fields']['field'];
-
- $found = false;
- $authlist = auth_get_authserver_list();
- $fields[1]['options']['option'] = array();
- foreach ($authlist as $i => $auth) {
- if ($auth['type'] != "ldap")
- continue;
- $found = true;
- $opts = array();
- $opts['name'] = $auth['name'];
- $opts['value'] = $auth['name'];
- $fields[1]['options']['option'][] = $opts;
- }
- if ($found == false) {
- $stepid = 2;
- }
-}
-
-function step2_submitphpaction() {
- global $stepid;
-
- if (isset($_POST['next'])) {
- $_POST['uselist'] = "";
- $stepid +=3;
- }
-}
-
-function step3_submitphpaction() {
- global $stepid, $savemsg, $config;
-
- /* Default LDAP port is 389 for TCP and 636 for SSL */
- if (empty($_POST['port'])) {
- if ($_POST['transport'] == "tcp")
- $config['ovpnserver']['step2']['port'] = 389;
- elseif ($_POST['transport'] == "ssl")
- $config['ovpnserver']['step2']['port'] = 636;
- } elseif (!is_port($_POST['port'])) {
- $stepid--;
- $savemsg = "Please enter a valid port number.";
- }
-
- if (empty($_POST['name']) || empty($_POST['ip']) ||empty($_POST['transport']) ||
- empty($_POST['scope']) || empty($_POST['basedn']) || empty($_POST['authscope']) || empty($_POST['nameattr'])) {
- $stepid--;
- $savemsg = "Please enter all information for authentication server.";
- } else if (count(($authcfg = auth_get_authserver($_POST['name']))) > 0) {
- $stepid--;
- $savemsg = "Please choose a different name because an authentication server with this name already exists.";
- } elseif (!is_fqdn($_POST['ip']) && !is_ipaddr($_POST['ip'])) {
- $stepid--;
- $savemsg = "Please enter a valid IP address or hostname for the authentication server.";
- } else {
- $config['ovpnserver']['step2']['uselist'] = "on";
- $_POST['uselist'] = "on";
- $stepid += 2;
- }
-}
-
-function step4_stepbeforeformdisplay() {
- global $pkg, $stepid;
-
- $fields =& $pkg['step'][3]['fields']['field'];
-
- $found = false;
- $authlist = auth_get_authserver_list();
- $fields[1]['options']['option'] = array();
- foreach ($authlist as $i => $auth) {
- if ($auth['type'] != "radius")
- continue;
- $found = true;
- $opts = array();
- $opts['name'] = $auth['name'];
- $opts['value'] = $auth['name'];
- $fields[1]['options']['option'][] = $opts;
- }
- if ($found == false)
- $stepid = 4;
-}
-
-function step4_submitphpaction() {
- global $stepid;
-
- if (isset($_POST['next'])) {
- $_POST['uselist'] = "";
- $stepid++;
- }
-}
-
-function step5_submitphpaction() {
- global $stepid, $savemsg, $config;
-
- /* Default RADIUS Auth port = 1812 */
- if (empty($_POST['port'])) {
- $config['ovpnserver']['step2']['port'] = 1812;
- } elseif (!is_port($_POST['port'])) {
- $stepid--;
- $savemsg = "Please enter a valid port number.";
- }
-
- if (empty($_POST['name']) || empty($_POST['ip']) || empty($_POST['secret'])) {
- $stepid--;
- $savemsg = "Please enter all information for authentication server.";
- } else if (count(($authcfg = auth_get_authserver($_POST['name']))) > 0) {
- $stepid--;
- $savemsg = "Please choose a different name because an authentication server with this name already exists.";
- } elseif (!is_fqdn($_POST['ip']) && !is_ipaddr($_POST['ip'])) {
- $stepid--;
- $savemsg = "Please enter a valid IP address or hostname for the authentication server.";
- } else {
- $config['ovpnserver']['step2']['uselist'] = "on";
- $_POST['uselist'] = "on";
- }
-}
-
-function step6_stepbeforeformdisplay() {
- global $stepid, $config;
-
- if (count($config['ca']) < 1) {
- $stepid++;
- }
-}
-
-function step6_submitphpaction() {
- global $stepid, $config;
-
- if (isset($_POST['next'])) {
- $_POST['uselist'] = "";
- unset($config['ovpnserver']['step6']['uselist']);
- $stepid++;
- } else {
- $config['ovpnserver']['step6']['uselist'] = "on";
- $_POST['uselist'] = "on";
- }
-}
-
-function step7_submitphpaction() {
- global $input_errors, $stepid, $savemsg, $_POST, $config;
-
- $canames = array();
- $cacns = array();
- if (is_array($config['ca'])) {
- foreach($config['ca'] as $ca) {
- $canames[] = $ca['descr'];
- $cainfo = cert_get_subject_hash($ca['crt']);
- $cacns[] = $cainfo["CN"];
- }
- }
-
- if (preg_match("/[\?\>\<\&\/\\\"\']/", $_POST['descr'])) {
- $input_errors[] = "The field 'Descriptive Name' contains invalid characters.";
- }
-
- if (empty($_POST['descr']) || empty($_POST['keylength']) || empty($_POST['lifetime']) ||
- empty($_POST['country']) || empty($_POST['state']) || empty($_POST['city']) ||
- empty($_POST['organization']) || empty($_POST['email'])) {
- $stepid--;
- $savemsg = "Please enter all information for the new Certificate Authority.";
- } elseif (has_special_chars($_POST['country']) || has_special_chars($_POST['state']) ||
- has_special_chars($_POST['city']) || has_special_chars($_POST['organization'])) {
- $stepid--;
- $input_errors[] = "Please do not use special characters in Certificate field names.";
- } elseif (in_array($_POST['descr'], $canames) || in_array($_POST['descr'], $cacns)) {
- $stepid--;
- $savemsg = "Please enter a different name for the Certificate Authority. A Certificate Authority with that name already exists.";
- } elseif (strlen($_POST['country']) != 2) {
- $stepid--;
- $savemsg = "Please enter only a two-letter ISO country code";
- } else {
- $config['ovpnserver']['step6']['uselist'] = "on";
- $_POST['uselist'] = "on";
- }
-}
-
-function step8_stepbeforeformdisplay() {
- global $stepid, $config;
-
- if (count($config['cert']) < 1 ||
- (count($config['cert']) == 1 && stristr($config['cert'][0]['descr'], "webconf"))) {
- $stepid++;
- }
-}
-
-function step8_submitphpaction() {
- global $stepid, $config, $_POST;
-
- if (isset($_POST['next'])) {
- $_POST['uselist'] = "";
- unset($config['ovpnserver']['step9']['uselist']);
- $stepid++;
- } else {
- $config['ovpnserver']['step6']['uselist'] = "on";
- $_POST['uselist'] = "on";
- }
-}
-
-function step9_stepbeforeformdisplay() {
- global $config, $pkg, $stepid;
-
- $pconfig = $config['ovpnserver'];
-
- if (isset($pconfig['step6']['uselist'])) {
- $country = $pconfig['step6']['country'];
- $state = $pconfig['step6']['state'];
- $city = $pconfig['step6']['city'];
- $org = $pconfig['step6']['organization'];
- $email = $pconfig['step6']['email'];
- } else {
- $ca = lookup_ca($pconfig['step6']['authcertca']);
- $cavl = cert_get_subject_array($ca['crt']);
- $country = $cavl[0]['v'];
- $state = $cavl[1]['v'];
- $city = $cavl[2]['v'];
- $org = $cavl[3]['v'];
- $email = $cavl[4]['v'];
- }
- $fields =& $pkg['step'][$stepid]['fields']['field'];
-
- foreach ($fields as $idx => $field) {
- switch ($field['name']) {
- case 'country':
- $fields[$idx]['value'] = $country;
- break;
- case 'state':
- $fields[$idx]['value'] = $state;
- break;
- case 'city':
- $fields[$idx]['value'] = $city;
- break;
- case 'organization':
- $fields[$idx]['value'] = $org;
- break;
- case 'email':
- $fields[$idx]['value'] = $email;
- break;
- }
- }
-}
-
-function step9_submitphpaction() {
- global $input_errors, $stepid, $savemsg, $_POST, $config;
-
- $certnames = array();
- $certcns = array();
- if (is_array($config['cert'])) {
- foreach($config['cert'] as $cert) {
- $certnames[] = $cert['descr'];
- $certinfo = cert_get_subject_hash($cert['crt']);
- $certcns[] = $certinfo["CN"];
- }
- }
-
- if (preg_match("/[\?\>\<\&\/\\\"\']/", $_POST['descr'])) {
- $input_errors[] = "The field 'Descriptive Name' contains invalid characters.";
- }
-
- if (empty($_POST['descr']) || empty($_POST['keylength']) || empty($_POST['lifetime']) ||
- empty($_POST['country']) || empty($_POST['state']) || empty($_POST['city']) ||
- empty($_POST['organization']) || empty($_POST['email'])) {
- $stepid--;
- $savemsg = "Please enter all information for the new certificate.";
- } elseif (has_special_chars($_POST['country']) || has_special_chars($_POST['state']) ||
- has_special_chars($_POST['city']) || has_special_chars($_POST['organization'])) {
- $stepid--;
- $input_errors[] = "Please do not use special characters in Certificate field names.";
- } elseif (in_array($_POST['descr'], $certnames) || in_array($_POST['descr'], $certcns)) {
- $stepid--;
- $savemsg = "Please enter a different name for the Certificate. A Certificate with that name/common name already exists.";
- } elseif (strlen($_POST['country']) != 2) {
- $stepid--;
- $savemsg = "Please enter only a two-letter ISO country code";
- } else {
- $config['ovpnserver']['step9']['uselist'] = "on";
- $_POST['uselist'] = "on";
- }
-}
-
-function step10_stepbeforeformdisplay() {
- global $pkg, $stepid, $netbios_nodetypes;
-
- foreach ($pkg['step'][$stepid]['fields']['field'] as $idx => $field) {
- if ($field['name'] == "crypto") {
- $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array();
- $cipherlist = openvpn_get_cipherlist();
- foreach ($cipherlist as $name => $desc) {
- $opt = array();
- $opt['name'] = $desc;
- $opt['value'] = $name;
- $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt;
- }
- } else if ($field['name'] == "digest") {
- $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array();
- $digestlist = openvpn_get_digestlist();
- foreach ($digestlist as $name => $desc) {
- $opt = array();
- $opt['name'] = $desc;
- $opt['value'] = $name;
- $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt;
- }
- } else if ($field['name'] == "compression") {
- global $openvpn_compression_modes;
- $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array();
- foreach ($openvpn_compression_modes as $name => $desc) {
- $opt = array();
- $opt['name'] = $desc;
- $opt['value'] = $name;
- $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt;
- }
- } else if ($field['name'] == "engine") {
- $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array();
- $engines = openvpn_get_engines();
- foreach ($engines as $name => $desc) {
- $opt = array();
- $opt['name'] = $desc;
- $opt['value'] = $name;
- $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt;
- }
- } else if ($field['name'] == "nbttype") {
- $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array();
- foreach ($netbios_nodetypes as $type => $name) {
- $opt = array();
- $opt['name'] = $name;
- $opt['value'] = $type;
- $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt;
- }
- } else if ($field['name'] == "localport") {
- $pkg['step'][$stepid]['fields']['field'][$idx]['value'] = openvpn_port_next('UDP');
- }
- }
-}
-
-function step10_submitphpaction() {
- global $savemsg, $stepid;
-
- /* Default OpenVPN port to next available port if left empty. */
- if (empty($_POST['localport']))
- $pconfig["step10"]["localport"] = openvpn_port_next('UDP');
-
- /* input validation */
- if ($result = openvpn_validate_port($_POST['localport'], 'Local port'))
- $input_errors[] = $result;
-
- if ($result = openvpn_validate_cidr($_POST['tunnelnet'], 'Tunnel Network', false, "ipv4"))
- $input_errors[] = $result;
-
- if ($result = openvpn_validate_cidr($_POST['localnet'], 'Local Network', true, "ipv4"))
- $input_errors[] = $result;
-
- $portused = openvpn_port_used($_POST['protocol'], $_POST['interface'], $_POST['localport']);
- if ($portused != 0)
- $input_errors[] = "The specified 'Local port' is in use. Please enter a port not already in use.";
-
- if (!isset($_POST['generatetlskey']) && isset($_POST['tlsauthentication']))
- if (!strstr($_POST['tlssharedkey'], "-----BEGIN OpenVPN Static key V1-----") ||
- !strstr($_POST['tlssharedkey'], "-----END OpenVPN Static key V1-----"))
- $input_errors[] = "The field 'TLS Authentication Key' does not appear to be valid";
-
- if (!empty($_POST['dnsserver1']) && !is_ipaddr(trim($_POST['dnsserver1'])))
- $input_errors[] = "The field 'DNS Server #1' must contain a valid IP address";
- if (!empty($_POST['dnsserver2']) && !is_ipaddr(trim($_POST['dnsserver2'])))
- $input_errors[] = "The field 'DNS Server #2' must contain a valid IP address";
- if (!empty($_POST['dnsserver3']) && !is_ipaddr(trim($_POST['dnsserver3'])))
- $input_errors[] = "The field 'DNS Server #3' must contain a valid IP address";
- if (!empty($_POST['dnsserver4']) && !is_ipaddr(trim($_POST['dnsserver4'])))
- $input_errors[] = "The field 'DNS Server #4' must contain a valid IP address";
-
- if (!empty($_POST['ntpserver1']) && !is_ipaddr(trim($_POST['ntpserver1'])))
- $input_errors[] = "The field 'NTP Server #1' must contain a valid IP address";
- if (!empty($_POST['ntpserver2']) && !is_ipaddr(trim($_POST['ntpserver2'])))
- $input_errors[] = "The field 'NTP Server #2' must contain a valid IP address";
-
- if (!empty($_POST['winsserver1']) && !is_ipaddr(trim($_POST['winsserver1'])))
- $input_errors[] = "The field 'WINS Server #1' must contain a valid IP address";
- if (!empty($_POST['winsserver2']) && !is_ipaddr(trim($_POST['winsserver2'])))
- $input_errors[] = "The field 'WINS Server #2' must contain a valid IP address";
-
- if ($_POST['concurrentcon'] && !is_numeric($_POST['concurrentcon']))
- $input_errors[] = "The field 'Concurrent connections' must be numeric.";
-
- if (empty($_POST['tunnelnet']))
- $input_errors[] = "You must specify a 'Tunnel network'.";
-
- if (count($input_errors) > 0) {
- $savemsg = $input_errors[0];
- $stepid = $stepid - 1;
- }
-}
-
-function step12_submitphpaction() {
- global $config;
-
- $pconfig = $config['ovpnserver'];
-
- if (!is_array($config['ovpnserver'])) {
- $message = "No configuration found, please try again.";
- header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=1&message={$message}");
- exit;
- }
-
- if ($pconfig['step1']['type'] == "local") {
- $auth = array();
- $auth['name'] = "Local Database";
- $auth['type'] = "local";
- } else if (isset($pconfig['step2']['uselist'])) {
- $auth = array();
- $auth['type'] = $pconfig['step1']['type'];
- $auth['refid'] = uniqid();
- $auth['name'] = $pconfig['step2']['authtype'];
-
- if ($auth['type'] == "ldap") {
- $auth['host'] = $pconfig['step2']['ip'];
- $auth['ldap_port'] = $pconfig['step2']['port'];
- if ($pconfig['step1']['transport'] == "tcp")
- $auth['ldap_urltype'] = 'TCP - Standard';
- else
- $auth['ldap_urltype'] = 'SSL - Encrypted';
- $auth['ldap_protver'] = 3;
- $auth['ldap_scope'] = $pconfig['step2']['scope'];
- $auth['ldap_basedn'] = $pconfig['step2']['basedn'];
- $auth['ldap_authcn'] = $pconfig['step2']['authscope'];
- $auth['ldap_binddn'] = $pconfig['step2']['userdn'];
- $auth['ldap_bindpw'] = $pconfig['step2']['passdn'];
- $auth['ldap_attr_user'] = $pconfig['step1']['nameattr'];
- $auth['ldap_attr_member'] = $pconfig['step1']['memberattr'];
- $auth['ldap_attr_group'] = $pconfig['step1']['groupattr'];
- } else if ($auth['type'] == "radius") {
- $auth['host'] = $pconfig['step2']['ip'];
- $auth['radius_auth_port'] = $pconfig['step2']['port'];
- $auth['radius_secret'] = $pconfig['step2']['password'];
- $auth['radius_srvcs'] = "auth";
- }
- if (!is_array($config['system']['authserver']))
- $config['system']['authserver'] = array();
-
- $config['system']['authserver'][] = $auth;
- } else if (!isset($pconfig['step2']['uselist']) && empty($pconfig['step2']['authserv'])) {
- $message = "Please choose an authentication server .";
- header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=1&message={$message}");
- exit;
- } else if (!($auth = auth_get_authserver($pconfig['step2']['authserv']))) {
- $message = "An invalid authentication server has been specified.";
- header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=1&message={$message}");
- exit;
- }
-
- if (isset($pconfig['step6']['uselist']) && !empty($pconfig['step6']['certca'])) {
- $ca = array();
- $ca['refid'] = uniqid();
- $ca['descr'] = $pconfig['step6']['certca'];
- $dn = array(
- 'countryName' => $pconfig['step6']['country'],
- 'stateOrProvinceName' => $pconfig['step6']['state'],
- 'localityName' => $pconfig['step6']['city'],
- 'organizationName' => $pconfig['step6']['organization'],
- 'emailAddress' => $pconfig['step6']['email'],
- 'commonName' => $pconfig['step6']['certca']);
-
- ca_create($ca, $pconfig['step6']['keylength'], $pconfig['step6']['lifetime'], $dn, "sha256");
- if (!is_array($config['ca']))
- $config['ca'] = array();
-
- $config['ca'][] = $ca;
- } else if (!isset($pconfig['step6']['uselist']) && empty($pconfig['step6']['authcertca'])) {
- $message = "Please choose a Certificate Authority.";
- header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=5&message={$message}");
- exit;
- } else if (!($ca = lookup_ca($pconfig['step6']['authcertca']))) {
- $message = "An invalid Certificate Authority has been specified.";
- header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=5&message={$message}");
- exit;
- }
-
- if (isset($pconfig['step9']['uselist'])) {
- $cert = array();
- $cert['refid'] = uniqid();
- $cert['descr'] = $pconfig['step9']['certname'];
- $dn = array(
- 'countryName' => $pconfig['step9']['country'],
- 'stateOrProvinceName' => $pconfig['step9']['state'],
- 'localityName' => $pconfig['step9']['city'],
- 'organizationName' => $pconfig['step9']['organization'],
- 'emailAddress' => $pconfig['step9']['email'],
- 'commonName' => $pconfig['step9']['certname']);
-
- cert_create($cert, $ca['refid'], $pconfig['step9']['keylength'], $pconfig['step9']['lifetime'], $dn, 'server', "sha256");
- if (!is_array($config['cert']))
- $config['cert'] = array();
-
- $config['cert'][] = $cert;
- } else if (!isset($pconfig['step9']['uselist']) && empty($pconfig['step9']['authcertname'])) {
- $message = "Please choose a Certificate.";
- header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=7&message={$message}");
- exit;
- } else if (!($cert = lookup_cert($pconfig['step9']['authcertname']))) {
- $message = "An invalid Certificate has been specified.";
- header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=7&message={$message}");
- exit;
- }
- $server = array();
- $server['vpnid'] = openvpn_vpnid_next();
- switch ($auth['type']) {
- case "ldap":
- $server['authmode'] = $auth['name'];
- $server['mode'] = "server_user";
- break;
- case "radius":
- $server['authmode'] = $auth['name'];
- $server['mode'] = "server_user";
- break;
- default:
- $server['authmode'] = "Local Database";
- $server['mode'] = "server_tls_user";
- break;
- }
- $server['caref'] = $ca['refid'];
- $server['certref'] = $cert['refid'];
- $server['protocol'] = $pconfig['step10']['protocol'];
- $server['interface'] = $pconfig['step10']['interface'];
- if (isset($pconfig['step10']['localport']))
- $server['local_port'] = $pconfig['step10']['localport'];
-
- if (strlen($pconfig['step10']['descr']) > 30)
- $pconfig['step10']['descr'] = substr($pconfig['step10']['descr'], 0, 30);
- $server['description'] = $pconfig['step10']['descr'];
- $server['custom_options'] = $pconfig['step10']['advanced'];
- if (isset($pconfig['step10']['tlsauth'])) {
- if (isset($pconfig['step10']['gentlskey']))
- $tlskey = openvpn_create_key();
- else
- $tlskey = $pconfig['step10']['tlskey'];
- $server['tls'] = base64_encode($tlskey);
- }
- $server['dh_length'] = $pconfig['step10']['dhkey'];
- $server['tunnel_network'] = $pconfig['step10']['tunnelnet'];
- if (isset($pconfig['step10']['rdrgw']))
- $server['gwredir'] = $pconfig['step10']['rdrgw'];
- if (isset($pconfig['step10']['localnet']))
- $server['local_network'] = $pconfig['step10']['localnet'];
- if (isset($pconfig['step10']['concurrentcon']))
- $server['maxclients'] = $pconfig['step10']['concurrentcon'];
- if (isset($pconfig['step10']['compression']))
- $server['compression'] = $pconfig['step10']['compression'];
- if (isset($pconfig['step10']['tos']))
- $server['passtos'] = $pconfig['step10']['tos'];
- if (isset($pconfig['step10']['interclient']))
- $server['client2client'] = $pconfig['step10']['interclient'];
- if (isset($pconfig['step10']['duplicate_cn']))
- $server['duplicate_cn'] = $pconfig['step10']['duplicate_cn'];
- if (isset($pconfig['step10']['dynip']))
- $server['dynamic_ip'] = $pconfig['step10']['dynip'];
- if (isset($pconfig['step10']['addrpool']))
- $server['pool_enable'] = $pconfig['step10']['addrpool'];
- if (isset($pconfig['step10']['defaultdomain']))
- $server['dns_domain'] = $pconfig['step10']['defaultdomain'];
- if (isset($pconfig['step10']['dns1']))
- $server['dns_server1'] = $pconfig['step10']['dns1'];
- if (isset($pconfig['step10']['dns2']))
- $server['dns_server2'] = $pconfig['step10']['dns2'];
- if (isset($pconfig['step10']['dns3']))
- $server['dns_server3'] = $pconfig['step10']['dns3'];
- if (isset($pconfig['step10']['dns4']))
- $server['dns_server4'] = $pconfig['step10']['dns4'];
- if (isset($pconfig['step10']['ntp1']))
- $server['ntp_server1'] = $pconfig['step10']['ntp1'];
- if (isset($pconfig['step10']['ntp2']))
- $server['ntp_server2'] = $pconfig['step10']['ntp2'];
- if (isset($pconfig['step10']['wins1']))
- $server['wins_server1'] = $pconfig['step10']['wins1'];
- if (isset($pconfig['step10']['wins2']))
- $server['wins_server2'] = $pconfig['step10']['wins2'];
- if (isset($pconfig['step10']['nbtenable'])) {
- $server['netbios_ntype'] = $pconfig['step10']['nbttype'];
- if (isset($pconfig['step10']['nbtscope']))
- $server['netbios_scope'] = $pconfig['step10']['nbtscope'];
- $server['netbios_enable'] = $pconfig['step10']['nbtenable'];
- }
- $server['crypto'] = $pconfig['step10']['crypto'];
- $server['digest'] = $pconfig['step10']['digest'];
- $server['engine'] = $pconfig['step10']['engine'];
-
- if (isset($pconfig['step11']['ovpnrule'])) {
- $rule = array();
- $rule['descr'] = sprintf(gettext("OpenVPN %s wizard"),$server['description']);
- /* Ensure the rule descr is not too long for pf to handle */
- if (strlen($rule['descr']) > 52)
- $rule['descr'] = substr($rule['descr'], 0, 52);
- $rule['direction'] = "in";
- $rule['source']['any'] = TRUE;
- $rule['destination']['network'] = $server['interface'] . "ip";
- $rule['destination']['port'] = $server['local_port'];
- $rule['interface'] = $server['interface'];
- $rule['protocol'] = strtolower($server['protocol']);
- $rule['type'] = "pass";
- $rule['enabled'] = "on";
- $rule['created'] = make_config_revision_entry(null, gettext("OpenVPN Wizard"));
- $config['filter']['rule'][] = $rule;
- }
- if (isset($pconfig['step11']['ovpnallow'])) {
- $rule = array();
- $rule['descr'] = sprintf(gettext("OpenVPN %s wizard"),$server['description']);
- /* Ensure the rule descr is not too long for pf to handle */
- if (strlen($rule['descr']) > 52)
- $rule['descr'] = substr($rule['descr'], 0, 52);
- $rule['source']['any'] = TRUE;
- $rule['destination']['any'] = TRUE;
- $rule['interface'] = "openvpn";
- //$rule['protocol'] = $server['protocol'];
- $rule['type'] = "pass";
- $rule['enabled'] = "on";
- $rule['created'] = make_config_revision_entry(null, gettext("OpenVPN Wizard"));
- $config['filter']['rule'][] = $rule;
- }
-
- if (!is_array($config['openvpn']['openvpn-server']))
- $config['openvpn']['openvpn-server'] = array();
-
- $config['openvpn']['openvpn-server'][] = $server;
-
- openvpn_resync('server', $server);
- write_config();
- header("Location: vpn_openvpn_server.php");
- exit;
-}
-
-?>
diff --git a/usr/local/www/wizards/openvpn_wizard.xml b/usr/local/www/wizards/openvpn_wizard.xml
deleted file mode 100644
index 6aea7fd..0000000
--- a/usr/local/www/wizards/openvpn_wizard.xml
+++ /dev/null
@@ -1,987 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<pfsensewizard>
-<copyright>
-/*
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2010 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-</copyright>
-<totalsteps>12</totalsteps>
-<step>
- <id>1</id>
- <title>OpenVPN Wizard: Authentication Type Selection</title>
- <description>OpenVPN Remote Access Server Setup Wizard</description>
- <disableheader>on</disableheader>
- <fields>
- <field>
- <type>listtopic</type>
- <name>Select an Authentication Backend Type</name>
- </field>
- <field>
- <type>select</type>
- <displayname>Type of Server</displayname>
- <name>authtype</name>
- <description>&lt;br/&gt;&lt;b&gt;NOTE:&lt;/b&gt; If you are unsure, leave this set to "Local User Access."</description>
- <bindstofield>ovpnserver->step1->type</bindstofield>
- <options>
- <option>
- <name>Local User Access</name>
- <value>local</value>
- </option>
- <option>
- <name>LDAP</name>
- <value>ldap</value>
- </option>
- <option>
- <name>Radius</name>
- <value>radius</value>
- </option>
- </options>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepsubmitphpaction>step1_submitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
-</step>
-<step>
- <id>2</id>
- <title>OpenVPN Wizard: LDAP Server Selection</title>
- <description>OpenVPN Remote Access Server Setup Wizard</description>
- <disableheader>on</disableheader>
- <fields>
- <field>
- <type>listtopic</type>
- <name>LDAP Authentication Server List</name>
- </field>
- <field>
- <name>authserv</name>
- <displayname>LDAP servers</displayname>
- <type>select</type>
- <bindstofield>ovpnserver->step2->authserv</bindstofield>
- <options>
- <option>
- <name>dummy</name>
- <value>dummy</value>
- </option>
- </options>
- </field>
- <field>
- <type>submit</type>
- <name>Add new LDAP server</name>
- </field>
- <field>
- <type>submit</type>
- <name>Next</name>
- </field>
- </fields>
- <stepbeforeformdisplay>step2_stepbeforeformdisplay();</stepbeforeformdisplay>
- <stepsubmitphpaction>step2_submitphpaction();</stepsubmitphpaction>
- <javascriptafterformdisplay>enablechange();</javascriptafterformdisplay>
- <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
-</step>
-<step>
- <id>3</id>
- <title>OpenVPN Wizard: Add LDAP Server</title>
- <description>OpenVPN Remote Access Server Setup Wizard</description>
- <disableheader>on</disableheader>
- <fields>
- <field>
- <type>listtopic</type>
- <name>LDAP Authentication Server Parameters</name>
- </field>
- <field>
- <name>name</name>
- <displayname>Name</displayname>
- <type>input</type>
- <bindstofield>ovpnserver->step2->authtype</bindstofield>
- <size>30</size>
- <description>Descriptive server name, for your own reference.</description>
- </field>
- <field>
- <name>ip</name>
- <displayname>Hostname or IP address</displayname>
- <type>input</type>
- <bindstofield>ovpnserver->step2->ip</bindstofield>
- <description>Address of the LDAP server.</description>
- </field>
- <field>
- <name>port</name>
- <displayname>Port</displayname>
- <type>input</type>
- <size>8</size>
- <bindstofield>ovpnserver->step2->port</bindstofield>
- <description>LDAP Server port, leave blank for the default (389 for TCP, 636 for SSL).</description>
- </field>
- <field>
- <name>transport</name>
- <displayname>Transport</displayname>
- <type>select</type>
- <bindstofield>ovpnserver->step2->transport</bindstofield>
- <options>
- <option>
- <name>TCP - Standard</name>
- <value>tcp</value>
- </option>
- <option>
- <name>SSL - Encrypted</name>
- <value>ssl</value>
- </option>
- </options>
- <description>&lt;br/&gt;The protocol used by your LDAP server. It can either be standard TCP or SSL encrypted.</description>
- </field>
- <field>
- <name>scope</name>
- <displayname>Search Scope Level</displayname>
- <type>select</type>
- <options>
- <option>
- <name>One Level</name>
- <value>one</value>
- </option>
- <option>
- <name>Entire Subtree</name>
- <value>subtree</value>
- </option>
- </options>
- <bindstofield>ovpnserver->step2->scope</bindstofield>
- </field>
- <field>
- <name>basedn</name>
- <displayname>Search Scope Base DN</displayname>
- <type>input</type>
- <size>40</size>
- <bindstofield>ovpnserver->step2->basedn</bindstofield>
- </field>
- <field>
- <name>authscope</name>
- <displayname>Authentication Containers</displayname>
- <type>input</type>
- <size>40</size>
- <bindstofield>ovpnserver->step2->authscope</bindstofield>
- <description>Semi-Colon separated. This will be prepended to the search base dn above or you can specify full container path.&lt;br/&gt;EXAMPLE: CN=Users;DC=example&lt;br/&gt;EXAMPLE: CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com </description>
- </field>
- <field>
- <name>userdn</name>
- <displayname>LDAP Bind User DN</displayname>
- <type>input</type>
- <size>20</size>
- <description>If left blank, an anonymous bind will be done.</description>
- <bindstofield>ovpnserver->step2->userdn</bindstofield>
- </field>
- <field>
- <name>passdn</name>
- <displayname>LDAP Bind Password</displayname>
- <type>password</type>
- <size>20</size>
- <bindstofield>ovpnserver->step2->passdn</bindstofield>
- <description>If a user DN was supplied above, this password will also be used when performing a bind operation.</description>
- </field>
- <field>
- <name>nameattr</name>
- <displayname>User Naming Attribute</displayname>
- <type>input</type>
- <bindstofield>ovpnserver->step2->nameattr</bindstofield>
- <description>Typically "cn" (OpenLDAP, Novell eDirectory), "samAccountName" (Microsoft AD)</description>
- </field>
- <field>
- <name>groupattr</name>
- <displayname>Group Naming Attribute</displayname>
- <type>input</type>
- <bindstofield>ovpnserver->step2->groupattr</bindstofield>
- <description>Typically "cn" (OpenLDAP, Microsoft AD, and Novell eDirectory)</description>
- </field>
- <field>
- <name>memberattr</name>
- <displayname>Member Naming Attribute</displayname>
- <type>input</type>
- <bindstofield>ovpnserver->step2->memberattr</bindstofield>
- <description>Typically "member" (OpenLDAP), "memberOf" (Microsoft AD), "uniqueMember" (Novell eDirectory)</description>
- </field>
- <field>
- <type>submit</type>
- <name>Add new Server</name>
- </field>
- </fields>
- <stepsubmitphpaction>step3_submitphpaction();</stepsubmitphpaction>
- <javascriptafterformdisplay>enablechange();</javascriptafterformdisplay>
- <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
-</step>
-<step>
- <id>4</id>
- <title>OpenVPN Wizard: RADIUS Server Selection</title>
- <description>OpenVPN Remote Access Server Setup Wizard</description>
- <disableheader>on</disableheader>
- <fields>
- <field>
- <type>listtopic</type>
- <name>RADIUS Authentication Server List</name>
- </field>
- <field>
- <name>authserv</name>
- <displayname>RADIUS servers</displayname>
- <type>select</type>
- <bindstofield>ovpnserver->step2->authserv</bindstofield>
- <options>
- <option>
- <name>dummy</name>
- <value>dummy</value>
- </option>
- </options>
- </field>
- <field>
- <type>submit</type>
- <name>Add new RADIUS server</name>
- </field>
- <field>
- <type>submit</type>
- <name>Next</name>
- </field>
- </fields>
- <stepbeforeformdisplay>step4_stepbeforeformdisplay();</stepbeforeformdisplay>
- <stepsubmitphpaction>step4_submitphpaction();</stepsubmitphpaction>
- <javascriptafterformdisplay>enablechange();</javascriptafterformdisplay>
- <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
-</step>
-<step>
- <id>5</id>
- <title>OpenVPN Wizard: Add RADIUS Server</title>
- <description>OpenVPN Remote Access Server Setup Wizard</description>
- <disableheader>on</disableheader>
- <fields>
- <field>
- <type>listtopic</type>
- <name>RADIUS Authentication Server Parameters</name>
- </field>
- <field>
- <name>name</name>
- <displayname>Name</displayname>
- <type>input</type>
- <bindstofield>ovpnserver->step2->authtype</bindstofield>
- <size>20</size>
- <description>Descriptive name for the RADIUS server, for your reference.</description>
- </field>
- <field>
- <name>ip</name>
- <displayname>Hostname or IP address</displayname>
- <type>input</type>
- <bindstofield>ovpnserver->step2->ip</bindstofield>
- <description>Address of the RADIUS server.</description>
- </field>
- <field>
- <name>port</name>
- <displayname>Authentication Port</displayname>
- <type>input</type>
- <size>8</size>
- <bindstofield>ovpnserver->step2->port</bindstofield>
- <description>Port used by the RADIUS server for accepting Authentication requests, typically 1812.</description>
- </field>
- <field>
- <name>secret</name>
- <displayname>Shared Secret</displayname>
- <type>password</type>
- <size>20</size>
- <bindstofield>ovpnserver->step2->password</bindstofield>
- <description></description>
- </field>
- <field>
- <name>Add new Server</name>
- <type>submit</type>
- </field>
- </fields>
- <stepsubmitphpaction>step5_submitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
-</step>
-<step>
- <id>6</id>
- <title>OpenVPN Wizard: Certificate Authority Selection</title>
- <description>OpenVPN Remote Access Server Setup Wizard</description>
- <disableheader>on</disableheader>
- <fields>
- <field>
- <name>Choose a Certificate Authority (CA)</name>
- <type>listtopic</type>
- </field>
- <field>
- <type>certca_selection</type>
- <name>certca</name>
- <displayname>Certificate Authority</displayname>
- <bindstofield>ovpnserver->step6->authcertca</bindstofield>
- </field>
- <field>
- <type>submit</type>
- <name>Add new CA</name>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepbeforeformdisplay>step6_stepbeforeformdisplay();</stepbeforeformdisplay>
- <stepsubmitphpaction>step6_submitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
-</step>
-<step>
- <id>7</id>
- <title>OpenVPN Wizard: Add Certificate Authority</title>
- <description>OpenVPN Remote Access Server Setup Wizard</description>
- <disableheader>on</disableheader>
- <fields>
- <field>
- <name>Create a New Certificate Authority (CA) Certificate</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>descr</name>
- <displayname>Descriptive name</displayname>
- <description>A name for your reference, to identify this certificate. This is the same as common-name field for other Certificates.</description>
- <type>input</type>
- <size>20</size>
- <bindstofield>ovpnserver->step6->certca</bindstofield>
- </field>
- <field>
- <name>keylength</name>
- <displayname>Key length</displayname>
- <description>&lt;br/&gt;Size of the key which will be generated. The larger the key, the more security it offers, but larger keys are generally slower to use.</description>
- <type>select</type>
- <value>2048</value>
- <bindstofield>ovpnserver->step6->keylength</bindstofield>
- <options>
- <option>
- <name>512 bit</name>
- <value>512</value>
- </option>
- <option>
- <name>1024 bit</name>
- <value>1024</value>
- </option>
- <option>
- <name>2048 bit</name>
- <value>2048</value>
- </option>
- <option>
- <name>4096 bit</name>
- <value>4096</value>
- </option>
- </options>
- </field>
- <field>
- <name>lifetime</name>
- <displayname>Lifetime</displayname>
- <type>input</type>
- <size>10</size>
- <value>3650</value>
- <description>Lifetime in days. This is commonly set to 3650 (Approximately 10 years.)</description>
- <bindstofield>ovpnserver->step6->lifetime</bindstofield>
- </field>
- <field>
- <name>country</name>
- <displayname>Country Code</displayname>
- <description>Two-letter ISO country code (e.g. US, AU, CA) </description>
- <type>input</type>
- <size>5</size>
- <bindstofield>ovpnserver->step6->country</bindstofield>
- </field>
- <field>
- <name>state</name>
- <displayname>State or Province</displayname>
- <description>Full State or Province name, not abbreviated (e.g. Kentucky, Indiana, Ontario).</description>
- <type>input</type>
- <size>30</size>
- <bindstofield>ovpnserver->step6->state</bindstofield>
- </field>
- <field>
- <name>city</name>
- <displayname>City</displayname>
- <description>City or other Locality name (e.g. Louisville, Indianapolis, Toronto).</description>
- <type>input</type>
- <size>30</size>
- <bindstofield>ovpnserver->step6->city</bindstofield>
- </field>
- <field>
- <name>organization</name>
- <displayname>Organization</displayname>
- <description>Organization name, often the Company or Group name.</description>
- <type>input</type>
- <size>30</size>
- <bindstofield>ovpnserver->step6->organization</bindstofield>
- </field>
- <field>
- <name>email</name>
- <displayname>E-mail</displayname>
- <description>E-mail address for the Certificate contact. Often the e-mail of the person generating the certificate (i.e. You.)</description>
- <type>input</type>
- <size>30</size>
- <bindstofield>ovpnserver->step6->email</bindstofield>
- </field>
- <field>
- <name>Add new CA</name>
- <type>submit</type>
- </field>
- </fields>
- <stepsubmitphpaction>step7_submitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
- <javascriptafterformdisplay>enablechange();</javascriptafterformdisplay>
-</step>
-<step>
- <id>8</id>
- <title>OpenVPN Wizard: Server Certificate Selection</title>
- <description>OpenVPN Remote Access Server Setup Wizard</description>
- <disableheader>on</disableheader>
- <fields>
- <field>
- <name>Choose a Server Certificate</name>
- <type>listtopic</type>
- </field>
- <field>
- <type>cert_selection</type>
- <name>certname</name>
- <displayname>Certificate</displayname>
- <bindstofield>ovpnserver->step9->authcertname</bindstofield>
- </field>
- <field>
- <type>submit</type>
- <name>Add new Certificate</name>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepbeforeformdisplay>step8_stepbeforeformdisplay();</stepbeforeformdisplay>
- <stepsubmitphpaction>step8_submitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
-</step>
-<step>
- <id>9</id>
- <title>OpenVPN Wizard: Add a Server Certificate</title>
- <description>OpenVPN Remote Access Server Setup Wizard</description>
- <disableheader>on</disableheader>
- <fields>
- <field>
- <name>Create a New Server Certificate</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>descr</name>
- <displayname>Descriptive name</displayname>
- <description>A name for your reference, to identify this certificate. This is also known as the certificate's "Common Name."</description>
- <type>input</type>
- <size>20</size>
- <bindstofield>ovpnserver->step9->certname</bindstofield>
- </field>
- <field>
- <name>keylength</name>
- <displayname>Key length</displayname>
- <description>&lt;br/&gt;Size of the key which will be generated. The larger the key, the more security it offers, but larger keys are generally slower to use.</description>
- <type>select</type>
- <value>2048</value>
- <bindstofield>ovpnserver->step9->keylength</bindstofield>
- <options>
- <option>
- <name>512 bits</name>
- <value>512</value>
- </option>
- <option>
- <name>1024 bits</name>
- <value>1024</value>
- </option>
- <option>
- <name>2048 bits</name>
- <value>2048</value>
- </option>
- <option>
- <name>4096 bits</name>
- <value>4096</value>
- </option>
- </options>
- </field>
- <field>
- <name>lifetime</name>
- <displayname>Lifetime</displayname>
- <description>Lifetime in days. This is commonly set to 3650 (Approximately 10 years.)</description>
- <type>input</type>
- <size>10</size>
- <value>3650</value>
- <bindstofield>ovpnserver->step9->lifetime</bindstofield>
- </field>
- <field>
- <name>country</name>
- <displayname>Country Code</displayname>
- <description>Two-letter ISO country code (e.g. US, AU, CA) </description>
- <type>input</type>
- <size>5</size>
- <bindstofield>ovpnserver->step9->country</bindstofield>
- </field>
- <field>
- <name>state</name>
- <displayname>State or Province</displayname>
- <description>Full State of Province name, not abbreviated (e.g. Kentucky, Indiana, Ontario).</description>
- <type>input</type>
- <size>30</size>
- <bindstofield>ovpnserver->step9->state</bindstofield>
- </field>
- <field>
- <name>city</name>
- <displayname>City</displayname>
- <description>City or other Locality name (e.g. Louisville, Indianapolis, Toronto).</description>
- <type>input</type>
- <size>30</size>
- <bindstofield>ovpnserver->step9->city</bindstofield>
- </field>
- <field>
- <name>organization</name>
- <displayname>Organization</displayname>
- <description>Organization name, often the Company or Group name.</description>
- <type>input</type>
- <size>30</size>
- <bindstofield>ovpnserver->step9->organization</bindstofield>
- </field>
- <field>
- <name>email</name>
- <displayname>E-mail</displayname>
- <description>E-mail address for the Certificate contact. Often the e-mail of the person generating the certificate (i.e. You.)</description>
- <type>input</type>
- <size>30</size>
- <bindstofield>ovpnserver->step9->email</bindstofield>
- </field>
- <field>
- <name>Create new Certificate</name>
- <type>submit</type>
- </field>
- </fields>
- <stepbeforeformdisplay>step9_stepbeforeformdisplay();</stepbeforeformdisplay>
- <stepsubmitphpaction>step9_submitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
-</step>
-<step>
- <id>10</id>
- <title>OpenVPN Wizard: Server Setup</title>
- <description>OpenVPN Remote Access Server Setup Wizard</description>
- <disableheader>on</disableheader>
- <fields>
- <field>
- <type>listtopic</type>
- <name>General OpenVPN Server Information</name>
- </field>
- <field>
- <name>interface</name>
- <type>interfaces_selection</type>
- <description>The interface where OpenVPN will listen for incoming connections (typically WAN.)</description>
- <displayname>Interface</displayname>
- <bindstofield>ovpnserver->step10->interface</bindstofield>
- </field>
- <field>
- <name>Protocol</name>
- <type>select</type>
- <bindstofield>ovpnserver->step10->protocol</bindstofield>
- <options>
- <option>
- <name>UDP</name>
- <value>UDP</value>
- </option>
- <option>
- <name>TCP</name>
- <value>TCP</value>
- </option>
- </options>
- <description>&lt;br/&gt;Protocol to use for OpenVPN connections. If you are unsure, leave this set to UDP.</description>
- </field>
- <field>
- <name>localport</name>
- <displayname>Local Port</displayname>
- <description>Local port upon which OpenVPN will listen for connections. The default port is 1194. This can be left at its default unless you need to use a different port.</description>
- <type>input</type>
- <size>10</size>
- <bindstofield>ovpnserver->step10->localport</bindstofield>
- </field>
- <field>
- <name>description</name>
- <displayname>Description</displayname>
- <description>A name for this OpenVPN instance, for your reference. It can be set however you like, but is often used to distinguish the purpose of the service (e.g. "Remote Technical Staff"). It is also used by OpenVPN Client Export to identify this VPN on clients.</description>
- <type>input</type>
- <size>30</size>
- <bindstofield>ovpnserver->step10->descr</bindstofield>
- </field>
- <field>
- <type>listtopic</type>
- <name>Cryptographic Settings</name>
- </field>
- <field>
- <name>TLS Authentication</name>
- <type>checkbox</type>
- <value>on</value>
- <description>Enable authentication of TLS packets.</description>
- <bindstofield>ovpnserver->step10->tlsauth</bindstofield>
- </field>
- <field>
- <displayname>Generate TLS Key</displayname>
- <name>generatetlskey</name>
- <disablefields>tlssharedkey</disablefields>
- <value>on</value>
- <type>checkbox</type>
- <description>Automatically generate a shared TLS authentication key.</description>
- <bindstofield>ovpnserver->step10->gentlskey</bindstofield>
- </field>
- <field>
- <displayname>TLS Shared Key</displayname>
- <name>tlssharedkey</name>
- <description>Paste in a shared TLS key if one has already been generated.</description>
- <type>textarea</type>
- <cols>30</cols>
- <rows>5</rows>
- <bindstofield>ovpnserver->step10->tlskey</bindstofield>
- </field>
- <field>
- <displayname>DH Parameters Length</displayname>
- <name>dhparameters</name>
- <type>select</type>
- <value>2048</value>
- <bindstofield>ovpnserver->step10->dhkey</bindstofield>
- <options>
- <option>
- <name>1024 bit</name>
- <value>1024</value>
- </option>
- <option>
- <name>2048 bit</name>
- <value>2048</value>
- </option>
- <option>
- <name>4096 bit</name>
- <value>4096</value>
- </option>
- </options>
- <description>&lt;br/&gt;Length of Diffie-Hellman (DH) key exchange parameters, used for establishing a secure communications channel. As with other such settings, the larger values are more secure, but may be slower in operation.</description>
- </field>
- <field>
- <name>crypto</name>
- <type>select</type>
- <displayname>Encryption Algorithm</displayname>
- <bindstofield>ovpnserver->step10->crypto</bindstofield>
- <value>AES-256-CBC</value>
- <options>
- <option>
- <name>dummy</name>
- <value>dummy</value>
- </option>
- </options>
- <description>&lt;br/&gt;The algorithm used to encrypt traffic between endpoints. This setting must match on the client and server side, but is otherwise set however you like. Certain algorithms will perform better on different hardware, depending on the availability of supported VPN accelerator chips.</description>
- </field>
- <field>
- <name>digest</name>
- <type>select</type>
- <displayname>Auth Digest Algorithm</displayname>
- <bindstofield>ovpnserver->step10->digest</bindstofield>
- <options>
- <option>
- <name>dummy</name>
- <value>dummy</value>
- </option>
- </options>
- <value>SHA1</value>
- <description>&lt;br/&gt;The method used to authenticate traffic between endpoints. This setting must match on the client and server side, but is otherwise set however you like.</description>
- </field>
- <field>
- <name>engine</name>
- <type>select</type>
- <displayname>Hardware Crypto</displayname>
- <bindstofield>ovpnserver->step10->engine</bindstofield>
- <options>
- <option>
- <name>dummy</name>
- <value>dummy</value>
- </option>
- </options>
- <description>&lt;br/&gt;The hardware cryptographic accelerator to use for this VPN connection, if any.</description>
- </field>
- <field>
- <type>listtopic</type>
- <name>Tunnel Settings</name>
- </field>
- <field>
- <displayname>Tunnel Network</displayname>
- <name>tunnelnet</name>
- <type>input</type>
- <size>20</size>
- <bindstofield>ovpnserver->step10->tunnelnet</bindstofield>
- <description>This is the virtual network used for private communications between this server and client hosts expressed using CIDR notation (eg. 10.0.8.0/24). The first network address will be assigned to the server virtual interface. The remaining network addresses can optionally be assigned to connecting clients. (see Address Pool)</description>
- </field>
- <field>
- <displayname>Redirect Gateway</displayname>
- <name>redirectgw</name>
- <type>checkbox</type>
- <description>Force all client generated traffic through the tunnel.</description>
- <bindstofield>ovpnserver->step10->rdrgw</bindstofield>
- </field>
- <field>
- <displayname>Local Network</displayname>
- <name>localnet</name>
- <type>input</type>
- <size>20</size>
- <bindstofield>ovpnserver->step10->localnet</bindstofield>
- <description>This is the network that will be accessible from the remote endpoint, expressed as a CIDR range. You may leave this blank if you don't want to add a route to the local network through this tunnel on the remote machine. This is generally set to your LAN network.</description>
- </field>
- <field>
- <displayname>Concurrent Connections</displayname>
- <name>concurrentcon</name>
- <description>Specify the maximum number of clients allowed to concurrently connect to this server.</description>
- <type>input</type>
- <size>10</size>
- <bindstofield>ovpnserver->step10->concurrentcon</bindstofield>
- </field>
- <field>
- <displayname>Compression</displayname>
- <name>compression</name>
- <description>&lt;br/&gt;Compress tunnel packets using the LZO algorithm. Adaptive compression will dynamically disable compression for a period of time if OpenVPN detects that the data in the packets is not being compressed efficiently.</description>
- <bindstofield>ovpnserver->step10->compression</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>dummy</name>
- <value>dummy</value>
- </option>
- </options>
- </field>
- <field>
- <displayname>Type-of-Service</displayname>
- <name>tos</name>
- <type>checkbox</type>
- <description>Set the TOS IP header value of tunnel packets to match the encapsulated packet's TOS value.</description>
- <bindstofield>ovpnserver->step10->tos</bindstofield>
- </field>
- <field>
- <displayname>Inter-Client Communication</displayname>
- <name>interclient</name>
- <type>checkbox</type>
- <description>Allow communication between clients connected to this server.</description>
- <bindstofield>ovpnserver->step10->interclient</bindstofield>
- </field>
- <field>
- <displayname>Duplicate Connections</displayname>
- <name>duplicate_cn</name>
- <type>checkbox</type>
- <description>Allow multiple concurrent connections from clients using the same Common Name.&lt;br/&gt;NOTE: This is not generally recommended, but may be needed for some scenarios.</description>
- <bindstofield>ovpnserver->step10->duplicate_cn</bindstofield>
- </field>
- <field>
- <type>listtopic</type>
- <name>Client Settings</name>
- </field>
- <field>
- <displayname>Dynamic IP</displayname>
- <name>dynip</name>
- <type>checkbox</type>
- <value>on</value>
- <description>Allow connected clients to retain their connections if their IP address changes.</description>
- <bindstofield>ovpnserver->step10->dynip</bindstofield>
- </field>
- <field>
- <displayname>Address Pool</displayname>
- <name>addrpool</name>
- <type>checkbox</type>
- <value>on</value>
- <description>Provide a virtual adapter IP address to clients (see Tunnel Network).</description>
- <bindstofield>ovpnserver->step10->addrpool</bindstofield>
- </field>
- <field>
- <displayname>DNS Default Domain</displayname>
- <name>defaultdomain</name>
- <type>input</type>
- <description>Provide a default domain name to clients.</description>
- <bindstofield>ovpnserver->step10->defaultdomain</bindstofield>
- </field>
- <field>
- <displayname>DNS Server 1</displayname>
- <name>dnsserver1</name>
- <type>input</type>
- <bindstofield>ovpnserver->step10->dns1</bindstofield>
- <description>DNS server IP to provide to connecting clients.</description>
- </field>
- <field>
- <displayname>DNS Server 2</displayname>
- <name>dnserver2</name>
- <type>input</type>
- <bindstofield>ovpnserver->step10->dns2</bindstofield>
- <description>DNS server IP to provide to connecting clients.</description>
- </field>
- <field>
- <displayname>DNS Server 3</displayname>
- <name>dnserver3</name>
- <type>input</type>
- <bindstofield>ovpnserver->step10->dns3</bindstofield>
- <description>DNS server IP to provide to connecting clients.</description>
- </field>
- <field>
- <displayname>DNS Server 4</displayname>
- <name>dnserver4</name>
- <type>input</type>
- <bindstofield>ovpnserver->step10->dns4</bindstofield>
- <description>DNS server IP to provide to connecting clients.</description>
- </field>
- <field>
- <displayname>NTP Server</displayname>
- <name>ntpserver1</name>
- <type>input</type>
- <bindstofield>ovpnserver->step10->ntp1</bindstofield>
- <description>Network Time Protocol server to provide to connecting clients.</description>
- </field>
- <field>
- <displayname>NTP Server 2</displayname>
- <name>ntpserver2</name>
- <type>input</type>
- <bindstofield>ovpnserver->step10->ntp2</bindstofield>
- <description>Network Time Protocol server to provide to connecting clients.</description>
- </field>
- <field>
- <name>nbtenable</name>
- <type>checkbox</type>
- <displayname>NetBIOS Options</displayname>
- <bindstofield>ovpnserver->step10->nbtenable</bindstofield>
- <description>Enable NetBIOS over TCP/IP. &lt;br/&gt;If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) will be disabled. </description>
- </field>
- <field>
- <displayname>NetBIOS Node Type</displayname>
- <name>nbttype</name>
- <type>select</type>
- <bindstofield>ovpnserver->step10->nbttype</bindstofield>
- <options>
- <option>
- <name>dummy</name>
- <value>dummy</value>
- </option>
- </options>
- <description>&lt;br/&gt;Possible options: b-node (broadcasts), p-node (point-to-point name queries to a WINS server), m-node (broadcast then query name server), and h-node (query name server, then broadcast).</description>
- </field>
- <field>
- <displayname>NetBIOS Scope ID</displayname>
- <name>nbtscope</name>
- <type>input</type>
- <bindstofield>ovpnserver->step10->nbtscope</bindstofield>
- <description>A NetBIOS Scope ID provides an extended naming service for NetBIOS over TCP/IP. The NetBIOS scope ID isolates NetBIOS traffic on a single network to only those nodes with the same NetBIOS scope ID.</description>
- </field>
- <field>
- <displayname>WINS Server 1</displayname>
- <name>winsserver1</name>
- <type>input</type>
- <bindstofield>ovpnserver->step10->wins1</bindstofield>
- <description>A Windows Internet Name Service (WINS) server IP to provide to connecting clients. Not desirable in most all modern networks.</description>
- </field>
- <field>
- <displayname>WINS Server 2</displayname>
- <name>winsserver2</name>
- <type>input</type>
- <bindstofield>ovpnserver->step10->wins2</bindstofield>
- <description>A Windows Internet Name Service (WINS) server IP to provide to connecting clients. Not desirable in most all modern networks.</description>
- </field>
- <field>
- <name>Advanced</name>
- <type>textarea</type>
- <cols>30</cols>
- <rows>5</rows>
- <description>Enter any additional options you would like to add to the OpenVPN server configuration here, separated by a semicolon. EXAMPLE: push "route 10.0.0.0 255.255.255.0"</description>
- <bindstofield>ovpnserver->step10->advanced</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepbeforeformdisplay>step10_stepbeforeformdisplay();</stepbeforeformdisplay>
- <stepsubmitphpaction>step10_submitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
-</step>
-<step>
- <id>11</id>
- <title>OpenVPN Wizard: Firewall Rule Configuration</title>
- <description>OpenVPN Remote Access Server Setup Wizard</description>
- <disableheader>on</disableheader>
- <fields>
- <field>
- <type>listtopic</type>
- <name>Firewall Rule Configuration</name>
- </field>
- <field>
- <type>text</type>
- <description>Firewall rules control what network traffic is permitted. You must add rules to allow traffic to the OpenVPN server's IP and port, as well as allowing traffic from connected clients through the tunnel. These rules can be automatically added here, or configured manually after completing the wizard.</description>
- </field>
- <field>
- <type>listtopic</type>
- <name>Traffic from clients to server</name>
- </field>
- <field>
- <name>ovpnrule</name>
- <displayname>Firewall Rule</displayname>
- <description>Add a rule to permit connections to this OpenVPN server process from clients anywhere on the Internet.</description>
- <type>checkbox</type>
- <bindstofield>ovpnserver->step11->ovpnrule</bindstofield>
- </field>
- <field>
- <type>listtopic</type>
- <name>Traffic from clients through VPN</name>
- </field>
- <field>
- <name>ovpnallow</name>
- <displayname>OpenVPN rule</displayname>
- <description>Add a rule to allow all traffic from connected clients to pass inside the VPN tunnel.</description>
- <type>checkbox</type>
- <bindstofield>ovpnserver->step11->ovpnallow</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
-</step>
-<step>
- <id>12</id>
- <title>OpenVPN Wizard: Finished!</title>
- <description>OpenVPN Remote Access Server Setup Wizard</description>
- <disableheader>on</disableheader>
- <fields>
- <field>
- <type>listtopic</type>
- <name>Configuration Complete!</name>
- </field>
- <field>
- <type>text</type>
- <description>Your configuration is now complete.</description>
- </field>
- <field>
- <type>text</type>
- <description>To be able to export client configurations, browse to System->Packages and install the OpenVPN Client Export package.</description>
- </field>
- <field>
- <type>submit</type>
- <name>Finish</name>
- </field>
- </fields>
- <stepsubmitphpaction>step12_submitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
-</step>
-</pfsensewizard> \ No newline at end of file
diff --git a/usr/local/www/wizards/setup_wizard.xml b/usr/local/www/wizards/setup_wizard.xml
deleted file mode 100644
index 9da0509..0000000
--- a/usr/local/www/wizards/setup_wizard.xml
+++ /dev/null
@@ -1,703 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<pfsensewizard>
-<copyright>
-/* $Id$ */
-/*
- setup_wizard.xml
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2004, 2005 Scott Ullrich
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-</copyright>
-<totalsteps>10</totalsteps>
-<step>
- <id>1</id>
- <title>pfSense Setup Wizard</title>
- <disableheader>true</disableheader>
- <description>This wizard will guide you through the initial configuration of pfSense.&lt;br/&gt;&lt;br/&gt; The wizard may be stopped at any time by clicking the logo image at the top of the screen.</description>
- <fields>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepbeforeformdisplay>
- conf_mount_rw();
- unlink_if_exists('/conf/trigger_initial_wizard');
- conf_mount_ro();
- </stepbeforeformdisplay>
-</step>
-<step>
- <id>2</id>
- <title>Bling your pfSense with pfSense Gold</title>
- <disableheader>true</disableheader>
- <description>Feel the power of a pfSense Gold subscription. Receive special benefits while supporting ongoing development of the Open Source pfSense project.&lt;br/&gt; &lt;br/&gt; Benefits include access to our AutoConfigBackup secure cloud based backup service for up to 10 hosts, pre-publication access to the updated pfSense: The Definitive Guide book in PDF, fully updated for the pfSense 2.1 release, and a monthly online MeetUp! Video conference to discuss and demonstrate advanced features and architectures using pfSense. &lt;br/&gt; &lt;br/&gt; Go to &lt;a href="https://www.pfsense.org/gold" target="_blank"&gt; pfSense Gold Subscriptions&lt;/a&gt; to sign up now &lt;br/&gt; &lt;br/&gt; </description>
- <fields>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
-</step>
-<step>
- <id>3</id>
- <title>General Information</title>
- <description>On this screen you will set the general pfSense parameters.</description>
- <fields>
- <field>
- <name>Hostname</name>
- <type>input</type>
- <bindstofield>wizardtemp->system->hostname</bindstofield>
- <description>EXAMPLE: myserver</description>
- <validate>^[a-zA-Z0-9-]+$</validate>
- <message>Invalid Hostname</message>
- </field>
- <field>
- <name>Domain</name>
- <type>input</type>
- <bindstofield>wizardtemp->system->domain</bindstofield>
- <description>EXAMPLE: mydomain.com</description>
- <validate>^[a-zA-Z0-9.-]+$</validate>
- <message>Domain name field is invalid</message>
- </field>
- <field>
- <name>DNS Resolver Behavior</name>
- <type>text</type>
- <description>The default behavior of the DNS Resolver will ignore manually configured DNS servers for client queries and query root DNS servers directly. To use the manually configured DNS servers below for client queries, visit Services &gt; DNS Resolver and enable DNS Query Forwarding after completing the wizard.</description>
- </field>
- <field>
- <name>Primary DNS Server</name>
- <type>input</type>
- <bindstofield>system->dnsserver</bindstofield>
- <!-- we must unset the fields because this is an array. -->
- <unsetfield>yes</unsetfield>
- <arraynum>0</arraynum>
- <validate>^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$</validate>
- <message>Primary DNS Server field is invalid</message>
- </field>
- <field>
- <name>Secondary DNS Server</name>
- <type>input</type>
- <bindstofield>system->dnsserver</bindstofield>
- <arraynum>1</arraynum>
- <validate>^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$</validate>
- <message>Secondary DNS Server field is invalid</message>
- </field>
- <field>
- <name>Override DNS</name>
- <description>Allow DNS servers to be overridden by DHCP/PPP on WAN</description>
- <type>checkbox</type>
- <bindstofield>system->dnsallowoverride</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepbeforeformdisplay>
- <![CDATA[
- $config['wizardtemp'] = array();
- $config['wizardtemp']['system'] = array();
- $config['wizardtemp']['system']['hostname'] = $config['system']['hostname'];
- $config['wizardtemp']['system']['domain'] = $config['system']['domain'];
- ]]>
- </stepbeforeformdisplay>
- <stepsubmitphpaction>
- <![CDATA[
- if(empty($_POST['hostname']) || !is_unqualified_hostname($_POST['hostname'])) {
- print_info_box_np("Hostname is invalid. Please press back in your browser window and correct.");
- die;
- }
- if(empty($_POST['domain']) || !is_domain($_POST['domain'])) {
- print_info_box_np("Domain is invalid. Please press back in your browser window and correct.");
- die;
- }
- if(!empty($_POST['primarydnsserver']) && !is_ipaddr($_POST['primarydnsserver'])) {
- print_info_box_np("Primary DNS server is invalid. Please press back in your browser window and correct.");
- die;
- }
- if(!empty($_POST['secondarydnsserver']) && !is_ipaddr($_POST['secondarydnsserver'])) {
- print_info_box_np("Second DNS server is invalid. Please press back in your browser window and correct.");
- die;
- }
- ]]>
- </stepsubmitphpaction>
-</step>
-<step>
- <id>4</id>
- <title>Time Server Information</title>
- <description>Please enter the time, date and time zone.</description>
- <fields>
- <field>
- <name>Time server hostname</name>
- <description>Enter the hostname (FQDN) of the time server.</description>
- <type>input</type>
- <bindstofield>system->timeservers</bindstofield>
- </field>
- <field>
- <name>Timezone</name>
- <type>timezone_select</type>
- <bindstofield>system->timezone</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepsubmitphpaction>
- <![CDATA[
- foreach (explode(' ', $_POST['timeserverhostname']) as $ts) {
- if (!is_domain($ts)) {
- print_info_box_np(gettext("NTP Time Server names may only contain the characters a-z, 0-9, '-' and '.'. Entries may be separated by spaces. Please press back in your browser window and correct."));
- die;
- }
- }
- ]]>
- </stepsubmitphpaction>
-</step>
-<step>
- <id>5</id>
- <disableallfieldsbydefault>true</disableallfieldsbydefault>
- <title>Configure WAN Interface</title>
- <description>On this screen we will configure the Wide Area Network information.</description>
- <javascriptafterformdisplay>
- var selectedItem = 0;
- if(document.forms[0].ipaddress.value == 'dhcp') {
- selectedItem = 1;
- document.forms[0].ipaddress.value = '';
- } else if(document.forms[0].ipaddress.value == 'pppoe') {
- selectedItem = 2;
- document.forms[0].ipaddress.value = '';
- } else if(document.forms[0].ipaddress.value == 'pptp') {
- selectedItem = 3;
- document.forms[0].ipaddress.value = '';
- } else if(document.forms[0].ipaddress.value == 'ppp' || document.forms[0].ipaddress.value == 'l2tp') {
- document.forms[0].ipaddress.value = '';
- } else {
- selectedItem = 0;
- }
- document.forms[0].selectedtype.selectedIndex = selectedItem;
- enableitems(selectedItem);
- </javascriptafterformdisplay>
- <fields>
- <field>
- <name>SelectedType</name>
- <type>select</type>
- <donotdisable>true</donotdisable>
- <options>
- <option>
- <name>Static</name>
- <value>Static</value>
- <enablefields>ipaddress,subnetmask,upstreamgateway</enablefields>
- </option>
- <option>
- <name>DHCP</name>
- <value>dhcp</value>
- <enablefields>dhcphostname</enablefields>
- </option>
- <option>
- <name>PPPoE</name>
- <value>pppoe</value>
- <enablefields>pppoeusername,pppoepassword,pppoeservicename,pppoedialondemand,pppoeidletimeout</enablefields>
- </option>
- <option>
- <name>PPTP</name>
- <value>pptp</value>
- <enablefields>pptpusername,pptppassword,pptplocalipaddress,pptplocalsubnet,pptpremoteipaddress,pptpdialondemand,pptpidletimeout
- </enablefields>
- </option>
- </options>
- </field>
- <field>
- <name>General configuration</name>
- <type>listtopic</type>
- </field>
- <field>
- <donotdisable>true</donotdisable>
- <name>MAC Address</name>
- <bindstofield>interfaces->wan->spoofmac</bindstofield>
- <type>input</type>
- <description> This field can be used to modify ("spoof") the MAC address of the WAN interface (may be required with some cable connections). Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx or leave blank.</description>
- <validate>^([0-9a-f]{2}([:-]||$)){6}$</validate>
- <message>MAC Address field is invalid</message>
- </field>
- <field>
- <donotdisable>true</donotdisable>
- <name>MTU</name>
- <type>input</type>
- <bindstofield>interfaces->wan->mtu</bindstofield>
- <description> Set the MTU of the WAN interface. If you leave this field blank, an MTU of 1492 bytes for PPPoE and 1500 bytes for all other connection types will be assumed.</description>
- </field>
- <field>
- <donotdisable>true</donotdisable>
- <name>MSS</name>
- <type>input</type>
- <bindstofield>interfaces->wan->mss</bindstofield>
- <description> If you enter a value in this field, then MSS clamping for TCP connections to the value entered above minus 40 (TCP/IP header size) will be in effect. If you leave this field blank, an MSS of 1492 bytes for PPPoE and 1500 bytes for all other connection types will be assumed. This should match the above MTU value in most all cases.</description>
- </field>
- <field>
- <name>Static IP Configuration</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>IP Address</name>
- <bindstofield>interfaces->wan->ipaddr</bindstofield>
- <type>input</type>
- <typehint> / </typehint>
- <combinefieldsbegin>true</combinefieldsbegin>
- <validate>^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$</validate>
- <message>IP Address field is invalid</message>
- </field>
- <field>
- <combinefieldsend>true</combinefieldsend>
- <dontdisplayname>true</dontdisplayname>
- <dontcombinecells>true</dontcombinecells>
- <name>Subnet Mask</name>
- <bindstofield>interfaces->wan->subnet</bindstofield>
- <type>subnet_select</type>
- </field>
- <field>
- <name>Upstream Gateway</name>
- <bindstofield>wizardtemp->wangateway</bindstofield>
- <type>input</type>
- <validate>^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$</validate>
- <message>Gateway IP Address field is invalid</message>
- </field>
- <field>
- <name>DHCP client configuration</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>DHCP Hostname</name>
- <type>input</type>
- <bindstofield>interfaces->wan->dhcphostname</bindstofield>
- <description> The value in this field is sent as the DHCP client identifier and hostname when requesting a DHCP lease. Some ISPs may require this (for client identification).</description>
- </field>
- <field>
- <name>PPPoE configuration</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>PPPoE Username</name>
- <type>input</type>
- <bindstofield>wizardtemp->wan->username</bindstofield>
- </field>
- <field>
- <name>PPPoE Password</name>
- <type>input</type>
- <bindstofield>wizardtemp->wan->password</bindstofield>
- </field>
- <field>
- <name>PPPoE Service name</name>
- <type>input</type>
- <description>Hint: this field can usually be left empty</description>
- <bindstofield>wizardtemp->wan->provider</bindstofield>
- </field>
- <field>
- <name>PPPoE Dial on demand</name>
- <typehint>Enable Dial-On-Demand mode</typehint>
- <type>checkbox</type>
- <description>This option causes the interface to operate in dial-on-demand mode, allowing you to have a virtual full time connection. The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected.</description>
- <bindstofield>wizardtemp->wan->ondemand</bindstofield>
- </field>
- <field>
- <name>PPPoE Idle timeout</name>
- <type>input</type>
- <description>If no qualifying outgoing packets are transmitted for the specified number of seconds, the connection is brought down. An idle timeout of zero disables this feature.</description>
- <bindstofield>wizardtemp->wan->idletimeout</bindstofield>
- </field>
- <field>
- <name>PPTP configuration</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>PPTP Username</name>
- <type>input</type>
- <bindstofield>wizardtemp->wan->pptpusername</bindstofield>
- </field>
- <field>
- <name>PPTP Password</name>
- <type>input</type>
- <bindstofield>wizardtemp->wan->pptppassword</bindstofield>
- </field>
- <field>
- <combinefieldsbegin>true</combinefieldsbegin>
- <name>PPTP Local IP Address</name>
- <type>input</type>
- <typehint> / </typehint>
- <bindstofield>wizardtemp->wan->localip</bindstofield>
- <validate>^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$</validate>
- <message>PPTP Local IP Address field is invalid</message>
- </field>
- <field>
- <combinefieldsend>true</combinefieldsend>
- <dontdisplayname>true</dontdisplayname>
- <dontcombinecells>true</dontcombinecells>
- <name>pptplocalsubnet</name>
- <bindstofield>wizardtemp->wan->subnet</bindstofield>
- <type>subnet_select</type>
- </field>
- <field>
- <name>PPTP Remote IP Address</name>
- <bindstofield>wizardtemp->wan->gateway</bindstofield>
- <type>input</type>
- <validate>^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$</validate>
- <message>PPTP Remote IP Address field is invalid</message>
- </field>
- <field>
- <name>PPTP Dial on demand</name>
- <typehint>Enable Dial-On-Demand mode</typehint>
- <type>checkbox</type>
- <bindstofield>wizardtemp->wan->pptpondemand</bindstofield>
- <description>This option causes the interface to operate in dial-on-demand mode, allowing you to have a virtual full time connection. The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected.</description>
- </field>
- <field>
- <name>PPTP Idle timeout</name>
- <type>input</type>
- <bindstofield>wizardtemp->wan->pptpidletimeout</bindstofield>
- <description>If no qualifying outgoing packets are transmitted for the specified number of seconds, the connection is brought down. An idle timeout of zero disables this feature.</description>
- </field>
- <field>
- <name>RFC1918 Networks</name>
- <type>listtopic</type>
- </field>
- <field>
- <donotdisable>true</donotdisable>
- <name>Block RFC1918 Private Networks</name>
- <description> When set, this option blocks traffic from IP addresses that are reserved for private networks as per RFC 1918 (10/8, 172.16/12, 192.168/16) as well as loopback addresses (127/8). You should generally leave this option turned on, unless your WAN network lies in such a private address space, too.</description>
- <type>checkbox</type>
- <bindstofield>interfaces->wan->blockpriv</bindstofield>
- <typehint>Block private networks from entering via WAN</typehint>
- </field>
- <field>
- <name>Block bogon networks</name>
- <type>listtopic</type>
- </field>
- <field>
- <donotdisable>true</donotdisable>
- <name>Block bogon networks</name>
- <description>When set, this option blocks traffic from IP addresses that are reserved (but not RFC 1918) or not yet assigned by IANA. Bogons are prefixes that should never appear in the Internet routing table, and obviously should not appear as the source address in any packets you receive.</description>
- <type>checkbox</type>
- <bindstofield>interfaces->wan->blockbogons</bindstofield>
- <typehint>Block non-Internet routed networks from entering via WAN</typehint>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepbeforeformdisplay>
- <![CDATA[
- if (empty($config['interfaces']['wan']['gateway'])) {
- $wangw_name = "WANGW";
- } else {
- $wangw_name = $config['interfaces']['wan']['gateway'];
- }
- if (is_array($config['gateways']['gateway_item']))
- foreach ($config['gateways']['gateway_item'] as $gw)
- if ($gw['name'] == $wangw_name || (!empty($config['wizardtemp']['wangateway']) && $gw['gateway'] == $config['wizardtemp']['wangateway']))
- $config['wizardtemp']['wangateway'] = $gw['gateway'];
- ]]>
- </stepbeforeformdisplay>
- <stepsubmitphpaction>
- <![CDATA[
- if(!empty($_POST['mtu']) && ($_POST['mtu'] < 576)) {
- print_info_box_np("MTU Must be at least 576 (Per RFC 791). Please press back in your browser window and correct.");
- die;
- }
- if(!empty($_POST['macaddress']) && !is_macaddr($_POST['macaddress'])) {
- print_info_box_np("Invalid MAC Address. Please press back in your browser window and correct.");
- die;
- }
- if(!empty($_POST['ipaddress']) && ($_POST['selectedtype'] == "Static")) {
- if (!is_ipaddr($_POST['ipaddress'])) {
- print_info_box_np("Invalid WAN IP Address. Please press back in your browser window and correct.");
- die;
- }
- if ($_POST['subnetmask'] < 31 &&
- ($_POST['ipaddress'] == gen_subnet($_POST['ipaddress'], $_POST['subnetmask']) ||
- $_POST['ipaddress'] == gen_subnet_max($_POST['ipaddress'], $_POST['subnetmask']))) {
- print_info_box_np("Invalid WAN IP Address. Please press back in your browser window and correct.");
- die;
- }
- }
- if(!empty($_POST['dhcphostname']) && !is_hostname($_POST['dhcphostname'])) {
- print_info_box_np("Invalid DHCP Hostname. Please press back in your browser window and correct.");
- die;
- }
- if(!empty($_POST['pptplocalipaddress']) && !is_ipaddr($_POST['pptplocalipaddress'])) {
- print_info_box_np("Invalid PPTP Local IP Address. Please press back in your browser window and correct.");
- die;
- }
- if(!empty($_POST['pptpremoteipaddress']) && !is_ipaddr($_POST['pptpremoteipaddress'])) {
- print_info_box_np("Invalid PPTP Remote IP Address. Please press back in your browser window and correct.");
- die;
- }
- $type = $_POST['selectedtype'];
-
- if (!is_array($config['ppps']['ppp']))
- $config['ppps']['ppp'] = array();
- if (count($config['ppps']['ppp'])) {
- foreach ($config['ppps']['ppp'] as $pppid => $ppp) {
- if ($ppp['ptpid'] == "0") {
- if ((substr($config['interfaces']['wan']['if'],0,5) == "pppoe") || (substr($config['interfaces']['wan']['if'],0,4) == "pptp")) {
- $oldif = explode(",", $ppp['ports']);
- $config['interfaces']['wan']['if'] = $oldif[0];
- }
- if ($type == "pppoe" || $type == "pptp")
- unset($config['ppps']['ppp'][$pppid]);
- }
- }
- }
-
- if ($type == "pppoe" || $type == "pptp") {
- if ($type == "pptp") {
- $config['wizardtemp']['wan']['username'] = $config['wizardtemp']['wan']['pptpusername'];
- $config['wizardtemp']['wan']['password'] = $config['wizardtemp']['wan']['pptppassword'];
- $config['wizardtemp']['wan']['ondemand'] = $config['wizardtemp']['wan']['pptpondemand'];
- $config['wizardtemp']['wan']['idletimeout'] = $config['wizardtemp']['wan']['pptpidletimeout'];
- unset($config['wizardtemp']['wan']['pptpusername']);
- unset($config['wizardtemp']['wan']['pptppassword']);
- unset($config['wizardtemp']['wan']['pptpondemand']);
- unset($config['wizardtemp']['wan']['pptpidletimeout']);
- }
- $config['wizardtemp']['wan']['password'] = base64_encode($config['wizardtemp']['wan']['password']);
- $tmp = array();
- $tmp['ptpid'] = "0";
- $tmp['type'] = $type;
- $tmp['if'] = $type . "0";
- $tmp['ports'] = $config['interfaces']['wan']['if'];
- $config['ppps']['ppp'][] = array_merge($tmp, $config['wizardtemp']['wan']);
- unset($tmp);
- $config['interfaces']['wan']['if'] = $type."0";
- }
- unset($config['wizardtemp']['wan']);
- ]]>
- </stepsubmitphpaction>
- <stepsubmitbeforesave>
- <![CDATA[
- if($_POST['selectedtype'] == "Static") {
-
- } else {
- $_POST['ipaddress'] = $_POST['selectedtype'];
- $config['interfaces']['wan']['ipaddr'] = $_POST['selectedtype'];
- write_config();
- if(!$config['interfaces']['lan'])
- header("Location: /wizard.php?xml=setup_wizard.xml&stepid=6&next=Next");
- }
- ]]>
- </stepsubmitbeforesave>
-</step>
-<step>
- <id>6</id>
- <title>Configure LAN Interface</title>
- <description>On this screen we will configure the Local Area Network information.</description>
- <fields>
- <field>
- <name>LAN IP Address</name>
- <type>input</type>
- <bindstofield>interfaces->lan->ipaddr</bindstofield>
- <description>Type dhcp if this interface uses DHCP to obtain its IP address.</description>
- <validate>^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$</validate>
- <message>LAN IP Address field is invalid</message>
- </field>
- <field>
- <name>Subnet Mask</name>
- <type>subnet_select</type>
- <bindstofield>interfaces->lan->subnet</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepsubmitphpaction>
- <![CDATA[
- if(empty($_POST['lanipaddress']) || !is_ipaddr($_POST['lanipaddress'])) {
- print_info_box_np("Invalid LAN IP Address. Please press back in your browser window and correct.");
- die;
- }
-
- $lowestip = gen_subnet($_POST['lanipaddress'], $_POST['subnetmask']);
- $highestip = gen_subnet_max($_POST['lanipaddress'], $_POST['subnetmask']);
-
- if ($_POST['subnetmask'] < 31) {
- if ($_POST['lanipaddress'] == $lowestip) {
- print_info_box_np("LAN IP Address equals subnet network address. This is not allowed. Please press back in your browser window and correct.");
- die;
- }
- if ($_POST['lanipaddress'] == $highestip) {
- print_info_box_np("LAN IP Address equals subnet broadcast address. This is not allowed. Please press back in your browser window and correct.");
- die;
- }
- } else {
- print_info_box_np("Invalid subnet mask, choose a mask less than 31. Please press back in your browser window and correct.");
- die;
- }
-
- $ipaddresses_before = ip_range_size_v4($lowestip, $_POST['lanipaddress']);
- $ipaddresses_after = ip_range_size_v4($_POST['lanipaddress'], $highestip);
-
- if ($ipaddresses_after >= $ipaddresses_before) {
- // The LAN IP is in the 1st half of the subnet, so put DHCP in the 2nd half.
- if ($ipaddresses_after > 30) {
- // There is reasonable space in the subnet, use a smaller chunk of the space for DHCP
- // This case will work out like the old defaults if the user has specified the ".1" address.
- // The range will be something like ".10" to ".245"
- $config['dhcpd']['lan']['range']['from'] = ip_after($_POST['lanipaddress'], 9);
- $config['dhcpd']['lan']['range']['to'] = ip_before($highestip, 10);
- } else {
- // There is not much space in the subnet, so allocate everything above the LAN IP to DHCP.
- $config['dhcpd']['lan']['range']['from'] = ip_after($_POST['lanipaddress']);
- $config['dhcpd']['lan']['range']['to'] = ip_before($highestip);
- }
- } else {
- // The LAN IP is in the 2nd half of the subnet, so put DHCP in the 1st half.
- if ($ipaddresses_before > 30) {
- // There is reasonable space in the subnet, use a smaller chunk of the space for DHCP
- $config['dhcpd']['lan']['range']['from'] = ip_after($lowestip, 10);
- $config['dhcpd']['lan']['range']['to'] = ip_before($_POST['lanipaddress'], 9);
- } else {
- // There is not much space in the subnet, so allocate everything below the LAN IP to DHCP.
- $config['dhcpd']['lan']['range']['from'] = ip_after($lowestip);
- $config['dhcpd']['lan']['range']['to'] = ip_before($_POST['lanipaddress']);
- }
- }
- ]]>
- </stepsubmitphpaction>
-</step>
-<step>
- <id>7</id>
- <title>Set Admin WebGUI Password</title>
- <description>On this screen we will set the admin password, which is used to access the WebGUI and also SSH services if you wish to enable them.</description>
- <fields>
- <field>
- <name>Admin Password</name>
- <type>password</type>
- </field>
- <field>
- <name>Admin Password AGAIN</name>
- <type>password</type>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepsubmitphpaction>
- if($_POST['adminpassword'] != "") {
- if($_POST['adminpassword'] == $_POST['adminpasswordagain']) {
- $admin_user =&amp; getUserEntryByUID(0);
- local_user_set_password($admin_user, $_POST['adminpassword']);
- local_user_set($admin_user);
- write_config();
- } else {
- print_info_box_np("Passwords do not match! Please press back in your browser window and correct.");
- die;
- }
- }
- </stepsubmitphpaction>
-</step>
-<step>
- <id>8</id>
- <title>Reload configuration</title>
- <disableheader>true</disableheader>
- <description>Click 'Reload' to reload pfSense with new changes.</description>
- <fields>
- <field>
- <name>Reload</name>
- <type>submit</type>
- </field>
- </fields>
-</step>
-<step>
- <id>9</id>
- <title>Reload in progress</title>
- <description>
- A reload is now in progress. Please wait. &lt;p&gt;
- &lt;meta http-equiv="refresh" content="5; url=wizard.php?xml=setup_wizard.xml&amp;stepid=9" &gt;
- &lt;p&gt;
- The wizard will redirect to the next step once the reload is completed.
- </description>
- <stepafterformdisplay>
- <![CDATA[
- $config['system']['hostname'] = $config['wizardtemp']['system']['hostname'];
- $config['system']['domain'] = $config['wizardtemp']['system']['domain'];
- if (!empty($config['wizardtemp']['wangateway'])) {
- if (!is_array($config['gateways']['gateway_item']))
- $config['gateways']['gateway_item'] = array();
- $found = false;
- $defaultgw_found = false;
- foreach ($config['gateways']['gateway_item'] as & $gw) {
- if ($gw['interface'] != "wan")
- continue;
- if (isset($gw['defaultgw']))
- $defaultgw_found = true;
- if ($gw['name'] == 'WANGW' || (!empty($config['wizardtemp']['wangateway']) && $gw['gateway'] == $config['wizardtemp']['wangateway'])) {
- $found = true;
- $gw['gateway'] = $config['wizardtemp']['wangateway'];
- $config['interfaces']['wan']['gateway'] = $gw['name'];
- }
- }
- if (!$found) {
- $newgw = array();
- $newgw['interface'] = "wan";
- $newgw['gateway'] = $config['wizardtemp']['wangateway'];
- $newgw['name'] = "WANGW";
- $newgw['weight'] = 1;
- $newgw['descr'] = "WAN Gateway";
- $newgw['defaultgw'] = !$defaultgw_found;
- $config['gateways']['gateway_item'][] = $newgw;
- $config['interfaces']['wan']['gateway'] = "WANGW";
- }
- }
- unset($config['wizardtemp']);
- write_config();
- reload_all();
- mwexec_bg("/etc/rc.update_bogons.sh now");
- ]]>
- </stepafterformdisplay>
-</step>
-<step>
- <id>10</id>
- <title>Wizard completed.</title>
- <stepbeforeformdisplay>
- <![CDATA[
- if($g['product_name'] <> 'pfSense') {
- header("Location: " . fixup_string("\$myurl"));
- exit;
- }
- ]]>
- </stepbeforeformdisplay>
- <description>
- <![CDATA[
- Congratulations! pfSense is now configured.<p/>
- Please consider contributing back to the project!<p/>
- Click <a target='_new' href='https://www.pfsense.org/get-involved/index.html'>here</a> to purchase services offered by the pfSense team and find other ways to contribute.<p/>
- Click <a href='$myurl'>here</a> to continue on to pfSense webConfigurator.
- ]]>
- </description>
-</step>
-</pfsensewizard>
diff --git a/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc b/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc
deleted file mode 100644
index d984fed..0000000
--- a/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc
+++ /dev/null
@@ -1,1664 +0,0 @@
-<?php
-/*
- traffic_shaper_wizard_dedicated.inc
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2006 Bill Marquette - bill.marquette@gmail.com.
- Copyright (C) 2006 Scott Ullrich - sullrich@pfsense.com.
- Copyright (C) 2008-2010 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-function step1_stepbeforeformdisplay() {
- global $stepid, $savemsg, $pkg;
-
- $fields =& $pkg['step'][0]['fields']['field'];
-
- $wans = 0;
- $lans = 0;
-
- $iflisttmp = get_configured_interface_with_descr();
- foreach ($iflisttmp as $if => $ifdesc) {
- if (!is_altq_capable(get_real_interface($if)))
- continue;
- if (interface_has_gateway($if) || interface_has_gatewayv6($if))
- $wans++;
- else
- $lans++;
- }
-
- foreach ($fields as &$field)
- if ($field['name'] == 'numberofconnections')
- $field['value'] = ($wans < $lans ? $wans : $lans);
-}
-
-function step1_submitphpaction() {
- global $stepid, $savemsg;
-
- if (!isset($_POST['numberofconnections'])) {
- $savemsg=gettext("You need to specify the number of connections.");
- $stepid--;
- return;
- }
- if (intval($_POST['numberofconnections']) < 1) {
- $savemsg=gettext("The number of connections should be greater than 1.");
- $stepid--;
- return;
- }
-}
-
-function step2_stepbeforeformdisplay() {
- global $config, $pkg;
- global $stepid, $savemsg;
-
- $wans = 0;
- $lans = 0;
- $iflist = array();
- $iflisttmp = get_configured_interface_with_descr();
- foreach ($iflisttmp as $if => $ifdesc) {
- if (!is_altq_capable(get_real_interface($if)))
- continue;
- if (interface_has_gateway($if) || interface_has_gatewayv6($if))
- $wans++;
- else
- $lans++;
- $iflist[$if] = $ifdesc;
- }
- $numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']);
- if ($numberofconnections > ($wans < $lans ? $wans : $lans)) {
- $savemsg=gettext("You have less interfaces than number of connections!");
- $stepid--;
- return;
- }
-
- $cfgname = "traffic_shaper_wizard_dedicated.xml";
-
- $fields =& $pkg['step'][1]['fields']['field'];
-
- /*
- unset($config['ezshaper']['step2']);
- $config['ezshaper']['step2'] = array();
- write_config();
- */
- $fields = array();
-
- for ($i = 0; $i < $numberofconnections; $i++) {
- $field = array();
- $linknum = $i+1;
- $ifsel = ($i * 2);
- $field['name'] = "Connection #{$linknum} parameters";
- $field['type'] = "listtopic";
- $fields[] = $field;
-
- $field = array();
- $field['displayname'] = "Local interface";
- $field['name'] = "local{$i}interface";
- $field['type'] = "select";
- $field['options']['option'] = array();
- $ifcnt = 0;
- foreach ($iflist as $ifname => $ifdescr) {
- // Skip wan interfaces here
- if (interface_has_gateway($ifname) || interface_has_gatewayv6($ifname))
- continue;
- if ($ifcnt == ($ifsel + 1))
- $field['value'] = $ifname;
- $opts = array();
- $opts['displayname'] = $ifdescr;
- $opts['name'] = $ifname;
- $opts['value'] = $ifname;
- $field['options']['option'][] = $opts;
- $ifcnt++;
- }
- $field['combinefieldsbegin'] = "true";
- $field['bindstofield'] = "ezshaper->step2->local{$i}interface";
- $fields[] = $field;
-
- $field = array();
- $field['combinefieldsend'] = "true";
- $field['dontdisplayname'] = "true";
- $field['dontcombinecells'] = "true";
- $field['name'] = "local{$i}downloadscheduler";
- $field['type'] = "select";
- $field['typehint'] = "Queueing discipline to apply on the download of this connection.";
- $field['options']['option'] = array();
- $opts = array();
- $opts['name'] = "HFSC";
- $opts['value'] = "HFSC";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['name'] = "CBQ";
- $opts['value'] = "CBQ";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['name'] = "PRIQ";
- $opts['value'] = "PRIQ";
- $field['options']['option'][] = $opts;
- $field['bindstofield'] = "ezshaper->step2->local{$i}downloadscheduler";
- $fields[] = $field;
-
- $field = array();
- $field['displayname'] = "WAN Interface";
- $field['name'] = "conn{$i}interface";
- $field['type'] = "select";
- $field['options']['option'] = array();
- $ifcnt = 0;
- foreach ($iflist as $ifname => $ifdescr) {
- // Skip lan interfaces here
- if (!interface_has_gateway($ifname) && !interface_has_gatewayv6($ifname))
- continue;
- if ($ifcnt == $ifsel)
- $field['value'] = $ifname;
- $opts = array();
- $opts['displayname'] = $ifdescr;
- $opts['name'] = $ifname;
- $opts['value'] = $ifname;
- $field['options']['option'][] = $opts;
- $ifcnt++;
- }
- $field['bindstofield'] = "ezshaper->step2->conn{$i}interface";
- $field['combinefieldsbegin'] = "true";
- $fields[] = $field;
-
- $field = array();
- $field['name'] = "conn{$i}uploadscheduler";
- $field['combinefieldsend'] = "true";
- $field['dontdisplayname'] = "true";
- $field['dontcombinecells'] = "true";
- $field['type'] = "select";
- $field['typehint'] = "Queueing discipline to apply on the upload of this connection.";
- $field['options']['option'] = array();
- $opts = array();
- $opts['name'] = "HFSC";
- $opts['value'] = "HFSC";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['name'] = "CBQ";
- $opts['value'] = "CBQ";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['name'] = "PRIQ";
- $opts['value'] = "PRIQ";
- $field['options']['option'][] = $opts;
- $field['bindstofield'] = "ezshaper->step2->conn{$i}uploadscheduler";
- $fields[] = $field;
-
- $field = array();
- $field['displayname'] = "Upload";
- $field['name'] = "conn{$i}upload";
- $field['type'] = "input";
- $field['bindstofield'] = "ezshaper->step2->conn{$i}upload";
- $field['combinefieldsbegin'] = "true";
- $fields[] = $field;
-
- $field = array();
- $field['combinefieldsend'] = "true";
- $field['dontdisplayname'] = "true";
- $field['dontcombinecells'] = "true";
- $field['name'] = "conn{$i}uploadspeed";
- $field['typehint'] = "Upload bandwidth on this connection.";
- $field['type'] = "select";
- $field['options']['option'] = array();
- $opts = array();
- $opts['value'] = "Kb";
- $opts['name'] = "Kbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Mb";
- $opts['name'] = "Mbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Gb";
- $opts['name'] = "Gbit/s";
- $field['options']['option'][] = $opts;
- $field['bindstofield'] = "ezshaper->step2->conn{$i}uploadspeed";
- $fields[] = $field;
-
- $field = array();
- $field['displayname'] = "Download";
- $field['name'] = "conn{$i}download";
- $field['type'] = "input";
- $field['bindstofield'] = "ezshaper->step2->conn{$i}download";
- $field['combinefieldsbegin'] = "true";
- $fields[] = $field;
-
- $field = array();
- $field['combinefieldsend'] = "true";
- $field['dontdisplayname'] = "true";
- $field['dontcombinecells'] = "true";
- $field['name'] = "conn{$i}downloadspeed";
- $field['typehint'] = "Download bandwidth on this connection.";
- $field['type'] = "select";
- $field['options']['option'] = array();
- $opts = array();
- $opts['value'] = "Kb";
- $opts['name'] = "Kbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Mb";
- $opts['name'] = "Mbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Gb";
- $opts['name'] = "Gbit/s";
- $field['options']['option'][] = $opts;
- $field['bindstofield'] = "ezshaper->step2->conn{$i}downloadspeed";
- $fields[] = $field;
- }
- $field = array();
- $field['name'] = "Next";
- $field['type'] = "submit";
- $fields[] = $field;
-}
-
-function step2_stepsubmitphpaction() {
- global $config;
- global $stepid, $savemsg;
- $sumdownloads = 0;
-
- /* Input Validation */
- $steps = intval($config['ezshaper']['step1']['numberofconnections']);
- for ($i = 0; $i < $steps; $i++) {
- for ($j = $i + 1; $j <= $steps; $j++) {
- if ($_POST["conn{$i}interface"] == $_POST["conn{$j}interface"] || $_POST["conn{$i}interface"] == $_POST["local{$j}interface"]) {
- $savemsg=gettext("You cannot select the same interface for connections {$i} and {$j}.");
- $stepid--;
- return;
- }
- if (trim($_POST["conn{$i}uploadscheduler"]) != "PRIQ") {
- if (!is_numeric($_POST["conn{$i}upload"])) {
- $savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
- $stepid--;
- return;
- }
- if (!is_numeric($_POST["conn{$i}download"])) {
- $savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
- $stepid--;
- return;
- }
- $upbw = $_POST["conn{$i}upload"];
- $downbw = $_POST["conn{$i}download"];
- if ($upbw < 1 || $downbw < 1) {
- $savemsg = gettext("You cannot specify bandwidth smaller than 1!");
- $stepid--;
- return;
- }
- if (intval($upbw) < 128 && $_POST["conn{$i}uploadspeed"] == "Kb" && trim($_POST["conn{$i}uploadscheduler"]) == "CBQ") {
- $savemsg=gettext("Uploads smaller than 128Kbit/s is not supported for connection {$i} on CBQ scheduler.");
- $stepid--;
- return;
- }
- }
- if ($_POST["local{$i}interface"] == $_POST["conn{$j}interface"] || $_POST["local{$i}interface"] == $_POST["local{$j}interface"]) {
- $savemsg=gettext("You cannot select the same interface for local and outside.");
- $stepid--;
- return;
- }
- }
- }
-
- /* This is necessary since the wizard expects predefined fields. */
- unset($config['ezshaper']['step2']);
- $config['ezshaper']['step2'] = array();
-
- for ($i = 0; $i < $steps; $i++) {
- $config['ezshaper']['step2']["local{$i}downloadscheduler"] = $_POST["local{$i}downloadscheduler"];
- $config['ezshaper']['step2']["local{$i}interface"] = $_POST["local{$i}interface"];
- $config['ezshaper']['step2']["conn{$i}uploadscheduler"] = $_POST["conn{$i}uploadscheduler"];
- $config['ezshaper']['step2']["conn{$i}upload"] = $_POST["conn{$i}upload"];
- $config['ezshaper']['step2']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"];
- $config['ezshaper']['step2']["conn{$i}download"] = $_POST["conn{$i}download"];
- $config['ezshaper']['step2']["conn{$i}downloadspeed"] = $_POST["conn{$i}downloadspeed"];
- $config['ezshaper']['step2']["conn${i}interface"] = $_POST["conn{$i}interface"];
- }
-}
-
-function step3_stepbeforeformdisplay() {
- global $config, $pkg;
- global $stepid, $savemsg;
-
- $cfgname = "traffic_shaper_wizard_dedicated.xml";
-
- $numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']);
-
- $fields =& $pkg['step'][1]['fields']['field'];
-
- $voipfields =& $pkg['step'][2]['fields']['field'];
-
- $voipfields = array();
- $enablefields = array();
-
- $field = array();
- $field['name'] = "Enable";
- $field['type'] = "checkbox";
- $field['typehint'] = "Prioritize Voice over IP traffic.";
- $field['bindstofield'] = "ezshaper->step3->enable";
- $field['descritpion'] = "This will raise the priority of VOIP traffic above all other traffic.";
- $voipfields[] = $field;
-
- $field = array();
- $field['name'] = "Next";
- $field['type'] = "submit";
- $voipfields[] = $field;
-
- $field = array();
- $field['name'] = "VOIP specific settings";
- $field['type'] = "listtopic";
- $voipfields[] = $field;
-
- $field = array();
- $field['name'] = "Provider";
- $enablefields[] = "Provider";
- $field['type'] = "select";
- $field['description'] = "Choose Generic if your provider isn't listed.";
- $field['options']['option'] = array();
- $opts = array();
- $opts['name'] = "Generic (lowdelay)";
- $opts['value'] = "Generic";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['name'] = "VoicePulse";
- $opts['value'] = "VoicePulse";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['name'] = "Asterisk/Vonage";
- $opts['value'] = "Asterisk";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['name'] = "PanasonicTDA";
- $opts['value'] = "Panasonic";
- $field['options']['option'][] = $opts;
- $field['bindstofield'] = "ezshaper->step3->provider";
- $voipfields[] = $field;
-
- $field = array();
- $field['displayname'] = "Upstream SIP Server";
- $field['name'] = "upstream_sip_server";
- $enablefields[] = "upstream_sip_server";
- $field['type'] = "inputalias";
- $field['description'] = "(Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the <strong>remote</strong> PBX or SIP Trunk to prioritize. <br />NOTE: You can also use a Firewall Alias in this location.";
- $field['message'] = "IP Address field is non-blank and doesn't look like an IP address.";
- $field['bindstofield'] = "ezshaper->step3->address";
- $voipfields[] = $field;
-
- for ($i = 0; $i < $numberofconnections; $i++) {
- $connum = $i + 1;
- $field = array();
- $field['name'] = "Connection #{$connum} parameters";
- $field['type'] = "listtopic";
- $voipfields[] = $field;
-
- $field = array();
- $field['displayname'] = "Upload";
- $field['name'] = "conn{$i}upload";
- $enablefields[] = "conn{$i}upload";
- $field['type'] = "input";
- $field['bindstofield'] = "ezshaper->step3->conn{$i}upload";
- $field['combinefieldsbegin'] = "true";
- $voipfields[] = $field;
-
- $field = array();
- $field['combinefieldsend'] = "true";
- $field['dontdisplayname'] = "true";
- $field['dontcombinecells'] = "true";
- $field['name'] = "conn{$i}uploadspeed";
- $enablefields[] = "conn{$i}uploadspeed";
- $field['typehint'] = "Upload bandwidth guarantee for VOIP phone(s) on connection {$i}.";
- $field['type'] = "select";
- $field['options']['option'] = array();
- $opts = array();
- $opts['value'] = "Kb";
- $opts['name'] = "Kbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Mb";
- $opts['name'] = "Mbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Gb";
- $opts['name'] = "Gbit/s";
- $field['options']['option'][] = $opts;
- $field['bindstofield'] = "ezshaper->step3->conn{$i}uploadspeed";
- $voipfields[] = $field;
-
- $field = array();
- $field['displayname'] = "Download";
- $field['name'] = "local{$i}download";
- $enablefields[] = "local{$i}download";
- $field['type'] = "input";
- $field['bindstofield'] = "ezshaper->step3->local{$i}download";
- $field['combinefieldsbegin'] = "true";
- $voipfields[] = $field;
-
- $field = array();
- $field['combinefieldsend'] = "true";
- $field['dontdisplayname'] = "true";
- $field['dontcombinecells'] = "true";
- $field['name'] = "local{$i}downloadspeed";
- $enablefields[] = "local{$i}downloadspeed";
- $field['typehint'] = "Download bandwidth guarantee for VOIP phone(s) on connections.";
- $field['type'] = "select";
- $field['options']['option'] = array();
- $opts = array();
- $opts['value'] = "Kb";
- $opts['name'] = "Kbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Mb";
- $opts['name'] = "Mbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Gb";
- $opts['name'] = "Gbit/s";
- $field['options']['option'][] = $opts;
- $field['bindstofield'] = "ezshaper->step3->local{$i}downloadspeed";
- $voipfields[] = $field;
- }
-
- $field = array();
- $field['name'] = "Next";
- $field['type'] = "submit";
- $voipfields[] = $field;
- $voipfields[0]['enablefields'] = implode(",", $enablefields);
-}
-
-function step3_stepsubmitphpaction() {
- global $config;
- global $stepid, $savemsg;
-
- if (!$_POST['enable'])
- return;
-
- if($_POST['upstream_sip_server']) {
- if(!is_ipaddroralias($_POST['upstream_sip_server'])) {
- /* item is not an ip or alias. error out */
- $savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue.");
- $stepid--;
- return;
- }
- }
-
- $steps = intval($config['ezshaper']['step1']['numberofconnections']);
- for ($i = 0; $i < $steps; $i++) {
- if ($config['ezshaper']['step2']["conn{$i}uploadscheduler"] != "PRIQ") {
- if (!is_numeric($_POST["conn{$i}upload"])) {
- $savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
- $stepid--;
- return;
- }
- if ($_POST["conn{$i}uploadspeed"] == "%") {
- if (intval($_POST["conn{$i}upload"]) > 80) {
- $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
- $stepid--;
- return;
- }
- } else {
- $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
- $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]);
- $factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]);
- $input_bw = $factor * floatval($_POST["conn{$i}upload"]);
- if ((0.8 * $ifbw) < $input_bw) {
- $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
- $stepid--;
- return;
- }
- }
- }
-
- if ($config['ezshaper']['step2']["local{$i}downloadscheduler"] != "PRIQ") {
- if (!is_numeric($_POST["local{$i}download"])) {
- $savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
- $stepid--;
- return;
- }
- if ($_POST["local{$i}downloadspeed"] == "%") {
- if (intval($_POST["local{$i}download"]) > 80) {
- $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
- $stepid--;
- return;
- }
- } else {
- $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
- $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}download"]);
- $factor = wizard_get_bandwidthtype_scale($_POST["local{$i}downloadspeed"]);
- $input_bw = $factor * floatval($_POST["local{$i}download"]);
- if ((0.8 * $ifbw) < $input_bw) {
- $savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$i} higher than 80% of the connection.");
- $stepid--;
- return;
- }
- }
- }
- }
-
- /* This is necessary since the wizard expects predefined fields. */
- unset($config['ezshaper']['step3']);
- $config['ezshaper']['step3'] = array();
-
- if (!empty($_POST['upstream_sip_server']))
- $config['ezshaper']['step3']['address'] = $_POST['upstream_sip_server'];
- if ($_POST['enable'] == 'on')
- $config['ezshaper']['step3']['enable'] = 'on';
- for ($i = 0; $i < $steps; $i++) {
- $config['ezshaper']['step3']["local{$i}download"] = $_POST["local{$i}download"];
- $config['ezshaper']['step3']["local{$i}downloadspeed"] = $_POST["local{$i}downloadspeed"];
- $config['ezshaper']['step3']["conn{$i}upload"] = $_POST["conn{$i}upload"];
- $config['ezshaper']['step3']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"];
- }
-}
-
-function step4_stepsubmitphpaction() {
- global $config;
- global $stepid, $savemsg;
-
- if ( $_POST['enable'] ) {
- if(!$_POST['bandwidth']) {
- $savemsg="You need to specify a value for bandwidth!";
- $stepid--;
- return;
- }
- if(!is_numeric($_POST['bandwidth'])) {
- $savemsg="The posted value is not a valid bandwidth.";
- $stepid--;
- return;
- }
-
- if ($_POST['bandwidthspeed'] <> "%") {
- $savemsg = gettext("Only percentage bandwidth specification is allowed.");
- $stepid--;
- return;
- }
- $bw = $_POST['bandwidth'];
- if($bw > 15 || $bw < 2) {
- $savemsg="Values should be between 2% and 15%!";
- $stepid--;
- return;
- }
- if($_POST['address'] <> "" && !is_ipaddroralias($_POST['address'])) {
- /* item is not an ip or alias. error out */
- $savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue.");
- $stepid--;
- }
- }
-}
-
-function step5_stepsubmitphpaction() {
- global $stepid, $savemsg;
-
- if ( $_POST['enable'] ) {
- if ($_POST['p2pcatchall']) {
- if(!is_numeric($_POST['bandwidth'])) {
- $savemsg="Posted value is not a valid bandwidth.";
- $stepid--;
- return;
- }
- if ($_POST['bandwidthspeed'] <> "%") {
- $savemsg = gettext("Only percentage bandwidth specification is allowed.");
- $stepid--;
- return;
- }
- $bw = $_POST['bandwidth'];
- if($bw > 15 || $bw < 2) {
- $savemsg="Values should be between 2% and 15%!";
- $stepid--;
- return;
- }
- }
- }
-}
-
-function step8_stepsubmitphpaction() {
- global $g, $config;
-
- /* save the new configuration */
- apply_all_chosen_items();
-
- /* reset rrd queues */
- system("rm -f /var/db/rrd/*queuedrops.rrd");
- system("rm -f /var/db/rrd/*queues.rrd");
- enable_rrd_graphing();
-
- /* apply the new configuration to the system */
- filter_configure();
-
- /* And we're no longer dirty! */
- clear_subsystem_dirty('shaper');
-
- update_filter_reload_status("Initializing");
- header("Location: status_filter_reload.php");
- exit;
-}
-
-function apply_all_chosen_items() {
- global $config, $g, $altq_list_queues, $gamesplist, $voiplist, $othersplist, $p2plist;
-
- require_once("wizardapp.inc");
-
- /*
- * Wipe previous config.
- * Doing it here makes sense since we can wipe the previous config only after
- * the user decides to do so, finishing the wizard.
- */
- if(isset($config['shaper']['queue']))
- unset($config['shaper']['queue']);
- /* XXX: This is redundant, because this should be handled by converter at startup. */
- if(isset($config['shaper']['rule']))
- unset($config['shaper']['rule']);
- foreach ($config['filter']['rule'] as $key => $rule)
- if ($rule['wizard'] == "yes")
- unset($config['filter']['rule'][$key]);
-
- /* restart the cached config */
- unset($altq_list_queues);
- $altq_list_queues = array();
-
- $steps = intval($config['ezshaper']['step1']['numberofconnections']);
-
- $interfacelist = array();
-
- for ($i = 0; $i < $steps; $i++) {
-
- $tmppath = array();
- $altq =& new altq_root_queue();
-
- $altq->SetInterface($config['ezshaper']['step2']["conn{$i}interface"]);
- $interfacelist[] = $config['ezshaper']['step2']["conn{$i}interface"];
- $altq->SetScheduler($config['ezshaper']['step2']["conn{$i}uploadscheduler"]);
- $altq->SetBandwidth(floatval($config['ezshaper']['step2']["conn{$i}upload"]));
- $altq->SetBwscale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
- $altq->SetEnabled("on");
- $altq_list_queues[$altq->GetQname()] =& $altq;
- array_push($tmppath, $config['ezshaper']['step2']["conn{$i}interface"]);
- $altq->SetLink($tmppath);
- $altq->wconfig();
-
- $sched = $config['ezshaper']['step2']["conn{$i}uploadscheduler"];
- $voipbw =0;
- $voipbwunit = "Kb";
- $voip = false;
- $penalty = false;
- $penaltybw = 0;
- $penaltybwunit = "Kb";
- $p2p = false;
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- $p2pcatchbwunit = "%";
- $games = false;
- $otherpriority = false;
- $remainbw = 0;
- $factor = 0;
- $upfactor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
- $upbw = floatval($config['ezshaper']['step2']["conn{$i}upload"]) * $upfactor;
-
- if ($config['ezshaper']['step3']['enable']) {
- $voip = true;
- $voipbw = $config['ezshaper']['step3']["conn{$i}upload"];
- $voipbwunit = $config['ezshaper']['step3']["conn{$i}uploadspeed"];
- if ($voipbwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($voipbwunit);
- $remainbw += $voipbw * $factor;
- }
- if ($config['ezshaper']['step4']['enable']) {
- $penalty = true;
- $penaltybw = $config['ezshaper']['step4']['bandwidth'];
- $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
- if ($penaltybwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
- $remainbw += $penaltybw * $factor;
- } else {
- $penalty = false;
- $penaltybw = 0;
- }
- if ($config['ezshaper']['step5']['enable']) {
- $p2p = true;
- if ($config['ezshaper']['step5']['p2pcatchall']) {
- $p2pcatchall = true;
- $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
- $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
- if ($p2pcatchbwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
- $remainbw += $p2pcatchbw * $factor;
- } else {
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
- } else {
- $p2p = false;
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
- if ($config['ezshaper']['step6']['enable']) {
- $games = true;
- } else {
- $games = false;
- }
-
- if ($config['ezshaper']['step7']['enable']) {
- $otherpriority = true;
- } else {
- $otherpriority = false;
- }
- $remainbw = round($remainbw / $upbw * 100, 2);
-
- if (intval($remainbw) > 0 && intval($remainbw) > 30) {
- $savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue.");
- header("Location: wizard.php?xml=traffic_shaper_wizard_dedicated.xml&stepid=2&message={$savemsg}");
- exit;
- } else {
- $remainbw = 100 - $remainbw;
- }
-
- if ($sched != "PRIQ") {
- if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qInternet";
- //$tmpcf['priority'] = 6;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- If ($sched == "CBQ") {
- $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]);
- $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"];
- }
- else if ($sched == "HFSC") {
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] =
- floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"];
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"];
- $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]);
- $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"];
- }
- array_push($tmppath, "qInternet");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- //array_pop($tmppath);
- //echo "qInternet <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- $altq =& $qtmp;
- }
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qACK";
- $tmpcf['priority'] = 6;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- If ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.2;
- $tmpcf['bandwidthtype'] = "%";
- }
- else if ($sched == "HFSC") {
- $lkbw = 0.20 * $remainbw;
- $tmpcf['linkshare3'] = "{$lkbw}%";
- $tmpcf['linkshare'] = "on";
- $tmpcf['bandwidth'] = $lkbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qACK");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qACK <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- if ($p2pcatchall)
- $tmpcf['name'] = "qOthersDefault";
- else
- $tmpcf['name'] = "qDefault";
- $tmpcf['priority'] = 3;
- $tmpcf['enabled'] = "on";
- if (!$p2pcatchall)
- $tmpcf['default'] = "on";
- $tmpcf['ecn'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, $tmpcf['name']);
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qDefault <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
- if ($p2p) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qP2P";
- $tmpcf['priority'] = 1;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($p2pcatchall) {
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $p2pcatchbw;
- $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
- } else if ($sched == "HFSC") {
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
- $tmpcf['bandwidth'] = $p2pcatchbw;
- $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
- }
- $tmpcf['default'] = "on";
-
- } else {
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpbw = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$tmpbw}%";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = "{$tmpbw}%";
- $tmpcf['bandwidth'] = $tmpbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- }
- array_push($tmppath, "qP2P");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qP2P <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($voip) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qVoIP";
- $tmpcf['priority'] = 7;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- if ($voipbw > 0) {
- $tmpcf['bandwidth'] = $voipbw;
- $tmpcf['bandwidthtype'] = $voipbwunit;
- } else {
- $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- } else if ($sched == "HFSC") {
- if ($voipbw > 0) {
- $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
- } else {
- $voipbw = $remainbw * 0.20; /* 20% bandwidth */
- $tmpcf['realtime3'] = "{$voipbw}%";
- }
- $tmpcf['realtime'] = "on";
- $tmpcf['bandwidth'] = 32;
- $tmpcf['bandwidthtype'] = "Kb";
- }
- array_push($tmppath, "qVoIP");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qVoIP <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($games) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qGames";
- $tmpcf['priority'] = 5;
- $tmpcf['enabled'] = "on";
- $tmpcf['ecn'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $gamesbw = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$gamesbw}%";
- $tmpcf['bandwidth'] = "{$gamesbw}";
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qGames");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qGames <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($otherpriority) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qOthersHigh";
- $tmpcf['priority'] = 4;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpcf['linkshare'] = "on";
- $otherbw = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['linkshare3'] = "{$otherbw}%";
- $tmpcf['bandwidth'] = $otherbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qOthersHigh");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qHigh <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qOthersLow";
- $tmpcf['priority'] = 2;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- if ($penalty) {
- $tmpcf['bandwidthtype'] = $penaltybwunit;
- $tmpcf['bandwidth'] = $penaltybw;
- } else {
- $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- } else if ($sched == "HFSC") {
- if ($penalty) {
- $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
- $tmpcf['bandwidth'] = $penaltybw;
- $tmpcf['bandwidthtype'] = $penaltybwunit;
- } else {
- $lsbw = $remainbw * 0.05;
- $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
- $tmpcf['bandwidth'] = $lsbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- $tmpcf['linkshare'] = "on";
- }
- array_push($tmppath, "qOthersLow");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qLow <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
- array_pop($tmppath);
-
- $downfactor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
- $downbw = floatval($config['ezshaper']['step2']["conn{$i}download"]) * $downfactor;
-
- $tmppath = array();
- $altq =& new altq_root_queue();
-
- $altq->SetInterface($config['ezshaper']['step2']["local{$i}interface"]);
- $altq->SetScheduler($config['ezshaper']['step2']["local{$i}downloadscheduler"]);
- //$altq->SetBandwidth($config['ezshaper']['step2']["conn{$i}download"]);
- //$altq->SetBwscale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
- $altq->SetEnabled("on");
- $altq_list_queues[$altq->GetQname()] =& $altq;
- array_push($tmppath, $config['ezshaper']['step2']["local{$i}interface"]);
- $altq->SetLink($tmppath);
- //var_dump($input_errors);
- $altq->wconfig();
-
- $sched = $config['ezshaper']['step2']["local{$i}downloadscheduler"];
- $voipbw =0;
- $voipbwunit = "%";
- $voip = false;
- $penalty = false;
- $penaltybw = 0;
- $penaltybwunit = "%";
- $p2p = false;
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- $games = false;
- $otherpriority = false;
- $remainbw = 0;
-
- if ($config['ezshaper']['step3']['enable']) {
- $voip = true;
- $voipbw = $config['ezshaper']['step3']["local{$i}download"];
- $voipbwunit = $config['ezshaper']['step3']["local{$i}downloadspeed"];
- if ($sched != HFSC) {
- if ($voipbwunit == "%")
- $factor = $downbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($voipbwunit);
- $remainbw += floatval($voipbw) * $factor;
- } else
- $remainbw += 32000; /* 32Kbit/s reserved for HFSC link sharing */
- }
- if ($config['ezshaper']['step4']['enable']) {
- $penalty = true;
- $penaltybw = $config['ezshaper']['step4']['bandwidth'];
- $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
- if ($penaltybwunit == "%")
- $factor = $downbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
- $remainbw += floatval($penaltybw) * $factor;
- } else {
- $penalty = false;
- $penaltybw = 0;
- }
- if ($config['ezshaper']['step5']['enable']) {
- $p2p = true;
- if ($config['ezshaper']['step5']['p2pcatchall']) {
- $p2pcatchall = true;
- $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
- $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
- if ($p2pcatchbwunit == "%")
- $factor = $downbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
- $remainbw += floatval($p2pcatchbw) * $factor;
- } else {
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
- } else {
- $p2p = false;
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
- if ($config['ezshaper']['step6']['enable']) {
- $games = true;
- } else {
- $games = false;
- }
-
- if ($config['ezshaper']['step7']['enable']) {
- $otherpriority = true;
- } else {
- $otherpriority = false;
- }
- $remainbw = round($remainbw / $downbw * 100, 2);
- if (intval($remainbw) > 0 && intval($remainbw) > 40) {
- $savemsg=gettext("Custom Bandwidths are greater than 40%. Please lower them for the wizard to continue.");
- header("Location: wizard.php?xml=traffic_shaper_wizard_dedicated.xml&stepid=2&message={$savemsg}");
- exit;
- } else {
- $remainbw = 100 - $remainbw;
- }
-
- if (!$p2pcatchall) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qLink";
- $tmpcf['priority'] = 2;
- $tmpcf['enabled'] = "on";
- $tmpcf['default'] = "on";
- $tmpcf['qlimit'] = 500;
- $tmpcf['ecn'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = 20; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpcf['bandwidth'] = 20; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, $tmpcf['name']);
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qDefault <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($sched != "PRIQ") {
- if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qInternet";
- //$tmpcf['priority'] = 6;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- If ($sched == "CBQ") {
- $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}download"]);
- $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}downloadspeed"];
- }
- else if ($sched == "HFSC") {
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = floatval($config['ezshaper']['step2']["conn{$i}download"]) . $config['ezshaper']['step2']["conn{$i}downloadspeed"];
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = floatval($config['ezshaper']['step2']["conn{$i}download"]) . $config['ezshaper']['step2']["conn{$i}downloadspeed"];
- $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}download"]);
- $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}downloadspeed"];
- }
- array_push($tmppath, "qInternet");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- //array_pop($tmppath);
- //echo "qInternet <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- $altq =& $qtmp;
- }
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qACK";
- $tmpcf['priority'] = 6;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- If ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.2;
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $lkbw = 0.20 * $remainbw;
- $tmpcf['linkshare3'] = "{$lkbw}%";
- $tmpcf['linkshare'] = "on";
- $tmpcf['bandwidth'] = $lkbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qACK");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qACK $remainbw <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
- if ($p2p) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qP2P";
- $tmpcf['priority'] = 1;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($p2pcatchall) {
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $p2pcatchbw;
- $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
- } else if ($sched == "HFSC") {
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
- $tmpcf['bandwidth'] = $p2pcatchbw;
- $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
- }
- $tmpcf['default'] = "on";
- $tmpcf['qlimit'] = 500;
- } else {
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpbw = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$tmpbw}%";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = "{$tmpbw}%";
- $tmpcf['bandwidth'] = $tmpbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- }
- array_push($tmppath, "qP2P");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qP2P <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($voip) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qVoIP";
- $tmpcf['priority'] = 7;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- if ($voipbw > 0) {
- $tmpcf['bandwidth'] = $voipbw;
- $tmpcf['bandwidthtype'] = $voipbwunit;
- } else {
- $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- } else if ($sched == "HFSC") {
- if ($voipbw > 0) {
- $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
- } else {
- $voipbw = $remainbw * 0.20; /* 20% bandwidth */
- $tmpcf['realtime3'] = "{$voipbw}%";
- }
- $tmpcf['realtime'] = "on";
- $tmpcf['bandwidth'] = 32;
- $tmpcf['bandwidthtype'] = "Kb";
- }
- array_push($tmppath, "qVoIP");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qVoIP <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($games) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qGames";
- $tmpcf['priority'] = 5;
- $tmpcf['enabled'] = "on";
- $tmpcf['ecn'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $gamesbw = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$gamesbw}%";
- $tmpcf['bandwidth'] = "{$gamesbw}";
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qGames");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qGames <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($otherpriority) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qOthersHigh";
- $tmpcf['priority'] = 4;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpcf['linkshare'] = "on";
- $otherbw = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['linkshare3'] = "{$otherbw}%";
- $tmpcf['bandwidth'] = $otherbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qOthersHigh");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qHigh <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qOthersLow";
- $tmpcf['priority'] = 3;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- if ($penalty) {
- $tmpcf['bandwidth'] = $penaltybw;
- $tmpcf['bandwidthtype'] = $penaltybwunit;
- } else {
- $tmpcf['bandwidthtype'] = "%";
- $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
- }
- } else if ($sched == "HFSC") {
- if ($penalty) {
- $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
- $tmpcf['bandwidth'] = $penaltybw;
- $tmpcf['bandwidthtype'] = $penaltybwunit;
- } else {
- $lsbw = $remainbw * 0.05;
- $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
- $tmpcf['bandwidth'] = $lsbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- $tmpcf['linkshare'] = "on";
- }
- array_push($tmppath, "qOthersLow");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qLow <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
- array_pop($tmppath);
- }
-
- if (!is_array($config['filter']['rule']))
- $config['filter']['rule'] = array();
-
- $interfacelist = implode(",", $interfacelist);
-
- /* Rules */
- if ($penalty) {
- if( is_ipaddr($config['ezshaper']['step4']['address']) || is_alias($config['ezshaper']['step4']['address'])) {
- $rule = array();
- $rule['type'] = "match";
- $rule['interface'] = $interfacelist;
- $rule['descr'] = gettext("Penalty Box");
- $rule['defaultqueue'] = "qOthersLow";
- $rule['source']['address'] = $config['ezshaper']['step4']['address'];
- $rule['destination']['any'] = TRUE;
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['enabled'] = "on";
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
- }
- }
-
- /* If user specifies an IP, we don't bother with providers */
- if ($voip) {
- if( is_ipaddr($config['ezshaper']['step3']['address']) || is_alias($config['ezshaper']['step3']['address'])) {
- /* create VOIP rules */
- $rule = array();
- $rule['type'] = "match";
- //$rule['interface'] = $interfacelist;
- $rule['descr'] = gettext("Connections From Upstream SIP Server");
- $rule['protocol'] = "udp";
- $rule['defaultqueue'] = "qVoIP";
- $rule['source']['address'] = $config['ezshaper']['step3']['address'];
- $rule['destination']['any'] = TRUE;
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['enabled'] = "on";
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
-
- $rule = array();
- $rule['type'] = "match";
- //$rule['interface'] = $interfacelist;
- $rule['descr'] = gettext("Connections To Upstream SIP Server");
- $rule['protocol'] = "udp";
- $rule['defaultqueue'] = "qVoIP";
- $rule['source']['any'] = TRUE;
- $rule['destination']['address'] = $config['ezshaper']['step3']['address'];
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['enabled'] = "on";
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
-
- } elseif( $config['ezshaper']['step3']['provider'] == "Generic" ) {
- /* create VOIP rules */
- $rule = array();
- $rule['type'] = "match";
- $rule['interface'] = $interfacelist;
- $rule['descr'] = "DiffServ/Lowdelay/Upload";
- $rule['protocol'] = "udp";
- $rule['source']['any'] = TRUE;
- $rule['defaultqueue'] = "qVoIP";
- $rule['destination']['any'] = TRUE;
- $rule['iptos'] = "lowdelay";
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['enabled'] = "on";
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
-
- } else {
- /* loop through voiplist[] */
- foreach ($voiplist[$config['ezshaper']['step3']['provider']] as $voip) {
- $rule = array();
- $rule['type'] = "match";
- $rule['interface'] = $interfacelist;
- $rule['defaultqueue'] = 'qVoIP';
- $rule['source']['any'] = TRUE;
- $rule['destination']['any'] = TRUE;
- $rule['descr'] = "m_voip {$voip[0]} outbound";
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['enabled'] = "on";
- $rule['destination']['port'] = $voip[2]."-".$voip[3];
- if($voip[1] != '')
- $rule['protocol'] = $voip[1];
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
- }
- }
- }
-
- /* loop through p2plist[] */
- if ($p2p) {
- foreach($config['ezshaper']['step5'] as $key => $val) {
- if (!is_array($p2plist[$key]))
- continue;
- foreach ($p2plist[$key] as $p2pclient) {
- $rule = array();
- $rule['type'] = "match";
- $rule['interface'] = $interfacelist;
- $rule['defaultqueue'] = 'qP2P';
- $rule['source']['any'] = TRUE;
- $rule['destination']['any'] = TRUE;
- $rule['descr'] = "m_P2P {$p2pclient[0]} outbound";
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['destination']['port'] = $p2pclient[2]."-".$p2pclient[3];
- if($p2pclient[1] != '')
- $rule['protocol'] = $p2pclient[1];
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
- }
- }
- }
-
- /* loop through gamesplist[] */
- if ($games) {
- foreach($config['ezshaper']['step6'] as $key => $val) {
- if (!is_array($gamesplist[$key]))
- continue;
- foreach ($gamesplist[$key] as $Gameclient) {
- $rule = array();
- $rule['type'] = "match";
- $rule['interface'] = $interfacelist;
- $rule['defaultqueue'] = 'qGames';
- if ($Gameclient[1] == "tcp")
- $rule['ackqueue'] = 'qACK';
- $rule['source']['any'] = TRUE;
- $rule['destination']['any'] = TRUE;
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['enabled'] = "on";
- $rule['descr'] = "m_Game {$Gameclient[0]} outbound";
- $rule['destination']['port'] = $Gameclient[2]."-".$Gameclient[3];
- if($Gameclient[1] != '')
- $rule['protocol'] = $Gameclient[1];
- $config['filter']['rule'][] = $rule;
- }
- }
- }
-
- /* loop through othersplist[] */
- if ($otherpriority) {
- foreach($config['ezshaper']['step7'] as $key => $val) {
- if (!is_array($othersplist[$key]))
- continue;
- foreach ($othersplist[$key] as $otherclient) {
- $rule = array();
- $rule['type'] = "match";
- $rule['interface'] = $interfacelist;
- switch ($val) {
- case "H":
- $rule['defaultqueue'] = 'qOthersHigh'; /* posted value H or L */
- if ($otherclient[1] == "tcp")
- $rule['ackqueue'] = 'qACK';
- $loop = 0;
- break;
- case "L":
- $rule['defaultqueue'] = 'qOthersLow'; /* posted value H or L */
- if ($otherclient[1] == "tcp")
- $rule['ackqueue'] = 'qACK';
- $loop = 0;
- break;
- case "D":
- if ($p2pcatchall) {
- $loop = 0;
- $rule['defaultqueue'] = 'qOthersDefault';
- if ($otherclient[1] == "tcp")
- $rule['ackqueue'] = 'qACK';
- } else
- $loop = 1; /* It automatically goes to default queue */
- break;
- default:
- $loop = 1;
- }
- if (!$loop) {
- $rule['source']['any'] = TRUE;
- $rule['destination']['any'] = TRUE;
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['enabled'] = "on";
- $rule['descr'] = "m_Other {$otherclient[0]} outbound";
-
- if($otherclient[2] or $otherclient[3]) {
- $rule['destination']['port'] = $otherclient[2]."-".$otherclient[3];
- }
- if($otherclient[1] != '')
- $rule['protocol'] = $otherclient[1];
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
- }
- }
- }
- }
- write_config();
-}
-
-function wizard_get_bandwidthtype_scale($type = "b") {
- switch ($type) {
- case "Gb":
- $factor = 1024 * 1024 * 1024;
- break;
- case "Mb":
- $factor = 1024 * 1024;
- break;
- case "Kb":
- $factor = 1024;
- break;
- case "b":
- default:
- $factor = 1;
- break;
- }
- return intval($factor);
-}
-
-?>
diff --git a/usr/local/www/wizards/traffic_shaper_wizard_dedicated.xml b/usr/local/www/wizards/traffic_shaper_wizard_dedicated.xml
deleted file mode 100755
index c86a72a..0000000
--- a/usr/local/www/wizards/traffic_shaper_wizard_dedicated.xml
+++ /dev/null
@@ -1,1649 +0,0 @@
-<?xml version="1.0"?>
-<pfsensewizard>
- <copyright><![CDATA[
- /*
- traffic_shaper_wizard_dedicated.xml
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2005 Bill Marquette - bill.marquette@gmail.com.
- Copyright (C) 2008-2010 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */]]></copyright>
-
- <totalsteps>9</totalsteps>
- <step>
- <id>1</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <disableheader>true</disableheader>
- <description>This wizard will guide you through setting up the pfSense traffic shaper.
- Please be aware that Custom Bandwidths should not exceed 30% of the interface/link bandwidth. Keep this in mind during the wizard.
- </description>
- <fields>
- <field>
- <type>listtopic</type>
- <name>Traffic shaper Wizard</name>
- </field>
- <field>
- <displayname>Enter number of WAN type connections</displayname>
- <name>numberofconnections</name>
- <type>input</type>
- <validate>^[0-9]+$</validate>
- <description>Number of connections you have</description>
- <bindstofield>ezshaper->step1->numberofconnections</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepbeforeformdisplay>step1_stepbeforeformdisplay();</stepbeforeformdisplay>
- <stepsubmitphpaction>step1_submitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
- </step>
- <step>
- <id>2</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <description>Shaper configuration</description>
- <javascriptafterformdisplay/>
- <stepbeforeformdisplay>step2_stepbeforeformdisplay();</stepbeforeformdisplay>
- <stepsubmitphpaction>step2_stepsubmitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
- <fields>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- </step>
- <step>
- <id>3</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <description>Voice over IP</description>
- <fields>
- <field>
- <name>Enable</name>
- <type>checkbox</type>
- <typehint>Prioritize Voice over IP traffic</typehint>
- <description>This will raise the priority of VOIP traffic above all other traffic.</description>
- <bindstofield>ezshaper-&gt;step3-&gt;enable</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- <field>
- <name>VOIP specific settings</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>Provider</name>
- <type>select</type>
- <description>Choose Generic if your provider isn't listed.</description>
- <bindstofield>ezshaper-&gt;step3-&gt;provider</bindstofield>
- <options>
- <option>
- <name>Generic (lowdelay)</name>
- <value>Generic</value>
- </option>
- <option>
- <name>VoicePulse</name>
- <value>VoicePulse</value>
- </option>
- <option>
- <name>Asterisk/Vonage</name>
- <value>Asterisk</value>
- </option>
- <option>
- <name>PanasonicTDA</name>
- <value>Panasonic</value>
- </option>
- </options>
- </field>
- <field>
- <displayname>Upstream SIP Server</displayname>
- <name>upstream_sip_server</name>
- <type>inputalias</type>
- <description>(Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the &lt;strong&gt;remote&lt;/strong&gt; PBX or SIP Trunk to prioritize. &lt;br /&gt;NOTE: You can also use a Firewall Alias in this location.</description>
- <bindstofield>ezshaper-&gt;step3-&gt;address</bindstofield>
- <message>IP Address field is non-blank and doesn't look like an IP address.</message>
- </field>
- <field>
- <name>Bandwidth</name>
- <type>input</type>
- <validate>^[0-9]*$</validate>
- <typehint>Total bandwidth in percentage(%)(should be between 5 and 40) guarantee for VOIP traffic.</typehint>
- <bindstofield>ezshaper-&gt;step3-&gt;bandwidth</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepbeforeformdisplay>step3_stepbeforeformdisplay();</stepbeforeformdisplay>
- <stepsubmitphpaction>step3_stepsubmitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
- </step>
- <step>
- <id>4</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <description>Penalty Box</description>
- <disableallfieldsbydefault>true</disableallfieldsbydefault>
- <fields>
- <field>
- <donotdisable>true</donotdisable>
- <name>Enable</name>
- <type>checkbox</type>
- <typehint>Penalize IP or Alias</typehint>
- <description>This will lower the priority of traffic from this IP or alias.</description>
- <enablefields>Address,Bandwidth,BandwidthSpeed</enablefields>
- <bindstofield>ezshaper-&gt;step4-&gt;enable</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- <field>
- <name>PenaltyBox specific settings</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>Address</name>
- <type>inputalias</type>
- <description>This allows you to just provide the IP address of the computer(s) to penalize. NOTE: You can also use a Firewall Alias in this location.</description>
- <bindstofield>ezshaper-&gt;step4-&gt;address</bindstofield>
- <message>IP Address field is non-blank and doesn't look like an IP address.</message>
- </field>
- <field>
- <name>Bandwidth</name>
- <type>input</type>
- <validate>^[0-9]*$</validate>
- <message>Speed must be numerical.</message>
- <bindstofield>ezshaper-&gt;step4-&gt;bandwidth</bindstofield>
- <combinefieldsbegin>true</combinefieldsbegin>
- </field>
- <field>
- <combinefieldsend>true</combinefieldsend>
- <dontdisplayname>true</dontdisplayname>
- <dontcombinecells>true</dontcombinecells>
- <donotdisable>true</donotdisable>
- <name>BandwidthSpeed</name>
- <description>The limit you want to apply.</description>
- <type>select</type>
- <options>
- <option>
- <name>%</name>
- <value>%</value>
- </option>
- <option>
- <name>bit/s</name>
- <value>b</value>
- </option>
- <option>
- <name>Kilobit/s</name>
- <value>Kb</value>
- </option>
- <option>
- <name>Megabit/s</name>
- <value>Mb</value>
- </option>
- <option>
- <name>Gigabit/s</name>
- <value>Gb</value>
- </option>
- </options>
- <bindstofield>ezshaper->step4->bandwidthunit</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepsubmitphpaction>step4_stepsubmitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
- </step>
- <step>
- <id>5</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <description>Peer to Peer networking</description>
- <disableallfieldsbydefault>true</disableallfieldsbydefault>
- <fields>
- <field>
- <donotdisable>true</donotdisable>
- <name>Enable</name>
- <type>checkbox</type>
- <typehint>Lower priority of Peer-to-Peer traffic</typehint>
- <description>This will lower the priority of P2P traffic below all other traffic. Please check the items that you would like to prioritize lower than normal traffic.</description>
- <enablefields>p2pCatchAll,Bandwidth,BandwidthSpeed,Aimster,BitTorrent,BuddyShare,CuteMX,DCplusplus,dcc,DirectConnect,DirectFileExpress,EDonkey2000,FastTrack,Gnutella,grouper,hotComm,HotlineConnect,iMesh,Napster,OpenNap,Scour,Shareaza,SongSpy,WinMX</enablefields>
- <bindstofield>ezshaper-&gt;step5-&gt;enable</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- <field>
- <name>p2p Catch all</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>p2pCatchAll</name>
- <type>checkbox</type>
- <typehint>When enabled, all uncategorized traffic is fed to the p2p queue.</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;p2pcatchall</bindstofield>
- </field>
- <field>
- <name>Bandwidth</name>
- <type>input</type>
- <validate>^[0-9]*$</validate>
- <message>Speed must be numerical.</message>
- <bindstofield>ezshaper-&gt;step5-&gt;bandwidth</bindstofield>
- <combinefieldsbegin>true</combinefieldsbegin>
- </field>
- <field>
- <combinefieldsend>true</combinefieldsend>
- <dontdisplayname>true</dontdisplayname>
- <dontcombinecells>true</dontcombinecells>
- <donotdisable>true</donotdisable>
- <name>BandwidthSpeed</name>
- <description>The limit you want to apply.</description>
- <type>select</type>
- <options>
- <option>
- <name>%</name>
- <value>%</value>
- </option>
- <option>
- <name>bit/s</name>
- <value>b</value>
- </option>
- <option>
- <name>Kilobit/s</name>
- <value>Kb</value>
- </option>
- <option>
- <name>Megabit/s</name>
- <value>Mb</value>
- </option>
- <option>
- <name>Gigabit/s</name>
- <value>Gb</value>
- </option>
- </options>
- <bindstofield>ezshaper->step5->bandwidthunit</bindstofield>
- </field>
- <field>
- <name>Enable/Disable specific P2P protocols</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>Aimster</name>
- <type>checkbox</type>
- <typehint>Aimster and other P2P using the Aimster protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;aimster</bindstofield>
- </field>
- <field>
- <name>BitTorrent</name>
- <type>checkbox</type>
- <typehint>Bittorrent and other P2P using the Torrent protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;bittorrent</bindstofield>
- </field>
- <field>
- <name>BuddyShare</name>
- <type>checkbox</type>
- <typehint>BuddyShare and other P2P using the BuddyShare protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;buddyshare</bindstofield>
- </field>
- <field>
- <name>CuteMX</name>
- <type>checkbox</type>
- <typehint>CuteMX and other P2P using the CuteMX protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;cutemx</bindstofield>
- </field>
- <field>
- <name>DCplusplus</name>
- <type>checkbox</type>
- <typehint>DC++ and other P2P using the DC++ protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;dcplusplus</bindstofield>
- </field>
- <field>
- <name>DCC</name>
- <type>checkbox</type>
- <typehint>irc DCC file transfers</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;dcc</bindstofield>
- </field>
- <field>
- <name>DirectConnect</name>
- <type>checkbox</type>
- <typehint>DirectConnect and other P2P using the DirectConnect protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;directconnect</bindstofield>
- </field>
- <field>
- <name>DirectFileExpress</name>
- <type>checkbox</type>
- <typehint>DirectFileExpress and other P2P using the DirectFileExpress protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;directfileexpress</bindstofield>
- </field>
- <field>
- <name>eDonkey2000</name>
- <type>checkbox</type>
- <typehint>eDonkey and other P2P using the eDonkey protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;edonkey2000</bindstofield>
- </field>
- <field>
- <name>FastTrack</name>
- <type>checkbox</type>
- <typehint>FastTrack and other P2P using the FastTrack protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;fasttrack</bindstofield>
- </field>
- <field>
- <name>Gnutella</name>
- <type>checkbox</type>
- <typehint>Gnutella and other P2P using the Gnutella protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;gnutella</bindstofield>
- </field>
- <field>
- <name>grouper</name>
- <type>checkbox</type>
- <typehint>grouper and other P2P using the grouper protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;grouper</bindstofield>
- </field>
- <field>
- <name>hotComm</name>
- <type>checkbox</type>
- <typehint>hotComm and other P2P using the hotComm protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;hotcomm</bindstofield>
- </field>
- <field>
- <name>HotlineConnect</name>
- <type>checkbox</type>
- <typehint>HotlineConnect and other P2P using the HotlineConnect protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;hotlineconnect</bindstofield>
- </field>
- <field>
- <name>iMesh</name>
- <type>checkbox</type>
- <typehint>iMesh and other P2P using the iMesh protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;imesh</bindstofield>
- </field>
- <field>
- <name>Napster</name>
- <type>checkbox</type>
- <typehint>Napster and other P2P using the Napster protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;napster</bindstofield>
- </field>
- <field>
- <name>OpenNap</name>
- <type>checkbox</type>
- <typehint>OpenNap and other P2P using the OpenNap protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;opennap</bindstofield>
- </field>
- <field>
- <name>Scour</name>
- <type>checkbox</type>
- <typehint>Scour and other P2P using the Scour protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;scour</bindstofield>
- </field>
- <field>
- <name>Shareaza</name>
- <type>checkbox</type>
- <typehint>Shareaza and other P2P using the Shareaza protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;shareaza</bindstofield>
- </field>
- <field>
- <name>SongSpy</name>
- <type>checkbox</type>
- <typehint>SongSpy and other P2P using the SongSpy protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;songspy</bindstofield>
- </field>
- <field>
- <name>WinMX</name>
- <type>checkbox</type>
- <typehint>WinMX and other P2P using the WinMX protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;winmx</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepsubmitphpaction>step5_stepsubmitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
- </step>
- <step>
- <id>6</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <disableallfieldsbydefault>true</disableallfieldsbydefault>
- <description>Network Games</description>
- <fields>
- <field>
- <name>Enable</name>
- <type>checkbox</type>
- <typehint>Prioritize network gaming traffic</typehint>
- <description>This will raise the priority of gaming traffic to higher than most traffic.</description>
- <enablefields>BattleNET,EAOrigin,GameForWindowsLive,PlayStationConsoles,Steam,WiiConsoles,XboxConsoles,ARMA2,ARMA3,Battlefield2,Battlefield3,BattlefieldBC2,Borderlands,CallOfDuty,Counterstrike,Crysis2,Crysis3,DeltaForce,DeadSpace2,DeadSpace3,Dirt3,DOOM3,DragonAge2,EmpireEarth,EveOnline,Everquest,Everquest2,FarCry,FarCry2,FarCry3,GunZOnline,HalfLife,LeagueofLegends,Lineage2,MassEffect3,MechwarriorOnline,Minecraft,OperationFlashpointDR,PlanetSide,PlanetSide2,QuakeIII,QuakeIV,StarWarsTOR,TigerWoods2004PS2,TribesAscend,UnrealTournament,WolfensteinEnemyTerritory,WorldOfWarcraft</enablefields>
- <donotdisable>true</donotdisable>
- <bindstofield>ezshaper-&gt;step6-&gt;enable</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- <field>
- <name>Enable/Disable specific game consoles and services</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>BattleNET</name>
- <type>checkbox</type>
- <typehint>Battle.net - Virtually every game from Blizzard publishing should match this. This includes the following game series: Starcraft, Diablo, Warcraft. Guild Wars also uses this port.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;battlenet</bindstofield>
- </field>
- <field>
- <name>EAOrigin</name>
- <type>checkbox</type>
- <typehint>EA Origin Client - Some PC games by EA use this.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;eaorigin</bindstofield>
- </field>
- <field>
- <name>GameForWindowsLive</name>
- <type>checkbox</type>
- <typehint>Games for Windows Live</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;gamesforwindowslive</bindstofield>
- </field>
- <field>
- <name>PlayStationConsoles</name>
- <type>checkbox</type>
- <typehint>PlayStation Consoles - This should cover all ports required for the Playstation 4, Playstation, PS Vita</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;playstationconsoles</bindstofield>
- </field>
- <field>
- <name>Steam</name>
- <type>checkbox</type>
- <typehint>Steam Game Client (Includes: America's Army 3, Counter-Strike: Source, Counter-Strike: Global Offensive, Half-Life 2, COD: Black Ops Series, Borderlands 2, Natural Selection 2, Left 4 Dead Series, Portal 2 and many other games on the Steam)</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;steam</bindstofield>
- </field>
- <field>
- <name>WiiConsoles</name>
- <type>checkbox</type>
- <typehint>Wii Consoles - Wii, Wii U, DS and 3DS</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;wiiconsoles</bindstofield>
- </field>
- <field>
- <name>XboxConsoles</name>
- <type>checkbox</type>
- <typehint>Xbox Consoles - Xbox 360 and Xbox One</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;xboxconsoles</bindstofield>
- </field>
- <field>
- <name>Enable/Disable specific games</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>ARMA2</name>
- <type>checkbox</type>
- <typehint>ARMA 2</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;arma2</bindstofield>
- </field>
- <field>
- <name>ARMA3</name>
- <type>checkbox</type>
- <typehint>ARMA 3</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;arma3</bindstofield>
- </field>
- <field>
- <name>Battlefield2</name>
- <type>checkbox</type>
- <typehint>Battlefield 2 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;battlefield2</bindstofield>
- </field>
- <field>
- <name>Battlefield3</name>
- <type>checkbox</type>
- <typehint>Battlefield 3 and 4 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;battlefield3</bindstofield>
- </field>
- <field>
- <name>BattlefieldBC2</name>
- <type>checkbox</type>
- <typehint>Battlefield: Bad Company 2</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;battlefieldbc2</bindstofield>
- </field>
- <field>
- <name>Borderlands</name>
- <type>checkbox</type>
- <typehint>Borderlands</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;borderlands</bindstofield>
- </field>
- <field>
- <name>CallOfDuty</name>
- <type>checkbox</type>
- <typehint>Call Of Duty (United Offensive)</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;callofduty</bindstofield>
- </field>
- <field>
- <name>Counterstrike</name>
- <type>checkbox</type>
- <typehint>Counterstrike. The ultimate 1st person shooter.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;counterstrike</bindstofield>
- </field>
- <field>
- <name>Crysis2</name>
- <type>checkbox</type>
- <typehint>Crysis 2</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;crysis2</bindstofield>
- </field>
- <field>
- <name>Crysis3</name>
- <type>checkbox</type>
- <typehint>Crysis 3</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;crysis3</bindstofield>
- </field>
- <field>
- <name>DeadSpace2</name>
- <type>checkbox</type>
- <typehint>Dead Space2 - this game uses a HUGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;deadspace2</bindstofield>
- </field>
- <field>
- <name>DeadSpace3</name>
- <type>checkbox</type>
- <typehint>Dead Space 3</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;deadspace3</bindstofield>
- </field>
- <field>
- <name>DeltaForce</name>
- <type>checkbox</type>
- <typehint>Delta Force</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;deltaforce</bindstofield>
- </field>
- <field>
- <name>Dirt3</name>
- <type>checkbox</type>
- <typehint>Dirt 3</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;dirt3</bindstofield>
- </field>
- <field>
- <name>DOOM3</name>
- <type>checkbox</type>
- <typehint>DOOM3</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;doom3</bindstofield>
- </field>
- <field>
- <name>DragonAge2</name>
- <type>checkbox</type>
- <typehint>Dragon Age 2</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;dragonage2</bindstofield>
- </field>
- <field>
- <name>EmpireEarth</name>
- <type>checkbox</type>
- <typehint>Empire Earth</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;empireearth</bindstofield>
- </field>
- <field>
- <name>EveOnline</name>
- <type>checkbox</type>
- <typehint>EVE Online</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;eveonline</bindstofield>
- </field>
- <field>
- <name>Everquest</name>
- <type>checkbox</type>
- <typehint>Everquest - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;everquest</bindstofield>
- </field>
- <field>
- <name>Everquest2</name>
- <type>checkbox</type>
- <typehint>Everquest II</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;everquest2</bindstofield>
- </field>
- <field>
- <name>FarCry</name>
- <type>checkbox</type>
- <typehint>Far Cry</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;farcry</bindstofield>
- </field>
- <field>
- <name>FarCry2</name>
- <type>checkbox</type>
- <typehint>Far Cry 2</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;farcry2</bindstofield>
- </field>
- <field>
- <name>FarCry3</name>
- <type>checkbox</type>
- <typehint>Far Cry 3</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;farcry3</bindstofield>
- </field>
- <field>
- <name>GunZOnline</name>
- <type>checkbox</type>
- <typehint>GunZ Online</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;gunzonline</bindstofield>
- </field>
- <field>
- <name>HalfLife</name>
- <type>checkbox</type>
- <typehint>Half-Life</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;halflife</bindstofield>
- </field>
- <field>
- <name>LeagueofLegends</name>
- <type>checkbox</type>
- <typehint>League of Legends - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;leagueoflegends</bindstofield>
- </field>
- <field>
- <name>Lineage2</name>
- <type>checkbox</type>
- <typehint>Lineage II</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;lineage2</bindstofield>
- </field>
- <field>
- <name>MassEffect3</name>
- <type>checkbox</type>
- <typehint>Mass Effect 3</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;masseffect3</bindstofield>
- </field>
- <field>
- <name>MechwarriorOnline</name>
- <type>checkbox</type>
- <typehint>MechWarrior: Online - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;mechwarrioronline</bindstofield>
- </field>
- <field>
- <name>Minecraft</name>
- <type>checkbox</type>
- <typehint>Minecraft</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;minecraft</bindstofield>
- </field>
- <field>
- <name>PlanetSide</name>
- <type>checkbox</type>
- <typehint>PlanetSide</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;planetside</bindstofield>
- </field>
- <field>
- <name>PlanetSide2</name>
- <type>checkbox</type>
- <typehint>PlanetSide 2</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;planetside2</bindstofield>
- </field>
- <field>
- <name>OperationFlashpointDR</name>
- <type>checkbox</type>
- <typehint>Operation Flashpoint: Dragon Rising</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;operationflashpoint-dr</bindstofield>
- </field>
- <field>
- <name>QuakeIII</name>
- <type>checkbox</type>
- <typehint>Quake III</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;quakeiii</bindstofield>
- </field>
- <field>
- <name>QuakeIV</name>
- <type>checkbox</type>
- <typehint>Quake IV</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;quakeiv</bindstofield>
- </field>
- <field>
- <name>StarWarsTOR</name>
- <type>checkbox</type>
- <typehint>StarWars: The Old Republic - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;starwarstor</bindstofield>
- </field>
- <field>
- <name>TigerWoods2004PS2</name>
- <type>checkbox</type>
- <typehint>Tiger Woods 2004 for PS2</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;tigerwoods2004ps2</bindstofield>
- </field>
- <field>
- <name>TribesAscend</name>
- <type>checkbox</type>
- <typehint>Tribes Ascend</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;tribesascend</bindstofield>
- </field>
- <field>
- <name>UnrealTournament</name>
- <type>checkbox</type>
- <typehint>Unreal Tournament Series</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;unrealtournament</bindstofield>
- </field>
- <field>
- <name>WolfensteinEnemyTerritory</name>
- <type>checkbox</type>
- <typehint>Wolfenstein Enemy Territory</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;wolfet</bindstofield>
- </field>
- <field>
- <name>WorldOfWarcraft</name>
- <type>checkbox</type>
- <typehint>World of Warcraft</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;wow</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
- </step>
- <step>
- <id>7</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <disableallfieldsbydefault>true</disableallfieldsbydefault>
- <description>Raise or lower other Applications</description>
- <fields>
- <field>
- <name>Enable</name>
- <type>checkbox</type>
- <typehint>Other networking protocols</typehint>
- <description>This will help raise or lower the priority of other protocols higher than most traffic.</description>
- <enablefields>AppleRemoteDesktop,MSRDP,PCAnywhere,VNC,AIM,Facetime,GoogleHangouts,ICQ,IRC,Jabber,MSN,TeamSpeak,TeamSpeak3,Ventrilo,PPTP,IPSEC,iTunesRadio,StreamingMP3,RTSP,RTMP,HTTP,IMAP,LotusNotes,POP3,SMTP,BattleNETDownloader,SteamDownloader,APNS,AppleMobileSync,CrashPlan,CVSUP,DNS,GIT,HBCI,ICMP,MySqlServer,NNTP,Slingbox,SMB,SNMP,Subversion</enablefields>
- <donotdisable>true</donotdisable>
- <bindstofield>ezshaper-&gt;step7-&gt;enable</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- <field>
- <name>Remote Service / Terminal emulation</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>AppleRemoteDesktop</name>
- <bindstofield>ezshaper-&gt;step7-&gt;appleremotedesktop</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Apple Remote Desktop</typehint>
- </field>
- <field>
- <name>MSRDP</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;msrdp</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Microsoft Remote Desktop Protocol</typehint>
- </field>
- <field>
- <name>PCAnywhere</name>
- <bindstofield>ezshaper-&gt;step7-&gt;pcanywhere</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Symantec PC Anywhere</typehint>
- </field>
- <field>
- <name>VNC</name>
- <bindstofield>ezshaper-&gt;step7-&gt;vnc</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Virtual Network Computing</typehint>
- </field>
- <field>
- <name>Messengers</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>AIM</name>
- <bindstofield>ezshaper-&gt;step7-&gt;aolinstantmessenger</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>AOL Instant Messenger</typehint>
- </field>
- <field>
- <name>Facetime</name>
- <bindstofield>ezshaper-&gt;step7-&gt;facetime</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Facetime</typehint>
- </field>
- <field>
- <name>ICQ</name>
- <bindstofield>ezshaper-&gt;step7-&gt;icq</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>ICQ</typehint>
- </field>
- <field>
- <name>IRC</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;irc</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Internet Relay Chat</typehint>
- </field>
- <field>
- <name>Jabber</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;jabber</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Jabber instant messenger</typehint>
- </field>
- <field>
- <name>GoogleHangouts</name>
- <bindstofield>ezshaper-&gt;step7-&gt;googlehangouts</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Google Hangouts</typehint>
- </field>
- <field>
- <name>MSN</name>
- <bindstofield>ezshaper-&gt;step7-&gt;msnmessenger</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>MSN Messenger</typehint>
- </field>
- <field>
- <name>Teamspeak</name>
- <bindstofield>ezshaper-&gt;step7-&gt;teamspeak</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>TeamSpeak</typehint>
- </field>
- <field>
- <name>Teamspeak3</name>
- <bindstofield>ezshaper-&gt;step7-&gt;teamspeak3</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>TeamSpeak 3</typehint>
- </field>
- <field>
- <name>Ventrilo</name>
- <bindstofield>ezshaper-&gt;step7-&gt;ventrilo</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Ventrilo</typehint>
- </field>
- <field>
- <name>VPN</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>PPTP</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;pptp</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Microsoft Point to Point tunneling protocol</typehint>
- </field>
- <field>
- <name>IPSEC</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;ipsec</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>IPSEC VPN traffic</typehint>
- </field>
- <field>
- <name>Multimedia/Streaming</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>iTunesRadio</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;itunesradio</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>iTunes Radio - this rule uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- </field>
- <field>
- <name>StreamingMP3</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;streamingmp3</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Streaming Media</typehint>
- </field>
- <field>
- <name>RTSP</name>
- <bindstofield>ezshaper-&gt;step7-&gt;rtsp</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>RealTime streaming protocol</typehint>
- </field>
- <field>
- <name>RTMP</name>
- <bindstofield>ezshaper-&gt;step7-&gt;rtmp</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Real-Time Messaging Protocol - Used by video streaming services such as Twitch.tv.</typehint>
- </field>
- <field>
- <name>Web</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>HTTP</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;http</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>HTTP and HTTPS aka Web Traffic</typehint>
- </field>
- <field>
- <name>Mail</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>SMTP</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;smtp</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Mail Protocol</typehint>
- </field>
- <field>
- <name>POP3</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;pop3</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>POP3 Protocol</typehint>
- </field>
- <field>
- <name>IMAP</name>
- <bindstofield>ezshaper-&gt;step7-&gt;imap</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>IMAP Protocol</typehint>
- </field>
- <field>
- <name>LotusNotes</name>
- <bindstofield>ezshaper-&gt;step7-&gt;lotusnotes</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Lotus Notes</typehint>
- </field>
- <field>
- <name>Game Downloader</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>BattleNetDownloader</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;battlenetdownloader</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Battle.NET Downloader</typehint>
- </field>
- <field>
- <name>SteamDownloader</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;steamdownloader</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Steam Downloader</typehint>
- </field>
- <field>
- <name>Miscellaneous</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>APNS</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;apns</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Apple Push Notification Service</typehint>
- </field>
- <field>
- <name>AppleMobileSync</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;applemobilesync</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Apple Mobile Sync</typehint>
- </field>
- <field>
- <name>CrashPlan</name>
- <bindstofield>ezshaper-&gt;step7-&gt;crashplan</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>CrashPlan</typehint>
- </field>
- <field>
- <name>CVSUP</name>
- <bindstofield>ezshaper-&gt;step7-&gt;cvsup</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>CVSUP</typehint>
- </field>
- <field>
- <name>DNS</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;dns</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Domain Name Services</typehint>
- </field>
- <field>
- <name>Git</name>
- <bindstofield>ezshaper-&gt;step7-&gt;git</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Git Server</typehint>
- </field>
- <field>
- <name>HBCI</name>
- <bindstofield>ezshaper-&gt;step7-&gt;hbci</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>HBCI</typehint>
- </field>
- <field>
- <name>ICMP</name>
- <bindstofield>ezshaper-&gt;step7-&gt;icmp</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>ICMP Protocol</typehint>
- </field>
- <field>
- <name>SMB</name>
- <bindstofield>ezshaper-&gt;step7-&gt;smb</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Microsoft SMB Protocol and friends</typehint>
- </field>
- <field>
- <name>SNMP</name>
- <bindstofield>ezshaper-&gt;step7-&gt;snmp</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Simple Network Management Protocol</typehint>
- </field>
- <field>
- <name>MySQLServer</name>
- <bindstofield>ezshaper-&gt;step7-&gt;mysqlserver</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>MySQL Server</typehint>
- </field>
- <field>
- <name>NNTP</name>
- <bindstofield>ezshaper-&gt;step7-&gt;nntp</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Internet News</typehint>
- </field>
- <field>
- <name>Slingbox</name>
- <bindstofield>ezshaper-&gt;step7-&gt;slingbox</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Slingbox</typehint>
- </field>
- <field>
- <name>Subversion</name>
- <bindstofield>ezshaper-&gt;step7-&gt;subversion</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Subversion Server</typehint>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
- </step>
- <step>
- <id>8</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <field>
- <name>Reload profile notice</name>
- <type>listtopic</type>
- </field>
- <description> After pressing Finish the system will load the new profile.&lt;br/&gt; Please note that this may take a moment.&lt;br/&gt; Also note that the traffic shaper is stateful meaning that only new connections will be shaped.&lt;br/&gt; If this is an issue please reset the state table after loading the profile.&lt;br/&gt;</description>
- <fields>
- <field>
- <name>Finish</name>
- <type>submit</type>
- </field>
- </fields>
- <stepsubmitphpaction>step8_stepsubmitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
- </step>
-</pfsensewizard>
diff --git a/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc b/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc
deleted file mode 100644
index 3f68869..0000000
--- a/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc
+++ /dev/null
@@ -1,1741 +0,0 @@
-<?php
-/*
- traffic_shaper_wizard_multi_all.inc
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2006 Bill Marquette - bill.marquette@gmail.com.
- Copyright (C) 2006 Scott Ullrich - sullrich@pfsense.com.
- Copyright (C) 2008-2010 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-function step1_stepbeforeformdisplay() {
- global $stepid, $savemsg, $pkg;
-
- $fields =& $pkg['step'][0]['fields']['field'];
-
- $lans = 0;
- $wans = 0;
-
- $iflisttmp = get_configured_interface_with_descr();
- foreach ($iflisttmp as $if => $ifdesc) {
- if (!is_altq_capable(get_real_interface($if)))
- continue;
- if (interface_has_gateway($if) || interface_has_gatewayv6($if))
- $wans++;
- else
- $lans++;
- }
-
- foreach ($fields as &$field) {
- if ($field['name'] == 'numberofconnections')
- $field['value'] = $wans;
- else if ($field['name'] == 'numberoflocalinterfaces')
- $field['value'] = $lans;
- }
-}
-
-function step1_submitphpaction() {
- global $stepid, $savemsg;
-
- if (!isset($_POST['numberofconnections'])) {
- $savemsg=gettext("You need to specify the number of connections.");
- $stepid--;
- return;
- }
- if (intval($_POST['numberofconnections']) < 1) {
- $savemsg=gettext("The number of connections should be greater than 1.");
- $stepid--;
- return;
- }
-
- if (!isset($_POST['numberoflocalinterfaces'])) {
- $savemsg=gettext("You need to specify the number of LAN type interfaces.");
- $stepid--;
- return;
- }
- if (intval($_POST['numberoflocalinterfaces']) < 1) {
- $savemsg=gettext("The number of LAN type interfaces should be greater than 1.");
- $stepid--;
- return;
- }
-}
-
-function step2_stepbeforeformdisplay() {
- global $config, $pkg;
- global $stepid, $savemsg;
-
- $wans = 0;
- $lans = 0;
- $iflist = array();
- $iflisttmp = get_configured_interface_with_descr();
- foreach ($iflisttmp as $if => $ifdesc) {
- if (!is_altq_capable(get_real_interface($if)))
- continue;
- if (interface_has_gateway($if) || interface_has_gatewayv6($if))
- $wans++;
- else
- $lans++;
- $iflist[$if] = $ifdesc;
- }
- $numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']);
- if ($numberofconnections > $wans) {
- $savemsg=gettext("You have less interfaces than number of connections!");
- $stepid--;
- return;
- }
-
- $numberoflocalinterfaces = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
- if ($numberoflocalinterfaces > $lans) {
- $savemsg=gettext("You have less interfaces than number of connections!");
- $stepid--;
- return;
- }
- $cfgname = "traffic_shaper_wizard_multi_all.xml";
-
- $fields =& $pkg['step'][1]['fields']['field'];
-
- /*
- unset($config['ezshaper']['step2']);
- $config['ezshaper']['step2'] = array();
- write_config();
- */
- $fields = array();
-
- for ($i = 0; $i < $numberoflocalinterfaces; $i++) {
- $field = array();
- $interface_friendly = $i+1;
- $field['name'] = "Setup connection speed and scheduler information for interface LAN #{$interface_friendly}";
- $field['type'] = "listtopic";
- $fields[] = $field;
-
- $field = array();
- $field['displayname'] = "Interface & Scheduler";
- $field['name'] = "local{$i}interface";
- $field['type'] = "select";
- $field['options']['option'] = array();
- foreach ($iflist as $ifname => $ifdescr) {
- // Skip wan interfaces here
- if (interface_has_gateway($ifname) || interface_has_gatewayv6($ifname))
- continue;
- $opts = array();
- $opts['displayname'] = $ifdescr;
- $opts['name'] = $ifname;
- $opts['value'] = $ifname;
- $field['options']['option'][] = $opts;
- }
- $field['combinefieldsbegin'] = "true";
- $field['bindstofield'] = "ezshaper->step2->local{$i}interface";
- $fields[] = $field;
-
- $field = array();
- $field['combinefieldsend'] = "true";
- $field['dontdisplayname'] = "true";
- $field['dontcombinecells'] = "true";
- $field['name'] = "local{$i}downloadscheduler";
- $field['type'] = "select";
- $field['typehint'] = "Queueing discipline to apply on this local interface.";
- $field['options']['option'] = array();
- $opts = array();
- $opts['name'] = "HFSC";
- $opts['value'] = "HFSC";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['name'] = "CBQ";
- $opts['value'] = "CBQ";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['name'] = "PRIQ";
- $opts['value'] = "PRIQ";
- $field['options']['option'][] = $opts;
- $field['bindstofield'] = "ezshaper->step2->local{$i}downloadscheduler";
- $fields[] = $field;
- }
-
- for ($i = 0; $i < $numberofconnections; $i++) {
- $field = array();
- $interface_friendly = $i+1;
- $field['name'] = "Setup connection speed and scheduler information for interface WAN#{$interface_friendly}";
- $field['type'] = "listtopic";
- $fields[] = $field;
-
- $field = array();
- $field['displayname'] = "Interface & Scheduler";
- $field['name'] = "conn{$i}interface";
- $field['type'] = "select";
- $interface_real = $i+1;
- $field['options']['option'] = array();
- foreach ($iflist as $ifname => $ifdescr) {
- // Skip lan interfaces here
- if (!interface_has_gateway($ifname) && !interface_has_gatewayv6($ifname))
- continue;
- $opts = array();
- $opts['displayname'] = $ifdescr;
- $opts['name'] = $ifname;
- $opts['value'] = $ifname;
- $field['options']['option'][] = $opts;
- }
- $field['bindstofield'] = "ezshaper->step2->conn{$i}interface";
- $field['combinefieldsbegin'] = "true";
- $fields[] = $field;
-
- $field = array();
- $field['combinefieldsend'] = "true";
- $field['dontdisplayname'] = "true";
- $field['dontcombinecells'] = "true";
- $field['name'] = "conn{$i}uploadscheduler";
- $field['type'] = "select";
- $field['typehint'] = "Queueing discipline to apply on the upload of this connection.";
- $field['options']['option'] = array();
- $opts = array();
- $opts['name'] = "HFSC";
- $opts['value'] = "HFSC";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['name'] = "CBQ";
- $opts['value'] = "CBQ";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['name'] = "PRIQ";
- $opts['value'] = "PRIQ";
- $field['options']['option'][] = $opts;
- $field['bindstofield'] = "ezshaper->step2->conn{$i}uploadscheduler";
- $fields[] = $field;
-
- $field = array();
- $field['displayname'] = "Upload";
- $field['name'] = "conn{$i}upload";
- $field['type'] = "input";
- $field['bindstofield'] = "ezshaper->step2->conn{$i}upload";
- $field['combinefieldsbegin'] = "true";
- $fields[] = $field;
-
- $field = array();
- $field['combinefieldsend'] = "true";
- $field['dontdisplayname'] = "true";
- $field['dontcombinecells'] = "true";
- $field['name'] = "conn{$i}uploadspeed";
- $field['typehint'] = "Upload bandwidth on this connection.";
- $field['type'] = "select";
- $field['options']['option'] = array();
- $opts = array();
- $opts['value'] = "Kb";
- $opts['name'] = "Kbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Mb";
- $opts['name'] = "Mbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Gb";
- $opts['name'] = "Gbit/s";
- $field['options']['option'][] = $opts;
- $field['bindstofield'] = "ezshaper->step2->conn{$i}uploadspeed";
- $fields[] = $field;
-
- $field = array();
- $field['displayname'] = "Download";
- $field['name'] = "conn{$i}download";
- $field['type'] = "input";
- $field['bindstofield'] = "ezshaper->step2->conn{$i}download";
- $field['combinefieldsbegin'] = "true";
- $fields[] = $field;
-
- $field = array();
- $field['combinefieldsend'] = "true";
- $field['dontdisplayname'] = "true";
- $field['dontcombinecells'] = "true";
- $field['name'] = "conn{$i}downloadspeed";
- $field['typehint'] = "Download bandwidth on this connection.";
- $field['type'] = "select";
- $field['options']['option'] = array();
- $opts = array();
- $opts['value'] = "Kb";
- $opts['name'] = "Kbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Mb";
- $opts['name'] = "Mbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Gb";
- $opts['name'] = "Gbit/s";
- $field['options']['option'][] = $opts;
- $field['bindstofield'] = "ezshaper->step2->conn{$i}downloadspeed";
- $fields[] = $field;
- }
- $field = array();
- $field['name'] = "Next";
- $field['type'] = "submit";
- $fields[] = $field;
-}
-
-function step2_stepsubmitphpaction() {
- global $config;
- global $stepid, $savemsg;
- $sumdownloads = 0;
-
- /* Input Validation */
- $steps = intval($config['ezshaper']['step1']['numberofconnections']);
- $localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
- for ($i = 0; $i < $steps; $i++) {
- for ($j = $i + 1; $j <= $steps; $j++) {
- if ($_POST["conn{$i}interface"] == $_POST["conn{$j}interface"]) {
- $savemsg=gettext("You cannot select the same interface for connections {$i} and {$j}.");
- $stepid--;
- return;
- }
- if (trim($_POST["conn{$i}uploadscheduler"]) != "PRIQ") {
- if (!is_numeric($_POST["conn{$i}upload"])) {
- $savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
- $stepid--;
- return;
- }
- if (!is_numeric($_POST["conn{$i}download"])) {
- $savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
- $stepid--;
- return;
- }
- $upbw = $_POST["conn{$i}upload"];
- $downbw = $_POST["conn{$i}download"];
- if ($upbw < 1 || $downbw < 1) {
- $savemsg = gettext("You cannot specify 0 bandwidth!");
- $stepid--;
- return;
- }
- if (intval($upbw) < 128 && $_POST["conn{$i}uploadspeed"] == "Kb" && trim($_POST["conn{$i}uploadscheduler"]) == "CBQ") {
- $savemsg=gettext("Uploads smaller than 128Kbit/s is not supported for connection {$i} on CBQ scheduler.");
- $stepid--;
- return;
- }
- }
- }
- for ($j = 0; $j < $localint; $j++) {
- if ($_POST["conn{$i}interface"] == $_POST["local{$j}interface"]) {
- $savemsg=gettext("You cannot select the same interface for local and outside.");
- $stepid--;
- return;
- }
- }
- }
- for ($i = 0; $i < $localint; $i++) {
- for ($j = $i + 1; $j < $localint; $j++) {
- if ($_POST["local{$i}interface"] == $_POST["local{$j}interface"]) {
- $savemsg=gettext("You cannot select the same interface twice on local interfaces.");
- $stepid--;
- return;
- }
- }
- }
-
- /* This is necessary since the wizard expects predefined fields. */
- unset($config['ezshaper']['step2']);
- $config['ezshaper']['step2'] = array();
-
- for ($i = 0; $i < $localint; $i++) {
- $config['ezshaper']['step2']["local{$i}downloadscheduler"] = $_POST["local{$i}downloadscheduler"];
- $config['ezshaper']['step2']["local{$i}interface"] = $_POST["local{$i}interface"];
- }
-
- for ($i = 0; $i < $steps; $i++) {
- $config['ezshaper']['step2']["conn{$i}uploadscheduler"] = $_POST["conn{$i}uploadscheduler"];
- $config['ezshaper']['step2']["conn{$i}upload"] = $_POST["conn{$i}upload"];
- $config['ezshaper']['step2']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"];
- $config['ezshaper']['step2']["conn{$i}download"] = $_POST["conn{$i}download"];
- $config['ezshaper']['step2']["conn{$i}downloadspeed"] = $_POST["conn{$i}downloadspeed"];
- $config['ezshaper']['step2']["conn${i}interface"] = $_POST["conn{$i}interface"];
- }
-}
-
-function step3_stepbeforeformdisplay() {
- global $config, $pkg;
- global $stepid, $savemsg;
-
- $cfgname = "traffic_shaper_wizard_multi_all.xml";
-
- $numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']);
- $numberoflocalinterfaces = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
-
- $fields =& $pkg['step'][1]['fields']['field'];
-
- $voipfields =& $pkg['step'][2]['fields']['field'];
-
- $voipfields = array();
- $enablefields = array();
-
- $field = array();
- $field['name'] = "enable";
- $field['type'] = "checkbox";
- $field['typehint'] = "Prioritize Voice over IP traffic.";
- $field['bindstofield'] = "ezshaper->step3->enable";
- $field['descritpion'] = "This will raise the priority of VOIP traffic above all other traffic.";
- $voipfields[] = $field;
-
- $field = array();
- $field['name'] = "Next";
- $field['type'] = "submit";
- $voipfields[] = $field;
-
- $field = array();
- $field['name'] = "VOIP specific settings";
- $field['type'] = "listtopic";
- $voipfields[] = $field;
-
- $field['name'] = "Provider";
- $enablefields[] = "Provider";
- $field['type'] = "select";
- $field['description'] = "Choose Generic if your provider isn't listed.";
- $field['options']['option'] = array();
- $opts = array();
- $opts['name'] = "Generic (lowdelay)";
- $opts['value'] = "Generic";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['name'] = "VoicePulse";
- $opts['value'] = "VoicePulse";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['name'] = "Asterisk/Vonage";
- $opts['value'] = "Asterisk";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['name'] = "PanasonicTDA";
- $opts['value'] = "Panasonic";
- $field['options']['option'][] = $opts;
- $field['bindstofield'] = "ezshaper->step3->provider";
- $voipfields[] = $field;
-
- $field = array();
- $field['displayname'] = "Upstream SIP Server";
- $field['name'] = "upstream_sip_server";
- $enablefields[] = "upstream_sip_server";
- $field['type'] = "inputalias";
- $field['description'] = "(Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the <strong>remote</strong> PBX or SIP Trunk to prioritize. <br />NOTE: You can also use a Firewall Alias in this location.";
- $field['message'] = "IP Address field is non-blank and doesn't look like an IP address.";
- $field['bindstofield'] = "ezshaper->step3->address";
- $voipfields[] = $field;
-
- for ($i = 0; $i < $numberofconnections; $i++) {
- $field = array();
- $interface_friendly = $i+1;
- $field['name'] = "Connection WAN #{$interface_friendly}";
- $field['type'] = "listtopic";
- $voipfields[] = $field;
-
- $field = array();
- $field['displayname'] = "Upload";
- $field['name'] = "conn{$i}upload";
- $enablefields[] = "conn{$i}upload";
- $field['type'] = "input";
- $field['bindstofield'] = "ezshaper->step3->conn{$i}upload";
- $field['combinefieldsbegin'] = "true";
- $voipfields[] = $field;
-
- $field = array();
- $field['combinefieldsend'] = "true";
- $field['dontdisplayname'] = "true";
- $field['dontcombinecells'] = "true";
- $field['name'] = "conn{$i}uploadspeed";
- $enablefields[] = "conn{$i}uploadspeed";
- $field['typehint'] = "Upload bandwidth guarantee for VOIP phone(s) on connection {$i}.";
- $field['type'] = "select";
- $field['options']['option'] = array();
- $opts = array();
- $opts['value'] = "Kb";
- $opts['name'] = "Kbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Mb";
- $opts['name'] = "Mbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Gb";
- $opts['name'] = "Gbit/s";
- $field['options']['option'][] = $opts;
- $field['bindstofield'] = "ezshaper->step3->conn{$i}uploadspeed";
- $voipfields[] = $field;
- }
-
- for ($i = 0; $i < $numberoflocalinterfaces; $i++) {
- $field = array();
- $interface_friendly = $i+1;
- $field['name'] = "Connection LAN #{$interface_friendly}";
- $field['type'] = "listtopic";
- $voipfields[] = $field;
-
- $field = array();
- $field['displayname'] = "Download";
- $field['name'] = "local{$i}download";
- $enablefields[] = "local{$i}download";
- $field['type'] = "input";
- $field['bindstofield'] = "ezshaper->step3->local{$i}download";
- $field['combinefieldsbegin'] = "true";
- $voipfields[] = $field;
-
- $field = array();
- $field['combinefieldsend'] = "true";
- $field['dontdisplayname'] = "true";
- $field['dontcombinecells'] = "true";
- $field['name'] = "local{$i}downloadspeed";
- $enablefields[] = "local{$i}downloadspeed";
- $field['typehint'] = "Download bandwidth guarantee for VOIP phone(s) on connections.";
- $field['type'] = "select";
- $field['options']['option'] = array();
- $opts = array();
- $opts['value'] = "Kb";
- $opts['name'] = "Kbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Mb";
- $opts['name'] = "Mbit/s";
- $field['options']['option'][] = $opts;
- $opts = array();
- $opts['value'] = "Gb";
- $opts['name'] = "Gbit/s";
- $field['options']['option'][] = $opts;
- $field['bindstofield'] = "ezshaper->step3->local{$i}downloadspeed";
- $voipfields[] = $field;
- }
-
- $field = array();
- $field['name'] = "Next";
- $field['type'] = "submit";
- $voipfields[] = $field;
- $voipfields[0]['enablefields'] = implode(",", $enablefields);
-}
-
-function step3_stepsubmitphpaction() {
- global $config;
- global $stepid, $savemsg;
-
- if (!$_POST['enable'])
- return;
-
- if($_POST['upstream_sip_server']) {
- if(!is_ipaddroralias($_POST['upstream_sip_server'])) {
- /* item is not an ip or alias. error out */
- $savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue.");
- $stepid--;
- return;
- }
- }
-
- $steps = intval($config['ezshaper']['step1']['numberofconnections']);
- for ($i = 0; $i < $steps; $i++) {
- if ($config['ezshaper']['step2']["conn{$i}uploadscheduler"] == "PRIQ")
- continue;
- if (!is_numeric($_POST["conn{$i}upload"])) {
- $savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
- $stepid--;
- return;
- }
- if ($_POST["conn{$i}uploadspeed"] == "%") {
- if (intval($_POST["conn{$i}upload"]) > 80) {
- $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
- $stepid--;
- return;
- }
- } else {
- $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
- $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]);
- $factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]);
- $input_bw = $factor * floatval($_POST["conn{$i}upload"]);
- if ((0.8 * $ifbw) < $input_bw) {
- $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
- $stepid--;
- return;
- }
- }
- }
-
- $localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
- for ($i = 0; $i < $localint; $i++) {
- if ($config['ezshaper']['step2']["local{$i}downloadscheduler"] == "PRIQ")
- continue;
- if (!is_numeric($_POST["local{$i}download"])) {
- $savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
- $stepid--;
- return;
- }
- if ($_POST["local{$i}downloadspeed"] == "%") {
- if (intval($_POST["local{$i}download"]) > 80) {
- $savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$i} higher than 80% of the connection.");
- $stepid--;
- return;
- }
- } else {
- for ($j = 0; $j < $steps; $j++) {
- $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$j}downloadspeed"]);
- $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$j}download"]);
- $factor = wizard_get_bandwidthtype_scale($_POST["local{$i}downloadspeed"]);
- $input_bw = $factor * floatval($_POST["local{$i}download"]);
- if ((0.8 * $ifbw) < $input_bw) {
- $savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$j} higher than 80% of the connection.");
- $stepid--;
- return;
- }
- }
- }
- }
-
- /* This is necessary since the wizard expects predefined fields. */
- unset($config['ezshaper']['step3']);
- $config['ezshaper']['step3'] = array();
-
- if (!empty($_POST['upstream_sip_server']))
- $config['ezshaper']['step3']['address'] = $_POST['upstream_sip_server'];
- if ($_POST['enable'] == 'on')
- $config['ezshaper']['step3']['enable'] = 'on';
- if (!empty($_POST['provider'])) {
- $VoIPproviders = array("Generic", "VoicePulse", "Asterisk", "Panasonic");
- if (in_array($_POST['provider'], $VoIPproviders)) {
- $config['ezshaper']['step3']['provider'] = $_POST['provider'];
- }
- }
- for ($i = 0; $i < $localint; $i++) {
- $config['ezshaper']['step3']["local{$i}download"] = $_POST["local{$i}download"];
- $config['ezshaper']['step3']["local{$i}downloadspeed"] = $_POST["local{$i}downloadspeed"];
- }
-
- for ($i = 0; $i < $steps; $i++) {
- $config['ezshaper']['step3']["conn{$i}upload"] = $_POST["conn{$i}upload"];
- $config['ezshaper']['step3']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"];
- }
-}
-
-function step4_stepsubmitphpaction() {
- global $config;
- global $stepid, $savemsg;
-
- if ( $_POST['enable'] ) {
- if(!$_POST['bandwidth']) {
- $savemsg="You need to specify a value for bandwidth!";
- $stepid--;
- return;
- }
- if(!is_numeric($_POST['bandwidth'])) {
- $savemsg="The posted value is not a valid bandwidth.";
- $stepid--;
- return;
- }
- if ($_POST['bandwidthspeed'] <> "%") {
- $savemsg = gettext("Only percentage bandwidth specification is allowed.");
- $stepid--;
- return;
- }
- $bw = $_POST['bandwidth'];
- if($bw > 15 || $bw < 2) {
- $savemsg="Values should be between 2% and 15%!";
- $stepid--;
- return;
- }
- if($_POST['address'] <> "" && !is_ipaddroralias($_POST['address'])) {
- /* item is not an ip or alias. error out */
- $savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue.");
- $stepid--;
- }
- }
-}
-
-function step5_stepsubmitphpaction() {
- global $stepid, $savemsg;
- if ( $_POST['enable'] ) {
- if ($_POST['p2pcatchall']) {
- if(!is_numeric($_POST['bandwidth'])) {
- $savemsg="Posted value is not a valid bandwidth.";
- $stepid--;
- }
- if ($_POST['bandwidthspeed'] <> "%") {
- $savemsg = gettext("Only percentage bandwidth specification is allowed.");
- $stepid--;
- return;
- }
- $bw = $_POST['bandwidth'];
- if($bw > 15 || $bw < 2) {
- $savemsg="Values should be between 2% and 15%!";
- $stepid--;
- return;
- }
- }
- }
-}
-
-function step8_stepsubmitphpaction() {
- global $g, $config;
-
- /* save the new configuration */
- apply_all_chosen_items();
-
- /* reset rrd queues */
- system("rm -f /var/db/rrd/*queuedrops.rrd");
- system("rm -f /var/db/rrd/*queues.rrd");
- enable_rrd_graphing();
-
- /* apply the new configuration to the system */
- filter_configure();
-
- /* And we're no longer dirty! */
- clear_subsystem_dirty('shaper');
-
- update_filter_reload_status("Initializing");
- header("Location: status_filter_reload.php");
- exit;
-}
-
-function apply_all_chosen_items() {
- global $config, $g, $altq_list_queues, $gamesplist, $voiplist, $othersplist, $p2plist;
-
- require_once("wizardapp.inc");
-
- /*
- * Wipe previous config.
- * Doing it here makes sense since we can wipe the previous config only after
- * the user decides to do so, finishing the wizard.
- */
- if(isset($config['shaper']['queue']))
- unset($config['shaper']['queue']);
- /* XXX: This is redundant, because this should be handled by converter at startup. */
- if(isset($config['shaper']['rule']))
- unset($config['shaper']['rule']);
- foreach ($config['filter']['rule'] as $key => $rule)
- if ($rule['wizard'] == "yes")
- unset($config['filter']['rule'][$key]);
-
- /* restart the cached config */
- unset($altq_list_queues);
- $altq_list_queues = array();
-
- $steps = intval($config['ezshaper']['step1']['numberofconnections']);
-
- $interfacelist = array();
-
- for ($i = 0; $i < $steps; $i++) {
-
- $tmppath = array();
- $altq =& new altq_root_queue();
-
- $altq->SetInterface($config['ezshaper']['step2']["conn{$i}interface"]);
- $interfacelist[] = $config['ezshaper']['step2']["conn{$i}interface"];
- $altq->SetScheduler($config['ezshaper']['step2']["conn{$i}uploadscheduler"]);
- $altq->SetBandwidth(floatval($config['ezshaper']['step2']["conn{$i}upload"]));
- $altq->SetBwscale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
- $altq->SetEnabled("on");
- $altq_list_queues[$altq->GetQname()] =& $altq;
- array_push($tmppath, $config['ezshaper']['step2']["conn{$i}interface"]);
- $altq->SetLink($tmppath);
- $altq->wconfig();
-
- $sched = $config['ezshaper']['step2']["conn{$i}uploadscheduler"];
- $voipbw =0;
- $voipbwunit = "Kb";
- $voip = false;
- $penalty = false;
- $penaltybw = 0;
- $penaltybwunit = "Kb";
- $p2p = false;
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- $p2pcatchbwunit = "%";
- $games = false;
- $otherpriority = false;
- $remainbw = 0;
- $factor = 0;
- $upfactor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
- $upbw = floatval($config['ezshaper']['step2']["conn{$i}upload"]) * $upfactor;
-
- if ($config['ezshaper']['step3']['enable']) {
- $voip = true;
- $voipbw = $config['ezshaper']['step3']["conn{$i}upload"];
- $voipbwunit = $config['ezshaper']['step3']["conn{$i}uploadspeed"];
- if ($voipbwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($voipbwunit);
- $remainbw += $voipbw * $factor;
- }
- if ($config['ezshaper']['step4']['enable']) {
- $penalty = true;
- $penaltybw = $config['ezshaper']['step4']['bandwidth'];
- $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
- if ($penaltybwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
- $remainbw += $penaltybw * $factor;
- } else {
- $penalty = false;
- $penaltybw = 0;
- }
- if ($config['ezshaper']['step5']['enable']) {
- $p2p = true;
- if ($config['ezshaper']['step5']['p2pcatchall']) {
- $p2pcatchall = true;
- $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
- $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
- if ($p2pcatchbwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
- $remainbw += $p2pcatchbw * $factor;
- } else {
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
- } else {
- $p2p = false;
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
- if ($config['ezshaper']['step6']['enable']) {
- $games = true;
- } else {
- $games = false;
- }
-
- if ($config['ezshaper']['step7']['enable']) {
- $otherpriority = true;
- } else {
- $otherpriority = false;
- }
-
- $remainbw = round($remainbw / $upbw * 100, 2);
-
- if (intval($remainbw) > 0 && intval($remainbw) > 30) {
- $savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue.");
- header("Location: wizard.php?xml=traffic_shaper_wizard_multi_all.xml&stepid=2&message={$savemsg}");
- exit;
- } else {
- $remainbw = 100 - $remainbw;
- }
-
- if ($sched != "PRIQ") {
- if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qInternet";
- //$tmpcf['priority'] = 6;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- If ($sched == "CBQ") {
- $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]);
- $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"];
- }
- else if ($sched == "HFSC") {
- $tmpcf['linkshare3'] =
- floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"];
- $tmpcf['upperlimit3'] =
- floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"];
- $tmpcf['upperlimit'] = "on";
-
-
- $tmpcf['linkshare'] = "on";
- $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]);
- $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"];
- }
- array_push($tmppath, "qInternet");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- //array_pop($tmppath);
- //echo "qInternet <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- $altq =& $qtmp;
- }
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qACK";
- $tmpcf['priority'] = 6;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- If ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.2;
- $tmpcf['bandwidthtype'] = "%";
- }
- else if ($sched == "HFSC") {
- $lkbw = 0.20 * $remainbw;
- $tmpcf['linkshare3'] = "{$lkbw}%";
- $tmpcf['linkshare'] = "on";
- $tmpcf['bandwidth'] = $lkbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qACK");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qACK <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- if ($p2pcatchall)
- $tmpcf['name'] = "qOthersDefault";
- else
- $tmpcf['name'] = "qDefault";
- $tmpcf['priority'] = 3;
- $tmpcf['enabled'] = "on";
- if (!$p2pcatchall)
- $tmpcf['default'] = "on";
- $tmpcf['ecn'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, $tmpcf['name']);
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qDefault <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
- if ($p2p) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qP2P";
- $tmpcf['priority'] = 1;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($p2pcatchall) {
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $p2pcatchbw;
- $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
- } else if ($sched == "HFSC") {
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
- $tmpcf['bandwidth'] = $p2pcatchbw;
- $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
- }
- $tmpcf['default'] = "on";
-
- } else {
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpbw = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$tmpbw}%";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = "{$tmpbw}%";
- $tmpcf['bandwidth'] = $tmpbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- }
- array_push($tmppath, "qP2P");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qP2P <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($voip) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qVoIP";
- $tmpcf['priority'] = 7;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- if ($voipbw > 0) {
- $tmpcf['bandwidth'] = $voipbw;
- $tmpcf['bandwidthtype'] = $voipbwunit;
- } else {
- $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- } else if ($sched == "HFSC") {
- if ($voipbw > 0) {
- $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
- } else {
- $voipbw = $remainbw * 0.20; /* 20% bandwidth */
- $tmpcf['realtime3'] = "{$voipbw}%";
- }
- $tmpcf['realtime'] = "on";
- $tmpcf['bandwidth'] = 32;
- $tmpcf['bandwidthtype'] = "Kb";
- }
- array_push($tmppath, "qVoIP");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qVoIP <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($games) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qGames";
- $tmpcf['priority'] = 5;
- $tmpcf['enabled'] = "on";
- $tmpcf['ecn'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $gamesbw = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$gamesbw}%";
- $tmpcf['bandwidth'] = "{$gamesbw}";
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qGames");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qGames <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($otherpriority) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qOthersHigh";
- $tmpcf['priority'] = 4;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpcf['linkshare'] = "on";
- $otherbw = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['linkshare3'] = "{$otherbw}%";
- $tmpcf['bandwidth'] = $otherbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qOthersHigh");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qHigh <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qOthersLow";
- $tmpcf['priority'] = 2;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- if ($penalty) {
- $tmpcf['bandwidthtype'] = $penaltybwunit;
- $tmpcf['bandwidth'] = $penaltybw;
- } else {
- $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- } else if ($sched == "HFSC") {
- if ($penalty) {
- $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
- $tmpcf['bandwidth'] = $penaltybw;
- $tmpcf['bandwidthtype'] = $penaltybwunit;
- } else {
- $lsbw = $remainbw * 0.05;
- $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
- $tmpcf['bandwidth'] = $lsbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- $tmpcf['linkshare'] = "on";
- }
- array_push($tmppath, "qOthersLow");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qLow <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
- array_pop($tmppath);
- }
-
- /* LAN bandwidth ----------------------------------------------------------------------------------------- */
- $localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
- $lanbw = 0;
- for ($i = 0; $i < $steps; $i++) {
- $down = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
- $input_bw = floatval($config['ezshaper']['step2']["conn{$i}download"]) * $down;
- $lanbw += $input_bw;
- }
-
- for ($i = 0; $i < $localint; $i++) {
-
- $tmppath = array();
- $altq =& new altq_root_queue();
-
- $altq->SetInterface($config['ezshaper']['step2']["local{$i}interface"]);
- $altq->SetScheduler($config['ezshaper']['step2']["local{$i}downloadscheduler"]);
- //$altq->SetBandwidth($lanbw/1000);
- //$altq->SetBwscale("Kb");
- $altq->SetEnabled("on");
- $altq_list_queues[$altq->GetQname()] =& $altq;
- array_push($tmppath, $config['ezshaper']['step2']["local{$i}interface"]);
- $altq->SetLink($tmppath);
- //var_dump($input_errors);
- $altq->wconfig();
-
- $sched = $config['ezshaper']['step2']["local{$i}downloadscheduler"];
- $voipbw =0;
- $voipbwunit = "%";
- $voip = false;
- $penalty = false;
- $penaltybw = 0;
- $penaltybwunit = "%";
- $p2p = false;
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- $games = false;
- $otherpriority = false;
- $remainbw = 0;
-
-
- if ($config['ezshaper']['step3']['enable']) {
- $voip = true;
- $voipbw = $config['ezshaper']['step3']["local{$i}download"];
- $voipbwunit = $config['ezshaper']['step3']["local{$i}downloadspeed"];
- if ($sched != HFSC) {
- if ($voipbwunit == "%")
- $factor = $lanbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($voipbwunit);
- $remainbw += floatval($voipbw) * $factor;
- } else
- $remainbw += 32000; /* 32Kbit/s reserved for HFSC link sharing */
- }
- if ($config['ezshaper']['step4']['enable']) {
- $penalty = true;
- $penaltybw = $config['ezshaper']['step4']['bandwidth'];
- $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
- if ($penaltybwunit == "%")
- $factor = $lanbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
- $remainbw += floatval($penaltybw) * $factor;
- } else {
- $penalty = false;
- $penaltybw = 0;
- }
- if ($config['ezshaper']['step5']['enable']) {
- $p2p = true;
- if ($config['ezshaper']['step5']['p2pcatchall']) {
- $p2pcatchall = true;
- $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
- $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
- if ($p2pcatchbwunit == "%")
- $factor = $upbw/100;
- else
- $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
- $remainbw += floatval($p2pcatchbw) * $factor;
- } else {
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
- } else {
- $p2p = false;
- $p2pcatchall = false;
- $p2pcatchbw = 0;
- }
- if ($config['ezshaper']['step6']['enable']) {
- $games = true;
- } else {
- $games = false;
- }
-
- if ($config['ezshaper']['step7']['enable']) {
- $otherpriority = true;
- } else {
- $otherpriority = false;
- }
- $remainbw = round($remainbw / $lanbw * 100, 2);
-
- if (intval($remainbw) > 0 && intval($remainbw) > 40) {
- $savemsg=gettext("Custom Bandwidths are greater than 40%. Please lower them for the wizard to continue.");
- header("Location: wizard.php?xml=traffic_shaper_wizard_multi_all.xml&stepid=2&message={$savemsg}");
- exit;
- } else {
- $remainbw = 100 - $remainbw;
- }
-
- if (!$p2pcatchall) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qLink";
- $tmpcf['priority'] = 2;
- $tmpcf['enabled'] = "on";
- $tmpcf['default'] = "on";
- $tmpcf['qlimit'] = 500;
- $tmpcf['ecn'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = 20; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpcf['bandwidth'] = 20; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, $tmpcf['name']);
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qDefault <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($sched != "PRIQ") {
- if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qInternet";
- //$tmpcf['priority'] = 6;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- If ($sched == "CBQ") {
- $tmpcf['bandwidth'] = $lanbw/1000;
- $tmpcf['bandwidthtype'] = "Kb";
- }
- else if ($sched == "HFSC") {
- $tmpcf['linkshare3'] = $lanbw/1000 . "Kb";
- $tmpcf['upperlimit3'] = $lanbw/1000 . "Kb";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['linkshare'] = "on";
- $tmpcf['bandwidth'] = $lanbw/1000;
- $tmpcf['bandwidthtype'] = "Kb";
- }
- array_push($tmppath, "qInternet");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- //array_pop($tmppath);
- //echo "qInternet <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- $altq =& $qtmp;
- }
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qACK";
- $tmpcf['priority'] = 6;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- If ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.2;
- $tmpcf['bandwidthtype'] = "%";
- }
- else if ($sched == "HFSC") {
- $lkbw = 0.20 * $remainbw;
- $tmpcf['linkshare3'] = "{$lkbw}%";
- $tmpcf['linkshare'] = "on";
- $tmpcf['bandwidth'] = $lkbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qACK");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qACK <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
- if ($p2p) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qP2P";
- $tmpcf['priority'] = 1;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($p2pcatchall) {
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $p2pcatchbw;
- $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
- } else if ($sched == "HFSC") {
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
- $tmpcf['bandwidth'] = $p2pcatchbw;
- $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
- }
- $tmpcf['default'] = "on";
- $tmpcf['qlimit'] = 500;
- } else {
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpbw = $remainbw * 0.05; /* 5% bandwidth */
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$tmpbw}%";
- $tmpcf['upperlimit'] = "on";
- $tmpcf['upperlimit3'] = "{$tmpbw}%";
- $tmpcf['bandwidth'] = $tmpbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- }
- array_push($tmppath, "qP2P");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qP2P <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($voip) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qVoIP";
- $tmpcf['priority'] = 7;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- if ($voipbw > 0) {
- $tmpcf['bandwidth'] = $voipbw;
- $tmpcf['bandwidthtype'] = $voipbwunit;
- } else {
- $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- }
- } else if ($sched == "HFSC") {
- if ($voipbw > 0) {
- $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
- } else {
- $voipbw = $remainbw * 0.20; /* 20% bandwidth */
- $tmpcf['realtime3'] = "{$voipbw}%";
- }
- $tmpcf['realtime'] = "on";
- $tmpcf['bandwidth'] = 32;
- $tmpcf['bandwidthtype'] = "Kb";
- }
- array_push($tmppath, "qVoIP");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qVoIP <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($games) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qGames";
- $tmpcf['priority'] = 5;
- $tmpcf['enabled'] = "on";
- $tmpcf['ecn'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $gamesbw = $remainbw * 0.2; /* 20% bandwidth */
- $tmpcf['linkshare'] = "on";
- $tmpcf['linkshare3'] = "{$gamesbw}%";
- $tmpcf['bandwidth'] = "{$gamesbw}";
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qGames");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qGames <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
-
- if ($otherpriority) {
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qOthersHigh";
- $tmpcf['priority'] = 4;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['bandwidthtype'] = "%";
- } else if ($sched == "HFSC") {
- $tmpcf['linkshare'] = "on";
- $otherbw = $remainbw * 0.1; /* 10% bandwidth */
- $tmpcf['linkshare3'] = "{$otherbw}%";
- $tmpcf['bandwidth'] = $otherbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- array_push($tmppath, "qOthersHigh");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qHigh <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
-
-
- if ($sched == "PRIQ")
- $q =& new priq_queue();
- else if ($sched == "CBQ")
- $q =& new cbq_queue();
- else if ($sched == "HFSC")
- $q =& new hfsc_queue();
- $tmpcf = array();
- $tmpcf['name'] = "qOthersLow";
- $tmpcf['priority'] = 3;
- $tmpcf['ecn'] = "on";
- $tmpcf['enabled'] = "on";
- if ($sched == "CBQ") {
- $tmpcf['borrow'] = "on";
- if ($penalty) {
- $tmpcf['bandwidth'] = $penaltybw;
- $tmpcf['bandwidthtype'] = $penaltybwunit;
- } else {
- $tmpcf['bandwidthtype'] = "%";
- $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
- }
- } else if ($sched == "HFSC") {
- if ($penalty) {
- $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
- $tmpcf['bandwidth'] = $penaltybw;
- $tmpcf['bandwidthtype'] = $penaltybwunit;
- } else {
- $lsbw = $remainbw * 0.05;
- $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
- $tmpcf['bandwidth'] = $lsbw;
- $tmpcf['bandwidthtype'] = "%";
- }
- $tmpcf['linkshare'] = "on";
- }
- array_push($tmppath, "qOthersLow");
- $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
- array_pop($tmppath);
- //echo "qLow <br />";
- //var_dump($input_errors);
- $qtmp->wconfig();
- }
- array_pop($tmppath);
- }
-
-/* End LAN bandwidth ------------------------------------------------------------------------------------- */
-
-
-
- if (!is_array($config['filter']['rule']))
- $config['filter']['rule'] = array();
-
- $interfacelist = implode(",", $interfacelist);
-
- /* Rules */
- if ($penalty) {
- if( is_ipaddr($config['ezshaper']['step4']['address']) || is_alias($config['ezshaper']['step4']['address'])) {
- $rule = array();
- $rule['type'] = "match";
- $rule['interface'] = $interfacelist;
- $rule['descr'] = gettext("Penalty Box");
- $rule['defaultqueue'] = "qOthersLow";
- $rule['source']['address'] = $config['ezshaper']['step4']['address'];
- $rule['destination']['any'] = TRUE;
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['enabled'] = "on";
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
-
- }
- }
-
- /* If user specifies an IP, we don't bother with providers */
- if ($voip) {
- if( is_ipaddr($config['ezshaper']['step3']['address']) || is_alias($config['ezshaper']['step3']['address'])) {
- /* create VOIP rules */
- $rule = array();
- $rule['type'] = "match";
- //$rule['interface'] = $interfacelist;
- $rule['descr'] = gettext("Connections From Upstream SIP Server");
- $rule['protocol'] = "udp";
- $rule['defaultqueue'] = "qVoIP";
- $rule['source']['address'] = $config['ezshaper']['step3']['address'];
- $rule['destination']['any'] = TRUE;
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['enabled'] = "on";
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
-
- $rule = array();
- $rule['type'] = "match";
- //$rule['interface'] = $interfacelist;
- $rule['descr'] = gettext("Connections To Upstream SIP Server");
- $rule['protocol'] = "udp";
- $rule['defaultqueue'] = "qVoIP";
- $rule['source']['any'] = TRUE;
- $rule['destination']['address'] = $config['ezshaper']['step3']['address'];
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['enabled'] = "on";
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
-
- } elseif( $config['ezshaper']['step3']['provider'] == "Generic" ) {
- /* create VOIP rules */
- $rule = array();
- $rule['type'] = "match";
- $rule['interface'] = $interfacelist;
- $rule['descr'] = "DiffServ/Lowdelay/Upload";
- $rule['protocol'] = "udp";
- $rule['source']['any'] = TRUE;
- $rule['defaultqueue'] = "qVoIP";
- $rule['destination']['any'] = TRUE;
- $rule['iptos'] = "lowdelay";
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['enabled'] = "on";
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
-
- } else {
- /* loop through voiplist[] */
- foreach ($voiplist[$config['ezshaper']['step3']['provider']] as $voip) {
- $rule = array();
- $rule['type'] = "match";
- $rule['interface'] = $interfacelist;
- $rule['defaultqueue'] = 'qVoIP';
- $rule['source']['any'] = TRUE;
- $rule['destination']['any'] = TRUE;
- $rule['descr'] = "m_voip {$voip[0]} outbound";
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['enabled'] = "on";
- $rule['destination']['port'] = $voip[2]."-".$voip[3];
- if($voip[1] != '')
- $rule['protocol'] = $voip[1];
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
- }
- }
- }
-
- /* loop through p2plist[] */
- if ($p2p) {
- foreach($config['ezshaper']['step5'] as $key => $val) {
- if (!is_array($p2plist[$key]))
- continue;
- foreach ($p2plist[$key] as $p2pclient) {
- $rule = array();
- $rule['type'] = "match";
- $rule['interface'] = $interfacelist;
- $rule['defaultqueue'] = 'qP2P';
- $rule['source']['any'] = TRUE;
- $rule['destination']['any'] = TRUE;
- $rule['descr'] = "m_P2P {$p2pclient[0]} outbound";
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['destination']['port'] = $p2pclient[2]."-".$p2pclient[3];
- if($p2pclient[1] != '')
- $rule['protocol'] = $p2pclient[1];
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
- }
- }
- }
-
- /* loop through gamesplist[] */
- if ($games) {
- foreach($config['ezshaper']['step6'] as $key => $val) {
- if (!is_array($gamesplist[$key]))
- continue;
- foreach ($gamesplist[$key] as $Gameclient) {
- $rule = array();
- $rule['type'] = "match";
- $rule['interface'] = $interfacelist;
- $rule['defaultqueue'] = 'qGames';
- if ($Gameclient[1] == "tcp")
- $rule['ackqueue'] = 'qACK';
- $rule['source']['any'] = TRUE;
- $rule['destination']['any'] = TRUE;
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['enabled'] = "on";
- $rule['descr'] = "m_Game {$Gameclient[0]} outbound";
- $rule['destination']['port'] = $Gameclient[2]."-".$Gameclient[3];
- if($Gameclient[1] != '')
- $rule['protocol'] = $Gameclient[1];
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
- }
- }
- }
-
- /* loop through othersplist[] */
- if ($otherpriority) {
- foreach($config['ezshaper']['step7'] as $key => $val) {
- if (!is_array($othersplist[$key]))
- continue;
- foreach ($othersplist[$key] as $otherclient) {
- $rule = array();
- $rule['type'] = "match";
- $rule['interface'] = $interfacelist;
- switch ($val) {
- case "H":
- $rule['defaultqueue'] = 'qOthersHigh'; /* posted value H or L */
- if ($otherclient[1] == "tcp")
- $rule['ackqueue'] = 'qACK';
- $loop = 0;
- break;
- case "L":
- $rule['defaultqueue'] = 'qOthersLow'; /* posted value H or L */
- if ($otherclient[1] == "tcp")
- $rule['ackqueue'] = 'qACK';
- $loop = 0;
- break;
- case "D":
- if ($p2pcatchall) {
- $loop = 0;
- $rule['defaultqueue'] = 'qOthersDefault';
- if ($otherclient[1] == "tcp")
- $rule['ackqueue'] = 'qACK';
- } else
- $loop = 1; /* It automatically goes to default queue */
- break;
- default:
- $loop = 1;
- }
- if (!$loop) {
- $rule['source']['any'] = TRUE;
- $rule['destination']['any'] = TRUE;
- $rule['floating'] = "yes";
- $rule['wizard'] = "yes";
- $rule['enabled'] = "on";
- $rule['descr'] = "m_Other {$otherclient[0]} outbound";
-
- if($otherclient[2] or $otherclient[3]) {
- $rule['destination']['port'] = $otherclient[2]."-".$otherclient[3];
- }
- if($otherclient[1] != '')
- $rule['protocol'] = $otherclient[1];
- $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
- $config['filter']['rule'][] = $rule;
- }
- }
- }
- }
- write_config();
-}
-
-function wizard_get_bandwidthtype_scale($type = "b") {
- switch ($type) {
- case "Gb":
- $factor = 1024 * 1024 * 1024;
- break;
- case "Mb":
- $factor = 1024 * 1024;
- break;
- case "Kb":
- $factor = 1024;
- break;
- case "b":
- default:
- $factor = 1;
- break;
- }
- return intval($factor);
-}
-
-?>
diff --git a/usr/local/www/wizards/traffic_shaper_wizard_multi_all.xml b/usr/local/www/wizards/traffic_shaper_wizard_multi_all.xml
deleted file mode 100755
index e94256b..0000000
--- a/usr/local/www/wizards/traffic_shaper_wizard_multi_all.xml
+++ /dev/null
@@ -1,1657 +0,0 @@
-<?xml version="1.0"?>
-<pfsensewizard>
- <copyright><![CDATA[
- /*
- traffic_shaper_wizard_multi_all.xml
- part of pfSense (https://www.pfsense.org/)
-
- Copyright (C) 2005 Bill Marquette - bill.marquette@gmail.com.
- Copyright (C) 2008-2010 Ermal Luçi
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- */]]></copyright>
-
- <totalsteps>9</totalsteps>
- <step>
- <id>1</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <disableheader>true</disableheader>
- <description>This wizard will guide you through setting up the pfSense traffic shaper.
- Please be aware that Custom Bandwidths should not exceed 30% of the interface/link bandwidth. Keep this in mind during the wizard.
- </description>
- <fields>
- <field>
- <type>listtopic</type>
- <name>Traffic shaper Wizard</name>
- </field>
- <field>
- <displayname>Enter number of WAN type connections</displayname>
- <name>numberofconnections</name>
- <type>input</type>
- <validate>^[0-9]+$</validate>
- <description>Number of connections you have</description>
- <bindstofield>ezshaper->step1->numberofconnections</bindstofield>
- </field>
- <field>
- <displayname>Enter number of LAN type interfaces</displayname>
- <name>numberoflocalinterfaces</name>
- <type>input</type>
- <validate>^[0-9]+$</validate>
- <description>Number of local interfaces you have</description>
- <bindstofield>ezshaper->step1->numberoflocalinterfaces</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepbeforeformdisplay>step1_stepbeforeformdisplay();</stepbeforeformdisplay>
- <stepsubmitphpaction>step1_submitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
- </step>
- <step>
- <id>2</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <description>Shaper configuration</description>
- <javascriptafterformdisplay/>
- <stepbeforeformdisplay>step2_stepbeforeformdisplay();</stepbeforeformdisplay>
- <stepsubmitphpaction>step2_stepsubmitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
- <fields>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- </step>
- <step>
- <id>3</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <description>Voice over IP</description>
- <fields>
- <field>
- <name>Enable</name>
- <type>checkbox</type>
- <typehint>Prioritize Voice over IP traffic</typehint>
- <description>This will raise the priority of VOIP traffic above all other traffic.</description>
- <bindstofield>ezshaper-&gt;step3-&gt;enable</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- <field>
- <name>VOIP specific settings</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>Provider</name>
- <type>select</type>
- <description>Choose Generic if your provider isn't listed.</description>
- <bindstofield>ezshaper-&gt;step3-&gt;provider</bindstofield>
- <options>
- <option>
- <name>Generic (lowdelay)</name>
- <value>Generic</value>
- </option>
- <option>
- <name>VoicePulse</name>
- <value>VoicePulse</value>
- </option>
- <option>
- <name>Asterisk/Vonage</name>
- <value>Asterisk</value>
- </option>
- <option>
- <name>PanasonicTDA</name>
- <value>Panasonic</value>
- </option>
- </options>
- </field>
- <field>
- <displayname>Upstream SIP Server</displayname>
- <name>upstream_sip_server</name>
- <type>inputalias</type>
- <description>(Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the &lt;strong&gt;remote&lt;/strong&gt; PBX or SIP Trunk to prioritize. &lt;br /&gt;NOTE: You can also use a Firewall Alias in this location.</description>
- <bindstofield>ezshaper-&gt;step3-&gt;address</bindstofield>
- <message>IP Address field is non-blank and doesn't look like an IP address.</message>
- </field>
- <field>
- <name>Bandwidth</name>
- <type>input</type>
- <validate>^[0-9]*$</validate>
- <typehint>Total bandwidth in percentage(%)(should be between 5 and 40) guarantee for VOIP traffic.</typehint>
- <bindstofield>ezshaper-&gt;step3-&gt;bandwidth</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepbeforeformdisplay>step3_stepbeforeformdisplay();</stepbeforeformdisplay>
- <stepsubmitphpaction>step3_stepsubmitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
- </step>
- <step>
- <id>4</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <description>Penalty Box</description>
- <disableallfieldsbydefault>true</disableallfieldsbydefault>
- <fields>
- <field>
- <donotdisable>true</donotdisable>
- <name>Enable</name>
- <type>checkbox</type>
- <typehint>Penalize IP or Alias</typehint>
- <description>This will lower the priority of traffic from this IP or alias.</description>
- <enablefields>Address,Bandwidth,BandwidthSpeed</enablefields>
- <bindstofield>ezshaper-&gt;step4-&gt;enable</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- <field>
- <name>PenaltyBox specific settings</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>Address</name>
- <type>inputalias</type>
- <description>This allows you to just provide the IP address of the computer(s) to penalize. NOTE: You can also use a Firewall Alias in this location.</description>
- <bindstofield>ezshaper-&gt;step4-&gt;address</bindstofield>
- <message>IP Address field is non-blank and doesn't look like an IP address.</message>
- </field>
- <field>
- <name>Bandwidth</name>
- <type>input</type>
- <validate>^[0-9]*$</validate>
- <message>Speed must be numerical.</message>
- <bindstofield>ezshaper-&gt;step4-&gt;bandwidth</bindstofield>
- <combinefieldsbegin>true</combinefieldsbegin>
- </field>
- <field>
- <combinefieldsend>true</combinefieldsend>
- <dontdisplayname>true</dontdisplayname>
- <dontcombinecells>true</dontcombinecells>
- <donotdisable>true</donotdisable>
- <name>BandwidthSpeed</name>
- <description>The limit you want to apply.</description>
- <type>select</type>
- <options>
- <option>
- <name>%</name>
- <value>%</value>
- </option>
- <option>
- <name>bit/s</name>
- <value>b</value>
- </option>
- <option>
- <name>Kilobit/s</name>
- <value>Kb</value>
- </option>
- <option>
- <name>Megabit/s</name>
- <value>Mb</value>
- </option>
- <option>
- <name>Gigabit/s</name>
- <value>Gb</value>
- </option>
- </options>
- <bindstofield>ezshaper->step4->bandwidthunit</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepsubmitphpaction>step4_stepsubmitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
- </step>
- <step>
- <id>5</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <description>Peer to Peer networking</description>
- <disableallfieldsbydefault>true</disableallfieldsbydefault>
- <fields>
- <field>
- <donotdisable>true</donotdisable>
- <name>Enable</name>
- <type>checkbox</type>
- <typehint>Lower priority of Peer-to-Peer traffic</typehint>
- <description>This will lower the priority of P2P traffic below all other traffic. Please check the items that you would like to prioritize lower than normal traffic.</description>
- <enablefields>p2pCatchAll,Bandwidth,BandwidthSpeed,Aimster,BitTorrent,BuddyShare,CuteMX,DCplusplus,dcc,DirectConnect,DirectFileExpress,EDonkey2000,FastTrack,Gnutella,grouper,hotComm,HotlineConnect,iMesh,Napster,OpenNap,Scour,Shareaza,SongSpy,WinMX</enablefields>
- <bindstofield>ezshaper-&gt;step5-&gt;enable</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- <field>
- <name>p2p Catch all</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>p2pCatchAll</name>
- <type>checkbox</type>
- <typehint>When enabled, all uncategorized traffic is fed to the p2p queue.</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;p2pcatchall</bindstofield>
- </field>
- <field>
- <name>Bandwidth</name>
- <type>input</type>
- <validate>^[0-9]*$</validate>
- <message>Speed must be numerical.</message>
- <bindstofield>ezshaper-&gt;step5-&gt;bandwidth</bindstofield>
- <combinefieldsbegin>true</combinefieldsbegin>
- </field>
- <field>
- <combinefieldsend>true</combinefieldsend>
- <dontdisplayname>true</dontdisplayname>
- <dontcombinecells>true</dontcombinecells>
- <donotdisable>true</donotdisable>
- <name>BandwidthSpeed</name>
- <description>The limit you want to apply.</description>
- <type>select</type>
- <options>
- <option>
- <name>%</name>
- <value>%</value>
- </option>
- <option>
- <name>bit/s</name>
- <value>b</value>
- </option>
- <option>
- <name>Kilobit/s</name>
- <value>Kb</value>
- </option>
- <option>
- <name>Megabit/s</name>
- <value>Mb</value>
- </option>
- <option>
- <name>Gigabit/s</name>
- <value>Gb</value>
- </option>
- </options>
- <bindstofield>ezshaper->step5->bandwidthunit</bindstofield>
- </field>
- <field>
- <name>Enable/Disable specific P2P protocols</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>Aimster</name>
- <type>checkbox</type>
- <typehint>Aimster and other P2P using the Aimster protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;aimster</bindstofield>
- </field>
- <field>
- <name>BitTorrent</name>
- <type>checkbox</type>
- <typehint>Bittorrent and other P2P using the Torrent protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;bittorrent</bindstofield>
- </field>
- <field>
- <name>BuddyShare</name>
- <type>checkbox</type>
- <typehint>BuddyShare and other P2P using the BuddyShare protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;buddyshare</bindstofield>
- </field>
- <field>
- <name>CuteMX</name>
- <type>checkbox</type>
- <typehint>CuteMX and other P2P using the CuteMX protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;cutemx</bindstofield>
- </field>
- <field>
- <name>DCplusplus</name>
- <type>checkbox</type>
- <typehint>DC++ and other P2P using the DC++ protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;dcplusplus</bindstofield>
- </field>
- <field>
- <name>DCC</name>
- <type>checkbox</type>
- <typehint>irc DCC file transfers</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;dcc</bindstofield>
- </field>
- <field>
- <name>DirectConnect</name>
- <type>checkbox</type>
- <typehint>DirectConnect and other P2P using the DirectConnect protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;directconnect</bindstofield>
- </field>
- <field>
- <name>DirectFileExpress</name>
- <type>checkbox</type>
- <typehint>DirectFileExpress and other P2P using the DirectFileExpress protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;directfileexpress</bindstofield>
- </field>
- <field>
- <name>eDonkey2000</name>
- <type>checkbox</type>
- <typehint>eDonkey and other P2P using the eDonkey protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;edonkey2000</bindstofield>
- </field>
- <field>
- <name>FastTrack</name>
- <type>checkbox</type>
- <typehint>FastTrack and other P2P using the FastTrack protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;fasttrack</bindstofield>
- </field>
- <field>
- <name>Gnutella</name>
- <type>checkbox</type>
- <typehint>Gnutella and other P2P using the Gnutella protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;gnutella</bindstofield>
- </field>
- <field>
- <name>grouper</name>
- <type>checkbox</type>
- <typehint>grouper and other P2P using the grouper protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;grouper</bindstofield>
- </field>
- <field>
- <name>hotComm</name>
- <type>checkbox</type>
- <typehint>hotComm and other P2P using the hotComm protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;hotcomm</bindstofield>
- </field>
- <field>
- <name>HotlineConnect</name>
- <type>checkbox</type>
- <typehint>HotlineConnect and other P2P using the HotlineConnect protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;hotlineconnect</bindstofield>
- </field>
- <field>
- <name>iMesh</name>
- <type>checkbox</type>
- <typehint>iMesh and other P2P using the iMesh protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;imesh</bindstofield>
- </field>
- <field>
- <name>Napster</name>
- <type>checkbox</type>
- <typehint>Napster and other P2P using the Napster protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;napster</bindstofield>
- </field>
- <field>
- <name>OpenNap</name>
- <type>checkbox</type>
- <typehint>OpenNap and other P2P using the OpenNap protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;opennap</bindstofield>
- </field>
- <field>
- <name>Scour</name>
- <type>checkbox</type>
- <typehint>Scour and other P2P using the Scour protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;scour</bindstofield>
- </field>
- <field>
- <name>Shareaza</name>
- <type>checkbox</type>
- <typehint>Shareaza and other P2P using the Shareaza protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;shareaza</bindstofield>
- </field>
- <field>
- <name>SongSpy</name>
- <type>checkbox</type>
- <typehint>SongSpy and other P2P using the SongSpy protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;songspy</bindstofield>
- </field>
- <field>
- <name>WinMX</name>
- <type>checkbox</type>
- <typehint>WinMX and other P2P using the WinMX protocol and ports</typehint>
- <bindstofield>ezshaper-&gt;step5-&gt;winmx</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <stepsubmitphpaction>step5_stepsubmitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
- </step>
- <step>
- <id>6</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <disableallfieldsbydefault>true</disableallfieldsbydefault>
- <description>Network Games</description>
- <fields>
- <field>
- <name>Enable</name>
- <type>checkbox</type>
- <typehint>Prioritize network gaming traffic</typehint>
- <description>This will raise the priority of gaming traffic to higher than most traffic.</description>
- <enablefields>BattleNET,EAOrigin,GameForWindowsLive,PlayStationConsoles,Steam,WiiConsoles,XboxConsoles,ARMA2,ARMA3,Battlefield2,Battlefield3,BattlefieldBC2,Borderlands,CallOfDuty,Counterstrike,Crysis2,Crysis3,DeltaForce,DeadSpace2,DeadSpace3,Dirt3,DOOM3,DragonAge2,EmpireEarth,EveOnline,Everquest,Everquest2,FarCry,FarCry2,FarCry3,GunZOnline,HalfLife,LeagueofLegends,Lineage2,MassEffect3,MechwarriorOnline,Minecraft,OperationFlashpointDR,PlanetSide,PlanetSide2,QuakeIII,QuakeIV,StarWarsTOR,TigerWoods2004PS2,TribesAscend,UnrealTournament,WolfensteinEnemyTerritory,WorldOfWarcraft</enablefields>
- <donotdisable>true</donotdisable>
- <bindstofield>ezshaper-&gt;step6-&gt;enable</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- <field>
- <name>Enable/Disable specific game consoles and services</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>BattleNET</name>
- <type>checkbox</type>
- <typehint>Battle.net - Virtually every game from Blizzard publishing should match this. This includes the following game series: Starcraft, Diablo, Warcraft. Guild Wars also uses this port.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;battlenet</bindstofield>
- </field>
- <field>
- <name>EAOrigin</name>
- <type>checkbox</type>
- <typehint>EA Origin Client - Some PC games by EA use this.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;eaorigin</bindstofield>
- </field>
- <field>
- <name>GameForWindowsLive</name>
- <type>checkbox</type>
- <typehint>Games for Windows Live</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;gamesforwindowslive</bindstofield>
- </field>
- <field>
- <name>PlayStationConsoles</name>
- <type>checkbox</type>
- <typehint>PlayStation Consoles - This should cover all ports required for the Playstation 4, Playstation, PS Vita</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;playstationconsoles</bindstofield>
- </field>
- <field>
- <name>Steam</name>
- <type>checkbox</type>
- <typehint>Steam Game Client (Includes: America's Army 3, Counter-Strike: Source, Counter-Strike: Global Offensive, Half-Life 2, COD: Black Ops Series, Borderlands 2, Natural Selection 2, Left 4 Dead Series, Portal 2 and many other games on the Steam)</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;steam</bindstofield>
- </field>
- <field>
- <name>WiiConsoles</name>
- <type>checkbox</type>
- <typehint>Wii Consoles - Wii, Wii U, DS and 3DS</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;wiiconsoles</bindstofield>
- </field>
- <field>
- <name>XboxConsoles</name>
- <type>checkbox</type>
- <typehint>Xbox Consoles - Xbox 360 and Xbox One</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;xboxconsoles</bindstofield>
- </field>
- <field>
- <name>Enable/Disable specific games</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>ARMA2</name>
- <type>checkbox</type>
- <typehint>ARMA 2</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;arma2</bindstofield>
- </field>
- <field>
- <name>ARMA3</name>
- <type>checkbox</type>
- <typehint>ARMA 3</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;arma3</bindstofield>
- </field>
- <field>
- <name>Battlefield2</name>
- <type>checkbox</type>
- <typehint>Battlefield 2 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;battlefield2</bindstofield>
- </field>
- <field>
- <name>Battlefield3</name>
- <type>checkbox</type>
- <typehint>Battlefield 3 and 4 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;battlefield3</bindstofield>
- </field>
- <field>
- <name>BattlefieldBC2</name>
- <type>checkbox</type>
- <typehint>Battlefield: Bad Company 2</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;battlefieldbc2</bindstofield>
- </field>
- <field>
- <name>Borderlands</name>
- <type>checkbox</type>
- <typehint>Borderlands</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;borderlands</bindstofield>
- </field>
- <field>
- <name>CallOfDuty</name>
- <type>checkbox</type>
- <typehint>Call Of Duty (United Offensive)</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;callofduty</bindstofield>
- </field>
- <field>
- <name>Counterstrike</name>
- <type>checkbox</type>
- <typehint>Counterstrike. The ultimate 1st person shooter.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;counterstrike</bindstofield>
- </field>
- <field>
- <name>Crysis2</name>
- <type>checkbox</type>
- <typehint>Crysis 2</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;crysis2</bindstofield>
- </field>
- <field>
- <name>Crysis3</name>
- <type>checkbox</type>
- <typehint>Crysis 3</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;crysis3</bindstofield>
- </field>
- <field>
- <name>DeadSpace2</name>
- <type>checkbox</type>
- <typehint>Dead Space2 - this game uses a HUGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;deadspace2</bindstofield>
- </field>
- <field>
- <name>DeadSpace3</name>
- <type>checkbox</type>
- <typehint>Dead Space 3</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;deadspace3</bindstofield>
- </field>
- <field>
- <name>DeltaForce</name>
- <type>checkbox</type>
- <typehint>Delta Force</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;deltaforce</bindstofield>
- </field>
- <field>
- <name>Dirt3</name>
- <type>checkbox</type>
- <typehint>Dirt 3</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;dirt3</bindstofield>
- </field>
- <field>
- <name>DOOM3</name>
- <type>checkbox</type>
- <typehint>DOOM3</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;doom3</bindstofield>
- </field>
- <field>
- <name>DragonAge2</name>
- <type>checkbox</type>
- <typehint>Dragon Age 2</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;dragonage2</bindstofield>
- </field>
- <field>
- <name>EmpireEarth</name>
- <type>checkbox</type>
- <typehint>Empire Earth</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;empireearth</bindstofield>
- </field>
- <field>
- <name>EveOnline</name>
- <type>checkbox</type>
- <typehint>EVE Online</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;eveonline</bindstofield>
- </field>
- <field>
- <name>Everquest</name>
- <type>checkbox</type>
- <typehint>Everquest - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;everquest</bindstofield>
- </field>
- <field>
- <name>Everquest2</name>
- <type>checkbox</type>
- <typehint>Everquest II</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;everquest2</bindstofield>
- </field>
- <field>
- <name>FarCry</name>
- <type>checkbox</type>
- <typehint>Far Cry</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;farcry</bindstofield>
- </field>
- <field>
- <name>FarCry2</name>
- <type>checkbox</type>
- <typehint>Far Cry 2</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;farcry2</bindstofield>
- </field>
- <field>
- <name>FarCry3</name>
- <type>checkbox</type>
- <typehint>Far Cry 3</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;farcry3</bindstofield>
- </field>
- <field>
- <name>GunZOnline</name>
- <type>checkbox</type>
- <typehint>GunZ Online</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;gunzonline</bindstofield>
- </field>
- <field>
- <name>HalfLife</name>
- <type>checkbox</type>
- <typehint>Half-Life</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;halflife</bindstofield>
- </field>
- <field>
- <name>LeagueofLegends</name>
- <type>checkbox</type>
- <typehint>League of Legends - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;leagueoflegends</bindstofield>
- </field>
- <field>
- <name>Lineage2</name>
- <type>checkbox</type>
- <typehint>Lineage II</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;lineage2</bindstofield>
- </field>
- <field>
- <name>MassEffect3</name>
- <type>checkbox</type>
- <typehint>Mass Effect 3</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;masseffect3</bindstofield>
- </field>
- <field>
- <name>MechwarriorOnline</name>
- <type>checkbox</type>
- <typehint>MechWarrior: Online - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;mechwarrioronline</bindstofield>
- </field>
- <field>
- <name>Minecraft</name>
- <type>checkbox</type>
- <typehint>Minecraft</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;minecraft</bindstofield>
- </field>
- <field>
- <name>PlanetSide</name>
- <type>checkbox</type>
- <typehint>PlanetSide</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;planetside</bindstofield>
- </field>
- <field>
- <name>PlanetSide2</name>
- <type>checkbox</type>
- <typehint>PlanetSide 2</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;planetside2</bindstofield>
- </field>
- <field>
- <name>OperationFlashpointDR</name>
- <type>checkbox</type>
- <typehint>Operation Flashpoint: Dragon Rising</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;operationflashpoint-dr</bindstofield>
- </field>
- <field>
- <name>QuakeIII</name>
- <type>checkbox</type>
- <typehint>Quake III</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;quakeiii</bindstofield>
- </field>
- <field>
- <name>QuakeIV</name>
- <type>checkbox</type>
- <typehint>Quake IV</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;quakeiv</bindstofield>
- </field>
- <field>
- <name>StarWarsTOR</name>
- <type>checkbox</type>
- <typehint>StarWars: The Old Republic - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;starwarstor</bindstofield>
- </field>
- <field>
- <name>TigerWoods2004PS2</name>
- <type>checkbox</type>
- <typehint>Tiger Woods 2004 for PS2</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;tigerwoods2004ps2</bindstofield>
- </field>
- <field>
- <name>TribesAscend</name>
- <type>checkbox</type>
- <typehint>Tribes Ascend</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;tribesascend</bindstofield>
- </field>
- <field>
- <name>UnrealTournament</name>
- <type>checkbox</type>
- <typehint>Unreal Tournament Series</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;unrealtournament</bindstofield>
- </field>
- <field>
- <name>WolfensteinEnemyTerritory</name>
- <type>checkbox</type>
- <typehint>Wolfenstein Enemy Territory</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;wolfet</bindstofield>
- </field>
- <field>
- <name>WorldOfWarcraft</name>
- <type>checkbox</type>
- <typehint>World of Warcraft</typehint>
- <bindstofield>ezshaper-&gt;step6-&gt;wow</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
- </step>
- <step>
- <id>7</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <disableallfieldsbydefault>true</disableallfieldsbydefault>
- <description>Raise or lower other Applications</description>
- <fields>
- <field>
- <name>Enable</name>
- <type>checkbox</type>
- <typehint>Other networking protocols</typehint>
- <description>This will help raise or lower the priority of other protocols higher than most traffic.</description>
- <enablefields>AppleRemoteDesktop,MSRDP,PCAnywhere,VNC,AIM,Facetime,GoogleHangouts,ICQ,IRC,Jabber,MSN,TeamSpeak,TeamSpeak3,Ventrilo,PPTP,IPSEC,iTunesRadio,StreamingMP3,RTSP,RTMP,HTTP,IMAP,LotusNotes,POP3,SMTP,BattleNETDownloader,SteamDownloader,APNS,AppleMobileSync,CrashPlan,CVSUP,DNS,GIT,HBCI,ICMP,MySqlServer,NNTP,Slingbox,SMB,SNMP,Subversion</enablefields>
- <donotdisable>true</donotdisable>
- <bindstofield>ezshaper-&gt;step7-&gt;enable</bindstofield>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- <field>
- <name>Remote Service / Terminal emulation</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>AppleRemoteDesktop</name>
- <bindstofield>ezshaper-&gt;step7-&gt;appleremotedesktop</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Apple Remote Desktop</typehint>
- </field>
- <field>
- <name>MSRDP</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;msrdp</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Microsoft Remote Desktop Protocol</typehint>
- </field>
- <field>
- <name>PCAnywhere</name>
- <bindstofield>ezshaper-&gt;step7-&gt;pcanywhere</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Symantec PC Anywhere</typehint>
- </field>
- <field>
- <name>VNC</name>
- <bindstofield>ezshaper-&gt;step7-&gt;vnc</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Virtual Network Computing</typehint>
- </field>
- <field>
- <name>Messengers</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>AIM</name>
- <bindstofield>ezshaper-&gt;step7-&gt;aolinstantmessenger</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>AOL Instant Messenger</typehint>
- </field>
- <field>
- <name>Facetime</name>
- <bindstofield>ezshaper-&gt;step7-&gt;facetime</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Facetime</typehint>
- </field>
- <field>
- <name>ICQ</name>
- <bindstofield>ezshaper-&gt;step7-&gt;icq</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>ICQ</typehint>
- </field>
- <field>
- <name>IRC</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;irc</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Internet Relay Chat</typehint>
- </field>
- <field>
- <name>Jabber</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;jabber</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Jabber instant messenger</typehint>
- </field>
- <field>
- <name>GoogleHangouts</name>
- <bindstofield>ezshaper-&gt;step7-&gt;googlehangouts</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Google Hangouts</typehint>
- </field>
- <field>
- <name>MSN</name>
- <bindstofield>ezshaper-&gt;step7-&gt;msnmessenger</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>MSN Messenger</typehint>
- </field>
- <field>
- <name>Teamspeak</name>
- <bindstofield>ezshaper-&gt;step7-&gt;teamspeak</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>TeamSpeak</typehint>
- </field>
- <field>
- <name>Teamspeak3</name>
- <bindstofield>ezshaper-&gt;step7-&gt;teamspeak3</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>TeamSpeak 3</typehint>
- </field>
- <field>
- <name>Ventrilo</name>
- <bindstofield>ezshaper-&gt;step7-&gt;ventrilo</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Ventrilo</typehint>
- </field>
- <field>
- <name>VPN</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>PPTP</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;pptp</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Microsoft Point to Point tunneling protocol</typehint>
- </field>
- <field>
- <name>IPSEC</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;ipsec</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>IPSEC VPN traffic</typehint>
- </field>
- <field>
- <name>Multimedia/Streaming</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>iTunesRadio</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;itunesradio</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>iTunes Radio - this rule uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
- </field>
- <field>
- <name>StreamingMP3</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;streamingmp3</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Streaming Media</typehint>
- </field>
- <field>
- <name>RTSP</name>
- <bindstofield>ezshaper-&gt;step7-&gt;rtsp</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>RealTime streaming protocol</typehint>
- </field>
- <field>
- <name>RTMP</name>
- <bindstofield>ezshaper-&gt;step7-&gt;rtmp</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Real-Time Messaging Protocol - Used by video streaming services such as Twitch.tv.</typehint>
- </field>
- <field>
- <name>Web</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>HTTP</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;http</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>HTTP and HTTPS aka Web Traffic</typehint>
- </field>
- <field>
- <name>Mail</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>SMTP</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;smtp</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Mail Protocol</typehint>
- </field>
- <field>
- <name>POP3</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;pop3</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>POP3 Protocol</typehint>
- </field>
- <field>
- <name>IMAP</name>
- <bindstofield>ezshaper-&gt;step7-&gt;imap</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>IMAP Protocol</typehint>
- </field>
- <field>
- <name>LotusNotes</name>
- <bindstofield>ezshaper-&gt;step7-&gt;lotusnotes</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Lotus Notes</typehint>
- </field>
- <field>
- <name>Game Downloader</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>BattleNetDownloader</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;battlenetdownloader</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Battle.NET Downloader</typehint>
- </field>
- <field>
- <name>SteamDownloader</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;steamdownloader</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Steam Downloader</typehint>
- </field>
- <field>
- <name>Miscellaneous</name>
- <type>listtopic</type>
- </field>
- <field>
- <name>APNS</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;apns</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Apple Push Notification Service</typehint>
- </field>
- <field>
- <name>AppleMobileSync</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;applemobilesync</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Apple Mobile Sync</typehint>
- </field>
- <field>
- <name>CrashPlan</name>
- <bindstofield>ezshaper-&gt;step7-&gt;crashplan</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>CrashPlan</typehint>
- </field>
- <field>
- <name>CVSUP</name>
- <bindstofield>ezshaper-&gt;step7-&gt;cvsup</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>CVSUP</typehint>
- </field>
- <field>
- <name>DNS</name>
- <type>select</type>
- <bindstofield>ezshaper-&gt;step7-&gt;dns</bindstofield>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Domain Name Services</typehint>
- </field>
- <field>
- <name>Git</name>
- <bindstofield>ezshaper-&gt;step7-&gt;git</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Git Server</typehint>
- </field>
- <field>
- <name>HBCI</name>
- <bindstofield>ezshaper-&gt;step7-&gt;hbci</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>HBCI</typehint>
- </field>
- <field>
- <name>ICMP</name>
- <bindstofield>ezshaper-&gt;step7-&gt;icmp</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>ICMP Protocol</typehint>
- </field>
- <field>
- <name>SMB</name>
- <bindstofield>ezshaper-&gt;step7-&gt;smb</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Microsoft SMB Protocol and friends</typehint>
- </field>
- <field>
- <name>SNMP</name>
- <bindstofield>ezshaper-&gt;step7-&gt;snmp</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Simple Network Management Protocol</typehint>
- </field>
- <field>
- <name>MySQLServer</name>
- <bindstofield>ezshaper-&gt;step7-&gt;mysqlserver</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>MySQL Server</typehint>
- </field>
- <field>
- <name>NNTP</name>
- <bindstofield>ezshaper-&gt;step7-&gt;nntp</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Internet News</typehint>
- </field>
- <field>
- <name>Slingbox</name>
- <bindstofield>ezshaper-&gt;step7-&gt;slingbox</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Slingbox</typehint>
- </field>
- <field>
- <name>Subversion</name>
- <bindstofield>ezshaper-&gt;step7-&gt;subversion</bindstofield>
- <type>select</type>
- <options>
- <option>
- <name>Default priority</name>
- <value>D</value>
- </option>
- <option>
- <name>Higher priority</name>
- <value>H</value>
- </option>
- <option>
- <name>Lower priority</name>
- <value>L</value>
- </option>
- </options>
- <typehint>Subversion Server</typehint>
- </field>
- <field>
- <name>Next</name>
- <type>submit</type>
- </field>
- </fields>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
- </step>
- <step>
- <id>8</id>
- <title>pfSense Traffic Shaper Wizard</title>
- <field>
- <name>Reload profile notice</name>
- <type>listtopic</type>
- </field>
- <description> After pressing Finish the system will load the new profile.&lt;br/&gt; Please note that this may take a moment.&lt;br/&gt; Also note that the traffic shaper is stateful meaning that only new connections will be shaped.&lt;br/&gt; If this is an issue please reset the state table after loading the profile.&lt;br/&gt;</description>
- <fields>
- <field>
- <name>Finish</name>
- <type>submit</type>
- </field>
- </fields>
- <stepsubmitphpaction>step8_stepsubmitphpaction();</stepsubmitphpaction>
- <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
- </step>
-</pfsensewizard>
diff --git a/usr/local/www/xmlrpc.php b/usr/local/www/xmlrpc.php
deleted file mode 100755
index 5fd022a..0000000
--- a/usr/local/www/xmlrpc.php
+++ /dev/null
@@ -1,592 +0,0 @@
-<?php
-/*
- xmlrpc.php
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- Copyright (C) 2009, 2010 Scott Ullrich
- Copyright (C) 2005 Colin Smith
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-##|+PRIV
-##|*IDENT=page-xmlrpclibrary
-##|*NAME=XMLRPC Library page
-##|*DESCR=Allow access to the 'XMLRPC Library' page.
-##|*MATCH=xmlrpc.php*
-##|-PRIV
-
-require("config.inc");
-require("functions.inc");
-require_once("filter.inc");
-require("ipsec.inc");
-require("vpn.inc");
-require("shaper.inc");
-require("xmlrpc_server.inc");
-require("xmlrpc.inc");
-
-function xmlrpc_loop_detect() {
- global $config;
-
- /* grab sync to ip if enabled */
- if ($config['hasync']) {
- $synchronizetoip = $config['hasync']['synchronizetoip'];
- }
- if ($synchronizetoip) {
- if ($synchronizetoip == $_SERVER['REMOTE_ADDR']) {
- return true;
- }
- }
-
- return false;
-}
-
-$xmlrpc_g = array(
- "return" => array(
- "true" => new XML_RPC_Response(new XML_RPC_Value(true, $XML_RPC_Boolean)),
- "false" => new XML_RPC_Response(new XML_RPC_Value(false, $XML_RPC_Boolean)),
- "authfail" => new XML_RPC_Response(new XML_RPC_Value(gettext("Authentication failed"), $XML_RPC_String))
- )
-);
-
-/*
- * pfSense XMLRPC errors
- * $XML_RPC_erruser + 1 = Auth failure
- */
-$XML_RPC_erruser = 200;
-
-/* EXPOSED FUNCTIONS */
-$exec_php_doc = gettext("XMLRPC wrapper for eval(). This method must be called with two parameters: a string containing the local system\'s password followed by the PHP code to evaluate.");
-$exec_php_sig = array(
- array(
- $XML_RPC_Boolean, // First signature element is return value.
- $XML_RPC_String, // password
- $XML_RPC_String, // shell code to exec
- )
-);
-
-function xmlrpc_authfail() {
- log_auth("webConfigurator authentication error for 'admin' from {$_SERVER['REMOTE_ADDR']}");
-}
-
-function exec_php_xmlrpc($raw_params) {
- global $config, $xmlrpc_g;
-
- $params = xmlrpc_params_to_php($raw_params);
- if (!xmlrpc_auth($params)) {
- xmlrpc_authfail();
- return $xmlrpc_g['return']['authfail'];
- }
- $exec_php = $params[0];
- eval($exec_php);
- if ($toreturn) {
- $response = XML_RPC_encode($toreturn);
- return new XML_RPC_Response($response);
- } else {
- return $xmlrpc_g['return']['true'];
- }
-}
-
-/*****************************/
-$exec_shell_doc = gettext("XMLRPC wrapper for mwexec(). This method must be called with two parameters: a string containing the local system\'s password followed by an shell command to execute.");
-$exec_shell_sig = array(
- array(
- $XML_RPC_Boolean, // First signature element is return value.
- $XML_RPC_String, // password
- $XML_RPC_String, // shell code to exec
- )
-);
-
-function exec_shell_xmlrpc($raw_params) {
- global $config, $xmlrpc_g;
-
- $params = xmlrpc_params_to_php($raw_params);
- if (!xmlrpc_auth($params)) {
- xmlrpc_authfail();
- return $xmlrpc_g['return']['authfail'];
- }
- $shell_cmd = $params[0];
- mwexec($shell_cmd);
-
- return $xmlrpc_g['return']['true'];
-}
-
-/*****************************/
-$backup_config_section_doc = gettext("XMLRPC wrapper for backup_config_section. This method must be called with two parameters: a string containing the local system\'s password followed by an array containing the keys to be backed up.");
-$backup_config_section_sig = array(
- array(
- $XML_RPC_Struct, // First signature element is return value.
- $XML_RPC_String,
- $XML_RPC_Array
- )
-);
-
-function backup_config_section_xmlrpc($raw_params) {
- global $config, $xmlrpc_g;
-
- if (xmlrpc_loop_detect()) {
- log_error("Disallowing CARP sync loop");
- return;
- }
-
- $params = xmlrpc_params_to_php($raw_params);
- if (!xmlrpc_auth($params)) {
- xmlrpc_authfail();
- return $xmlrpc_g['return']['authfail'];
- }
- $val = array_intersect_key($config, array_flip($params[0]));
-
- return new XML_RPC_Response(XML_RPC_encode($val));
-}
-
-/*****************************/
-$restore_config_section_doc = gettext("XMLRPC wrapper for restore_config_section. This method must be called with two parameters: a string containing the local system\'s password and an array to merge into the system\'s config. This function returns true upon completion.");
-$restore_config_section_sig = array(
- array(
- $XML_RPC_Boolean,
- $XML_RPC_String,
- $XML_RPC_Struct
- )
-);
-
-function restore_config_section_xmlrpc($raw_params) {
- global $config, $xmlrpc_g;
-
- $old_config = $config;
-
- if (xmlrpc_loop_detect()) {
- log_error("Disallowing CARP sync loop");
- return;
- }
-
- $params = xmlrpc_params_to_php($raw_params);
- if (!xmlrpc_auth($params)) {
- xmlrpc_authfail();
- return $xmlrpc_g['return']['authfail'];
- }
-
- /*
- * Make sure it doesn't end up with both dnsmasq and unbound enabled
- * simultaneously in secondary
- * */
- if (isset($params[0]['unbound']['enable']) && isset($config['dnsmasq']['enable'])) {
- unset($config['dnsmasq']['enable']);
- services_dnsmasq_configure();
- } else if (isset($params[0]['dnsmasq']['enable']) && isset($config['unbound']['enable'])) {
- unset($config['unbound']['enable']);
- services_unbound_configure();
- }
-
- // Some sections should just be copied and not merged or we end
- // up unable to sync the deletion of the last item in a section
- $sync_full = array('dnsmasq', 'unbound', 'ipsec', 'aliases', 'wol', 'load_balancer', 'openvpn', 'cert', 'ca', 'crl', 'schedules', 'filter', 'nat', 'dhcpd', 'dhcpv6');
- $sync_full_done = array();
- foreach ($sync_full as $syncfull) {
- if (isset($params[0][$syncfull])) {
- $config[$syncfull] = $params[0][$syncfull];
- unset($params[0][$syncfull]);
- $sync_full_done[] = $syncfull;
- }
- }
-
- $vipbackup = array();
- $oldvips = array();
- if (isset($params[0]['virtualip'])) {
- if (is_array($config['virtualip']['vip'])) {
- foreach ($config['virtualip']['vip'] as $vipindex => $vip) {
- if ($vip['mode'] == "carp") {
- $oldvips["{$vip['interface']}_vip{$vip['vhid']}"]['content'] = "{$vip['password']}{$vip['advskew']}{$vip['subnet']}{$vip['subnet_bits']}{$vip['advbase']}";
- $oldvips["{$vip['interface']}_vip{$vip['vhid']}"]['interface'] = $vip['interface'];
- $oldvips["{$vip['interface']}_vip{$vip['vhid']}"]['subnet'] = $vip['subnet'];
- } else if ($vip['mode'] == "ipalias" && (substr($vip['interface'], 0, 4) == '_vip' || strpos($vip['interface'], "lo0"))) {
- $oldvips[$vip['subnet']]['content'] = "{$vip['interface']}{$vip['subnet']}{$vip['subnet_bits']}";
- $oldvips[$vip['subnet']]['interface'] = $vip['interface'];
- $oldvips[$vip['subnet']]['subnet'] = $vip['subnet'];
- } else if (($vip['mode'] == "ipalias" || $vip['mode'] == 'proxyarp') && !(substr($vip['interface'], 0, 4) == '_vip') || strpos($vip['interface'], "lo0")) {
- $vipbackup[] = $vip;
- }
- }
- }
- }
-
- // For vip section, first keep items sent from the master
- $config = array_merge_recursive_unique($config, $params[0]);
-
- /* Then add ipalias and proxyarp types already defined on the backup */
- if (is_array($vipbackup) && !empty($vipbackup)) {
- if (!is_array($config['virtualip'])) {
- $config['virtualip'] = array();
- }
- if (!is_array($config['virtualip']['vip'])) {
- $config['virtualip']['vip'] = array();
- }
- foreach ($vipbackup as $vip) {
- array_unshift($config['virtualip']['vip'], $vip);
- }
- }
-
- /* Log what happened */
- $mergedkeys = implode(",", array_merge(array_keys($params[0]), $sync_full_done));
- write_config(sprintf(gettext("Merged in config (%s sections) from XMLRPC client."), $mergedkeys));
-
- /*
- * The real work on handling the vips specially
- * This is a copy of intefaces_vips_configure with addition of not reloading existing/not changed carps
- */
- if (isset($params[0]['virtualip']) && is_array($config['virtualip']) && is_array($config['virtualip']['vip'])) {
- $carp_setuped = false;
- $anyproxyarp = false;
- foreach ($config['virtualip']['vip'] as $vip) {
- if ($vip['mode'] == "carp" && isset($oldvips["{$vip['interface']}_vip{$vip['vhid']}"])) {
- if ($oldvips["{$vip['interface']}_vip{$vip['vhid']}"]['content'] == "{$vip['password']}{$vip['advskew']}{$vip['subnet']}{$vip['subnet_bits']}{$vip['advbase']}") {
- if (does_vip_exist($vip)) {
- unset($oldvips["{$vip['interface']}_vip{$vip['vhid']}"]);
- continue; // Skip reconfiguring this vips since nothing has changed.
- }
- }
- } else if ($vip['mode'] == "ipalias" && strstr($vip['interface'], "_vip") && isset($oldvips[$vip['subnet']])) {
- if ($oldvips[$vip['subnet']]['content'] == "{$vip['interface']}{$vip['subnet']}{$vip['subnet_bits']}") {
- if (does_vip_exist($vip)) {
- unset($oldvips[$vip['subnet']]);
- continue; // Skip reconfiguring this vips since nothing has changed.
- }
- }
- unset($oldvips[$vip['subnet']]);
- }
-
- switch ($vip['mode']) {
- case "proxyarp":
- $anyproxyarp = true;
- break;
- case "ipalias":
- interface_ipalias_configure($vip);
- break;
- case "carp":
- if ($carp_setuped == false) {
- $carp_setuped = true;
- }
- interface_carp_configure($vip);
- break;
- }
- }
- /* Cleanup remaining old carps */
- foreach ($oldvips as $oldvipar) {
- $oldvipif = get_real_interface($oldvipar['interface']);
- if (!empty($oldvipif)) {
- if (is_ipaddrv6($oldvipar['subnet'])) {
- mwexec("/sbin/ifconfig " . escapeshellarg($oldvipif) . " inet6 " . escapeshellarg($oldvipar['subnet']) . " delete");
- } else {
- pfSense_interface_deladdress($oldvipif, $oldvipar['subnet']);
- }
- }
- }
- if ($carp_setuped == true) {
- interfaces_sync_setup();
- }
- if ($anyproxyarp == true) {
- interface_proxyarp_configure();
- }
- }
-
- if (isset($old_config['ipsec']['enable']) !== isset($config['ipsec']['enable'])) {
- vpn_ipsec_configure();
- }
-
- unset($old_config);
-
- return $xmlrpc_g['return']['true'];
-}
-
-/*****************************/
-$merge_config_section_doc = gettext("XMLRPC wrapper for merging package sections. This method must be called with two parameters: a string containing the local system\'s password and an array to merge into the system\'s config. This function returns true upon completion.");
-$merge_config_section_sig = array(
- array(
- $XML_RPC_Boolean,
- $XML_RPC_String,
- $XML_RPC_Struct
- )
-);
-
-function merge_installedpackages_section_xmlrpc($raw_params) {
- global $config, $xmlrpc_g;
-
- if (xmlrpc_loop_detect()) {
- log_error("Disallowing CARP sync loop");
- return;
- }
-
- $params = xmlrpc_params_to_php($raw_params);
- if (!xmlrpc_auth($params)) {
- xmlrpc_authfail();
- return $xmlrpc_g['return']['authfail'];
- }
- $config['installedpackages'] = array_merge($config['installedpackages'], $params[0]);
- $mergedkeys = implode(",", array_keys($params[0]));
- write_config(sprintf(gettext("Merged in config (%s sections) from XMLRPC client."), $mergedkeys));
-
- return $xmlrpc_g['return']['true'];
-}
-
-/*****************************/
-$merge_config_section_doc = gettext("XMLRPC wrapper for merge_config_section. This method must be called with two parameters: a string containing the local system\'s password and an array to merge into the system\'s config. This function returns true upon completion.");
-$merge_config_section_sig = array(
- array(
- $XML_RPC_Boolean,
- $XML_RPC_String,
- $XML_RPC_Struct
- )
-);
-
-function merge_config_section_xmlrpc($raw_params) {
- global $config, $xmlrpc_g;
-
- if (xmlrpc_loop_detect()) {
- log_error("Disallowing CARP sync loop");
- return;
- }
-
- $params = xmlrpc_params_to_php($raw_params);
- if (!xmlrpc_auth($params)) {
- xmlrpc_authfail();
- return $xmlrpc_g['return']['authfail'];
- }
- $config_new = array_overlay($config, $params[0]);
- $config = $config_new;
- $mergedkeys = implode(",", array_keys($params[0]));
- write_config(sprintf(gettext("Merged in config (%s sections) from XMLRPC client."), $mergedkeys));
- return $xmlrpc_g['return']['true'];
-}
-
-/*****************************/
-$filter_configure_doc = gettext("Basic XMLRPC wrapper for filter_configure. This method must be called with one parameter: a string containing the local system\'s password. This function returns true upon completion.");
-$filter_configure_sig = array(
- array(
- $XML_RPC_Boolean,
- $XML_RPC_String
- )
-);
-
-function filter_configure_xmlrpc($raw_params) {
- global $xmlrpc_g, $config;
-
- $params = xmlrpc_params_to_php($raw_params);
- if (!xmlrpc_auth($params)) {
- xmlrpc_authfail();
- return $xmlrpc_g['return']['authfail'];
- }
- filter_configure();
- system_routing_configure();
- setup_gateways_monitor();
- relayd_configure();
- require_once("openvpn.inc");
- openvpn_resync_all();
- if (isset($config['dnsmasq']['enable'])) {
- services_dnsmasq_configure();
- } elseif (isset($config['unbound']['enable'])) {
- services_unbound_configure();
- } else {
- # Both calls above run services_dhcpd_configure(), then we just
- # need to call it when they are not called to avoid restarting dhcpd
- # twice, as described on ticket #3797
- services_dhcpd_configure();
- }
- local_sync_accounts();
-
- return $xmlrpc_g['return']['true'];
-}
-
-/*****************************/
-$carp_configure_doc = gettext("Basic XMLRPC wrapper for configuring CARP interfaces.");
-$carp_configure_sig = array(
- array(
- $XML_RPC_Boolean,
- $XML_RPC_String
- )
-);
-
-function interfaces_carp_configure_xmlrpc($raw_params) {
- global $xmlrpc_g;
-
- if (xmlrpc_loop_detect()) {
- log_error("Disallowing CARP sync loop");
- return;
- }
-
- $params = xmlrpc_params_to_php($raw_params);
- if (!xmlrpc_auth($params)) {
- xmlrpc_authfail();
- return $xmlrpc_g['return']['authfail'];
- }
- interfaces_vips_configure();
-
- return $xmlrpc_g['return']['true'];
-}
-
-/*****************************/
-$check_firmware_version_doc = gettext("Basic XMLRPC wrapper for check_firmware_version. This function will return the output of check_firmware_version upon completion.");
-
-$check_firmware_version_sig = array(
- array(
- $XML_RPC_String,
- $XML_RPC_String
- )
-);
-
-function check_firmware_version_xmlrpc($raw_params) {
- global $xmlrpc_g, $XML_RPC_String;
-
- $params = xmlrpc_params_to_php($raw_params);
- if (!xmlrpc_auth($params)) {
- xmlrpc_authfail();
- return $xmlrpc_g['return']['authfail'];
- }
- return new XML_RPC_Response(new XML_RPC_Value(check_firmware_version(false), $XML_RPC_String));
-}
-
-/*****************************/
-$pfsense_firmware_version_doc = gettext("Basic XMLRPC wrapper for check_firmware_version. This function will return the output of check_firmware_version upon completion.");
-
-$pfsense_firmware_version_sig = array (
- array (
- $XML_RPC_Struct,
- $XML_RPC_String
- )
-);
-
-function pfsense_firmware_version_xmlrpc($raw_params) {
- global $xmlrpc_g;
-
- $params = xmlrpc_params_to_php($raw_params);
- if (!xmlrpc_auth($params)) {
- xmlrpc_authfail();
- return $xmlrpc_g['return']['authfail'];
- }
- return new XML_RPC_Response(XML_RPC_encode(host_firmware_version()));
-}
-
-/*****************************/
-$reboot_doc = gettext("Basic XMLRPC wrapper for rc.reboot.");
-$reboot_sig = array(array($XML_RPC_Boolean, $XML_RPC_String));
-function reboot_xmlrpc($raw_params) {
- global $xmlrpc_g;
-
- $params = xmlrpc_params_to_php($raw_params);
- if (!xmlrpc_auth($params)) {
- xmlrpc_authfail();
- return $xmlrpc_g['return']['authfail'];
- }
- mwexec_bg("/etc/rc.reboot");
-
- return $xmlrpc_g['return']['true'];
-}
-
-/*****************************/
-$get_notices_sig = array(
- array(
- $XML_RPC_Array,
- $XML_RPC_String
- ),
- array(
- $XML_RPC_Array
- )
-);
-
-function get_notices_xmlrpc($raw_params) {
- global $g, $xmlrpc_g;
-
- $params = xmlrpc_params_to_php($raw_params);
- if (!xmlrpc_auth($params)) {
- xmlrpc_authfail();
- return $xmlrpc_g['return']['authfail'];
- }
- if (!function_exists("get_notices")) {
- require("notices.inc");
- }
- if (!$params) {
- $toreturn = get_notices();
- } else {
- $toreturn = get_notices($params);
- }
- $response = new XML_RPC_Response(XML_RPC_encode($toreturn));
-
- return $response;
-}
-
-$xmlrpclockkey = lock('xmlrpc', LOCK_EX);
-
-/*****************************/
-$server = new XML_RPC_Server(
- array(
- 'pfsense.exec_shell' => array('function' => 'exec_shell_xmlrpc',
- 'signature' => $exec_shell_sig,
- 'docstring' => $exec_shell_doc),
- 'pfsense.exec_php' => array('function' => 'exec_php_xmlrpc',
- 'signature' => $exec_php_sig,
- 'docstring' => $exec_php_doc),
- 'pfsense.filter_configure' => array('function' => 'filter_configure_xmlrpc',
- 'signature' => $filter_configure_sig,
- 'docstring' => $filter_configure_doc),
- 'pfsense.interfaces_carp_configure' => array('function' => 'interfaces_carp_configure_xmlrpc',
- 'docstring' => $carp_configure_sig),
- 'pfsense.backup_config_section' => array('function' => 'backup_config_section_xmlrpc',
- 'signature' => $backup_config_section_sig,
- 'docstring' => $backup_config_section_doc),
- 'pfsense.restore_config_section' => array('function' => 'restore_config_section_xmlrpc',
- 'signature' => $restore_config_section_sig,
- 'docstring' => $restore_config_section_doc),
- 'pfsense.merge_config_section' => array('function' => 'merge_config_section_xmlrpc',
- 'signature' => $merge_config_section_sig,
- 'docstring' => $merge_config_section_doc),
- 'pfsense.merge_installedpackages_section_xmlrpc' => array('function' => 'merge_installedpackages_section_xmlrpc',
- 'signature' => $merge_config_section_sig,
- 'docstring' => $merge_config_section_doc),
- 'pfsense.check_firmware_version' => array('function' => 'check_firmware_version_xmlrpc',
- 'signature' => $check_firmware_version_sig,
- 'docstring' => $check_firmware_version_doc),
- 'pfsense.host_firmware_version' => array('function' => 'pfsense_firmware_version_xmlrpc',
- 'signature' => $pfsense_firmware_version_sig,
- 'docstring' => $host_firmware_version_doc),
- 'pfsense.reboot' => array('function' => 'reboot_xmlrpc',
- 'signature' => $reboot_sig,
- 'docstring' => $reboot_doc),
- 'pfsense.get_notices' => array('function' => 'get_notices_xmlrpc',
- 'signature' => $get_notices_sig)
- )
-);
-
-unlock($xmlrpclockkey);
-
-function array_overlay($a1, $a2) {
- foreach ($a1 as $k => $v) {
- if (!array_key_exists($k, $a2)) {
- continue;
- }
- if (is_array($v) && is_array($a2[$k])) {
- $a1[$k] = array_overlay($v, $a2[$k]);
- } else {
- $a1[$k] = $a2[$k];
- }
- }
- return $a1;
-}
-
-?>
OpenPOWER on IntegriCloud