1 <& /elements/header-popup.html &>
5 border: 1px solid #7e0079;
7 background-color: #fff;
19 % my $extra = shift || '';
20 <INPUT TYPE="checkbox" NAME="<% $field %>" ID="<% $field %>" VALUE="1" <%$extra%>>
23 <FORM NAME="fcc_option_form">
24 % # The option structure is hardcoded. The FCC rules changed enough from
25 % # the original 477 report to the 2013 revision that any data-driven
26 % # mechanism for expressing the original rules would likely fail to
27 % # accommodate the new ones. Therefore, we assume that whatever the FCC
28 % # does NEXT will also require a rewrite of this form, and we'll deal with
29 % # that when it arrives.
31 <LABEL FOR="media">Media type</LABEL>
32 <SELECT NAME="media" ID="media">
33 <OPTION VALUE=""></OPTION>
34 % foreach (keys(%$media_types)) {
35 <OPTION VALUE="<% $_ %>"><% $_ %></OPTION>
40 <& .checkbox, 'is_consumer' &>
41 <LABEL FOR="is_consumer">This is a consumer-grade package</LABEL>
44 <& .checkbox, 'is_broadband' &>
45 <LABEL FOR="is_broadband">This package provides broadband service</LABEL>
46 <FIELDSET ID="broadband">
47 <LABEL FOR="technology">Technology of transmission</LABEL>
48 <SELECT NAME="technology" ID="technology"> </SELECT>
50 <LABEL FOR="broadband_downstream">Downstream speed (Mbps)</LABEL>
51 <INPUT NAME="broadband_downstream" ID="broadband_downstream">
53 <LABEL FOR="broadband_upstream">Upstream speed (Mbps)</LABEL>
54 <INPUT NAME="broadband_upstream" ID="broadband_upstream">
58 <& .checkbox, 'is_phone' &>
59 <LABEL FOR="is_phone">This package provides local telephone service</LABEL>
61 <LABEL FOR="phone_wholesale">Marketed as</LABEL>
62 <SELECT NAME="phone_wholesale" ID="phone_wholesale">
63 <OPTION VALUE="">end user</OPTION>
64 <OPTION VALUE="1">wholesale</OPTION>
66 <FIELDSET CLASS="inv" ID="phone0" DISABLED="1">
67 <LABEL FOR="phone_lines">Number of voice-grade equivalents</LABEL>
68 <INPUT NAME="phone_lines" ID="phone_lines">
70 <LABEL FOR="phone_longdistance">Are you the presubscribed long-distance carrier?</LABEL>
71 <& .checkbox, 'phone_longdistance' &>
73 <LABEL FOR="phone_localloop">Local loop arrangement</LABEL>
74 <SELECT NAME="phone_localloop" ID="phone_localloop">
75 <OPTION VALUE="owned">You own the local loop</OPTION>
76 <OPTION VALUE="leased">You lease UNE-L from another carrier</OPTION>
77 <OPTION VALUE="resale">You resell another carrier's service</OPTION>
80 <FIELDSET CLASS="inv" ID="phone1" DISABLED="1">
81 <LABEL FOR="phone_vges">Number of voice-grade equivalents (if any)</LABEL>
82 <INPUT NAME="phone_vges" ID="phone_vges">
84 <LABEL FOR="phone_circuits">Number of unswitched circuits (if any)</LABEL>
85 <INPUT NAME="phone_circuits" ID="phone_circuits">
90 <& .checkbox, 'is_voip' &>
91 <LABEL FOR="is_voip">This package provides VoIP telephone service</LABEL>
93 <& .checkbox, 'voip_lastmile' &>
94 <LABEL FOR="voip_lastmile">Do you also provide last-mile connectivity?</LABEL>
97 <DIV WIDTH="100%" STYLE="text-align:center">
98 <INPUT TYPE="submit" VALUE="Save changes">
102 <SCRIPT TYPE="text/javascript">
103 // this form is invoked as a popup; the current values of the parent
104 // object are in the form field ID passed as the 'id' param
106 var parent_input = window.parent.document.getElementById('<% $parent_id %>');
107 var curr_values = JSON.parse(window.parent_input.value);
108 var form = document.forms['fcc_option_form'];
109 var media_types = <% encode_json($media_types) %>
110 var technology_labels = <% encode_json($technology_labels) %>
112 function set_tech_options() {
113 var form = document.forms['fcc_option_form'];
114 var curr_type = form.elements['media'].value;
115 var technology_obj = form.elements['technology'];
116 technology_obj.options.length = 0;
117 if (media_types[curr_type]) {
118 for( var i = 0; i < media_types[curr_type].length; i++ ) {
119 var value = media_types[curr_type][i];
120 var o = document.createElement('OPTION');
121 o.text = technology_labels[value]
123 technology_obj.add(o);
128 function save_changes() {
129 var form = document.forms['fcc_option_form'];
131 for (var i = 0; i < form.elements.length; i++) {
132 if (form.elements[i].type == 'submit')
135 // quick and dirty test for whether the element is displayed
136 if (form.elements[i].clientHeight > 0) {
137 if (form.elements[i].type == 'checkbox') {
138 if (form.elements[i].checked) {
139 data[ form.elements[i].name ] = 1;
142 data[ form.elements[i].name ] = form.elements[i].value;
146 parent_input.value = JSON.stringify(data);
147 // update the display
148 parent.show_fcc_options();
149 parent.cClick(); //overlib
152 function enable_fieldset(fieldset_id) {
153 var fieldset = document.getElementById(fieldset_id);
154 return function () { fieldset.disabled = !this.checked; };
157 <&| /elements/onload.js &>
158 function addEventListener(target, action, listener) {
159 if (target.addEventListener) {
160 target.addEventListener(action, listener);
161 } else if (target.attachEvent) { // IE 8 fails at everything
162 target.attachEvent('on'+action, listener);
166 // set up all event handlers
167 addEventListener(form, 'submit', save_changes);
169 var sections = [ 'broadband', 'phone', 'voip' ];
170 for(var i = 0; i < sections.length; i++) {
171 var toggle = form.elements['is_'+sections[i]];
172 addEventListener(toggle, 'change', enable_fieldset(sections[i]));
175 addEventListener(form.elements['media'], 'change', set_tech_options);
176 addEventListener(form.elements['phone_wholesale'], 'change',
178 form.elements['phone0'].disabled = (this.value == 1);
179 form.elements['phone1'].disabled = (this.value == '');
183 // load data from the parent form and trigger handlers
184 for(var i = 0; i < form.elements.length; i++) {
185 var input_obj = form.elements[i];
186 if (input_obj.type == 'submit') {
188 } else if (input_obj.type == 'checkbox') {
189 input_obj.checked = (curr_values[input_obj.name] > 0);
191 input_obj.value = curr_values[input_obj.name] || '';
193 input_obj.dispatchEvent( new Event('change') );
199 <& /elements/footer.html &>
201 my $media_types = FS::part_pkg_fcc_option->media_types;
202 my $technology_labels = FS::part_pkg_fcc_option->technology_labels;
204 my $parent_id = $cgi->param('id');