Subversion Repositories munaweb

Rev

Rev 184 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
<!DOCTYPE html>
2
<html lang="en">
3
 
4
<head>
5
    <title>Relist on eBay</title>
6
    <meta charset="UTF-8">
7
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
9
    <link rel="icon" href="favicon.ico" type="image/x-icon">
10
 
30 - 11
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
12
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
13
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
14
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
15
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
16
    <script src="js/XMLWriter.js"></script>
17
    <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>
18
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>
19
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data-2012-2022.min.js"></script>
2 - 20
    <link rel="stylesheet" href="css/tablesorter.theme.blue.css">
21
    <script src="js/jquery.tablesorter.min.js"></script>
22
    <script src="js/jquery.tablesorter.widgets.js"></script>
23
    <script src="js/jquery.parser-input-select.js"></script>
30 - 24
    <link rel="stylesheet" href="css/style.css">
25
    <script src="js/muna-tools.js"></script>
2 - 26
</head>
27
 
28
<body onload="return initConfig();">
30 - 29
    <div>
30
        <div">
31
            <div class="container-fluid bg-secondary">
32
                <div class="clearfix">
33
                    <img class="img-fluid float-right" src="images/MUNA%20-%20Logo%20100x100.png" alt="MUNA Trading Logo" />
34
                    <h1 id="connected">Relist on eBay
35
                    <input id="login" type="button" class="btn bg-success mb-2 w3-hide" onclick="eBayLogin();" value="Login" /></h1>
36
                </div>
2 - 37
            </div>
38
 
30 - 39
            <div class="col border">
2 - 40
                <div>
30 - 41
                    <form id="searchForm" class="container-fluid bg-light" onsubmit="return getListings();">
42
                        <div id="createForm">
43
                            <input id="includeExported" name="includeExported" class="check" type="checkbox">
2 - 44
                            <label for="includeExported">Include Exported Listing</label>
45
                            <p>Listing Type:</p>
46
                            <input type="radio" name="ltype" id="ltFixed" checked /> Fixed Price<br>
47
                            <input type="radio" name="ltype" id="ltAuction" /> Auction<br>
48
                            <input type="radio" name="ltype" id="ltBoth" /> Both<br>
30 - 49
                            <input id="startButton" type="button" class="btn btn-danger" onclick="getListings();" value="Start" />
2 - 50
                        </div>
30 - 51
                        <div id="relistForm" class="w3-hide">
52
                            <input id="relistButton" type="button" class="btn btn-dark" onclick="putListings();" value="Relist" />
2 - 53
                        </div>
54
                    </form>
55
                </div>
30 - 56
                <div class="modal" id="progressBarDiv">
57
                    <div class="modal-dialog">
58
                        <div class="modal-content">
59
                            <div class="modal-header">
60
                                <h4 id="progressBarHeader"></h4>
61
                            </div>
62
                            <div class="modal-body">
63
                                <div class="progress">
64
                                    <div id="progressBar" class="progress-bar" style="width:0%">0%</div>
65
                                </div>
66
                            </div>
67
                        </div>
2 - 68
                    </div>
69
                </div>
30 - 70
                <div id="results" class="border bg-info w3-hide"></div>
71
                <div id="logging"></div>
2 - 72
            </div>
73
        </div>
74
 
30 - 75
        <footer class="container-fluid text-center border border-bottom-0 border-left-0 border-right-0">
17 - 76
            <div w3-include-html="php/footer.php"></div>
2 - 77
        </footer>
78
 
79
    </div>
80
 
81
    <script>
82
// Globals
83
var tableName = "unsoldTable";
84
var maxPagesToProcess = 0;
85
var pagesToProcess = 0;
86
var pagesProcessed = 0;
87
var listingsToFill = 0;
88
var maxListingsToFill = 0;
89
var listingsFilled = 0;
90
var listingsToRelist = 0;
91
var maxListingsToRelist = 0;
92
var listingsRelisted = 0;
93
var html = [];
94
 
95
// Initialize Configuration Variables
96
function initConfig() {
97
    eBayAuthToken = readCookie();
98
    if (eBayAuthToken.length > 0) {
99
        connected();
100
    }
101
 
102
    if (eBayAuthTokenFlag === false) {
103
        var x = document.getElementById("login");
104
        if (x.className.indexOf("w3-show") == -1) {
105
            x.className += " w3-show";
106
        }
107
    }
108
}
109
 
110
function connected() {
111
    var x;
112
 
113
    eBayAuthTokenFlag = true;
114
    document.getElementById("connected").innerHTML += " (Connected)";
115
 
116
    x = document.getElementById("startButton");
30 - 117
    x.className = x.className.replace(" btn-danger", " btn-dark");
2 - 118
 
119
    x = document.getElementById("login");
120
    x.className = x.className.replace(" w3-show", "");
121
 
122
    x = document.getElementById("results");
123
    x.innerHTML = "";
124
    x.className = x.className.replace(" w3-show", "");
125
    x.className = x.className.replace(" process-errors", "");
126
}
127
 
128
function requireNewLogin() {
129
    var x = document.getElementById("startButton");
30 - 130
    x.className = x.className.replace(" btn-dark", " btn-danger ");
2 - 131
}
132
 
133
function getListings() {
134
    var x;
135
 
136
    if (eBayAuthTokenFlag === false) {
137
        return;
138
    }
139
 
140
    document.getElementById("logging").innerHTML = '';
141
 
142
    x = document.getElementById("results");
143
    if (x.className.indexOf("w3-show") == -1) {
144
        x.className += " w3-show";
145
    }
146
    x.className = x.className.replace("process-errors", "");
147
    x.innerHTML = '<p><strong>Retrieving Unsold Listings...</strong></p>';
148
 
149
    initProgressBar('Get Unsold and Not Relisted Items (1/2)');
150
 
151
    tableStart();
152
    maxPagesToProcess = 1;
153
    pagesToProcess = 1;
154
    pagesProcessed = 0;
155
    eBaySearch(1);
156
 
157
    function checkpagesToProcess() {
158
        if (pagesToProcess > 0) {
159
            window.setTimeout(checkpagesToProcess, 100); // wait 100 milliseconds
160
        } else {
161
            tableEnd();
162
            endProgressBar();
163
            // fillListings(); is now in tableEnd()
164
        }
165
    }
166
 
167
    checkpagesToProcess();
168
}
169
 
