1// Buy Insurance program 2 3 4// date/time picker here: 5// http://www.ama3.com/anytime/ 6 7var buy = function() {}; 8var pay = function() {}; 9 10buy.monthNames = [ 11 'January', 12 'February', 13 'March', 14 'April', 15 'May', 16 'June', 17 'July', 18 'August', 19 'September', 20 'October', 21 'November', 22 'December' 23]; 24 25buy.modelData = { 26 havePolicy: undefined, 27 haveVIN: undefined, 28 vType: undefined, 29 vYear: undefined, 30 vMake: undefined, 31 vModel: undefined, 32 vValue: undefined, 33 vVin: undefined, 34 power: undefined, 35 carrier: 0, 36 carrierName: '', 37 carrierPolicyNumber: '', 38 carrierPolicyExpires: '', 39 tEnabled: false, 40 tType: undefined, 41 tYear: undefined, 42 tMake: undefined, 43 tValue: undefined, 44 enterMonth: undefined, 45 enterDay: undefined, 46 enterYear: undefined, 47 enterHour: undefined, 48 enterap: undefined, 49 exitMonth: undefined, 50 exitDay: undefined, 51 exitYear: undefined, 52 exitHour: undefined, 53 exitap: undefined, 54 numDays: undefined, 55 policyType: 'maxhigh', 56 firstname: undefined, 57 lastname: undefined, 58 email: undefined, 59 phone2: undefined, 60 address: undefined, 61 address2: undefined, 62 city: undefined, 63 state: undefined, 64 zip: undefined, 65 country: 'US', 66 lEnabled: false, 67 lname: undefined, 68 laddress: undefined, 69 laddress2: undefined, 70 lcity: undefined, 71 lstate: undefined, 72 lzip: undefined, 73 lcountry: undefined, 74 cardType: undefined, 75 cardNumber: undefined, 76 cardMonth: undefined, 77 cardYear: undefined, 78 cardFirstname: undefined, 79 cardLastname: undefined, 80 cardPhone: undefined, 81 cardAddress: undefined, 82 cardAddress2: undefined, 83 cardCity: undefined, 84 cardState: undefined, 85 cardZip: undefined, 86 cardCountry: undefined, 87 eligibleForMaxCoverage: false 88}; 89 90buy.vMakeOptions = null; 91buy.vModelOptions = null; 92buy.TOP = 160; 93 94 95buy.rpc = function(args, callback) { 96 var body = $('#body'); 97 $.blockUI({ message: 'Please wait...' }); 98 $.ajax({ 99 type: 'POST', 100 url: '/buy.php', 101 data: args, 102 dataType: 'json', 103 success: function(o, status, xhr) { 104 $.unblockUI(); 105 callback && callback(o); 106 }, 107 error: function(xhr, status, error) { 108 console.error('Error: ' + error); 109 } 110 }); 111}; 112 113pay.rpc = function(args, callback) { 114 var body = $('#body'); 115 $.blockUI({ message: 'Charging your credit card...<br/>Please allow up to 60 seconds for processing.' }); 116 $.ajax({ 117 type: 'POST', 118 url: '/Pay.php', 119 data: args, 120 dataType: 'json', 121 timeout: 60000, // 60 second timeout 122 success: function(o, status, xhr) { 123 $.unblockUI(); 124 callback && callback(o); 125 }, 126 error: function(xhr, status, error) { 127 $.unblockUI(); 128 console.error('Payment Error: ' + error); 129 alert('There was a problem processing your payment. Please check your email for a confirmation before trying again, or contact us if you need assistance.'); 130 } 131 }); 132}; 133 134buy.FormField = function(config) { 135 var initialConfig = config; 136 137 var el = $('#'+config.id); 138 var spanEl = $('#'+config.id+'-span'); 139 var labelEl = $('#'+config.id+'-label'); 140 var reqEl = $('#'+config.id+'-req'); 141 142 var methods = { 143 id: config.id, 144 disable: function() { 145 el.attr('disabled', 'disabled'); 146 el.addClass('disabled'); 147 el.parent().parent().addClass('disabled'); 148 labelEl.addClass('disabled'); 149 spanEl.addClass('disabled'); 150 }, 151 enable: function() { 152 el.removeAttr('disabled'); 153 el.removeClass('disabled'); 154 el.parent().parent().removeClass('disabled'); 155 labelEl.removeClass('disabled'); 156 spanEl.removeClass('disabled'); 157 }, 158 getValue: function() { 159 var v = $.trim(el.val()); 160 if (v === 'none') { 161 v = undefined; 162 } 163 return v; 164 }, 165 setValue: function(v) { 166 el.val(v); 167 var d = $('#'+config.id+' :selected').text(); 168 spanEl.text(d); 169 }, 170 focus: function() { 171 el.focus(); 172 }, 173 setOptions: function(html) { 174 el.html(html); 175 }, 176 markValid: function(enable) { 177 if (!enable) { 178 labelEl.removeClass('disabled'); 179 //el.attr('disabled', 'disabled'); 180 //el.addClass('disabled'); 181 //spanEl.addClass('disabled'); 182 } 183 reqEl.addClass('valid'); 184 reqEl.text(''); 185 }, 186 markConfirmed: function() { 187 reqEl.removeClass('req'); 188 reqEl.removeClass('valid'); 189 reqEl.addClass('confirmed'); 190 reqEl.text(''); 191 }, 192 markRequired: function(text) { 193 text = text || 'Required'; 194 reqEl.removeClass('confirmed'); 195 reqEl.removeClass('valid'); 196 reqEl.addClass('req'); 197 reqEl.text(text); 198 }, 199 replaceMarkup: function(html) { 200 labelEl.parent().html(html); 201 el = $('#'+config.id); 202 spanEl = $('#'+config.id+'-span'); 203 labelEl = $('#'+config.id+'-label'); 204 reqEl = $('#'+config.id+'-req'); 205 if (config.listeners) { 206 for (var type in config.listeners) { 207 el.bind(type, { type: type }, function(e) { 208 config.listeners[e.data.type] && config.listeners[e.data.type].apply(methods); 209 return false;
210 }); 211 } 212 } 213 } 214 }; 215 216 if (config.methods) { 217 for(var m in config.methods) { 218 methods[m] = function() { 219 var m = arguments.callee.function_name; 220 config.methods[m].apply(this); 221 } 222 methods[m].function_name = m; 223 } 224 } 225 226 if (config.options) { 227 methods.setOptions(config.options); 228 } 229 if (config.value) { 230 methods.setValue(config.value); 231 methods.markValid(); 232 } 233 234 if (config.disabled) { 235 methods.disable(); 236 } 237 if (config.listeners) { 238 for (var type in config.listeners) { 239 //console.log('binding ' + type + ' to ' + config.id); 240 el.bind(type, { type: type }, function(e) { 241 //console.log(e.data.type + ' ' + config.id); 242 config.listeners[e.data.type] && config.listeners[e.data.type].apply(methods); 243 return false; 244 }); 245 } 246 } 247 return methods; 248}; 249 250 251// Removes any class containing "step" from #sub-main-content 252buy.cleanSubMainContentClass = function () { 253 $("#sub-main-content").removeClass(function (index, css) { 254 return (css.match (/\bstep\S+/g) || []).join(' '); // removes anything that starts with "step" 255 }); 256}; 257 258buy.breadcrumb = function(step) { 259 for (s=1; s<step; s++) { 260 $('#breadcrumb-step'+s).removeClass('active-step').addClass('completed-step'); 261 } 262 $('#breadcrumb-step'+step).addClass('active-step').removeClass('completed-step'); 263 for (s=step+1; s<10; s++) { 264 $('#breadcrumb-step'+s).removeClass('active-step').removeClass('completed-step'); 265 } 266}; 267 268buy.layout2 = function(step, html) { 269 buy.cleanSubMainContentClass(); 270 $('#sub-main-content') 271 .addClass('step-' + step) 272 .html(html); 273 $('#layout-3col').attr('id', 'layout-2col'); 274 $('#col3').hide(); 275 //PINT.init(); 276 buy.breadcrumb(step); 277}; 278 279buy.layout3 = function(step, html) { 280 buy.cleanSubMainContentClass(); 281 $('#sub-main-content') 282 .addClass('step-' + step) 283 .html(html); 284 $('#layout-2col').attr('id', 'layout-3col'); 285 //PINT.init(); 286 buy.breadcrumb(step); 287}; 288 289buy.initStep = function(step) { 290 $('#enterDate').AnyTime_noPicker(); 291 $('#exitDate').AnyTime_noPicker(); 292}; 293 294buy.step1 = function() { 295 buy.initStep(1); 296 buy.rpc({ method: 'getStepHtml', step: 1 }, function(o) { 297 buy.layout3(1, o.html); 298 $('#col3').show(); 299 300 // $('#carrierPolicyExpires').mask('00-00-0000'); 301 /* 302 var carrierName = new buy.FormField({ 303 id: 'carrierName', 304 disabled: !buy.modelData.carrierName, 305 value: buy.modelData.carrierName, 306 listeners: { 307 change: function() { 308 buy.modelData.carrierName = this.getValue(); 309 if (buy.modelData.carrierName.length) { 310 this.markValid(); 311 } 312 else { 313 buy.modelData.carrierName = undefined; 314 this.setValue(''); 315 } 316 }, 317 blur: function() { 318 buy.modelData.carrierName = this.getValue(); 319 if (buy.modelData.carrierName.length) { 320 this.markValid(); 321 } 322 else { 323 buy.modelData.carrierName = undefined; 324 } 325 } 326 }, 327 methods: { 328 activate: function() { 329 this.enable(); 330 } 331 } 332 }); 333 334 var carrierPolicyNumber = new buy.FormField({ 335 id: 'carrierPolicyNumber', 336 disabled: !buy.modelData.carrierPolicyNumber, 337 value: buy.modelData.carrierPolicyNumber, 338 listeners: { 339 change: function() { 340 buy.modelData.carrierPolicyNumber = this.getValue(); 341 if (buy.modelData.carrierPolicyNumber.length) { 342 this.markValid(); 343 } 344 else { 345 buy.modelData.carrierPolicyNumber = undefined; 346 this.setValue(''); 347 } 348 }, 349 blur: function() { 350 buy.modelData.carrierPolicyNumber = this.getValue(); 351 if (buy.modelData.carrierPolicyNumber.length) { 352 this.markValid(); 353 } 354 else { 355 buy.modelData.carrierPolicyNumber = undefined; 356 } 357 } 358 }, 359 methods: { 360 activate: function() { 361 this.enable(); 362 } 363 } 364 }); 365 366 var carrierPolicyExpires = new buy.FormField({ 367 id: 'carrierPolicyExpires', 368 disabled: !buy.modelData.carrierPolicyExpires, 369 value: buy.modelData.carrierPolicyExpires, 370 listeners: { 371 change: function() { 372 buy.modelData.carrierPolicyExpires = this.getValue(); 373 if (buy.modelData.carrierPolicyExpires.length) { 374 this.markValid(); 375 } 376 else { 377 buy.modelData.carrierPolicyExpires = undefined; 378 this.setValue(''); 379 } 380 }, 381 blur: function() { 382 buy.modelData.carrierPolicyExpires = this.getValue(); 383 if (buy.modelData.carrierPolicyExpires.length) { 384 this.markValid(); 385 } 386 else { 387 buy.modelData.carrierPolicyExpires = undefined; 388 } 389 } 390 }, 391 methods: { 392 activate: function() { 393 this.enable(); 394 } 395 } 396 }); 397 */ 398 var vVin = new buy.FormField({ 399 id: 'vVin', 400 disabled: !buy.modelData.vValue, 401 value: buy.modelData.vVin, 402 listeners: { 403 change: function() { 404 buy.modelData.vVin = this.getValue(); 405 if (buy.modelData.vVin.length) { 406 this.markValid(); 407 } 408 else { 409 buy.modelData.vVin = undefined; 410 this.setValue(''); 411 } 412 }, 413 blur: function() { 414 buy.modelData.vVin = this.getValue(); 415 if (buy.modelData.vVin.length) { 416 this.markValid(); 417 } 418 else { 419 buy.modelData.vVin = undefined; 420 } 421 } 422 }, 423 methods: { 424 activate: function() { 425 this.enable(); 426 } 427 } 428 }); 429 430 var vValue = new buy.FormField({ 431 id: 'vValue', 432 disabled: !buy.modelData.vModel, 433 value: buy.modelData.vValue, 434 listeners: { 435 change: function() { 436 buy.modelData.vValue = this.getValue(); 437 if (buy.modelData.vValue.length) { 438 this.markValid(); 439 vVin.activate(); 440 vVin.focus(); 441 } 442 else { 443 buy.modelData.vValue = undefined; 444 } 445 } 446 }, 447 methods: { 448 activate: function() { 449 var me = this; 450 this.enable(); 451 } 452 } 453 }); 454 455 var vModelO = ''; 456 var vModel = new buy.FormField({ 457 id: 'vModel', 458 disabled: !buy.modelData.vMake, 459 options: buy.vModelOptions, 460 value: buy.modelData.vModel, 461 listeners: { 462 change: function() { 463 buy.modelData.vModel = this.getValue(); 464 if (buy.modelData.vModel.length) { 465 this.markValid(); 466 vValue.activate(); 467 vValue.focus(); 468 } 469 else { 470 buy.modelData.vModel = undefined; 471 this.setValue(''); 472 } 473 } 474 }, 475 methods: { 476 activate: function() { 477 var me = this; 478 buy.modelData.vModel = undefined; 479 if (buy.modelData.vType === 'Car') { 480 buy.rpc({ method: 'getModel', year: buy.modelData.vYear, make: buy.modelData.vMake }, function(o) { 481 buy.vModelOptions = o.html; 482 me.setOptions(o.html); 483 me.enable(); 484 }); 485 } 486 } 487 } 488 }); 489 490 var vMakeO = ''; 491 var vMake = new buy.FormField({ 492 id: 'vMake', 493 disabled: !buy.modelData.vYear, 494 options: buy.vMakeOptions, 495 value: buy.modelData.vMake, 496 listeners: { 497 change: function() { 498 buy.modelData.vMake = this.getValue(); 499 if (buy.modelData.vMake.length) { 500 this.markValid(); 501 vModel.activate(); 502 vModel.focus(); 503 } 504 else { 505 buy.modelData.vMake = undefined; 506 this.setValue(''); 507 } 508 }/*, 509 focus: function() { 510 this.activate(); 511 }*/ 512 }, 513 methods: { 514 activate: function() { 515 var me = this; 516 buy.modelData.vMake = undefined; 517 if (buy.modelData.vType === 'Car') { 518 buy.rpc({ method: 'getMake', year: buy.modelData.vYear}, function(o) { 519 buy.vMakeOptions = o.html; 520 me.setOptions(o.html); 521 me.enable(); 522 me.focus(); 523 }); 524 } 525 } 526 } 527 }); 528 529 var vYear = new buy.FormField({ 530 id: 'vYear', 531 disabled: !buy.modelData.vType, 532 value: buy.modelData.vYear, 533 listeners: { 534 change: function() { 535 buy.modelData.vYear = this.getValue(); 536 if (buy.modelData.vYear.length) { 537 this.markValid(); 538 vMake.activate(); 539 } 540 else { 541 buy.modelData.vYear = undefined; 542 } 543 } 544 } 545 }); 546 547 var haveVIN = new buy.FormField({ 548 id: 'haveVIN', 549 value: buy.modelData.haveVIN, 550 disabled: false, 551 listeners: { 552 change: function() { 553 buy.modelData.haveVIN= this.getValue(); 554 if (buy.modelData.tValue.length) { 555 this.markValid(); 556 } 557 } 558 } 559 }); 560 561 function fixForm() { 562 if (buy.modelData.vType && buy.modelData.vType !== 'Car') { 563 564 vMakeO = vMake; 565 vModelO = vModel; 566 567 vMake.replaceMarkup([ 568 '<label id="vMake-label" for="vMake">Make:</label>', 569 '<input type="text" id="vMake" name="vMake" value="" />', 570 '<span id="vMake-req" class="req">Required</span>', 571 ].join('\n')); 572 if (buy.modelData.vMake !== undefined) { 573 vMake.setValue(buy.modelData.vMake); 574 vMake.markValid(); 575 } 576 577 vModel.replaceMarkup([ 578 '<label id="vModel-label" for="vModel">Model:</label>', 579 '<input type="text" id="vModel" name="vModel" value="" />', 580 '<span id="vModel-req" class="req">Required</span>', 581 ].join('\n')); 582 if (buy.modelData.vModel !== undefined) { 583 vModel.setValue(buy.modelData.vModel); 584 vModel.markValid(); 585 } 586 587 vMake.enable(); 588 vModel.enable(); 589 vValue.enable(); 590 vVin.enable(); 591 } 592 } 593 var vType = new buy.FormField({ 594 id: 'vType', 595 value: buy.modelData.vType, 596 listeners: { 597 change: function() { 598 buy.modelData.vType = this.getValue(); 599 if (buy.modelData.vType) { 600 fixForm(); 601 this.markValid(); 602 vYear.enable(); 603 vYear.focus(); 604 } 605 606 /* 607 if (buy.modelData.vType === 'Car') { 608 buy.rpc({ method: 'getMake', year: 2000}, function(o) { 609 buy.vMakeOptions = o.html; 610 }); 611 } 612 */ 613 614 } 615 } 616 }); 617 fixForm();
618 vType.focus(); 619 620 /* 621 if (buy.modelData.carrier) { 622 $('#carrier').attr('checked', 'checked'); 623 } 624 function checkEnabled() { 625 if (buy.modelData.carrier) { 626 carrierName.enable(); 627 if (buy.modelData.carrierName.length) { 628 carrierName.markValid(); 629 } 630 else { 631 carrierName.markRequired(); 632 } 633 carrierPolicyNumber.enable(); 634 if (buy.modelData.carrierPolicyNumber.length) { 635 carrierPolicyNumber.markValid(); 636 } 637 else { 638 carrierPolicyNumber.markRequired(); 639 } 640 carrierPolicyExpires.enable(); 641 if (buy.modelData.carrierPolicyExpires.length) { 642 carrierPolicyExpires.markValid(); 643 } 644 else { 645 carrierPolicyExpires.markRequired(); 646 } 647 } 648 else { 649 buy.modelData.carrierName = ''; 650 carrierName.setValue(''); 651 carrierName.disable(); 652 carrierName.markConfirmed(); 653 buy.modelData.carrierPolicyNumber = ''; 654 carrierPolicyNumber.setValue(''); 655 carrierPolicyNumber.disable(); 656 carrierPolicyNumber.markConfirmed(); 657 buy.modelData.carrierPolicyExpires = ''; 658 carrierPolicyExpires.setValue(''); 659 carrierPolicyExpires.disable(); 660 carrierPolicyExpires.markConfirmed(); 661 } 662 } 663 checkEnabled(); 664 665 $('#carrier').change(function() { 666 buy.modelData.carrier = $('#carrier').attr('checked'); 667 checkEnabled(); 668 }); 669 */ 670 $('#step1-clear').click(function() { 671 buy.modelData.vType = undefined; 672 buy.modelData.vYear = undefined; 673 buy.modelData.vMake = undefined; 674 buy.modelData.vModel = undefined; 675 buy.modelData.vValue = undefined; 676 buy.modelData.vVin = undefined; 677 // buy.modelData.carrier = 0; 678 buy.step1(); 679 }); 680 681 $('#step1-continue').click(function() { 682 var emsg = []; 683 function validate(ndx, txt) { 684 if (buy.modelData[ndx] === undefined || buy.modelData[ndx] === '') { 685 emsg.push('* ' + txt + ' is required'); 686 } 687 } 688 validate('vType', 'Vehicle Type'); 689 validate('vYear', 'Year'); 690 validate('vMake', 'Make'); 691 validate('vModel', 'Model'); 692 validate('vValue', 'Value'); 693 validate('vVin', 'VIN'); 694 /* 695 if (buy.modelData.carrier) { 696 validate('carrierName', 'Company Name'); 697 validate('carrierPolicyNumber', 'Policy Number'); 698 validate('carrierPolicyExpires', 'Policy Expires'); 699 } 700 */ 701 if (emsg.length) { 702 alert('Please fix these errors before you can continue:\n\n' + emsg.join('\n')); 703 return; 704 } 705 if (buy.modelData.vType === 'Car') { 706 buy.modelData.power = 1; 707 } 708 else if (buy.modelData.vType === 'Motorcycle') { 709 buy.modelData.power = 2; 710 } 711 712 buy.step2(); 713 }); 714 715 $('#step1-prefill').click(function() { 716 var emsg = []; 717 function validate(ndx, txt) { 718 if (buy.modelData[ndx] === undefined || buy.modelData[ndx] === '') { 719 emsg.push('* ' + txt + ' is required'); 720 } 721 } 722 //validate('havePolicy', 'PolicyId'); 723 validate('haveVIN', 'VIN'); 724 if (emsg.length) { 725 alert('Please fix these errors before you can continue:\n\n' + emsg.join('\n')); 726 return; 727 } 728 729 buy.step1a(); 730 731 732 }); 733 734 $(document).scrollTop(buy.TOP); 735 }); 736}; 737 738buy.step1a = function() { 739 740 buy.rpc({ method: 'getPolicy', havePolicy: buy.modelData.havePolicy, haveVIN: buy.modelData.haveVIN }, function(o) { 741 742 }); 743 744}; 745 746buy.step2 = function() { 747 buy.initStep(2); 748 buy.rpc({ method: 'getStepHtml', step: 2, vValue: buy.modelData.vValue }, function(o) { 749 buy.layout3(2, o.html); 750 $('#col3').show(); 751 752 var tValue = new buy.FormField({ 753 id: 'tValue', 754 value: buy.modelData.tValue, 755 disabled: true, 756 listeners: { 757 change: function() { 758 buy.modelData.tValue= this.getValue(); 759 if (buy.modelData.tValue.length) { 760 this.markValid(); 761 } 762 } 763 } 764 }); 765 766 var tVin = new buy.FormField({ 767 id: 'tVin', 768 value: buy.modelData.tVin, 769 disabled: true, 770 listeners: { 771 change: function() { 772 buy.modelData.tVin = this.getValue(); 773 if (buy.modelData.tVin.length) { 774 this.markValid(); 775 } 776 else { 777 buy.modelData.tVin = undefined; 778 } 779 }, 780 blur: function() { 781 buy.modelData.tVin = this.getValue(); 782 if (buy.modelData.tVin.length) { 783 this.markValid(); 784 } 785 else { 786 buy.modelData.tVin = undefined; 787 } 788 } 789 } 790 }); 791 792 var tMake = new buy.FormField({ 793 id: 'tMake', 794 value: buy.modelData.tMake, 795 disabled: true, 796 listeners: { 797 change: function() { 798 buy.modelData.tMake = this.getValue(); 799 if (buy.modelData.tMake.length) { 800 this.markValid(); 801 } 802 else { 803 buy.modelData.tMake = undefined; 804 } 805 }, 806 blur: function() { 807 buy.modelData.tMake = this.getValue(); 808 if (buy.modelData.tMake.length) { 809 this.markValid(); 810 } 811 else { 812 buy.modelData.tMake = undefined; 813 } 814 } 815 } 816 }); 817 818 var tYear = new buy.FormField({ 819 id: 'tYear', 820 value: buy.modelData.tYear, 821 disabled: true, 822 listeners: { 823 change: function() { 824 buy.modelData.tYear = this.getValue(); 825 if (buy.modelData.tYear.length) { 826 this.markValid(); 827 } 828 } 829 } 830 }); 831 832 var tType = new buy.FormField({ 833 id: 'tType', 834 value: buy.modelData.tType, 835 disabled: true, 836 listeners: { 837 change: function() { 838 buy.modelData.tType = this.getValue(); 839 if (buy.modelData.tType.length) { 840 this.markValid(); 841 } 842 } 843 } 844 }); 845 846 function reset() { 847 buy.modelData.tEnabled = false;
848 buy.modelData.tType = undefined; 849 buy.modelData.tYear = undefined; 850 buy.modelData.tMake = undefined; 851 buy.modelData.tValue = undefined; 852 buy.modelData.tVin = undefined; 853 buy.step2(); 854 } 855 856 function checkEnabled() { 857 if (buy.modelData.tEnabled) { 858 tType.enable(); 859 tType.markRequired(); 860 tYear.enable(); 861 tYear.markRequired(); 862 tMake.enable(); 863 tMake.markRequired(); 864 tVin.enable(); 865 tVin.markRequired(); 866 tValue.enable(); 867 tValue.markRequired(); 868 } 869 else { 870 reset(); 871 } 872 } 873 874 $('#tEnabled').change(function() { 875 buy.modelData.tEnabled = $('#tEnabled').attr('checked'); 876 checkEnabled(); 877 }) 878 879 tType.disable(); 880 tType.markConfirmed(); 881 tYear.disable(); 882 tYear.markConfirmed(); 883 tMake.disable(); 884 tMake.markConfirmed(); 885 tVin.disable(); 886 tVin.markConfirmed(); 887 tValue.disable(); 888 tValue.markConfirmed(); 889 890 $('#step2-back').click(function() { 891 buy.step1(); 892 }); 893 894 $('#step2-clear').click(function() { 895 reset(); 896 }); 897 898 $('#step2-continue').click(function() { 899 if (!buy.modelData.tEnabled) { 900 buy.modelData.tType = undefined; 901 buy.modelData.tYear = undefined; 902 buy.modelData.tMake = undefined; 903 buy.modelData.tValue = undefined; 904 buy.modelData.tVin = undefined; 905 buy.step3(); 906 return; 907 } 908 var emsg = []; 909 function validate(ndx, txt) { 910 if (buy.modelData[ndx] === undefined) { 911 emsg.push('* ' + txt + ' is required'); 912 } 913 } 914 validate('tType', 'Trailer Type'); 915 validate('tYear', 'Year'); 916 validate('tMake', 'Make'); 917 validate('vVin', 'VIN'); 918 validate('tValue', 'Towed Unit Value'); 919 if (emsg.length) { 920 alert('Please fix these errors before you can continue:\n\n' + emsg.join('\n')); 921 return; 922 } 923 buy.step3(); 924 }); 925 $(document).scrollTop(buy.TOP); 926 }); 927}; 928 929buy.step3 = function() { 930 buy.initStep(3); 931 function getHour(h, ampm) { 932 return (h < 12 && ampm == 'PM') ? h + 12 : h; 933 } 934 buy.rpc({ method: 'getStepHtml', step: 3 }, function(o) { 935 buy.layout2(3, o.html); 936 $('#col3').hide(); 937 var converter = new AnyTime.Converter({ format: '%Y-%m-%d-%h-%p'}); 938 var formatter = new AnyTime.Converter({ format: '%W %M %d %Y, %h:00 %p'}); 939 940 var today = new Date(); 941 var tomorrow = new Date(); 942 tomorrow.setDate(tomorrow.getDate()+1); 943 var enterDateVal = today; 944 var exitDateVal = tomorrow; 945 if (buy.modelData.enterDay !== undefined) { 946 enterDateVal = new Date(buy.modelData.enterYear, buy.modelData.enterMonth-1, buy.modelData.enterDay, getHour(buy.modelData.enterHour, buy.modelData.enterap) , 0, 0, 0); 947 exitDateVal = new Date(buy.modelData.exitYear, buy.modelData.exitMonth-1, buy.modelData.exitDay, getHour(buy.modelData.exitHour, buy.modelData.exitap) , 0, 0, 0); 948 } 949 $('#exitDate').AnyTime_noPicker(); 950 $('#exitDate').AnyTime_picker({ 951 hideInput: true, 952 placement: 'inline', 953 askSecond: false, 954 format: '%Y-%m-%d-%h-%p', 955 earliest: tomorrow, 956 latest: new Date(today.getFullYear()+1, today.getMonth(), today.getDate(), today.getHours(), today.getMinutes(), today.getSeconds(), today.getMilliseconds()) 957 958 }); 959 updateExitDate(); 960 function updateEnterDate() { 961 var newDate = converter.parse($('#enterDate').val()); 962 $('#enterDateDisplay').html(formatter.format(newDate)); 963 return newDate; 964 } 965 $('#enterDate').change(function() { 966 var newDate = updateEnterDate(); 967 // if date is after exit date, make exit date the day after enter date 968 var exitDate = converter.parse($('#exitDate').val()); 969 newDate.setDate(newDate.getDate()+1); 970 var maxDate = new Date(newDate); 971 maxDate.setDate(maxDate.getDate()+364); 972 if (exitDate < newDate) { 973 $('#exitDate').val(converter.format(newDate)); 974 } 975 $('#exitDate').AnyTime_noPicker(); 976 $('#exitDate').AnyTime_picker({ 977 hideInput: true, 978 placement: 'inline', 979 askSecond: false, 980 format: '%Y-%m-%d-%h-%p', 981 earliest: newDate, 982 latest: maxDate 983 }); 984 updateExitDate(); 985 }); 986 987 function updateExitDate() { 988 $('#exitDateDisplay').html(formatter.format(converter.parse($('#exitDate').val()))); 989 } 990 $('#exitDate').change(updateExitDate); 991 992 function reset() { 993 $('#enterDate').AnyTime_noPicker(); 994 $('#enterDate').val(converter.format(enterDateVal)); 995 $('#exitDate').val(converter.format(exitDateVal)); 996 997 $('#enterDate').AnyTime_picker({ 998 hideInput: true, 999 placement: 'inline', 1000 askSecond: false, 1001 format: '%Y-%m-%d-%h-%p', 1002 earliest: today,
1003 latest: new Date(today.getFullYear()+1, today.getMonth(), today.getDate(), today.getHours(), today.getMinutes(), today.getSeconds(), today.getMilliseconds()) 1004 }); 1005 1006 $('#exitDate').AnyTime_noPicker(); 1007 $('#exitDate').AnyTime_picker({ 1008 hideInput: true, 1009 placement: 'inline', 1010 askSecond: false, 1011 format: '%Y-%m-%d-%h-%p', 1012 earliest: tomorrow, 1013 latest: new Date(today.getFullYear()+1, today.getMonth(), today.getDate(), today.getHours(), today.getMinutes(), today.getSeconds(), today.getMilliseconds()) 1014 }); 1015 updateExitDate(); 1016 updateEnterDate(); 1017 1018 } 1019 reset(); 1020 $(document).scrollTop(buy.TOP); 1021 $('#step3-back').click(function() { 1022 buy.step2(); 1023 }); 1024 1025 $('#step3-clear').click(function() { 1026 enterDateVal = today; 1027 exitDatVal = tomorrow; 1028 reset(); 1029 }); 1030 1031 $('#step3-continue').click(function() { 1032 var enterDate = $('#enterDate').val().split('-'); 1033 buy.modelData.enterYear = parseInt(enterDate[0], 10); 1034 buy.modelData.enterMonth = parseInt(enterDate[1], 10); 1035 buy.modelData.enterDay = parseInt(enterDate[2], 10); 1036 buy.modelData.enterHour = parseInt(enterDate[3], 10); 1037 buy.modelData.enterMinute = 0; 1038 buy.modelData.enterSecond = 0; 1039 buy.modelData.enterap = enterDate[4]; 1040 if (buy.modelData.enterap == 'PM') { 1041 if (buy.modelData.enterHour > 12) { 1042 buy.modelData.enterHour -= 12; 1043 } 1044 } 1045 else if (buy.modelData.enterHour == 12) { 1046 buy.modelData.enterHour = 0; 1047 } 1048 var exitDate = $('#exitDate').val().split('-'); 1049 buy.modelData.exitYear = parseInt(exitDate[0], 10); 1050 buy.modelData.exitMonth = parseInt(exitDate[1], 10); 1051 buy.modelData.exitDay = parseInt(exitDate[2], 10); 1052 buy.modelData.exitHour = parseInt(exitDate[3], 10); 1053 buy.modelData.exitMinute = 0; 1054 buy.modelData.exitSecond = 0; 1055 buy.modelData.exitap = exitDate[4]; 1056 if (buy.modelData.exitap == 'PM') { 1057 if (buy.modelData.exitHour > 12) { 1058 buy.modelData.exitHour -= 12; 1059 } 1060 } 1061 else if (buy.modelData.exitHour == 12) { 1062 buy.modelData.exitHour = 0; 1063 } 1064 1065 // validate 1066 var enterDatex = new Date(buy.modelData.enterYear, buy.modelData.enterMonth-1, buy.modelData.enterDay, getHour(buy.modelData.enterHour, buy.modelData.enterap) , 0, 0, 0); 1067 var exitDatex = new Date(buy.modelData.exitYear, buy.modelData.exitMonth-1, buy.modelData.exitDay, getHour(buy.modelData.exitHour, buy.modelData.exitap) , 0, 0, 0); 1068 var numDays = (exitDatex - enterDatex) / 86400000; 1069 if (numDays != parseInt(numDays, 10)) { 1070 numDays += 1; 1071 } 1072 numDays = parseInt(numDays, 10); 1073 if (exitDatex <= enterDatex) { 1074 alert('Date Exiting Mexico must be after Date Entering Mexico.'); 1075 return; 1076 } 1077 if (numDays > 365) { 1078 alert('Policies cannot be issued for longer than 365 days.'); 1079 return; 1080 } 1081 buy.modelData.enterDate = parseInt(enterDatex.getTime() / 1000, 10); 1082 buy.modelData.exitDate = parseInt(exitDatex.getTime() / 1000, 10); 1083 buy.modelData.numDays = numDays; 1084 buy.step4(); 1085 return false; 1086 }); 1087 $(document).scrollTop(buy.TOP); 1088 }); 1089}; 1090 1091buy.step4 = function() { 1092 buy.initStep(4); 1093 1094 buy.rpc({ method: 'getStepHtml', step: 4, model: $.JSON.encode(buy.modelData) }, function(o) { 1095 1096 buy.modelData = o.model; 1097 buy.layout2(4, o.html); 1098 $('#col3').hide(); 1099 /* 1100 if (!buy.modelData.carrier) { 1101 if (buy.modelData.policyType === 'maxhigh') { 1102 buy.modelData.policyType = 'liahigh'; 1103 } 1104 $('#max-coverage').hide(); 1105 } 1106 */ 1107 1108 // Hide the Max Coverage options and select Liability High if vehicle is 1109 // not eligible for Max Coverage 1110 if (!buy.modelData.eligibleForMaxCoverage) { 1111 $('#max-coverage').hide(); 1112 if (buy.modelData.policyType === 'maxhigh' || buy.modelData.policyType === 'maxlow') { 1113 buy.modelData.policyType = 'liahigh'; 1114 } 1115 } 1116 1117 $('#'+buy.modelData.policyType).attr('checked', 'checked'); 1118 1119 var enterDate = buy.modelData.enterDate; 1120 var exitDate = buy.modelData.exitDate; 1121 var numDays = buy.modelData.numDays; 1122 1123 var formatter = new AnyTime.Converter({ format: '%M %d %Y, %l:00 %p'}); 1124 1125 function updateDates() { 1126 var d = new Date(exitDate*1000); 1127 $('#display-exit-date').html(formatter.format(d)); 1128 $('#display-numdays').html(numDays); 1129 } 1130 1131 $('#maxlow').click(function() { 1132 enterDate = buy.modelData.enterDate; 1133 exitDate = buy.modelData.exitDate; 1134 numDays = buy.modelData.numDays; 1135 updateDates(); 1136 }); 1137 $('#maxhigh').click(function() { 1138 enterDate = buy.modelData.enterDate; 1139 exitDate = buy.modelData.exitDate; 1140 numDays = buy.modelData.numDays; 1141 updateDates(); 1142 }); 1143 $('#maxlowA').click(function() { 1144 exitDate = enterDate + 365 * 86400; 1145 numDays = 365; 1146 updateDates(); 1147 }); 1148 $('#maxhighA').click(function() { 1149 exitDate = enterDate + 365 * 86400; 1150 numDays = 365; 1151 updateDates(); 1152 }); 1153 $('#lialow').click(function() { 1154 enterDate = buy.modelData.enterDate; 1155 exitDate = buy.modelData.exitDate; 1156 numDays = buy.modelData.numDays; 1157 updateDates(); 1158 }); 1159 $('#liahigh').click(function() { 1160 enterDate = buy.modelData.enterDate; 1161 exitDate = buy.modelData.exitDate; 1162 numDays = buy.modelData.numDays; 1163 updateDates(); 1164 }); 1165 $('#lialowA').click(function() { 1166 exitDate = enterDate + 365 * 86400; 1167 numDays = 365; 1168 updateDates(); 1169 }); 1170 $('#liahighA').click(function() { 1171 exitDate = enterDate + 365 * 86400; 1172 numDays = 365; 1173 updateDates(); 1174 }); 1175 $('#step4-continue').click(function() { 1176 buy.modelData.policyType = $('input:radio[name=group1]:checked').val(); 1177 1178 if(buy.modelData.policyType == 'lialowA' || buy.modelData.policyType == 'liahighA' || buy.modelData.policyType == 'maxlowA' 1179 || buy.modelData.policyType == 'maxhighA' ) 1180 { 1181 buy.modelData.fee = buy.modelData.feeA; 1182 } 1183 1184 var d = new Date(exitDate*1000); 1185 buy.modelData.exitDate = exitDate; 1186 buy.modelData.exitYear = d.getFullYear(); 1187 buy.modelData.exitMonth = d.getMonth()+1; 1188 buy.modelData.exitDay = d.getDate(); 1189 buy.modelData.exitHour = d.getHours(); 1190 buy.modelData.exitMinute = 0; 1191 buy.modelData.exitSecond = 0; 1192 buy.modelData.numDays = numDays; 1193 1194 d = new Date(enterDate*1000); 1195 buy.modelData.enterHour = d.getHours(); 1196 buy.step5(); 1197 }); 1198 $('#step4-back').click(function() { 1199 buy.step3(); 1200 }); 1201 $(document).scrollTop(buy.TOP); 1202 if (parseInt(buy.modelData.power,10) === 2) { 1203 $('.motorcycle').hide(); 1204 $('#max-coverage').hide(); 1205 } 1206 }); 1207}; 1208 1209buy.step5 = function() { 1210 buy.initStep(5); 1211 buy.rpc({ method: 'getStepHtml', step: 5, model: $.JSON.encode(buy.modelData) }, function(o) { 1212 buy.layout3(5, o.html); 1213 $('#col3').hide(); 1214 1215 var fields = {}, fieldName, fieldNdx; 1216 var requiredFields = ['firstname', 'lastname', 'email', 'phone2', 'address', 'address2', 'city', 'state', 'zip', 'country']; 1217 var optionalFields = ['lname', 'laddress', 'laddress2', 'lcity', 'lstate', 'lzip', 'lcountry']; 1218 var fieldNames = { 1219 firstname: 'First Name', 1220 lastname: 'Last Name', 1221 phone2: 'Phone', 1222 address: 'Address', 1223 city: 'City', 1224 state: 'State', 1225 zip: 'Zip', 1226 country: 'Country', 1227 lname: 'Bank Name', 1228 laddress: 'Bank Address', 1229 lcity: 'Bank City', 1230 lstate: 'Bank State', 1231 lzip: 'Bank Zip', 1232 lcountry: 'Bank Country' 1233 }; 1234 1235 for (fieldNdx in requiredFields) { 1236 1237 fieldName = requiredFields[fieldNdx]; 1238 fields[fieldName] = new buy.FormField({ 1239 id: fieldName, 1240 value: buy.modelData[fieldName], 1241 listeners: { 1242 change: function() { 1243 var id = this.id; 1244 buy.modelData[id]= this.getValue(); 1245 if (buy.modelData[id].length) { 1246 this.markValid(true); 1247 } 1248 else { 1249 buy.modelData[id] = undefined; 1250 this.markRequired(); 1251 } 1252 }, 1253 blur: function() { 1254 var id = this.id; 1255 buy.modelData[id] = this.getValue(); 1256 if (buy.modelData[id].length) { 1257 this.markValid(true); 1258 } 1259 else { 1260 buy.modelData[id] = undefined; 1261 this.markRequired(); 1262 } 1263 } 1264 1265 } 1266 }); 1267 fields[fieldName].enable(); 1268 } 1269 1270 for (fieldNdx in optionalFields) { 1271 fieldName = optionalFields[fieldNdx]; 1272 fields[fieldName] = new buy.FormField({ 1273 id: fieldName, 1274 disabled: true, 1275 value: buy.modelData[fieldName], 1276 listeners: { 1277 change: function() { 1278 var id = this.id; 1279 buy.modelData[id]= this.getValue(); 1280 if (buy.modelData[id].length) { 1281 this.markValid(true); 1282 } 1283 else { 1284 buy.modelData[id] = undefined; 1285 this.markRequired(); 1286 } 1287 }, 1288 blur: function() { 1289 var id = this.id; 1290 buy.modelData[id] = this.getValue(); 1291 if (buy.modelData[id].length) { 1292 this.markValid(true); 1293 } 1294 else { 1295 buy.modelData[id] = undefined; 1296 this.markRequired(); 1297 } 1298 } 1299 1300 } 1301 }) 1302 } 1303 1304 function checkEnabled() { 1305 var fieldName, fieldNdx; 1306 if (buy.modelData.lEnabled) { 1307 for (fieldNdx in optionalFields) { 1308 fieldName = optionalFields[fieldNdx]; 1309 fields[fieldName].enable(); 1310 fields[fieldName].markRequired(); 1311 } 1312 } 1313 else { 1314 for (fieldNdx in optionalFields) { 1315 fieldName = optionalFields[fieldNdx]; 1316 fields[fieldName].setValue(''); 1317 fields[fieldName].disable(); 1318 fields[fieldName].markConfirmed(); 1319 } 1320 } 1321 } 1322 checkEnabled(); 1323 1324 $('#step5-back').click(function() { 1325 buy.step4(); 1326 }); 1327 1328 $('#step5-continue').click(function() { 1329 if (!buy.modelData.lEnabled) { 1330 buy.modelData.lname= undefined; 1331 buy.modelData.laddress = undefined; 1332 buy.modelData.laddress2 = undefined; 1333 buy.modelData.lcity = undefined; 1334 buy.modelData.lstate = undefined; 1335 buy.modelData.lzip = undefined; 1336 buy.modelData.lcountry = undefined; 1337 } 1338 1339 var emsg = []; 1340 var fieldNdx, fieldName; 1341 1342 var testFields = requiredFields.concat(buy.modelData.lEnabled ? optionalFields: []); 1343 for (fieldNdx in testFields) { 1344 fieldName = testFields[fieldNdx]; 1345 if (fieldNames[fieldName] && buy.modelData[fieldName] === undefined) { 1346 emsg.push('* ' + fieldNames[fieldName] + ' is required'); 1347 } 1348 else if (fieldName === 'state' && buy.modelData.state.length != 2) { 1349 emsg.push('* only 2 character abbreviations for states allowed, like "CA" for California.'); 1350 } 1351 } 1352 if (buy.modelData.email && buy.modelData.email.length) { 1353 var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/; 1354 if (!filter.test(buy.modelData.email)) { 1355 emsg.push('* Please enter a valid email address'); 1356 } 1357 } 1358 if (emsg.length) { 1359 alert('Please fix these errors before you can continue:\n\n' + emsg.join('\n')); 1360 return; 1361 } 1362 buy.step6(); 1363 }); 1364 1365 $('#lEnabled').change(function() { 1366 buy.modelData.lEnabled = $('#lEnabled').attr('checked'); 1367 checkEnabled(); 1368 }); 1369 $(document).scrollTop(buy.TOP); 1370 }); 1371}; 1372 1373buy.step6 = function() { 1374 buy.initStep(6); 1375 buy.rpc({ method: 'getStepHtml', step: 6, model: $.JSON.encode(buy.modelData) }, function(o) { 1376 buy.layout3(6, o.html); 1377 $('#col3').hide(); 1378 $('#step6-continue').click(function() { 1379 buy.step7(); 1380 }); 1381 $('#step6-back').click(function() { 1382 buy.step5(); 1383 }); 1384 $(document).scrollTop(buy.TOP); 1385 }); 1386}; 1387 1388buy.step7 = function() { 1389 buy.initStep(7); 1390 buy.rpc({ method: 'getStepHtml', step: 7 }, function(o) { 1391 buy.layout2(7, o.html); 1392 $('#col3').hide(); 1393 $('#step7-continue').click(function() { 1394 if (!$('#step7-agree').attr('checked')) { 1395 alert('You must check the "I agree to terms" checkbox to proceed.'); 1396 return; 1397 } 1398 buy.step8(); 1399 }) 1400 $('#step7-back').click(function() { 1401 buy.step6(); 1402 }); 1403 $(document).scrollTop(buy.TOP); 1404 }); 1405}; 1406 1407buy.step8 = function() { 1408 buy.initStep(8); 1409 buy.rpc({ method: 'getStepHtml', step: 8, model: $.JSON.encode(buy.modelData) }, function(o) { 1410 buy.layout3(8, o.html); 1411 $('#col3').hide(); 1412 1413 $('#step8-back').click(function() { 1414 buy.step7(); 1415 }); 1416 1417 var thisYear = new Date().getFullYear(); 1418 var thisMonth = new Date().getMonth() + 1; 1419 1420 $.extend(buy.modelData, { 1421 cardType: buy.modelData.cardType || 'Visa', 1422 cardNumber: buy.modelData.cardNumber || undefined, 1423 cardMonth: buy.modelData.cardMonth || undefined, 1424 cardYear: buy.modelData.cardYear || undefined, 1425 cardFirstname: buy.modelData.cardFirstname || buy.modelData.firstname, 1426 cardLastname: buy.modelData.cardLastname || buy.modelData.lastname, 1427 cardPhone: buy.modelData.cardPhone || buy.modelData.phone2, 1428 cardAddress: buy.modelData.cardAddress || buy.modelData.address, 1429 cardAddress2: buy.modelData.cardAddress2 || buy.modelData.address2, 1430 cardCity: buy.modelData.cardCity || buy.modelData.city, 1431 cardState: buy.modelData.cardState || buy.modelData.state, 1432 cardZip: buy.modelData.cardZip || buy.modelData.zip, 1433 cardCountry: buy.modelData.cardCountry || buy.modelData.country 1434 }); 1435 1436 var required
1436Fields = [ 1437 'cardType', 1438 'cardNumber', 1439 //'cardMonth', 1440 //'cardYear', 1441 'cardFirstname', 1442 'cardLastname', 1443 'cardPhone', 1444 'cardAddress', 1445 'cardAddress2', 1446 'cardCity', 1447 'cardState', 1448 'cardZip', 1449 'cardCountry' 1450 ]; 1451 var fieldNames = { 1452 cardType: 'Card Type', 1453 cardNumber: 'Card Number', 1454 //cardMonth: 'Card Expiration', 1455 //cardYear: 'Card Expiration', 1456 cardFirstname: 'First Name', 1457 cardLastname: 'Last Name', 1458 cardPhone: 'Phone', 1459 cardAddress: 'Address', 1460 cardCity: 'City', 1461 cardState: 'State', 1462 cardZip: 'Zip', 1463 cardCountry: 'Country' 1464 }; 1465 1466 function validateExipirationDate() { 1467 var month = cardMonth.getValue(); 1468 var year = cardYear.getValue(); 1469 if (month === undefined || !month.length) { 1470 cardYear.markRequired(); 1471 return 'Expiration month is required'; 1472 } 1473 if (year === undefined || !year.length) { 1474 cardYear.markRequired(); 1475 return 'Expiration year is required'; 1476 1477 } 1478 month = parseInt(month, 10); 1479 year = parseInt(year, 10); 1480 1481 if (year === thisYear && month < thisMonth) { 1482 cardYear.markRequired('Expired'); 1483 return "Expiration Date is in the past"; 1484 } 1485 cardYear.markValid(true); 1486 buy.modelData.cardMonth = month; 1487 buy.modelData.cardYear = year; 1488 return true; 1489 } 1490 1491 var cardMonth = new buy.FormField({ 1492 id: 'cardMonth', 1493 value: buy.modelData.cardMonth, 1494 listeners: { 1495 change: validateExipirationDate 1496 } 1497 }); 1498 var cardYear = new buy.FormField({ 1499 id: 'cardYear', 1500 value: buy.modelData.cardYear, 1501 listeners: { 1502 change: validateExipirationDate 1503 } 1504 }); 1505 1506 var fields = {}; 1507 var fieldNdx, fieldName; 1508 for (fieldNdx in requiredFields) { 1509 fieldName = requiredFields[fieldNdx]; 1510 fields[fieldName] = new buy.FormField({ 1511 id: fieldName, 1512 disabled: false, 1513 value: buy.modelData[fieldName], 1514 listeners: { 1515 change: function() { 1516 var id = this.id; 1517 buy.modelData[id]= this.getValue(); 1518 if (buy.modelData[id].length) { 1519 this.markValid(true); 1520 } 1521 else { 1522 buy.modelData[id] = undefined; 1523 this.markRequired(); 1524 } 1525 }, 1526 blur: function() { 1527 var id = this.id; 1528 buy.modelData[id] = this.getValue(); 1529 if (buy.modelData[id].length) { 1530 this.markValid(true); 1531 } 1532 else { 1533 buy.modelData[id] = undefined; 1534 this.markRequired(); 1535 } 1536 } 1537 1538 } 1539 }); 1540 fields[fieldName].enable(); 1541 } 1542 1543 var e = $('#step8-continue'); 1544 function submitHandler() { 1545 $('#step8-continue').bind('click', function(){return false;}); 1546 1547 var emsg = []; 1548 1549 var msg = validateExipirationDate(); 1550 if (msg !== true) { 1551 emsg.push('* ' + msg); 1552 } 1553 for (fieldNdx in requiredFields) { 1554 fieldName = requiredFields[fieldNdx]; 1555 if (fieldNames[fieldName] && buy.modelData[fieldName] === undefined) { 1556 emsg.push('* ' + fieldNames[fieldName] + ' is required'); 1557 } 1558 } 1559 if (emsg.length) { 1560 alert('Please fix these errors before you can continue:\n\n' + emsg.join('\n')); 1561 return; 1562 } 1563 1564 1565 pay.rpc({ 1566 method: 'payment', 1567 model: $.JSON.encode(buy.modelData), 1568 'cf-turnstile-response': window.cftToken 1569 }, function(o) { 1570 if (!o.success) { 1571 console.error(o); 1572 alert(o.message); 1573 return; 1574 } 1575 var elen = o.errors.length; 1576 var emsg = []; 1577 if (elen == 1) { 1578 console.error(o); 1579 emsg.push('There was an error in processing your credit card:\n'); 1580 } 1581 else if (elen > 1) { 1582 console.error(o); 1583 emsg.push('There were errors in processing your credit card:\n'); 1584 } 1585 if (elen) { 1586 e.bind('click',submitHandler); 1587 //$('#step8-continue').attr('disabled', false); 1588 alert(emsg.concat(o.errors).join('\n')); 1589 return; 1590 } 1591 buy.modelData = o.model; 1592 buy.step9(); 1593 //alert(o.message); 1594 }); 1595 } 1596 e.bind('click',submitHandler); 1597 $(document).scrollTop(buy.TOP); 1598 }); 1599}; 1600 1601buy.step9 = function() { 1602 buy.initStep(9); 1603 buy.rpc({ method: 'getStepHtml', step: 9, model: $.JSON.encode(buy.modelData) }, function(o) { 1604 buy.layout3(9, o.html); 1605 $('#col3').hide(); 1606 //window.location = '/pdf/' + buy.modelData.policyId + '.pdf'; 1607 }); 1608}; 1609 1610$(document).ready(function() { 1611 // breadcrumb-step 1612 // active-step, completed-step 1613 1614 for (var s=1; s<10; s++) { 1615 $('#breadcrumb-step'+s).click(function() {}); //[s], function(e) { 1616 // e.preventDefault(); 1617 // //var fn = 'step'+this.id.replace(/breadcrumb-step/, ''); 1618 // //buy[fn] && buy[fn](); 1619 //}); 1620 } 1621 //$(window).bind('beforeunload', function() { 1622 // return 'If you choose to navigate away from this page, you will lose all information you have entered for all steps.'; 1623 //}); 1624 buy.step1(); 1625 1626}); 1627
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.