1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5 Edit Customer: Olson Inc (Towne, Samara)
7 <!-- per RT, to prevent IE compatibility mode -->
8 <meta http-equiv="X-UA-Compatible" content="IE=edge" />
9 <!-- The X-UA-Compatible <meta> tag above must be very early in <head> -->
10 <META HTTP-Equiv="Cache-Control" Content="no-cache">
11 <META HTTP-Equiv="Pragma" Content="no-cache">
12 <META HTTP-Equiv="Expires" Content="0">
14 <script type="text/javascript" src="http://localhost/freeside/elements/cssexpr.js"></script>
17 <script type="text/javascript" src="http://localhost/freeside/elements/xmenu.top.js"></script>
18 <link href="http://localhost/freeside/elements/xmenu.top.css" type="text/css" rel="stylesheet">
21 <link href="http://localhost/freeside/elements/freeside.css" type="text/css" rel="stylesheet">
22 <link href="http://localhost/freeside/elements/freeside-print.css" type="text/css" rel="stylesheet" media="print">
23 <link href="http://localhost/freeside/elements/freeside-menu.css" type="text/css" rel="stylesheet">
25 <SCRIPT TYPE="text/javascript">
27 function about_freeside() {
28 overlib( OLiframeContent('http://localhost/freeside/docs/about.html', 300, 375, 'popup-0000000000-0000-000000000.000000', 0, 'auto' ), CAPTION, 'About', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#7e0079', CGCOLOR, '#7e0079', FGCOLOR, '#f8f8f8', CLOSETEXT, 'Close');
31 webfxMenuImagePath = "http://localhost/freeside/images/";
32 webfxMenuUseHover = 1;
33 webfxMenuShowTime = 300;
34 webfxMenuHideTime = 500;
36 var myBar = new WebFXMenuBar;
39 myBar.add(new WebFXMenuButton('Billing Main', "http://localhost/freeside/", 'Billing start page' ));
42 myBar.add(new WebFXMenuButton('Ticketing Main', "http://localhost/freeside/rt/", 'Ticketing start page' ));
45 myBar.add(new WebFXMenuButton('New prospect', "http://localhost/freeside/edit/prospect_main.html", 'Add a new prospect' ));
48 myBar.add(new WebFXMenuButton('New customer', "http://localhost/freeside/edit/cust_main.cgi", 'Add a new customer' ));
51 var myMenu0 = new WebFXMenu;
52 myMenu0.emptyText = '';
53 var myMenu1 = new WebFXMenu;
54 myMenu1.emptyText = '';
55 myMenu1.add(new WebFXMenuItem("List prospects", "http://localhost/freeside/search/prospect_main.html", "" ));
56 myMenu1.add(new WebFXMenuItem("Advanced prospect reports", "http://localhost/freeside/search/report_prospect_main.html", "" ));
57 myMenu1.add(new WebFXMenuSeparator());
58 myMenu1.add(new WebFXMenuItem("Prospect contacts", "http://localhost/freeside/search/report_contact.html?link=prospect_main", "" ));
61 myMenu0.add(new WebFXMenuItem("Prospects", null, "Prospect reports", myMenu1 ));
62 var myMenu2 = new WebFXMenu;
63 myMenu2.emptyText = '';
64 myMenu2.add(new WebFXMenuItem("List quotations", "http://localhost/freeside/search/quotation.html", "" ));
65 myMenu2.add(new WebFXMenuItem("Advanced quotation reports", "http://localhost/freeside/search/report_quotation.html", "" ));
68 myMenu0.add(new WebFXMenuItem("Quotations", null, "Quotation reports", myMenu2 ));
69 var myMenu3 = new WebFXMenu;
70 myMenu3.emptyText = '';
71 var myMenu4 = new WebFXMenu;
72 myMenu4.emptyText = '';
73 myMenu4.add(new WebFXMenuItem("by customer number", "http://localhost/freeside/search/cust_main.cgi?browse=custnum", "" ));
74 myMenu4.add(new WebFXMenuItem("by last name", "http://localhost/freeside/search/cust_main.cgi?browse=last", "" ));
75 myMenu4.add(new WebFXMenuItem("by company name", "http://localhost/freeside/search/cust_main.cgi?browse=company", "" ));
76 myMenu4.add(new WebFXMenuItem("by active trouble tickets", "http://localhost/freeside/search/cust_main.cgi?browse=tickets", "" ));
79 myMenu3.add(new WebFXMenuItem("List customers", null, "List customers", myMenu4 ));
80 myMenu3.add(new WebFXMenuItem("Zip code distribution", "http://localhost/freeside/search/report_cust_main-zip.html", "Zip codes by number of customers" ));
81 myMenu3.add(new WebFXMenuItem("Customer signup report", "http://localhost/freeside/graph/report_cust_signup.html", "New customer signups by date" ));
82 myMenu3.add(new WebFXMenuItem("Customer churn report", "http://localhost/freeside/graph/report_cust_churn.html", "New customers, suspensions, and cancellations summary" ));
83 myMenu3.add(new WebFXMenuItem("Signup date report", "http://localhost/freeside/graph/report_signupdate.html", "Signup date report (by date of signup)" ));
84 myMenu3.add(new WebFXMenuItem("Advanced customer reports", "http://localhost/freeside/search/report_cust_main.html", "by status, signup date, agent, etc." ));
85 myMenu3.add(new WebFXMenuSeparator());
86 myMenu3.add(new WebFXMenuItem("Customer contacts", "http://localhost/freeside/search/report_contact.html?link=cust_main", "" ));
87 myMenu3.add(new WebFXMenuItem("Customer stored payment information", "http://localhost/freeside/search/report_cust_payby.html", "" ));
90 myMenu0.add(new WebFXMenuItem("Customers", null, "Customer reports", myMenu3 ));
91 var myMenu5 = new WebFXMenu;
92 myMenu5.emptyText = '';
93 var myMenu6 = new WebFXMenu;
94 myMenu6.emptyText = '';
95 myMenu6.add(new WebFXMenuItem("All open invoices", "http://localhost/freeside/search/cust_bill.html?OPEN_date", "All invoices with an unpaid balance" ));
96 myMenu6.add(new WebFXMenuItem("15 day open invoices", "http://localhost/freeside/search/cust_bill.html?OPEN15_date", "Invoices 15 days or older with an unpaid balance" ));
97 myMenu6.add(new WebFXMenuItem("30 day open invoices", "http://localhost/freeside/search/cust_bill.html?OPEN30_date", "Invoices 30 days or older with an unpaid balance" ));
98 myMenu6.add(new WebFXMenuItem("60 day open invoices", "http://localhost/freeside/search/cust_bill.html?OPEN60_date", "Invoices 60 days or older with an unpaid balance" ));
99 myMenu6.add(new WebFXMenuItem("90 day open invoices", "http://localhost/freeside/search/cust_bill.html?OPEN90_date", "Invoices 90 days or older with an unpaid balance" ));
100 myMenu6.add(new WebFXMenuItem("120 day open invoices", "http://localhost/freeside/search/cust_bill.html?OPEN120_date", "Invoices 120 days or older with an unpaid balance" ));
103 myMenu5.add(new WebFXMenuItem("Open invoices", null, "Open invoices", myMenu6 ));
104 myMenu5.add(new WebFXMenuItem("All invoices", "http://localhost/freeside/search/cust_bill.html?date", "List all invoices" ));
105 myMenu5.add(new WebFXMenuItem("Advanced invoice reports", "http://localhost/freeside/search/report_cust_bill.html", "by agent, date range, etc." ));
106 myMenu5.add(new WebFXMenuSeparator());
107 myMenu5.add(new WebFXMenuItem("Line items", "http://localhost/freeside/search/report_cust_bill_pkg.html", "Individual line item detail" ));
108 myMenu5.add(new WebFXMenuItem("Voided invoices", "http://localhost/freeside/search/report_cust_bill_void.html", "Search for voided invoices" ));
111 myMenu0.add(new WebFXMenuItem("Invoices", null, "Invoice reports", myMenu5 ));
112 var myMenu7 = new WebFXMenu;
113 myMenu7.emptyText = '';
114 myMenu7.add(new WebFXMenuItem("Discount graph", "http://localhost/freeside/graph/report_cust_bill_pkg_discount.html", "Discount overview per month" ));
115 myMenu7.add(new WebFXMenuItem("Discount detail", "http://localhost/freeside/search/report_cust_bill_pkg_discount.html", "Discount report (by employee and/or date range)" ));
116 myMenu7.add(new WebFXMenuItem("Package discounts", "http://localhost/freeside/search/report_cust_pkg_discount.html", "Active/inactive discounts by package" ));
119 myMenu0.add(new WebFXMenuItem("Discounts", null, "Discount reports", myMenu7 ));
120 var myMenu8 = new WebFXMenu;
121 myMenu8.emptyText = '';
122 myMenu8.add(new WebFXMenuItem("Payments", "http://localhost/freeside/search/report_cust_pay.html", "Payment report (by type and/or date range)" ));
123 myMenu8.add(new WebFXMenuItem("Payment application detail", "http://localhost/freeside/search/report_cust_bill_pay_pkg.html", "Line item application detail" ));
124 myMenu8.add(new WebFXMenuItem("Pending Payments", "http://localhost/freeside/search/cust_pay_pending.html?magic=_date;statusNOT=done", "Pending real-time payments" ));
125 myMenu8.add(new WebFXMenuItem("Unapplied Payments", "http://localhost/freeside/search/report_cust_pay.html?unapplied=1", "Unapplied payment report (by type and/or date range)" ));
126 myMenu8.add(new WebFXMenuItem("Voided Payments", "http://localhost/freeside/search/report_cust_pay.html?void=1", "Voided payment report (by type and/or date range)" ));
127 myMenu8.add(new WebFXMenuItem("Unapplied Payment Aging", "http://localhost/freeside/search/report_unapplied_cust_pay.html", "Unapplied payment aging report" ));
130 myMenu0.add(new WebFXMenuItem("Payments", null, "Payment reports", myMenu8 ));
131 var myMenu9 = new WebFXMenu;
132 myMenu9.emptyText = '';
133 myMenu9.add(new WebFXMenuItem("Package definitions (by # active)", "http://localhost/freeside/browse/part_pkg.cgi?active=1", "Package definitions by number of active packages" ));
134 myMenu9.add(new WebFXMenuItem("Package costs", "http://localhost/freeside/graph/report_cust_pkg_cost.html", "Package setup and recurring costs graph" ));
135 myMenu9.add(new WebFXMenuSeparator());
136 myMenu9.add(new WebFXMenuItem("Package churn", "http://localhost/freeside/graph/report_cust_pkg.html", "Orders, suspensions and cancellations summary graph" ));
137 myMenu9.add(new WebFXMenuSeparator());
138 myMenu9.add(new WebFXMenuItem("All customer packages", "http://localhost/freeside/search/cust_pkg.cgi?pkgnum", "List all customer packages" ));
139 myMenu9.add(new WebFXMenuItem("Package summary", "http://localhost/freeside/search/cust_pkg_summary.html", "Show package sales summary" ));
140 myMenu9.add(new WebFXMenuItem("Suspended customer packages", "http://localhost/freeside/search/cust_pkg.cgi?magic=suspended", "List suspended packages" ));
141 myMenu9.add(new WebFXMenuItem("Suspension summary", "http://localhost/freeside/search/cust_pkg_susp.html", "Show suspension activity" ));
142 myMenu9.add(new WebFXMenuItem("Customer packages with unconfigured services", "http://localhost/freeside/search/cust_pkg.cgi?APKG_pkgnum", "List packages which have provisionable services" ));
143 myMenu9.add(new WebFXMenuItem("Advanced package reports", "http://localhost/freeside/search/report_cust_pkg.html", "by agent, date range, status, package definition" ));
146 myMenu0.add(new WebFXMenuItem("Packages", null, "Package reports", myMenu9 ));
147 var myMenu10 = new WebFXMenu;
148 myMenu10.emptyText = '';
149 myMenu10.add(new WebFXMenuItem("Service definitions", "http://localhost/freeside/browse/part_svc.cgi?orderby=active", "Service definitions by number of active packages" ));
150 myMenu10.add(new WebFXMenuSeparator());
151 myMenu10.add(new WebFXMenuItem("Unprovisioned services", "http://localhost/freeside/search/report_unprovisioned_services.html", "Unprovisioned services" ));
152 myMenu10.add(new WebFXMenuSeparator());
153 var myMenu11 = new WebFXMenu;
154 myMenu11.emptyText = '';
155 myMenu11.add(new WebFXMenuItem("All accounts by Username", "http://localhost/freeside/search/svc_acct.cgi?magic=all;sortby=username", "" ));
156 myMenu11.add(new WebFXMenuItem("All accounts by UID", "http://localhost/freeside/search/svc_acct.cgi?magic=all;sortby=uid", "" ));
157 myMenu11.add(new WebFXMenuItem("All accounts with Time Remaining", "http://localhost/freeside/search/svc_acct.cgi?magic=all;sortby=seconds", "" ));
158 myMenu11.add(new WebFXMenuItem("All accounts by Last login", "http://localhost/freeside/search/svc_acct.cgi?magic=all;sortby=last_login", "" ));
159 myMenu11.add(new WebFXMenuItem("All accounts never logged in", "http://localhost/freeside/search/svc_acct.cgi?magic=nologin;sortby=svcnum", "" ));
160 myMenu11.add(new WebFXMenuItem("Advanced account reports", "http://localhost/freeside/search/report_svc_acct.html", "" ));
161 myMenu11.width = 256;
163 myMenu10.add(new WebFXMenuItem("Accounts", null, "Access accounts and mailboxes", myMenu11 ));
164 var myMenu12 = new WebFXMenu;
165 myMenu12.emptyText = '';
166 myMenu12.add(new WebFXMenuItem("All domains", "http://localhost/freeside/search/svc_domain.cgi?magic=all;sortby=domain", "" ));
167 myMenu12.width = 256;
169 myMenu10.add(new WebFXMenuItem("Domains", null, "Domains", myMenu12 ));
170 var myMenu13 = new WebFXMenu;
171 myMenu13.emptyText = '';
172 myMenu13.add(new WebFXMenuItem("All certificates", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_cert;magic=all;sortby=svcnum", "" ));
173 myMenu13.width = 256;
175 myMenu10.add(new WebFXMenuItem("Certificates", null, "Example services", myMenu13 ));
176 var myMenu14 = new WebFXMenu;
177 myMenu14.emptyText = '';
178 myMenu14.add(new WebFXMenuItem("All mail forwards", "http://localhost/freeside/search/svc_forward.cgi?magic=all;sortby=svcnum", "" ));
179 myMenu14.width = 256;
181 myMenu10.add(new WebFXMenuItem("Mail forwards", null, "Mail forwards", myMenu14 ));
182 var myMenu15 = new WebFXMenu;
183 myMenu15.emptyText = '';
184 myMenu15.add(new WebFXMenuItem("All mailing lists", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_mailinglist;magic=all;sortby=svcnum", "" ));
185 myMenu15.width = 256;
187 myMenu10.add(new WebFXMenuItem("Mailing lists", null, "Mailing lists", myMenu15 ));
188 var myMenu16 = new WebFXMenu;
189 myMenu16.emptyText = '';
190 myMenu16.add(new WebFXMenuItem("All virtual hosting services", "http://localhost/freeside/search/svc_www.cgi?magic=all;sortby=svcnum", "" ));
191 myMenu16.width = 256;
193 myMenu10.add(new WebFXMenuItem("Virtual hosting services", null, "Virtual hosting services", myMenu16 ));
194 var myMenu17 = new WebFXMenu;
195 myMenu17.emptyText = '';
196 myMenu17.add(new WebFXMenuItem("All wireless broadband services", "http://localhost/freeside/search/svc_broadband.cgi?magic=all;sortby=svcnum", "" ));
197 myMenu17.add(new WebFXMenuItem("Advanced wireless broadband reports", "http://localhost/freeside/search/report_svc_broadband.html", "" ));
198 myMenu17.width = 256;
200 myMenu10.add(new WebFXMenuItem("Wireless broadband services", null, "Fixed wireless broadband services", myMenu17 ));
201 var myMenu18 = new WebFXMenu;
202 myMenu18.emptyText = '';
203 myMenu18.add(new WebFXMenuItem("All cable subscribers by Service", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_cable;magic=all;sortby=svcnum", "" ));
204 myMenu18.add(new WebFXMenuItem("All cable subscribers by Serial number", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_cable;magic=all;sortby=serialnum", "" ));
205 myMenu18.add(new WebFXMenuItem("All cable subscribers by MAC address", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_cable;magic=all;sortby=mac_addr", "" ));
206 myMenu18.width = 256;
208 myMenu10.add(new WebFXMenuItem("Cable Subscribers", null, "Cable Subscribers", myMenu18 ));
209 var myMenu19 = new WebFXMenu;
210 myMenu19.emptyText = '';
211 myMenu19.add(new WebFXMenuItem("All DSLs", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_dsl;magic=all;sortby=phonenum", "" ));
212 myMenu19.add(new WebFXMenuItem("Qualifications", "http://localhost/freeside/search/qual.cgi", "" ));
213 myMenu19.width = 256;
215 myMenu10.add(new WebFXMenuItem("DSLs", null, "DSLs", myMenu19 ));
216 var myMenu20 = new WebFXMenu;
217 myMenu20.emptyText = '';
218 myMenu20.add(new WebFXMenuItem("All dish services", "http://localhost/freeside/search/svc_dish.cgi?magic=all;sortby=svcnum", "" ));
219 myMenu20.width = 256;
221 myMenu10.add(new WebFXMenuItem("Dish services", null, "Dish services", myMenu20 ));
222 var myMenu21 = new WebFXMenu;
223 myMenu21.emptyText = '';
224 myMenu21.add(new WebFXMenuItem("All hardware", "http://localhost/freeside/search/svc_hardware.cgi?magic=all;sortby=svcnum", "" ));
225 myMenu21.add(new WebFXMenuItem("Advanced hardware reports", "http://localhost/freeside/search/report_svc_hardware.html", "" ));
226 myMenu21.width = 256;
228 myMenu10.add(new WebFXMenuItem("Hardware", null, "Hardware", myMenu21 ));
229 var myMenu22 = new WebFXMenu;
230 myMenu22.emptyText = '';
231 myMenu22.add(new WebFXMenuItem("All phone numbers", "http://localhost/freeside/search/svc_phone.cgi?magic=all;sortby=phonenum", "" ));
232 myMenu22.add(new WebFXMenuItem("Phone numbers' total usage by time period", "http://localhost/freeside/search/report_svc_phone_usage.html", "Total usage (minutes, and amount billed) for the specified time period, per phone number." ));
233 myMenu22.add(new WebFXMenuItem("Phone numbers by state", "http://localhost/freeside/search/phone_state.html", "Current or historical phone services broken down by state." ));
234 myMenu22.add(new WebFXMenuItem("Advanced phone number reports", "http://localhost/freeside/search/report_svc_phone.html", "" ));
235 myMenu22.add(new WebFXMenuItem("Phone number (DID) availability", "http://localhost/freeside/search/report_phone_avail.html", "" ));
236 myMenu22.add(new WebFXMenuItem("Inventory/Provisioning Status", "http://localhost/freeside/search/phone_inventory_provisioned.html", "" ));
237 myMenu22.width = 256;
239 myMenu10.add(new WebFXMenuItem("Phone numbers", null, "Phone numbers", myMenu22 ));
240 var myMenu23 = new WebFXMenu;
241 myMenu23.emptyText = '';
242 myMenu23.add(new WebFXMenuItem("All PBXs", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_pbx;magic=all;sortby=svcnum", "" ));
243 myMenu23.width = 256;
245 myMenu10.add(new WebFXMenuItem("PBXs", null, "PBXs", myMenu23 ));
246 var myMenu24 = new WebFXMenu;
247 myMenu24.emptyText = '';
248 myMenu24.add(new WebFXMenuItem("All circuits", "http://localhost/freeside/search/svc_circuit.cgi?magic=all;sortby=svcnum", "" ));
249 myMenu24.width = 256;
251 myMenu10.add(new WebFXMenuItem("Circuits", null, "Voice and data circuit services", myMenu24 ));
252 var myMenu25 = new WebFXMenu;
253 myMenu25.emptyText = '';
254 myMenu25.add(new WebFXMenuItem("All ports", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_port;magic=all;sortby=serviceid", "" ));
255 myMenu25.width = 256;
257 myMenu10.add(new WebFXMenuItem("Ports", null, "Ports", myMenu25 ));
258 var myMenu26 = new WebFXMenu;
259 myMenu26.emptyText = '';
260 myMenu26.add(new WebFXMenuItem("All alarm services", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_alarm;magic=all;sortby=acctnum", "" ));
261 myMenu26.width = 256;
263 myMenu10.add(new WebFXMenuItem("Alarm services", null, "Alarm services", myMenu26 ));
264 var myMenu27 = new WebFXMenu;
265 myMenu27.emptyText = '';
266 myMenu27.add(new WebFXMenuItem("All external services", "http://localhost/freeside/search/svc_external.cgi?magic=all;sortby=id", "" ));
267 myMenu27.width = 256;
269 myMenu10.add(new WebFXMenuItem("External services", null, "External services", myMenu27 ));
270 myMenu10.width = 256;
272 myMenu0.add(new WebFXMenuItem("Services", null, "Services reports", myMenu10 ));
273 var myMenu28 = new WebFXMenu;
274 myMenu28.emptyText = '';
275 myMenu28.add(new WebFXMenuItem("Inventory by agent", "http://localhost/freeside/search/report_agent_inventory.html", "" ));
276 myMenu28.add(new WebFXMenuItem("Inventory activity", "http://localhost/freeside/search/report_h_inventory_item.html", "" ));
277 myMenu28.width = 256;
279 myMenu0.add(new WebFXMenuItem("Inventory", null, "Inventory reports", myMenu28 ));
280 var myMenu29 = new WebFXMenu;
281 myMenu29.emptyText = '';
282 myMenu29.add(new WebFXMenuItem("RADIUS sessions", "http://localhost/freeside/search/sqlradius.html", "" ));
283 myMenu29.add(new WebFXMenuItem("RADIUS data usage", "http://localhost/freeside/search/report_sqlradius_usage.html", "" ));
284 myMenu29.add(new WebFXMenuItem("Call Detail Records (CDRs)", "http://localhost/freeside/search/report_cdr.html", "" ));
285 myMenu29.add(new WebFXMenuItem("Unrateable CDRs", "http://localhost/freeside/search/cdr.html?freesidestatus=failed;cdrbatchnum=_ALL_", "" ));
286 myMenu29.width = 256;
288 myMenu0.add(new WebFXMenuItem("Usage", null, "Usage reports", myMenu29 ));
289 var myMenu30 = new WebFXMenu;
290 myMenu30.emptyText = '';
291 var myMenu31 = new WebFXMenu;
292 myMenu31.emptyText = '';
293 myMenu31.add(new WebFXMenuItem("Tickets per day per Queue", "http://localhost/freeside/rt/RTx/Statistics/CallsQueueDay", "View the number of tickets created, resolved or deleted in a specific Queue, over the requested period of days" ));
294 myMenu31.add(new WebFXMenuItem("Ticket status by Queue", "http://localhost/freeside/rt/RTx/Statistics/OpenStalled", "View numbers of new, open and stalled tickets in a selected Queue" ));
295 myMenu31.add(new WebFXMenuItem("Tickets per day (multiple Queues)", "http://localhost/freeside/rt/RTx/Statistics/CallsMultiQueue", "View tickets created, resolved or deleted on in one or more Queues over a specified time period" ));
296 myMenu31.add(new WebFXMenuItem("Tickets per Day of Week", "http://localhost/freeside/rt/RTx/Statistics/DayOfWeek", "View trends showing when tickets are created, resolved or deleted" ));
297 myMenu31.add(new WebFXMenuItem("Time to resolve", "http://localhost/freeside/rt/RTx/Statistics/Resolution", "View how long tickets take to be resolved by Queue" ));
298 myMenu31.add(new WebFXMenuItem("Time to resolve (scatter graph)", "http://localhost/freeside/rt/RTx/Statistics/TimeToResolve", "View a detailed scatter graph of time to resolve tickets by Queue" ));
299 myMenu31.width = 256;
301 myMenu30.add(new WebFXMenuItem("Statistics", null, "", myMenu31 ));
302 myMenu30.add(new WebFXMenuSeparator());
303 myMenu30.add(new WebFXMenuItem("Advanced ticket reports", "http://localhost/freeside/rt/Search/Build.html?NewQuery=1", "List tickets by any criteria" ));
304 myMenu30.width = 256;
306 myMenu0.add(new WebFXMenuItem("Tickets", null, "Ticket reports", myMenu30 ));
307 var myMenu32 = new WebFXMenu;
308 myMenu32.emptyText = '';
309 var myMenu33 = new WebFXMenu;
310 myMenu33.emptyText = '';
311 myMenu33.add(new WebFXMenuItem("Sales, Credits and Receipts", "http://localhost/freeside/graph/report_money_time.html", "Sales, credits and receipts summary graph" ));
312 myMenu33.add(new WebFXMenuItem("Daily Sales, Credits and Receipts", "http://localhost/freeside/graph/report_money_time_daily.html", "Sales, credits and receipts (broken down by day) summary graph" ));
313 myMenu33.add(new WebFXMenuItem("Sales Report", "http://localhost/freeside/graph/report_cust_bill_pkg.html", "Sales report and graph (by agent, package class and/or date range)" ));
314 myMenu33.add(new WebFXMenuItem("Rated Call Sales Report", "http://localhost/freeside/graph/report_cust_bill_pkg_detail.html", "Sales report and graph (by agent, package class, usage class and/or date range)" ));
315 myMenu33.add(new WebFXMenuItem("Sales with Advertising Source", "http://localhost/freeside/search/report_cust_bill_pkg_referral.html", "" ));
316 myMenu33.width = 256;
318 myMenu32.add(new WebFXMenuItem("Sales", null, "Sales reports", myMenu33 ));
319 var myMenu34 = new WebFXMenu;
320 myMenu34.emptyText = '';
321 myMenu34.add(new WebFXMenuItem("Agent", "http://localhost/freeside/search/report_agent_commission.html", "" ));
322 myMenu34.add(new WebFXMenuItem("Agent per package", "http://localhost/freeside/search/report_agent_commission_pkg.html", "" ));
323 myMenu34.add(new WebFXMenuItem("Sales Person", "http://localhost/freeside/search/report_sales_commission.html", "" ));
324 myMenu34.add(new WebFXMenuItem("Sales Person per package", "http://localhost/freeside/search/report_sales_commission_pkg.html", "" ));
325 myMenu34.add(new WebFXMenuItem("Employee", "http://localhost/freeside/search/report_employee_commission.html", "" ));
326 myMenu34.width = 256;
328 myMenu32.add(new WebFXMenuItem("Commissions", null, "Commission reports", myMenu34 ));
329 var myMenu35 = new WebFXMenu;
330 myMenu35.emptyText = '';
331 myMenu35.add(new WebFXMenuItem("Credit Report", "http://localhost/freeside/search/report_cust_credit.html", "Credit report (by employee and/or date range)" ));
332 myMenu35.add(new WebFXMenuItem("Credit package source detail", "http://localhost/freeside/search/report_cust_credit_source_bill_pkg.html", "Line-item detail for triggered package credits" ));
333 myMenu35.add(new WebFXMenuItem("Credit application detail", "http://localhost/freeside/search/report_cust_credit_bill_pkg.html", "Line item application detail" ));
334 myMenu35.add(new WebFXMenuItem("Unapplied Credits", "http://localhost/freeside/search/report_cust_credit.html?unapplied=1", "Unapplied credit report (by type and/or date range)" ));
335 myMenu35.add(new WebFXMenuItem("Voided Credits", "http://localhost/freeside/search/report_cust_credit_void.html", "Voided credit report (by employee and/or date range)" ));
336 myMenu35.width = 256;
338 myMenu32.add(new WebFXMenuItem("Credits", null, "Credit reports", myMenu35 ));
339 var myMenu36 = new WebFXMenu;
340 myMenu36.emptyText = '';
341 myMenu36.add(new WebFXMenuItem("Refund Report", "http://localhost/freeside/search/report_cust_refund.html", "Refund report (by type and/or date range)" ));
342 myMenu36.add(new WebFXMenuItem("Unapplied Refunds", "http://localhost/freeside/search/report_cust_refund.html?unapplied=1", "Unapplied refund report (by type and/or date range)" ));
343 myMenu36.width = 256;
345 myMenu32.add(new WebFXMenuItem("Refunds", null, "Refund reports", myMenu36 ));
346 myMenu32.add(new WebFXMenuItem("A/R Aging", "http://localhost/freeside/search/report_receivables.html", "Accounts Receivable Aging report" ));
347 myMenu32.add(new WebFXMenuItem("Prepaid Income", "http://localhost/freeside/search/report_prepaid_income.html", "Prepaid income (unearned revenue) report" ));
348 myMenu32.add(new WebFXMenuItem("Tax Liability", "http://localhost/freeside/search/report_tax.html", "Tax liability report (internal tax data)" ));
349 myMenu32.add(new WebFXMenuItem("E911 Fee Summary", "http://localhost/freeside/search/report_e911.html", "E911 fee summary" ));
350 myMenu32.add(new WebFXMenuItem("Customer Accounting Summary", "http://localhost/freeside/search/report_customer_accounting_summary.html", "Customer accounting summary report" ));
351 myMenu32.width = 256;
353 myMenu0.add(new WebFXMenuItem("Financial (Receivables)", null, "Financial reports (Receivables)", myMenu32 ));
354 var myMenu37 = new WebFXMenu;
355 myMenu37.emptyText = '';
356 myMenu37.add(new WebFXMenuItem("Payables summary", "http://localhost/freeside/search/report_vend_main.html", "Payables summary by vendor" ));
357 myMenu37.add(new WebFXMenuItem("Payables detail", "http://localhost/freeside/search/report_vend_bill.html", "" ));
358 myMenu37.width = 256;
360 myMenu0.add(new WebFXMenuItem("Financial (Payables)", null, "Financial reports (Payables)", myMenu37 ));
361 var myMenu38 = new WebFXMenu;
362 myMenu38.emptyText = '';
363 var myMenu39 = new WebFXMenu;
364 myMenu39.emptyText = '';
365 myMenu39.add(new WebFXMenuItem("All billing events", "http://localhost/freeside/search/report_cust_event.html", "All billing events for a date range" ));
366 myMenu39.add(new WebFXMenuItem("Billing event errors", "http://localhost/freeside/search/report_cust_event.html?failed=1", "Failed credit cards, processor or printer problems, etc." ));
367 myMenu39.width = 256;
369 myMenu38.add(new WebFXMenuItem("Billing events", null, "Billing events", myMenu39 ));
370 myMenu38.add(new WebFXMenuItem("Credit limit incidents", "http://localhost/freeside/search/report_cust_main_credit_limit.html", "" ));
371 myMenu38.add(new WebFXMenuItem("Employee activity", "http://localhost/freeside/search/report_employee_audit.html", "" ));
372 myMenu38.add(new WebFXMenuItem("System log", "http://localhost/freeside/search/log.html", "View system events and debugging information." ));
373 myMenu38.add(new WebFXMenuItem("Outgoing messages", "http://localhost/freeside/search/cust_msg.html", "View outgoing message log" ));
374 myMenu38.width = 256;
376 myMenu0.add(new WebFXMenuItem("Logs", null, "System and email logs", myMenu38 ));
379 myBar.add(new WebFXMenuButton('Reports', null, 'Lists, reporting and graphing', myMenu0 ));
382 var myMenu40 = new WebFXMenu;
383 myMenu40.emptyText = '';
384 var myMenu41 = new WebFXMenu;
385 myMenu41.emptyText = '';
386 myMenu41.add(new WebFXMenuItem("Appointments", "http://localhost/freeside/rt/Search/Schedule.html?LengthMin=0", "View appointment schedule" ));
387 myMenu41.add(new WebFXMenuItem("Attachments", "http://localhost/freeside/browse/cust_attachment.html", "View customer attachments" ));
388 myMenu41.add(new WebFXMenuItem("Customer email settings", "http://localhost/freeside/misc/manage_cust_email.html", "" ));
389 myMenu41.width = 256;
391 myMenu40.add(new WebFXMenuItem("Customers", null, "Customer tools", myMenu41 ));
392 var myMenu42 = new WebFXMenu;
393 myMenu42.emptyText = '';
394 myMenu42.add(new WebFXMenuItem("Quick payment entry", "http://localhost/freeside/misc/batch-cust_pay.html", "Enter multiple payments in a batch" ));
395 myMenu42.add(new WebFXMenuItem("Download invoice batches", "http://localhost/freeside/search/bill_batch.cgi", "" ));
396 myMenu42.width = 256;
398 myMenu40.add(new WebFXMenuItem("Billing", null, "Payment and invoice tools", myMenu42 ));
399 var myMenu43 = new WebFXMenu;
400 myMenu43.emptyText = '';
401 var myMenu44 = new WebFXMenu;
402 myMenu44.emptyText = '';
403 myMenu44.add(new WebFXMenuItem("Overview", "http://localhost/freeside/rt/Articles/index.html", "" ));
404 myMenu44.add(new WebFXMenuItem("Search", "http://localhost/freeside/rt/Articles/Article/Search.html", "" ));
405 myMenu44.add(new WebFXMenuItem("Topics", "http://localhost/freeside/rt/Articles/Topics.html", "" ));
406 myMenu44.width = 256;
408 myMenu43.add(new WebFXMenuItem("Articles", null, "", myMenu44 ));
409 myMenu43.add(new WebFXMenuItem("My Day", "http://localhost/freeside/rt/Tools/MyDay.html", "" ));
410 myMenu43.add(new WebFXMenuItem("My Reminders", "http://localhost/freeside/rt/Tools/MyReminders.html", "" ));
411 myMenu43.add(new WebFXMenuItem("Offline", "http://localhost/freeside/rt/Tools/Offline.html", "" ));
412 myMenu43.add(new WebFXMenuItem("Approval", "http://localhost/freeside/rt/Approvals/", "" ));
413 myMenu43.width = 256;
415 myMenu40.add(new WebFXMenuItem("Ticketing", null, "Ticketing tools", myMenu43 ));
416 var myMenu45 = new WebFXMenu;
417 myMenu45.emptyText = '';
418 myMenu45.add(new WebFXMenuItem("Bulk DID Orders", "http://localhost/freeside/browse/did_order.html", "View/manage bulk DID orders" ));
419 myMenu45.add(new WebFXMenuItem("Business card scan", "http://localhost/freeside/edit/prospect_main-upload.html", "" ));
420 myMenu45.width = 256;
422 myMenu40.add(new WebFXMenuItem("Miscellaneous", null, "", myMenu45 ));
423 var myMenu46 = new WebFXMenu;
424 myMenu46.emptyText = '';
425 myMenu46.add(new WebFXMenuItem("Customers", "http://localhost/freeside/misc/cust_main-import.cgi", "" ));
426 myMenu46.add(new WebFXMenuItem("Package definitions", "http://localhost/freeside/misc/part_pkg-import.html", "" ));
427 myMenu46.add(new WebFXMenuItem("Customer packages", "http://localhost/freeside/misc/cust_pkg-import.html", "" ));
428 myMenu46.add(new WebFXMenuItem("Customer comments", "http://localhost/freeside/misc/cust_main_note-import.html", "" ));
429 myMenu46.add(new WebFXMenuItem("One-time charges", "http://localhost/freeside/misc/cust_main-import_charges.cgi", "" ));
430 myMenu46.add(new WebFXMenuItem("Payments", "http://localhost/freeside/misc/cust_pay-import.cgi", "" ));
431 myMenu46.add(new WebFXMenuItem("Credits", "http://localhost/freeside/misc/cust_credit-import.html", "" ));
432 myMenu46.add(new WebFXMenuItem("Phone numbers (DIDs)", "http://localhost/freeside/misc/phone_avail-import.html", "" ));
433 myMenu46.add(new WebFXMenuItem("Call Detail Records (CDRs)", "http://localhost/freeside/misc/cdr-import.html", "" ));
434 myMenu46.width = 256;
436 myMenu40.add(new WebFXMenuItem("Importing", null, "Import tools", myMenu46 ));
437 var myMenu47 = new WebFXMenu;
438 myMenu47.emptyText = '';
439 myMenu47.add(new WebFXMenuItem("Status", "http://localhost/freeside/view/Status.html", "System status" ));
440 myMenu47.add(new WebFXMenuItem("Job Queue", "http://localhost/freeside/search/queue.html", "View pending job queue" ));
441 myMenu47.width = 256;
443 myMenu40.add(new WebFXMenuItem("System", null, "System tools", myMenu47 ));
444 myMenu40.width = 256;
446 myBar.add(new WebFXMenuButton('Tools', null, 'Tools', myMenu40 ));
449 var myMenu48 = new WebFXMenu;
450 myMenu48.emptyText = '';
451 myMenu48.add(new WebFXMenuItem("Settings", "http://localhost/freeside/config/config-view.cgi", "" ));
452 myMenu48.add(new WebFXMenuSeparator());
453 var myMenu49 = new WebFXMenu;
454 myMenu49.emptyText = '';
455 myMenu49.add(new WebFXMenuItem("Agent types", "http://localhost/freeside/browse/agent_type.cgi", "Agent types define groups of package definitions that you can then assign to particular agents" ));
456 myMenu49.add(new WebFXMenuItem("Agents", "http://localhost/freeside/browse/agent.cgi", "Agents are resellers of your service. Agents may be limited to a subset of your full offerings (via their type)" ));
457 myMenu49.add(new WebFXMenuItem("Agent payment gateways", "http://localhost/freeside/browse/payment_gateway.html", "Credit card and electronic check processors for agent overrides" ));
458 myMenu49.width = 256;
460 myMenu48.add(new WebFXMenuItem("Companies", null, "", myMenu49 ));
461 var myMenu50 = new WebFXMenu;
462 myMenu50.emptyText = '';
463 myMenu50.add(new WebFXMenuItem("Sales People", "http://localhost/freeside/browse/sales.html", "Sales people bring in new business." ));
464 myMenu50.width = 256;
466 myMenu48.add(new WebFXMenuItem("Sales People", null, "", myMenu50 ));
467 var myMenu51 = new WebFXMenu;
468 myMenu51.emptyText = '';
469 myMenu51.add(new WebFXMenuItem("Employees", "http://localhost/freeside/browse/access_user.html", "Setup internal users" ));
470 myMenu51.add(new WebFXMenuItem("Employee groups", "http://localhost/freeside/browse/access_group.html", "Employee groups allow you to control access to the backend" ));
471 myMenu51.add(new WebFXMenuItem("Installer availability", "http://localhost/freeside/browse/sched_item.html", "Installer availability" ));
472 myMenu51.width = 256;
474 myMenu48.add(new WebFXMenuItem("Employees", null, "", myMenu51 ));
475 myMenu48.add(new WebFXMenuSeparator());
476 var myMenu52 = new WebFXMenu;
477 myMenu52.emptyText = '';
478 myMenu52.add(new WebFXMenuItem("Customer tags", "http://localhost/freeside/browse/part_tag.html", "" ));
479 myMenu52.add(new WebFXMenuItem("Customer classes", "http://localhost/freeside/browse/cust_class.html", "Customer classes define groups of customers for reporting." ));
480 myMenu52.add(new WebFXMenuItem("Customer categories", "http://localhost/freeside/browse/cust_category.html", "Customer categories define groups of customer classes." ));
481 myMenu52.add(new WebFXMenuSeparator());
482 myMenu52.add(new WebFXMenuItem("Contact types", "http://localhost/freeside/browse/contact_class.html", "" ));
483 myMenu52.width = 256;
485 myMenu48.add(new WebFXMenuItem("Customers", null, "", myMenu52 ));
486 var myMenu53 = new WebFXMenu;
487 myMenu53.emptyText = '';
488 myMenu53.add(new WebFXMenuItem("Package definitions", "http://localhost/freeside/browse/part_pkg.cgi", "One or more services are grouped together into a package and given pricing information. Customers purchase packages, not services" ));
489 myMenu53.add(new WebFXMenuItem("Package classes", "http://localhost/freeside/browse/pkg_class.html", "Package classes define groups of packages, for taxation, ordering convenience and reporting." ));
490 myMenu53.add(new WebFXMenuItem("Package categories", "http://localhost/freeside/browse/pkg_category.html", "Package categories define groups of package classes, for invoice sections." ));
491 myMenu53.add(new WebFXMenuItem("Package report classes", "http://localhost/freeside/browse/part_pkg_report_option.html", "Package classes define optional groups of packages for reporting only." ));
492 myMenu53.add(new WebFXMenuItem("Fees", "http://localhost/freeside/browse/part_fee.html", "" ));
493 myMenu53.add(new WebFXMenuItem("Discounts", "http://localhost/freeside/browse/discount.html", "" ));
494 myMenu53.add(new WebFXMenuItem("Discount classes", "http://localhost/freeside/browse/discount_class.html", "" ));
495 var myMenu54 = new WebFXMenu;
496 myMenu54.emptyText = '';
497 myMenu54.add(new WebFXMenuItem("Cancel reasons", "http://localhost/freeside/browse/reason.html?class=C", "Cancel reasons explain why a service was cancelled." ));
498 myMenu54.add(new WebFXMenuItem("Cancel reason types", "http://localhost/freeside/browse/reason_type.html?class=C", "Cancel reason types define groups of reasons." ));
499 myMenu54.add(new WebFXMenuItem("Suspend reasons", "http://localhost/freeside/browse/reason.html?class=S", "Suspend reasons explain why a service was suspended." ));
500 myMenu54.add(new WebFXMenuItem("Suspend reason types", "http://localhost/freeside/browse/reason_type.html?class=S", "Suspend reason types define groups of reasons." ));
501 myMenu54.width = 256;
503 myMenu53.add(new WebFXMenuItem("Cancel/Suspend Reasons", null, "", myMenu54 ));
504 myMenu53.width = 256;
506 myMenu48.add(new WebFXMenuItem("Packages", null, "", myMenu53 ));
507 var myMenu55 = new WebFXMenu;
508 myMenu55.emptyText = '';
509 myMenu55.add(new WebFXMenuItem("Service definitions", "http://localhost/freeside/browse/part_svc.cgi", "Services are items you offer to your customers" ));
510 myMenu55.add(new WebFXMenuItem("Service classes", "http://localhost/freeside/browse/part_svc_class.html", "Services classes are user-defined, informational types for services" ));
511 myMenu55.add(new WebFXMenuItem("Service dependencies", "http://localhost/freeside/browse/part_svc_link.html", "Services depencies define rules between service definitions" ));
512 myMenu55.add(new WebFXMenuItem("Provisioning exports", "http://localhost/freeside/browse/part_export.cgi", "Provisioning services to external machines, databases and APIs" ));
513 var myMenu56 = new WebFXMenu;
514 myMenu56.emptyText = '';
515 myMenu56.add(new WebFXMenuItem("Access numbers", "http://localhost/freeside/browse/svc_acct_pop.cgi", "Points of Presence" ));
516 myMenu56.width = 256;
518 myMenu55.add(new WebFXMenuItem("Dialup", null, "", myMenu56 ));
519 var myMenu57 = new WebFXMenu;
520 myMenu57.emptyText = '';
521 myMenu57.add(new WebFXMenuItem("Towers", "http://localhost/freeside/browse/tower.html", "Towers and sectors" ));
522 myMenu57.add(new WebFXMenuItem("Routers", "http://localhost/freeside/browse/router.cgi", "Broadband access routers" ));
523 myMenu57.add(new WebFXMenuItem("Address blocks", "http://localhost/freeside/browse/addr_block.cgi", "Manage address blocks and block assignments to broadband routers" ));
524 myMenu57.add(new WebFXMenuItem("Address ranges", "http://localhost/freeside/browse/addr_range.html", "Designate special address ranges" ));
525 myMenu57.width = 256;
527 myMenu55.add(new WebFXMenuItem("Wireless broadband", null, "", myMenu57 ));
528 var myMenu58 = new WebFXMenu;
529 myMenu58.emptyText = '';
530 myMenu58.add(new WebFXMenuItem("View/Edit phone device types", "http://localhost/freeside/browse/part_device.html", "Phone device types" ));
531 myMenu58.add(new WebFXMenuItem("View/Edit bulk DID vendors", "http://localhost/freeside/browse/did_vendor.html", "Bulk DID vendors" ));
532 myMenu58.add(new WebFXMenuItem("View/Edit Carriers", "http://localhost/freeside/browse/cdr_carrier.html", "Carriers" ));
533 myMenu58.width = 256;
535 myMenu55.add(new WebFXMenuItem("Phone", null, "", myMenu58 ));
536 var myMenu59 = new WebFXMenu;
537 myMenu59.emptyText = '';
538 myMenu59.add(new WebFXMenuItem("RADIUS Groups", "http://localhost/freeside/browse/radius_group.html", "Manage RADIUS groups" ));
539 myMenu59.add(new WebFXMenuItem("RADIUS Clients", "http://localhost/freeside/browse/nas.html", "Manage RADIUS clients" ));
540 myMenu59.width = 256;
542 myMenu55.add(new WebFXMenuItem("RADIUS", null, "", myMenu59 ));
543 var myMenu60 = new WebFXMenu;
544 myMenu60.emptyText = '';
545 myMenu60.add(new WebFXMenuItem("Cable providers", "http://localhost/freeside/browse/cable_provider.html", "" ));
546 myMenu60.add(new WebFXMenuItem("Cable modem models", "http://localhost/freeside/browse/cable_model.html", "" ));
547 myMenu60.width = 256;
549 myMenu55.add(new WebFXMenuItem("Cable", null, "", myMenu60 ));
550 var myMenu61 = new WebFXMenu;
551 myMenu61.emptyText = '';
552 myMenu61.add(new WebFXMenuItem("Conferencing types", "http://localhost/freeside/browse/conferencing_type.html", "" ));
553 myMenu61.add(new WebFXMenuItem("Quality levels", "http://localhost/freeside/browse/conferencing_quality.html", "" ));
554 myMenu61.width = 256;
556 myMenu55.add(new WebFXMenuItem("Conferencing", null, "", myMenu61 ));
557 var myMenu62 = new WebFXMenu;
558 myMenu62.emptyText = '';
559 myMenu62.add(new WebFXMenuItem("Alarm system vendors", "http://localhost/freeside/browse/alarm_system.html", "" ));
560 myMenu62.add(new WebFXMenuItem("Alarm system types", "http://localhost/freeside/browse/alarm_type.html", "" ));
561 myMenu62.add(new WebFXMenuItem("Alarm central stations", "http://localhost/freeside/browse/alarm_station.html", "" ));
562 myMenu62.width = 256;
564 myMenu55.add(new WebFXMenuItem("Alarm", null, "", myMenu62 ));
565 var myMenu63 = new WebFXMenu;
566 myMenu63.emptyText = '';
567 myMenu63.add(new WebFXMenuItem("Circuit types", "http://localhost/freeside/browse/circuit_type.html", "" ));
568 myMenu63.add(new WebFXMenuItem("Circuit providers", "http://localhost/freeside/browse/circuit_provider.html", "" ));
569 myMenu63.add(new WebFXMenuItem("Termination types", "http://localhost/freeside/browse/circuit_termination.html", "" ));
570 myMenu63.width = 256;
572 myMenu55.add(new WebFXMenuItem("Circuits", null, "", myMenu63 ));
573 myMenu55.add(new WebFXMenuItem("Hardware types", "http://localhost/freeside/browse/hardware_class.html", "Set up hardware type catalog" ));
574 myMenu55.width = 256;
576 myMenu48.add(new WebFXMenuItem("Services", null, "", myMenu55 ));
577 myMenu48.add(new WebFXMenuSeparator());
578 var myMenu64 = new WebFXMenu;
579 myMenu64.emptyText = '';
580 myMenu64.add(new WebFXMenuItem("Vendor classes", "http://localhost/freeside/browse/vend_class.html", "" ));
581 myMenu64.add(new WebFXMenuItem("Vendors", "http://localhost/freeside/browse/vend_main.html", "" ));
582 myMenu64.width = 256;
584 myMenu48.add(new WebFXMenuItem("Vendors", null, "", myMenu64 ));
585 myMenu48.add(new WebFXMenuSeparator());
586 var myMenu65 = new WebFXMenu;
587 myMenu65.emptyText = '';
588 myMenu65.add(new WebFXMenuItem("Billing events", "http://localhost/freeside/browse/part_event.html", "Billing actions for customers, invoices and packages" ));
589 myMenu65.add(new WebFXMenuItem("Invoice configurations", "http://localhost/freeside/browse/invoice_conf.html", "Adjust invoice settings for special-purpose notices" ));
590 myMenu65.add(new WebFXMenuItem("Invoice templates", "http://localhost/freeside/browse/invoice_template.html", "Edit templates for HTML, plaintext and typeset invoices" ));
591 myMenu65.add(new WebFXMenuSeparator());
592 myMenu65.add(new WebFXMenuItem("Prepaid cards", "http://localhost/freeside/search/prepay_credit.html", "View outstanding cards, generate new cards" ));
593 var myMenu66 = new WebFXMenu;
594 myMenu66.emptyText = '';
595 myMenu66.add(new WebFXMenuItem("Rate plans", "http://localhost/freeside/browse/rate.cgi", "Manage rate plans" ));
596 myMenu66.add(new WebFXMenuItem("Regions and prefixes", "http://localhost/freeside/browse/rate_region.html", "Manage regions and prefixes" ));
597 myMenu66.add(new WebFXMenuItem("Usage classes", "http://localhost/freeside/browse/usage_class.html", "Usage classes define groups of usage for taxation." ));
598 myMenu66.add(new WebFXMenuItem("Time periods", "http://localhost/freeside/browse/rate_time.html", "Time periods define days and hours for rate plans" ));
599 myMenu66.add(new WebFXMenuItem("Edit rates with Excel", "http://localhost/freeside/misc/rate_edit_excel.html", "Download and edit rates with Excel, then upload changes." ));
600 myMenu66.add(new WebFXMenuSeparator());
601 myMenu66.add(new WebFXMenuItem("Tiering plans", "http://localhost/freeside/browse/rate_tier.html", "Rating tiers" ));
602 myMenu66.width = 256;
604 myMenu65.add(new WebFXMenuItem("Call rates and regions", null, "Manage rate plans, regions and prefixes for VoIP and call billing", myMenu66 ));
605 myMenu65.add(new WebFXMenuSeparator());
606 myMenu65.add(new WebFXMenuItem("Locales and tax rates", "http://localhost/freeside/browse/cust_main_county.cgi", "Change tax rates, or break down a country into states, or a state into counties and assign different tax rates to each" ));
607 myMenu65.add(new WebFXMenuItem("Tax classes", "http://localhost/freeside/browse/part_pkg_taxclass.html", "Tax classes" ));
608 myMenu65.add(new WebFXMenuSeparator());
609 myMenu65.add(new WebFXMenuItem("Credit reasons", "http://localhost/freeside/browse/reason.html?class=R", "Credit reasons explain why a credit was issued." ));
610 myMenu65.add(new WebFXMenuItem("Credit reason types", "http://localhost/freeside/browse/reason_type.html?class=R", "Credit reason types define groups of reasons." ));
611 myMenu65.add(new WebFXMenuSeparator());
612 myMenu65.add(new WebFXMenuItem("Refund reasons", "http://localhost/freeside/browse/reason.html?class=F", "Refund reasons explain why a refund was issued." ));
613 myMenu65.add(new WebFXMenuItem("Refund reason types", "http://localhost/freeside/browse/reason_type.html?class=F", "Refund reason types define groups of reasons." ));
614 myMenu65.width = 256;
616 myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 ));
617 myMenu48.add(new WebFXMenuSeparator());
618 var myMenu67 = new WebFXMenu;
619 myMenu67.emptyText = '';
620 myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" ));
621 myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." ));
622 myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" ));
623 myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" ));
624 myMenu67.add(new WebFXMenuItem("Inventory classes and inventory", "http://localhost/freeside/browse/inventory_class.html", "Setup inventory classes and stock inventory" ));
625 myMenu67.add(new WebFXMenuItem("Upload targets", "http://localhost/freeside/browse/upload_target.html", "Billing and payment upload destinations" ));
626 myMenu67.width = 256;
628 myMenu48.add(new WebFXMenuItem("Miscellaneous", null, "", myMenu67 ));
629 myMenu48.width = 256;
631 myBar.add(new WebFXMenuButton('Configuration', null, 'Configuration and setup', myMenu48 ));
634 var myMenu68 = new WebFXMenu;
635 myMenu68.emptyText = '';
636 myMenu68.add(new WebFXMenuItem("Billing documentation", "http://www.freeside.biz/mediawiki/index.php/Freeside:4:Documentation", "Freeside documentation" ));
637 myMenu68.add(new WebFXMenuItem("Ticketing documentation", "http://wiki.bestpractical.com/", "Request Tracker Wiki" ));
638 myMenu68.add(new WebFXMenuSeparator());
639 myMenu68.add(new WebFXMenuItem("About Freeside v5.0git", "javascript:about_freeside()", "" ));
640 myMenu68.add(new WebFXMenuItem("About RT v4.2.11", "http://www.bestpractical.com/rt", "Request Tracker Homepage" ));
641 myMenu68.width = 256;
643 myBar.add(new WebFXMenuButton('Help', null, '', myMenu68 ));
646 myBar.show( null, 'vertical' );
654 <link rel="stylesheet" href="http://localhost/freeside/elements/jquery-ui.min.css">
655 <SCRIPT SRC="http://localhost/freeside/elements/jquery.js"></SCRIPT>
656 <SCRIPT SRC="http://localhost/freeside/elements/jquery-ui.min.js"></SCRIPT>
657 <SCRIPT TYPE="text/javascript" SRC="http://localhost/freeside/elements/overlibmws.js"></SCRIPT>
658 <SCRIPT TYPE="text/javascript" SRC="http://localhost/freeside/elements/overlibmws_iframe.js"></SCRIPT>
659 <SCRIPT TYPE="text/javascript" SRC="http://localhost/freeside/elements/overlibmws_draggable.js"></SCRIPT>
660 <SCRIPT TYPE="text/javascript" SRC="http://localhost/freeside/elements/overlibmws_crossframe.js"></SCRIPT>
661 <SCRIPT TYPE="text/javascript" SRC="http://localhost/freeside/elements/iframecontentmws.js"></SCRIPT>
662 <SCRIPT TYPE="text/javascript" SRC="http://localhost/freeside/elements/ajaxcontentmws.js"></SCRIPT>
664 <SCRIPT TYPE="text/javascript">
666 function rs_init_object() {
669 A=new ActiveXObject("Msxml2.XMLHTTP");
672 A=new ActiveXObject("Microsoft.XMLHTTP");
677 if(!A && typeof XMLHttpRequest != "undefined")
678 A = new XMLHttpRequest();
680 alert("Can't create XMLHttpRequest object");
691 <BODY BGCOLOR="#f8f8f8" STYLE="margin-top:0; margin-bottom:0; margin-left:0px; margin-right:0px">
692 <table width="100%" CELLPADDING=0 CELLSPACING=0 STYLE="padding-left:0px; padding-right:4px" CLASS="fshead">
694 <td BGCOLOR="#ffffff"><IMG BORDER=0 ALT="freeside" HEIGHT="36" SRC="http://localhost/freeside/view/REAL_logo.cgi"></td>
695 <td align=left BGCOLOR="#ffffff"> <!-- valign="top" -->
696 <font size=6>Freeside Test 5.0.1</font>
698 <td align=right valign=top BGCOLOR="#ffffff"><FONT SIZE="-1">Logged in as <b>test </b> <FONT SIZE="-2"><a href="http://localhost/freeside/loginout/logout.html">logout</a></FONT><br></FONT><FONT SIZE="-2"><a href="http://localhost/freeside/pref/pref.html" STYLE="color: #000000">Preferences</a>
704 <TABLE WIDTH="100%" CELLSPACING=0 CELLPADDING=0>
706 <link href="http://localhost/freeside/elements/freeside-menu.css" type="text/css" rel="stylesheet">
709 <TR CLASS="fsmenubar">
712 <TD COLSPAN="7" WIDTH="100%" STYLE="padding:1px 0px 0px 0px;border-top: 1px solid #7e0079" BGCOLOR="#dddddd">
713 <SCRIPT TYPE="text/javascript">
714 document.write(myBar);
720 <TR CLASS="fssearchbar">
722 <TD COLSPAN=1 BGCOLOR="#dddddd" ALIGN="right" STYLE="padding-left:2px">
724 <FORM ACTION="http://localhost/freeside/search/prospect_main.html" METHOD="GET" STYLE="margin:0">
725 <INPUT NAME="search_prospect" TYPE="text" VALUE="(name, company or phone)" STYLE="width:155px" onFocus="clearhint_search_prospect(this);" onClick="clearhint_search_prospect(this);" CLASS="fstext"><BR>
726 <A HREF="http://localhost/freeside/search/report_prospect_main.html" CLASS="fslink" STYLE="font-size: 11px">Adv</A>
727 <INPUT TYPE="submit" VALUE="Search prospects" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px;padding-left:1px;padding-right:1px">
732 <SCRIPT TYPE="text/javascript">
734 function clearhint_search_prospect (what) {
735 if ( what.value == '(name, company or phone)' )
743 <TD COLSPAN=1 BGCOLOR="#dddddd" ALIGN="right" STYLE="padding-left:2px">
745 <FORM ACTION="http://localhost/freeside/search/cust_main.cgi" METHOD="POST" STYLE="margin:0">
746 <INPUT NAME="search_cust" TYPE="text" VALUE="(cust #, name, company or contact phone)" STYLE="width:246px" onFocus="clearhint_search_cust(this);" onClick="clearhint_search_cust(this);" CLASS="fstext"><BR>
747 <A HREF="http://localhost/freeside/search/report_cust_main.html" CLASS="fslink" STYLE="font-size: 11px">Advanced</A>
748 <INPUT TYPE="submit" VALUE="Search customers" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px">
753 <SCRIPT TYPE="text/javascript">
755 function clearhint_search_cust (what) {
756 if ( what.value == '(cust #, name, company or contact phone)' )
764 <TD COLSPAN=1 BGCOLOR="#dddddd" ALIGN="center">
766 <SCRIPT TYPE="text/javascript">
768 function clearhint_search_address2 (what) {
769 if ( what.value == '(Unit #)' )
777 <TD COLSPAN=1 BGCOLOR="#dddddd" ALIGN="right">
779 <FORM ACTION="http://localhost/freeside/search/cust_bill.html" METHOD="GET" STYLE="margin:0;display:inline">
780 <INPUT NAME="invnum" TYPE="text" VALUE="(inv #)" STYLE="width:56px" onFocus="clearhint_search_invoice(this);" onClick="clearhint_search_invoice(this);" CLASS="fstext">
781 <A HREF="http://localhost/freeside/search/report_cust_bill.html" CLASS="fslink" STYLE="font-size: 11px">Adv</A> <BR>
782 <INPUT TYPE="submit" VALUE="Search invoices" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px;padding-left:1px;padding-right:1px;margin-top:3px">
787 <SCRIPT TYPE="text/javascript">
789 function clearhint_search_invoice (what) {
790 if ( what.value == '(inv #)' )
798 <TD COLSPAN=1 BGCOLOR="#dddddd" ALIGN="right" STYLE="padding-left:2px">
800 <FORM ACTION="http://localhost/freeside/search/cust_svc.html" METHOD="GET" STYLE="margin:0">
801 <INPUT NAME="search_svc" TYPE="text" VALUE="(user, email, ip, mac, domain or service phone)" STYLE="width:271px" onFocus="clearhint_search_svc(this);" onClick="clearhint_search_svc(this);" CLASS="fstext"><BR>
802 <A NOTYET="http://localhost/freeside/search/svc_Smarter.html" STYLE="color: #cccccc; font-size:11px">Advanced</A>
803 <INPUT TYPE="submit" VALUE="Search services" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px">
808 <SCRIPT TYPE="text/javascript">
810 function clearhint_search_svc (what) {
811 if ( what.value == '(user, email, ip, mac, domain or service phone)' )
819 <TD COLSPAN=1 BGCOLOR="#dddddd" ALIGN="right" STYLE="padding-left:2px;padding-right:2px">
821 <FORM ACTION="http://localhost/freeside//rt/index.html" METHOD="GET" STYLE="margin:0">
822 <INPUT NAME="q" TYPE="text" VALUE="(ticket #, subject, email or fulltext:text)" STYLE="width:223px" onFocus="clearhint_search_ticket(this);" onClick="clearhint_search_ticket(this);" CLASS="fstext"><BR>
823 <A HREF="http://localhost/freeside//rt/Search/Build.html?NewQuery=1" CLASS="fslink" STYLE="font-size:11px">Advanced</A>
824 <INPUT TYPE="submit" VALUE="Search tickets" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px">
829 <SCRIPT TYPE="text/javascript">
831 function clearhint_search_ticket (what) {
832 if ( what.value == '(ticket #, subject, email or fulltext:text)' )
845 <TABLE WIDTH="100%" HEIGHT="100%" CELLSPACING=0 CELLPADDING=4>
850 <TD CLASS="background" HEIGHT="100%" VALIGN="top"> <!-- WIDTH="100%"> -->
853 Edit Customer: Olson Inc (Towne, Samara)
863 <FORM NAME = "CustomerForm"
865 ACTION = "http://localhost/freeside/edit/process/cust_main.cgi"
868 <INPUT TYPE="hidden" NAME="custnum" VALUE="135">
869 <INPUT TYPE="hidden" NAME="prospectnum" VALUE="">
871 Customer #<B>135</B> -
872 <B><FONT COLOR="#00CC00">
877 <FONT CLASS="fsinnerbox-title">Basics</FONT>
878 <TABLE CLASS="fsinnerbox">
881 <TD ALIGN="right">Residential</TD>
882 <TD><INPUT TYPE = "radio"
883 NAME = "residential_commercial"
884 ID = "residential_commercial_Residential"
885 VALUE = "Residential"
886 onChange = "rescom_changed(this)"
891 <TD ALIGN="right">Commercial</TD>
892 <TD><INPUT TYPE = "radio"
893 NAME = "residential_commercial"
894 ID = "residential_commercial_Commercial"
896 onChange = "rescom_changed(this)"
901 <SCRIPT TYPE="text/javascript">
903 function rescom_changed(what) {
904 if ( what.checked == (what.value == 'Commercial' ) ) {
905 $('#company_label').slideDown();
906 $('#company_input').slideDown();
907 $('#contacts_div').slideDown();
908 $('#spouse_label').slideUp();
909 $('#spouse_last_input').slideUp();
910 $('#spouse_first_input').slideUp();
912 if ( document.getElementById('company').value.length == 0 ) {
913 $('#company_label').slideUp();
914 $('#company_input').slideUp();
916 $('#contacts_div').slideUp();
917 $('#spouse_label').slideDown();
918 $('#spouse_last_input').slideDown();
919 $('#spouse_first_input').slideDown();
924 var ship_locked_agents = {};
926 'locationname', 'address1', 'city', 'state', 'zip', 'country',
927 'latitude', 'longitude', 'district'
930 function agent_changed(what) {
931 var agentnum = what.value;
935 var was_same = f['same'].checked;
936 if ( ship_locked_agents[agentnum] ) {
937 for(var x in ship_locked_agents[agentnum]) {
938 f['ship_'+x].value = ship_locked_agents[agentnum][x];
939 f['ship_'+x].disabled = true;
941 f['same'].checked = false;
942 f['same'].disabled = true;
945 for(var i=0; i<ship_fields.length; i++) {
947 if ( f['ship_'+x].disabled ) {
948 f['ship_'+x].value = f['old_ship_'+x].value;
950 f['ship_'+x].disabled = false;
951 if ( f['bill_'+x].value != f['ship_'+x].value ) {
955 f['same'].checked = is_same;
956 f['same'].disabled = false;
958 if (f['same'].checked != was_same) {
959 samechanged(f['same']);
962 salesnum_agentnum_changed(what);
967 var myonload = function() {
969 rescom_changed(document.getElementById('residential_commercial_Residential'));
970 agent_changed(document.getElementById('agentnum'));
972 if ( $('#same').prop('checked') ) {
973 $('#div_ship_location').hide();
975 $('#div_ship_location').show();
980 if ( window.addEventListener ) {
981 window.addEventListener('load', myonload);
982 } else if ( window.attachEvent ) {
983 window.attachEvent('onload', myonload);
997 <INPUT TYPE = "hidden"
1010 <INPUT TYPE="hidden" NAME="agent_custid" VALUE="">
1014 <INPUT TYPE="hidden" NAME="classnum" VALUE="">
1020 <INPUT TYPE="hidden" NAME="taxstatusnum" VALUE="">
1026 <INPUT TYPE = "hidden"
1037 <SCRIPT TYPE="text/javascript">
1040 function get_sales() {
1041 // count args; build URL
1042 var url = "http://localhost/freeside/misc/sales.cgi?";
1043 var a = get_sales.arguments;
1047 var content = 'sub=get_sales';
1048 if ( a && typeof a == 'object' && a[0].constructor == Array ) {
1053 len = args.length - 1;
1055 for (var i = 0; i < len; i++)
1056 content = content + "&arg=" + escape(args[i]);
1057 content = content.replace( /[+]/g, '%2B'); // fix unescaped plus signs
1059 if ( 'GET' == 'GET' ) {
1060 url = url + content;
1063 //alert('GET ' + url);
1065 var xmlhttp = rs_init_object();
1066 xmlhttp.open("GET", url, true);
1068 xmlhttp.onreadystatechange = function() {
1069 if (xmlhttp.readyState != 4)
1072 if (xmlhttp.status != 200) {
1073 if ( xmlhttp.status != 0 ) {
1074 //not warning on the 0 errors, they pop up when navagating away
1076 alert(xmlhttp.status + " status connecting to " + url);
1079 var data = xmlhttp.responseText;
1080 //alert('received response: ' + data);
1081 if ( data.indexOf("<b>System error</b>") > -1 ) {
1082 // trim this a little
1083 var end = data.indexOf('<a href="#raw">') - 1;
1084 data = data.substring(0, end);
1087 WIDTH, 480, MIDX, 0, MIDY, 0,
1088 CAPTION, 'Error', STICKY, AUTOSTATUSCAP, DRAGGABLE,
1089 CLOSECLICK, BGCOLOR, '#f00', CGCOLOR, '#f00'
1092 //if ( w = window.open("about:blank") ) {
1093 // w.document.write(data);
1095 // // popup blocking? should use an overlib popup instead
1096 // alert("Error popup disabled; try disabling popup blocking to see");
1099 // invoke the callback
1100 a[a.length-1](data);
1105 if ( 'GET' == 'POST' ) {
1107 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
1108 xmlhttp.send(content);
1112 xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
1117 //rs_debug("x_$func_name url = " + url);
1118 //rs_debug("x_$func_name waiting..");
1124 <SCRIPT TYPE="text/javascript">
1127 function salesnum_opt(what, value, text) {
1128 var optionName = new Option(text, value, false, false);
1129 var length = what.length;
1130 what.options[length] = optionName;
1133 function salesnum_agentnum_changed(what) {
1134 what.form.salesnum.disabled = 'disabled'; //disable sales dropdown
1136 if ( what.type == 'hidden' ) {
1137 agentnum = what.value;
1139 agentnum = what.options[what.selectedIndex].value;
1142 function update_salesnum(sales) {
1144 if ( what.form.salesnum.type == 'hidden' ) {
1145 what.form.salesnum.disabled = ''; //re-enable sales dropdown
1149 // save the current salesnum
1150 var salesnum = what.form.salesnum.value;
1152 // blank the current sales people
1153 for ( var i = what.form.salesnum.length; i>= 0; i-- )
1154 what.form.salesnum.options[i] = null;
1156 // add the new sales people
1159 salesnum_opt( what.form.salesnum,
1164 var salesArray = eval('(' + sales + ')' );
1165 for ( var s = 0; s < salesArray.length; s=s+2 ) {
1166 //surely this should be some kind of JSON structure
1167 var salesLabel = salesArray[s+1];
1168 salesnum_opt( what.form.salesnum, salesArray[s], salesLabel );
1171 what.form.salesnum.disabled = ''; //re-enable sales dropdown
1173 //restore salesnum if possible
1174 what.form.salesnum.value = salesnum;
1178 get_sales( agentnum,
1184 var myonload = function() {
1186 salesnum_agentnum_changed(document.getElementById('agentnum'));
1189 if ( window.addEventListener ) {
1190 window.addEventListener('load', myonload);
1191 } else if ( window.attachEvent ) {
1192 window.attachEvent('onload', myonload);
1202 <INPUT TYPE="hidden" NAME="refnum" VALUE="1">
1208 <TH ALIGN="right">Referring customer</TD>
1210 <INPUT TYPE="hidden" NAME="referral_custnum" ID="referral_custnum" VALUE="">
1212 <!-- some false laziness w/ misc/batch-cust_pay.html, though not as bad as i'd thought at first... -->
1214 <INPUT TYPE = "text"
1215 NAME = "referral_custnum_search"
1216 ID = "referral_custnum_search"
1218 VALUE="(cust #, name or company)"
1219 onFocus="clearhint_referral_custnum_search(this);"
1220 onClick="clearhint_referral_custnum_search(this);"
1221 onChange="smart_referral_custnum_search(this);"
1225 <SELECT NAME="referral_custnum_select" ID="referral_custnum_select" STYLE="color:#ff0000; display:none" onChange="select_referral_custnum(this);">
1230 <SCRIPT TYPE="text/javascript">
1233 function smart_search() {
1234 // count args; build URL
1235 var url = "http://localhost/freeside/misc/xmlhttp-cust_main-search.cgi?";
1236 var a = smart_search.arguments;
1240 var content = 'sub=smart_search';
1241 if ( a && typeof a == 'object' && a[0].constructor == Array ) {
1246 len = args.length - 1;
1248 for (var i = 0; i < len; i++)
1249 content = content + "&arg=" + escape(args[i]);
1250 content = content.replace( /[+]/g, '%2B'); // fix unescaped plus signs
1252 if ( 'GET' == 'GET' ) {
1253 url = url + content;
1256 //alert('GET ' + url);
1258 var xmlhttp = rs_init_object();
1259 xmlhttp.open("GET", url, true);
1261 xmlhttp.onreadystatechange = function() {
1262 if (xmlhttp.readyState != 4)
1265 if (xmlhttp.status != 200) {
1266 if ( xmlhttp.status != 0 ) {
1267 //not warning on the 0 errors, they pop up when navagating away
1269 alert(xmlhttp.status + " status connecting to " + url);
1272 var data = xmlhttp.responseText;
1273 //alert('received response: ' + data);
1274 if ( data.indexOf("<b>System error</b>") > -1 ) {
1275 // trim this a little
1276 var end = data.indexOf('<a href="#raw">') - 1;
1277 data = data.substring(0, end);
1280 WIDTH, 480, MIDX, 0, MIDY, 0,
1281 CAPTION, 'Error', STICKY, AUTOSTATUSCAP, DRAGGABLE,
1282 CLOSECLICK, BGCOLOR, '#f00', CGCOLOR, '#f00'
1285 //if ( w = window.open("about:blank") ) {
1286 // w.document.write(data);
1288 // // popup blocking? should use an overlib popup instead
1289 // alert("Error popup disabled; try disabling popup blocking to see");
1292 // invoke the callback
1293 a[a.length-1](data);
1298 if ( 'GET' == 'POST' ) {
1300 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
1301 xmlhttp.send(content);
1305 xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
1310 //rs_debug("x_$func_name url = " + url);
1311 //rs_debug("x_$func_name waiting..");
1318 <SCRIPT TYPE="text/javascript">
1320 function clearhint_referral_custnum_search (what) {
1322 what.style.color = '#000000';
1324 if ( what.value == '(cust #, name or company)' )
1327 if ( what.value.indexOf('Customer not found: ') == 0 )
1328 what.value = what.value.substr(20);
1332 var referral_custnum_search_active = false;
1334 function smart_referral_custnum_search(what) {
1336 if ( referral_custnum_search_active )
1339 var customer = what.value;
1341 if ( customer == 'searching...' || customer == ''
1342 || customer.indexOf('Customer not found: ') == 0 )
1345 if ( what.getAttribute('magic') == 'nosearch' ) {
1346 what.setAttribute('magic', '');
1350 //what.value = 'searching...'
1351 what.disabled = true;
1352 what.style.color= '#000000';
1353 what.style.backgroundColor = '#dddddd';
1355 var customer_select = document.getElementById('referral_custnum_select');
1357 //alert("search for customer " + customer);
1359 function referral_custnum_search_update(customers) {
1361 //alert('customers returned: ' + customers);
1363 var customerArray = eval('(' + customers + ')');
1365 what.disabled = false;
1366 what.style.backgroundColor = '#ffffff';
1368 if ( customerArray.length == 0 ) {
1370 what.form.referral_custnum.value = '';
1372 what.value = 'Customer not found: ' + what.value;
1373 what.style.color = '#ff0000';
1375 what.style.display = '';
1376 customer_select.style.display = 'none';
1378 } else if ( customerArray.length == 1 ) {
1380 //alert('one customer found: ' + customerArray[0]);
1382 what.form.referral_custnum.value = customerArray[0][0];
1383 what.value = customerArray[0][1];
1385 what.style.display = '';
1386 customer_select.style.display = 'none';
1390 //alert('multiple customers found, have to create select dropdown');
1392 //blank the current list
1393 for ( var i = customer_select.length; i >= 0; i-- )
1394 customer_select.options[i] = null;
1396 opt(customer_select, '', 'Multiple customers match "' + customer + '" - select one', '#ff0000');
1398 //add the multiple customers
1399 for ( var s = 0; s < customerArray.length; s++ )
1400 opt(customer_select, customerArray[s][0], customerArray[s][1], '#000000');
1402 opt(customer_select, 'cancel', '(Edit search string)', '#000000');
1404 what.style.display = 'none';
1405 customer_select.style.display = '';
1409 referral_custnum_search_active = false;
1413 referral_custnum_search_active = true;
1415 smart_search( customer, referral_custnum_search_update );
1420 function select_referral_custnum (what) {
1422 var custnum = what.options[what.selectedIndex].value;
1423 var customer = what.options[what.selectedIndex].text;
1425 var customer_obj = document.getElementById('referral_custnum_search');
1427 if ( custnum == '' ) {
1428 //what.style.color = '#ff0000';
1430 } else if ( custnum == 'cancel' ) {
1432 customer_obj.style.color = '#000000';
1434 what.style.display = 'none';
1435 customer_obj.style.display = '';
1436 customer_obj.focus();
1440 what.form.referral_custnum.value = custnum;
1442 customer_obj.value = customer;
1443 customer_obj.style.color = '#000000';
1445 what.style.display = 'none';
1446 customer_obj.style.display = '';
1452 function opt(what,value,text,color) {
1453 var optionName = new Option(text, value, false, false);
1454 optionName.style.color = color;
1455 var length = what.length;
1456 what.options[length] = optionName;
1466 <INPUT TYPE="hidden" NAME="edit_subject" VALUE="">
1468 <INPUT TYPE="hidden" NAME="calling_list_exempt" VALUE="">
1477 <FONT CLASS="fsinnerbox-title">Billing address</FONT>
1478 <TABLE CLASS="fsinnerbox" WIDTH="100%">
1481 <TH CLASS="required label" ALIGN="right">Contact name</TD>
1482 <TD COLSPAN=6 STYLE="vertical-align:top">
1484 <DIV STYLE="display: inline-block" ID="last_input">
1485 <INPUT TYPE="text" NAME="last" VALUE="Towne" ,>
1486 <BR><FONT SIZE="-1" COLOR="#333333">Last</FONT>
1490 <DIV STYLE="display: inline-block" ID="first_input">
1491 <INPUT TYPE="text" NAME="first" VALUE="Samara" >
1492 <BR><FONT SIZE="-1" COLOR="#333333">First</FONT>
1495 <INPUT TYPE="hidden" NAME="ss" VALUE="">
1500 <TR ID="company_row">
1501 <TH ALIGN="right"><DIV ID="company_label" >Company</DIV></TD>
1502 <TD COLSPAN=6><DIV ID="company_input" ><INPUT TYPE="text" NAME="company" ID="company" SIZE=60
1510 <INPUT TYPE = "hidden"
1511 NAME = "bill_locationname"
1512 ID = "bill_locationname"
1520 <TH STYLE="width:16ex" ALIGN="right"><font color="#ff0000">*</font> Address</TH>
1522 <INPUT TYPE = "text"
1523 NAME = "bill_address1"
1524 ID = "bill_address1"
1525 VALUE = "46706 Kadin Hill #780"
1536 <TH ALIGN="right"><FONT ID="bill_address2_required" color="#ff0000" STYLE="visibility:hidden">*</FONT> <FONT ID="bill_address2_label" STYLE="visibility:hidden"><B>Unit #</B></FONT></TD>
1538 <INPUT TYPE = "text"
1539 NAME = "bill_address2"
1540 ID = "bill_address2"
1541 VALUE = "Trailer W 2-E"
1554 <font color="#ff0000">*</font> City
1561 <SCRIPT TYPE="text/javascript">
1564 function bill_get_cities() {
1565 // count args; build URL
1566 var url = "http://localhost/freeside/misc/cities.cgi?";
1567 var a = bill_get_cities.arguments;
1571 var content = 'sub=bill_get_cities';
1572 if ( a && typeof a == 'object' && a[0].constructor == Array ) {
1577 len = args.length - 1;
1579 for (var i = 0; i < len; i++)
1580 content = content + "&arg=" + escape(args[i]);
1581 content = content.replace( /[+]/g, '%2B'); // fix unescaped plus signs
1583 if ( 'GET' == 'GET' ) {
1584 url = url + content;
1587 //alert('GET ' + url);
1589 var xmlhttp = rs_init_object();
1590 xmlhttp.open("GET", url, true);
1592 xmlhttp.onreadystatechange = function() {
1593 if (xmlhttp.readyState != 4)
1596 if (xmlhttp.status != 200) {
1597 if ( xmlhttp.status != 0 ) {
1598 //not warning on the 0 errors, they pop up when navagating away
1600 alert(xmlhttp.status + " status connecting to " + url);
1603 var data = xmlhttp.responseText;
1604 //alert('received response: ' + data);
1605 if ( data.indexOf("<b>System error</b>") > -1 ) {
1606 // trim this a little
1607 var end = data.indexOf('<a href="#raw">') - 1;
1608 data = data.substring(0, end);
1611 WIDTH, 480, MIDX, 0, MIDY, 0,
1612 CAPTION, 'Error', STICKY, AUTOSTATUSCAP, DRAGGABLE,
1613 CLOSECLICK, BGCOLOR, '#f00', CGCOLOR, '#f00'
1616 //if ( w = window.open("about:blank") ) {
1617 // w.document.write(data);
1619 // // popup blocking? should use an overlib popup instead
1620 // alert("Error popup disabled; try disabling popup blocking to see");
1623 // invoke the callback
1624 a[a.length-1](data);
1629 if ( 'GET' == 'POST' ) {
1631 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
1632 xmlhttp.send(content);
1636 xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
1641 //rs_debug("x_$func_name url = " + url);
1642 //rs_debug("x_$func_name waiting..");
1649 <SCRIPT TYPE="text/javascript">
1651 function opt(what,value,text) {
1652 var optionName = new Option(text, value, false, false);
1653 var length = what.length;
1654 what.options[length] = optionName;
1657 var saved_bill_city= 'Owensboro';
1659 function bill_county_changed(what, callback) {
1661 what.form.bill_city_select.disabled = 'disabled';
1663 county = what.options[what.selectedIndex].value;
1664 state = what.form.bill_state.options[what.form.bill_state.selectedIndex].value;
1665 country = what.form.bill_country.options[what.form.bill_country.selectedIndex].value;
1667 function bill_update_cities(cities) {
1669 // blank the current city list
1670 for ( var i = what.form.bill_city_select.length; i >= 0; i-- )
1671 what.form.bill_city_select.options[i] = null;
1674 // add the new cities
1675 var citiesArray = eval('(' + cities + ')' );
1677 for ( var s = 0; s < citiesArray.length; s++ ) {
1678 var cityLabel = citiesArray[s];
1679 if ( cityLabel == "" )
1680 cityLabel = '(n/a)';
1681 opt(what.form.bill_city_select, citiesArray[s], cityLabel);
1684 if ( citiesArray.length > 1 || (citiesArray[0] && citiesArray[0].length) ){
1685 // turn off the text city, turn on the select
1686 saved_bill_city = what.form.bill_city.value;
1687 bill_city_select_changed(what.form.bill_city_select);
1688 what.form.bill_city.style.display = 'none';
1689 what.form.bill_city_select.style.display = '';
1690 } else if ( what.form.bill_city.style.display == 'none' ) {
1691 // turn on the text city, turn off the select
1692 what.form.bill_city.value = saved_bill_city;
1693 what.form.bill_city.style.display = '';
1694 what.form.bill_city_select.style.display = 'none';
1697 what.form.bill_city_select.disabled = '';
1700 if ( callback != null )
1704 // go get the new cities
1705 bill_get_cities( county, state, country, bill_update_cities );
1709 function bill_city_select_changed(what) {
1710 what.form.bill_city.value = what.options[what.selectedIndex].value;
1716 <INPUT TYPE = "text"
1726 <SELECT NAME = "bill_city_select"
1727 ID = "bill_city_select"
1728 onChange = "bill_city_select_changed(this); "
1730 STYLE="display:none"
1743 <TH ALIGN="right" WIDTH="1" ID="bill_countylabel" STYLE="display:none"><font color="#ff0000">*</font> County</TH>
1745 <SCRIPT TYPE="text/javascript">
1746 function bill_state_changed(what) {
1750 <SELECT NAME = "bill_county"
1752 STYLE = "display:none"
1754 <OPTION SELECTED VALUE="">
1759 <TH ALIGN="right" WIDTH="1"><font color="#ff0000">*</font> State</TH>
1762 <SELECT NAME = "bill_state"
1764 onChange = "bill_state_changed(this); "
1771 <OPTION VALUE="AK">AK
1774 <OPTION VALUE="AL">AL
1777 <OPTION VALUE="AR">AR
1780 <OPTION VALUE="AS">AS
1783 <OPTION VALUE="AZ">AZ
1786 <OPTION VALUE="CA">CA
1789 <OPTION VALUE="CO">CO
1792 <OPTION VALUE="CT">CT
1795 <OPTION VALUE="DC">DC
1798 <OPTION VALUE="DE">DE
1801 <OPTION VALUE="FL">FL
1804 <OPTION VALUE="GA">GA
1807 <OPTION VALUE="GU">GU
1810 <OPTION VALUE="HI">HI
1813 <OPTION VALUE="IA">IA
1816 <OPTION VALUE="ID">ID
1819 <OPTION VALUE="IL">IL
1822 <OPTION VALUE="IN">IN
1825 <OPTION VALUE="KS" SELECTED>KS
1828 <OPTION VALUE="KY">KY
1831 <OPTION VALUE="LA">LA
1834 <OPTION VALUE="MA">MA
1837 <OPTION VALUE="MD">MD
1840 <OPTION VALUE="ME">ME
1843 <OPTION VALUE="MI">MI
1846 <OPTION VALUE="MN">MN
1849 <OPTION VALUE="MO">MO
1852 <OPTION VALUE="MP">MP
1855 <OPTION VALUE="MS">MS
1858 <OPTION VALUE="MT">MT
1861 <OPTION VALUE="NC">NC
1864 <OPTION VALUE="ND">ND
1867 <OPTION VALUE="NE">NE
1870 <OPTION VALUE="NH">NH
1873 <OPTION VALUE="NJ">NJ
1876 <OPTION VALUE="NM">NM
1879 <OPTION VALUE="NV">NV
1882 <OPTION VALUE="NY">NY
1885 <OPTION VALUE="OH">OH
1888 <OPTION VALUE="OK">OK
1891 <OPTION VALUE="OR">OR
1894 <OPTION VALUE="PA">PA
1897 <OPTION VALUE="PR">PR
1900 <OPTION VALUE="RI">RI
1903 <OPTION VALUE="SC">SC
1906 <OPTION VALUE="SD">SD
1909 <OPTION VALUE="TN">TN
1912 <OPTION VALUE="TX">TX
1915 <OPTION VALUE="UM">UM
1918 <OPTION VALUE="UT">UT
1921 <OPTION VALUE="VA">VA
1924 <OPTION VALUE="VI">VI
1927 <OPTION VALUE="VT">VT
1930 <OPTION VALUE="WA">WA
1933 <OPTION VALUE="WI">WI
1936 <OPTION VALUE="WV">WV
1939 <OPTION VALUE="WY">WY
1948 <TH ALIGN="right" WIDTH="1"><font color="#ff0000">*</font> Zip</TH>
1950 <INPUT TYPE = "text"
1963 <TH ALIGN="right"><font color="#ff0000">*</font> Country</TH>
1967 <SCRIPT TYPE="text/javascript">
1970 function bill_get_states() {
1971 // count args; build URL
1972 var url = "http://localhost/freeside/misc/states.cgi?";
1973 var a = bill_get_states.arguments;
1977 var content = 'sub=bill_get_states';
1978 if ( a && typeof a == 'object' && a[0].constructor == Array ) {
1983 len = args.length - 1;
1985 for (var i = 0; i < len; i++)
1986 content = content + "&arg=" + escape(args[i]);
1987 content = content.replace( /[+]/g, '%2B'); // fix unescaped plus signs
1989 if ( 'GET' == 'GET' ) {
1990 url = url + content;
1993 //alert('GET ' + url);
1995 var xmlhttp = rs_init_object();
1996 xmlhttp.open("GET", url, true);
1998 xmlhttp.onreadystatechange = function() {
1999 if (xmlhttp.readyState != 4)
2002 if (xmlhttp.status != 200) {
2003 if ( xmlhttp.status != 0 ) {
2004 //not warning on the 0 errors, they pop up when navagating away
2006 alert(xmlhttp.status + " status connecting to " + url);
2009 var data = xmlhttp.responseText;
2010 //alert('received response: ' + data);
2011 if ( data.indexOf("<b>System error</b>") > -1 ) {
2012 // trim this a little
2013 var end = data.indexOf('<a href="#raw">') - 1;
2014 data = data.substring(0, end);
2017 WIDTH, 480, MIDX, 0, MIDY, 0,
2018 CAPTION, 'Error', STICKY, AUTOSTATUSCAP, DRAGGABLE,
2019 CLOSECLICK, BGCOLOR, '#f00', CGCOLOR, '#f00'
2022 //if ( w = window.open("about:blank") ) {
2023 // w.document.write(data);
2025 // // popup blocking? should use an overlib popup instead
2026 // alert("Error popup disabled; try disabling popup blocking to see");
2029 // invoke the callback
2030 a[a.length-1](data);
2035 if ( 'GET' == 'POST' ) {
2037 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
2038 xmlhttp.send(content);
2042 xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
2047 //rs_debug("x_$func_name url = " + url);
2048 //rs_debug("x_$func_name waiting..");
2055 <SCRIPT TYPE="text/javascript">
2057 function opt(what,value,text) {
2058 var optionName = new Option(text, value, false, false);
2059 var length = what.length;
2060 what.options[length] = optionName;
2063 function bill_country_changed(what, callback) {
2065 what.form.bill_state.disabled = 'disabled';
2067 country = what.options[what.selectedIndex].value;
2069 function bill_update_states(states) {
2071 // blank the current state list
2072 for ( var i = what.form.bill_state.length; i >= 0; i-- )
2073 what.form.bill_state.options[i] = null;
2075 // add the new states
2076 var statesArray = eval('(' + states + ')' );
2078 for ( var s = 0; s < statesArray.length; s=s+2 ) {
2079 var stateLabel = statesArray[s+1];
2080 if ( stateLabel == "" )
2081 stateLabel = '(n/a)';
2082 opt(what.form.bill_state, statesArray[s], stateLabel);
2085 what.form.bill_state.disabled = '';
2088 if ( callback != null ) {
2091 bill_state_changed(what.form.bill_state);
2095 // go get the new states
2096 bill_get_states( country, bill_update_states );
2103 <SELECT NAME = "bill_country"
2105 onChange = "bill_country_changed(this); "
2139 >American Samoa (AS)
2164 >Antigua and Barbuda (AG)
2249 >Bolivia, Plurinational State of (BO)
2254 >Bonaire, Sint Eustatius and Saba (BQ)
2259 >Bosnia and Herzegovina (BA)
2279 >British Indian Ocean Territory (IO)
2284 >Brunei Darussalam (BN)
2324 >Cayman Islands (KY)
2329 >Central African Republic (CF)
2349 >Christmas Island (CX)
2354 >Cocos (Keeling) Islands (CC)
2374 >Congo (The Democratic Republic of the) (CD)
2414 >Czech Republic (CZ)
2434 >Dominican Republic (DO)
2454 >Equatorial Guinea (GQ)
2474 >Falkland Islands (The) [Malvinas] (FK)
2504 >French Polynesia (PF)
2509 >French Southern Territories (TF)
2599 >Heard Island and McDonald Islands (HM)
2604 >Holy See (The) [Vatican City State] (VA)
2639 >Iran, The Islamic Republic of (IR)
2704 >Korea, The Democratic People's Republic of (KP)
2709 >Korea, The Republic of (KR)
2724 >Lao People's Democratic Republic (LA)
2774 >Macedonia, The former Yugoslav Republic of (MK)
2809 >Marshall Islands (MH)
2839 >Micronesia, The Federated States of (FM)
2844 >Moldova, The Republic of (MD)
2934 >Norfolk Island (NF)
2939 >Northern Mariana Islands (MP)
2964 >Palestine, State of (PS)
2974 >Papua New Guinea (PG)
3029 >Russian Federation (RU)
3039 >Saint Barthelemy (BL)
3044 >Saint Helena, Ascension and Tristan da Cunha (SH)
3049 >Saint Kitts and Nevis (KN)
3059 >Saint Martin (French part) (MF)
3064 >Saint Pierre and Miquelon (PM)
3069 >Saint Vincent and the Grenadines (VC)
3084 >Sao Tome and Principe (ST)
3119 >Sint Maarten (Dutch part) (SX)
3134 >Solomon Islands (SB)
3149 >South Georgia and the South Sandwich Islands (GS)
3179 >Svalbard and Jan Mayen (SJ)
3199 >Syrian Arab Republic (SY)
3204 >Taiwan (Province of China) (TW)
3214 >Tanzania, United Republic of (TZ)
3244 >Trinidad and Tobago (TT)
3264 >Turks and Caicos Islands (TC)
3284 >United Arab Emirates (AE)
3289 >United Kingdom (GB)
3294 >United States Minor Outlying Islands (UM)
3314 >Venezuela, Bolivarian Republic of (VE)
3324 >Virgin Islands (British) (VG)
3329 >Virgin Islands (U.S.) (VI)
3334 >Wallis and Futuna (WF)
3339 >Western Sahara (EH)
3363 <TH ALIGN="right">Latitude</TD>
3365 <INPUT TYPE = "text"
3366 NAME = "bill_latitude"
3367 ID = "bill_latitude"
3368 VALUE = "38.5000000"
3372 <FONT SIZE="-1" COLOR="#666666">Longitude</FONT>
3373 <INPUT TYPE = "text"
3374 NAME = "bill_longitude"
3375 ID = "bill_longitude"
3376 VALUE = "-121.5000000"
3382 <INPUT TYPE = "hidden"
3383 NAME = "bill_coord_auto"
3384 ID = "bill_coord_auto"
3389 <INPUT TYPE = "hidden"
3390 NAME = "bill_geocode"
3396 <INPUT TYPE = "hidden"
3397 NAME = "bill_censustract"
3398 ID = "bill_censustract"
3403 <INPUT TYPE = "hidden"
3404 NAME = "bill_censusyear"
3405 ID = "bill_censusyear"
3411 <TH ALIGN="right">Census tract</TD>
3413 <INPUT TYPE="text" SIZE=15
3414 ID="bill_enter_censustract"
3415 NAME="bill_enter_censustract"
3417 <FONT SIZE="-1" COLOR="#333333">(automatic)</FONT>
3420 <INPUT TYPE = "hidden"
3421 NAME = "bill_district"
3422 ID = "bill_district"
3428 <INPUT TYPE = "hidden"
3429 NAME = "old_bill_locationname"
3430 ID = "old_bill_locationname"
3435 <INPUT TYPE = "hidden"
3436 NAME = "old_bill_address1"
3437 ID = "old_bill_address1"
3438 VALUE = "46706 Kadin Hill #780"
3442 <INPUT TYPE = "hidden"
3443 NAME = "old_bill_city"
3444 ID = "old_bill_city"
3449 <INPUT TYPE = "hidden"
3450 NAME = "old_bill_state"
3451 ID = "old_bill_state"
3456 <INPUT TYPE = "hidden"
3457 NAME = "old_bill_country"
3458 ID = "old_bill_country"
3463 <INPUT TYPE = "hidden"
3464 NAME = "old_bill_zip"
3470 <INPUT TYPE = "hidden"
3471 NAME = "old_bill_latitude"
3472 ID = "old_bill_latitude"
3473 VALUE = "38.5000000"
3477 <INPUT TYPE = "hidden"
3478 NAME = "old_bill_longitude"
3479 ID = "old_bill_longitude"
3480 VALUE = "-121.5000000"
3484 <INPUT TYPE = "hidden"
3485 NAME = "old_bill_censustract"
3486 ID = "old_bill_censustract"
3491 <INPUT TYPE = "hidden"
3492 NAME = "old_bill_district"
3493 ID = "old_bill_district"
3498 <INPUT TYPE = "hidden"
3499 NAME = "old_bill_addr_clean"
3500 ID = "old_bill_addr_clean"
3505 <INPUT TYPE = "hidden"
3506 NAME = "bill_cachenum"
3507 ID = "bill_cachenum"
3512 <INPUT TYPE = "hidden"
3513 NAME = "bill_addr_clean"
3514 ID = "bill_addr_clean"
3520 <SCRIPT TYPE="text/javascript">
3522 var myonload = function() {
3524 var clear_coords_ids = [
3527 'bill_enter_censustract',
3531 function clear_coords() {
3532 for (var i=0; i < clear_coords_ids.length; i++) {
3533 var el = document.getElementById(clear_coords_ids[i]);
3539 var clear_coords_on_change = [
3547 for (var i=0; i < clear_coords_on_change.length; i++) {
3548 var el = document.getElementById(clear_coords_on_change[i]);
3549 if ( el.addEventListener ) {
3550 el.addEventListener('change', clear_coords);
3551 } else if ( el.attachEvent ) {
3552 el.attachEvent('onchange', clear_coords);
3555 function clear_censustract() {
3556 // if the user manually edits the census tract, clear the 'hard' census
3557 // tract field so that we can re-verify and present a confirmation popup
3559 // get the ID of the hidden censustract field
3560 var censustract_id = this.id.replace('enter_', '');
3561 var el = document.getElementById(censustract_id);
3566 var el = document.getElementById('bill_enter_censustract');
3568 if ( el.addEventListener ) {
3569 el.addEventListener('change', clear_censustract);
3570 } else if ( el.attachEvent ) {
3571 el.attachEvent('onchange', clear_censustract);
3577 if ( window.addEventListener ) {
3578 window.addEventListener('load', myonload);
3579 } else if ( window.attachEvent ) {
3580 window.attachEvent('onload', myonload);
3588 <TH VALIGN="top" ALIGN="right">Phones</TD>
3590 <TABLE CELLSPACING=0 CELLPADDING=0>
3595 VALUE="297-868-7684 x427"
3598 <BR><FONT SIZE=-1 COLOR="#333333">Day Phone</FONT>
3604 VALUE="538-045-0820"
3607 <BR><FONT SIZE=-1 COLOR="#333333">Night Phone</FONT>
3616 <BR><FONT SIZE=-1 COLOR="#333333">Mobile</FONT>
3625 <TH ALIGN="right">Fax</TD>
3626 <TD><INPUT TYPE="text" NAME="fax" VALUE="" SIZE=18></TD>
3629 <INPUT TYPE="hidden" NAME="stateid" VALUE="">
3630 <INPUT TYPE="hidden" NAME="stateid_state" VALUE="KS">
3637 <TR><TD STYLE="height:14px"></TD></TR>
3640 <FONT CLASS="fsinnerbox-title">Service address</FONT>
3641 <INPUT TYPE="checkbox"
3644 onclick="samechanged(this)"
3645 onkeyup="samechanged(this)"
3648 >same as billing address
3649 <DIV ID="div_ship_location">
3650 <TABLE WIDTH="100%" CLASS="fsinnerbox">
3654 <INPUT TYPE = "hidden"
3655 NAME = "ship_locationname"
3656 ID = "ship_locationname"
3664 <TH STYLE="width:16ex" ALIGN="right"><font color="#ff0000">*</font> Address</TH>
3666 <INPUT TYPE = "text"
3667 NAME = "ship_address1"
3668 ID = "ship_address1"
3669 VALUE = "46706 Kadin Hill #780"
3680 <TH ALIGN="right"><FONT ID="ship_address2_required" color="#ff0000" STYLE="visibility:hidden">*</FONT> <FONT ID="ship_address2_label" STYLE="visibility:hidden"><B>Unit #</B></FONT></TD>
3682 <INPUT TYPE = "text"
3683 NAME = "ship_address2"
3684 ID = "ship_address2"
3685 VALUE = "Trailer W 2-E"
3698 <font color="#ff0000">*</font> City
3705 <SCRIPT TYPE="text/javascript">
3708 function ship_get_cities() {
3709 // count args; build URL
3710 var url = "http://localhost/freeside/misc/cities.cgi?";
3711 var a = ship_get_cities.arguments;
3715 var content = 'sub=ship_get_cities';
3716 if ( a && typeof a == 'object' && a[0].constructor == Array ) {
3721 len = args.length - 1;
3723 for (var i = 0; i < len; i++)
3724 content = content + "&arg=" + escape(args[i]);
3725 content = content.replace( /[+]/g, '%2B'); // fix unescaped plus signs
3727 if ( 'GET' == 'GET' ) {
3728 url = url + content;
3731 //alert('GET ' + url);
3733 var xmlhttp = rs_init_object();
3734 xmlhttp.open("GET", url, true);
3736 xmlhttp.onreadystatechange = function() {
3737 if (xmlhttp.readyState != 4)
3740 if (xmlhttp.status != 200) {
3741 if ( xmlhttp.status != 0 ) {
3742 //not warning on the 0 errors, they pop up when navagating away
3744 alert(xmlhttp.status + " status connecting to " + url);
3747 var data = xmlhttp.responseText;
3748 //alert('received response: ' + data);
3749 if ( data.indexOf("<b>System error</b>") > -1 ) {
3750 // trim this a little
3751 var end = data.indexOf('<a href="#raw">') - 1;
3752 data = data.substring(0, end);
3755 WIDTH, 480, MIDX, 0, MIDY, 0,
3756 CAPTION, 'Error', STICKY, AUTOSTATUSCAP, DRAGGABLE,
3757 CLOSECLICK, BGCOLOR, '#f00', CGCOLOR, '#f00'
3760 //if ( w = window.open("about:blank") ) {
3761 // w.document.write(data);
3763 // // popup blocking? should use an overlib popup instead
3764 // alert("Error popup disabled; try disabling popup blocking to see");
3767 // invoke the callback
3768 a[a.length-1](data);
3773 if ( 'GET' == 'POST' ) {
3775 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
3776 xmlhttp.send(content);
3780 xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
3785 //rs_debug("x_$func_name url = " + url);
3786 //rs_debug("x_$func_name waiting..");
3793 <SCRIPT TYPE="text/javascript">
3795 function opt(what,value,text) {
3796 var optionName = new Option(text, value, false, false);
3797 var length = what.length;
3798 what.options[length] = optionName;
3801 var saved_ship_city= 'Owensboro';
3803 function ship_county_changed(what, callback) {
3805 what.form.ship_city_select.disabled = 'disabled';
3807 county = what.options[what.selectedIndex].value;
3808 state = what.form.ship_state.options[what.form.ship_state.selectedIndex].value;
3809 country = what.form.ship_country.options[what.form.ship_country.selectedIndex].value;
3811 function ship_update_cities(cities) {
3813 // blank the current city list
3814 for ( var i = what.form.ship_city_select.length; i >= 0; i-- )
3815 what.form.ship_city_select.options[i] = null;
3818 // add the new cities
3819 var citiesArray = eval('(' + cities + ')' );
3821 for ( var s = 0; s < citiesArray.length; s++ ) {
3822 var cityLabel = citiesArray[s];
3823 if ( cityLabel == "" )
3824 cityLabel = '(n/a)';
3825 opt(what.form.ship_city_select, citiesArray[s], cityLabel);
3828 if ( citiesArray.length > 1 || (citiesArray[0] && citiesArray[0].length) ){
3829 // turn off the text city, turn on the select
3830 saved_ship_city = what.form.ship_city.value;
3831 ship_city_select_changed(what.form.ship_city_select);
3832 what.form.ship_city.style.display = 'none';
3833 what.form.ship_city_select.style.display = '';
3834 } else if ( what.form.ship_city.style.display == 'none' ) {
3835 // turn on the text city, turn off the select
3836 what.form.ship_city.value = saved_ship_city;
3837 what.form.ship_city.style.display = '';
3838 what.form.ship_city_select.style.display = 'none';
3841 what.form.ship_city_select.disabled = '';
3844 if ( callback != null )
3848 // go get the new cities
3849 ship_get_cities( county, state, country, ship_update_cities );
3853 function ship_city_select_changed(what) {
3854 what.form.ship_city.value = what.options[what.selectedIndex].value;
3860 <INPUT TYPE = "text"
3870 <SELECT NAME = "ship_city_select"
3871 ID = "ship_city_select"
3872 onChange = "ship_city_select_changed(this); "
3874 STYLE="display:none"
3887 <TH ALIGN="right" WIDTH="1" ID="ship_countylabel" STYLE="display:none"><font color="#ff0000">*</font> County</TH>
3889 <SCRIPT TYPE="text/javascript">
3890 function ship_state_changed(what) {
3894 <SELECT NAME = "ship_county"
3896 STYLE = "display:none"
3898 <OPTION SELECTED VALUE="">
3903 <TH ALIGN="right" WIDTH="1"><font color="#ff0000">*</font> State</TH>
3906 <SELECT NAME = "ship_state"
3908 onChange = "ship_state_changed(this); "
3915 <OPTION VALUE="AK">AK
3918 <OPTION VALUE="AL">AL
3921 <OPTION VALUE="AR">AR
3924 <OPTION VALUE="AS">AS
3927 <OPTION VALUE="AZ">AZ
3930 <OPTION VALUE="CA">CA
3933 <OPTION VALUE="CO">CO
3936 <OPTION VALUE="CT">CT
3939 <OPTION VALUE="DC">DC
3942 <OPTION VALUE="DE">DE
3945 <OPTION VALUE="FL">FL
3948 <OPTION VALUE="GA">GA
3951 <OPTION VALUE="GU">GU
3954 <OPTION VALUE="HI">HI
3957 <OPTION VALUE="IA">IA
3960 <OPTION VALUE="ID">ID
3963 <OPTION VALUE="IL">IL
3966 <OPTION VALUE="IN">IN
3969 <OPTION VALUE="KS" SELECTED>KS
3972 <OPTION VALUE="KY">KY
3975 <OPTION VALUE="LA">LA
3978 <OPTION VALUE="MA">MA
3981 <OPTION VALUE="MD">MD
3984 <OPTION VALUE="ME">ME
3987 <OPTION VALUE="MI">MI
3990 <OPTION VALUE="MN">MN
3993 <OPTION VALUE="MO">MO
3996 <OPTION VALUE="MP">MP
3999 <OPTION VALUE="MS">MS
4002 <OPTION VALUE="MT">MT
4005 <OPTION VALUE="NC">NC
4008 <OPTION VALUE="ND">ND
4011 <OPTION VALUE="NE">NE
4014 <OPTION VALUE="NH">NH
4017 <OPTION VALUE="NJ">NJ
4020 <OPTION VALUE="NM">NM
4023 <OPTION VALUE="NV">NV
4026 <OPTION VALUE="NY">NY
4029 <OPTION VALUE="OH">OH
4032 <OPTION VALUE="OK">OK
4035 <OPTION VALUE="OR">OR
4038 <OPTION VALUE="PA">PA
4041 <OPTION VALUE="PR">PR
4044 <OPTION VALUE="RI">RI
4047 <OPTION VALUE="SC">SC
4050 <OPTION VALUE="SD">SD
4053 <OPTION VALUE="TN">TN
4056 <OPTION VALUE="TX">TX
4059 <OPTION VALUE="UM">UM
4062 <OPTION VALUE="UT">UT
4065 <OPTION VALUE="VA">VA
4068 <OPTION VALUE="VI">VI
4071 <OPTION VALUE="VT">VT
4074 <OPTION VALUE="WA">WA
4077 <OPTION VALUE="WI">WI
4080 <OPTION VALUE="WV">WV
4083 <OPTION VALUE="WY">WY
4092 <TH ALIGN="right" WIDTH="1"><font color="#ff0000">*</font> Zip</TH>
4094 <INPUT TYPE = "text"
4107 <TH ALIGN="right"><font color="#ff0000">*</font> Country</TH>
4111 <SCRIPT TYPE="text/javascript">
4114 function ship_get_states() {
4115 // count args; build URL
4116 var url = "http://localhost/freeside/misc/states.cgi?";
4117 var a = ship_get_states.arguments;
4121 var content = 'sub=ship_get_states';
4122 if ( a && typeof a == 'object' && a[0].constructor == Array ) {
4127 len = args.length - 1;
4129 for (var i = 0; i < len; i++)
4130 content = content + "&arg=" + escape(args[i]);
4131 content = content.replace( /[+]/g, '%2B'); // fix unescaped plus signs
4133 if ( 'GET' == 'GET' ) {
4134 url = url + content;
4137 //alert('GET ' + url);
4139 var xmlhttp = rs_init_object();
4140 xmlhttp.open("GET", url, true);
4142 xmlhttp.onreadystatechange = function() {
4143 if (xmlhttp.readyState != 4)
4146 if (xmlhttp.status != 200) {
4147 if ( xmlhttp.status != 0 ) {
4148 //not warning on the 0 errors, they pop up when navagating away
4150 alert(xmlhttp.status + " status connecting to " + url);
4153 var data = xmlhttp.responseText;
4154 //alert('received response: ' + data);
4155 if ( data.indexOf("<b>System error</b>") > -1 ) {
4156 // trim this a little
4157 var end = data.indexOf('<a href="#raw">') - 1;
4158 data = data.substring(0, end);
4161 WIDTH, 480, MIDX, 0, MIDY, 0,
4162 CAPTION, 'Error', STICKY, AUTOSTATUSCAP, DRAGGABLE,
4163 CLOSECLICK, BGCOLOR, '#f00', CGCOLOR, '#f00'
4166 //if ( w = window.open("about:blank") ) {
4167 // w.document.write(data);
4169 // // popup blocking? should use an overlib popup instead
4170 // alert("Error popup disabled; try disabling popup blocking to see");
4173 // invoke the callback
4174 a[a.length-1](data);
4179 if ( 'GET' == 'POST' ) {
4181 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
4182 xmlhttp.send(content);
4186 xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
4191 //rs_debug("x_$func_name url = " + url);
4192 //rs_debug("x_$func_name waiting..");
4199 <SCRIPT TYPE="text/javascript">
4201 function opt(what,value,text) {
4202 var optionName = new Option(text, value, false, false);
4203 var length = what.length;
4204 what.options[length] = optionName;
4207 function ship_country_changed(what, callback) {
4209 what.form.ship_state.disabled = 'disabled';
4211 country = what.options[what.selectedIndex].value;
4213 function ship_update_states(states) {
4215 // blank the current state list
4216 for ( var i = what.form.ship_state.length; i >= 0; i-- )
4217 what.form.ship_state.options[i] = null;
4219 // add the new states
4220 var statesArray = eval('(' + states + ')' );
4222 for ( var s = 0; s < statesArray.length; s=s+2 ) {
4223 var stateLabel = statesArray[s+1];
4224 if ( stateLabel == "" )
4225 stateLabel = '(n/a)';
4226 opt(what.form.ship_state, statesArray[s], stateLabel);
4229 what.form.ship_state.disabled = '';
4232 if ( callback != null ) {
4235 ship_state_changed(what.form.ship_state);
4239 // go get the new states
4240 ship_get_states( country, ship_update_states );
4247 <SELECT NAME = "ship_country"
4249 onChange = "ship_country_changed(this); "
4283 >American Samoa (AS)
4308 >Antigua and Barbuda (AG)
4393 >Bolivia, Plurinational State of (BO)
4398 >Bonaire, Sint Eustatius and Saba (BQ)
4403 >Bosnia and Herzegovina (BA)
4423 >British Indian Ocean Territory (IO)
4428 >Brunei Darussalam (BN)
4468 >Cayman Islands (KY)
4473 >Central African Republic (CF)
4493 >Christmas Island (CX)
4498 >Cocos (Keeling) Islands (CC)
4518 >Congo (The Democratic Republic of the) (CD)
4558 >Czech Republic (CZ)
4578 >Dominican Republic (DO)
4598 >Equatorial Guinea (GQ)
4618 >Falkland Islands (The) [Malvinas] (FK)
4648 >French Polynesia (PF)
4653 >French Southern Territories (TF)
4743 >Heard Island and McDonald Islands (HM)
4748 >Holy See (The) [Vatican City State] (VA)
4783 >Iran, The Islamic Republic of (IR)
4848 >Korea, The Democratic People's Republic of (KP)
4853 >Korea, The Republic of (KR)
4868 >Lao People's Democratic Republic (LA)
4918 >Macedonia, The former Yugoslav Republic of (MK)
4953 >Marshall Islands (MH)
4983 >Micronesia, The Federated States of (FM)
4988 >Moldova, The Republic of (MD)
5078 >Norfolk Island (NF)
5083 >Northern Mariana Islands (MP)
5108 >Palestine, State of (PS)
5118 >Papua New Guinea (PG)
5173 >Russian Federation (RU)
5183 >Saint Barthelemy (BL)
5188 >Saint Helena, Ascension and Tristan da Cunha (SH)
5193 >Saint Kitts and Nevis (KN)
5203 >Saint Martin (French part) (MF)
5208 >Saint Pierre and Miquelon (PM)
5213 >Saint Vincent and the Grenadines (VC)
5228 >Sao Tome and Principe (ST)
5263 >Sint Maarten (Dutch part) (SX)
5278 >Solomon Islands (SB)
5293 >South Georgia and the South Sandwich Islands (GS)
5323 >Svalbard and Jan Mayen (SJ)
5343 >Syrian Arab Republic (SY)
5348 >Taiwan (Province of China) (TW)
5358 >Tanzania, United Republic of (TZ)
5388 >Trinidad and Tobago (TT)
5408 >Turks and Caicos Islands (TC)
5428 >United Arab Emirates (AE)
5433 >United Kingdom (GB)
5438 >United States Minor Outlying Islands (UM)
5458 >Venezuela, Bolivarian Republic of (VE)
5468 >Virgin Islands (British) (VG)
5473 >Virgin Islands (U.S.) (VI)
5478 >Wallis and Futuna (WF)
5483 >Western Sahara (EH)
5507 <TH ALIGN="right">Latitude</TD>
5509 <INPUT TYPE = "text"
5510 NAME = "ship_latitude"
5511 ID = "ship_latitude"
5512 VALUE = "38.5000000"
5516 <FONT SIZE="-1" COLOR="#666666">Longitude</FONT>
5517 <INPUT TYPE = "text"
5518 NAME = "ship_longitude"
5519 ID = "ship_longitude"
5520 VALUE = "-121.5000000"
5526 <INPUT TYPE = "hidden"
5527 NAME = "ship_coord_auto"
5528 ID = "ship_coord_auto"
5533 <INPUT TYPE = "hidden"
5534 NAME = "ship_geocode"
5540 <INPUT TYPE = "hidden"
5541 NAME = "ship_censustract"
5542 ID = "ship_censustract"
5547 <INPUT TYPE = "hidden"
5548 NAME = "ship_censusyear"
5549 ID = "ship_censusyear"
5555 <TH ALIGN="right">Census tract</TD>
5557 <INPUT TYPE="text" SIZE=15
5558 ID="ship_enter_censustract"
5559 NAME="ship_enter_censustract"
5561 <FONT SIZE="-1" COLOR="#333333">(automatic)</FONT>
5564 <INPUT TYPE = "hidden"
5565 NAME = "ship_district"
5566 ID = "ship_district"
5572 <INPUT TYPE = "hidden"
5573 NAME = "old_ship_locationname"
5574 ID = "old_ship_locationname"
5579 <INPUT TYPE = "hidden"
5580 NAME = "old_ship_address1"
5581 ID = "old_ship_address1"
5582 VALUE = "46706 Kadin Hill #780"
5586 <INPUT TYPE = "hidden"
5587 NAME = "old_ship_city"
5588 ID = "old_ship_city"
5593 <INPUT TYPE = "hidden"
5594 NAME = "old_ship_state"
5595 ID = "old_ship_state"
5600 <INPUT TYPE = "hidden"
5601 NAME = "old_ship_country"
5602 ID = "old_ship_country"
5607 <INPUT TYPE = "hidden"
5608 NAME = "old_ship_zip"
5614 <INPUT TYPE = "hidden"
5615 NAME = "old_ship_latitude"
5616 ID = "old_ship_latitude"
5617 VALUE = "38.5000000"
5621 <INPUT TYPE = "hidden"
5622 NAME = "old_ship_longitude"
5623 ID = "old_ship_longitude"
5624 VALUE = "-121.5000000"
5628 <INPUT TYPE = "hidden"
5629 NAME = "old_ship_censustract"
5630 ID = "old_ship_censustract"
5635 <INPUT TYPE = "hidden"
5636 NAME = "old_ship_district"
5637 ID = "old_ship_district"
5642 <INPUT TYPE = "hidden"
5643 NAME = "old_ship_addr_clean"
5644 ID = "old_ship_addr_clean"
5649 <INPUT TYPE = "hidden"
5650 NAME = "ship_cachenum"
5651 ID = "ship_cachenum"
5656 <INPUT TYPE = "hidden"
5657 NAME = "ship_addr_clean"
5658 ID = "ship_addr_clean"
5664 <SCRIPT TYPE="text/javascript">
5666 var myonload = function() {
5668 var clear_coords_ids = [
5671 'ship_enter_censustract',
5675 function clear_coords() {
5676 for (var i=0; i < clear_coords_ids.length; i++) {
5677 var el = document.getElementById(clear_coords_ids[i]);
5683 var clear_coords_on_change = [
5691 for (var i=0; i < clear_coords_on_change.length; i++) {
5692 var el = document.getElementById(clear_coords_on_change[i]);
5693 if ( el.addEventListener ) {
5694 el.addEventListener('change', clear_coords);
5695 } else if ( el.attachEvent ) {
5696 el.attachEvent('onchange', clear_coords);
5699 function clear_censustract() {
5700 // if the user manually edits the census tract, clear the 'hard' census
5701 // tract field so that we can re-verify and present a confirmation popup
5703 // get the ID of the hidden censustract field
5704 var censustract_id = this.id.replace('enter_', '');
5705 var el = document.getElementById(censustract_id);
5710 var el = document.getElementById('ship_enter_censustract');
5712 if ( el.addEventListener ) {
5713 el.addEventListener('change', clear_censustract);
5714 } else if ( el.attachEvent ) {
5715 el.attachEvent('onchange', clear_censustract);
5721 if ( window.addEventListener ) {
5722 window.addEventListener('load', myonload);
5723 } else if ( window.attachEvent ) {
5724 window.attachEvent('onload', myonload);
5733 <INPUT TYPE = "checkbox"
5734 NAME = "invoice_ship_address"
5740 >Include service address on invoices
5749 <SCRIPT TYPE="text/javascript">
5751 function samechanged(what) {
5752 if ( what.checked ) {
5753 $('#div_ship_location').slideUp();
5755 $('#div_ship_location').slideDown();
5759 $('#div_ship_location').hide();
5763 <DIV ID="contacts_div" STYLE="display:">
5765 <FONT CLASS="fsinnerbox-title">Contacts</FONT>
5767 <TABLE ID="TableNumber0"
5776 STYLE = "padding-top: 3px"
5777 ID = "contactnum_label0"
5783 <INPUT TYPE="hidden" NAME="contactnum0" ID="contactnum0" VALUE="">
5785 <TABLE STYLE="display:inline">
5788 <SELECT NAME="contactnum0_classnum" onChange="
5789 spawn_contactnum(this);">
5795 <FONT SIZE="-1">Type</FONT>
5799 <INPUT TYPE = "text"
5800 NAME = "contactnum0_first"
5801 ID = "contactnum0_first"
5805 spawn_contactnum(this);"
5808 <FONT SIZE="-1">First name</FONT>
5812 <INPUT TYPE = "text"
5813 NAME = "contactnum0_last"
5814 ID = "contactnum0_last"
5818 spawn_contactnum(this);"
5821 <FONT SIZE="-1">Last name</FONT>
5825 <INPUT TYPE = "text"
5826 NAME = "contactnum0_title"
5827 ID = "contactnum0_title"
5831 spawn_contactnum(this);"
5834 <FONT SIZE="-1">Title/Position</FONT>
5838 <INPUT TYPE = "text"
5839 NAME = "contactnum0_emailaddress"
5840 ID = "contactnum0_emailaddress"
5844 spawn_contactnum(this);"
5847 <FONT SIZE="-1">Email</FONT>
5851 <SELECT NAME = "contactnum0_selfservice_access"
5852 ID = "contactnum0_selfservice_access"
5854 <OPTION VALUE="">Disabled
5858 <FONT SIZE="-1">Self-service</FONT>
5862 <INPUT TYPE = "text"
5863 NAME = "contactnum0_phonetypenum1"
5864 ID = "contactnum0_phonetypenum1"
5868 spawn_contactnum(this);"
5871 <FONT SIZE="-1">Work phone</FONT>
5875 <INPUT TYPE = "text"
5876 NAME = "contactnum0_phonetypenum3"
5877 ID = "contactnum0_phonetypenum3"
5881 spawn_contactnum(this);"
5884 <FONT SIZE="-1">Mobile phone</FONT>
5888 <INPUT TYPE = "text"
5889 NAME = "contactnum0_phonetypenum4"
5890 ID = "contactnum0_phonetypenum4"
5894 spawn_contactnum(this);"
5897 <FONT SIZE="-1">Fax phone</FONT>
5901 <INPUT TYPE = "text"
5902 NAME = "contactnum0_comment"
5903 ID = "contactnum0_comment"
5907 spawn_contactnum(this);"
5910 <FONT SIZE="-1">Comment</FONT>
5922 <SCRIPT TYPE="text/javascript">
5924 var contactnum_rownum = 1;
5925 var contactnum_fieldnum = 0;
5927 function spawn_contactnum(what) {
5929 // only spawn if we're the last element... return if not
5931 var field_regex = /(\d+)(_[a-z_]+)?$/;
5932 var match = field_regex.exec(what.name);
5934 alert(what.name + " didn't match for " + what);
5937 if ( match[1] != contactnum_fieldnum ) {
5941 // change the label on the last entry & add a remove button
5942 var prev_label = document.getElementById('contactnum_label' + contactnum_fieldnum );
5943 prev_label.innerHTML = '<INPUT TYPE="button" VALUE="X" TITLE="Remove this " onClick="remove_contactnum(' + contactnum_fieldnum + ');" STYLE="color:#ff0000;font-weight:bold;padding-left:2px;padding-right:2px" > ';
5945 contactnum_fieldnum++;
5947 //get the new widget
5950 var newrow = '\n <INPUT TYPE="hidden" NAME="contactnumMAGIC_NUMBER" ID="contactnumMAGIC_NUMBER" VALUE="">\n\n <TABLE STYLE="display:inline">\n <TR>\n <TD>\n <SELECT NAME="contactnumMAGIC_NUMBER_classnum" onChange="\nspawn_contactnum(this);">\n <OPTION VALUE="">\n <OPTION VALUE="1"\n \n >Service\n </SELECT><BR>\n <FONT SIZE="-1">Type</FONT>\n </TD>\n\n <TD>\n <INPUT TYPE = "text"\n NAME = "contactnumMAGIC_NUMBER_first"\n ID = "contactnumMAGIC_NUMBER_first"\n SIZE = "14"\n VALUE = ""\n onChange="\nspawn_contactnum(this);"\n >\n <BR>\n <FONT SIZE="-1">First name</FONT>\n </TD>\n\n <TD>\n <INPUT TYPE = "text"\n NAME = "contactnumMAGIC_NUMBER_last"\n ID = "contactnumMAGIC_NUMBER_last"\n SIZE = "14"\n VALUE = ""\n onChange="\nspawn_contactnum(this);"\n >\n <BR>\n <FONT SIZE="-1">Last name</FONT>\n </TD>\n\n <TD>\n <INPUT TYPE = "text"\n NAME = "contactnumMAGIC_NUMBER_title"\n ID = "contactnumMAGIC_NUMBER_title"\n SIZE = "12"\n VALUE = ""\n onChange="\nspawn_contactnum(this);"\n >\n <BR>\n <FONT SIZE="-1">Title/Position</FONT>\n </TD>\n\n <TD>\n <INPUT TYPE = "text"\n NAME = "contactnumMAGIC_NUMBER_emailaddress"\n ID = "contactnumMAGIC_NUMBER_emailaddress"\n SIZE = "14"\n VALUE = ""\n onChange="\nspawn_contactnum(this);"\n >\n <BR>\n <FONT SIZE="-1">Email</FONT>\n </TD>\n\n <TD>\n <SELECT NAME = "contactnumMAGIC_NUMBER_selfservice_access"\n ID = "contactnumMAGIC_NUMBER_selfservice_access"\n >\n <OPTION VALUE="">Disabled\n </SELECT>\n\n <BR>\n <FONT SIZE="-1">Self-service</FONT>\n </TD>\n\n <TD>\n <INPUT TYPE = "text"\n NAME = "contactnumMAGIC_NUMBER_phonetypenum1"\n ID = "contactnumMAGIC_NUMBER_phonetypenum1"\n SIZE = "15"\n VALUE = ""\n onChange="\nspawn_contactnum(this);"\n >\n <BR>\n <FONT SIZE="-1">Work phone</FONT>\n </TD>\n\n <TD>\n <INPUT TYPE = "text"\n NAME = "contactnumMAGIC_NUMBER_phonetypenum3"\n ID = "contactnumMAGIC_NUMBER_phonetypenum3"\n SIZE = "10"\n VALUE = ""\n onChange="\nspawn_contactnum(this);"\n >\n <BR>\n <FONT SIZE="-1">Mobile phone</FONT>\n </TD>\n\n <TD>\n <INPUT TYPE = "text"\n NAME = "contactnumMAGIC_NUMBER_phonetypenum4"\n ID = "contactnumMAGIC_NUMBER_phonetypenum4"\n SIZE = "10"\n VALUE = ""\n onChange="\nspawn_contactnum(this);"\n >\n <BR>\n <FONT SIZE="-1">Fax phone</FONT>\n </TD>\n\n <TD>\n <INPUT TYPE = "text"\n NAME = "contactnumMAGIC_NUMBER_comment"\n ID = "contactnumMAGIC_NUMBER_comment"\n SIZE = "14"\n VALUE = ""\n onChange="\nspawn_contactnum(this);"\n >\n <BR>\n <FONT SIZE="-1">Comment</FONT>\n </TD>\n </TR>\n </TABLE>\n\n';
5954 // substitute in the new field name
5955 var magic_regex = /MAGIC_NUMBER/g;
5956 newrow = newrow.replace( magic_regex, contactnum_fieldnum );
5957 newfunc = newfunc.replace( magic_regex, contactnum_fieldnum );
5959 // evaluate new_func
5960 if (window.ActiveXObject) {
5961 window.execScript(newfunc);
5962 } else { /* (window.XMLHttpRequest) */
5963 //window.eval(newfunc);
5964 setTimeout(newfunc, 0);
5969 //hmm, can't use selectlayers after a tablebreak-title for now
5970 var table = document.getElementById('TableNumber0');
5972 var row = table.insertRow(contactnum_rownum++);
5974 var label_cell = document.createElement('TD');
5976 label_cell.id = 'contactnum_label' + contactnum_fieldnum;
5978 label_cell.style.textAlign = "right";
5979 label_cell.style.verticalAlign = "top";
5980 label_cell.style.borderTop = "1px solid black";
5981 label_cell.style.paddingTop = "5px";
5983 label_cell.innerHTML = '';
5985 row.appendChild(label_cell);
5987 var widget_cell = document.createElement('TD');
5989 widget_cell.style.borderTop = "1px solid black";
5990 widget_cell.style.paddingTop = "3px";
5991 widget_cell.colSpan = "6";
5993 widget_cell.innerHTML = newrow;
5995 row.appendChild(widget_cell);
6001 function remove_contactnum(remove_fieldnum) {
6002 //alert("remove contactnum " + remove_fieldnum);
6003 var select = document.getElementById('contactnum' + remove_fieldnum);
6006 alert("can't find element contactnum" + remove_fieldnum);
6011 select.disabled = 'disabled'; // this seems to prevent it from being submitted on tested browsers so far (IE, moz, konq at least)
6012 var label_td = document.getElementById('contactnum_label' + remove_fieldnum );
6013 label_td.parentNode.style.display = 'none';
6035 function tax_changed(what) {
6036 var num = document.getElementById(what.id + '_num');
6037 if ( what.checked ) {
6038 num.disabled = false;
6040 num.disabled = true;
6046 <BR><FONT CLASS="fsinnerbox-title">Billing information</FONT>
6048 <TABLE CLASS="fsinnerbox">
6054 <TD COLSPAN="2"><INPUT TYPE="checkbox" NAME="complimentary" VALUE="Y" >Complimentary customer
6061 <TD COLSPAN="2"><INPUT TYPE="checkbox" NAME="tax" VALUE="Y" > Tax Exempt</TD>
6069 <TD COLSPAN="2"><INPUT TYPE="checkbox" NAME="invoicing_list_POST" VALUE="POST" > Postal mail invoices
6077 <TD COLSPAN="2"><INPUT TYPE="checkbox" NAME="invoice_email" VALUE="Y" CHECKED> Email invoices
6083 <TH ALIGN="right" WIDTH="200">
6086 <TD WIDTH="408"><INPUT TYPE="text" NAME="invoicing_list" VALUE="">
6087 <INPUT TYPE="checkbox" NAME="message_noemail" VALUE="Y" > <FONT SIZE="-1">Do not send notices</FONT>
6092 <INPUT TYPE="hidden" NAME="prorate_day" VALUE="">
6096 <TH ALIGN="right" WIDTH="200">Charge card/e-check on this day of the month </TD>
6098 <SELECT NAME="billday">
6099 <OPTION VALUE='1' >1</OPTION><OPTION VALUE='2' >2</OPTION><OPTION VALUE='3' >3</OPTION><OPTION VALUE='4' >4</OPTION><OPTION VALUE='5' >5</OPTION><OPTION VALUE='6' >6</OPTION><OPTION VALUE='7' >7</OPTION><OPTION VALUE='8' >8</OPTION><OPTION VALUE='9' >9</OPTION><OPTION VALUE='10' >10</OPTION><OPTION VALUE='11' >11</OPTION><OPTION VALUE='12' >12</OPTION><OPTION VALUE='13' >13</OPTION><OPTION VALUE='14' >14</OPTION><OPTION VALUE='15' >15</OPTION><OPTION VALUE='16' >16</OPTION><OPTION VALUE='17' >17</OPTION><OPTION VALUE='18' >18</OPTION><OPTION VALUE='19' >19</OPTION><OPTION VALUE='20' >20</OPTION><OPTION VALUE='21' >21</OPTION><OPTION VALUE='22' >22</OPTION><OPTION VALUE='23' >23</OPTION><OPTION VALUE='24' >24</OPTION><OPTION VALUE='25' >25</OPTION><OPTION VALUE='26' >26</OPTION><OPTION VALUE='27' >27</OPTION><OPTION VALUE='28' >28</OPTION>
6107 <TH ALIGN="right" WIDTH="200">Invoice terms </TD>
6109 <SELECT NAME = "invoice_terms"
6110 ID = "invoice_terms"
6113 # #false laziness w/select-table.html
6115 <OPTION VALUE="">Default (Payable upon receipt)
6116 <OPTION VALUE="Payable upon receipt" >Payable upon receipt
6117 <OPTION VALUE="Net 0" >Net 0
6118 <OPTION VALUE="Net 3" >Net 3
6119 <OPTION VALUE="Net 5" >Net 5
6120 <OPTION VALUE="Net 9" >Net 9
6121 <OPTION VALUE="Net 10" >Net 10
6122 <OPTION VALUE="Net 14" >Net 14
6123 <OPTION VALUE="Net 15" >Net 15
6124 <OPTION VALUE="Net 18" >Net 18
6125 <OPTION VALUE="Net 20" >Net 20
6126 <OPTION VALUE="Net 21" >Net 21
6127 <OPTION VALUE="Net 25" >Net 25
6128 <OPTION VALUE="Net 30" >Net 30
6129 <OPTION VALUE="Net 45" >Net 45
6130 <OPTION VALUE="Net 60" >Net 60
6131 <OPTION VALUE="Net 90" >Net 90
6139 <TH ALIGN="right" WIDTH="200">Credit limit </TD>
6141 <SCRIPT TYPE="text/javascript">
6142 function toggle(obj) {
6143 obj.form.credit_limit.disabled = obj.checked;
6146 <INPUT TYPE = "text"
6147 NAME = "credit_limit"
6151 <INPUT TYPE = "checkbox"
6152 NAME = "no_credit_limit"
6154 onClick="toggle(this)"
6156 > <FONT SIZE="-1" COLOR="#333333">
6163 <INPUT TYPE="hidden" NAME="spool_cdr" VALUE="">
6165 <INPUT TYPE="hidden" NAME="squelch_cdr" VALUE="">
6167 <INPUT TYPE="hidden" NAME="email_csv_cdr" VALUE="">
6169 <INPUT TYPE="hidden" NAME="accountcode_cdr" VALUE="">
6171 <INPUT TYPE="hidden" NAME="cdr_termination_percentage" VALUE="">
6180 <FONT CLASS="fsinnerbox-title">Payment information</FONT>
6182 <TABLE ID="TableNumber1"
6191 STYLE = "padding-top: 3px"
6192 ID = "custpaybynum_label0"
6193 ><INPUT TYPE="button" VALUE="X" TITLE="Remove this " onClick="remove_custpaybynum(0);" STYLE="color:#ff0000;font-weight:bold;padding-left:2px;padding-right:2px"> </TD>
6198 <INPUT TYPE="hidden" NAME="custpaybynum0" ID="custpaybynum0" VALUE="134">
6200 <TABLE STYLE="display:inline">
6205 <SELECT NAME="custpaybynum0_payby"
6206 onChange="custpaybynum0_payby_changed(this)"
6208 <OPTION VALUE="CARD"
6211 <OPTION VALUE="CHEK"
6215 <FONT SIZE="-1">Type</FONT>
6220 <TD ID="custpaybynum0_td_payinfo" >
6221 <INPUT TYPE = "text"
6222 NAME = "custpaybynum0_payinfo"
6223 ID = "custpaybynum0_payinfo"
6226 VALUE = "412325xxxxxx4150"
6229 <BR><FONT SIZE="-1">Card number</FONT>
6232 <TD ID="custpaybynum0_td_paydate" >
6233 <SELECT NAME="custpaybynum0_paydate_month" SIZE="1" >
6237 <OPTION VALUE="1">01
6239 <OPTION VALUE="2">02
6241 <OPTION VALUE="3">03
6243 <OPTION VALUE="4">04
6245 <OPTION SELECTED VALUE="5">05
6247 <OPTION VALUE="6">06
6249 <OPTION VALUE="7">07
6251 <OPTION VALUE="8">08
6253 <OPTION VALUE="9">09
6255 <OPTION VALUE="10">10
6257 <OPTION VALUE="11">11
6259 <OPTION VALUE="12">12
6262 </SELECT>/<SELECT NAME="custpaybynum0_paydate_year" SIZE="1" >
6266 <OPTION VALUE="2016">2016
6268 <OPTION VALUE="2017">2017
6270 <OPTION VALUE="2018">2018
6272 <OPTION VALUE="2019">2019
6274 <OPTION SELECTED VALUE="2020">2020
6276 <OPTION VALUE="2021">2021
6278 <OPTION VALUE="2022">2022
6280 <OPTION VALUE="2023">2023
6282 <OPTION VALUE="2024">2024
6284 <OPTION VALUE="2025">2025
6286 <OPTION VALUE="2026">2026
6288 <OPTION VALUE="2027">2027
6290 <OPTION VALUE="2028">2028
6292 <OPTION VALUE="2029">2029
6294 <OPTION VALUE="2030">2030
6296 <OPTION VALUE="2031">2031
6298 <OPTION VALUE="2032">2032
6300 <OPTION VALUE="2033">2033
6302 <OPTION VALUE="2034">2034
6304 <OPTION VALUE="2035">2035
6306 <OPTION VALUE="2036">2036
6308 <OPTION VALUE="2037">2037
6313 <BR><FONT SIZE="-1">Expiration date</FONT>
6316 <TD ID="custpaybynum0_td_paycvv" >
6317 <INPUT TYPE = "text"
6318 NAME = "custpaybynum0_paycvv"
6319 ID = "custpaybynum0_paycvv"
6325 <BR><FONT SIZE="-1">CVV2 (<A HREF="javascript:void(0);" onClick="overlib( OLiframeContent('http://localhost/freeside/docs/cvv2.html', 480, 275, 'cvv2_popup' ), CAPTION, 'CVV2 Help', STICKY, AUTOSTATUSCAP, CLOSECLICK, DRAGGABLE ); return false;">help</A>)</FONT>
6328 <TD ID="custpaybynum0_td_payname" >
6329 <INPUT TYPE = "text"
6330 NAME = "custpaybynum0_payname"
6331 ID = "custpaybynum0_payname"
6333 VALUE = "Samara Towne"
6335 <BR><FONT SIZE="-1">Exact name on card</FONT>
6340 <TD ID="custpaybynum0_td_paytype" STYLE="display:none">
6341 <SELECT NAME="custpaybynum0_paytype">!.
6345 <OPTION VALUE="Personal checking"
6348 <OPTION VALUE="Personal savings"
6351 <OPTION VALUE="Business checking"
6354 <OPTION VALUE="Business savings"
6358 <BR><FONT SIZE="-1">Account type</FONT>
6362 <TD ID="custpaybynum0_td_payinfo1" STYLE="display:none">
6363 <INPUT TYPE = "text"
6364 NAME = "custpaybynum0_payinfo1"
6365 ID = "custpaybynum0_payinfo1"
6369 <BR><FONT SIZE="-1">Account # (<A HREF="javascript:void(0);" onClick="overlib( OLiframeContent('http://localhost/freeside/docs/ach.html', 380, 220, 'ach_popup' ), CAPTION, 'ACH Help', STICKY, AUTOSTATUSCAP, CLOSECLICK, DRAGGABLE ); return false;">help</A>)</FONT>
6372 <TD ID="custpaybynum0_td_payinfo2" STYLE="display:none">
6373 <INPUT TYPE = "text"
6374 NAME = "custpaybynum0_payinfo2"
6375 ID = "custpaybynum0_payinfo2"
6380 <BR><FONT SIZE="-1">ABA/Routing #</FONT>
6384 <TD ID="custpaybynum0_td_payname_CHEK" STYLE="display:none">
6385 <INPUT TYPE = "text"
6386 NAME = "custpaybynum0_payname_CHEK"
6387 ID = "custpaybynum0_payname_CHEK"
6391 <BR><FONT SIZE="-1">Bank name</FONT>
6398 <SELECT NAME = "custpaybynum0_weight">
6399 <OPTION VALUE="">Do not auto-charge
6417 <FONT SIZE="-1">Auto-charge</FONT>
6423 <SCRIPT TYPE="text/javascript">
6425 function custpaybynum0_payby_changed(what) {
6426 var payby = what.options[what.selectedIndex].value;
6427 if ( payby == 'CARD' ) {
6428 document.getElementById('custpaybynum0_td_payinfo').style.display = '';
6429 document.getElementById('custpaybynum0_td_paydate').style.display = '';
6430 document.getElementById('custpaybynum0_td_paycvv').style.display = '';
6431 document.getElementById('custpaybynum0_td_payname').style.display = '';
6432 document.getElementById('custpaybynum0_td_payinfo1').style.display = 'none';
6433 document.getElementById('custpaybynum0_td_payinfo2').style.display = 'none';
6434 document.getElementById('custpaybynum0_td_paytype').style.display = 'none';
6435 document.getElementById('custpaybynum0_td_payname_CHEK').style.display = 'none';
6436 var td_payinfo3 = document.getElementById('custpaybynum0_td_payinfo3');
6437 if ( td_payinfo3 ) {
6438 td_payinfo3.style.display = 'none';
6440 var td_paystate = document.getElementById('custpaybynum0_td_paystate');
6441 if ( td_paystate ) {
6442 td_paystate.style.display = 'none';
6444 } else if ( payby == 'CHEK' ) {
6445 document.getElementById('custpaybynum0_td_payinfo').style.display = 'none';
6446 document.getElementById('custpaybynum0_td_paydate').style.display = 'none';
6447 document.getElementById('custpaybynum0_td_paycvv').style.display = 'none';
6448 document.getElementById('custpaybynum0_td_payname').style.display = 'none';
6449 document.getElementById('custpaybynum0_td_payinfo1').style.display = '';
6450 document.getElementById('custpaybynum0_td_payinfo2').style.display = '';
6451 document.getElementById('custpaybynum0_td_paytype').style.display = '';
6452 document.getElementById('custpaybynum0_td_payname_CHEK').style.display = '';
6453 var td_payinfo3 = document.getElementById('custpaybynum0_td_payinfo3');
6454 if ( td_payinfo3 ) {
6455 td_payinfo3.style.display = '';
6457 var td_paystate = document.getElementById('custpaybynum0_td_paystate');
6458 if ( td_paystate ) {
6459 td_paystate.style.display = '';
6462 alert( 'unknown payby ' + payby );
6478 STYLE = "padding-top: 3px; border-top:1px solid black"
6479 ID = "custpaybynum_label1"
6485 <INPUT TYPE="hidden" NAME="custpaybynum1" ID="custpaybynum1" VALUE="">
6487 <TABLE STYLE="display:inline">
6492 <SELECT NAME="custpaybynum1_payby"
6493 onChange="custpaybynum1_payby_changed(this)"
6495 <OPTION VALUE="CARD"
6498 <OPTION VALUE="CHEK"
6502 <FONT SIZE="-1">Type</FONT>
6507 <TD ID="custpaybynum1_td_payinfo" >
6508 <INPUT TYPE = "text"
6509 NAME = "custpaybynum1_payinfo"
6510 ID = "custpaybynum1_payinfo"
6515 spawn_custpaybynum(this);"
6517 <BR><FONT SIZE="-1">Card number</FONT>
6520 <TD ID="custpaybynum1_td_paydate" >
6521 <SELECT NAME="custpaybynum1_paydate_month" SIZE="1" >
6525 <OPTION VALUE="1">01
6527 <OPTION VALUE="2">02
6529 <OPTION VALUE="3">03
6531 <OPTION VALUE="4">04
6533 <OPTION VALUE="5">05
6535 <OPTION VALUE="6">06
6537 <OPTION VALUE="7">07
6539 <OPTION VALUE="8">08
6541 <OPTION VALUE="9">09
6543 <OPTION VALUE="10">10
6545 <OPTION VALUE="11">11
6547 <OPTION VALUE="12">12
6550 </SELECT>/<SELECT NAME="custpaybynum1_paydate_year" SIZE="1" >
6554 <OPTION VALUE="2016">2016
6556 <OPTION VALUE="2017">2017
6558 <OPTION VALUE="2018">2018
6560 <OPTION VALUE="2019">2019
6562 <OPTION VALUE="2020">2020
6564 <OPTION VALUE="2021">2021
6566 <OPTION VALUE="2022">2022
6568 <OPTION VALUE="2023">2023
6570 <OPTION VALUE="2024">2024
6572 <OPTION VALUE="2025">2025
6574 <OPTION VALUE="2026">2026
6576 <OPTION VALUE="2027">2027
6578 <OPTION VALUE="2028">2028
6580 <OPTION VALUE="2029">2029
6582 <OPTION VALUE="2030">2030
6584 <OPTION VALUE="2031">2031
6586 <OPTION VALUE="2032">2032
6588 <OPTION VALUE="2033">2033
6590 <OPTION VALUE="2034">2034
6592 <OPTION VALUE="2035">2035
6594 <OPTION VALUE="2036">2036
6596 <OPTION VALUE="2037">2037
6601 <BR><FONT SIZE="-1">Expiration date</FONT>
6604 <TD ID="custpaybynum1_td_paycvv" >
6605 <INPUT TYPE = "text"
6606 NAME = "custpaybynum1_paycvv"
6607 ID = "custpaybynum1_paycvv"
6612 spawn_custpaybynum(this);"
6614 <BR><FONT SIZE="-1">CVV2 (<A HREF="javascript:void(0);" onClick="overlib( OLiframeContent('http://localhost/freeside/docs/cvv2.html', 480, 275, 'cvv2_popup' ), CAPTION, 'CVV2 Help', STICKY, AUTOSTATUSCAP, CLOSECLICK, DRAGGABLE ); return false;">help</A>)</FONT>
6617 <TD ID="custpaybynum1_td_payname" >
6618 <INPUT TYPE = "text"
6619 NAME = "custpaybynum1_payname"
6620 ID = "custpaybynum1_payname"
6622 spawn_custpaybynum(this);"
6625 <BR><FONT SIZE="-1">Exact name on card</FONT>
6630 <TD ID="custpaybynum1_td_paytype" STYLE="display:none">
6631 <SELECT NAME="custpaybynum1_paytype">!.
6635 <OPTION VALUE="Personal checking"
6638 <OPTION VALUE="Personal savings"
6641 <OPTION VALUE="Business checking"
6644 <OPTION VALUE="Business savings"
6648 <BR><FONT SIZE="-1">Account type</FONT>
6652 <TD ID="custpaybynum1_td_payinfo1" STYLE="display:none">
6653 <INPUT TYPE = "text"
6654 NAME = "custpaybynum1_payinfo1"
6655 ID = "custpaybynum1_payinfo1"
6659 <BR><FONT SIZE="-1">Account # (<A HREF="javascript:void(0);" onClick="overlib( OLiframeContent('http://localhost/freeside/docs/ach.html', 380, 220, 'ach_popup' ), CAPTION, 'ACH Help', STICKY, AUTOSTATUSCAP, CLOSECLICK, DRAGGABLE ); return false;">help</A>)</FONT>
6662 <TD ID="custpaybynum1_td_payinfo2" STYLE="display:none">
6663 <INPUT TYPE = "text"
6664 NAME = "custpaybynum1_payinfo2"
6665 ID = "custpaybynum1_payinfo2"
6670 <BR><FONT SIZE="-1">ABA/Routing #</FONT>
6674 <TD ID="custpaybynum1_td_payname_CHEK" STYLE="display:none">
6675 <INPUT TYPE = "text"
6676 NAME = "custpaybynum1_payname_CHEK"
6677 ID = "custpaybynum1_payname_CHEK"
6681 <BR><FONT SIZE="-1">Bank name</FONT>
6688 <SELECT NAME = "custpaybynum1_weight">
6689 <OPTION VALUE="">Do not auto-charge
6707 <FONT SIZE="-1">Auto-charge</FONT>
6713 <SCRIPT TYPE="text/javascript">
6715 function custpaybynum1_payby_changed(what) {
6716 var payby = what.options[what.selectedIndex].value;
6717 if ( payby == 'CARD' ) {
6718 document.getElementById('custpaybynum1_td_payinfo').style.display = '';
6719 document.getElementById('custpaybynum1_td_paydate').style.display = '';
6720 document.getElementById('custpaybynum1_td_paycvv').style.display = '';
6721 document.getElementById('custpaybynum1_td_payname').style.display = '';
6722 document.getElementById('custpaybynum1_td_payinfo1').style.display = 'none';
6723 document.getElementById('custpaybynum1_td_payinfo2').style.display = 'none';
6724 document.getElementById('custpaybynum1_td_paytype').style.display = 'none';
6725 document.getElementById('custpaybynum1_td_payname_CHEK').style.display = 'none';
6726 var td_payinfo3 = document.getElementById('custpaybynum1_td_payinfo3');
6727 if ( td_payinfo3 ) {
6728 td_payinfo3.style.display = 'none';
6730 var td_paystate = document.getElementById('custpaybynum1_td_paystate');
6731 if ( td_paystate ) {
6732 td_paystate.style.display = 'none';
6734 } else if ( payby == 'CHEK' ) {
6735 document.getElementById('custpaybynum1_td_payinfo').style.display = 'none';
6736 document.getElementById('custpaybynum1_td_paydate').style.display = 'none';
6737 document.getElementById('custpaybynum1_td_paycvv').style.display = 'none';
6738 document.getElementById('custpaybynum1_td_payname').style.display = 'none';
6739 document.getElementById('custpaybynum1_td_payinfo1').style.display = '';
6740 document.getElementById('custpaybynum1_td_payinfo2').style.display = '';
6741 document.getElementById('custpaybynum1_td_paytype').style.display = '';
6742 document.getElementById('custpaybynum1_td_payname_CHEK').style.display = '';
6743 var td_payinfo3 = document.getElementById('custpaybynum1_td_payinfo3');
6744 if ( td_payinfo3 ) {
6745 td_payinfo3.style.display = '';
6747 var td_paystate = document.getElementById('custpaybynum1_td_paystate');
6748 if ( td_paystate ) {
6749 td_paystate.style.display = '';
6752 alert( 'unknown payby ' + payby );
6764 <SCRIPT TYPE="text/javascript">
6766 var custpaybynum_rownum = 2;
6767 var custpaybynum_fieldnum = 1;
6769 function spawn_custpaybynum(what) {
6771 // only spawn if we're the last element... return if not
6773 var field_regex = /(\d+)(_[a-z_]+)?$/;
6774 var match = field_regex.exec(what.name);
6776 alert(what.name + " didn't match for " + what);
6779 if ( match[1] != custpaybynum_fieldnum ) {
6783 // change the label on the last entry & add a remove button
6784 var prev_label = document.getElementById('custpaybynum_label' + custpaybynum_fieldnum );
6785 prev_label.innerHTML = '<INPUT TYPE="button" VALUE="X" TITLE="Remove this " onClick="remove_custpaybynum(' + custpaybynum_fieldnum + ');" STYLE="color:#ff0000;font-weight:bold;padding-left:2px;padding-right:2px" > ';
6787 custpaybynum_fieldnum++;
6789 //get the new widget
6792 var newrow = '\n <INPUT TYPE="hidden" NAME="custpaybynumMAGIC_NUMBER" ID="custpaybynumMAGIC_NUMBER" VALUE="">\n\n <TABLE STYLE="display:inline">\n <TR>\n\n\n <TD>\n <SELECT NAME="custpaybynumMAGIC_NUMBER_payby"\n onChange="custpaybynumMAGIC_NUMBER_payby_changed(this)"\n >\n <OPTION VALUE="CARD"\n SELECTED\n >Credit card\n <OPTION VALUE="CHEK"\n \n >Electronic check\n </SELECT><BR>\n <FONT SIZE="-1">Type</FONT>\n </TD>\n\n\n\n <TD ID="custpaybynumMAGIC_NUMBER_td_payinfo" >\n <INPUT TYPE = "text"\n NAME = "custpaybynumMAGIC_NUMBER_payinfo"\n ID = "custpaybynumMAGIC_NUMBER_payinfo"\n SIZE = 22\n MAXLENGTH = 19\n VALUE = ""\n onChange = "\nspawn_custpaybynum(this);"\n >\n <BR><FONT SIZE="-1">Card number</FONT>\n </TD>\n\n <TD ID="custpaybynumMAGIC_NUMBER_td_paydate" >\n <SELECT NAME="custpaybynumMAGIC_NUMBER_paydate_month" SIZE="1" >\n\n\n\n <OPTION VALUE="1">01\n\n <OPTION VALUE="2">02\n\n <OPTION VALUE="3">03\n\n <OPTION VALUE="4">04\n\n <OPTION VALUE="5">05\n\n <OPTION VALUE="6">06\n\n <OPTION VALUE="7">07\n\n <OPTION VALUE="8">08\n\n <OPTION VALUE="9">09\n\n <OPTION VALUE="10">10\n\n <OPTION VALUE="11">11\n\n <OPTION VALUE="12">12\n\n\n</SELECT>/<SELECT NAME="custpaybynumMAGIC_NUMBER_paydate_year" SIZE="1" >\n\n\n\n <OPTION VALUE="2016">2016\n\n <OPTION VALUE="2017">2017\n\n <OPTION VALUE="2018">2018\n\n <OPTION VALUE="2019">2019\n\n <OPTION VALUE="2020">2020\n\n <OPTION VALUE="2021">2021\n\n <OPTION VALUE="2022">2022\n\n <OPTION VALUE="2023">2023\n\n <OPTION VALUE="2024">2024\n\n <OPTION VALUE="2025">2025\n\n <OPTION VALUE="2026">2026\n\n <OPTION VALUE="2027">2027\n\n <OPTION VALUE="2028">2028\n\n <OPTION VALUE="2029">2029\n\n <OPTION VALUE="2030">2030\n\n <OPTION VALUE="2031">2031\n\n <OPTION VALUE="2032">2032\n\n <OPTION VALUE="2033">2033\n\n <OPTION VALUE="2034">2034\n\n <OPTION VALUE="2035">2035\n\n <OPTION VALUE="2036">2036\n\n <OPTION VALUE="2037">2037\n\n</SELECT>\n\n\n <BR><FONT SIZE="-1">Expiration date</FONT>\n </TD>\n\n <TD ID="custpaybynumMAGIC_NUMBER_td_paycvv" >\n <INPUT TYPE = "text"\n NAME = "custpaybynumMAGIC_NUMBER_paycvv"\n ID = "custpaybynumMAGIC_NUMBER_paycvv"\n SIZE = 2\n MAXLENGTH = 4\n VALUE = ""\n onChange = "\nspawn_custpaybynum(this);"\n >\n <BR><FONT SIZE="-1">CVV2 (<A HREF="javascript:void(0);" onClick="overlib( OLiframeContent(\'http://localhost/freeside/docs/cvv2.html\', 480, 275, \'cvv2_popup\' ), CAPTION, \'CVV2 Help\', STICKY, AUTOSTATUSCAP, CLOSECLICK, DRAGGABLE ); return false;">help</A>)</FONT>\n </TD>\n\n <TD ID="custpaybynumMAGIC_NUMBER_td_payname" >\n <INPUT TYPE = "text"\n NAME = "custpaybynumMAGIC_NUMBER_payname"\n ID = "custpaybynumMAGIC_NUMBER_payname"\n onChange = "\nspawn_custpaybynum(this);"\n VALUE = ""\n >\n <BR><FONT SIZE="-1">Exact name on card</FONT>\n </TD>\n\n\n\n <TD ID="custpaybynumMAGIC_NUMBER_td_paytype" STYLE="display:none">\n <SELECT NAME="custpaybynumMAGIC_NUMBER_paytype">!.\n <OPTION VALUE=""\n SELECTED\n >\n <OPTION VALUE="Personal checking"\n \n >Personal checking\n <OPTION VALUE="Personal savings"\n \n >Personal savings\n <OPTION VALUE="Business checking"\n \n >Business checking\n <OPTION VALUE="Business savings"\n \n >Business savings\n </SELECT>\n <BR><FONT SIZE="-1">Account type</FONT>\n </TD>\n\n\n <TD ID="custpaybynumMAGIC_NUMBER_td_payinfo1" STYLE="display:none">\n <INPUT TYPE = "text"\n NAME = "custpaybynumMAGIC_NUMBER_payinfo1"\n ID = "custpaybynumMAGIC_NUMBER_payinfo1"\n VALUE = ""\n SIZE = 12\n >\n <BR><FONT SIZE="-1">Account # (<A HREF="javascript:void(0);" onClick="overlib( OLiframeContent(\'http://localhost/freeside/docs/ach.html\', 380, 220, \'ach_popup\' ), CAPTION, \'ACH Help\', STICKY, AUTOSTATUSCAP, CLOSECLICK, DRAGGABLE ); return false;">help</A>)</FONT>\n </TD>\n\n <TD ID="custpaybynumMAGIC_NUMBER_td_payinfo2" STYLE="display:none">\n <INPUT TYPE = "text"\n NAME = "custpaybynumMAGIC_NUMBER_payinfo2"\n ID = "custpaybynumMAGIC_NUMBER_payinfo2"\n VALUE = ""\n SIZE = "10"\n MAXLENGTH = "9"\n >\n <BR><FONT SIZE="-1">ABA/Routing #</FONT>\n </TD>\n\n\n <TD ID="custpaybynumMAGIC_NUMBER_td_payname_CHEK" STYLE="display:none">\n <INPUT TYPE = "text"\n NAME = "custpaybynumMAGIC_NUMBER_payname_CHEK"\n ID = "custpaybynumMAGIC_NUMBER_payname_CHEK"\n VALUE = ""\n SIZE = "20"\n >\n <BR><FONT SIZE="-1">Bank name</FONT>\n </TD>\n\n\n\n\n <TD>\n <SELECT NAME = "custpaybynumMAGIC_NUMBER_weight">\n <OPTION VALUE="">Do not auto-charge\n <OPTION VALUE="1"\n \n >Primary\n <OPTION VALUE="2"\n \n >Secondary\n <OPTION VALUE="3"\n \n >Tertiary\n <OPTION VALUE="4"\n \n >Fourth\n <OPTION VALUE="5"\n \n >Fifth\n </SELECT>\n <BR>\n <FONT SIZE="-1">Auto-charge</FONT>\n </TD>\n\n </TR>\n </TABLE>\n\n';
6796 // substitute in the new field name
6797 var magic_regex = /MAGIC_NUMBER/g;
6798 newrow = newrow.replace( magic_regex, custpaybynum_fieldnum );
6799 newfunc = newfunc.replace( magic_regex, custpaybynum_fieldnum );
6801 // evaluate new_func
6802 if (window.ActiveXObject) {
6803 window.execScript(newfunc);
6804 } else { /* (window.XMLHttpRequest) */
6805 //window.eval(newfunc);
6806 setTimeout(newfunc, 0);
6811 //hmm, can't use selectlayers after a tablebreak-title for now
6812 var table = document.getElementById('TableNumber1');
6814 var row = table.insertRow(custpaybynum_rownum++);
6816 var label_cell = document.createElement('TD');
6818 label_cell.id = 'custpaybynum_label' + custpaybynum_fieldnum;
6820 label_cell.style.textAlign = "right";
6821 label_cell.style.verticalAlign = "top";
6822 label_cell.style.borderTop = "1px solid black";
6823 label_cell.style.paddingTop = "5px";
6825 label_cell.innerHTML = '';
6827 row.appendChild(label_cell);
6829 var widget_cell = document.createElement('TD');
6831 widget_cell.style.borderTop = "1px solid black";
6832 widget_cell.style.paddingTop = "3px";
6833 widget_cell.colSpan = "6";
6835 widget_cell.innerHTML = newrow;
6837 row.appendChild(widget_cell);
6843 function remove_custpaybynum(remove_fieldnum) {
6844 //alert("remove custpaybynum " + remove_fieldnum);
6845 var select = document.getElementById('custpaybynum' + remove_fieldnum);
6848 alert("can't find element custpaybynum" + remove_fieldnum);
6853 select.disabled = 'disabled'; // this seems to prevent it from being submitted on tested browsers so far (IE, moz, konq at least)
6854 var label_td = document.getElementById('custpaybynum_label' + remove_fieldnum );
6855 label_td.parentNode.style.display = 'none';
6879 <INPUT TYPE="hidden" NAME="locationnum" VALUE="">
6881 <INPUT TYPE="hidden" NAME="usernum" VALUE="3">
6887 <SCRIPT TYPE="text/javascript">
6890 function address_standardize() {
6891 // count args; build URL
6892 var url = "http://localhost/freeside/misc/xmlhttp-address_standardize.html";
6893 var a = address_standardize.arguments;
6897 var content = 'sub=address_standardize';
6898 if ( a && typeof a == 'object' && a[0].constructor == Array ) {
6903 len = args.length - 1;
6905 for (var i = 0; i < len; i++)
6906 content = content + "&arg=" + escape(args[i]);
6907 content = content.replace( /[+]/g, '%2B'); // fix unescaped plus signs
6909 if ( 'POST' == 'GET' ) {
6910 url = url + content;
6913 //alert('POST ' + url);
6915 var xmlhttp = rs_init_object();
6916 xmlhttp.open("POST", url, true);
6918 xmlhttp.onreadystatechange = function() {
6919 if (xmlhttp.readyState != 4)
6922 if (xmlhttp.status != 200) {
6923 if ( xmlhttp.status != 0 ) {
6924 //not warning on the 0 errors, they pop up when navagating away
6926 alert(xmlhttp.status + " status connecting to " + url);
6929 var data = xmlhttp.responseText;
6930 //alert('received response: ' + data);
6931 if ( data.indexOf("<b>System error</b>") > -1 ) {
6932 // trim this a little
6933 var end = data.indexOf('<a href="#raw">') - 1;
6934 data = data.substring(0, end);
6937 WIDTH, 480, MIDX, 0, MIDY, 0,
6938 CAPTION, 'Error', STICKY, AUTOSTATUSCAP, DRAGGABLE,
6939 CLOSECLICK, BGCOLOR, '#f00', CGCOLOR, '#f00'
6942 //if ( w = window.open("about:blank") ) {
6943 // w.document.write(data);
6945 // // popup blocking? should use an overlib popup instead
6946 // alert("Error popup disabled; try disabling popup blocking to see");
6949 // invoke the callback
6950 a[a.length-1](data);
6955 if ( 'POST' == 'POST' ) {
6957 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
6958 xmlhttp.send(content);
6962 xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
6967 //rs_debug("x_$func_name url = " + url);
6968 //rs_debug("x_$func_name waiting..");
6975 <INPUT TYPE="hidden" NAME="duplicate_of_custnum" VALUE="">
6978 <SCRIPT TYPE="text/javascript">
6981 function duplicates_form() {
6982 // count args; build URL
6983 var url = "http://localhost/freeside/misc/xmlhttp-cust_main-duplicates.html?";
6984 var a = duplicates_form.arguments;
6988 var content = 'sub=duplicates_form';
6989 if ( a && typeof a == 'object' && a[0].constructor == Array ) {
6994 len = args.length - 1;
6996 for (var i = 0; i < len; i++)
6997 content = content + "&arg=" + escape(args[i]);
6998 content = content.replace( /[+]/g, '%2B'); // fix unescaped plus signs
7000 if ( 'GET' == 'GET' ) {
7001 url = url + content;
7004 //alert('GET ' + url);
7006 var xmlhttp = rs_init_object();
7007 xmlhttp.open("GET", url, true);
7009 xmlhttp.onreadystatechange = function() {
7010 if (xmlhttp.readyState != 4)
7013 if (xmlhttp.status != 200) {
7014 if ( xmlhttp.status != 0 ) {
7015 //not warning on the 0 errors, they pop up when navagating away
7017 alert(xmlhttp.status + " status connecting to " + url);
7020 var data = xmlhttp.responseText;
7021 //alert('received response: ' + data);
7022 if ( data.indexOf("<b>System error</b>") > -1 ) {
7023 // trim this a little
7024 var end = data.indexOf('<a href="#raw">') - 1;
7025 data = data.substring(0, end);
7028 WIDTH, 480, MIDX, 0, MIDY, 0,
7029 CAPTION, 'Error', STICKY, AUTOSTATUSCAP, DRAGGABLE,
7030 CLOSECLICK, BGCOLOR, '#f00', CGCOLOR, '#f00'
7033 //if ( w = window.open("about:blank") ) {
7034 // w.document.write(data);
7036 // // popup blocking? should use an overlib popup instead
7037 // alert("Error popup disabled; try disabling popup blocking to see");
7040 // invoke the callback
7041 a[a.length-1](data);
7046 if ( 'GET' == 'POST' ) {
7048 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
7049 xmlhttp.send(content);
7053 xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
7058 //rs_debug("x_$func_name url = " + url);
7059 //rs_debug("x_$func_name waiting..");
7066 <SCRIPT TYPE="text/javascript">
7067 var fixups = ["standardize_locations","do_submit"];
7069 var running = false;
7072 var myonload = function() {
7077 if ( window.addEventListener ) {
7078 window.addEventListener('load', myonload);
7079 } else if ( window.attachEvent ) {
7080 window.attachEvent('onload', myonload);
7085 function submit_continue() {
7087 window[ fixups[fixup_position++] ].call();
7091 function submit_abort() {
7094 document.CustomerForm.submitButton.disabled = false;
7098 function bottomfixup(what) {
7100 document.CustomerForm.submitButton.disabled = true;
7105 function do_submit() {
7106 document.CustomerForm.submit();
7109 function status_message(text, caption) {
7110 text = '<P STYLE="position:absolute; top:50%; margin-top:-1em; width:100%; text-align:center"><B><FONT SIZE="+1">' + text + '</FONT></B></P>';
7111 caption = caption || 'Please wait...';
7112 overlib(text, WIDTH, 444, HEIGHT, 168, CAPTION, caption, STICKY, AUTOSTATUSCAP, CLOSECLICK, MIDX, 0, MIDY, 0);
7115 function form_address_info() {
7116 var cf = document.CustomerForm;
7118 var returnobj = { billship: 1 };
7119 returnobj['same'] = cf.elements['same'].checked;
7120 returnobj['bill_address1'] = cf.elements['bill_address1'].value;
7121 returnobj['bill_address2'] = cf.elements['bill_address2'].value;
7122 returnobj['bill_state'] = cf.elements['bill_state'].value;
7123 returnobj['bill_zip'] = cf.elements['bill_zip'].value;
7124 returnobj['bill_country'] = cf.elements['bill_country'].value;
7125 returnobj['bill_city'] = cf.elements['bill_city'].value;
7126 returnobj['bill_censustract'] = cf.elements['bill_enter_censustract'].value;
7127 returnobj['ship_address1'] = cf.elements['ship_address1'].value;
7128 returnobj['ship_address2'] = cf.elements['ship_address2'].value;
7129 returnobj['ship_state'] = cf.elements['ship_state'].value;
7130 returnobj['ship_zip'] = cf.elements['ship_zip'].value;
7131 returnobj['ship_country'] = cf.elements['ship_country'].value;
7132 returnobj['ship_city'] = cf.elements['ship_city'].value;
7133 returnobj['ship_censustract'] = cf.elements['ship_enter_censustract'].value;
7138 function standardize_locations() {
7140 var cf = document.CustomerForm;
7141 var address_info = form_address_info();
7143 var changed = false; // have any of the address fields been changed?
7145 // clear coord_auto fields if the user has changed the coordinates
7147 if ( cf.elements['bill_latitude'].value != cf.elements['old_bill_latitude'].value ) {
7148 cf.elements['bill_coord_auto'].value = '';
7152 if ( cf.elements['bill_longitude'].value != cf.elements['old_bill_longitude'].value ) {
7153 cf.elements['bill_coord_auto'].value = '';
7156 // but if the coordinates have been set to null, turn coord_auto on
7158 if ( cf.elements['bill_latitude'].value == '' &&
7159 cf.elements['bill_longitude'].value == '' ) {
7160 cf.elements['bill_coord_auto'].value = 'Y';
7163 // standardize if the old address wasn't clean
7164 if ( cf.elements['bill_addr_clean'].value == '' ) {
7168 if ( cf.elements['ship_latitude'].value != cf.elements['old_ship_latitude'].value ) {
7169 cf.elements['ship_coord_auto'].value = '';
7173 if ( cf.elements['ship_longitude'].value != cf.elements['old_ship_longitude'].value ) {
7174 cf.elements['ship_coord_auto'].value = '';
7177 // but if the coordinates have been set to null, turn coord_auto on
7179 if ( cf.elements['ship_latitude'].value == '' &&
7180 cf.elements['ship_longitude'].value == '' ) {
7181 cf.elements['ship_coord_auto'].value = 'Y';
7184 // standardize if the old address wasn't clean
7185 if ( cf.elements['ship_addr_clean'].value == '' ) {
7189 // or if it was clean but has been changed
7190 for (var key in address_info) {
7191 var old_el = cf.elements['old_'+key];
7192 if ( old_el && address_info[key] != old_el.value ) {
7199 if ( !changed && 1 ) {
7200 if ( address_info['same'] ) {
7201 cf.elements['bill_censustract'].value =
7202 address_info['bill_censustract'];
7204 cf.elements['ship_censustract'].value =
7205 address_info['ship_censustract'];
7210 post_standardization();
7216 function confirm_standardize(arg) {
7217 // contains 'old', which was what we sent, and 'new', which is what came
7218 // back, including any errors
7219 returned = JSON.parse(arg);
7223 replace_address(); // with the contents of returned['new']
7225 } else if ( returned['all_same'] ) {
7227 // then all entered address fields are correct
7228 // but we still need to set the lat/long fields and addr_clean
7229 status_message('Verified');
7234 var querystring = encodeURIComponent( JSON.stringify(returned) );
7235 // confirmation popup: knows to call replace_address(),
7236 // post_standardization(), or submit_abort() depending on the
7239 'http://localhost/freeside//misc/confirm-address_standardize.html',
7242 overlib( OLresponseAJAX, CAPTION, 'Address standardization', STICKY,
7243 AUTOSTATUSCAP, CLOSETEXT, '', MIDX, 0, MIDY, 0, DRAGGABLE, WIDTH,
7244 576, HEIGHT, 268, BGCOLOR, '#333399', CGCOLOR, '#333399',
7251 function replace_address() {
7253 var newaddr = returned['new'];
7255 var cf = document.CustomerForm;
7256 var clean = newaddr['bill_addr_clean'] == 'Y';
7257 var error = newaddr['bill_error'];
7259 cf.elements['bill_address1'].value = newaddr['bill_address1'];
7260 cf.elements['bill_address2'].value = newaddr['bill_address2'];
7261 cf.elements['bill_state'].value = newaddr['bill_state'];
7262 cf.elements['bill_zip'].value = newaddr['bill_zip'];
7263 cf.elements['bill_addr_clean'].value = newaddr['bill_addr_clean'];
7264 cf.elements['bill_city'].value = newaddr['bill_city'];
7266 if ( cf.elements['bill_coord_auto'].value ) {
7267 cf.elements['bill_latitude'].value = newaddr['bill_latitude'];
7268 cf.elements['bill_longitude'].value = newaddr['bill_longitude'];
7270 if ( clean && newaddr['bill_censustract'] ) {
7271 cf.elements['bill_censustract'].value = newaddr['bill_censustract'];
7274 var clean = newaddr['ship_addr_clean'] == 'Y';
7275 var error = newaddr['ship_error'];
7277 cf.elements['ship_address1'].value = newaddr['ship_address1'];
7278 cf.elements['ship_address2'].value = newaddr['ship_address2'];
7279 cf.elements['ship_state'].value = newaddr['ship_state'];
7280 cf.elements['ship_zip'].value = newaddr['ship_zip'];
7281 cf.elements['ship_addr_clean'].value = newaddr['ship_addr_clean'];
7282 cf.elements['ship_city'].value = newaddr['ship_city'];
7284 if ( cf.elements['ship_coord_auto'].value ) {
7285 cf.elements['ship_latitude'].value = newaddr['ship_latitude'];
7286 cf.elements['ship_longitude'].value = newaddr['ship_longitude'];
7288 if ( clean && newaddr['ship_censustract'] ) {
7289 cf.elements['ship_censustract'].value = newaddr['ship_censustract'];
7293 post_standardization();
7297 function confirm_manual_address() {
7298 var cf = document.CustomerForm;
7299 cf.elements['bill_censustract'].value =
7300 cf.elements['bill_enter_censustract'].value;
7301 cf.elements['ship_censustract'].value =
7302 cf.elements['ship_enter_censustract'].value;
7303 post_standardization();
7306 function post_standardization() {
7314 function update_geocode() {
7317 set_geocode = function (what) {
7319 var cf = document.CustomerForm;
7320 var prefix = 'bill_';
7321 if ( cf.elements['same']
7322 && cf.elements['same'].checked
7323 && prefix == 'ship_' ) {
7327 var argsHash = JSON.parse(what.value);
7328 cf.elements[prefix + 'geocode'].value = argsHash['geocode'];
7335 overlib( OLresponseAJAX, CAPTION, 'Select tax location', STICKY, AUTOSTATUSCAP, CLOSETEXT, '', MIDX, 0, MIDY, 0, WIDTH, 576, HEIGHT, 268, BGCOLOR, '#333399', CGCOLOR, '#333399', TEXTSIZE, 3 );
7339 function setselect(el, value) {
7341 for ( var s = 0; s < el.options.length; s++ ) {
7342 if ( el.options[s].value == value ) {
7343 el.selectedIndex = s;
7352 function confirm_censustract(pre) {
7353 var cf = document.CustomerForm;
7354 if ( cf.elements[pre+'censustract'].value == '' ) {
7355 var address_info = form_address_info();
7356 address_info[pre+'latitude'] = cf.elements[pre+'latitude'].value;
7357 address_info[pre+'longitude'] = cf.elements[pre+'longitude'].value;
7358 address_info['prefix'] = pre;
7360 'http://localhost/freeside//misc/confirm-censustract.html',
7361 'q=' + encodeURIComponent(JSON.stringify(address_info)),
7363 if ( OLresponseAJAX ) {
7364 overlib( OLresponseAJAX, CAPTION, 'Confirm censustract', STICKY,
7365 AUTOSTATUSCAP, CLOSETEXT, '', MIDX, 0, MIDY, 0, DRAGGABLE, WIDTH,
7366 576, HEIGHT, 268, BGCOLOR, '#333399', CGCOLOR, '#333399',
7372 } else submit_continue();
7374 function confirm_censustract_bill() {
7375 confirm_censustract('bill_');
7378 function confirm_censustract_ship() {
7379 var cf = document.CustomerForm;
7380 if ( cf.elements['same'].checked ) {
7383 confirm_censustract('ship_');
7387 function set_censustract(tract, year, pre) {
7388 var cf = document.CustomerForm;
7389 cf.elements[pre + 'censustract'].value = tract;
7390 cf.elements[pre + 'censusyear'].value = year;
7394 function check_unique() {
7395 var search_hash = {};
7397 duplicates_form(JSON.stringify(search_hash), confirm_unique);
7400 function confirm_unique(arg) {
7401 if ( arg.match(/\S/) ) {
7402 overlib( arg, CAPTION, 'Duplicate customer', STICKY, AUTOSTATUSCAP,
7403 CLOSETEXT, '', MIDX, 0, MIDY, 0, DRAGGABLE, WIDTH, 576, HEIGHT,
7404 268, BGCOLOR, '#333399', CGCOLOR, '#333399', TEXTSIZE, 3 );
7405 } else { // no duplicates
7415 <INPUT TYPE = "button"
7416 NAME = "submitButton"
7418 VALUE = "Apply changes"
7419 onClick = "this.disabled=true; bottomfixup(this.form);"