170
function tableStart() {
171
    document.getElementById("logging").innerHTML = '';
172
    html = [];
173
 
174
    html.push('<h3>Unsold and Not Relisted</h3>');
175
    html.push('<p>Showing <span id="filtered-rows">0</span> of <span id="total-rows">0</span> / <span id="selected-rows">0</span> selected.</p>');
30 - 176
    html.push('<div class="border table-responsive">');
2 - 177
    html.push('<table id="' + tableName + '" class="tablesorter">');
178
    html.push('<thead>');
179
    html.push('<tr>');
180
 
6 - 181
    html.push(tableHeaderCheckbox());
2 - 182
    html.push(tableHeader('Image'));
183
    html.push(tableHeader('Title'));
184
    html.push(tableHeader('Item Id'));
185
    html.push(tableHeader('SKU'));
186
    html.push(tableHeader('Category'));
187
    html.push(tableHeader('Format'));
188
    html.push(tableHeader('Price'));
189
    html.push(tableHeader('Quantity'));
190
    html.push(tableHeader('Views'));
191
    html.push(tableHeader('Watchers'));
192
    html.push(tableHeader('End Date'));
193
    html.push(tableHeader('Note'));
194
 
195
    html.push('</tr>');
196
    html.push('</thead>');
197
    html.push('<tbody>');
198
}
199
 
200
function tableEntry(JsonObj) {
201
    var i;
202
    var image;
203
    var title;
204
    var itemId;
205
    var sku;
206
    var format;
207
    var price;
208
    var quantity;
209
    var views;
210
    var watchers;
211
    var endDate;
212
    var privateNote;
213
    var ebayNote;
214
    var relisted;
215
 
216
    for (i = 0; i < JsonObj.length; i++) {
12 - 217
        image = getJsonValue(JsonObj[i].PictureDetails.GalleryURL).replace('http:', 'https:');
2 - 218
        title = getJsonValue(JsonObj[i].Title);
219
        itemId = getJsonValue(JsonObj[i].ItemID);
220
        sku = getJsonValue(JsonObj[i].SKU);
221
        format = getJsonValue(JsonObj[i].ListingType);
222
        if (format == 'Chinese') {
223
            format = 'Auction';
224
            price = getJsonValue(JsonObj[i].StartPrice.text);
225
        } else {
226
            format = 'Fixed Price';
227
            price = getJsonValue(JsonObj[i].BuyItNowPrice.text);
228
        }
229
        quantity = getJsonValue(JsonObj[i].QuantityAvailable);
230
        views = '';
231
        watchers = getJsonValue(JsonObj[i].WatchCount);
232
        watchers = (watchers.length === 0 ? "0" : watchers);
12 - 233
        endDate = getJsonValue(JsonObj[i].ListingDetails.EndTime).substr(0, 10);
2 - 234
        privateNote = getJsonValue(JsonObj[i].PrivateNotes);
235
        ebayNote = getJsonValue(JsonObj[i].eBayNotes);
236
        relisted = getJsonValue(JsonObj[i].Relisted);
237
 
194 - 238
        if ((privateNote.startsWith("Exported to ") && !document.getElementById('includeExported').checked) || relisted == 'true' || privateNote.startsWith("Sold via ") || privateNote.startsWith("Relisted As New Item" || ebayNote.startsWith("This duplicate listing was not shown"))) {
2 - 239
            continue;
240
        }
241
 
242
        if (format == 'Auction' && document.getElementById('ltFixed').checked) {
243
            continue;
244
        } else if (format == 'Fixed Price' && document.getElementById('ltAuction').checked) {
245
            continue;
246
        }
247
 
248
        html.push('<tr>');
249
 
250
        html.push(tableCellCheckbox());
30 - 251
        html.push(tableCell('<img class="img-fluid" src="' + image + '" alt="Gallery Image" style="max-height:100px;max-width:100px;">'));
2 - 252
        html.push(tableCell(title));
253
        html.push(tableCell(itemId));
254
        html.push(tableCell(sku));
255
        html.push(tableCellLabel('Category' + itemId));
256
        html.push(tableCell(format));
257
        html.push(tableCell('$' + price));
258
        html.push(tableCell(quantity));
259
        html.push(tableCellLabel('Views' + itemId));
260
        html.push(tableCell(watchers));
261
        html.push(tableCell(endDate));
262
        html.push(tableCell(privateNote + ' ' + ebayNote));
263
 
264
        html.push('</tr>');
265
    }
266
}
267
 
268
function tableEnd() {
269
    html.push('</tbody>');
270
    html.push('</table>');
271
    html.push('</div>');
272
 
273
    document.getElementById("logging").innerHTML = html.join('');
274
 
275
    $(function() {
276
        $("#" + tableName).on('tablesorter-initialized', function() {
277
 
278
            // class name to add on tr when checkbox is checked
279
            var highlightClass = 'checked',
280
                // resort the table after the checkbox is modified?
281
                resort = true,
282
                $table = $(this),
283
                c = this.config,
284
                wo = c && c.widgetOptions,
285
                // include sticky header checkbox; if installed
286
                $sticky = c && wo.$sticky || '',
287
                doChecky = function(c, col) {
288
                    $table
289
                        .children('tbody')
290
                        .children('tr:visible')
291
                        .children('td:nth-child( ' + (parseInt(col, 10) + 1) + ' )')
292
                        .find('input[type=checkbox]')
293
                        .each(function() {
294
                            this.checked = c;
295
                            $(this).trigger('change');
296
                        });
297
                };
298
 
299
            $table
300
                .children('tbody')
301
                .on('change', 'input[type=checkbox]', function() {
302
                    // ignore change if updating all rows
303
                    if ($table[0].ignoreChange) {
304
                        return;
305
                    }
306
                    var $this = $(this);
307
                    $this.closest('tr').toggleClass(highlightClass, this.checked);
184 - 308
                    // resort will jump back to the top
19 - 309
                    // $this.trigger('updateCell', [$this.closest('td'), resort]);
2 - 310
 
311
                    // handle header
7 - 312
                    var rowCount = $('#' + tableName + ' tbody tr').length;
2 - 313
                    var checkedCount = $('#' + tableName + ' tbody .checked').length;
314
                    var ua = window.navigator.userAgent;
315
                    if (checkedCount === 0) {
316
                        $table.add($sticky).find('thead input[type=checkbox]').prop('checked', false);
317
                        $table.add($sticky).find('thead input[type=checkbox]').prop('indeterminate', false);
318
                    } else if (checkedCount === rowCount) {
319
                        $table.add($sticky).find('thead input[type=checkbox]').prop('checked', true);
320
                        $table.add($sticky).find('thead input[type=checkbox]').prop('indeterminate', false);
321
                    } else {
322
                        $table.add($sticky).find('thead input[type=checkbox]').prop('checked', !(ua.indexOf('Trident/') > -1 || ua.indexOf('Edge/') > -1));
323
                        $table.add($sticky).find('thead input[type=checkbox]').prop('indeterminate', true);
324
                    }
325
                    $('#selected-rows').html(checkedCount);
326
                })
327
                .end()
328
                .add($sticky)
329
                .find('thead input[type=checkbox]')
330
                // Click on checkbox in table header to toggle all inputs
331
                .on('change', function() {
332
                    // prevent updateCell for every cell
333
                    $table[0].ignoreChange = true;
334
                    var c = this.checked,
335
                        col = $(this).closest('th').attr('data-column');
336
                    doChecky(c, col);
337
                    // update main & sticky header
338
 
339
                    $table.children('tbody').children('tr:visible').toggleClass(highlightClass, c);
340
                    // update all at once
341
                    $table[0].ignoreChange = false;
342
                    $table.trigger('update', [resort]);
343
 
344
                    // handle header
7 - 345
                    var rowCount = $('#' + tableName + ' tbody tr').length;
2 - 346
                    var checkedCount = $('#' + tableName + ' tbody .checked').length;
347
                    var ua = window.navigator.userAgent;
348
                    if (checkedCount === 0) {
349
                        $table.add($sticky).find('th[data-column=' + col + '] input[type=checkbox]').prop('checked', false);
350
                        $table.add($sticky).find('th[data-column=' + col + '] input[type=checkbox]').prop('indeterminate', false);
351
                    } else if (checkedCount === rowCount) {
352
                        $table.add($sticky).find('th[data-column=' + col + '] input[type=checkbox]').prop('checked', true);
353
                        $table.add($sticky).find('th[data-column=' + col + '] input[type=checkbox]').prop('indeterminate', false);
354
                    } else {
355
                        $table.add($sticky).find('th[data-column=' + col + '] input[type=checkbox]').prop('checked', !(ua.indexOf('Trident/') > -1 || ua.indexOf('Edge/') > -1));
356
                        $table.add($sticky).find('th[data-column=' + col + '] input[type=checkbox]').prop('indeterminate', true);
357
                    }
358
                    $('#selected-rows').html(checkedCount);
359
                })
360
                .on('mouseup', function() {
361
                    return false;
362
                });
363
 
364
        });
365
 
366
        $("#" + tableName).tablesorter({
367
            theme: "blue",
368
            widgets: ["zebra", "stickyHeaders", "filter"],
369
            headers: {
370
                0: {
371
                    sorter: "checkbox"
372
                },
373
                1: {
374
                    sorter: false,
375
                    filter: false
376
                }
377
            },
378
            initialized: function() {
379
                fillListings();
380
            }
381
        });
382
 
383
        $("#" + tableName).bind('filterInit filterEnd', function(event, data) {
384
            $('#filtered-rows').html(data.filteredRows);
385
            $('#total-rows').html(data.totalRows);
386
        });
387
    });
388
}
389
 
