PageSourceSearch

https://vergabe.saarland/NetServer/_commonfiles/js/script_net.js

js vergabe.saarland collected 2026-10-04 07:44:16 UTC 28,666 bytes, 650 lines download raw bytes

1jQuery(document).ready(function ($) {
2  $('.js-hide').css("visibility", "hidden");
3
4  if (!String.prototype.includes){
5    String.prototype.includes = function(search, start) {
6      if (typeof start !== 'number') {start = 0;}
7      if (start + search.length > this.length) {return false;}
8      else {return this.indexOf(search, start) !== -1;}};
9  }
10
11  $("input[type=email]").change(function () {
12    const input = $(this).val();
13    const domainPart = input.substr(input.indexOf("@") + 1);
14    const umlaute = ['\u00dc', '\u00fc', // Ü,ü
15      '\u00c4', '\u00e4',  // Ä,ä
16      '\u00d6', '\u00f6',  // Ö, ö
17      '\u00df', 'ß', 'xn--'];   // ß, punycode
18    const submitButton = $(this).closest('form').find(':submit');
19    const submitInput = $('input[type=text]');
20    const element = $('#email-validationSpace');
21    submitButton.prop("disabled",false);
22    submitInput.prop("disabled",false);
23    element.css('display', 'none');
24    if($('#validationSpace').is(':visible')){
25      return false;
26    }
27    $.each(umlaute, function (index, value) {
28      if (domainPart.indexOf(value) > -1) {
29        element.css('display', 'block');
30        submitButton.prop("disabled",true);
31        submitInput.prop("disabled",true);
32      }
33    });
34  });
35
36  $(".clickable-row").on("click", function () {
37    var tHref = $(this).data("href");
38    if (tHref !== undefined && tHref != null) {
39      window.document.location = tHref;
40    }
41  });
42
43  $("td.toggle-check").on("click", function () {
44    var tCheckbox = $(this).parent().children().find("input:checkbox");
45    tCheckbox.prop("checked", (!tCheckbox.prop("checked")));
46  });
47
48  $(".selected-box").on("click", function(aEvent) {
49    $("#my-icon-select-box-scroll").toggle();
50    aEvent.stopPropagation();
51    $(document).one("click", function() {
52      $("#my-icon-select-box-scroll").hide();
53    });
54  });
55
56  $("#conditions").on("click", function () {
57    var tCondition = $("#condition");
58    tCondition.val(tCondition.val() === "false" ? "true" : "false");
59  });
60
61  var elem = $('#CSSelect');
62  if (elem.length > 0) {
63    getCsSelect(elem.data('name'), elem.data('value'), elem.data('selected'));
64  }
65
66  $('table .linkArea').on("click",  function() {
67    $(this).find("a").trigger("click");
68  });
69
70  $(".btn-modal.messageDetail").on("click", function (e) {
71    e.stopPropagation();
72    getMessageDetail(this);
73  });
74
75  $(".btn-modal.publicMessage").on("click", function (e) {
76    e.stopPropagation();
77    getPublicMessage(this);
78  });
79
80  $(".btn-modal.zipFileContents").on("click", function (e) {
81    e.stopPropagation();
82    getStructure(this);
83  });
84
85  $(".publicationDetail").on("click", function (e) {
86    e.stopPropagation();
87    redirect(this);
88  });
89
90  $("[data-name='modalButton']").each(function() {
91    $(this).on("click", function() {
92      $(this).parent().append('<div id="modalDialogWrapper"></div>');
93      var href = $(this).attr("href");
94      $.ajax({
95        url: href,
96        success: function(data) {
97          $("#modalDialogWrapper").html(data);
98          $('#modalDialog').modal("show").on('hidden.bs.modal', function () {
99            $("#modalDialogWrapper").remove();
100          })
101        }
102      });
103      return false;
104    });
105  });
106  arrayFromFix();
107});
108
109function getCsSelect(aName, aTarget, aSelected) {
110  aTarget = '#' + aTarget;
111  var req = $(aTarget).prop('required');
112  $.ajax({
113    url: "DataProvider",
114    method: "POST",
115    data: {param: aName},
116    success: function (aResponse) {
117      $(aTarget).prop('onclick', null).off('click');
118      if (aResponse.length > 0) {
119        var size = 1;
120        var tOutput = "";
121        var tJson = JSON.parse(aResponse);
122        $.each(tJson, function (k, v) {
123          tOutput += '<option value="' + (req ? '' : k) + '" ' + (k === aSelected ? "selected" : "") + (k === 0 ? "hidden" : "") + '>' + v + '</option>';
124          size++;
125          req = false;
126        });
127        $(aTarget).html(tOutput);
128      }
129    }
130  });
131}
132
133function printDiv(divName) {
134  var newWin= window.open("", "printwindow");
135  var tPrintDiv = $('#'+divName);
136  var tTitle = tPrintDiv.find(".modal-title").html();
137  var tBody = tPrintDiv.find(".modal-body").html();
138  newWin.document.write(tTitle);
139  newWin.document.write(tBody);
140  newWin.print();
141  newWin.close();
142}
143
144var color = "color-main";
145var background = "background-blue";
146function setContrast() {
147  var CONTRASTMODE = localStorage.getItem("contrastMode");
148  if (CONTRASTMODE === "true") {
149    color = "color-black";
150    background = "background-black";
151  } else {
152    color = "color-main";
153    background = "background-blue";
154  }
155}
156
157function getMessageDetail(aElem) {
158  setContrast();
159  var tTarget = $($(aElem).data("target"));
160  var tData = {param: "MessageDetail", oid: $(aElem).data("oid"), participant: $(aElem).data("participant"),
161    VALIDATION_TOKEN: $(aElem).data("token"), context: $(aElem).data("context")};
162  getMessage(tTarget, tData);
163}
164
165function getPublicMessage(aElem) {
166  setContrast();
167  var tTarget = $($(aElem).data("target"));
168  var tData = {param: "PublicMessageDetail", oid: $(aElem).data("oid"), context: $(aElem).data("context")};
169  getMessage(tTarget, tData);
170}
171
172function getMessage(tTarget, tData) {
173  var tTitle = $(tTarget).find(".modal-title");
174  var tBody = $(tTarget).find(".modal-body");
175  $(tTarget).find("#btn-print").show();
176  tBody.html("<div style='text-align: center; height: 40px'><span class='loader'></span></div>");
177  tTitle.html("");
178  $.ajax({
179    url: "DataProvider",
180    method: "POST",
181    data: tData,
182    success: function (aResponse) {
183      if (aResponse.length > 0) {
184        var tJson = JSON.parse(aResponse);
185        tTitle.html(tJson.subject);
186        var tHTML = "<div>" + tJson.time + "</div>";
187        var tTenderLink = tJson.tender + " " + tJson.authorityKey;
188        if (tJson.participant != null) {
189          tTenderLink = "<a href='ParticipationControllerServlet?function=SpecList&ParticipantOID="+ tJson.participant +
190            "&TenderOID="+ tJson.tenderOID +"&thContext=participant ' >"+ tTenderLink +"</a>";
191        }
192        tHTML += "<h4 class='" + color + "' style='padding: 0 0 10px 0'>" + tTenderLink + "</h4>";
193        if (tJson.fileName != null) {
194          tHTML += "<div><i class=\"fa fas fa-paperclip " + color + "\"></i>" +
195            "<a target='_blank' class='" + color + "' href='" + tJson.attachmentLink + "'> " + tJson.fileName + "</a></div><br/>";
196        }
197        tHTML += "<p>" + tJson.body + "</p>";
198        tBody.html(tHTML);
199      }
200    }
201  });
202  $(tTarget).modal("show");
203}
204
205function getStructure(aElem) {
206  setContrast();
207  var tTarget = $($(aElem).data("target"));
208  var tTitles = Array.from($(aElem).data("title"));
209  var tOID = $(aElem).data("oid");
210  var tTitle = $(tTarget).find(".modal-title");
211  var tBody = $(tTarget).find(".modal-body");
212  var tFolder = "";
213  var tRoot = "";
214  var tFolderIndex = 0;
215  $(tTarget).find("#btn-print").hide();
216  tBody.html("<div style='text-align: center; height: 40px'><span class='loader'></span></div>");
217  tTitle.html("");
218  var tData = {param: "FileTree", oid: tOID, participant: $(aElem).data("participant"), VALIDATION_TOKEN: $(aElem).data("token")};
219  $.ajax({
220    url: "DataProvider",
221    method: "POST",
222    data: tData,
223    success: function (aResponse) {
224      if(aResponse.length > 0) {
225        try {
226          var tJson = JSON.parse(aResponse);
227        }
228        catch(e) {
229          document.write(aResponse);
230        }
231        buildStructure(tJson);
232        tTitle.html(tTitles[0]);
233        tFolder += tFolder.length > 0 && tRoot.length > 0 ? "<span class='folder-border displayBlock'></span>" + tRoot : tRoot;
234        tBody.html("" +
235          "<form id='downloadSelection' method='post' action='TenderingProcedureDetails'>" +
236            "<div class='folderBox'>" + tFolder + "" +
237              "<input type='hidden' name='function' value='_DownloadTenderDocument' />" +
238              "<input type='hidden' name='documentOID' value='"+tOID+"' />" +
239            "</div>" +
240            "<div class='fileDownload'>" +
241              "<input style='margin-right: 10px;' type='button' class='btn btn-primary' data-status='true' data-value='" + tTitles[3] + "' value='" + tTitles[2] + "' onclick='toggleAll(this);' />" +
242              "<input type='submit' class='btn btn-primary' value='" + tTitles[1] + "' />" +
243            "</div>" +
244            "<script type=\"text/javascript\">" +
245            "  $(\".fileDownload input\").attr(\"class\", $(\"#buttonModalClose\").attr(\"class\"));\n" +
246            "</script>" +
247          "</form>");
248
249        $(".folderCheck").on("click", function() {
250          if ($(this).is(":checked")) {
251            $("[data-parent='" + $(this).data("folder") + "']").prop("checked", true);
252          } else {
253            $("[data-parent='" + $(this).data("folder") + "']").prop("checked", false);
254          }
255        });
256
257        $(".folderBox input:checkbox:not('.folderCheck')").on("change", function() {
258          var tSize = $("[data-parent='" + $(this).data("parent") + "']").size();
259          var tUnchecked = $("[data-parent='" + $(this).data("parent") + "']:not(:checked)").size();
260          if (tUnchecked === 0) {
261            $("[data-folder='" + $(this).data("parent") + "']").prop({checked: true, indeterminate: false});
262          } else if (tUnchecked < tSize) {
263            $("[data-folder='" + $(this).data("parent") + "']").prop({checked: false, indeterminate: true});
264          } else {
265            $("[data-folder='" + $(this).data("parent") + "']").prop({checked: false, indeterminate: false});
266          }
267        });
268
269        $("#downloadSelection").on("submit", function(tEvent) {
270          if (!$("#downloadSelection").find("input:checkbox").is(":checked")) {
271            tEvent.preventDefault();
272            return false;
273          }
274
275          let tContext = window.location.pathname.includes("NetServer") ? "/NetServer":"";
276          let tNewRequestURL = window.location.origin + tContext +  "/TenderingProcedureDetails" + "?function=_DownloadTenderDocuments&documentOID="+tOID;
277          let tFormRequestURL = window.location.origin + window.location.pathname + "?" + $("#downloadSelection").serialize();
278          if (tFormRequestURL.length >= 2000)
279          {
280            tEvent.preventDefault();
281            window.location = tNewRequestURL
282            return false;
283          }
284        });
285      }
286    }
287  });
288
289  var tPrevious = [];
290  var tDepth = -1;
291  function buildStructure(aFiles) {
292    var tFolderIcon = "<i class='far fa-folder-open verticalMiddle' style='font-size: 120%; width: 20px;'></i>";
293    var tFileIcon = "<i class='far fa-file-alt " + color + " verticalMiddle' style='font-size: 120%; width: 20px;'></i>";
294
295    if (typeof aFiles === "object") {
296      $.each(aFiles, function (tKey, tObject) {
297        if (typeof tObject === "object" && "fileName" in tObject) {
298        addFileEntry(tObject, tFileIcon);
299        } 
300        else {
301          tFolderIndex++;
302          if (tKey !== "/" && tKey !== "") {
303            var tFolderCheck = "<label class='documentCheckbox'>" +
304              "<input class='folderCheck' data-folder='folder-" + tFolderIndex + "' style='cursor: pointer' type='checkbox' /></label>";
305            var tFolderName = "<span class='verticalMiddle' style='font-weight: bold'> " + tKey + "</span>";
306            if (tDepth !== -1) {
307              tFolder += tFolder.length > 0 ? "<span class='folder-border displayBlock'></span>" : "";
308              tFolder += "<div style='background: #e1e1e1'>" + buildDepth(tDepth) + tFolderIcon + tFolderName + tFolderCheck + "</div>";
309            } 
310            else {
311              tFolder += "<div class='background-grey'>" + tFolderIcon + tFolderName + tFolderCheck + "</div>";
312            }
313          }
314          tDepth++;
315          buildStructure(tObject);
316          tDepth--;
317        }
318      });
319    }
320  }
321
322  function addFileEntry(tObject, tFileIcon) {
323    var tHref = "TenderingProcedureDetails?function=_DownloadTenderDocument&documentOID=" + tOID + "&Document=" + tObject.encodedName;
324    var tFileName = tObject.fileName;
325    var tFileSize = "<span class='fileSize " + color + "'> " + tObject.size + "</span>";
326    var tFileLink = "<a target='_blank' href='" + tHref + "' class='filenameEllipsis verticalMiddle " + color + "'> " + tFileName + "</a>";
327    var tCheckbox = "<label class='documentCheckbox'>" +
328      "<input style='cursor: pointer' type='checkbox' data-parent='folder-" + tFolderIndex + "' name='Document' value='"+ tObject.encodedName +"' /></label>";
329    var tIndent = -1;
330    if (tObject.parent && tObject !== "") {
331      tIndent = tObject.parent.split("/").length - 1;
332    }
333    if (!tObject.parent || tObject.parent === "/" || tObject.parent === "") {
334      tRoot += "<div>" + tFileIcon + tFileLink + tFileSize + tCheckbox + "</span></div>";
335    }
336    else {
337      var tFileIndent = "<span class='verticalMiddle' style='font-size: 110%; padding-left: " + (tIndent * 20) + "px'>&boxur; </span>";
338      tFolder += "<div>" + tFileIndent + tFileIcon + tFileLink + tFileSize +  tCheckbox + "</div>";
339    }
340  }
341
342  function buildDepth(aDepth) {
343    return "<span class='verticalMiddle' style='font-size: 110%; padding-left: " + (aDepth * 20) + "px'>&boxur; </span>";
344  }
345
346  $(tTarget).modal("show");
347}
348
349function toggleAll(aElem) {
350  var tBool = $(aElem).data("status");
351  var tTitle = $(aElem).data("value");
352  var tText = $(aElem).attr("value");
353  $(this).parent().find("form").find($("input:checkbox").prop("checked", tBool));
354  $(aElem).data("status", !tBool).data("value", tText).attr("value", tTitle);
355}
356
357function redirect(aElem) {
358  var tFunction = $(aElem).data("function");
359  if (tFunction === undefined) {
360    tFunction = "Detail"
361  }
362  $.ajax({
363    async: false,
364    url: "DataProvider",
365    method: "POST",
366    data: {param: "Redirect", OID: $(aElem).data("oid"), function: tFunction, category: $(aElem).data("category")},
367    success: function (aResponse) {
368      var getUrl = window.location;
369      var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];
370      window.location = baseUrl + "/" + aResponse;
371    }
372  })
373}
374
375function arrayFromFix(){
376  if (!Array.from) {
377    Array.from = (function () {
378      var toStr = Object.prototype.toString;
379      var isCallable = function (fn) {
380        return typeof fn === 'function' || toStr.call(fn) === '[object Function]';
381      };
382      var toInteger = function (value) {
383        var number = Number(value);
384        if (isNaN(number)) { return 0; }
385        if (number === 0 || !isFinite(number)) { return number; }
386        return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
387      };
388      var maxSafeInteger = Math.pow(2, 53) - 1;
389      var toLength = function (value) {
390        var len = toInteger(value);
391        return Math.min(Math.max(len, 0), maxSafeInteger);
392      };
393
394      return function from(arrayLike/*, mapFn, thisArg */) {
395        var C = this;
396        var items = Object(arrayLike);
397        if (arrayLike == null) {
398          throw new TypeError("Array.from requires an array-like object - not null or undefined");
399        }
400        var mapFn = arguments.length > 1 ? arguments[1] : void undefined;
401        var T;
402        if (typeof mapFn !== 'undefined') {
403          if (!isCallable(mapFn)) {
404            throw new TypeError('Array.from: when provided, the second argument must be a function');
405          }
406
407          if (arguments.length > 2) {
408            T = arguments[2];
409          }
410        }
411
412        var len = toLength(items.length);
413        var A = isCallable(C) ? Object(new C(len)) : new Array(len);
414        var k = 0;
415        var kValue;
416        while (k < len) {
417          kValue = items[k];
418          if (mapFn) {
419            A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);
420          } else {
421            A[k] = kValue;
422          }
423          k += 1;
424        }
425        A.length = len;
426        return A;
427      };
428    }());
429  }
430}
431
432
433// SBW-Custom scripts, don't remove
434
435function getZipFiles(aElem) {
436    setContrast();
437    var tTarget = $($(aElem).data("target"));
438    var tOID = $(aElem).data("oid");
439    var tData = {
440        param: "ZipFileContents",
441        oid: tOID,
442        participant: $(aElem).data("participant"),
443        VALIDATION_TOKEN: $(aElem).data("token")
444    };
445    var tTitle = $(tTarget).find(".modal-title");
446    var tBody = $(tTarget).find(".modal-body");
447    $(tTarget).find("#btn-print").hide();
448    tBody.html("<div style='text-align: center; height: 40px'><span class='loader'></span></div>");
449    tTitle.html("");
450    $.ajax({
451        url: "DataProvider",
452        method: "POST",
453        data: tData,
454        success: function (aResponse) {
455            if (aResponse.length > 0) {
456                try {
457                    var tJson = JSON.parse(aResponse);
458                } catch (e) {
459                    document.write(aResponse);
460                }
461                tTitle.text($(aElem).data("title"));
462                var tHTML = "<table class='table table-striped table-hover'>";
463                tHTML += "<thead><tr><th class='" + background + "'>icon</th><th class='" + background + "'>name</th><th class='" + background + "'>size</th><th class='" + background + "'>date</th></tr></thead><tbody>";
464                $.each(tJson, function (k, v) {
465                    var tFile = v.substring(1, v.length - 1).split(",");
466                    var tHref = "TenderingProcedureDetails?function=_DownloadTenderDocument&documentOID=" + tOID + "&Document=" + tFile[0];
467                    tHTML += "<tr><td><i class='far fa-file-alt " + color + "' style='font-size: 120%;' /></td>" +
468                        "<td><a target='_blank' class='" + color + "' href='" + tHref + "'>" + k + "</a></td>" +
469                        "<td>" + tFile[2] + "</td>" +
470                        "<td>" + tFile[1] + "</td></tr>";
471                });
472                tHTML += "</tbody></table>";
473                tBody.html(tHTML);
474            }
475        }
476    });
477    $(tTarget).modal("show");
478}
479
480
481// Zip-Download
482
483function closeDownloadModal() {
484    $('#modal-dialog').remove();
485}
486
487function clickDownloadBtn(url) {
488    if (!$('#termsAndConditions').prop('disabled')) {
489        closeDownloadModal();
490        window.location = url;
491    }
492}
493
494function checkConditionsConfirmation() {
495    if ($('#confirmedConditions').is(':checked')) {
496        $('#termsAndConditions').prop('disabled', false).removeAttr('disabled');
497    } else {
498        $('#termsAndConditions').prop('disabled', true).attr('disabled', 'disabled');
499    }
500}
501
502function confirmTermsAndConditions(url) {
503    var modalHtml = geConditionsModalHtml(url);
504    $('body').prepend(modalHtml);
505    $('#termsAndConditions').prop('disabled', true)
506}
507
508function geConditionsModalHtml (url) {
509  var lang = document.documentElement.lang;
510  var conditions = 'https://vergabe.saarland/teilnahmebedingungen/';
511  if(lang === 'en') {
512    conditions = 'https://vergabe.saarland/en/terms-of-use/';
513    return '<div id="modal-dialog" class="sta-modal">\n' +
514        '\t<div class="modal-wrapper">\n' +
515        '\t\t<div class="modal-content">\n' +
516        'Please note the <a href="' + conditions + '" target="_blank"><u>conditions of participation</u></a>.<br><br>' +
517        '<input id="confirmedConditions" onclick="checkConditionsConfirmation()" type="checkbox" /><label for="confirmedConditions">&nbsp; I accept the conditions of participation</label><br>' +
518        '<a disabled="disabled" class="btn btn-secondary" id="termsAndConditions" title="Download documents" href="javascript: clickDownloadBtn(\'' + url + '\')">\n' +
519        '                            Download documents' +
520        '</a> <a style="float: right; margin-top: 7px;" href="javascript: closeDownloadModal()">Cancel</a>' +
521        '\t\t</div>\n' +
522        '\t</div>\n' +
523        '</div>';
524  } else {
525    return '<div id="modal-dialog" class="sta-modal">\n' +
526        '\t<div class="modal-wrapper">\n' +
527        '\t\t<div class="modal-content">\n' +
528        'Bitte beachten Sie die <a href="' + conditions + '" target="_blank"><u>Teilnahmebedingungen</u></a>.<br><br>' +
529        '<input id="confirmedConditions" onclick="checkConditionsConfirmation()" type="checkbox" /><label for="confirmedConditions">&nbsp; Ich habe die Teilnahmebedingungen zu Kenntnis genommen</label><br>' +
530        '<a disabled="disabled" class="btn btn-secondary" id="termsAndConditions" title="Unterlagen herunterladen" href="javascript: clickDownloadBtn(\'' + url + '\')">\n' +
531        '                            Unterlagen herunterladen' +
532        '</a> <a style="float: right; margin-top: 7px;" href="javascript: closeDownloadModal()">Abbrechen</a>' +
533        '\t\t</div>\n' +
534        '\t</div>\n' +
535        '</div>';
536  }
537}
538
539// WL-modal
540
541checkSysRequirementsConfirmation = function () {
542    var terms = $('#confirmedTermsConditions').is(':checked');
543    var requirements = $('#confirmedSysRequirements').is(':checked');
544    if (terms && requirements) {
545        $('#startBietercockpit').prop('disabled', false).removeAttr('disabled');
546    } else {
547        $('#startBietercockpit').prop('disabled', true).attr('disabled', 'disabled');
548    }
549};
550
551closeSysRequConfirmation = function () {
552    console.log('close');
553    $('#modal-dialog').remove();
554};
555
556clickRequBtn = function (type) {
557    if (!$('#startBietercockpit').prop('disabled')) {
558        $('#' + type).trigger('click');
559        closeSysRequConfirmation();
560    }
561};
562
563confirmSysRequirements = function (type) {
564    console.log('confirmSysRequirements');
565    var modalHtml = getWLModalHtml(type);
566    $('body').prepend(modalHtml);
567    $('#startBietercockpit').prop('disabled', true);
568};
569
570getWLModalHtml = function (type) {
571  var sysRequirements = 'https://www.staatsanzeiger.de/fileadmin/staatsanzeiger/Vergabe/Service/BIETERCOCKPIT_Systemanforderungen.pdf';
572  var conditions = 'https://vergabe.saarland/teilnahmebedingungen/';
573  var lang = document.documentElement.lang;
574  if(lang === 'en') {
575    sysRequirements = 'https://www.staatsanzeiger.de/fileadmin/staatsanzeiger/Vergabe/Service/BIETERCOCKPIT_Systemanforderungen.pdf';
576    conditions = 'https://vergabe.saarland/teilnahmebedingungen/';
577    return '<div id="modal-dialog" class="sta-modal">\n' +
578        '\t<div class="modal-wrapper">\n' +
579        '\t\t<div class="modal-content">\n' +
580        '<strong>To participate electronically, you must process and submit the documents in the AI BIDDINGCOCKPIT.</strong> ' +
581        'To do this, <strong>the latest version of the AI WEBLAUNCHER</strong> must be installed on your computer.<br>' +
582        'A PDF viewer program is required to process fillable PDFs. ' +
583        'If you do not yet have a PDF reader, we recommend Adobe Acrobat Reader.<br>' +
584        'To edit GAEB files (widely used in the construction industry) you need AVA software. For the use in the <strong>AI BIDDINGCOCKPIT</strong> we offer a free tool.<br>' +
585        '<strong>The maximum data size when submitting an electronic offer is 300 MB.</strong> ' +
586        'This concerns the sum of the documents you import into the <strong>AI BIDDINGCOCKPIT</strong>. If you still have a larger amount of files, ' +
587        'please contact our support team at 0711-66601-476 or <a href="mailto:[email protected]">[email protected].</a><br>' +
588        'Please note the <a href="' + sysRequirements +'" target="_blank"><u>system requirements</u></a> of the tendering software' +
589        ' and the <a href="' + conditions + '" target="_blank"><u>Terms of use</u></a>.<br><br>' +
590        '<input id="confirmedSysRequirements" onclick="checkSysRequirementsConfirmation()" type="checkbox" /><label for="confirmedSysRequirements">&nbsp; I accept the system requirements</label>' +
591        '<input id="confirmedTermsConditions" onclick="checkSysRequirementsConfirmation()" type="checkbox" /><label for="confirmedTermsConditions">&nbsp; I accept the terms of use</label><br>' +
592        '<a disabled="disabled" class="btn btn-secondary startBietercockpit" id="startBietercockpit" title="Unterlagen in <strong>AI BIETER</strong>COCKPIT  öffnen" href="javascript: clickRequBtn(\'' + type + '\')">\n' +
593        '   <img id="imageBietercockpit" src="_images/img/ai_bietercockpit_small.png" alt="Unterlagen in AI BIETERCOCKPIT  öffnen">\n' +
594        '                            Open documents in <strong>AI BIDDINGCOCKPIT</strong> \n' +
595        '                        </a> <a style="float: right; margin-top: 7px;" href="javascript: closeSysRequConfirmation()">Cancel</a>' +
596        '\t\t</div>\n' +
597        '\t</div>\n' +
598        '</div>';
599  } else {
600    return '<div id="modal-dialog" class="sta-modal">\n' +
601        '\t<div class="modal-wrapper">\n' +
602        '\t\t<div class="modal-content">\n' +
603        '<strong>Zur elektronischen Teilnahme m&uuml;&szlig;en Sie die Unterlagen im BIETERCOCKPIT bearbeiten und abgeben.</strong> ' +
604        'Dazu muss auf Ihrem Rechner der <strong>AI WEBLAUNCHER  in der jeweils aktuellsten Version</strong> installiert sein.<br>' +
605        'Zur Bearbeitung von ausf&uuml;llbaren PDFs ist ein PDF-Anzeigeprogramm n&ouml;tig. ' +
606        'Falls Sie noch keinen PDF-Reader haben, empfehlen wir Adobe Acrobat Reader.<br>' +
607        'Zur Bearbeitung von GAEB-Dateien (im Baubereich weit verbreitet) ben&ouml;tigen Sie eine AVA-Software. F&uuml;r den Einsatz im BIETERCOCKPIT bieten wir ein kostenloses Tool an.<br>' +
608        '<strong>Die maximale Datengr&ouml;&szlig;e bei Abgabe eines elektronischen Angebots betr&auml;gt 300 MB.</strong> ' +
609        'Diese betrifft die Summe der Dokumente, die Sie in das BIETERCOCKPIT importieren. Sollten sie dennoch eine gr&ouml;&szligere Dateimenge haben, ' +
610        'wenden Sie sich bitte an unseren Support unter Tel.: 0711-66601-476 oder <a href="mailto:[email protected]">[email protected].</a><br>' +
611        'Bitte beachten Sie die <a href="' + sysRequirements +'" target="_blank"><u>Systemanforderungen</u></a> der Bietersoftware' +
612        ' sowie die <a href="' + conditions + '" target="_blank"><u>Teilnahmebedingungen</u></a>.<br><br>' +
613        '<input id="confirmedSysRequirements" onclick="checkSysRequirementsConfirmation()" type="checkbox" /><label for="confirmedSysRequirements">&nbsp; Ich habe die Systemvoraussetzungen zur Kenntnis genommen</label>' +
614        '<input id="confirmedTermsConditions" onclick="checkSysRequirementsConfirmation()" type="checkbox" /><label for="confirmedTermsConditions">&nbsp; Ich habe die Teilnahmebedingungen zur Kenntnis genommen</label><br>' +
615        '<a disabled="disabled" class="btn btn-secondary startBietercockpit" id="startBietercockpit" title="Unterlagen in <strong>AI BIETER</strong>COCKPIT  öffnen" href="javascript: clickRequBtn(\'' + type + '\')">\n' +
616        '   <img id="imageBietercockpit" src="_images/img/ai_bietercockpit_small.png" alt="Unterlagen in AI BIETERCOCKPIT  öffnen">\n' +
617        '                            Unterlagen in <strong>AI BIETER</strong>COCKPIT &oumlffnen\n' +
618        '                        </a> <a style="float: right; margin-top: 7px;" href="javascript: closeSysRequConfirmation()">Abbrechen</a>' +
619        '\t\t</div>\n' +
620        '\t</div>\n' +
621        '</div>';
622  }
623
624};
625
626showAlert = function (show = false) {
627    var cnt = document.getElementById('sta-custom-errors');
628    if (cnt) {
629        cnt.innerHTML = '';
630        if (show) {
631            var msg = document.createElement('p');
632            msg.className = 'alert alert-danger';
633            msg.innerHTML = '<span>Bitte akzeptieren Sie die Teilnahmebedingungen und Datenschutzbestimmungen, um fortfahren zu können.</span>';
634            cnt.appendChild(msg);
635        }
636    }
637}
638
639document.addEventListener('DOMContentLoaded', function () {
640    $('form.registration.conditions .next-step').on('click', function (event) {
641        var form = document.getElementById('sta-agb-form');
642        if (form.checkValidity()) {
643            showAlert();
644        } else {
645            showAlert(true);
646        }
647    })
648});
649
650// SBW custom END

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.