PageSourceSearch

https://yamahagolfcar.com/scripts/general_2023.js?v=1791059641

js yamahagolfcar.com collected 2026-10-03 20:34:42 UTC 147,148 bytes, 4,285 lines download raw bytes

1// JavaScript Document
2//// //prelaunch comments designate known code issues
3
4// copyright SiteDoneRite
5
6//////////////////////////////////////////
7///////// this function is used to clean filenames when uploading an image or file.
8///////// it mimics a php function in the imageUpload library, this is the client side mirror of it
9////////////////////////////////////////
10
11function cleanFileName(filename) {
12  var illegal_chars = new Array(
13    "`",
14    "~",
15    "!",
16    "@",
17    "#",
18    "$",
19    "%",
20    "^",
21    "&",
22    "=",
23    "_",
24    "*",
25    "(",
26    ")",
27    "+",
28    "[",
29    "{",
30    "]",
31    "}",
32    "|",
33    ";",
34    ":",
35    "'",
36    '"',
37    ",",
38    "<",
39    ">",
40    "/",
41    "?",
42    " "
43  );
44
45  for (var i = 0; i < illegal_chars.length; i++) {
46    var q = new RegExp("\\" + illegal_chars[i], "g");
47    filename = filename.replace(q, "-");
48  }
49
50  //alert(filename)
51  return filename;
52} // end cleanFileName function
53
54//////////////////////////////////////////
55///////// Send Email to lead ////////////////////
56////////////////////////////////////////
57//// prelaunch
58function sendEmail(id) {
59  var id = id;
60  var subject = jQuery("#subject-" + id).attr("value");
61  // get content of mce editor
62
63  //var content = ajaxMCEGet(id);
64  var content = jQuery("#emailContent-" + id).val();
65  //alert(content);
66  content = content.replace(/%/, "&#37;");
67
68  var content = encodeURIComponent(content);
69
70  var response = jQuery.ajax({
71    type: "POST",
72    url: domain + "ajax/ajax-SendEmailToLead.php",
73    data: "id=" + id + "&content=" + content + "&subject=" + subject,
74    error: function () {
75      alert("lead status not changed, please contact adminstrator");
76      //alertResponse(response);
77    },
78    success: function () {
79      if (response.responseText) {
80        // if opened image is 'closed', change opened image from closed to open
81        alert("Email has been sent");
82        //alert(response.responseText);
83      } else {
84        alert("Email has not been sent");
85        alert(response.responseText);
86      }
87    },
88  });
89  return false;
90}
91
92//////////////////////////////////////////
93///////// Delete Image from Inventory ////////////////////
94//// this should be moved to sdr system inventory management system
95////////////////////////////////////////
96function deleteImage(id) {
97  var id = id;
98
99  var response = jQuery.ajax({
100    type: "POST",
101    url: domain + "ajax/ajax-DeleteInvImage.php",
102    data: "id=" + id,
103    beforeSend: function () {
104      var ok = confirm("Are you sure want to Delete This Image?");
105
106      if (!ok) {
107        return false;
108      }
109    },
110    error: function () {
111      alert("Image has not been deleted. Please try again or contact SDR");
112      alertResponse(response.responseText);
113    },
114    success: function () {
115      // here we change the image trigger value so the php script knows to re-pro zip files
116      jQuery("#image_trigger").attr("value", "1");
117
118      // make the image table invisible
119      jQuery("#image-table-" + id).remove();
120    },
121  });
122  return false;
123}
124
125//////////////////////////////////////////
126///////// Delete Image from warranty claim ////////////////////
127////////////////////////////////////////
128function deleteWarrantyClaimImage(id) {
129  var id = id;
130
131  var response = jQuery.ajax({
132    type: "POST",
133    url: domain + "ajax/ajax-DeleteWarrantyClaimImage.php",
134    data: "id=" + id,
135    beforeSend: function () {
136      var ok = confirm("Are you sure want to Delete This Image?");
137
138      if (!ok) {
139        return false;
140      }
141    },
142    error: function () {
143      alert("Image has not been deleted. Please try again or contact SDR");
144      alertResponse(response.responseText);
145    },
146    success: function () {
147      // here we change the image trigger value so the php script knows to re-pro zip files
148      jQuery("#image_trigger").attr("value", "1");
149
150      // make the image table invisible
151      jQuery("#image-table-" + id).remove();
152    },
153  });
154  return false;
155}
156
157//////////////////////////////////////////
158///////// Delete Image from warranty claim ////////////////////
159////////////////////////////////////////
160function deleteLocationImage(id) {
161  var id = id;
162
163  var response = jQuery.ajax({
164    type: "POST",
165    url: domain + "Location-Manager.php?action=image_delete",
166    data: "id=" + id,
167    beforeSend: function () {
168      var ok = confirm("Are you sure want to Delete This Image?");
169
170      if (!ok) {
171        return false;
172      }
173    },
174    error: function () {
175      alert("Image has not been deleted. Please try again or contact SDR");
176      alertResponse(response.responseText);
177    },
178    success: function () {
179      // here we change the image trigger value so the php script knows to re-pro zip files
180      jQuery("#image_trigger").attr("value", "1");
181
182      // make the image table invisible
183      jQuery("#image-table-" + id).remove();
184    },
185  });
186  return false;
187}
188
189//////////////////////////////////////////
190///////// Delete Image from Inventory ////////////////////
191////////////////////////////////////////
192function deleteBlogImage(id) {
193  var id = id;
194  var response = jQuery.ajax({
195    type: "POST",
196    url: domain + "ajax/ajax-DeleteBlogImage.php",
197    data: "id=" + id,
198    beforeSend: function () {
199      var ok = confirm("Are you sure want to Delete This Image?");
200
201      if (!ok) {
202        return false;
203      }
204    },
205    error: function () {
206      alert("Image has not been deleted. Please try again or contact SDR");
207      alertResponse(response.responseText);
208    },
209    success: function () {
210      // make the image table invisible
211      jQuery("#image-table-" + id).remove();
212    },
213  });
214  return false;
215}
216
217//////////////////////////////////////////
218///////// Delete page content confirmaiton
219////////////////////////////////////////
220
221function deletePageContentConfirm(id) {
222  var answer = confirm("Are you sure you want to delete this Content Page?");
223  if (answer) {
224    jQuery("#action-" + id).attr("value", "delete");
225  } else {
226    alert("Content has not been deleted. Resume Editing.");
227  }
228}
229
230//////////////////////////////////////////
231///////// Rotate an image ////////////////////
232////////////////////////////////////////
233function rotateImage(file, degrees, id) {
234  var folderID = jQuery("#folderID").attr("value");
235  var fileID = file.split(".");
236  // set image to loader
237  var imgURL = domain + "images/styleElements/loader100px.gif";
238  jQuery("#image-" + id).attr("src", imgURL);
239  var response = jQuery.ajax({
240    type: "POST",
241    url: domain + "ajax/ajax-ImageRotate.php",
242    data: "file=" + file + "&degrees=" + degrees + "&folderID=" + folderID,
243    beforeSend: function () {},
244    error: function () {
245      alert("Image has not been rotated. Please try again or contact SDR");
246      alert(response.responseText);
247    },
248    success: function () {
249      // show the new image
250      // have to use random query string to keep from caching.... hopefully?
251      var randomnumber = Math.floor(Math.random() * 11);
252      var newImgURL =
253        domain +
254        "images/inventoryImages/" +
255        folderID +
256        "/180px/" +
257        file +
258        "?id=" +
259        randomnumber;
260
261      // here we change the image trigger value so the php script knows to re-pro zip files
262      jQuery("#image_trigger").attr("value", "1");
263
264      //alert(response.responseText);
265      jQuery("#image-" + id).attr("src", newImgURL);
266    },
267  });
268  return false;
269}
270
271//////////////////////////////////////////
272///////// Rotate an image ////////////////////
273////////////////////////////////////////
274function rotateLocationImage(file, degrees, id) {
275  var folderID = jQuery("#location_id").attr("value");
276  var fileID = file.split(".");
277  // set image to loader
278  var imgURL = domain + "images/styleElements/loader100px.gif";
279  jQuery("#image-" + id).attr("src", imgURL);
280  var response = jQuery.ajax({
281    type: "POST",
282    url: domain + "Location-Manager.php?action=image_rotate",
283    data: "file=" + file + "&degrees=" + degrees + "&folderID=" + folderID,
284    beforeSend: function () {},
285    error: function () {
286      alert("Image has not been rotated. Please try again or contact SDR");
287      alert(response.responseText);
288    },
289    success: function () {
290      // show the new image
291      // have to use random query string to keep from caching.... hopefully?
292      var randomnumber = Math.floor(Math.random() * 11);
293      var newImgURL =
294        domain +
295        "images/images_location/" +
296        folderID +
297        "/640px/" +
298        file +
299        "?id=" +
300        randomnumber;
301
302      // here we change the image trigger value so the php script knows to re-pro zip files
303      jQuery("#image_trigger").attr("value", "1");
304
305      //alert(response.responseText);
306      jQuery("#image-" + id).attr("src", newImgURL);
307    },
308  });
309  return false;
310}
311
312// sets the value of the hidden field to reflect the submit button clicked
313function submitV(value) {
314  document.forms["mainForm"].elements["submitValue"].value = value;
315}
316
317function success(msg, id) {
318  jQuery("#success" + id).empty();
319  jQuery("#success" + id).append(msg);
320  jQuery("#failBox" + id).css("display", "none");
321  jQuery("#fail" + id).empty();
322  jQuery("#successBox" + id).css("display", "block");
323  jQuery("#loadingWheel").fadeTo("medium", 0.0);
324}
325
326function fail(msg, id) {
327  jQuery("#fail" + id).empty();
328  jQuery("#fail" + id).append(msg);
329  jQuery("#successBox" + id).css("display", "none");
330  jQuery("#success" + id).empty();
331  jQuery("#failBox" + id).css("display", "block");
332  jQuery("#loadingWheel" + id).fadeTo("medium", 0.0);
333}
334
335///////////////////////
336////
337//// This function is used for inserting text into a textarea at the cursor position
338////
339//// http://www.scottklarr.com/topic/425/how-to-insert-text-into-a-textarea-where-the-cursor-is/
340////////////////////////
341
342function insertAtCaret(areaId, text) {
343  var txtarea = document.getElementById(areaId);
344  var scrollPos = txtarea.scrollTop;
345  var strPos = 0;
346  var br =
347    txtarea.selectionStart || txtarea.selectionStart == "0"
348      ? "ff"
349      : document.selection
350      ? "ie"
351      : false;
352
353  if (br == "ie") {
354    txtarea.focus();
355    var range = document.selection.createRange();
356    range.moveStart("character", -txtarea.value.length);
357    strPos = range.text.length;
358  } else if (br == "ff") strPos = txtarea.selectionStart;
359
360  var front = txtarea.value.substring(0, strPos);
361  var back = txtarea.value.substring(strPos, txtarea.value.length);
362  txtarea.value = front + text + back;
363  strPos = strPos + text.length;
364  if (br == "ie") {
365    txtarea.focus();
366    var range = document.selection.createRange();
367    range.moveStart("character", -txtarea.value.length);
368    range.moveStart("character", strPos);
369    range.moveEnd("character", 0);
370    range.select();
371  } else if (br == "ff") {
372    txtarea.selectionStart = strPos;
373    txtarea.selectionEnd = strPos;
374    txtarea.focus();
375  }
376  txtarea.scrollTop = scrollPos;
377
378  //jQuery("#txtarea").wysiwyg('setContent');
379}
380
381// Get Cookie Values
382function getCookieValue(cookieName) {
383  const allCookies = document.cookie.split("; ");
384  const foundCookie = allCookies.find((cookie) =>
385    cookie.startsWith(cookieName + "=")
386  );
387  return foundCookie ? decodeURIComponent(foundCookie.split("=")[1]) : null;
388}
389
390function appendRecaptchaToken(form, token, action) {
391  return new Promise(async (resolve) => {
392    // Create a new input element
393    let hiddenInput = document.createElement("input");
394    // Set the type attribute to hidden
395    hiddenInput.type = "hidden";
396    // Set the name and value attributes
397    hiddenInput.name = "recaptcha_token";
398    hiddenInput.value = token;
399
400    // Append the hidden input to the form
401    $(form).append(hiddenInput);
402
403    // Append the action to the form
404    if (action) {
405      let hiddenInputAction = document.createElement("input");
406      hiddenInputAction.type = "hidden";
407      hiddenInputAction.name = "recaptcha_action";
408      hiddenInputAction.value = action;
409      $(form).append(hiddenInputAction);
410    }
411
412    resolve();
413  });
414}
415
416function getDynamicRecaptchaToken(
417  action = "LEAD_SUBMISSION",
418  siteKey = "6Ldk-DQpAAAAAFAWJIWd986cNBAKF33dvu9rY1rH"
419) {
420  return new Promise((resolve, reject) => {
421    try {
422      grecaptcha.enterprise.ready(async () => {
423        const token = await grecaptcha.enterprise.execute(siteKey, {
424          action,
425        });
426        resolve(token);
427      });
428    } catch (error) {
429      reject(error);
430    }
431  });
432}
433
434////////////////////////////////////////////////
435//////////// jQuery Scripts //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
436////////////////////////////////////////////////////////
437
438///////////////////////////////////
439////////  Handles next and previous buttons within tabbed navigation
440//////////////////////////////////
441var currentTab = 0;
442
443/*
444    jQuery(function () {
445        jQuery("#ui-tabs-active").tabs({
446            select: function (e, i) {
447                currentTab = i.index;
448            }
449        });
450    });
451	
452    jQuery(document).on("click", ".next", function () {
453        var tabs = jQuery("#ui-tabs-active").tabs();
454		
455        var c = jQuery("ui-tabs-active").tabs.length;
456        currentTab = currentTab + 1;
457		tabs.tabs('option','active', currentTab);
458   });
459 jQuery(document).on("click", ".previous", function () {
460        var tabs = jQuery("#ui-tabs-active").tabs();
461		
462        var c = jQuery("ui-tabs-active").tabs.length;
463        currentTab = currentTab - 1;
464		tabs.tabs('option','active', currentTab);
465   });
466
467*/
468
469// enables javascript prior to files loading
470jQuery(document).ready(function () {
471  // if so we check to see if this is iPhone or iPad
472  if (
473    navigator.platform == "iPad" ||
474    navigator.platform == "iPhone" ||
475    navigator.platform == "iPod"
476  ) {
477    //jQuery("#admin_toolbar").css('position','static');
478    jQuery("#admin_toolbar").css("position", "relative");
479    jQuery("#feedback_button")
480      .css("position", "relative")
481      .css("width", "200px")
482      .css("bottom", "-1px")
483      .css("right", "-800px");
484  }
485
486  // this is a function that's supposed to provide a CSV export of leads or whatever else
487
488  //////  what the hell does this do?
489
490  jQuery.download = function (url, data, method) {
491    //alert("Im firing");
492
493    //url and data options required
494    if (url && data) {
495      //data can be string of parameters or array/object
496      data = typeof data == "string" ? data : jQuery.param(data);
497      //split params into form inputs
498      var inputs = "";
499      jQuery.each(data.split("&"), function () {
500        var pair = this.split("=");
501        inputs +=
502          '<input type="hidden" name="' +
503          pair[0] +
504          '" value="' +
505          pair[1] +
506          '" />';
507      });
508      //send request
509      jQuery(
510        '<form action="' +
511          url +
512          '" method="' +
513          (method || "post") +
514          '">' +
515          inputs +
516          "</form>"
517      )
518        .appendTo("body")
519        .submit()
520        .remove();
521    }
522  };
523
524  // Checks all checkboxes on page
525  jQuery("#checkAll").click(function () {
526    //alert(this.checked);
527    var checked_status = this.checked;
528    jQuery("INPUT[type='checkbox']").attr("checked", checked_status);
529  });
530
531  jQuery("body").on("click", ".save_this_build_details", function () {
532    //jQuery(".save_this_build_details").click(function(){
533
534    var build_id = jQuery(this).attr("build_id");
535    jQuery("#build_details_save_message_" + build_id)
536      .empty()
537      .html("Saving...");
538
539    var action = "save_build_details";
540    var production_number = jQuery("#production_number_" + build_id).val();
541    var hull_id = jQuery("#hull_id_" + build_id).val();
542    var load_no = jQuery("#load_no_" + build_id).val();
543    var last_changeable_date = jQuery(
544      "#last_changeable_date_" + build_id
545    ).val();
546    var production_start_date = jQuery(
547      "#production_start_date_" + build_id
548    ).val();
549    var projected_completion_date = jQuery(
550      "#projected_completion_date_" + build_id
551    ).val();
552    //var invoice_location = jQuery('#invoice_location_'+build_id).val();
553    //var payment_terms = jQuery('#payment_terms_'+build_id).val();
554
555    //alert(last_change_date);
556
557    var response = jQuery.ajax({
558      type: "GET",
559      url: domain + "Boat-Builder.php?action=save_build_details",
560      data:
561        "action=" +
562        action +
563        "&production_number=" +
564        production_number +
565        "&hull_id=" +
566        hull_id +
567        "&load_no=" +
568        load_no +
569        "&last_changeable_date=" +
570        last_changeable_date +
571        "&production_start_date=" +
572        production_start_date +
573        "&projected_completion_date=" +
574        projected_completion_date +
575        "&build_id=" +
576        build_id,
577      error: function () {
578        //jQuery('#envelope'+leadID).attr("src","../../images/envelopeOpen.png");
579        jQuery("#build_details_save_message_" + build_id)
580          .empty()
581          .html("NOT SAVED!!");
582        alert("build details not saved, please contact adminstrator");
583        alert(response.responseText);
584      },
585      success: function (del) {
586        //alert(response.responseText);
587        //alert('success');
588
589        jQuery("#build_details_save_message_" + build_id)
590          .empty()
591          .html("Saved");
592      },
593    });
594
595    return false;
596  });
597
598  ///////////////////////////////////
599  ////// toggles next and hides this
600  ///////////////////////////////////
601
602  jQuery(".toggle_next_hide_this").click(function () {
603    jQuery(this).css("display", "none");
604    jQuery(this).next().slideToggle("fast");
605
606    return false;
607  });
608
609  jQuery(".toggle_id_hide_this").click(function () {
610    jQuery(this).css("display", "none");
611    jQuery("#" + jQuery(this).attr("id_to_toggle")).slideToggle("fast");
612
613    return false;
614  });
615
616  jQuery(".show_next_hide_this").click(function () {
617    jQuery(this).css("display", "none");
618    jQuery(this).next().css("display", "block");
619
620    return false;
621  });
622
623  //// no idea what this is used for
624  //// prelaunch
625  jQuery("body").on("click", ".toggle_extra", function () {
626    jQuery("#print_" + jQuery(this).attr("build_id")).hide();
627    jQuery("#extra_" + jQuery(this).attr("build_id")).slideToggle();
628    jQuery("#extra2_" + jQuery(this).attr("build_id")).slideToggle();
629    jQuery("#extra3_" + jQuery(this).attr("build_id")).slideToggle();
630  });
631
632  jQuery("body").on("click", ".toggle_print", function () {
633    jQuery("#extra_" + jQuery(this).attr("build_id")).hide();
634    jQuery("#extra2_" + jQuery(this).attr("build_id")).hide();
635    jQuery("#extra3_" + jQuery(this).attr("build_id")).hide();
636    jQuery("#print_" + jQuery(this).attr("build_id")).slideToggle();
637
638    // this is used in part orders
639    //alert("#order-"+jQuery(this).attr('build_id'));
640    jQuery("html,body").animate({
641      scrollTop:
642        parseInt(
643          jQuery("#order-" + jQuery(this).attr("build_id")).offset().top
644        ) - 150,
645    });
646  });
647
648  jQuery("body").on("click", ".delete_build_confirm", function () {
649    if (!confirm("Are you sure want to Delete This Build?")) {
650      return false;
651    }
652  }); // end delete_build_confirm
653
654  jQuery("body").on("click", ".save_this_build_details_new", function () {
655    //alert('clicked save');
656
657    //jQuery(".save_this_build_details").click(function(){
658
659    var build_id = jQuery(this).attr("build_id");
660    var who_am_i = jQuery(this).attr("who_am_i");
661
662    var dateformat = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/;
663
664    jQuery("#build_details_save_message_" + build_id)
665      .empty()
666      .html("Saving...");
667    jQuery("#build_details_save_message_2_" + build_id)
668      .empty()
669      .html("Saving...");
670
671    var action = "save_build_details";
672
673    var build_status = jQuery("#build_status_" + build_id).val();
674    var production_number = encodeURIComponent(
675      jQuery("#production_number_" + build_id).val()
676    );
677    var hull_id = jQuery("#hull_id_" + build_id).val();
678    var load_no = encodeURIComponent(jQuery("#load_no_" + build_id).val());
679    var last_changeable_date = jQuery(
680      "#last_changeable_date_" + build_id
681    ).val();
682    var production_start_date = jQuery(
683      "#production_start_date_" + build_id
684    ).val();
685    var projected_completion_date = jQuery(
686      "#projected_completion_date_" + build_id
687    ).val();
688
689    if (last_changeable_date) {
690      if (last_changeable_date.match(dateformat) == false) {
691        alert("Invalid Date Value Entered");
692        return;
693      }
694    }
695
696    if (production_start_date) {
697      if (production_start_date.match(dateformat) == false) {
698        alert("Invalid Date Value Entered");
699        return;
700      }
701    }
702
703    var location_id = jQuery("#location_id_" + build_id).val();
704
705    if (
706      location_id == 0 ||
707      location_id == "0" ||
708      !location_id ||
709      location_id == ""
710    ) {
711      alert(
712        "NOT SAVED - issue with location_id, please send this build_id number: " +
713          build_id +
714          " to Rusty with SDR [email protected]"
715      );
716      return;
717    }
718
719    // this is actually PO
720    var build_load_number = encodeURIComponent(
721      jQuery("#build_load_number_" + build_id).val()
722    );
723    var customer_name = encodeURIComponent(
724      jQuery("#customer_name_" + build_id).val()
725    );
726    var customer_email = encodeURIComponent(
727      jQuery("#customer_email_" + build_id).val()
728    );
729    // Get checkbox value
730    if (jQuery("#d360_show_" + build_id).is(":checked")) {
731      var d360_show = 1;
732    } else {
733      var d360_show = 0;
734    }
735
736    var sor_order = jQuery("#sor_checkbox_" + build_id).is(":checked")
737      ? "1"
738      : "0";
739
740    var margin_base_boat = jQuery("#margin_base_boat_" + build_id).val();
741    var margin_options = jQuery("#margin_options_" + build_id).val();
742    var volume_discount = jQuery("#volume_discount_" + build_id).val();
743
744    var dealer_installed_titles = jQuery(".dealer_installed_title_" + build_id);
745    var dealer_installed_prices = jQuery(".dealer_installed_price_" + build_id);
746
747    //var build_status = jQuery('.dealer_installed_price_'+build_id);
748
749    var dealer_installed_title_holder = "";
750    var dealer_installed_price_holder = "";
751
752    jQuery(".dealer_installed_title_" + build_id).each(function () {
753      dealer_installed_title_holder +=
754        "&dealer_installed_title[]=" + encodeURIComponent(jQuery(this).val());
755    });
756    jQuery(".dealer_installed_price_" + build_id).each(function () {
757      dealer_installed_price_holder +=
758        "&dealer_installed_price[]=" + encodeURIComponent(jQuery(this).val());
759    });
760
761    if (who_am_i == "sales_dept") {
762      var data =
763        "&production_number=" +
764        production_number +
765        "&location_id=" +
766        location_id +
767        "&hull_id=" +
768        hull_id +
769        "&status=" +
770        build_status +
771        "&last_changeable_date=" +
772        last_changeable_date +
773        "&production_start_date=" +
774        production_start_date +
775        "&projected_completion_date=" +
776        projected_completion_date +
777        "&build_id=" +
778        build_id +
779        "&build_load_number=" +
780        build_load_number +
781        "&customer_name=" +
782        customer_name +
783        "&customer_email=" +
784        customer_email +
785        "&d360_show=" +
786        d360_show +
787        "&is_sor=" +
788        sor_order +
789        "&load_no=" +
790        load_no +
791        "&margin_base_boat=" +
792        margin_base_boat +
793        "&margin_options=" +
794        margin_options +
795        "&volume_discount=" +
796        volume_discount +
797        dealer_installed_title_holder +
798        dealer_installed_price_holder;
799    } else if (who_am_i == "dealer") {
800      var data =
801        "&customer_name=" +
802        customer_name +
803        "&build_id=" +
804        build_id +
805        "&status=" +
806        build_status +
807        "&build_load_number=" +
808        build_load_number +
809        "&customer_email=" +
810        customer_email +
811        "&d360_show=" +
812        d360_show +
813        "&margin_base_boat=" +
814        margin_base_boat +
815        "&margin_options=" +
816        margin_options +
817        "&location_id=" +
818        location_id +
819        "&volume_discount=" +
820        volume_discount +
821        dealer_installed_title_holder +
822        dealer_installed_price_holder;
823    }
824
825    //var invoice_location = jQuery('#invoice_location_'+build_id).val();
826    //var payment_terms = jQuery('#payment_terms_'+build_id).val();
827
828    //alert(last_change_date);
829    // console.log(data);
830
831    var response = jQuery.ajax({
832      type: "GET",
833      url: domain + "Boat-Builder.php?action=save_build_details",
834      data: "action=" + action + "&who_am_i=" + who_am_i + data,
835      error: function () {
836        //jQuery('#envelope'+leadID).attr("src","../../images/envelopeOpen.png");
837        jQuery("#build_details_save_message_" + build_id)
838          .empty()
839          .html("NOT SAVED!!");
840        jQuery("#build_details_save_message_2_" + build_id)
841          .empty()
842          .html("NOT SAVED!!");
843        alert("build details not saved, please contact adminstrator");
844        alert(response.responseText);
845      },
846      success: function (data) {
847        //alert(response.responseText);
848        //alert('success');
849        // console.log(data);
850
851        jQuery("#build_details_save_message_" + build_id)
852          .empty()
853          .html("Saved");
854        jQuery("#build_details_save_message_2_" + build_id)
855          .empty()
856          .html("Saved");
857      },
858    });
859
860    return false;
861  });
862
863  /////////////////////////////////////
864  ///// updates leads updated status ie, last opened////
865  ///////////////////////////////////////
866  function openLead(id) {
867    //alert(id);
868    var tableID = id;
869    var idSplit = tableID.split("-");
870    var leadID = idSplit[1];
871
872    var leadOpened = jQuery("#leadOpened-" + leadID).attr("value");
873    //alert(leadOpened);
874    //var str = jQuery(this).serialize();
875    //alert(leadID);
876    //alert(tableID);
877
878    // if this is a new lead or the lead is already open return success
879    if (leadID == 1234 || jQuery("#leadOpened-" + leadID).attr("value") == 1) {
880      return 1;
881    } else {
882      var response = jQuery.ajax({
883        type: "POST",
884        url: domain + "Leads.php?action=ajax_lead_open",
885        data: "id=" + leadID,
886        error: function () {
887          //jQuery('#envelope'+leadID).attr("src","../../images/envelopeOpen.png");
888          alert("lead status not changed, please contact adminstrator");
889          alert(response.responseText);
890        },
891        success: function (del) {
892          if (response.responseText == 1) {
893            // if opened image is 'closed', change opened image from closed to open
894            jQuery("#envelope" + leadID).attr(
895              "src",
896              domain + "images/icons/envelopeOpen.png"
897            );
898            jQuery("#leadOpened-" + leadID).attr("value", "1");
899            //alertResponse(response);
900          } else {
901            jQuery("#envelope" + leadID).attr(
902              "src",
903              domain + "images/icons/envelopeClosed.png"
904            );
905            //alertResponse(response);
906          }
907        },
908      });
909    }
910    return false;
911  }
912
913  //////////////////////////////////////////////////////////
914  // sets accordion behaviour on leads page////////////////
915  //////////////////////////////////////////////////////////
916
917  //jQuery('div.toggleDiv:eq(0)> div').hide();
918  jQuery("div.toggleDiv:eq(0)> table").click(function () {
919    // update leads updated status
920    openLead(jQuery(this).attr("id"));
921    jQuery(this).next().slideToggle("slow");
922  });
923
924  jQuery("div.toggleSmallDiv > table").click(function () {
925    jQuery(this).next().slideToggle("fast");
926  });
927
928  jQuery("div.toggleAdiv > a").click(function () {
929    jQuery(this).next().slideToggle("fast");
930    return false;
931  });
932
933  jQuery(".edit_this").click(function () {
934    // hides the info div
935    jQuery(this).parent().prev().toggle();
936    // shows the form
937    jQuery(this).parent().next().toggle();
938    // shows the save button
939    jQuery(this).prev().show();
940    // hides the edit button
941    jQuery(this).hide();
942  });
943
944  ///////////////////
945  /// hover color change for lead rows
946  ///////////////////
947  var tableRowClass = "rowWhite";
948
949  //// prelaunch
950  /*jQuery('#contents tr').hover(function() {
951  tableRowClass = jQuery(this).attr("class");
952  jQuery(this).removeClass(tableRowClass);
953  jQuery(this).addClass('hover');
954}, function() {
955  jQuery(this).removeClass('hover');
956  jQuery(this).addClass(tableRowClass);
957
958});
959*/
960  jQuery(".hover_these_rows").hover(
961    function () {
962      tableRowClass = jQuery(this).attr("class");
963      jQuery(this).removeClass(tableRowClass);
964      jQuery(this).addClass("hover");
965    },
966    function () {
967      jQuery(this).removeClass("hover");
968      jQuery(this).addClass(tableRowClass);
969    }
970  );
971
972  ////////////////////////
973  ///// handles what boat type to show on boat cat change
974  ///////////////////////
975
976  function fadeOut(idToFade) {
977    jQuery("#" + idToFade).fadeTo("medium", 0);
978    jQuery("#" + idToFade).css("display", "none");
979  }
980
981  function fadeIn(idToFade) {
982    jQuery("#" + idToFade).css("display", "block");
983    jQuery("#" + idToFade).fadeTo("medium", 1);
984  }
985
986  jQuery("#boatCat").change(function () {
987    // if new show new manu select list
988
989    var selected = jQuery("#boatCat option:selected").attr("value");
990
991    if (selected == 5) {
992      // fade out and turn off non needed boat types
993      fadeOut("power");
994      fadeOut("sail");
995      fadeOut("smallBoats");
996      // turn on new manu input and fade in
997      fadeIn("pwc");
998      fadeIn("boatType");
999    } else if (selected == 2) {
1000      // fade out and turn off non needed boat types
1001      fadeOut("pwc");
1002      fadeOut("sail");
1003      fadeOut("smallBoats");
1004      // turn on new manu input and fade in
1005      fadeIn("power");
1006      fadeIn("boatType");
1007    } else if (selected == 3) {
1008      // fade out and turn off non needed boat types
1009      fadeOut("pwc");
1010      fadeOut("power");
1011      fadeOut("smallBoats");
1012      // turn on new manu input and fade in
1013      fadeIn("sail");
1014      fadeIn("boatType");
1015    } else if (selected == 4) {
1016      // fade out and turn off non needed boat types
1017      fadeOut("pwc");
1018      fadeOut("power");
1019      fadeOut("sail");
1020      // turn on new manu input and fade in
1021      fadeIn("smallBoats");
1022      fadeIn("boatType");
1023    } else {
1024      // fade out all types
1025      fadeOut("pwc");
1026      fadeOut("power");
1027      fadeOut("sail");
1028      fadeOut("smallBoats");
1029      fadeOut("boatType");
1030    }
1031  });
1032
1033  ///////////////////
1034  /// Function to populate Email template editor upon change of drop down
1035  // this also populated the vars inside the template
1036  ///////////////////
1037
1038  jQuery("select.emailTemplate").change(function () {
1039    //alert (jQuery(this).attr('id'));
1040    // starts the loading wheel visual
1041    jQuery("#loadingWheel").fadeTo("medium", 1);
1042
1043    var selectId = jQuery(this).attr("id");
1044    var idSplit = selectId.split("-");
1045    var lead_id = idSplit[1];
1046
1047    //alert(selectId);
1048    //alert(leadID);
1049    //alert(salesman);
1050
1051    //alert('#name-'+leadID);
1052
1053    // these two are to be used for new leads
1054    var name = jQuery("#name-" + lead_id).attr("value");
1055    //var salesman 	= jQuery("#salesman-"+leadID+" option:selected").attr('value');
1056    var user_id = jQuery("#salesman-" + lead_id).attr("value");
1057
1058    //alert (name);
1059    //alert (salesman);
1060
1061    // this gets the value of the select box selected option
1062    var template_id = jQuery(
1063      "#emailTemplate-" + lead_id + " option:selected"
1064    ).attr("value");
1065
1066    //alert("uniqueID=" + templateID + "& leadID=" + leadID + "& name=" + name + "& salesman=" + salesman);
1067
1068    var response = jQuery.ajax({
1069      type: "POST",
1070      url: domain + "ajax/ajax-GetEmailTemplateBody.php",
1071      data:
1072        "template_id=" +
1073        template_id +
1074        "&lead_id=" +
1075        lead_id +
1076        "&name=" +
1077        name +
1078        "&user_id=" +
1079        user_id,
1080      error: function () {
1081        fail(
1082          "There has been an error retrieving the Email Template, please try again.  If problem persists please contact SDR."
1083        );
1084        //alertResponse(response);
1085      },
1086      success: function (del) {
1087        if (response.responseText) {
1088          //alertResponse(response);
1089
1090          var emailJSON = eval("(" + response.responseText + ")");
1091          var emailBody = emailJSON.emailBody;
1092
1093          //alert(emailBody);
1094          //eval("(" + jsonData1 + ")")
1095
1096          //alert(emailJSON.subject);
1097          jQuery("#subject-" + lead_id).attr("value", emailJSON.subject);
1098
1099          // populate textarea with response
1100          jQuery("#emailContent-" + lead_id).val(emailJSON.emailBody);
1101
1102          //jQuery("#emailContent-"+leadID).wysiwyg({
1103
1104          //jQuery("#emailContent-"+leadID + 'IFrame').contents().find('body').html(emailJSON.emailBody);
1105          jQuery("#emailContent-" + lead_id).wysiwyg(
1106            "setContent",
1107            emailJSON.emailBody
1108          );
1109
1110          //jQuery("#emailTemplate").value = response.responseText;
1111          //jQuery("#emailContent-"+leadID).append(" tab to view/edit this lead.");
1112
1113          //ajaxMCELoad(emailJSON.emailBody, leadID);
1114          jQuery("#loadingWheel").fadeTo("medium", 0);
1115        } else {
1116          alertResponse(response);
1117        }
1118      },
1119    });
1120
1121    return false;
1122  });
1123
1124  ///////////////////
1125  /// Function to help confirm an inventory item delets
1126  //  on success the buttons second level parent is removed from the page.
1127  ///////////////////
1128
1129  jQuery(".delete_this_item").click(function () {
1130    if (
1131      !confirm(
1132        "Are you sure you want to delete this product?\n\n It might be better take the item offline in the Price/Save tab. \n\n This delete is Permanant! You cannot undo this!! \n\n Are you sure you want to delete this product?"
1133      )
1134    ) {
1135      return false;
1136    }
1137  });
1138
1139  /////////////////
1140  // this funciton is used by the byb option system
1141  // it determines if a checkbox is checked or not, then fills the next() hidden input field with the proper value.
1142  //////////////////
1143
1144  jQuery(".checkbox_assign_next").click(function () {
1145    if (jQuery(this).attr("checked")) {
1146      // set the value of the next input field to 1
1147      jQuery(this).next().attr("value", "1");
1148    } else {
1149      // set the value of the next input field to 0
1150      jQuery(this).next().attr("value", "0");
1151    }
1152  });
1153
1154  jQuery(".clone_this_option_parent").click(function () {
1155    //alert(jQuery('.option_adder_table').html());
1156    jQuery(".option_adder").append("<hr /><hr /><h3>New Option</h3>");
1157    jQuery("#option_adder_table").clone(true).appendTo(".option_adder");
1158  });
1159
1160  jQuery(".clone_this_standard_parent").click(function () {
1161    //alert(jQuery('.standard_adder_table').html());
1162    jQuery(".standard_adder").append(
1163      "<hr /><hr /><h3>New Standard Feature</h3>"
1164    );
1165    jQuery("#standard_adder_table").clone(true).appendTo(".standard_adder");
1166  });
1167
1168  ///////////////////
1169  /// Function to delete a specific option by id number
1170  //  on success the buttons second level parent is removed from the page.
1171  ///////////////////
1172
1173  jQuery(".delete_this").click(function () {
1174    //alert (jQuery(this).attr('id'));
1175    // starts the loading wheel visual
1176    jQuery("#loadingWheel").fadeTo("medium", 1);
1177
1178    var parent = jQuery(this).parent();
1179
1180    var deleteId = jQuery(this).attr("id");
1181    var idSplit = deleteId.split("-");
1182    var optionId = idSplit[1];
1183
1184    //alert(optionId);
1185
1186    var response = jQuery.ajax({
1187      type: "POST",
1188      url: domain + "ajax/ajax-DeleteOption.php",
1189      data: {
1190        id: optionId,
1191        type: "option",
1192      },
1193      beforeSend: function () {
1194        var ok = confirm("Are you sure want to Delete This Option?");
1195        if (!ok) {
1196          return false;
1197        }
1198      },
1199      error: function () {
1200        fail(
1201          "There has been an error deleting this option, please try again.  If problem persists please contact SDR."
1202        );
1203        //alertResponse(response);
1204      },
1205      success: function (del) {
1206        if (response.responseText) {
1207          //alertResponse(response);
1208          //alert(jQuery(parent).parent().html());
1209          // here we remove the deleted element from the page to give a real time 'feel' to the page.
1210          jQuery(parent).parent().remove();
1211        } else {
1212          alertResponse(response);
1213        }
1214      },
1215    });
1216
1217    return false;
1218  });
1219
1220  ///////////////////
1221  /// Function to delete a specific standard by id number
1222  //  on success the buttons second level parent is removed from the page.
1223  ///////////////////
1224
1225  jQuery(".delete_this_standard").click(function () {
1226    //alert (jQuery(this).attr('id'));
1227    // starts the loading wheel visual
1228    jQuery("#loadingWheel").fadeTo("medium", 1);
1229
1230    var parent = jQuery(this).parent();
1231
1232    var deleteId = jQuery(this).attr("id");
1233    var idSplit = deleteId.split("-");
1234    var optionId = idSplit[1];
1235
1236    //alert(optionId);
1237
1238    var response = jQuery.ajax({
1239      type: "POST",
1240      url: domain + "ajax/ajax-DeleteOption.php",
1241      data: {
1242        id: optionId,
1243        type: "standard",
1244      },
1245      beforeSend: function () {
1246        var ok = confirm("Are you sure want to Delete This Standard Feature?");
1247        if (!ok) {
1248          return false;
1249        }
1250      },
1251      error: function () {
1252        fail(
1253          "There has been an error deleting this standard feature, please try again.  If problem persists please contact SDR."
1254        );
1255        //alertResponse(response);
1256      },
1257      success: function (del) {
1258        if (response.responseText) {
1259          //alertResponse(response);
1260          //alert(jQuery(parent).parent().html());
1261          // here we remove the deleted element from the page to give a real time 'feel' to the page.
1262          jQuery(parent).parent().remove();
1263        } else {
1264          alertResponse(response);
1265        }
1266      },
1267    });
1268
1269    return false;
1270  });
1271
1272  ///////////////////
1273  /// function just to get the email template subject, body..etc WITHOUT populating the vars
1274  /// used specifically on the Email-Templates.php page
1275  ///////////////////
1276
1277  jQuery("select.emailTemplateEditor").change(function () {
1278    //alert (jQuery(this).attr('value'));
1279    // starts the loading wheel visual
1280    jQuery("#loadingWheel").fadeTo("medium", 1);
1281
1282    var selectId = jQuery(this).attr("id");
1283    var templateID = jQuery(this).attr("value");
1284    var idSplit = selectId.split("-");
1285    var leadID = idSplit[1];
1286
1287    //alert(leadID);
1288    // this gets the value of the select box selected option
1289    //var templateID = jQuery("#emailTemplateEditor-1 option:selected").attr('value');
1290    //alert(templateID);
1291
1292    // if templateID == 0 clear the form (means new email template)
1293    if (templateID == "0") {
1294      // clear form
1295      resetForm("emailTemplateForm");
1296      jQuery("#id").attr("value", "0");
1297
1298      return false;
1299    }
1300
1301    var response = jQuery.ajax({
1302      type: "POST",
1303      url: domain + "ajax/ajax-GetEmailTemplateBody.php",
1304      data: "uniqueID=" + templateID + "&vars=1",
1305      error: function () {
1306        fail(
1307          "There has been an error retrieving the Email Template, please try again.  If problem persists please contact SDR."
1308        );
1309        //alertResponse(response);
1310      },
1311      success: function (del) {
1312        if (response.responseText) {
1313          //alert(response.responseText);
1314
1315          var emailJSON = eval("(" + response.responseText + ")");
1316          var emailSubject = emailJSON.subject;
1317          var emailBody = emailJSON.tpl_source;
1318          var emailName = emailJSON.name;
1319          var archived = emailJSON.archived;
1320          var emailId = emailJSON.id;
1321          //var emailSelected = emailJSON.selected;
1322
1323          //alert(emailBody);
1324          //eval("(" + jsonData1 + ")")
1325
1326          //alert(emailJSON.subject);
1327          jQuery("#id").attr("value", emailId);
1328          jQuery("#subject-" + leadID).attr("value", emailSubject);
1329
1330          jQuery("#templateName-" + leadID).attr("value", emailName);
1331
1332          if (archived == 1) {
1333            jQuery("#archived-1").attr("checked", "checked");
1334          } else if (archived == 0) {
1335            jQuery("#archived-0").attr("checked", "checked");
1336          }
1337
1338          //jQuery("input[name='radio_name']:checked").val();
1339          // populate textarea with response
1340          jQuery("#emailContent-" + leadID).val(emailBody);
1341
1342          //jQuery("#emailContent-"+leadID).wysiwyg({
1343
1344          //jQuery("#emailContent-"+leadID + 'IFrame').contents().find('body').html(emailJSON.emailBody);
1345          //jQuery("#emailContent-"+leadID).wysiwyg('setContent', emailBody);
1346
1347          //jQuery("#emailTemplate").value = response.responseText;
1348          //jQuery("#emailContent-"+leadID).append(" tab to view/edit this lead.");
1349
1350          //ajaxMCELoad(emailJSON.emailBody, leadID);
1351          jQuery("#loadingWheel").fadeTo("medium", 0);
1352        } else {
1353          alertResponse(response);
1354        }
1355      },
1356    });
1357
1358    return false;
1359  });
1360
1361  //////////////////////////////////////////
1362  ///////// Date and Time Picker ////////////////////
1363  ////////////////////////////////////////
1364
1365  jQuery(function () {
1366    if (jQuery(".datepicker").length) {
1367      jQuery(".datepicker").datepicker();
1368    }
1369
1370    jQuery("body").on("click", ".datepicker2", function () {
1371      // as an added bonus, if you are afraid of attaching the "datepicker"
1372      // multiple times, you can check for the "hasDatepicker" class...
1373      if (!jQuery(this).hasClass("hasDatepickerOFF")) {
1374        jQuery(this).datepicker();
1375        jQuery(this).datepicker("show");
1376      }
1377    });
1378  });
1379
1380  //jQuery(function() {
1381  //	jQuery(".timepicker").ptTimeSelect();
1382  //	});
1383
1384  //////////////////////////////////////////
1385  ///////// Content To Tabs ////////////////////
1386  ////////////////////////////////////////
1387  /*
1388jQuery(function() {
1389		jQuery("div.contentTabs").tabs();
1390		jQuery("div.addressTabs").tabs();
1391	});
1392*/
1393
1394  //// prelaunch
1395  // think this is deprecated
1396  jQuery("form#addSalesman-AJAX-ORIG").submit(function () {
1397    // disables the submit button
1398    var $that = jQuery(this);
1399    var submitButton = $that.find("input[type='submit']");
1400    jQuery(submitButton).attr("disabled", "disabled");
1401
1402    // starts the loading wheel visual
1403    jQuery("#loadingWheel").fadeTo("medium", 1);
1404
1405    // we want to store the values from the form input box, then send via ajax below
1406    var submitValue = jQuery("#submitValue").attr("value");
1407    var uniqueID = jQuery("#uniqueID").attr("value");
1408    var name = jQuery("#name").attr("value");
1409    var email = jQuery("#email").attr("value");
1410    var phone = jQuery("#phone").attr("value");
1411    var admin = jQuery("input:checked[type='radio'][name='admin']").attr(
1412      "value"
1413    );
1414    var leads = jQuery("input:checked[type='radio'][name='leads']").attr(
1415      "value"
1416    );
1417    var location = jQuery("#location option:selected").attr("value");
1418    var accessArray = jQuery("#accessArray option:selected").attr("value");
1419
1420    var response = jQuery.ajax({
1421      type: "POST",
1422      url: domain + "ajax/ajax-AddSalesman.php",
1423      data:
1424        "submitValue=" +
1425        submitValue +
1426        "&name=" +
1427        name +
1428        "& email=" +
1429        email +
1430        "& phone=" +
1431        phone +
1432        "& admin=" +
1433        admin +
1434        "& leads=" +
1435        leads +
1436        "& location=" +
1437        location +
1438        "& uniqueID=" +
1439        uniqueID,
1440      error: function () {
1441        fail(
1442          jQuery("#name").attr("value") +
1443            " has NOT been added. Please Contact an adminstrator."
1444        );
1445        //alertResponse(response);
1446      },
1447      success: function (del) {
1448        // if the response from the query == 1 (success) the success function is fired
1449        if (response.responseText == 1) {
1450          // sets buttons back enabled
1451          $that.find("input[type='submit']").removeAttr("disabled");
1452
1453          if (submitValue == "deleteUser") {
1454            jQuery("#" + uniqueID).css("display", "none");
1455            success(
1456              jQuery("#name").attr("value") + " has been deleted successfuly."
1457            );
1458            resetForm("addSalesman");
1459          } else if (submitValue == "addUser") {
1460            success(
1461              jQuery("#name").attr("value") +
1462                " has been added successfuly. <br />Refresh page to see changes."
1463            );
1464            resetForm("addSalesman");
1465          } else if (submitValue == "updateUser") {
1466            // reverse update form ie, take data from main form and populate list form
1467            success(
1468              jQuery("#name").attr("value") + " has been updated successfuly."
1469            );
1470            updateUserList();
1471          }
1472          //alertResponse(response);
1473        } else {
1474          fail(
1475            jQuery("#name").attr("value") +
1476              " has NOT been added. Please fill in required fields."
1477          );
1478          alertResponse(response);
1479        }
1480      },
1481    });
1482
1483    return false;
1484  });
1485
1486  ////////////////////////////////////////////////
1487  //////////// This saves the users config and margins.  Used on the boat builder ////////////////////////////////////////////////////
1488  ////////////////////////////////////////////////////////
1489
1490  jQuery("form#dealer_margins").submit(function () {
1491    // disables the submit button
1492    var $that = jQuery(this);
1493    var submitButton = $that.find("input[type='submit']");
1494    jQuery(submitButton).attr("disabled", "disabled");
1495
1496    var str = jQuery(this).serialize();
1497
1498    var response = jQuery.ajax({
1499      type: "POST",
1500      url: domain + "ajax/saveBuilderConfig.php",
1501      data: str,
1502      error: function () {
1503        fail(
1504          "Config has NOT been saved. Please Contact an adminstrator.",
1505          "-config"
1506        );
1507        //alertResponse(response);
1508      },
1509      success: function (del) {
1510        // if the response from the query == 1 (success) the success function is fired
1511        if (response.responseText == 1) {
1512          // sets buttons back enabled
1513          $(".margin_input").change();
1514          $that.find("input[type='submit']").removeAttr("disabled");
1515          success("Config and Margins Saved", "-config");
1516          //force the data to be reloaded
1517
1518          //alertResponse(response);
1519        } else {
1520          fail(
1521            "Config has NOT been saved. Please contact an administrator.",
1522            "-config"
1523          );
1524          alertResponse(response);
1525        }
1526      },
1527    });
1528
1529    return false;
1530  });
1531
1532  function getRecaptchaToken(
1533    siteKey = "6Ldk-DQpAAAAAFAWJIWd986cNBAKF33dvu9rY1rH",
1534    action = "LEAD_SUBMISSION"
1535  ) {
1536    return new Promise((resolve, reject) => {
1537      try {
1538        grecaptcha.enterprise.ready(async () => {
1539          const token = await grecaptcha.enterprise.execute(siteKey, {
1540            action,
1541          });
1542          resolve(token);
1543        });
1544      } catch (error) {
1545        reject(error);
1546      }
1547    });
1548  }
1549
1550  const setInvalid = (input) => {
1551    jQuery(input).addClass("input--invalid");
1552    jQuery(input).on("blur", function () {
1553      jQuery(this).removeClass("input--invalid");
1554      if (jQuery(input).next(".input--invalid-msg")) {
1555        jQuery(input).next(".input--invalid-msg").remove();
1556      }
1557    });
1558  };
1559
1560  const setInvalidErrMsg = (input, msg) => {
1561    if (
1562      jQuery(input).attr("type") === "checkbox" &&
1563      jQuery(input).next("label")
1564    ) {
1565      if (!jQuery(input).next("label").next(".input--invalid-msg").length) {
1566        jQuery(input)
1567          .next("label")
1568          .after(`<p class="input--invalid-msg">${msg}</p>`);
1569      }
1570    } else {
1571      jQuery(input).after(`<p class="input--invalid-msg">${msg}</p>`);
1572    }
1573  };
1574
1575  jQuery("form.lead_submit").submit(async function (e) {
1576    e.preventDefault();
1577
1578    // fetch and serialize the form data
1579    let form_data = jQuery(this).serializeArray();
1580
1581    const inputs = jQuery(this).find("input:visible").toArray();
1582    const zipRegex = new RegExp(/^\d{5}$/);
1583    let formInvalid = false;
1584    if (inputs.length) {
1585      for (let i = 0; i < inputs.length; i++) {
1586        if (
1587          jQuery(inputs[i]).attr("name") === "zip" &&
1588          !zipRegex.test(jQuery(inputs[i]).val())
1589        ) {
1590          setInvalid(inputs[i]);
1591          setInvalidErrMsg(inputs[i], "Invalid Zip Code");
1592          formInvalid = true;
1593        }
1594      }
1595      if (formInvalid) {
1596        return;
1597      }
1598    }
1599
1600    form_data.push({
1601      name: "recaptcha_token",
1602      value: await getRecaptchaToken(),
1603    });
1604
1605    // hide the form
1606    jQuery(this).hide();
1607    // show success/fail based on response
1608
1609    //jQuery('.ajax_lead_submit_button').html("Saving...");
1610
1611    // analytics
1612    window.dataLayer.push({
1613      event: jQuery(this).find("input[name=lead_source]").val(),
1614      firstName: jQuery(this).find("input[name=first_name]").val(),
1615      lastName: jQuery(this).find("input[name=last_name]").val(),
1616      email: jQuery(this).find("input[name=email]").val(),
1617      mobilePhone: jQuery(this).find("input[name=phone]").val(),
1618      zipCode: jQuery(this).find("input[name=zip]").val(),
1619      purchaseTimeframe: jQuery(this).find("input[name=purchase_time]").val(),
1620      model: jQuery(this).find("input[name=product_info]").val(),
1621      category: jQuery(this).find("input[name=line_name]").val(),
1622      lifestyle: jQuery(this).find("input[name=line_name]").val(),
1623      line: jQuery(this).find("input[name=line_name]").val(),
1624      modelYear: jQuery(this).find("input[name=model_year]").val(),
1625      dealerNumber: jQuery(this).find("input[name=dealerNumber]").val(),
1626    });
1627
1628    jQuery.ajax({
1629      type: "POST",
1630      url: "Leads.php?action=ajax_lead_submit",
1631      data: form_data,
1632      error: function () {
1633        alert("Auto Save is not working. Please contact SDR.");
1634        jQuery("#lead_submit_fail").scrollTop();
1635        jQuery("#lead_submit_fail").show();
1636      },
1637      success: function (response) {
1638        // show success message
1639        jQuery("#lead_submit_success").show();
1640        // scroll to success message
1641        jQuery("#lead_submit_success").scrollTop();
1642
1643        if (window.location.href.includes("yamaha")) {
1644          return;
1645        }
1646
1647        if (response && response.trim() !== "false") {
1648          let lead_id = response;
1649
1650          var response2 = jQuery.ajax({
1651            type: "POST",
1652            url: "Leads.php?action=send_lead_notification_email",
1653            data: {
1654              lead_id: lead_id,
1655            },
1656            error: function () {
1657              console.log("Email notification failed.");
1658              console.log(response2.responseText);
1659            },
1660            success: function () {
1661              // do nothing b/c this is just the email send??
1662              console.log("email sent");
1663              //return;
1664            },
1665          });
1666          /*ATTEMPT SFMC SEND
1667          jQuery.ajax({
1668            type: "POST",
1669            url: "https://cloud.email.yamahamotorsports.com/form-submission-test",
1670            data: form_data,
1671            error: function () {
1672              console.log("SFMC Error");
1673            },
1674            success: function (response) {
1675              console.log("SFMC SENT");
1676            }
1677          });
1678          //END SFMC */
1679        }
1680        return false;
1681      },
1682    });
1683  });
1684  ////////////////////////////////////////////////
1685  //////////// Adds or updates a new lead //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1686  ////////////////////////////////////////////////////////
1687
1688  jQuery("form.addUpdateLead").submit(function () {
1689    //this is the id of the specific form that was submitted (name)
1690    var id = jQuery(this).attr("name");
1691
1692    // disables the submit button
1693    var $that = jQuery(this);
1694    var submitButton = $that.find("input[type='submit']");
1695    btnText = jQuery(submitButton).attr("value");
1696    jQuery(submitButton).attr("value", " Please Wait... ");
1697    jQuery(submitButton).attr("disabled", "disabled");
1698
1699    // starts the loading wheel visual
1700    jQuery("#loadingWheel").fadeTo("medium", 1);
1701
1702    //'[@name=foo]'
1703    // we want to store the values from the form input box, then send via ajax below
1704    //var uniqueID	= id;
1705    //alert(uniqueID);
1706
1707    var str = jQuery(this).serialize();
1708
1709    var response = jQuery.ajax({
1710      type: "POST",
1711      url: domain + "Leads.php?action=ajax_lead_save",
1712      data: str,
1713
1714      error: function () {
1715        fail("Lead has NOT been updated. Please Contact an adminstrator.", id);
1716        alertResponse(response);
1717      },
1718      success: function (del) {
1719        // This sets the uniqueID field so the user can be edited before the form is cleared
1720        if (response.responseText) {
1721          //alert(response.text);
1722          // closes the loading wheel visual
1723          jQuery("#loadingWheel").fadeTo("medium", 0);
1724
1725          success("Successfully Saved.", id);
1726
1727          // sets buttons back enabled
1728          $that.find("input[type='submit']").attr("value", btnText);
1729          $that.find("input[type='submit']").removeAttr("disabled");
1730          //alertResponse(response);
1731        } else {
1732          fail("An error has occurred, please try again or notify SDR", id);
1733          // sets buttons back enabled
1734          $that.find("input[type='submit']").attr("value", btnText);
1735          $that.find("input[type='submit']").removeAttr("disabled");
1736          alertResponse(response);
1737        }
1738      },
1739    });
1740    return false;
1741  });
1742
1743  ////////////////////////////////////////////////
1744  //////////// Add or update or delete a salesman //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1745  ////////////////////////////////////////////////////////
1746  //validate form
1747  /*
1748jQuery(function() {
1749	
1750	
1751	// validate Add Salesman form on keyup and submit
1752jQuery("#user_management_form").validate({
1753	//set the rules for the field names
1754rules: {
1755	user_name: {	
1756		required: true,
1757		minlength: 2
1758		},
1759	user_email: {	
1760		required: true,
1761		email: true
1762		}
1763},
1764//set messages to appear inline
1765messages: {
1766	user_name: {
1767      required: "<br /> -Please enter a name",
1768      minlength: "<br /> -Name must be longer than 1 letter."
1769    },
1770	user_email: {
1771		required: "<br /> -Please enter an email",
1772		email: "<br /> -Please enter a valid email address"
1773	}
1774	
1775
1776},
1777submitHandler: function(form) {
1778   	saveSalesmanUser(form);
1779 	}
1780});
1781});					   
1782	
1783*/
1784  jQuery(function () {
1785    jQuery("#user_management_form").submit(function (e) {
1786      e.preventDefault();
1787      saveSalesmanUser(jQuery(this));
1788    });
1789  });
1790
1791  function saveSalesmanUser(form) {
1792    //this is the id of the specific form that was submitted (name)
1793    var id = form.name;
1794
1795    // disables the submit button
1796    //var that = form;
1797    var submitButton = jQuery(".user_save");
1798    btnText = " Save User ";
1799    jQuery(submitButton).attr("value", " Saving... ");
1800    jQuery(submitButton).attr("disabled", "disabled");
1801
1802    //alert('here i am');
1803
1804    // these will be used when populating hidden fields after the save/update
1805    // here we get all the access levels that were checked and convert them to an array, then csv
1806    var SDR_access_array = [];
1807    jQuery("#user_access_list :checked").each(function () {
1808      SDR_access_array.push(jQuery(this).val());
1809    });
1810    var SDR_access = SDR_access_array.join(",");
1811
1812    // here we get all the roles that were checked and convert them to an array, then csv
1813    var SDR_role_array = [];
1814    jQuery("#user_role_list :checked").each(function () {
1815      SDR_role_array.push(jQuery(this).val());
1816    });
1817    var SDR_role = SDR_role_array.join(",");
1818
1819    // starts the loading wheel visual
1820    //jQuery("#loadingWheel").fadeTo("medium", 1);
1821
1822    var str = jQuery(form).serializeArray();
1823
1824    var response = jQuery.ajax({
1825      type: "POST",
1826      url: domain + "Location-Manager.php?action=save_user",
1827      data: str,
1828
1829      error: function () {
1830        fail("User has NOT been updated. Please Contact an adminstrator.", id);
1831        alertResponse(response);
1832      },
1833      success: function (del) {
1834        // This sets the uniqueID field so the user can be edited before the form is cleared
1835        if (response.responseText != 0) {
1836          //alert(response.text);
1837          // closes the loading wheel visual
1838          //jQuery("#loadingWheel").fadeTo("medium", 0);
1839
1840          var response_user_id = jQuery.trim(response.responseText);
1841
1842          // if the user is being perm deleted we remove them from the list
1843          if (jQuery("input:radio[name=user_status]:checked").val() == 2) {
1844            // remove the user from the list and clear the form
1845            jQuery(".user_save").show();
1846            // empty the form
1847            jQuery("#user_id").val("");
1848            //jQuery("#user_location_id").reset();
1849            jQuery("#user_name").val("");
1850            jQuery("#user_email").val("");
1851            jQuery("#user_phone").val("");
1852            // empty out the name on the access/roles tab
1853            jQuery(".user_name_display").empty();
1854            // uncheck all the checkboxes
1855            jQuery.each(jQuery(".roles_checkbox"), function () {
1856              //alert(role);
1857              jQuery(this).removeAttr("checked");
1858            });
1859            jQuery.each(jQuery(".access_checkbox"), function () {
1860              //alert(role);
1861              jQuery(this).removeAttr("checked");
1862            });
1863
1864            jQuery("#user_list-" + response_user_id).remove();
1865          }
1866
1867          // add a user to the list on the left
1868          // we will get the user_id back from the ajax query
1869          // if there was no user id we need to add this new user to the user list
1870          else if (!jQuery("#user_id").val()) {
1871            jQuery("#user_id").val(response_user_id);
1872            var new_user =
1873              '\
1874							<li style="background-color:#ceffcf;" class="user_selector location_manager_user_list" user_id="' +
1875              response_user_id +
1876              '">\
1877								' +
1878              jQuery("#user_name").val() +
1879              '\
1880								<input type="hidden" name="user_id[]" value="' +
1881              response_user_id +
1882              '" />\
1883								<input type="hidden" name="user_list_location_id[]" value="' +
1884              jQuery("#user_location_id").val() +
1885              '" id="user_location_id-' +
1886              response_user_id +
1887              '" />\
1888								<input type="hidden" name="user_name[]" value="' +
1889              jQuery("#user_name").val() +
1890              '" id="name-' +
1891              response_user_id +
1892              '" />\
1893								<input type="hidden" name="user_email[]" value="' +
1894              jQuery("#user_email").val() +
1895              '" id="email-' +
1896              response_user_id +
1897              '" />\
1898								<input type="hidden" name="user_phone[]" value="' +
1899              jQuery("#user_phone").val() +
1900              '" id="phone-' +
1901              response_user_id +
1902              '" />\
1903								<input type="hidden" name="user_status[]" value="' +
1904              jQuery("input[name='user_status']:checked").val() +
1905              '" id="status-' +
1906              response_user_id +
1907              '" />\
1908								<input type="hidden" name="show_on_d360[]" value="' +
1909              jQuery("input[name='show_on_d360']:checked").val() +
1910              '" id="show_on_d360-' +
1911              response_user_id +
1912              '" />\
1913								<input type="hidden" name="user_SDR_roles[]" value="' +
1914              SDR_role +
1915              '" id="user_SDR_roles-' +
1916              response_user_id +
1917              '" />\
1918								<input type="hidden" name="user_SDR_access[]" value="' +
1919              SDR_access +
1920              '" id="user_SDR_access-' +
1921              response_user_id +
1922              '" />\
1923							</li>\
1924						';
1925          }
1926
1927          // else this was an existing user so we need to update any changed info in their list view
1928          else {
1929            //alert(jQuery("input[name='user_status']:checked").val());
1930            var user_id = jQuery("#user_id").val();
1931
1932            jQuery("#name-" + user_id).val(jQuery("#user_name").val());
1933            jQuery("#email-" + user_id).val(jQuery("#user_email").val());
1934            jQuery("#phone-" + user_id).val(jQuery("#user_phone").val());
1935            jQuery("#status-" + user_id).val(
1936              jQuery("input[name='user_status']:checked").val()
1937            );
1938            jQuery("#show_on_d360-" + user_id).val(
1939              jQuery("input[name='show_on_d360']:checked").val()
1940            );
1941            ////////////////////////////////////////////////////////////////problem here !!!!!!!!!!!!!!!!!!!!
1942            jQuery("#user_SDR_roles-" + user_id).val(SDR_role);
1943            jQuery("#user_SDR_access-" + user_id).val(SDR_access);
1944          }
1945
1946          jQuery("#location_manager_user_list").append(new_user);
1947
1948          success("Successfully Saved.", id);
1949
1950          // sets buttons back enabled
1951          jQuery(submitButton).attr("value", btnText);
1952          jQuery(submitButton).removeAttr("disabled");
1953
1954          //alertResponse(response);
1955        } else {
1956          fail("An error has occurred, please try again or notify SDR", id);
1957          // sets buttons back enabled
1958          jQuery(submitButton).attr("value", btnText);
1959          jQuery(submitButton).removeAttr("disabled");
1960          alertResponse(response);
1961        }
1962      },
1963    });
1964    return false;
1965  }
1966
1967  //// prelaunch
1968  // not applicable?
1969  ////////////////////////////////////////////////
1970  //////////// validates form for dealer meeting registration ///////////////////////////////////////////////////////////////////////////////////////////////////////
1971  ////////////////////////////////////////////////////////
1972  //validate form
1973  /*
1974jQuery(function() {
1975	// validate Add Salesman form on keyup and submit
1976jQuery("#dealer_meeting_registration_form").validate({
1977	//set the rules for the field names
1978rules: {
1979	dealership_name: {	
1980		required: true,
1981		minlength: 2
1982		},
1983	registrant_name: {	
1984		required: true,
1985		minlength: 2
1986		},
1987	registrant_email: {	
1988		required: true,
1989		email: true
1990		},
1991	phone: {	
1992		required: true,
1993		minlength: 2
1994		},
1995	regional_salesman: {	
1996		required: true
1997		},
1998	dealership_address: {	
1999		required: true,
2000		minlength: 2
2001		},
2002	dealership_city: {	
2003		required: true,
2004		minlength: 2
2005		},
2006	dealership_state: {	
2007		required: true,
2008		minlength: 2
2009		},
2010	dealership_country: {	
2011		required: true,
2012		minlength: 2
2013		},
2014	arrival_date: {	
2015		required: true
2016		},
2017	arrival_time: {	
2018		required: true,
2019		minlength: 2
2020		},
2021	departure_date: {	
2022		required: true
2023		}
2024
2025},
2026//set messages to appear inline
2027messages: {
2028	dealership_name: {
2029      required: "<br /> -Please enter a Dealership Name",
2030      minlength: "<br /> -Name must be longer than 1 letter."
2031    },
2032	registrant_name: {
2033      required: "<br /> -Please enter Your Name",
2034      minlength: "<br /> -Name must be longer than 1 letter."
2035    },
2036	registrant_email: {
2037		required: "<br /> -Please enter Your Email Address",
2038		email: "<br /> -Please enter a valid email address"
2039	},
2040	phone: {
2041      required: "<br /> -Please enter the Your Phone Number",
2042      minlength: "<br /> -Name must be longer than 1 letter."
2043    },
2044	regional_salesman: {
2045      required: "<br /> -Please enter the dealer's Regional Salesman"
2046    },
2047	dealership_address: {
2048      required: "<br /> -Please enter a Dealership Address",
2049      minlength: "<br /> -Name must be longer than 1 letter."
2050    },
2051	dealership_city: {
2052      required: "<br /> -Please enter a Dealership City",
2053      minlength: "<br /> -Name must be longer than 1 letter."
2054    },
2055	dealership_state: {
2056      required: "<br /> -Please enter a Dealership State",
2057      minlength: "<br /> -Name must be longer than 1 letter."
2058    },
2059	dealership_country: {
2060      required: "<br /> -Please enter a Dealership Country",
2061      minlength: "<br /> -Name must be longer than 1 letter."
2062    },
2063	arrival_date: {
2064      required: "<br /> -Please enter an Arrival Date"
2065    },
2066	arrival_time: {
2067      required: "<br /> -Please enter an estimated Arrival Time",
2068      minlength: "<br /> -Name must be longer than 1 letter."
2069    },
2070	departure_date: {
2071      required: "<br /> -Please enter an estimated Departure Date"
2072    }
2073	
2074
2075},
2076submitHandler: function(form) {
2077   	document.dealer_meeting_registration_form.submit();
2078 	}
2079});
2080});					   
2081*/
2082
2083  function alertResponse(response) {
2084    alert(response.responseText);
2085  }
2086
2087  //// prelaunch
2088  // think this will all be deprecated with new image uploader
2089
2090  ///////////////////////////////////
2091  ////////  Inventory Image Uploader Configuration
2092  //////////////////////////////////
2093  if (jQuery("#imageUpload").length) {
2094    new AjaxUpload("#imageUpload", {
2095      // Location of the server-side upload script
2096      action:
2097        domain + "ajax/ajax-ImageUpload.php?action=inventory_image_upload",
2098      // File upload name
2099      name: "userfile",
2100      // Additional data to send
2101      data: {
2102        folderID: jQuery("#folderID").attr("value"),
2103      },
2104      // Submit file after selection
2105      autoSubmit: true,
2106      // The type of data that you're expecting back from the server.
2107      // Html (text) and xml are detected automatically.
2108      // Only useful when you are using json data as a response.
2109      // Set to "json" in that case.
2110      responseType: false,
2111      // Fired after the file is selected
2112      // Useful when autoSubmit is disabled
2113      // You can return false to cancel upload
2114      // @param file basename of uploaded file
2115      // @param extension of that file
2116      onChange: function (file, extension) {
2117        //alert(file);
2118        var dirtyFileName = file;
2119        file = cleanFileName(file);
2120        var fileID = file.split(".");
2121        var folderID = jQuery("#folderID").attr("value");
2122        //alert(fileID);
2123        // Clear the 'Upload Images Here!' text
2124        jQuery("#uploadTitle").empty();
2125        jQuery("#saveThisBoat").attr("disabled", "disabled");
2126        // create table
2127        jQuery("#uploadContent").prepend(
2128          '<table class="tableIU" id="image-table-' +
2129            fileID[0] +
2130            '"><tr><td class="topTd"><div class="leftContainerIU"><span class="example">Image Filename:</span><br /><span>' +
2131            dirtyFileName +
2132            '</span><img id="image-' +
2133            fileID[0] +
2134            '" src="' +
2135            domain +
2136            'images/styleElements/loader100px.gif" /><div class="clear"></div><span><input type="hidden" name="fileNames[]" value="' +
2137            file +
2138            '" /><input type="radio" name="isMainImage" value="' +
2139            file +
2140            '" />Is Main Image?</span><br /><input type="radio" name="is_overhead" value="' +
2141            file +
2142            '" />Is Overhead Image?</span><br /><input type="radio" name="is_profile" value="' +
2143            file +
2144            '" />Is Profile Image?</span><p><input type="button" value=" Delete This Image " onclick="deleteImage(\'' +
2145            fileID[0] +
2146            '\'); return false" /></p></div></td><td><div class="rightContainerIU"><p><label for="imageTitle-' +
2147            fileID[0] +
2148            '">Image Title:<span class="red">*</span></label><br /><input type="text" id="imageTitle-' +
2149            fileID[0] +
2150            '" class="textboxWide" name="imageName[]" value="" /><br /><span class="example">ex: Bow Storage on this boat is Amazing!</span></p><p class="spacey"><label for="imageDescription">Image Description:</label><br /><textarea rows="5" name="imageDesc[]" id="imageDesc-' +
2151            fileID[0] +
2152            '" cols="40" ></textarea> <br /><span class="example">ex: Chaparral\'s are known for their Bow Storage, you will not find another brand with this much storage....etc.</span></p><p> <label for="imageOrder-' +
2153            fileID[0] +
2154            '">Image List Order:</label><input type="text" id="imageOrder-' +
2155            fileID[0] +
2156            '" class="textboxWide" name="list_order_images[]" value="
21560" /></p></div></td></tr></table>'
2157        );
2158
2159        // Change the 'Upload Images Here!' text
2160        jQuery("#uploadTitle").css("color", "#ff0000");
2161        jQuery("#uploadTitle").append("Upload Another Image");
2162      },
2163      // Fired before the file is uploaded
2164      // You can return false to cancel upload
2165      // @param file basename of uploaded file
2166      // @param extension of that file
2167      onSubmit: function (file, extension) {},
2168      // Fired when file upload is completed
2169      // @param file basename of uploaded file
2170      // @param response server response
2171      onComplete: function (file, response) {
2172        file = cleanFileName(file);
2173        var fileID = file.split(".");
2174        //alert(fileID[0]);
2175        var folderID = jQuery("#folderID").attr("value");
2176        //var folderID = response;
2177        //var folderID = jQuery('#folderID').attr('value', folderID);
2178
2179        var imgURL =
2180          domain + "images/inventoryImages/" + folderID + "/180px/" + file;
2181
2182        //alert(imgURL);
2183        // here we change the image trigger value so the php script knows to re-pro zip files
2184        jQuery("#image_trigger").attr("value", "1");
2185
2186        jQuery("#image-" + fileID[0]).attr("src", imgURL);
2187
2188        jQuery("#saveThisBoat").removeAttr("disabled");
2189      },
2190    }); // end image upload script
2191  }
2192
2193  //// prelaunch
2194  // think this will all be deprecated with new image uploader
2195
2196  ///////////////////////////////////
2197  ////////  Inventory Image Uploader Configuration
2198  //////////////////////////////////
2199  if (jQuery("#imageUploadLocationOFF").length) {
2200    new AjaxUpload("#imageUploadLocation", {
2201      // Location of the server-side upload script
2202      action: domain + "Location-Manager.php?action=image_upload",
2203      // File upload name
2204      name: "userfile",
2205      // Additional data to send
2206      data: {
2207        folderID: jQuery("#location_id").attr("value"),
2208      },
2209      // Submit file after selection
2210      autoSubmit: true,
2211      // The type of data that you're expecting back from the server.
2212      // Html (text) and xml are detected automatically.
2213      // Only useful when you are using json data as a response.
2214      // Set to "json" in that case.
2215      responseType: false,
2216      // Fired after the file is selected
2217      // Useful when autoSubmit is disabled
2218      // You can return false to cancel upload
2219      // @param file basename of uploaded file
2220      // @param extension of that file
2221      onChange: function (file, extension) {
2222        //alert(file);
2223        var dirtyFileName = file;
2224        file = cleanFileName(file);
2225        var fileID = file.split(".");
2226        var folderID = jQuery("#location_id").attr("value");
2227        //alert(fileID);
2228        // Clear the 'Upload Images Here!' text
2229        jQuery("#uploadTitle").empty();
2230
2231        // needs to disable all submit buttons
2232        jQuery(".save_location_button").attr("disabled", "disabled");
2233
2234        // create table
2235        jQuery("#uploadContent").prepend(
2236          '<table class="tableIU" id="image-table-' +
2237            fileID[0] +
2238            '"><tr><td class="topTd"><div class="leftContainerIU"><span class="example">Image Filename:</span><br /><span>' +
2239            dirtyFileName +
2240            '</span><img id="image-' +
2241            fileID[0] +
2242            '" src="' +
2243            domain +
2244            'images/styleElements/loader100px.gif" /><div class="clear"></div><span><input type="hidden" name="fileNames[]" value="' +
2245            file +
2246            '" /><input type="radio" name="is_main_image" value="' +
2247            file +
2248            '" />Is Main Location Image?</span><br /><input type="radio" name="is_web_logo" value="' +
2249            file +
2250            '" />Is Web Logo?</span><br /><input type="radio" name="is_print_logo" value="' +
2251            file +
2252            '" />Is Print Logo?</span><p><input type="button" value=" Delete This Image " onclick="deleteImage(\'' +
2253            fileID[0] +
2254            '\'); return false" /></p></div></td><td><div class="rightContainerIU"><p><label for="imageTitle-' +
2255            fileID[0] +
2256            '">Image Title:<span class="red">*</span></label><br /><input type="text" id="imageTitle-' +
2257            fileID[0] +
2258            '" class="textboxWide" name="imageName[]" value="" /><br /><span class="example">ex: John Doe Boats Located in East Bumble Wisconsin</span></p><p class="spacey"><label for="imageDescription">Image Description:</label><br /><textarea rows="5" name="imageDesc[]" id="imageDesc-' +
2259            fileID[0] +
2260            '" cols="40" ></textarea> <br /><span class="example">ex: At John Doe Boats our service department is fully staffed and carries a full inventory of parts to get you back on the water quickly!</span></p><p> <label for="imageOrder-' +
2261            fileID[0] +
2262            '">Image List Order:</label><input type="text" id="imageOrder-' +
2263            fileID[0] +
2264            '" class="textboxWide" name="list_order_images[]" value="
22640" /></p></div></td></tr></table>'
2265        );
2266
2267        // Change the 'Upload Images Here!' text
2268        jQuery("#uploadTitle").css("color", "#ff0000");
2269        jQuery("#uploadTitle").append("Upload Another Image");
2270      },
2271      // Fired before the file is uploaded
2272      // You can return false to cancel upload
2273      // @param file basename of uploaded file
2274      // @param extension of that file
2275      onSubmit: function (file, extension) {},
2276      // Fired when file upload is completed
2277      // @param file basename of uploaded file
2278      // @param response server response
2279      onComplete: function (file, response) {
2280        file = cleanFileName(file);
2281        var fileID = file.split(".");
2282        //alert(fileID[0]);
2283        var folderID = jQuery("#location_id").attr("value");
2284        //var folderID = response;
2285        //var folderID = jQuery('#folderID').attr('value', folderID);
2286
2287        var imgURL =
2288          domain + "images/images_location/" + folderID + "/640px/" + file;
2289
2290        //alert(imgURL);
2291        // here we change the image trigger value so the php script knows to re-pro zip files
2292        jQuery("#image_trigger").attr("value", "1");
2293
2294        jQuery("#image-" + fileID[0]).attr("src", imgURL);
2295
2296        // reenable the submit buttons here
2297        jQuery(".save_location_button").removeAttr("disabled");
2298      },
2299    }); // end image upload script
2300  }
2301
2302  ///////////////////////////////////
2303  ////////  Warranty Claim Image Uploader Configuration
2304  //////////////////////////////////
2305  if (jQuery("#imageUploadWarranty").length) {
2306    new AjaxUpload("#imageUploadWarranty", {
2307      // Location of the server-side upload script
2308      action: domain + "ajax/ajax-ImageUpload.php?action=warranty_image_upload",
2309      // File upload name
2310      name: "userfile",
2311      // Additional data to send
2312      data: {
2313        folderID: jQuery("#rapSerialNumberID").attr("value"),
2314      },
2315      // Submit file after selection
2316      autoSubmit: true,
2317      // The type of data that you're expecting back from the server.
2318      // Html (text) and xml are detected automatically.
2319      // Only useful when you are using json data as a response.
2320      // Set to "json" in that case.
2321      responseType: false,
2322      // Fired after the file is selected
2323      // Useful when autoSubmit is disabled
2324      // You can return false to cancel upload
2325      // @param file basename of uploaded file
2326      // @param extension of that file
2327      onChange: function (file, extension) {
2328        //alert(file);
2329        var dirtyFileName = file;
2330        file = cleanFileName(file);
2331        var fileID = file.split(".");
2332        var folderID = jQuery("#rapSerialNumberID").attr("value");
2333        //alert(fileID);
2334        // Clear the 'Upload Images Here!' text
2335        jQuery("#uploadTitle").empty();
2336        jQuery("#saveThisBoat").attr("disabled", "disabled");
2337        // create table
2338        //jQuery('#uploadContent').prepend('<table class="tableIU" id="image-table-'+fileID[0]+'"><tr><td class="topTd"><div class="leftContainerIU"><span class="example">Image Filename:</span><br /><span>'+dirtyFileName+'</span><img id="image-'+fileID[0]+'" src="'+domain+'images/styleElements/loader100px.gif" /><div class="clear"></div><span><input type="hidden" name="fileNames[]" value="'+file+'" /><p><input type="button" value=" Delete This Image " onclick="deleteImage(\''+fileID[0]+'\'); return false" /></p></div></td></tr></table>');
2339
2340        jQuery("#uploadContent").prepend(
2341          '<table class="tableIU" id="image-table-' +
2342            fileID[0] +
2343            '" style="width:100%"><tr><td class="topTd" style="width:40%;"><div class="leftContainerIU"  style="width:100%;"><span class="example">Image Filename:</span><br /><span>' +
2344            dirtyFileName +
2345            '</span><img id="image-' +
2346            fileID[0] +
2347            '" src="' +
2348            domain +
2349            'images/styleElements/loader100px.gif" style="width:100%;margin:14px 0;"/><div class="clear"></div><span><input type="hidden" name="fileNames[]" value="' +
2350            file +
2351            '" /></span><p><input type="button" value=" Delete This Image " onclick="deleteImage(\'' +
2352            fileID[0] +
2353            '\'); return false" /></p></div></td><td><div class="rightContainerIU"><p class="spacey" style="margin-top:35px;"><label for="imageDescription">Image Description:</label><br /><textarea rows="5" name="imageDesc[]" id="imageDesc-' +
2354            fileID[0] +
2355            '" cols="40" ></textarea> <br /><span class="example">ex: Scratch is located bottom right of image!</span></p></div></td></tr></table>'
2356        );
2357
2358        // Change the 'Upload Images Here!' text
2359        jQuery("#uploadTitle").css("color", "#ff0000");
2360        jQuery("#uploadTitle").append("Upload Another Image");
2361      },
2362      // Fired before the file is uploaded
2363      // You can return false to cancel upload
2364      // @param file basename of uploaded file
2365      // @param extension of that file
2366      onSubmit: function (file, extension) {},
2367      // Fired when file upload is completed
2368      // @param file basename of uploaded file
2369      // @param response server response
2370      onComplete: function (file, response) {
2371        file = cleanFileName(file);
2372        var fileID = file.split(".");
2373        //alert(fileID[0]);
2374        var folderID = jQuery("#rapSerialNumberID").attr("value");
2375        //var folderID = response;
2376        //var folderID = jQuery('#folderID').attr('value', folderID);
2377
2378        var imgURL =
2379          domain + "images/images_warranty/" + folderID + "/300px/" + file;
2380
2381        //alert(imgURL);
2382        // here we change the image trigger value so the php script knows to re-pro zip files
2383        //jQuery('#image_trigger').attr("value","1");
2384
2385        jQuery("#image-" + fileID[0]).attr("src", imgURL);
2386
2387        jQuery(".warranty_save").removeAttr("disabled");
2388      },
2389    }); // end warranty image upload script
2390  }
2391
2392  //// prelaunch
2393  // this function somehow changes rusty's profile image as well as the dealers
2394
2395  ///////////////////////////////////
2396  ////////  Dealer profile Image Uploader Configuration
2397  //////////////////////////////////
2398  if (jQuery("#imageUpload_dealer_profile_OFF").length) {
2399    var ajax_upload_profile_image = new AjaxUpload(
2400      "#imageUpload_dealer_profile",
2401      {
2402        // Location of the server-side upload script
2403
2404        action: domain + "ajax/ajax-ImageUpload-dealer-profile.php",
2405        // File upload name
2406        name: "userfile",
2407        // Additional data to send
2408        data: {
2409          folderID: jQuery("#user_id").attr("value"),
2410        },
2411        // Submit file after selection
2412        autoSubmit: true,
2413        // The type of data that you're expecting back from the server.
2414        // Html (text) and xml are detected automatically.
2415        // Only useful when you are using json data as a response.
2416        // Set to "json" in that case.
2417        responseType: false,
2418        // Fired after the file is selected
2419        // Useful when autoSubmit is disabled
2420        // You can return false to cancel upload
2421        // @param file basename of uploaded file
2422        // @param extension of that file
2423        onChange: function (file, extension) {
2424          var dirtyFileName = file;
2425          file = cleanFileName(file);
2426          var fileID = file.split(".");
2427          var folderID = jQuery("#user_id").attr("value");
2428          //alert(folderID);
2429          // Clear the 'Upload Images Here!' text
2430          jQuery("#uploadTitle").empty();
2431          jQuery("#saveThisBoat").attr("disabled", "disabled");
2432          // create table
2433          jQuery("#image_placeholder").attr(
2434            "src",
2435            domain + "images/styleElements/loader145X185px.gif"
2436          );
2437
2438          // Change the 'Upload Images Here!' text
2439          jQuery("#uploadTitle").css("color", "#ff0000");
2440          jQuery("#uploadTitle").append("Upload Another Image");
2441        },
2442        // Fired before the file is uploaded
2443        // You can return false to cancel upload
2444        // @param file basename of uploaded file
2445        // @param extension of that file
2446        onSubmit: function (file, extension) {
2447          ajax_upload_profile_image.setData({
2448            folderID: jQuery("#user_id").attr("value"),
2449          });
2450        },
2451        // Fired when file upload is completed
2452        // @param file basename of uploaded file
2453        // @param response server response
2454        onComplete: function (file, response) {
2455          file = cleanFileName(file);
2456          var fileID = file.split(".");
2457          //alert(fileID[0]);
2458          var folder = jQuery("#user_id").attr("value");
2459          //var folderID = response;
2460          //var folderID = jQuery('#folderID').attr('value', folderID);
2461          var amazon = "https://s3.amazonaws.com/";
2462          var imgURL = amazon + "sdr_user_images/" + folder + "/180px/" + file;
2463          var src =
2464            "https://s3.amazonaws.com/sdr_user_images/" +
2465            folder +
2466            "/180px/" +
2467            file;
2468          jQuery("#image_placeholder").attr("src", src);
2469
2470          // here we change the image trigger value so the php script knows to re-pro zip files
2471          jQuery("#image_trigger").attr("value", "1");
2472
2473          jQuery("#image-" + fileID[0]).attr("src", imgURL);
2474
2475          jQuery("#saveThisBoat").removeAttr("disabled");
2476        },
2477      }
2478    ); // end image upload script
2479  }
2480
2481  //// prelaunch
2482  // think this will all be deprecated with new image uploader
2483
2484  jQuery(".rcw").click(function () {
2485    var src = jQuery(this).siblings("img").attr("src").split("/");
2486    var file = src[src.length - 1];
2487    if (file.indexOf("?") > 0) {
2488      file = file.split("?");
2489      file = file[0];
2490    }
2491    var degrees = jQuery(this).attr("degree");
2492    var userID = jQuery("#user_id").attr("value");
2493
2494    var response = jQuery.ajax({
2495      type: "POST",
2496
2497      url: domain + "ajax/ajax-rotateProfileImage.php",
2498      data: "name=" + file + "&degrees=" + degrees + "&folderID=" + userID,
2499
2500      error: function () {
2501        alert("image not rotated, please contact administrator");
2502        alertResponse(response);
2503        alert("name=" + file + "&degrees=" + degrees + "&folderID=" + userID);
2504      },
2505      success: function () {
2506        if (response.responseText) {
2507          // if opened image is 'closed', change opened image from closed to open
2508
2509          //alert(response.responseText);
2510          d = new Date();
2511          amazon = "https://s3.amazonaws.com/";
2512          var src = amazon + "/sdr_user_images/" + userID + "/180px/" + file;
2513          jQuery("#image_placeholder").attr("src", src + "?" + d.getTime());
2514        } else {
2515          alert("Image was not rotated");
2516        }
2517      },
2518    });
2519  }); // ends rotate clockwise function
2520
2521  ///////////////////////////////////
2522  ////////  Inventory OPTION Image Uploader Configuration
2523  //////////////////////////////////
2524  if (jQuery(".option_image").length) {
2525    var theLength = jQuery(".option_image").length - 1;
2526
2527    for (var i = 0; i <= theLength; i++) {
2528      //alert(jQuery(".option_image").get(i));
2529
2530      // someValue is the id of this option.
2531      // this id is used throughout this function to determine where to show/change images
2532      var someItem = jQuery(".option_image").get(i);
2533      var someValue = jQuery(someItem).next().attr("value");
2534      //alert(someValue);
2535
2536      new AjaxUpload(jQuery(".option_image").get(i), {
2537        // Location of the server-side upload script
2538        action: domain + "ajax/ajax-ImageUpload-Option.php",
2539        // File upload name
2540        name: "userfile",
2541        // Additional data to send
2542        data: {
2543          folderID: jQuery("#folderID").attr("value"),
2544          type: "option",
2545          optionID: someValue,
2546        },
2547        // Submit file after selection
2548        autoSubmit: true,
2549        // The type of data that you're expecting back from the server.
2550        // Html (text) and xml are detected automatically.
2551        // Only useful when you are using json data as a response.
2552        // Set to "json" in that case.
2553        responseType: false,
2554        // Fired after the file is selected
2555        // Useful when autoSubmit is disabled
2556        // You can return false to cancel upload
2557        // @param file basename of uploaded file
2558        // @param extension of that file
2559        onChange: function (file, extension) {
2560          var dirtyFileName = file;
2561          file = cleanFileName(file);
2562          var fileID = file.split(".");
2563          var folderID = jQuery("#folderID").attr("value");
2564          //alert(fileID);
2565
2566          //jQuery('#saveThisBoat').attr("disabled","disabled");
2567          // create table
2568
2569          //jQuery("#option_image_holder-"+someValue).prepend('<div style="margin-bottom:20px;"><img id="image-'+fileID[0]+'" src="'+domain+'images/styleElements/loader100px.gif" /><input type="hidden" name="fileOptionNames[]" value="'+file+'" /><p><input type="button" value=" Delete This Image " onclick="deleteImage(\''+fileID[0]+'\'); return false" /></p><hr /></div>');
2570        },
2571        // Fired before the file is uploaded
2572        // You can return false to cancel upload
2573        // @param file basename of uploaded file
2574        // @param extension of that file
2575        onSubmit: function (file, extension) {},
2576        // Fired when file upload is completed
2577        // @param file basename of uploaded file
2578        // @param response server response
2579        onComplete: function (file, response) {
2580          //alert(response);
2581
2582          file = cleanFileName(file);
2583          var fileID = file.split(".");
2584          //alert(fileID[0]);
2585          var folderID = jQuery("#folderID").attr("value");
2586          //var folderID = response;
2587          //var folderID = jQuery('#folderID').attr('value', folderID);
2588
2589          var imgURL =
2590            domain + "images/inventoryImages/" + folderID + "/80p
2590x/" + file;
2591
2592          jQuery("#option_image_holder-" + response).prepend(
2593            '<div style="margin-bottom:20px;"><img id="image-' +
2594              fileID[0] +
2595              '" src="' +
2596              domain +
2597              'images/styleElements/loader100px.gif"  style="border:3px solid #444444;" /><input type="hidden" name="fileOptionNames[]" value="' +
2598              file +
2599              '" /><hr /></div>'
2600          );
2601
2602          //alert(imgURL);
2603          // here we change the image trigger value so the php script knows to re-pro zip files
2604          jQuery("#image_trigger").attr("value", "1");
2605
2606          jQuery("#image-" + fileID[0]).attr("src", imgURL);
2607
2608          jQuery("#saveThisBoat").removeAttr("disabled");
2609        },
2610      }); // end image upload script
2611    } // end of for statement
2612  }
2613
2614  ///////////////////////////////////
2615  ////////  Inventory STANDARD Image Uploader Configuration
2616  //////////////////////////////////
2617  if (jQuery(".standard_image").length) {
2618    var theLength = jQuery(".standard_image").length - 1;
2619
2620    for (var i = 0; i <= theLength; i++) {
2621      //alert(jQuery(".option_image").get(i));
2622
2623      // someValue is the id of this option.
2624      // this id is used throughout this function to determine where to show/change images
2625      var someItem = jQuery(".standard_image").get(i);
2626      var someValue = jQuery(someItem).next().attr("value");
2627      //alert(someValue);
2628
2629      new AjaxUpload(jQuery(".standard_image").get(i), {
2630        // Location of the server-side upload script
2631        action: domain + "ajax/ajax-ImageUpload-Option.php",
2632        // File upload name
2633        name: "userfile",
2634        // Additional data to send
2635        data: {
2636          folderID: jQuery("#folderID").attr("value"),
2637          type: "standard",
2638          optionID: someValue,
2639        },
2640        // Submit file after selection
2641        autoSubmit: true,
2642        // The type of data that you're expecting back from the server.
2643        // Html (text) and xml are detected automatically.
2644        // Only useful when you are using json data as a response.
2645        // Set to "json" in that case.
2646        responseType: false,
2647        // Fired after the file is selected
2648        // Useful when autoSubmit is disabled
2649        // You can return false to cancel upload
2650        // @param file basename of uploaded file
2651        // @param extension of that file
2652        onChange: function (file, extension) {
2653          var dirtyFileName = file;
2654          file = cleanFileName(file);
2655          var fileID = file.split(".");
2656          var folderID = jQuery("#folderID").attr("value");
2657          //alert(fileID);
2658
2659          //jQuery('#saveThisBoat').attr("disabled","disabled");
2660          // create table
2661
2662          //jQuery("#option_image_holder-"+someValue).prepend('<div style="margin-bottom:20px;"><img id="image-'+fileID[0]+'" src="'+domain+'images/styleElements/loader100px.gif" /><input type="hidden" name="fileOptionNames[]" value="'+file+'" /><p><input type="button" value=" Delete This Image " onclick="deleteImage(\''+fileID[0]+'\'); return false" /></p><hr /></div>');
2663        },
2664        // Fired before the file is uploaded
2665        // You can return false to cancel upload
2666        // @param file basename of uploaded file
2667        // @param extension of that file
2668        onSubmit: function (file, extension) {},
2669        // Fired when file upload is completed
2670        // @param file basename of uploaded file
2671        // @param response server response
2672        onComplete: function (file, response) {
2673          //alert(response);
2674
2675          file = cleanFileName(file);
2676          var fileID = file.split(".");
2677          //alert(fileID[0]);
2678          var folderID = jQuery("#folderID").attr("value");
2679          //var folderID = response;
2680          //var folderID = jQuery('#folderID').attr('value', folderID);
2681
2682          var imgURL =
2683            domain + "images/inventoryImages/" + folderID + "/80px/" + file;
2684
2685          jQuery("#standard_image_holder-" + response).prepend(
2686            '<div style="margin-bottom:20px;"><img id="image-' +
2687              fileID[0] +
2688              '" src="' +
2689              domain +
2690              'images/styleElements/loader100px.gif"  style="border:3px solid #444444;" /><input type="hidden" name="fileStandardNames[]" value="' +
2691              file +
2692              '" /><hr /></div>'
2693          );
2694
2695          //alert(imgURL);
2696          // here we change the image trigger value so the php script knows to re-pro zip files
2697          jQuery("#image_trigger").attr("value", "1");
2698
2699          jQuery("#image-" + fileID[0]).attr("src", imgURL);
2700
2701          jQuery("#saveThisBoat").removeAttr("disabled");
2702        },
2703      }); // end image upload script
2704    } // end of for statement
2705  }
2706
2707  //// prelaunch
2708  // think this will all be deprecated with new article system
2709
2710  ///////////////////////////////////
2711  ////////  Inventory Image Uploader Configuration
2712  //////////////////////////////////
2713  if (jQuery("#imageUpload-Blog").length) {
2714    new AjaxUpload("#imageUpload-Blog", {
2715      // Location of the server-side upload script
2716      action: domain + "ajax/ajax-ImageUpload-Blog.php",
2717      // File upload name
2718      name: "userfile",
2719      // Additional data to send
2720      data: {
2721        folderID: jQuery("#folderID").attr("value"),
2722      },
2723      // Submit file after selection
2724      autoSubmit: true,
2725      // The type of data that you're expecting back from the server.
2726      // Html (text) and xml are detected automatically.
2727      // Only useful when you are using json data as a response.
2728      // Set to "json" in that case.
2729      responseType: false,
2730      // Fired after the file is selected
2731      // Useful when autoSubmit is disabled
2732      // You can return false to cancel upload
2733      // @param file basename of uploaded file
2734      // @param extension of that file
2735      onChange: function (file, extension) {
2736        var dirtyFileName = file;
2737        file = cleanFileName(file);
2738        //alert(file);
2739        var fileID = file.split(".");
2740        var folderID = jQuery("#folderID").attr("value");
2741        //alert(fileID);
2742        // Clear the 'Upload Images Here!' text
2743        jQuery("#uploadTitle").empty();
2744        jQuery("#saveThisBoat").attr("disabled", "disabled");
2745        // create table
2746        jQuery("#uploadContent").prepend(
2747          '<table class="tableIU" id="image-table-' +
2748            fileID[0] +
2749            '"><tr><td class="topTd"><div class="leftContainerIU"><span class="example">Image Filename:</span><br /><span>' +
2750            dirtyFileName +
2751            '</span><img id="image-' +
2752            fileID[0] +
2753            '" src="' +
2754            domain +
2755            '/images/styleElements/loader100px.gif" /><span><input type="hidden" name="fileNames[]" value="' +
2756            file +
2757            '" /><input type="radio" name="isMainImage" value="' +
2758            file +
2759            '" />Is Main Image?</span><p><input type="button" value=" Delete This Image " onclick="deleteBlogImage(\'' +
2760            fileID[0] +
2761            '\'); return false" /></p></div></td><td><div class="rightContainerIU"><p><label for="imageTitle-' +
2762            fileID[0] +
2763            '">Image Title:<span class="red">*</span></label><br /><input type="text" id="imageTitle-' +
2764            fileID[0] +
2765            '" class="textboxWide" name="imageName[]" value="" /><br /><span class="example">ex: Bow Storage on this boat is Amazing!</span></p><p class="spacey"><label for="imageDescription">Image Description:</label><br /><textarea rows="5" name="imageDesc[]" id="imageDesc-' +
2766            fileID[0] +
2767            '" cols="40" ></textarea> <br /><span class="example">ex: Chaparral\'s are known for their Bow Storage, you will not find another brand with this much storage....etc.</span></p></div></td></tr></table>'
2768        );
2769
2770        // Change the 'Upload Images Here!' text
2771        jQuery("#uploadTitle").css("color", "#ff0000");
2772        jQuery("#uploadTitle").append("Upload Another Image");
2773      },
2774      // Fired before the file is uploaded
2775      // You can return false to cancel upload
2776      // @param file basename of uploaded file
2777      // @param extension of that file
2778      onSubmit: function (file, extension) {},
2779      // Fired when file upload is completed
2780      // @param file basename of uploaded file
2781      // @param response server response
2782      onComplete: function (file, response) {
2783        file = cleanFileName(file);
2784        var fileID = file.split(".");
2785        //alert(fileID[0]);
2786        var folderID = jQuery("#folderID").attr("value");
2787        //var folderID = response;
2788        //var folderID = jQuery('#folderID').attr('value', folderID);
2789
2790        var imgURL = domain + "images/blog/" + folderID + "/180px/" + file;
2791
2792        //alert(imgURL);
2793
2794        jQuery("#image-" + fileID[0]).attr("src", imgURL);
2795
2796        jQuery("#saveThisBoat").removeAttr("disabled");
2797      },
2798    }); // end of image upload function
2799  }
2800
2801  //// prelaunch
2802  // think this will all be deprecated with new image uploader
2803
2804  ///////////////////////////////////
2805  ////////  MFG Image Uploader Configuration - For On The Line Pictures
2806  //////////////////////////////////
2807  if (jQuery("#imageUpload-MFG").length) {
2808    new AjaxUpload("#imageUpload-MFG", {
2809      // Location of the server-side upload script
2810      action: domain + "ajax/ajax-ImageUpload-MFG.php",
2811      // File upload name
2812      name: "userfile",
2813      // Additional data to send
2814      data: {
2815        folderID: jQuery("#folderID").attr("value"),
2816      },
2817      // Submit file after selection
2818      autoSubmit: true,
2819      // The type of data that you're expecting back from the server.
2820      // Html (text) and xml are detected automatically.
2821      // Only useful when you are using json data as a response.
2822      // Set to "json" in that case.
2823      responseType: false,
2824      // Fired after the file is selected
2825      // Useful when autoSubmit is disabled
2826      // You can return false to cancel upload
2827      // @param file basename of uploaded file
2828      // @param extension of that file
2829      onChange: function (file, extension) {
2830        var dirtyFileName = file;
2831        file = cleanFileName(file);
2832        //alert(file);
2833        var fileID = file.split(".");
2834        var folderID = jQuery("#folderID").attr("value");
2835        //alert(fileID);
2836        // Clear the 'Upload Images Here!' text
2837        //jQuery('#uploadTitle').empty();
2838        //jQuery('#saveThisBoat').attr("disabled","disabled");
2839        // create table
2840        //jQuery('#uploadContent').prepend('<table class="tableIU" id="image-table-'+fileID[0]+'"><tr><td class="topTd"><div class="leftContainerIU"><span class="example">Image Filename:</span><br /><span>'+dirtyFileName+'</span><img id="image-'+fileID[0]+'" src="'+domain+'/images/styleElements/loader100px.gif" /><span><input type="hidden" name="fileNames[]" value="'+file+'" /><input type="radio" name="isMainImage" value="'+file+'" />Is Main Image?</span><p><input type="button" value=" Delete This Image " onclick="deleteBlogImage(\''+fileID[0]+'\'); return false" /></p></div></td><td><div class="rightContainerIU"><p><label for="imageTitle-'+fileID[0]+'">Image Title:<span class="red">*</span></label><br /><input type="text" id="imageTitle-'+fileID[0]+'" class="textboxWide" name="imageName[]" value="" /><br /><span class="example">ex: Bow Storage on this boat is Amazing!</span></p><p class="spacey"><label for="imageDescription">Image Description:</label><br /><textarea rows="5" name="imageDesc[]" id="imageDesc-'+fileID[0]+'" cols="40" ></textarea> <br /><span class="example">ex: Chaparral\'s are known for their Bow Storage, you will not find another brand with this much storage....etc.</span></p></div></td></tr></table>');
2841
2842        // Change the 'Upload Images Here!' text
2843        //jQuery('#uploadTitle').css('color','#ff0000');
2844        //jQuery('#uploadTitle').append("Upload Another Image");
2845      },
2846      // Fired before the file is uploaded
2847      // You can return false to cancel upload
2848      // @param file basename of uploaded file
2849      // @param extension of that file
2850      onSubmit: function (file, extension) {
2851        jQuery("#loading").show();
2852      },
2853      // Fired when file upload is completed
2854      // @param file basename of uploaded file
2855      // @param response server response
2856      onComplete: function (file, response) {
2857        file = cleanFileName(file);
2858        var fileID = file.split(".");
2859        //alert(fileID[0]);
2860        var folderID = jQuery("#folderID").attr("value");
2861        //var folderID = response;
2862        //var folderID = jQuery('#folderID').attr('value', folderID);
2863
2864        var imgURL = domain + "images/mfg/" + folderID + "/640px/" + response;
2865
2866        //alert(imgURL);
2867        jQuery("#loading").hide();
2868        jQuery("#button_next_1").show();
2869        jQuery("#image-" + fileID[0]).attr("src", imgURL);
2870        jQuery("#image_placeholder").attr("src", imgURL);
2871
2872        jQuery("#saveThisBoat").removeAttr("disabled");
2873      },
2874    }); // end of image upload function
2875  }
2876
2877  ///////////////////////////////////
2878  ////////  MFG Image Uploader Configuration - For On The Line Pictures
2879  //////////////////////////////////
2880  if (jQuery("#imageUpload-Dealership").length) {
2881    new AjaxUpload("#imageUpload-Dealership", {
2882      // Location of the server-side upload script
2883      action: domain + "ajax/ajax-ImageUpload-Dealer.php",
2884      // File upload name
2885      name: "userfile",
2886      // Additional data to send
2887      data: {
2888        folderID: jQuery("#folderID").attr("value"),
2889      },
2890      // Submit file after selection
2891      autoSubmit: true,
2892      // The type of data that you're expecting back from the server.
2893      // Html (text) and xml are detected automatically.
2894      // Only useful when you are using json data as a response.
2895      // Set to "json" in that case.
2896      responseType: false,
2897      // Fired after the file is selected
2898      // Useful when autoSubmit is disabled
2899      // You can return false to cancel upload
2900      // @param file basename of uploaded file
2901      // @param extension of that file
2902      onChange: function (file, extension) {
2903        var dirtyFileName = file;
2904        file = cleanFileName(file);
2905        //alert(file);
2906        var fileID = file.split(".");
2907        var folderID = jQuery("#folderID").attr("value");
2908        //alert(fileID);
2909        // Clear the 'Upload Images Here!' text
2910        //jQuery('#uploadTitle').empty();
2911        //jQuery('#saveThisBoat').attr("disabled","disabled");
2912        // create table
2913        //jQuery('#uploadContent').prepend('<table class="tableIU" id="image-table-'+fileID[0]+'"><tr><td class="topTd"><div class="leftContainerIU"><span class="example">Image Filename:</span><br /><span>'+dirtyFileName+'</span><img id="image-'+fileID[0]+'" src="'+domain+'/images/styleElements/loader100px.gif" /><span><input type="hidden" name="fileNames[]" value="'+file+'" /><input type="radio" name="isMainImage" value="'+file+'" />Is Main Image?</span><p><input type="button" value=" Delete This Image " onclick="deleteBlogImage(\''+fileID[0]+'\'); return false" /></p></div></td><td><div class="rightContainerIU"><p><label for="imageTitle-'+fileID[0]+'">Image Title:<span class="red">*</span></label><br /><input type="text" id="imageTitle-'+fileID[0]+'" class="textboxWide" name="imageName[]" value="" /><br /><span class="example">ex: Bow Storage on this boat is Amazing!</span></p><p class="spacey"><label for="imageDescription">Image Description:</label><br /><textarea rows="5" name="imageDesc[]" id="imageDesc-'+fileID[0]+'" cols="40" ></textarea> <br /><span class="example">ex: Chaparral\'s are known for their Bow Storage, you will not find another brand with this much storage....etc.</span></p></div></td></tr></table>');
2914
2915        // Change the 'Upload Images Here!' text
2916        //jQuery('#uploadTitle').css('color','#ff0000');
2917        //jQuery('#uploadTitle').append("Upload Another Image");
2918      },
2919      // Fired before the file is uploaded
2920      // You can return false to cancel upload
2921      // @param file basename of uploaded file
2922      // @param extension of that file
2923      onSubmit: function (file, extension) {
2924        jQuery("#loading").show();
2925      },
2926      // Fired when file upload is completed
2927      // @param file basename of uploaded file
2928      // @param response server response
2929      onComplete: function (file, response) {
2930        file = c
2930leanFileName(file);
2931        var fileID = file.split(".");
2932        //alert(fileID[0]);
2933        var folderID = jQuery("#folderID").attr("value");
2934        //var folderID = response;
2935        //var folderID = jQuery('#folderID').attr('value', folderID);
2936
2937        var imgURL =
2938          domain + "images/dealers/" + folderID + "/640px/" + response;
2939
2940        //alert(imgURL);
2941        jQuery("#loading").hide();
2942        jQuery("#button_next_1").show();
2943        jQuery("#image-" + fileID[0]).attr("src", imgURL);
2944        jQuery("#image_placeholder").attr("src", imgURL);
2945
2946        jQuery("#saveThisBoat").removeAttr("disabled");
2947      },
2948    }); // end of image upload function
2949  }
2950
2951  ///////////////////////////////////
2952  ////////  Image Uploader Configuration for Content Page Upload
2953  //////////////////////////////////
2954  if (jQuery("#imageUpload_content").length) {
2955    new AjaxUpload("#imageUpload_content", {
2956      // Location of the server-side upload script
2957      action: domain + "ajax/ajax-ImageUpload-content.php",
2958      // File upload name
2959      name: "userfile",
2960      // Additional data to send
2961      data: {},
2962      // Submit file after selection
2963      autoSubmit: true,
2964      // The type of data that you're expecting back from the server.
2965      // Html (text) and xml are detected automatically.
2966      // Only useful when you are using json data as a response.
2967      // Set to "json" in that case.
2968      responseType: false,
2969      // Fired after the file is selected
2970      // Useful when autoSubmit is disabled
2971      // You can return false to cancel upload
2972      // @param file basename of uploaded file
2973      // @param extension of that file
2974      onChange: function (file, extension) {
2975        //alert(file);
2976        file = file.replace(/\s/g, "-");
2977        //var fileID = file.split(".");
2978        jQuery("#imageUpload_content_thumb").attr(
2979          "src",
2980          domain + "images/styleElements/loader100px.gif"
2981        );
2982
2983        // Change the 'Upload Images Here!' text
2984        //jQuery('#uploadTitle').css('color','#ff0000');
2985        //jQuery('#uploadTitle').append("Upload Another Image");
2986      },
2987      // Fired before the file is uploaded
2988      // You can return false to cancel upload
2989      // @param file basename of uploaded file
2990      // @param extension of that file
2991      onSubmit: function (file, extension) {},
2992      // Fired when file upload is completed
2993      // @param file basename of uploaded file
2994      // @param response server response
2995      onComplete: function (file, response) {
2996        //var fileID = file.split(".");
2997        //alert("success");
2998        //alert(response);
2999        file = cleanFileName(file);
3000
3001        //var idWhole = this.id.split("-");
3002        //var id = idWhole[1];
3003        //alert(idWhole);
3004
3005        var imageFilesJSON = eval("(" + response + ")");
3006
3007        //var imageTag = "<img src='"++"' alt='' />";
3008
3009        //alert(imageFilesJSON[0]);
3010        jQuery("#content-large").attr(
3011          "value",
3012          '<img src="' + imageFilesJSON[0] + '" />'
3013        );
3014        jQuery("#content-med").attr(
3015          "value",
3016          '<img src="' + imageFilesJSON[1] + '" />'
3017        );
3018        jQuery("#content-small").attr(
3019          "value",
3020          '<img src="' + imageFilesJSON[2] + '" />'
3021        );
3022
3023        jQuery("#imageUpload_content_thumb").attr("src", imageFilesJSON[2]);
3024
3025        //var emailBody = imageFilesJSON.emailBody;
3026
3027        //alert(emailBody);
3028        //eval("(" + jsonData1 + ")")
3029
3030        //alert(emailJSON.subject);
3031      },
3032    });
3033  } // end if statement
3034
3035  ///// this is used in the builder option manager to check all the next().children() checkboxes or uncheck them based on the state of this
3036  jQuery(".check_nexts_children:input").click(function () {
3037    if (jQuery(this).is(":checked")) {
3038      jQuery(".check_these-" + jQuery(this).val()).each(function () {
3039        jQuery(this).attr("checked", "true");
3040      });
3041    } else {
3042      jQuery(".check_these-" + jQuery(this).val()).each(function () {
3043        jQuery(this).removeAttr("checked");
3044      });
3045    }
3046  }); // end check_nexts_children
3047
3048  // this handles any toggles from the admin toolbar just add this class and name the div the same as the href
3049  jQuery(".admin_toolbar_toggle").click(function () {
3050    jQuery(jQuery(this).attr("href")).slideToggle("med");
3051    return false;
3052  }); // end admin_toolbar_toggle
3053
3054  // when a new client needs to be added in the locaitons manager
3055  jQuery("#client_id_selector").change(function () {
3056    // add new client is selected we remove the selector and show an input field to add a new client
3057    if (jQuery(this).val() == "new") {
3058      jQuery(this).hide();
3059      jQuery(this).remove();
3060      jQuery("#new_client").show();
3061    }
3062  });
3063
3064  // when a country is selected we show applicable states/provinces.
3065  jQuery("#country_selector").change(function () {
3066    // United States is selected
3067    if (jQuery(this).val() == 226) {
3068      jQuery("#province_dropdown").hide();
3069      jQuery("#municipality").hide();
3070      jQuery("#state_dropdown").show();
3071    } else if (jQuery(this).val() == 38) {
3072      jQuery("#state_dropdown").hide();
3073      jQuery("#municipality").hide();
3074      jQuery("#province_dropdown").show();
3075    } else {
3076      jQuery("#state_dropdown").hide();
3077      jQuery("#province_dropdown").hide();
3078      jQuery("#municipality").show();
3079    }
3080  });
3081
3082  //// prelaunch
3083  // think this will all be deprecated with new map scripts
3084
3085  // this the the geocoder get's passed and address sets the map center
3086  function showAddress(address) {
3087    var geocoder = new GClientGeocoder();
3088    geocoder.getLatLng(address, function (point) {
3089      if (!point) {
3090        alert(address + " not found");
3091      } else {
3092        //map.getCurrentMapType().getMaxZoomAtLatLng(point, function(response) {
3093        //	if (response && response['status'] == G_GEO_SUCCESS) {
3094        map.setCenter(point, 13);
3095        //}
3096        //});
3097        //var marker = new GMarker(point);
3098        //map.addOverlay(marker);
3099        //marker.openInfoWindowHtml(address);
3100      }
3101    });
3102  }
3103
3104  //// prelaunch
3105  // think this will all be deprecated with new map script
3106
3107  // this is when a user manually inputs a lat/long in the locaiton manager and wants to center the map on the new coords
3108  jQuery("#set_map_center").click(function () {
3109    center = new GLatLng(jQuery("#latitude").val(), jQuery("#longitude").val());
3110
3111    //map.getCurrentMapType().getMaxZoomAtLatLng(center, function(response) {
3112    //	if (response && response['status'] == G_GEO_SUCCESS) {
3113    map.setCenter(center, 13, G_HYBRID_MAP);
3114    //	}
3115    //}); // end find max zoom level
3116  }); // end set map center
3117
3118  //jQuery(".user_selector").click(function(){
3119  //alert('im working');
3120  //});
3121
3122  ///////////////////////////////////////////////////////////////
3123  // this populates the user form when the username is clicked from the list.
3124  // or will clear the list if new user is wanted to be added
3125  ///////////////////////////////////////////////////////////////
3126  jQuery("#location_manager_user_list").on(
3127    "click",
3128    ".user_selector",
3129    function () {
3130      //alert('working');
3131      //alert(jQuery(this).attr("user_id"));
3132      // set the selected users background to a color
3133      //jQuery(this).css("background","red");
3134      var user_id = jQuery(this).attr("user_id");
3135      //alert(user_id);
3136
3137      // if user_id is 0 we want to clear all form fields to get ready for new user
3138      if (user_id == 0) {
3139        // show and hide some stuff
3140        // hide the 'add user' button that clears the form, this is done to prevent user input error (deleting what you already did)
3141        //jQuery(this).hide();
3142        // hide and show proper buttons
3143        //alert(user_id);
3144        jQuery(".user_save").show();
3145        // empty the form
3146        jQuery("#user_id").val("");
3147        //jQuery("#user_location_id").reset();
3148        jQuery("#user_name").val("");
3149        jQuery(".image_td").css("display", "none");
3150        jQuery("#user_email").val("");
3151        jQuery("#user_phone").val("");
3152        jQuery("#user_mobile_phone").val("");
3153        jQuery("#user_mobile_carrier").val("");
3154        jQuery("#user_pass").val("");
3155        // empty out the name on the access/roles tab
3156        jQuery("#uploadContent").empty();
3157        // uncheck all the checkboxes
3158        jQuery.each(jQuery(".roles_checkbox"), function () {
3159          //alert(role);
3160          jQuery(this).removeAttr("checked");
3161        });
3162        jQuery.each(jQuery(".access_checkbox"), function () {
3163          //alert(role);
3164          jQuery(this).removeAttr("checked");
3165        });
3166      } else {
3167        // hide and show proper buttons
3168        jQuery(".user_save").show();
3169        jQuery(".image_td").css("display", "block");
3170        // display the users name on all tabs so we know who we are editing
3171        jQuery(".user_name_display").text(jQuery("#name-" + user_id).val());
3172
3173        //jQuery("#user_id").val(user_id);
3174
3175        var image = jQuery("#image-" + user_id).val();
3176
3177        if (image == "") {
3178          src = "https://s3.amazonaws.com/sdr_user_images/blank-profile-hi.png";
3179          jQuery("#image_placeholder").attr("src", src);
3180        } else {
3181          src =
3182            "https://s3.amazonaws.com/sdr_user_images/" +
3183            user_id +
3184            "/180px/" +
3185            image;
3186          jQuery("#image_placeholder").attr("src", src);
3187        }
3188
3189        jQuery("#user_id").val(user_id);
3190        jQuery("#user_name").val(jQuery("#name-" + user_id).val());
3191        jQuery("#user_email").val(jQuery("#email-" + user_id).val());
3192        jQuery("#user_phone").val(jQuery("#phone-" + user_id).val());
3193        jQuery("#user_mobile_phone").val(
3194          jQuery("#mobile_phone-" + user_id).val()
3195        );
3196        jQuery("#user_mobile_carrier").val(
3197          jQuery("#mobile_carrier-" + user_id).val()
3198        );
3199        jQuery("#user_pass").val("");
3200        jQuery("#uploadContent").empty();
3201        jQuery("#imageUpload_dealer_profile").empty();
3202
3203        jQuery("#user_location_id").val(
3204          jQuery("#user_location_id-" + user_id).val()
3205        );
3206
3207        // check the proper status box
3208        if (!jQuery("#status-" + user_id).val()) {
3209          var user_status = 0;
3210        } else {
3211          var user_status = jQuery("#status-" + user_id).val();
3212        }
3213        jQuery("#user_status-" + user_status).prop("checked", true);
3214
3215        // check the proper status box
3216        if (!jQuery("#show_on_d360-" + user_id).val()) {
3217          var show_on_d360 = 0;
3218        } else {
3219          var show_on_d360 = jQuery("#show_on_d360-" + user_id).val();
3220        }
3221        jQuery("#show_on_d360-" + show_on_d360).prop("checked", true);
3222
3223        var SDR_roles = jQuery("#user_SDR_roles-" + user_id)
3224          .val()
3225          .split(",");
3226        var SDR_access = jQuery("#user_SDR_access-" + user_id)
3227          .val()
3228          .split(",");
3229
3230        // uncheck all the checkboxes
3231        jQuery.each(jQuery(".roles_checkbox"), function () {
3232          //alert(role);
3233          jQuery(this).removeAttr("checked");
3234        });
3235        jQuery.each(jQuery(".access_checkbox"), function () {
3236          //alert(role);
3237          jQuery(this).removeAttr("checked");
3238        });
3239
3240        jQuery.each(SDR_roles, function (k, role) {
3241          //alert(role);
3242          jQuery("#SDR_role-" + role).prop("checked", true);
3243        });
3244
3245        jQuery.each(SDR_access, function (k, access) {
3246          //alert(access);
3247          jQuery("#SDR_access-" + access).prop("checked", true);
3248        });
3249      } //end else user id present
3250    }
3251  );
3252
3253  ///////////////////////////
3254  //// when a role is checked we try to auto-populate the accesses to default permissions
3255  ///////////////////////////
3256  jQuery(".roles_checkbox:input").click(function () {
3257    //alert('role clicked');
3258    // if this is checked
3259    if (jQuery(this).is(":checked")) {
3260      var role_id = jQuery(this).val();
3261      // cycle through all the default access levels
3262      jQuery.each(roles_accesses, function (k, role) {
3263        //alert(k);
3264        //alert(access);
3265        if (role_id == role["role_id"]) {
3266          //alert(role['access_id']);
3267          jQuery("#SDR_access-" + role["access_id"]).attr("checked", "true");
3268          //alert(jQuery("#SDR_access-"+role['access_id']).is(":checked"));
3269        }
3270      });
3271    }
3272  });
3273
3274  //// prelaunch
3275  // ajax url call needs to be folded into a global controller
3276
3277  ///////////////////////////
3278  //// when a locqtion is changed on the boat builder we need to update some fields
3279  ///  Also possibly this will call the new boat builder margins?
3280  ///////////////////////////
3281
3282  jQuery(".location_changer").change(function () {
3283    // if this is a nap boat we don't allow anytihng to change
3284    if (!is_nap || is_nap == "0") {
3285      //update the value of location_id on the builder config margins form
3286      jQuery(".location_holder").val(jQuery(this).val());
3287
3288      var location_id = jQuery(this).val();
3289      var model_line = jQuery("#product_line_holder").val();
3290
3291      var response = jQuery.ajax({
3292        type: "POST",
3293        url: domain + "ajax/getBuilderConfigs.php",
3294        data: "location_id=" + location_id + "&model_line=" + model_line,
3295
3296        error: function () {
3297          alertResponse(
3298            "Cannot retrieve margins. For:" + jQuery(this).val() + response
3299          );
3300        },
3301        success: function (del) {
3302          // This empties the margins displayed and shows the new margins
3303          if (response.responseText) {
3304            //alert(response.text);
3305            // closes the loading wheel visual
3306            jQuery("#margins_div_holder").empty();
3307
3308            jQuery("#margins_div_holder").append(response.responseText);
3309
3310            jQuery("#margin_base_boat-10").change();
3311          } else {
3312            alertResponse(response);
3313          }
3314        },
3315      });
3316      return false;
3317    } // end if not nap
3318  });
3319
3320  // when a location changer is available, let's change it just to make sure all data for this location is correct
3321  if (jQuery(".location_changer").length && is_boatbuilder != "1") {
3322    jQuery(".location_changer").change();
3323  }
3324
3325  ////////////////////////////////////////////////
3326  //////////// This re-assigns a lead
3327  ////////////////////////////////////////////////////////
3328
3329  jQuery(".auto_lead_reassign").click(function () {
3330    var submitButton = jQuery(this);
3331    var btnText = jQuery(this).attr("value");
3332    jQuery(submitButton).attr("value", " Re-assigning... ");
3333    jQuery(submitButton).attr("disabled", "disabled");
3334
3335    var lead_id = jQuery(this).attr("lead_id");
3336
3337    var zip = jQuery("#" + lead_id + " input[name=zip]").val();
3338    var country = jQuery(
3339      "#" + lead_id + " select[name=country] option:selected"
3340    ).val();
3341
3342    //alert(country);
3343
3344    var response = jQuery.ajax({
3345      type: "POST",
3346      url: domain + "Leads.php?action=auto_lead_reassign",
3347      data: "lead_id=" + lead_id + "&zip=" + zip + "&country=" + country,
3348      error: function () {
3349        fail(
3350          "Lead has NOT been re-assigned. Please Contact an adminstrator.",
3351          lead_id
3352        );
3353        alertResponse(response);
3354      },
3355      success: function (del) {
3356        // if the response from the query == 1 (success) the success function is fired
3357        if (response.responseText == 0) {
3358          fail(
3359            "Lead has NOT been re-assigned. Please contact an administrator.",
3360            lead_id
3361          );
3362          alertResponse(response);
3363        }
3364        // else success
3365        else {
3366          // sets buttons back enabled
3367          alert(response.responseText);
3368          success("Lead Re-Assigned Successfully.", lead_id);
3369          //alertResponse(response);
3370
3371          jQuery(submitButton).attr("value", btnText);
3372          jQuery(submitButton).removeAttr("disabled");
3373        }
3374      },
3375    });
3376
3377    return false;
3378  });
3379
3380  // prelaunch
3381  // ajax controller url/function needs to  be migrated to base controller
3382  ////////////////////////////////////////////////
3383  //////////// This Gets a paginated list of quotes/builds
3384  ////////////////////////////////////////////////////////
3385
3386  //jQuery(".boat_builder_list_pager").on('click', 'a', function() {
3387  jQuery(".build_list_set").on("click", ".list_build_pager", function () {
3388    //jQuery(".boat_builder_list_pager a").live('click', function() {
3389
3390    //alert('clicked');
3391    //return true;
3392
3393    var user_id = jQuery(this).parent().attr("user_id");
3394    var rep_id = jQuery(this).parent().attr("rep_id");
3395    var location_id = jQuery(this).parent().attr("location_id");
3396    var build_type = jQuery(this).parent().attr("build_type");
3397    var hide_branding = jQuery("#hide_branding").val();
3398    var action = "list";
3399
3400    var query_string = jQuery(this).attr("href").split("?");
3401
3402    var next = query_string[1];
3403
3404    var response = jQuery.ajax({
3405      type: "POST",
3406      url: domain + "ajax/Boat-Builder-List.php",
3407
3408      data:
3409        next +
3410        "user_id=" +
3411        user_id +
3412        "&rep_id=" +
3413        rep_id +
3414        "&location_id=" +
3415        location_id +
3416        "&build_type=" +
3417        build_type +
3418        "&action=" +
3419        action +
3420        "&hide_branding=" +
3421        hide_branding,
3422
3423      error: function () {
3424        fail(
3425          "Lead has NOT been re-assigned. Please Contact an adminstrator.",
3426          lead_id
3427        );
3428        alertResponse(response);
3429      },
3430      success: function (del) {
3431        // if the response from the query == 1 (success) the success function is fired
3432
3433        if (response.responseText == 0) {
3434          fail(
3435            "Cannot retrieve builds. Please contact an administrator.",
3436            lead_id
3437          );
3438          alertResponse(response);
3439        }
3440        // else success
3441        else {
3442          // sets buttons back enabled
3443          //alert(response.responseText);
3444
3445          jQuery("#" + build_type).empty();
3446          jQuery("#" + build_type).append(response.responseText);
3447        }
3448      },
3449    });
3450
3451    return false;
3452  });
3453
3454  jQuery(".pagination_container").on("click", ".list_pager", function (e) {
3455    e.preventDefault();
3456    //alert("clicked");
3457    //return true;
3458
3459    // loop through all attributes and store them as vars
3460    const element = jQuery(this).parent();
3461
3462    var controller = "";
3463    var action = "";
3464    var content_container = "";
3465
3466    //const attributes = element.attributes;
3467    var data = "";
3468    jQuery.each(element[0].attributes, function (index, attr) {
3469      //alert(attr.name);
3470      console.log(attr);
3471      //attributes[attr.name] = attr.value;
3472      if (attr.name != "style") {
3473        data += attr.name + "=" + attr.value + "&";
3474        if (attr.name == "controller") {
3475          controller = attr.value;
3476          //alert('cont here'+controller);
3477        } else if (attr.name == "action") {
3478          action = attr.value;
3479        } else if (attr.name == "content_container") {
3480          content_container = attr.value;
3481        }
3482      }
3483    });
3484
3485    jQuery("#" + content_container).empty();
3486    var query_string = jQuery(this).attr("href").split("?");
3487
3488    var next = query_string[1];
3489
3490    var response = jQuery.ajax({
3491      type: "GET",
3492      url: controller + "?action=" + action,
3493
3494      data: data + "" + next,
3495
3496      error: function () {
3497        fail(
3498          "Pagination no work here no more. Please Contact an adminstrator.",
3499          lead_id
3500        );
3501        alertResponse(response);
3502      },
3503      success: function (del) {
3504        // if the response from the query == 1 (success) the success function is fired
3505
3506        if (response.responseText == 0) {
3507          fail(
3508            "Cannot retrieve data. Please contact an administrator.",
3509            lead_id
3510          );
3511          alertResponse(response);
3512        }
3513        // else success
3514        else {
3515          // sets buttons back enabled
3516          //alert(response.responseText);
3517
3518          jQuery("#" + content_container).append(response.responseText);
3519        }
3520      },
3521    });
3522
3523    return false;
3524  });
3525
3526  ////////////////////////////////////////////////
3527  //////////// This Gets a paginated list of part quotes/orders
3528  ////////////////////////////////////////////////////////
3529
3530  jQuery(".part_order_list_set").on(
3531    "click",
3532    ".list_part_order_pager",
3533    function (event) {
3534      //jQuery(".build_list_set").on('click', '.list_build_pager', function() {
3535      //event.preventDefault();
3536      //alert('next');
3537      //return true;
3538
3539      var user_id = jQuery(this).parent().attr("user_id");
3540      var rep_id = jQuery(this).parent().attr("rep_id");
3541      var location_id = jQuery(this).parent().attr("location_id");
3542      var build_type = jQuery(this).parent().attr("build_type");
3543      var hide_branding = jQuery("#hide_branding").val();
3544      var action = "list_ajax";
3545
3546      var query_string = jQuery(this).attr("href").split("?");
3547
3548      var next = query_string[1];
3549
3550      var response = jQuery.ajax({
3551        type: "GET",
3552        url: domain + "Parts.php",
3553
3554        data:
3555          next +
3556          "user_id=" +
3557          user_id +
3558          "&rep_id=" +
3559          rep_id +
3560          "&location_id=" +
3561          location_id +
3562          "&build_type=" +
3563          build_type +
3564          "&action=" +
3565          action +
3566          "&hide_branding=" +
3567          hide_branding,
3568
3569        error: function () {
3570          //fail("pagination failed. Please Contact an adminstrator.", user_id);
3571          alertResponse("error");
3572          return false;
3573        },
3574        success: function (del) {
3575          // if the response from the query == 1 (success) the success function is fired
3576          if (response.responseText == 0) {
3577            //fail("Cannot retrieve orders. Please contact an administrator.",lead_id);
3578            alertResponse("cannot retrieve orders");
3579            return false;
3580          }
3581          // else success
3582          else {
3583            // sets buttons back enabled
3584            //alert(response.responseText);
3585
3586            jQuery("#" + build_type).empty();
3587            jQuery("#" + build_type).append(response.responseText);
3588          }
3589        },
3590      });
3591
3592      return false;
3593    }
3594  );
3595
3596  // prelaunch
3597  // probably not necessary for this site
3598  ////////////////////////////////////////////////
3599  //////////// This Gets a paginated list of warranty claims
3600  ////////////////////////////////////////////////////////
3601
3602  jQuery(".warranty_claim_list_set").on(
3603    "click",
3604    ".list_warranty_claim_pager",
3605    function () {
3606      //jQuery(".build_list_set").on('click', '.list_build_pager', function() {
3607
3608      //alert('clicked');
3609      //return true;
3610
3611      var user_id = jQuery(this).parent().attr("user_id");
3612      var rep_id = jQuery(this).parent().attr("rep_id");
3613      var location_id = jQuery(this).parent().attr("location_id");
3614      var build_type = jQuery(this).parent().attr("build_type");
3615      var hide_branding = jQuery("#hide_branding").val();
3616      var action = "warranty_claims_ajax";
3617
3618      var query_string = jQuery(this).attr("href").split("?");
3619
3620      var next = query_string[1];
3621
3622      var response = jQuery.ajax({
3623        type: "POST",
3624        url: domain + "Warranty.php",
3625
3626        data:
3627          next +
3628          "user_id=" +
3629          user_id +
3630          "&rep_id=" +
3631          rep_id +
3632          "&location_id=" +
3633          location_id +
3634          "&build_type=" +
3635          build_type +
3636          "&action=" +
3637          action +
3638          "&hide_branding=" +
3639          hide_branding,
3640
3641        error: function () {
3642          fail(
3643            "Lead has NOT been re-assigned. Please Contact an adminstrator.",
3644            lead_id
3645          );
3646          alertResponse(response);
3647        },
3648        success: function (del) {
3649          // if the response from the query == 1 (success) the success function is fired
3650          if (response.responseText == 0) {
3651            fail(
3652              "Cannot retrieve orders. Please contact an administrator.",
3653              lead_id
3654            );
3655            alertResponse(response);
3656          }
3657          // else success
3658          else {
3659            // sets buttons back enabled
3660            //alert(response.responseText);
3661
3662            jQuery("#" + build_type).empty();
3663            jQuery("#" + build_type).append(response.responseText);
3664          }
3665        },
3666      });
3667
3668      return false;
3669    }
3670  );
3671
3672  jQuery(".warranty_claim_ajax_container").on(
3673    "change",
3674    ".warranty_claim_cost",
3675    function () {
3676      alert("test test");
3677    }
3678  ); // end
3679
3680  // prelaunch
3681  // necessary? / ryan code maybe?
3682  //Temporary 3D Builder Toggle Suppression Method
3683
3684  jQuery("a").on("click keydown", (e) => {
3685    let actionParam;
3686    let urlParams;
3687    let og_href;
3688
3689    if (jQuery(e.target).attr("href")) {
3690      og_href = jQuery(e.target).attr("href");
3691      urlParams = new URLSearchParams(jQuery(e.target).attr("href"));
3692      actionParam = urlParams.get("action");
3693    } else if (jQuery(e.target).parent().attr("href")) {
3694      og_href = jQuery(e.target).parent().attr("href");
3695      urlParams = new URLSearchParams(jQuery(e.target).parent().attr("href"));
3696      actionParam = urlParams.get("action");
3697    }
3698
3699    if (actionParam == "tab_boat_builder") {
3700      var builder_type = localStorage.getItem("configurator_preference");
3701
3702      if (builder_type == "2D") {
3703        e.preventDefault();
3704        window.location.replace(og_href + "&3d_config=false");
3705      } else {
3706        return;
3707      }
3708    }
3709  });
3710}); // end doc ready?
3711
3712jQuery(function () {
3713  jQuery(".dealer_locator_results_selector").submit(function (e) {
3714    //jQuery("body").delegate(".dealer_locator_results_selector form","submit",function(e){
3715    // prevent form submit behavior
3716    e.preventDefault();
3717    //alert('change');
3718    jQuery(".ajax_dealer_locator").html("Searching...");
3719
3720    // determine what element (based on id) to return the results to
3721    //alert(jQuery(this).attr("id"));
3722    var return_results_elem_id = jQuery(
3723      "#" + jQuery(this).attr("id") + " input[name=return_results_elem_id]"
3724    ).val();
3725    //alert(return_results_elem_id);
3726    // fetch and serialize the form data
3727    var form_data = jQuery(jQuery(this)).serializeArray();
3728    //console.log(form_data);
3729    var response = $.ajax({
3730      type: "POST",
3731      url: "Yamaha-Dealer-Locator.php?action=dealer_locator_results_selector",
3732      data: form_data,
3733      error: function () {
3734        alert("Auto Locator is not working. Please contact SDR.");
3735        //alert(response.responseText);
3736        return false;
3737      },
3738      success: function () {
3739        // remove the image table from the page
3740        //alert('success');
3741        // update the record id field for this form
3742        if (return_results_elem_id) {
3743          jQuery("#" + return_results_elem_id).html();
3744          jQuery("#" + return_results_elem_id).html(response.responseText);
3745          //return_results_elem_id.html(response.responseText);
3746        }
3747        jQuery(".ajax_dealer_locator").html("SEARCH");
3748        return false;
3749      },
3750    });
3751  });
3752});
3753
3754jQuery(function () {
3755  jQuery("body").delegate(".dealership_selector", "click", function (e) {
3756    // set some display text
3757    document.getElementById("modal_dealer_name").innerHTML =
3758      jQuery(this).attr("dealerName");
3759    // set a dealer number value to the confirm button which triggers the next step
3760    jQuery("#dealer_selector_confirm").attr(
3761      "dealerNumber",
3762      jQuery(this).attr("dealerNumber")
3763    );
3764    jQuery("#dealer_selector_confirm").attr(
3765      "dealerName",
3766      jQuery(this).attr("dealerName")
3767    );
3768    jQuery("#dealer_selector_confirm").attr(
3769      "dealerPhone",
3770      jQuery(this).attr("dealerPhone")
3771    );
3772    jQuery("#dealer_selector_confirm").attr(
3773      "dealerAddress",
3774      jQuery(this).attr("dealerAddress")
3775    );
3776    jQuery("#dealer_selector_confirm").attr(
3777      "dealerCityState",
3778      jQuery(this).attr("dealerCityState")
3779    );
3780
3781    //alert(jQuery(this).attr('dealerNumber'));
3782    //alert(jQuery(this).attr('dealerName'));
3783    jQuery(".modal").show();
3784  });
3785});
3786
3787jQuery(function () {
3788  jQuery("body").delegate(".dealer_selector_confirm", "click", function (e) {
3789    // set the dealerNumber in the reservation form
3790    jQuery("#dealerNumber").val(jQuery(this).attr("dealerNumber"));
3791    jQuery("#dealerNumber2").val(jQuery(this).attr("dealerNumber"));
3792
3793    // display the selected dealer info
3794    jQuery("#dealerName").html(jQuery(this).attr("dealerName"));
3795    jQuery("#dealerPhone").html(jQuery(this).attr("dealerPhone"));
3796    jQuery("#dealerAddress").html(jQuery(this).attr("dealerAddress"));
3797    jQuery("#dealerCityState").html(jQuery(this).attr("dealerCityState"));
3798
3799    //alert($(this).attr('id'));
3800    //alert('here');
3801    $("#dealer_selection").hide();
3802    $("#customer_info").show();
3803    $("#payment_step").hide();
3804    $(".modal").hide();
3805  });
3806});
3807
3808// this is for sps when a customer comes in from a waitlit email link.
3809// they do not input customer info as it is already in the system
3810jQuery(function () {
3811  jQuery("body").delegate(
3812    ".dealer_selector_confirm_waitlist",
3813    "click",
3814    function (e) {
3815      // set the dealerNumber in the reservation form
3816      jQuery("#dealerNumber").val(jQuery(this).attr("dealerNumber"));
3817      jQuery("#dealerNumber2").val(jQuery(this).attr("dealerNumber"));
3818
3819      // trigger a reservation save so dealernumber is saved with the reservation
3820      jQuery("#dealerNumber").trigger("change");
3821
3822      // trigger load payment form
3823      // this is done first so hopefully it will be completed by the time we show the iframe parent page
3824      //loadPaymentForm("form_reservation");
3825
3826      // display the selected dealer info
3827      jQuery("#dealerName").html(jQuery(this).attr("dealerName"));
3828      jQuery("#dealerPhone").html(jQuery(this).attr("dealerPhone"));
3829      jQuery("#dealerAddress").html(jQuery(this).attr("dealerAddress"));
3830      jQuery("#dealerCityState").html(jQuery(this).attr("dealerCityState"));
3831
3832      //alert($(this).attr('id'));
3833      //alert('here');
3834      $("#dealer_selection").hide();
3835      $("#customer_info").show();
3836      $("#payment_step").hide();
3837      $(".modal").hide();
3838
3839      // show payment section
3840      //jQuery("#payment_step").show();
3841    }
3842  );
3843});
3844
3845// this function takes in zip code and returns a list of dealer inventory items
3846jQuery(function () {
3847  jQuery(".dealer_inventory_locator").submit(function (e) {
3848    //jQuery("body").delegate(".dealer_locator_results_selector form","submit",function(e){
3849    // prevent form submit behavior
3850    e.preventDefault();
3851    //alert('change');
3852    jQuery(".ajax_inventory_locator").html("Searching...");
3853    console.log(
3854      "host: " +
3855        window.location.host +
3856        "/Dealer-Inventory.php?action=ajax_dealer_inventory_search"
3857    );
3858    // determine what element (based on id) to return the results to
3859    //alert(jQuery(this).attr("id"));
3860    var return_results_elem_id = jQuery(
3861      "#" + jQuery(this).attr("id") + " input[name=return_results_elem_id]"
3862    ).val();
3863    var container_id_to_show = jQuery(
3864      "#" + jQuery(this).attr("id") + " input[name=container_id_to_show]"
3865    ).val();
3866    var container_id_to_hide = jQuery(
3867      "#" + jQuery(this).attr("id") + " input[name=container_id_to_hide]"
3868    ).val();
3869
3870    //alert(return_results_elem_id);
3871    // fetch and serialize the form data
3872    var form_data = jQuery(jQuery(this)).serializeArray();
3873    //console.log(form_data);
3874    var response = $.ajax({
3875      type: "POST",
3876      url:
3877        "https://" +
3878        window.location.host +
3879        "/Dealer-Inventory.php?action=ajax_dealer_inventory_search",
3880      data: form_data,
3881      error: function () {
3882        alert("Inventory search is not working. Please check back later.");
3883        //alert(response.responseText);
3884        return false;
3885      },
3886      success: function (data) {
3887        const responseData = JSON.parse(data);
3888        // update the record id field for this form
3889        if (return_results_elem_id) {
3890          jQuery("#" + container_id_to_hide).hide();
3891          jQuery("#" + return_results_elem_id).html();
3892          jQuery("#" + return_results_elem_id).html(responseData.html);
3893          jQuery("#" + container_id_to_show).show();
3894        }
3895
3896        // Set Assigned Dealer Cookie
3897        if (responseData.dealer) {
3898          document.cookie = `assigned_dealer_number=${responseData.dealer}; expires=Tue, 19 Jan 2038 04:14:07 GMT; path=/`;
3899        }
3900
3901        jQuery(".ajax_inventory_locator").html("SEARCH");
3902        return false;
3903      },
3904    });
3905  });
3906});
3907
3908// sps continue button
3909// validates form
3910// calls for payment form
3911jQuery(function () {
3912  jQuery("body").delegate(
3913    "#form_reservation_no_validate",
3914    "submit",
3915    function (event) {
3916      event.preventDefault();
3917
3918      var form = jQuery(this.form);
3919
3920      var reservation_form_validated = 1;
3921
3922      if (!jQuery("#consent").val()) {
3923        jQuery("#form_validate_consent").css("display", "block");
3924        reservation_form_validated = 0;
3925      }
3926
3927      if (reservation_form_validated) {
3928        // trigger load payment form
3929        // this is done first so hopefully it will be completed by the time we show the iframe parent page
3930        loadPaymentForm("form_reservation_no_validate");
3931
3932        //alert('saving');
3933        // if successfully validated we hide the customer info form
3934
3935        $("#dealer_selection").hide();
3936        $("#customer_info").hide();
3937        $("#payment_step").show();
3938        $(".modal").hide();
3939      }
3940    }
3941  );
3942});
3943
3944// sps continue button
3945// validates form
3946// calls for payment form
3947jQuery(function () {
3948  jQuery("body").delegate("#form_reservation", "submit", function (event) {
3949    event.preventDefault();
3950
3951    var form = jQuery(this.form);
3952
3953    var reservation_form_validated = 1;
3954    if (!jQuery("#firstName").val()) {
3955      jQuery("#form_validate_firstName").css("display", "block");
3956      reservation_form_validated = 0;
3957    }
3958
3959    if (!jQuery("#lastName").val()) {
3960      jQuery("#form_validate_lastName").css("display", "block");
3961      reservation_form_validated = 0;
3962    }
3963
3964    if (!jQuery("#address1").val()) {
3965      jQuery("#form_validate_address1").css("display", "block");
3966      reservation_form_validated = 0;
3967    }
3968
3969    if (!jQuery("#city").val()) {
3970      jQuery("#form_validate_city").css("display", "block");
3971      reservation_form_validated = 0;
3972    }
3973
3974    if (!jQuery("#customerPhone").val()) {
3975      jQuery("#form_validate_customerPhone").css("display", "block");
3976      reservation_form_validated = 0;
3977    }
3978    // clean the phone number of string characters and check phone number length
3979    else if (jQuery("#customerPhone").val().replace(/\D/g, "").length != 10) {
3980      jQuery("#form_validate_customerPhoneLength").css("display", "block");
3981      reservation_form_validated = 0;
3982    }
3983
3984    if (!jQuery("#state").val()) {
3985      jQuery("#form_validate_state").css("display", "block");
3986      reservation_form_validated = 0;
3987    }
3988
3989    if (!jQuery("#zipCode").val()) {
3990      jQuery("#form_validate_zipCode").css("display", "block");
3991      reservation_form_validated = 0;
3992    } else if (jQuery("#zipCode").val().replace(/\D/g, "").length != 5) {
3993      jQuery("#form_validate_zipCodeLength").css("display", "block");
3994      reservation_form_validated = 0;
3995    }
3996
3997    if (!jQuery("#email").val()) {
3998      jQuery("#form_validate_email").css("display", "block");
3999      reservation_form_validated = 0;
4000    }
4001    if (!jQuery("#consent").val()) {
4002      jQuery("#form_validate_consent").css("display", "block");
4003      reservation_form_validated = 0;
4004    }
4005
4006    if (reservation_form_validated) {
4007      //alert('saving');
4008      // if successfully validated we hide the customer info form
4009      jQuery("#form_reservation").hide();
4010
4011      var form_id = jQuery(this).attr("id");
4012
4013      // submit the reservation form
4014      var record_id_field_name = jQuery(this)
4015        .find("input[name=record_id_field]")
4016        .val();
4017
4018      if (record_id_field_name) {
4019        //var record_id_field = jQuery("#"+jQuery(this.form).attr("id")+" input[name="+record_id_field_name+"]");
4020        var record_id_field = jQuery(this).find(
4021          "input[name=" + record_id_field_name + "]"
4022        );
4023      }
4024
4025      // fetch and serialize the form data
4026      //var form_data = jQuery(jQuery(this.form)).serializeArray();
4027      //console.log(form_data);
4028      var form_data = jQuery(jQuery(this)).serializeArray();
4029
4030      var response = $.ajax({
4031        type: "POST",
4032        url: controller_url + "?action=ajax_form_save",
4033        data: form_data,
4034        error: function () {
4035          alert("Auto Save is not working. Please contact SDR.");
4036          alert(response.responseText);
4037        },
4038        success: function () {
4039          // remove the image table from the page
4040          //alert('success');
4041          // update the record id field for this form
4042          record_id_field.val(response.responseText);
4043
4044          // trigger load payment form
4045          loadPaymentForm(form_id);
4046          // show payment section
4047          jQuery("#payment_step").show();
4048
4049          //jQuery('.ajax_save_button').html("Saved");
4050          return false;
4051        },
4052      });
4053    }
4054  });
4055});
4056
4057jQuery(document).ready(function () {
4058  jQuery("body").on("click", ".set_home_dealer", function (e) {
4059    e.preventDefault();
4060    var current_button_text = jQuery(this).html();
4061    var assigned_dealer_number = jQuery(this).attr("dealerNumber");
4062
4063    if (jQuery(this).attr("isSnowmobileDlr") == 1) {
4064      document.cookie =
4065        "snowmobile_dlr=" +
4066        assigned_dealer_number +
4067        "; expires=Tue, 19 Jan 2038 04:14:07 GMT; path=/";
4068    }
4069    if (jQuery(this).attr("isSideBySideDlr") == 1) {
4070      document.cookie =
4071        "side_by_side_dlr=" +
4072        assigned_dealer_number +
4073        "; expires=Tue, 19 Jan 2038 04:14:07 GMT; path=/";
4074    }
4075    if (jQuery(this).attr("isConsumerGeneratorDlr") == 1) {
4076      document.cookie =
4077        "consumer_generator_dlr=" +
4078        assigned_dealer_number +
4079        "; expires=Tue, 19 Jan 2038 04:14:07 GMT; path=/";
4080    }
4081    if (jQuery(this).attr("isATVDlr") == 1) {
4082      document.cookie =
4083        "atv_dlr=" +
4084        assigned_dealer_number +
4085        "; expires=Tue, 19 Jan 2038 04:14:07 GMT; path=/";
4086    }
4087    if (jQuery(this).attr("isMotorcycleDlr") == 1) {
4088      document.cookie =
4089        "motorcycle_dlr=" +
4090        assigned_dealer_number +
4091        "; expires=Tue, 19 Jan 2038 04:14:07 GMT; path=/";
4092    }
4093    if (jQuery(this).attr("isScooterDlr") == 1) {
4094      document.cookie =
4095        "scooter_dlr=" +
4096        assigned_dealer_number +
4097        "; expires=Tue, 19 Jan 2038 04:14:07 GMT; path=/";
4098    }
4099
4100    document.cookie =
4101      "assigned_dealer_number=" +
4102      assigned_dealer_number +
4103      "; expires=Tue, 19 Jan 2038 04:14:07 GMT; path=/";
4104
4105    // loop through all other .set_home_dealer buttons and set them back to the default value
4106    jQuery(".set_home_dealer").each(function (i, obj) {
4107      jQuery(this).html(current_button_text);
4108    });
4109
4110    jQuery(this).empty();
4111    jQuery(this).html("IS MY HOME DEALER");
4112  });
4113});
4114
4115//jQuery(function(){
4116//	jQuery("body").delegate(".load_payment_form","click",function(e){
4117function loadPaymentForm(form_id) {
4118  //alert(form_id);
4119  // hide the payment info form
4120  jQuery("#customer_info").hide();
4121
4122  // send the entire form to the payment_gateway controller
4123
4124  // response will be html code containing iframe
4125  //alert('change');
4126
4127  // fetch and serialize the form data
4128  var form_data = jQuery("#" + form_id).serializeArray();
4129
4130  var response = $.ajax({
4131    type: "POST",
4132    url: "Payment-Gateway.php?action=get_payment_form",
4133    data: form_data,
4134    error: function () {
4135      alert("Payment Gateway not responding. Please try later.");
4136      //alert(response.responseText);
4137    },
4138    success: function () {
4139      // remove the image table from the page
4140      //alert('success');
4141      // update the record id field for this form
4142
4143      jQuery("#payment_form_holder").html(response.responseText);
4144      jQuery("#dealer_selection").hide();
4145
4146      jQuery("#payment_step").show();
4147      //jQuery('.ajax_save_button').html("Saved");
4148      return false;
4149    },
4150  });
4151
4152  // set the dealerNumber in the reservation form
4153
4154  //	});
4155  //});
4156} // end loadPaymentForm
4157
4158jQuery(function () {
4159  jQuery("body").delegate(".load_payment_form", "click", function (e) {
4160    //function loadPaymentForm(form){
4161
4162    // hide the payment info form
4163    jQuery("#customer_info").hide();
4164
4165    // send the entire form to the payment_gateway controller
4166
4167    // response will be html code containing iframe
4168    //alert('change');
4169
4170    // fetch and serialize the form data
4171    var form_data = jQuery(form).serializeArray();
4172
4173    var response = $.ajax({
4174      type: "POST",
4175      url: "Payment-Gateway.php?action=get_payment_form",
4176      data: form_data,
4177      error: function () {
4178        alert("Payment Gateway not responding. Please try later.");
4179        //alert(response.responseText);
4180      },
4181      success: function () {
4182        // remove the image table from the page
4183        //alert('success');
4184        // update the record id field for this form
4185
4186        jQuery("#payment_form_holder").html(response.responseText);
4187        jQuery("#dealer_selection").hide();
4188
4189        jQuery("#payment_step").show();
4190        //jQuery('.ajax_save_button').html("Saved");
4191        return false;
4192      },
4193    });
4194
4195    // set the dealerNumber in the reservation form
4196  });
4197});
4198//}// end loadPaymentForm
4199
4200jQuery(function () {
4201  jQuery("body").delegate(".send_waitlist_email", "click", function (e) {
4202    // send the entire form to the payment_gateway controller
4203
4204    // response will be html code containing iframe
4205    //alert('change');
4206
4207    // fetch and serialize the form data
4208    var form_data = jQuery(jQuery(this.form)).serializeArray();
4209
4210    var response = $.ajax({
4211      type: "POST",
4212      url: "models.php?action=ajax_send_waitlist_email",
4213      data: form_data,
4214      error: function () {
4215        alert("Email System not responding. Please try later.");
4216        //alert(response.responseText);
4217      },
4218      success: function () {
4219        // remove the image table from the page
4220        console.log("waitlist email sent");
4221        // update the record id field for this form
4222
4223        //jQuery('.ajax_save_button').html("Saved");
4224        return false;
4225      },
4226    });
4227
4228    // set the dealerNumber in the reservation form
4229  });
4230});
4231
4232jQuery(function () {
4233  jQuery("body").delegate(
4234    ".send_waitlist_registration_email",
4235    "click",
4236    function (e) {
4237      // send the entire form to the payment_gateway controller
4238      var this_button = jQuery(this);
4239      this_button.empty().html("Sending Email...");
4240
4241      // response will be html code containing iframe
4242      //alert('change');
4243
4244      // fetch and serialize the form data
4245      var form_data = jQuery(jQuery(this.form)).serializeArray();
4246
4247      var response = $.ajax({
4248        type: "POST",
4249        url: "models.php?action=ajax_send_waitlist_registration_email&dev_sps=1",
4250        data: form_data,
4251        error: function () {
4252          alert("Email System not responding. Please try later.");
4253          //alert(response.responseText);
4254        },
4255        success: function () {
4256          // remove the image table from the page
4257          console.log("waitlist registration email sent");
4258          this_button.empty().html("Email Sent");
4259
4260          //jQuery('.ajax_save_button').html("Saved");
4261          return false;
4262        },
4263      });
4264
4265      // set the dealerNumber in the reservation form
4266    }
4267  );
4268});
4269
4270// Global Assigned Dealer Check - Currently For /models.php?action=search_inventory
4271$(function () {
4272  const assignedDealer = getCookieValue("assigned_dealer_number");
4273
4274  // Check If Current Page Is Search Inventory - Assign Dealer Number From URL Param
4275  if (
4276    !assignedDealer &&
4277    window.location.href.includes("models.php?action=search_inventory")
4278  ) {
4279    const params = new URLSearchParams(window.location.href.split("?")[1]);
4280    const dealerNumber = params.get("mfg_dealer_number");
4281    if (dealerNumber) {
4282      document.cookie = `assigned_dealer_number=${dealerNumber}; expires=Tue, 19 Jan 2038 04:14:07 GMT; path=/`;
4283    }
4284  }
4285});

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.