390
function addNote(itemId) {
391
    var i;
392
    var xml;
393
 
394
    var xw = new XMLWriter('UTF-8', '1.0');
395
    var xhr = new XMLHttpRequest();
396
 
397
    if (!createAddXMLNote(xw, xhr, 'SetUserNotes', itemId)) {
398
        return;
399
    }
400
 
401
    xml = xw.flush();
402
    xw.close();
403
 
404
    xhr.onload = function() {
12 - 405
        var jsonObj = XMLparse(xhr.responseXML, false);
406
        var obj = jsonObj.SetUserNotesResponse;
2 - 407
        var returnCode = obj.Ack;
19 - 408
        var str;
2 - 409
 
410
        var x = document.getElementById("results");
411
 
412
        if (returnCode == 'Success' || (returnCode == 'Warning' && obj.Errors.ErrorCode == '21917108')) {
413
            if (returnCode == 'Warning') {
414
                x.innerHTML += '<p>' + obj.CorrelationID + ': <strong>' + returnCode + '</strong></p>';
415
                x.innerHTML += "<p>" + obj.Errors.SeverityCode + " (" + obj.Errors.ErrorCode + "): " + escapeHtml(obj.Errors.LongMessage) + "</p>";
416
            }
417
        } else {
418
            x.className += " process-errors";
30 - 419
            str = '<p class="text-danger">' + obj.CorrelationID + ': <strong>' + returnCode + ':</strong></p>';
6 - 420
            var errors = getJsonArray(obj.Errors);
19 - 421
            str += "<p>";
6 - 422
            for (i = 0; i < errors.length; i++) {
19 - 423
                str += errors[i].SeverityCode + " (" + errors[i].ErrorCode + "): " + escapeHtml(errors[i].LongMessage) + "<br/>";
2 - 424
            }
19 - 425
            str += "</p>";
426
 
427
            x.innerHTML += str;
2 - 428
        }
429
 
430
        if (obj.Message) {
431
            x.innerHTML += obj.Message;
432
        }
433
 
434
        --listingsToRelist;
435
        ++listingsRelisted;
436
        updateProgressBar(maxListingsToRelist, listingsRelisted);
437
    };
438
 
439
    xhr.send(xml);
440
}
441
 
442
function createAddXMLNote(xw, xhr, callname, itemId) {
443
    var today = new Date();
444
    var todayYYYYMMDD = today.toISOString().slice(0, 10);
445
 
446
    xw.writeStartDocument();
447
    xw.writeStartElement(callname + "Request");
448
    xw.writeAttributeString('xmlns', 'urn:ebay:apis:eBLBaseComponents');
449
 
450
    xw.writeStartElement('RequesterCredentials');
451
    xw.writeElementString('eBayAuthToken', eBayAuthToken);
452
    xw.writeEndElement(); /* RequesterCredentials */
453
 
454
    xw.writeElementString('ItemID', itemId);
455
    xw.writeElementString('MessageID', itemId);
456
    xw.writeElementString('Action', 'AddOrUpdate');
457
    xw.writeElementString('NoteText', 'Relisted As New Item on ' + todayYYYYMMDD);
458
 
459
    xw.writeElementString('ErrorLanguage', 'en_US');
460
    xw.writeElementString('Version', configeBayTradingVersion);
461
    xw.writeElementString('WarningLevel', configWarningLevel);
462
 
463
    xw.writeEndElement(); /* xmlrequest */
464
    xw.writeEndDocument();
465
 
466
    xhr.open('POST', configProxyUrl, true);
467
    xhr.setRequestHeader('Content-Type', 'text/xml');
468
    xhr.setRequestHeader('X-EBAY-API-APP-NAME', configAppid);
469
    xhr.setRequestHeader('X-EBAY-API-COMPATIBILITY-LEVEL', configeBayTradingVersion);
470
    xhr.setRequestHeader('X-EBAY-API-CALL-NAME', callname);
471
    xhr.setRequestHeader('X-EBAY-API-SITEID', '0');
472
    xhr.setRequestHeader('X-EBAY-API-DEV-NAME', '');
473
    xhr.setRequestHeader('X-EBAY-API-CERT-NAME', '');
474
    xhr.setRequestHeader('X-Proxy-URL', configServiceEndpoint);
475
 
476
    return true;
477
}
478
 
479
function eBaySearch(pageNo) {
480
    var i;
481
    var xml;
482
 
483
    if (eBayAuthTokenFlag === false) {
484
        return;
485
    }
486
 
487
    var xw = new XMLWriter('UTF-8', '1.0');
488
    var xhr = new XMLHttpRequest();
489
 
490
    if (!createAddXMLSearch(xw, xhr, 'GetMyeBaySelling', pageNo)) {
491
        return;
492
    }
493
 
494
    xml = xw.flush();
495
    xw.close();
496
 
497
    xhr.onload = function() {
12 - 498
        var jsonObj = XMLparse(xhr.responseXML, false);
499
        var obj = jsonObj.GetMyeBaySellingResponse;
2 - 500
        var returnCode = obj.Ack;
19 - 501
        var str;
2 - 502
 
503
        var x = document.getElementById("results");
504
 
505
        if (returnCode == 'Success') {
12 - 506
            tableEntry(obj.UnsoldList.ItemArray.Item);
2 - 507
 
508
            if (Number(obj.UnsoldList.PaginationResult.TotalNumberOfPages) > pageNo) {
509
                maxPagesToProcess = Number(obj.UnsoldList.PaginationResult.TotalNumberOfPages);
510
                ++pagesToProcess;
511
                eBaySearch(pageNo + 1);
512
            }
513
 
514
            updateProgressBar(maxPagesToProcess, pagesProcessed);
515
        } else {
516
            x.className += " process-errors";
30 - 517
            str = '<p class="text-danger">' + obj.CorrelationID + ': <strong>' + returnCode + ':</strong></p>';
6 - 518
            var errors = getJsonArray(obj.Errors);
19 - 519
            str += "<p>";
6 - 520
            for (i = 0; i < errors.length; i++) {
19 - 521
                str += errors[i].SeverityCode + " (" + errors[i].ErrorCode + "): " + escapeHtml(errors[i].LongMessage) + "<br/>";
2 - 522
            }
19 - 523
            str += "</p>";
524
 
2 - 525
            x.innerHTML += "</p>";
526
        }
527
 
528
        --pagesToProcess;
529
        ++pagesProcessed;
530
 
531
        updateProgressBar(maxPagesToProcess, pagesProcessed);
532
    };
533
 
534
    xhr.send(xml);
535
}
536
 
537
function createAddXMLSearch(xw, xhr, callname, pageNo) {
538
 
539
    xw.writeStartDocument();
540
    xw.writeStartElement(callname + "Request");
541
    xw.writeAttributeString('xmlns', 'urn:ebay:apis:eBLBaseComponents');
542
 
543
    xw.writeStartElement('RequesterCredentials');
544
    xw.writeElementString('eBayAuthToken', eBayAuthToken);
545
    xw.writeEndElement(); /* RequesterCredentials */
546
 
547
    xw.writeElementString('DetailLevel', 'ReturnAll');
548
    xw.writeStartElement('ActiveList');
549
    xw.writeElementString('Include', 'false');
550
    xw.writeEndElement(); /* ActiveList */
551
    xw.writeStartElement('DeletedFromSoldList');
552
    xw.writeElementString('Include', 'false');
553
    xw.writeEndElement(); /* DeletedFromSoldList */
554
    xw.writeStartElement('DeletedFromUnsoldList');
555
    xw.writeElementString('Include', 'false');
556
    xw.writeEndElement(); /* DeletedFromUnsoldList */
557
    xw.writeStartElement('ScheduledList');
558
    xw.writeElementString('Include', 'false');
559
    xw.writeEndElement(); /* ScheduledList */
560
    xw.writeStartElement('SellingSummary');
561
    xw.writeElementString('Include', 'false');
562
    xw.writeEndElement(); /* SellingSummary */
563
    xw.writeStartElement('SoldList');
564
    xw.writeElementString('Include', 'false');
565
    xw.writeEndElement(); /* SoldList */
566
 
567
    xw.writeStartElement('UnsoldList');
568
    xw.writeElementString('Include', 'true');
184 - 569
    xw.writeElementString('DurationInDays', '60');
2 - 570
    xw.writeElementString('IncludeNotes', 'true');
571
    xw.writeStartElement('Pagination');
572
    xw.writeElementString('EntriesPerPage', '200');
573
    xw.writeElementString('PageNumber', '' + pageNo);
574
    xw.writeEndElement(); /* Pagination*/
575
    xw.writeEndElement(); /* UnsoldList> */
14 - 576
    xw.writeElementString('OutputSelector', 'UnsoldList.ItemArray.Item.BuyItNowPrice');
577
    xw.writeElementString('OutputSelector', 'UnsoldList.ItemArray.Item.eBayNotes');
578
    xw.writeElementString('OutputSelector', 'UnsoldList.ItemArray.Item.ItemID');
579
    xw.writeElementString('OutputSelector', 'UnsoldList.ItemArray.Item.ListingDetails.EndTime');
580
    xw.writeElementString('OutputSelector', 'UnsoldList.ItemArray.Item.ListingType');
581
    xw.writeElementString('OutputSelector', 'UnsoldList.ItemArray.Item.PrivateNotes');
582
    xw.writeElementString('OutputSelector', 'UnsoldList.ItemArray.Item.QuantityAvailable');
583
    xw.writeElementString('OutputSelector', 'UnsoldList.ItemArray.Item.PictureDetails');
584
    xw.writeElementString('OutputSelector', 'UnsoldList.ItemArray.Item.Relisted');
585
    xw.writeElementString('OutputSelector', 'UnsoldList.ItemArray.Item.SKU');
586
    xw.writeElementString('OutputSelector', 'UnsoldList.ItemArray.Item.Title');
587
    xw.writeElementString('OutputSelector', 'UnsoldList.ItemArray.Item.StartPrice');
588
    xw.writeElementString('OutputSelector', 'UnsoldList.ItemArray.Item.WatchCount');
589
    xw.writeElementString('OutputSelector', 'UnsoldList.PaginationResult');
2 - 590
 
591
    xw.writeElementString('ErrorLanguage', 'en_US');
592
    xw.writeElementString('Version', configeBayTradingVersion);
593
    xw.writeElementString('WarningLevel', configWarningLevel);
594
 
595
    xw.writeEndElement(); /* xmlrequest */
596
    xw.writeEndDocument();
597
 
598
    xhr.open('POST', configProxyUrl, true);
599
    xhr.setRequestHeader('Content-Type', 'text/xml');
600
    xhr.setRequestHeader('X-EBAY-API-APP-NAME', configAppid);
601
    xhr.setRequestHeader('X-EBAY-API-COMPATIBILITY-LEVEL', configeBayTradingVersion);
602
    xhr.setRequestHeader('X-EBAY-API-CALL-NAME', callname);
603
    xhr.setRequestHeader('X-EBAY-API-SITEID', '0');
604
    xhr.setRequestHeader('X-EBAY-API-DEV-NAME', '');
605
    xhr.setRequestHeader('X-EBAY-API-CERT-NAME', '');
606
    xhr.setRequestHeader('X-Proxy-URL', configServiceEndpoint);
607
 
608
    return true;
609
}
610
 
611
function fillListings() {
612
    var i;
613
    var x = document.getElementById(tableName);
614
 
615
    listingsToFill = 0;
616
    maxListingsToFill = 0;
617
    listingsFilled = 0;
618
 
619
    initProgressBar('Fill Listing Information (2/2)');
620
 
621
    for (i = 2; i < x.rows.length; i++) {
622
        ++listingsToFill;
623
        ++maxListingsToFill;
624
        fillListing(x.rows[i].cells[3].innerHTML);
625
    }
626
 
627
    function checkListingsToFill() {
628
        if (listingsToFill > 0) {
629
            window.setTimeout(checkListingsToFill, 100); // wait 100 milliseconds
630
        } else {
631
            $("#" + tableName).trigger("update");
632
 
633
            endProgressBar();
634
 
635
            document.getElementById("createForm").className += " w3-hide";
636
            document.getElementById("relistForm").className += " w3-show";
637
 
638
            x = document.getElementById("results");
639
            x.innerHTML += '<p><strong>Report Finished!</strong></p>';
640
            if (!x.className.includes("process-errors")) {
641
                setTimeout(function() {
642
                    x.className = x.className.replace(" w3-show", "");
643
                }, 3000);
644
            }
645
        }
646
    }
647
 
648
    checkListingsToFill();
649
}
650
 
651
function fillListing(itemId) {
652
    var i;
653
    var xml;
654
 
655
    var xw = new XMLWriter('UTF-8', '1.0');
656
    var xhr = new XMLHttpRequest();
657
 
658
    if (!createFillXMLSearch(xw, xhr, 'GetItem', itemId)) {
659
        return;
660
    }
661
 
662
    xml = xw.flush();
663
    xw.close();
664
 
665
    xhr.onload = function() {
12 - 666
        var jsonObj = XMLparse(xhr.responseXML, false);
667
        var obj = jsonObj.GetItemResponse;
2 - 668
        var returnCode = obj.Ack;
19 - 669
        var str;
2 - 670
 
671
        var x = document.getElementById("results");
672
 
673
        if (returnCode == 'Success') {
674
            var itemId = getJsonValue(obj.Item.ItemID);
675
            document.getElementById("Views" + itemId).innerHTML = getJsonValue(obj.Item.HitCount);
12 - 676
            document.getElementById("Category" + itemId).innerHTML = getJsonValue(obj.Item.PrimaryCategory.CategoryName);
2 - 677
        } else {
678
            x.className += " process-errors";
30 - 679
            str += '<p class="text-danger">' + obj.CorrelationID + ': <strong>' + returnCode + ':</strong></p>';
2 - 680
 
6 - 681
            var errors = getJsonArray(obj.Errors);
19 - 682
            str += "<p>";
6 - 683
            for (i = 0; i < errors.length; i++) {
19 - 684
                str += errors[i].SeverityCode + " (" + errors[i].ErrorCode + "): " + escapeHtml(errors[i].LongMessage) + "<br/>";
2 - 685
            }
19 - 686
            str += "</p>";
687
 
688
            x.innerHTML += str;
2 - 689
        }
690
 
691
        --listingsToFill;
692
        ++listingsFilled;
693
        updateProgressBar(maxListingsToFill, listingsFilled);
694
    };
695
 
696
    xhr.send(xml);
697
}
698
 
699
function createFillXMLSearch(xw, xhr, callname, itemId) {
700
    xw.writeStartDocument();
701
    xw.writeStartElement(callname + "Request");
702
    xw.writeAttributeString('xmlns', 'urn:ebay:apis:eBLBaseComponents');
703
 
704
    xw.writeStartElement('RequesterCredentials');
705
    xw.writeElementString('eBayAuthToken', eBayAuthToken);
706
    xw.writeEndElement(); /* RequesterCredentials */
707
 
708
    xw.writeElementString('ItemID', itemId);
709
    xw.writeElementString('MessageID', itemId);
14 - 710
    xw.writeElementString('OutputSelector', 'Item.ItemID');
711
    xw.writeElementString('OutputSelector', 'Item.HitCount');
712
    xw.writeElementString('OutputSelector', 'Item.PrimaryCategory.CategoryName');
2 - 713
 
714
    xw.writeElementString('ErrorLanguage', 'en_US');
715
    xw.writeElementString('Version', configeBayTradingVersion);
716
    xw.writeElementString('WarningLevel', configWarningLevel);
717
 
718
    xw.writeEndElement(); /* xmlrequest */
719
    xw.writeEndDocument();
720
 
721
    xhr.open('POST', configProxyUrl, true);
722
    xhr.setRequestHeader('Content-Type', 'text/xml');
723
    xhr.setRequestHeader('X-EBAY-API-APP-NAME', configAppid);
724
    xhr.setRequestHeader('X-EBAY-API-COMPATIBILITY-LEVEL', configeBayTradingVersion);
725
    xhr.setRequestHeader('X-EBAY-API-CALL-NAME', callname);
726
    xhr.setRequestHeader('X-EBAY-API-SITEID', '0');
727
    xhr.setRequestHeader('X-EBAY-API-DEV-NAME', '');
728
    xhr.setRequestHeader('X-EBAY-API-CERT-NAME', '');
729
    xhr.setRequestHeader('X-Proxy-URL', configServiceEndpoint);
730
 
731
    return true;
732
}
733
 
734
function putListings() {
735
    var table = document.getElementById(tableName);
736
 
737
    listingsToRelist = 0;
738
    maxListingsToRelist = 0;
739
    listingsRelisted = 0;
740
 
741
    initProgressBar("Relist selected Items");
742
 
743
    var x = document.getElementById("results");
744
    x.innerHTML = '';
745
    x.className = x.className.replace("process-errors", "");
746
    if (x.className.indexOf("w3-show") == -1) {
747
        x.className += " w3-show";
748
    }
749
 
750
    for (var i = 2; i < table.rows.length; i++) {
751
        if (table.rows[i].cells[0].children[0].checked) {
752
            ++listingsToRelist;
753
            ++maxListingsToRelist;
754
 
755
            if (Number(table.rows[i].cells[10].innerHTML) > 0 || table.rows[i].cells[12].innerHTML.startsWith("Exported to ")) { // watchers or previously exported
10 - 756
                relistItem(table.rows[i].cells[3].innerHTML, (table.rows[i].cells[6].innerHTML == 'Auction'));
2 - 757
            } else {
758
                handleAddItem(table.rows[i].cells[3].innerHTML);
759
            }
760
 
761
            table.deleteRow(i--);
762
        }
763
    }
764
 
765
    function checkListingsToRelist() {
766
        if (listingsToRelist > 0) {
767
            window.setTimeout(checkListingsToRelist, 100); // wait 100 milliseconds
768
        } else {
7 - 769
            tableSorterUpdateCounters(tableName);
2 - 770
            endProgressBar();
771
 
772
            x = document.getElementById("results");
773
            x.innerHTML += '<p><strong>Relist Finished!</strong></p>';
774
            if (!x.className.includes("process-errors")) {
775
                setTimeout(function() {
776
                    x.className = x.className.replace(" w3-show", "");
777
                }, 3000);
778
            }
779
        }
780
    }
781
 
782
    checkListingsToRelist();
783
}
784
 
785
function relistItem(itemId, auctionFlag) {
786
    var i;
787
    var xml;
788
 
789
    var xw = new XMLWriter('UTF-8', '1.0');
790
    var xhr = new XMLHttpRequest();
791
 
12 - 792
    if (!createRelistXML(xw, xhr, (auctionFlag ? "RelistItem" : "RelistFixedPriceItem"), itemId)) {
2 - 793
        return;
794
    }
795
 
796
    xml = xw.flush();
797
    xw.close();
798
 
799
    xhr.onload = function() {
12 - 800
        var jsonObj = XMLparse(xhr.responseXML, false);
801
        var obj = (auctionFlag ? jsonObj.RelistItemResponse : jsonObj.RelistFixedPriceItemResponse);
2 - 802
        var returnCode = obj.Ack;
19 - 803
        var str;
2 - 804
 
805
        var x = document.getElementById("results");
806
 
807
        if (returnCode != 'Success') {
808
            x.className += " process-errors";
30 - 809
            str = '<p class="text-danger">' + obj.CorrelationID + ': <strong>' + returnCode + ':</strong></p>';
6 - 810
            var errors = getJsonArray(obj.Errors);
19 - 811
            str += "<p>";
6 - 812
            for (i = 0; i < errors.length; i++) {
19 - 813
                str += errors[i].SeverityCode + " (" + errors[i].ErrorCode + "): " + escapeHtml(errors[i].LongMessage) + "<br/>";
2 - 814
            }
19 - 815
            str += "</p>";
816
 
817
            x.innerHTML += str;
2 - 818
        }
819
 
820
        --listingsToRelist;
821
        ++listingsRelisted;
822
        updateProgressBar(maxListingsToRelist, listingsRelisted);
823
    };
824
 
825
    xhr.send(xml);
826
}
827
 
828
function createRelistXML(xw, xhr, callname, itemId) {
829
    xw.writeStartDocument();
830
    xw.writeStartElement(callname + "Request");
831
    xw.writeAttributeString('xmlns', 'urn:ebay:apis:eBLBaseComponents');
832
 
833
    xw.writeStartElement('RequesterCredentials');
834
    xw.writeElementString('eBayAuthToken', eBayAuthToken);
835
    xw.writeEndElement(); /* RequesterCredentials */
836
 
837
    xw.writeStartElement('Item');
838
    xw.writeElementString('ItemID', itemId);
839
    xw.writeEndElement(); /* Item */
840
 
841
    xw.writeElementString('ErrorLanguage', 'en_US');
842
    xw.writeElementString('Version', configeBayTradingVersion);
843
    xw.writeElementString('WarningLevel', configWarningLevel);
844
    xw.writeElementString('MessageID', itemId);
845
 
846
    xw.writeEndElement(); /* xmlrequest */
847
    xw.writeEndDocument();
848
 
849
    xhr.open('POST', configProxyUrl, true);
850
    xhr.setRequestHeader('Content-Type', 'text/xml');
851
    xhr.setRequestHeader('X-EBAY-API-APP-NAME', configAppid);
852
    xhr.setRequestHeader('X-EBAY-API-COMPATIBILITY-LEVEL', configeBayTradingVersion);
853
    xhr.setRequestHeader('X-EBAY-API-CALL-NAME', callname);
854
    xhr.setRequestHeader('X-EBAY-API-SITEID', '0');
855
    xhr.setRequestHeader('X-EBAY-API-DEV-NAME', '');
856
    xhr.setRequestHeader('X-EBAY-API-CERT-NAME', '');
857
    xhr.setRequestHeader('X-Proxy-URL', configServiceEndpoint);
858
 
859
    return true;
860
}
861
 
862
function handleAddItem(itemId) {
863
    var i;
864
    var xml;
865
 
866
    var xw = new XMLWriter('UTF-8', '1.0');
867
    var xhr = new XMLHttpRequest();
868
 
869
    if (!createGetItemAllXML(xw, xhr, "GetItem", itemId)) {
870
        return;
871
    }
872
 
873
    xml = xw.flush();
874
    xw.close();
875
 
876
    xhr.onload = function() {
12 - 877
        var jsonObj = XMLparse(xhr.responseXML, false);
878
        var obj = jsonObj.GetItemResponse;
2 - 879
        var returnCode = obj.Ack;
19 - 880
        var str;
2 - 881
 
882
        var x = document.getElementById("results");
883
 
884
        if (returnCode == 'Success') {
885
            var st = xhr.responseText.indexOf('<Item>') + 6;
886
            var len = xhr.responseText.indexOf('</Item>') - st;
12 - 887
            addItem(itemId, obj.Item, xhr.responseText.substr(st, len));
2 - 888
        } else {
889
            x.className += " process-errors";
30 - 890
            str += '<p class="text-danger">' + obj.CorrelationID + ': <strong>' + returnCode + ':</strong></p>';
2 - 891
 
6 - 892
            var errors = getJsonArray(obj.Errors);
19 - 893
            str += "<p>";
6 - 894
            for (i = 0; i < errors.length; i++) {
19 - 895
                str += errors[i].SeverityCode + " (" + errors[i].ErrorCode + "): " + escapeHtml(errors[i].LongMessage) + "<br/>";
2 - 896
            }
19 - 897
            str += "</p>";
2 - 898
 
19 - 899
            x.innerHTML += str;
900
 
2 - 901
            --listingsToRelist;
902
            ++listingsRelisted;
903
            updateProgressBar(maxListingsToRelist, listingsRelisted);
904
        }
905
    };
906
 
907
    xhr.send(xml);
908
}
909
 
910
function createGetItemAllXML(xw, xhr, callname, itemId) {
911
    xw.writeStartDocument();
912
    xw.writeStartElement(callname + "Request");
913
    xw.writeAttributeString('xmlns', 'urn:ebay:apis:eBLBaseComponents');
914
 
915
    xw.writeStartElement('RequesterCredentials');
916
    xw.writeElementString('eBayAuthToken', eBayAuthToken);
917
    xw.writeEndElement(); /* RequesterCredentials */
918
 
919
    xw.writeElementString('ItemID', itemId);
920
    xw.writeElementString('MessageID', itemId);
921
    xw.writeElementString('DetailLevel', 'ReturnAll');
922
    xw.writeElementString('IncludeItemSpecifics', 'true');
923
    xw.writeElementString('IncludeTaxTable', 'true');
14 - 924
    xw.writeElementString('OutputSelector', 'Item.AutoPay');
925
    xw.writeElementString('OutputSelector', 'Item.BuyItNowPrice');
926
    xw.writeElementString('OutputSelector', 'Item.BuyerResponsibleForShipping');
927
    xw.writeElementString('OutputSelector', 'Item.ConditionDescription');
928
    xw.writeElementString('OutputSelector', 'Item.ConditionDisplayName');
929
    xw.writeElementString('OutputSelector', 'Item.ConditionID');
930
    xw.writeElementString('OutputSelector', 'Item.Country');
931
    xw.writeElementString('OutputSelector', 'Item.Currency');
932
    xw.writeElementString('OutputSelector', 'Item.Description');
933
    xw.writeElementString('OutputSelector', 'Item.DispatchTimeMax');
934
    xw.writeElementString('OutputSelector', 'Item.HitCounter');
935
    xw.writeElementString('OutputSelector', 'Item.ItemSpecifics');
936
    xw.writeElementString('OutputSelector', 'Item.ListingDetails');
937
    xw.writeElementString('OutputSelector', 'Item.ListingDuration');
938
    xw.writeElementString('OutputSelector', 'Item.ListingType');
939
    xw.writeElementString('OutputSelector', 'Item.Location');
940
    xw.writeElementString('OutputSelector', 'Item.PayPalEmailAddress');
941
    xw.writeElementString('OutputSelector', 'Item.PaymentMethods');
942
    xw.writeElementString('OutputSelector', 'Item.PictureDetails');
943
    xw.writeElementString('OutputSelector', 'Item.PostalCode');
944
    xw.writeElementString('OutputSelector', 'Item.PrimaryCategory');
945
    xw.writeElementString('OutputSelector', 'Item.ProductListingDetails');
12 - 946
    xw.writeElementString('OutputSelector', 'Item.Quantity');
947
    xw.writeElementString('OutputSelector', 'Item.SellingStatus.QuantitySold');
14 - 948
    xw.writeElementString('OutputSelector', 'Item.ReservePrice');
949
    xw.writeElementString('OutputSelector', 'Item.ReturnPolicy');
950
    xw.writeElementString('OutputSelector', 'Item.SecondaryCategory');
951
    xw.writeElementString('OutputSelector', 'Item.SellerProfiles');
952
    xw.writeElementString('OutputSelector', 'Item.ShippingDetails');
953
    xw.writeElementString('OutputSelector', 'Item.ShippingPackageDetails');
954
    xw.writeElementString('OutputSelector', 'Item.Site');
955
    xw.writeElementString('OutputSelector', 'Item.SKU');
956
    xw.writeElementString('OutputSelector', 'Item.StartPrice');
957
    xw.writeElementString('OutputSelector', 'Item.Storefront');
958
    xw.writeElementString('OutputSelector', 'Item.SubTitle');
959
    xw.writeElementString('OutputSelector', 'Item.Title');
960
    xw.writeElementString('OutputSelector', 'Item.UseTaxTable');
2 - 961
    xw.writeElementString('ErrorLanguage', 'en_US');
962
    xw.writeElementString('Version', configeBayTradingVersion);
963
    xw.writeElementString('WarningLevel', configWarningLevel);
964
 
965
    xw.writeEndElement(); /* xmlrequest */
966
    xw.writeEndDocument();
967
 
968
    xhr.open('POST', configProxyUrl, true);
969
    xhr.setRequestHeader('Content-Type', 'text/xml');
970
    xhr.setRequestHeader('X-EBAY-API-APP-NAME', configAppid);
971
    xhr.setRequestHeader('X-EBAY-API-COMPATIBILITY-LEVEL', configeBayTradingVersion);
972
    xhr.setRequestHeader('X-EBAY-API-CALL-NAME', callname);
973
    xhr.setRequestHeader('X-EBAY-API-SITEID', '0');
974
    xhr.setRequestHeader('X-EBAY-API-DEV-NAME', '');
975
    xhr.setRequestHeader('X-EBAY-API-CERT-NAME', '');
976
    xhr.setRequestHeader('X-Proxy-URL', configServiceEndpoint);
977
 
978
    return true;
979
}
980
 
12 - 981
function addItem(itemId, item, itemXml) {
2 - 982
    var i;
983
 
984
    var xhr = new XMLHttpRequest();
12 - 985
    var xml = createAddItemXML(xhr, item, "AddItem", itemId, itemXml);
2 - 986
 
987
    xhr.onload = function() {
12 - 988
        var jsonObj = XMLparse(xhr.responseXML, false);
989
        var obj = jsonObj.AddItemResponse;
2 - 990
        var returnCode = obj.Ack;
991
        var newItemId = obj.ItemID;
992
        var correlationID = obj.CorrelationID;
19 - 993
        var str;
2 - 994
 
995
        var x = document.getElementById("results");
996
 
997
        if (returnCode == 'Success' || returnCode == 'Warning') {
998
            addNote(itemId);
999
            correlationID = newItemId;
1000
        }
1001
 
1002
        if (returnCode != 'Success') {
1003
            x.className += " process-errors";
30 - 1004
            str = '<p class="text-danger">' + correlationID + ': <strong>' + returnCode + ':</strong></p>';
6 - 1005
            var errors = getJsonArray(obj.Errors);
19 - 1006
            str += "<p>";
6 - 1007
            for (i = 0; i < errors.length; i++) {
19 - 1008
                str += errors[i].SeverityCode + " (" + errors[i].ErrorCode + "): " + escapeHtml(errors[i].LongMessage) + "<br/>";
2 - 1009
            }
19 - 1010
            str += "</p>";
1011
 
36 - 1012
            x.innerHTML += str;
19 - 1013
 
2 - 1014
            --listingsToRelist;
1015
            ++listingsRelisted;
1016
            updateProgressBar(maxListingsToRelist, listingsRelisted);
1017
        }
1018
    };
1019
 
1020
    xhr.send(xml);
1021
 
1022
}
1023
 
12 - 1024
function createAddItemXML(xhr, item, callname, itemId, itemXml) {
139 - 1025
    var n1 = 0, n2 = 0, m1, m2;
1026
    var str;
12 - 1027
    var quantity = Number(getJsonValue(item.Quantity));
1028
    var quantitySold = Number(getJsonValue(item.SellingStatus.QuantitySold));
2 - 1029
 
12 - 1030
    n1 = itemXml.indexOf('<Quantity>') + 10;
1031
    if (n1 > 0) {
1032
        n2 = itemXml.indexOf('</Quantity>')
1033
        str = itemXml.substr(0, n1) + (quantity - quantitySold) + itemXml.substr(n2);
1034
        itemXml = str;
1035
    }
1036
 
150 - 1037
    n1 = itemXml.indexOf('<SellerPaymentProfile>') + 22;
1038
    if (n1 > 0) {
1039
        n2 = itemXml.indexOf('</SellerPaymentProfile>')
1040
        str = itemXml.substr(0, n1);
1041
        str += '<PaymentProfileID>187930424023</PaymentProfileID>';
1042
        str += '<PaymentProfileName>eBay Managed Payments</PaymentProfileName>';
1043
        str += itemXml.substr(n2);
1044
        itemXml = str;
1045
    }
1046
 
12 - 1047
    if (itemXml.contains('<SellingStatus>')) {
1048
        n1 = itemXml.indexOf('<SellingStatus>');
1049
        if (n1 > 0) {
1050
            n2 = itemXml.indexOf('</SellingStatus>') + 16;
1051
            str = itemXml.substr(0, n1) + itemXml.substr(n2);
1052
            itemXml = str;
1053
        }
1054
    }
1055
 
2 - 1056
    if (itemXml.contains('<ShippingType>Flat</ShippingType>')) {
1057
        n1 = itemXml.indexOf('<CalculatedShippingRate>');
1058
        if (n1 > 0) {
1059
            n2 = itemXml.indexOf('</CalculatedShippingRate>') + 25;
12 - 1060
            str = itemXml.substr(0, n1) + itemXml.substr(n2);
1061
            itemXml = str;
2 - 1062
        }
1063
    }
1064
 
1065
    if (itemXml.contains('<ShippingPackage>None</ShippingPackage>')) {
1066
        n1 = itemXml.indexOf('<ShippingPackageDetails>');
1067
        if (n1 > 0) {
1068
            n2 = itemXml.indexOf('</ShippingPackageDetails>') + 25;
12 - 1069
            str = itemXml.substr(0, n1) + itemXml.substr(n2);
1070
            itemXml = str;
2 - 1071
        }
1072
    }
1073
 
139 - 1074
    if (itemXml.contains('Sports Trading Cards') && !itemXml.contains('<Name>Player</Name>')) {
1075
        n1 = itemXml.indexOf('</ItemSpecifics>');
1076
        if (n1 > 0) {
1077
            str = itemXml.substr(0, n1) + '<NameValueList><Name>Player</Name><Value>N/A</Value><Source>ItemSpecific</Source></NameValueList>' + itemXml.substr(n1);
1078
            itemXml = str;
1079
        }
1080
    }
1081
 
150 - 1082
    if (itemXml.contains('Sports Trading Cards') && !itemXml.contains('<Name>Team</Name>')) {
1083
        n1 = itemXml.indexOf('</ItemSpecifics>');
1084
        if (n1 > 0) {
1085
            str = itemXml.substr(0, n1) + '<NameValueList><Name>Team</Name><Value>N/A</Value><Source>ItemSpecific</Source></NameValueList>' + itemXml.substr(n1);
1086
            itemXml = str;
1087
        }
1088
    }
1089
 
139 - 1090
    if (itemXml.contains('Sports Trading Cards') && !itemXml.contains('<Name>Sport</Name>')) {
1091
        n1 = itemXml.indexOf('</ItemSpecifics>');
1092
        if (n1 > 0) {
1093
            m1 = itemXml.indexOf('Sports Trading Cards:');
1094
            if (m1 > 0) {
1095
                m1 += 21;
1096
                m2 = itemXml.indexOf(' Cards</CategoryName>') - m1;
1097
                str = itemXml.substr(0, n1) + '<NameValueList><Name>Sport</Name><Value>' + itemXml.substr(m1, m2) + '</Value><Source>ItemSpecific</Source></NameValueList>' + itemXml.substr(n1);
1098
                itemXml = str;
1099
            }
1100
        }
1101
    }
1102
 
1103
    if (itemXml.contains('<Value>Not Autographed</Value>')) {
1104
        n1 = itemXml.indexOf('<Value>Not Autographed</Value>');
1105
        if (n1 > 0) {
1106
            n2 = n1 + 30;
1107
            str = itemXml.substr(0, n1) + '<Value>-</Value>' + itemXml.substr(n2);
1108
            itemXml = str;
1109
        }
1110
    }
1111
 
1112
    if (itemXml.contains('<Value>Not Authenticated</Value>')) {
1113
        n1 = itemXml.indexOf('<Value>Not Authenticated</Value>');
1114
        if (n1 > 0) {
1115
            n2 = n1 + 32;
1116
            str = itemXml.substr(0, n1) + '<Value>-</Value>' + itemXml.substr(n2);
1117
            itemXml = str;
1118
        }
1119
    }
1120
 
2 - 1121
    var xml = '<?xml version="1.0" encoding="utf-8"?>';
1122
    xml += '<' + callname + 'Request xmlns="urn:ebay:apis:eBLBaseComponents">';
1123
    xml += '<RequesterCredentials><eBayAuthToken>' + eBayAuthToken + '</eBayAuthToken></RequesterCredentials>';
1124
    xml += '<ErrorLanguage>en_US</ErrorLanguage>';
1125
    xml += '<WarningLevel>' + configWarningLevel + '</WarningLevel>';
1126
    xml += '<MessageID>' + itemId + '</MessageID>';
1127
    xml += '<Item>';
1128
    xml += itemXml;
1129
    xml += '<UseTaxTable>true</UseTaxTable>';
1130
    xml += '</Item>';
1131
    xml += '</' + callname + 'Request>';
1132
 
1133
    xhr.open('POST', configProxyUrl, true);
1134
    xhr.setRequestHeader('Content-Type', 'text/xml');
1135
    xhr.setRequestHeader('X-EBAY-API-APP-NAME', configAppid);
1136
    xhr.setRequestHeader('X-EBAY-API-COMPATIBILITY-LEVEL', configeBayTradingVersion);
1137
    xhr.setRequestHeader('X-EBAY-API-CALL-NAME', callname);
1138
    xhr.setRequestHeader('X-EBAY-API-SITEID', '0');
1139
    xhr.setRequestHeader('X-EBAY-API-DEV-NAME', '');
1140
    xhr.setRequestHeader('X-EBAY-API-CERT-NAME', '');
1141
    xhr.setRequestHeader('X-Proxy-URL', configServiceEndpoint);
1142
 
1143
    return xml;
1144
}
1145
 
1146
    </script>
17 - 1147
    <script>includeHTML();</script>
2 - 1148
 
1149
</body>
6 - 1150
</html>