· 5 years ago · Aug 26, 2020, 05:28 PM
1/******************************************************************/
2/******************************************************************/
3/* Warmane Jquery Marketplace Plugin (Marketplace, Trading, Misc) */
4/******************************************************************/
5/******************************************************************/
6var
7dataMenu = {
8 0: { name:"Popular", class:99, subclass:-1, invtype:-1, mod:9, active: 1 },
9 1: { name:"Gold", class:99, subclass:-1, invtype:-1, mod:4, forbidden : ['marketplace'] },
10 2: { name:"Weapons", class:2, subclass:-1, invtype:-1,
11 subs: {
12 0 : { name:"One-Handed Axes", class:2, subclass:0, invtype:-1 },
13 1 : { name:"Two-Handed Axes", class:2, subclass:1, invtype:-1 },
14 2 : { name:"Bows", class:2, subclass:2, invtype:-1 },
15 3 : { name:"Guns", class:2, subclass:3, invtype:-1 },
16 4 : { name:"One-Handed Maces", class:2, subclass:4, invtype:-1 },
17 5 : { name:"Two-Handed Maces", class:2, subclass:5, invtype:-1 },
18 6 : { name:"Polearms", class:2, subclass:6, invtype:-1 },
19 7 : { name:"One-Handed Swords", class:2, subclass:7, invtype:-1 },
20 8 : { name:"Two-Handed Swords", class:2, subclass:8, invtype:-1 },
21 9 : { name:"Staves", class:2, subclass:10, invtype:-1 },
22 10 : { name:"Fist Weapons", class:2, subclass:13, invtype:-1 },
23 11 : { name:"Miscellaneous", class:2, subclass:14, invtype:-1 },
24 12 : { name:"Daggers", class:2, subclass:15, invtype:-1 },
25 13 : { name:"Thrown", class:2, subclass:16, invtype:-1 },
26 14 : { name:"Crossbows", class:2, subclass:18, invtype:-1 },
27 15 : { name:"Wands", class:2, subclass:19, invtype:-1 },
28 16 : { name:"Fishing Poles", class:2, subclass:20, invtype:-1 }
29 },
30 forbidden : []
31 },
32 3: { name:"Armor", class:4, subclass:-1, invtype:-1,
33 subs: {
34 0 : { name:"Miscellaneous", class:4, subclass:0, invtype:-1,
35 subs: {
36 0 : { name:"Head", class:4, subclass:0, invtype:1 },
37 1 : { name:"Neck", class:4, subclass:0, invtype:2 },
38 2 : { name:"Shirt", class:4, subclass:0, invtype:4 },
39 3 : { name:"Finger", class:4, subclass:0, invtype:11 },
40 4 : { name:"Trinkets", class:4, subclass:0, invtype:12 },
41 5 : { name:"Tabards", class:4, subclass:0, invtype:19 },
42 6 : { name:"Held In Off-Hand", class:4, subclass:0, invtype:23 }
43 },
44 },
45 1 : { name:"Cloth", class:4, subclass:1, invtype:-1,
46 subs: {
47 0 : { name:"Head", class:4, subclass:1, invtype:1 },
48 1 : { name:"Shoulder", class:4, subclass:1, invtype:3 },
49 2 : { name:"Chest", class:4, subclass:1, invtype:5 },
50 3 : { name:"Waist", class:4, subclass:1, invtype:6 },
51 4 : { name:"Legs", class:4, subclass:1, invtype:7 },
52 5 : { name:"Feet", class:4, subclass:1, invtype:8 },
53 6 : { name:"Wrist", class:4, subclass:1, invtype:9 },
54 7 : { name:"Hands", class:4, subclass:1, invtype:10 },
55 8 : { name:"Back", class:4, subclass:1, invtype:16 }
56 },
57 },
58 2 : { name:"Leather", class:4, subclass:2, invtype:-1,
59 subs: {
60 0 : { name:"Head", class:4, subclass:2, invtype:1 },
61 1 : { name:"Shoulder", class:4, subclass:2, invtype:3 },
62 2 : { name:"Chest", class:4, subclass:2, invtype:5 },
63 3 : { name:"Waist", class:4, subclass:2, invtype:6 },
64 4 : { name:"Legs", class:4, subclass:2, invtype:7 },
65 5 : { name:"Feet", class:4, subclass:2, invtype:8 },
66 6 : { name:"Wrist", class:4, subclass:2, invtype:9 },
67 7 : { name:"Hands", class:4, subclass:2, invtype:10 }
68 },
69 },
70 3 : { name:"Mail", class:4, subclass:3, invtype:-1,
71 subs: {
72 0 : { name:"Head", class:4, subclass:3, invtype:1 },
73 1 : { name:"Shoulder", class:4, subclass:3, invtype:3 },
74 2 : { name:"Chest", class:4, subclass:3, invtype:5 },
75 3 : { name:"Waist", class:4, subclass:3, invtype:6 },
76 4 : { name:"Legs", class:4, subclass:3, invtype:7 },
77 5 : { name:"Feet", class:4, subclass:3, invtype:8 },
78 6 : { name:"Wrist", class:4, subclass:3, invtype:9 },
79 7 : { name:"Hands", class:4, subclass:3, invtype:10 }
80 },
81 },
82 4 : { name:"Plate", class:4, subclass:4, invtype:-1,
83 subs: {
84 0 : { name:"Head", class:4, subclass:4, invtype:1 },
85 1 : { name:"Shoulder", class:4, subclass:4, invtype:3 },
86 2 : { name:"Chest", class:4, subclass:4, invtype:5 },
87 3 : { name:"Waist", class:4, subclass:4, invtype:6 },
88 4 : { name:"Legs", class:4, subclass:4, invtype:7 },
89 5 : { name:"Feet", class:4, subclass:4, invtype:8 },
90 6 : { name:"Wrist", class:4, subclass:4, invtype:9 },
91 7 : { name:"Hands", class:4, subclass:4, invtype:10 }
92 },
93 },
94 5 : { name:"Shields", class:4, subclass:6, invtype:-1 },
95 6 : { name:"Relics", class:4, subclass:11, invtype:-1 }
96 },
97 forbidden : []
98 },
99 4: { name:"Containers", class:1, subclass:-1, invtype:-1,
100 subs: {
101 0 : { name:"Bag", class:1, subclass:0, invtype:-1 },
102 1 : { name:"Soul Bag", class:1, subclass:1, invtype:-1 },
103 2 : { name:"Herb Bag", class:1, subclass:2, invtype:-1 },
104 3 : { name:"Enchanting Bag", class:1, subclass:3, invtype:-1 },
105 4 : { name:"Engineering Bag", class:1, subclass:4, invtype:-1 },
106 5 : { name:"Gem Bag", class:1, subclass:5, invtype:-1 },
107 6 : { name:"Mining Bag", class:1, subclass:6, invtype:-1 },
108 7 : { name:"Leatherworking Bag", class:1, subclass:7, invtype:-1 },
109 8 : { name:"Inscription Bag", class:1, subclass:8, invtype:-1 },
110 9 : { name:"Tackle Box", class:1, subclass:9, invtype:-1 }
111 },
112 forbidden : ['points']
113 },
114 5: { name:"Consumables", class:0, subclass:3, invtype:-1,
115 subs: {
116 0 : { name:"Food & Drink", class:0, subclass:5, invtype:-1 },
117 1 : { name:"Potion", class:0, subclass:1, invtype:-1 },
118 2 : { name:"Elixir", class:0, subclass:2, invtype:-1 },
119 3 : { name:"Flask", class:0, subclass:3, invtype:-1 },
120 4 : { name:"Bandage", class:0, subclass:7, invtype:-1 },
121 5 : { name:"Item Enhancement", class:0, subclass:6, invtype:-1 },
122 6 : { name:"Scroll", class:0, subclass:4, invtype:-1 },
123 7 : { name:"Other", class:0, subclass:8, invtype:-1 }
124 },
125 forbidden : ['points','coins']
126 },
127 6: { name:"Glyphs", class:16, subclass:-1, invtype:-1,
128 subs: {
129 0 : { name:"Warrior", class:16, subclass:1, invtype:-1 },
130 1 : { name:"Paladin", class:16, subclass:2, invtype:-1 },
131 2 : { name:"Hunter", class:16, subclass:3, invtype:-1 },
132 3 : { name:"Rogue", class:16, subclass:4, invtype:-1 },
133 4 : { name:"Priest", class:16, subclass:5, invtype:-1 },
134 5 : { name:"Death Knight", class:16, subclass:6, invtype:-1 },
135 6 : { name:"Shaman", class:16, subclass:7, invtype:-1 },
136 7 : { name:"Mage", class:16, subclass:8, invtype:-1 },
137 8 : { name:"Warlock", class:16, subclass:9, invtype:-1 },
138 9 : { name:"Druid", class:16, subclass:11, invtype:-1 }
139 },
140 forbidden : ['points','coins']
141 },
142 7: { name:"Trade Goods", class:7, subclass:-1, invtype:-1,
143 subs: {
144 0 : { name:"Elemental", class:7, subclass:10, invtype:-1 },
145 1 : { name:"Cloth", class:7, subclass:5, invtype:-1 },
146 2 : { name:"Leather", class:7, subclass:6, invtype:-1 },
147 3 : { name:"Metal & Stone", class:7, subclass:7, invtype:-1 },
148 4 : { name:"Meat", class:7, subclass:8, invtype:-1 },
149 5 : { name:"Herb", class:7, subclass:9, invtype:-1 },
150 6 : { name:"Enchanting", class:7, subclass:12, invtype:-1 },
151 7 : { name:"Jewelcrafting", class:7, subclass:4, invtype:-1 },
152 8 : { name:"Parts", class:7, subclass:1, invtype:-1 },
153 9 : { name:"Devices", class:7, subclass:3, invtype:-1 },
154 10 : { name:"Explosives", class:7, subclass:2, invtype:-1 },
155 11 : { name:"Materials", class:7, subclass:13, invtype:-1 },
156 12 : { name:"Other", class:7, subclass:11, invtype:-1 },
157 13 : { name:"Item Enchantment", class:7, subclass:14, invtype:-1 }
158 },
159 forbidden : ['points','coins']
160 },
161 8: { name:"Recipes", class:9, subclass:-1, invtype:-1,
162 subs: {
163 0 : { name:"Book", class:9, subclass:0, invtype:-1 },
164 1 : { name:"Leatherworking", class:9, subclass:1, invtype:-1 },
165 2 : { name:"Tailoring", class:9, subclass:2, invtype:-1 },
166 3 : { name:"Engineering", class:9, subclass:3, invtype:-1 },
167 4 : { name:"Blacksmithing", class:9, subclass:4, invtype:-1 },
168
169 5 : { name:"Cooking", class:9, subclass:5, invtype:-1 },
170 6 : { name:"Alchemy", class:9, subclass:6, invtype:-1 },
171 7 : { name:"First Aid", class:9, subclass:7, invtype:-1 },
172 8 : { name:"Enchanting", class:9, subclass:8, invtype:-1 },
173 9 : { name:"Fishing", class:9, subclass:9, invtype:-1 },
174 10 : { name:"Jewelcrafting", class:9, subclass:10, invtype:-1 },
175 11 : { name:"Inscription", class:9, subclass:11, invtype:-1 }
176 },
177 forbidden : ['points']
178 },
179 9: { name:"Gems", class:3, subclass:-1, invtype:-1,
180 subs: {
181 0 : { name:"Red", class:3, subclass:0, invtype:-1 },
182 1 : { name:"Blue", class:3, subclass:1, invtype:-1 },
183 2 : { name:"Yellow", class:3, subclass:2, invtype:-1 },
184 3 : { name:"Purple", class:3, subclass:3, invtype:-1 },
185 4 : { name:"Green", class:3, subclass:4, invtype:-1 },
186 5 : { name:"Orange", class:3, subclass:5, invtype:-1 },
187 6 : { name:"Meta", class:3, subclass:6, invtype:-1 },
188 7 : { name:"Simple", class:3, subclass:7, invtype:-1 },
189 8 : { name:"Prismatic", class:3, subclass:8, invtype:-1 },
190 9 : { name:"Cogwheel", class:3, subclass:10, invtype:-1 }
191 },
192 forbidden : ['points','coins']
193 },
194 10: { name:"Miscellaneous", class:15, subclass:-1, invtype:-1,
195 subs: {
196 0 : { name:"Junk", class:15, subclass:0, invtype:-1 },
197 1 : { name:"Reagent", class:15, subclass:1, invtype:-1 },
198 2 : { name:"Holiday", class:15, subclass:3, invtype:-1 },
199 3 : { name:"Other", class:15, subclass:4, invtype:-1 }
200 },
201 forbidden : ['points']
202 },
203 11: { name:"Quest", class:12, subclass:-1, invtype:-1, forbidden : ['points','coins'] },
204 12: { name:"Mounts", class:15, subclass:5, invtype:-1, forbidden : ['points'] },
205 13: { name:"Companions", class:15, subclass:2, invtype:-1, forbidden : ['points'] },
206 14: { name:"Item Sets", class:99, subclass:-1, invtype:-1, mod:2,
207 subs: {
208 0 : { name:"Warrior", class:99, subclass:1, invtype:-1, mod:2 },
209 1 : { name:"Paladin", class:99, subclass:2, invtype:-1, mod:2 },
210 2 : { name:"Hunter", class:99, subclass:4, invtype:-1, mod:2 },
211 3 : { name:"Rogue", class:99, subclass:8, invtype:-1, mod:2 },
212 4 : { name:"Priest", class:99, subclass:16, invtype:-1, mod:2 },
213 5 : { name:"Death Knight", class:99, subclass:32, invtype:-1, mod:2 },
214 6 : { name:"Shaman", class:99, subclass:64, invtype:-1, mod:2 },
215 7 : { name:"Mage", class:99, subclass:128, invtype:-1, mod:2 },
216 8 : { name:"Warlock", class:99, subclass:256, invtype:-1, mod:2 },
217 9 : { name:"Druid", class:99, subclass:1024, invtype:-1, mod:2 },
218 10 : { name:"Other", class:99, subclass:0, invtype:-1, mod:2 }
219 },
220 forbidden : ['points','trading']
221 },
222 15: { name: "Transmogrify", class: 99, subclass: -1, invtype: -1, mod: 11, forbidden: ['points'] },
223 16: { name: "Packages", class: 99, subclass: -1, invtype: -1, mod: 7, forbidden: ['points', 'trading'] }
224};
225
226(function($) {
227 "use strict";
228 var tradeTabs = {
229 0: [1, "BUY", 0],
230 1: [2, "SELL", 0]
231 };
232
233 var sellTabs = {
234 0: [1, "SELL", "SELL AN ITEM", 0],
235 1: [2, "SELLING", "ITEMS I'M SELLING", 0],
236 2: [3, "SOLD", "ITEMS I'VE SOLD", 0]
237 };
238
239 var methods = {
240 init: function(options) {
241 console.log('Initialize Warmane Marketplace');
242 methods.settings = $.extend({}, $.wmmarket.defaults, options);
243 methods.loadMenu();
244 $('select:not(#trade-option)').msDropDown();
245
246 $(document.body).off('click', 'div[data-menu]').on('click', 'div[data-menu]', function() {
247 methods.selectMenu($(this).attr('data-menu'));
248 methods.loadSubMenu($(this).attr('data-menu'));
249 methods.reloadMenuGlider();
250 });
251
252 $(document.body).off('click', 'div[data-submenu]').on('click', 'div[data-submenu]', function() {
253 methods.selectSubMenu($(this).attr('data-submenu'));
254 methods.loadSubSubMenu($(this).attr('data-submenu'));
255 methods.reloadMenuGlider();
256 });
257
258 $(document.body).off('click', 'div[data-subsubmenu]').on('click', 'div[data-subsubmenu]', function() {
259 methods.selectSubSubMenu($(this).attr('data-subsubmenu'));
260 methods.reloadMenuGlider();
261 });
262
263 if(methods.settings.service == 'trading') {
264 $('#trade-options').show();
265 $('#trade-option').msDropDown().data('dd').set('selectedIndex', 0);
266 $('#promo-information').hide();
267 methods.initTrading();
268 } else {
269 $('#trade-options').hide();
270 }
271
272 methods.handleEnter();
273 methods.initShoppingCart();
274
275 methods.executeSearch();
276
277 methods.settings.mod = 0;
278
279 $("#searchTerm").bind("blur", function() { if(!methods.settings.hovering) { $("#search-suggestions").hide(); } });
280 $("#search-suggestions ul").bind("mouseenter", function() { methods.settings.hovering = true; });
281 $("#search-suggestions ul").bind("mouseleave", function() { methods.settings.hovering = false; });
282 $("#search-suggestions").on("click", "a", function(e) {
283 e.preventDefault();
284 $("#searchTerm").val($(this).html());
285 methods.updateName();
286 methods.executeSearch();
287 methods.settings.hovering = false;
288 $("#search-suggestions").hide();
289 });
290
291 $(document).off('click', 'div[data-index]').on('click', 'div[data-index]', function() {
292 methods.selectMarketplaceItem($(this).data('index'));
293 window.location.hash = '#purchase-item';
294 });
295 },
296
297 /* MENUS */
298 loadMenu: function() {
299 var content = "";
300 var i = 0;
301 for (var key in dataMenu) {
302 if(i == 0) {
303 if(methods.settings.service == 'trading') {
304 dataMenu[key].name = 'Recent';
305 } else {
306 dataMenu[key].name = 'Popular';
307 }
308 }
309
310 if(!in_array(methods.settings.currency, dataMenu[key].forbidden) && !in_array(methods.settings.service, dataMenu[key].forbidden)) {
311 content += '<div class="sideBtn' + (dataMenu[key].active !== undefined ? ' active' : '') + '" data-menu="' + key + '"><p class="active">' + dataMenu[key].name + '</p></div><div class="subMenuWrap" data-menuwrap="' + key + '"></div>';
312 }
313
314 i++;
315 }
316 methods.leftPaneRefresh(content);
317 },
318
319 loadSubMenu: function(id) {
320 var content = "";
321 if(dataMenu[id].subs && methods.settings.currentmenu == id) {
322 for (var key in dataMenu[id].subs) {
323 content += '<div class="sideSubBtn" data-submenu="' + key + '"><p>' + dataMenu[id].subs[key].name + '</p></div><div class="subSubMenuWrap" data-submenuwrap="' + key + '"></div>';
324 }
325 $('div[data-menuwrap=' + methods.settings.currentmenu + ']').html(content);
326 }
327 },
328
329 loadSubSubMenu: function(id) {
330 var content = "";
331 if(dataMenu[methods.settings.currentmenu].subs[id].subs && methods.settings.currentsubmenu == id) {
332 for (var key in dataMenu[methods.settings.currentmenu].subs[id].subs) {
333 content += '<div class="sideSubSubBtn" data-subsubmenu="' + key + '"><p>' + dataMenu[methods.settings.currentmenu].subs[id].subs[key].name + '</p></div>';
334 }
335 $('div[data-submenuwrap=' + methods.settings.currentsubmenu + ']').html(content);
336 }
337 },
338
339 selectMenu: function(id) {
340 if(methods.settings.currentmenu != id) {
341 $('div[data-menu]').removeClass('active');
342 $('div[data-menu=' + methods.settings.currentmenu + '] + div').html('');
343 $('div[data-menu=' + id + ']').addClass('active');
344 methods.settings.currentmenu = id;
345 methods.settings.currentsubmenu = -1;
346 methods.settings.currentsubsubmenu = -1;
347 methods.settings.class = dataMenu[id].class;
348 methods.settings.subclass = dataMenu[id].subclass;
349 methods.settings.inventorytype = dataMenu[id].invtype;
350 methods.settings.mod = dataMenu[id].mod;
351 if(("subs" in dataMenu[id]) && id != 0 && (0 in dataMenu[methods.settings.currentmenu].subs) && methods.settings.service != 'trading') {
352 setTimeout(function() { methods.selectSubMenu(0); }, 100);
353 } else {
354 methods.executeSearch();
355 }
356 } else {
357 $('div[data-menu]').removeClass('active');
358 $('div[data-menu=' + id + ']').addClass('active');
359 $('div[data-menu=' + methods.settings.currentmenu + '] + div').html('');
360 methods.settings.currentmenu = -1;
361 //methods.settings.currentsubmenu = -1;
362 //methods.settings.currentsubsubmenu = -1;
363 //methods.settings.class = -1;
364 methods.settings.subclass = -1;
365 //methods.settings.inventorytype = -1;
366 }
367 },
368
369 selectSubMenu: function(id) {
370 if(methods.settings.currentsubmenu != id) {
371 $('div[data-submenu=' + methods.settings.currentsubmenu + ']').removeClass('active');
372 $('div[data-submenu=' + methods.settings.currentsubmenu + '] + div').html('');
373 $('div[data-submenu=' + id + ']').addClass('active');
374 methods.settings.currentsubmenu = id;
375 methods.settings.currentsubsubmenu = -1;
376 methods.settings.class = dataMenu[methods.settings.currentmenu].subs[id].class;
377 methods.settings.subclass = dataMenu[methods.settings.currentmenu].subs[id].subclass;
378 methods.settings.inventorytype = dataMenu[methods.settings.currentmenu].subs[id].invtype;
379 methods.settings.mod = dataMenu[methods.settings.currentmenu].subs[id].mod;
380 } else {
381 return;
382 $('div[data-submenu=' + methods.settings.currentsubmenu + ']').removeClass('active');
383 $('div[data-submenu=' + methods.settings.currentsubmenu + '] + div').html('');
384 methods.settings.currentsubmenu = -1;
385 methods.settings.currentsubsubmenu = -1;
386 methods.settings.class = dataMenu[methods.settings.currentmenu].class;
387 methods.settings.subclass = dataMenu[methods.settings.currentmenu].subclass;
388 methods.settings.inventorytype = dataMenu[methods.settings.currentmenu].invtype;
389 methods.settings.mod = dataMenu[methods.settings.currentmenu].mod;
390 }
391 methods.executeSearch();
392 },
393
394 selectSubSubMenu: function(id) {
395 if(dataMenu[methods.settings.currentmenu].subs[methods.settings.currentsubmenu].subs && methods.settings.currentsubsubmenu != id) {
396 $('div[data-subsubmenu=' + methods.settings.currentsubsubmenu + ']').removeClass('active');
397 $('div[data-subsubmenu=' + id + ']').addClass('active');
398 methods.settings.currentsubsubmenu = id;
399 methods.settings.class = dataMenu[methods.settings.currentmenu].subs[methods.settings.currentsubmenu].subs[id].class;
400 methods.settings.subclass = dataMenu[methods.settings.currentmenu].subs[methods.settings.currentsubmenu].subs[id].subclass;
401 methods.settings.inventorytype = dataMenu[methods.settings.currentmenu].subs[methods.settings.currentsubmenu].subs[id].invtype;
402 methods.settings.mod = dataMenu[methods.settings.currentmenu].subs[methods.settings.currentsubmenu].subs[id].mod;
403 } else {
404 return;
405 $('div[data-subsubmenu=' + methods.settings.currentsubsubmenu + ']').removeClass('active');
406 methods.settings.currentsubsubmenu = -1;
407 methods.settings.class = dataMenu[methods.settings.currentmenu].subs[methods.settings.currentsubmenu].class;
408 methods.settings.subclass = dataMenu[methods.settings.currentmenu].subs[methods.settings.currentsubmenu].subclass;
409 methods.settings.inventorytype = dataMenu[methods.settings.currentmenu].subs[methods.settings.currentsubmenu].invtype;
410 methods.settings.mod = dataMenu[methods.settings.currentmenu].subs[methods.settings.currentsubmenu].mod;
411 }
412 methods.executeSearch();
413 },
414
415 /* EXECUTION */
416 executionDefaults: function() {
417 var data = {
418 'update': 'page',
419 };
420 return data;
421 },
422
423 executeSearch: function() {
424 var data = {
425 'method': 'load',
426 'do': 'search'
427 };
428
429 data = $.param(methods.executionDefaults()) + '&' + $.param(methods.settings) + '&' + $.param(data);
430
431 $.ajax({
432 type: 'POST',
433 url: '',
434 data: data,
435 dataType: 'json',
436 success: function (result) {
437 if(result.content) {
438 if(methods.settings.service == 'trading' && methods.settings.tradetab == 2 && methods.settings.selltab == 1) {
439 methods.loadItemList(result.content);
440 } else {
441 methods.rightPaneRefresh(result.content);
442 methods.selectMarketplaceItem(0);
443 }
444 }
445 }
446 });
447 },
448
449 applyPromoCode: function() {
450 methods.settings.promocode = null;
451 var code = $('#promocode').val();
452 if(code == "" || code.length != 10 || methods.settings.service == 'trading') {
453 $('#promo-result').html('<span class="error-message">Invalid promotion code</span>');
454 } else {
455 var selectedItem = $('div[data-index=' + methods.settings.marketitem + ']');
456 var data = {
457 'method': 'load',
458 'do': 'promo',
459 'code': code,
460 'itemid': $(selectedItem).data('id'),
461 'itementry': $(selectedItem).data('entry'),
462 };
463
464 data = $.param(methods.executionDefaults()) + '&' + $.param(methods.settings) + '&' + $.param(data);
465
466 $.ajax({
467 type: 'POST',
468 url: '',
469 data: data,
470 dataType: 'json',
471 success: function (result) {
472 if(result.error) {
473 $('#promo-result').html('<span class="error-message">' + result.error + '</span>');
474 }
475
476 if(result.success) {
477 $('#promo-result').html('<span class="success-message">' + result.success + '</span>');
478 methods.settings.promocode = code;
479 $('#promo-information').hide();
480 }
481 }
482 });
483 }
484 },
485
486 selectMarketplaceItem: function(id) {
487 methods.settings.marketitem = id;
488 $('#promocode').val('');
489 methods.settings.promocode = null;
490 var cost = $('div[data-index=' + id + ']').data('cost');
491 $('#promo-result').html('');
492 if(id > 0) {
493 console.log('Attempting to purchase ' + $('div[data-index=' + id + ']').data('name'));
494 $('#purchasing-item').html($('div[data-index=' + id + ']').data('name'));
495 if(cost) {
496 if(cost >= 5) {
497 $('#purchase-information').html('<span class="green">Note: This purchase will also grant a 30 day queue-skipping benefit on Lordaeron.</span>');
498 } else {
499 $('#purchase-information').html('<span class="yellow">Note: This purchase will not grant the 30 day queue-skipping benefit on Lordaeron.</span>');
500 }
501 }
502 methods.settings.userAG = true;
503 } else {
504 console.log('Removing attempted purchase');
505 $('#purchasing-item').html('');
506 $('#purchase-information').html('');
507 methods.settings.userAG = false;
508 }
509 },
510
511 executeReportItem: function () {
512 var name = $('#reportitem').val();
513 var shop = $('#reportshop').val();
514 var price = $('#reportprice').val();
515 if (name.length < 2) {
516 $('#wm-ui-flash-message').ajaxListener('addError', 'Enter a valid item name.');
517 return false;
518 } else if (shop === "") {
519 $('#wm-ui-flash-message').ajaxListener('addError', 'Select a valid store.');
520 return false;
521 } else if (price === "") {
522 $('#wm-ui-flash-message').ajaxListener('addError', 'Enter a valid price suggestion.');
523 return false;
524 } else {
525 var data = {
526 'method': 'fulfill',
527 'do': 'reportitem',
528 'itemname': name,
529 'shop': shop,
530 'price': price
531 };
532
533 data = $.param(methods.executionDefaults()) + '&' + $.param(methods.settings) + '&' + $.param(data);
534
535 $.ajax({
536 type: 'POST',
537 url: '',
538 data: data,
539 dataType: 'json',
540 success: function () {
541 $('#reportitem').val('');
542 }
543 });
544 }
545 },
546
547 executePurchase: function() {
548 var selectedItem = $('div[data-index=' + methods.settings.marketitem + ']');
549
550 if(!selectedItem || typeof selectedItem == undefined || !$(selectedItem).data('type')) {
551 $('#wm-ui-flash-message').ajaxListener('addError','Select an item to purchase.');
552 return false;
553 }
554
555 var data = {
556 'method': 'fulfill',
557 'do': 'purchase',
558 'id': $(selectedItem).data('id'),
559 'entry': $(selectedItem).data('entry'),
560 'purchasetype': $(selectedItem).data('type')
561 };
562
563 data = $.param(methods.executionDefaults()) + '&' + $.param(methods.settings) + '&' + $.param(data);
564
565 $.ajax({
566 type: 'POST',
567 url: '',
568 data: data,
569 dataType: 'json',
570 success: function (result) {
571 if(!result.messages.error) {
572 methods.selectMarketplaceItem(0);
573 }
574 }
575 });
576 },
577
578 executeSellItem: function() {
579 var saleCost = $("#itemCost").val();
580 methods.settings.salegold = $("#itemGold").val();
581 var saleDuration = $("#itemDuration").val();
582
583 if(saleCost == '') {
584 $('#wm-ui-flash-message').ajaxListener('addError','Enter the amount you want to sell your item or gold for.');
585 return false;
586 } else if(methods.settings.saleitem <= 0 && methods.settings.salegold <= 0) {
587 $('#wm-ui-flash-message').ajaxListener('addError','Enter the amount of gold or select the item you want to sell.');
588 return false;
589 } else if(methods.settings.salegold > 0 && methods.settings.salegold > 200000 || methods.settings.salegold < 0) {
590 $('#wm-ui-flash-message').ajaxListener('addError','The amount of gold entered is invalid, a maximum of 200,000 is allowed.');
591 return false;
592 } else if(methods.settings.salegold >= 8000 && saleCost < parseInt(Math.round(methods.settings.salegold/8000))) {
593 $('#wm-ui-flash-message').ajaxListener('addError','This sale must cost a minimum of ' + parseInt(Math.round(methods.settings.salegold/8000)) + ' coins to be created.');
594 return false;
595 } else if(saleCost > 999 || saleCost < 0 || saleCost.length > 3) {
596 $('#wm-ui-flash-message').ajaxListener('addError','The amount of coins entered must be between 1 and 999.');
597 return false;
598 } else if(methods.settings.saleitem > 0 && methods.settings.salegold > 0) {
599 $('#wm-ui-flash-message').ajaxListener('addError','You are attempting to sell gold and an item at the same time, remove one.');
600 return false;
601 } else {
602 var data = {
603 'method': 'fulfill',
604 'do': 'addTradeItem',
605 'selltype': (methods.settings.saleitem > 0 ? 'item' : (methods.settings.salegold > 0 ? 'gold' : -1)),
606 'sellentry': (methods.settings.saleitem > 0 ? methods.settings.saleitem : (methods.settings.salegold > 0 ? methods.settings.salegold : 0)),
607 'sellprice': saleCost,
608 'sellduration': saleDuration,
609 'userAG': true
610 };
611
612 data = $.param(methods.executionDefaults()) + '&' + $.param(methods.settings) + '&' + $.param(data);
613
614 $.ajax({
615 type: 'POST',
616 url: '',
617 data: data,
618 dataType: 'json',
619 success: function (result) {
620 if(result.selling) {
621 $('#' + methods.settings.saleitem).hide();
622 methods.settings.saleitem = 0;
623 }
624 }
625 });
626 }
627 },
628
629 executeRemoveSaleItem: function(id) {
630 var data = {
631 'method': 'fulfill',
632 'do': 'removeTradeItem',
633 'entry': id
634 };
635
636 data = $.param(methods.executionDefaults()) + '&' + $.param(methods.settings) + '&' + $.param(data);
637
638 $.ajax({
639 type: 'POST',
640 url: '',
641 data: data,
642 dataType: 'json',
643 success: function (result) {
644 if(result.removed) {
645 $('#sale' + result.removed).hide();
646 $('.sellingContainer').jScrollPane({
647 showArrows: true,
648 verticalGutter: 30
649 });
650 }
651 }
652 });
653 },
654
655 /* TRADING */
656 initTrading: function() {
657 $.each(sellTabs, function(index, value) {
658 $(".sell-functions ul").append(
659 $('<li>').append($("<a></a>").attr('href','javascript:;').attr('data-selltab',value[0]).text(value[2]))
660 );
661 });
662
663 $('#trade-option').off('change').on('change', function() {
664 methods.selectTradeTab($(this).val());
665 });
666
667 $(document.body).off('click', 'a[data-selltab]').on('click', 'a[data-selltab]', function() {
668 methods.selectSellTab($(this).attr('data-selltab'));
669 });
670 },
671
672 selectTradeTab: function(id) {
673 if(methods.settings.tradetab != id) {
674 methods.settings.tradetab = id;
675 methods.switchContent();
676 }
677 },
678
679 selectSellTab: function(id) {
680 if(methods.settings.selltab != id) {
681 $('a[data-selltab=' + methods.settings.selltab + ']').removeClass('active');
682 $('a[data-selltab=' + id + ']').addClass('active');
683 methods.settings.selltab = id;
684 methods.switchSellContent();
685 }
686 },
687
688 selectSaleItem: function(id) {
689 $('#' + methods.settings.saleitem + ' input[type=checkbox]').prop('checked', false);
690 if(methods.settings.saleitem == id) {
691 methods.settings.saleitem = 0;
692 } else {
693 $('#' + id + ' input[type=checkbox]').prop('checked', true);
694 methods.settings.saleitem = id;
695 }
696 },
697
698 updateSaleCost: function() {
699 methods.settings.salegold = $('#itemGold').val();
700 var coins = $('#itemCost');
701 if(methods.settings.salegold >= 16000 && is_numeric(methods.settings.salegold)) {
702 var newCost = parseInt(Math.round(methods.settings.salegold/16000));
703 if(newCost > 999) {
704 newCost = 999;
705 }
706 $('#itemCost').val(newCost);
707 }
708 },
709
710 updateSaleFee: function() {
711 var coins = $('#itemCost').val();
712 var plural = false;
713
714 if(coins == '' || !is_numeric(coins)) {
715 coins = 0;
716 }
717
718 methods.settings.salefee = Math.round(coins * 0.1);
719 if(methods.settings.salefee < 1) {
720 methods.settings.salefee = 1;
721 }
722
723 if (methods.settings.salefee > 1) {
724 plural = true;
725 }
726
727 $('#saleFee').html('<div class="saleFeeDisplay">' + methods.settings.salefee + ' coin' + (plural ? 's' : '') + '</div>');
728 },
729
730
731 /* CRITERIA */
732 fetchSuggestions: function() {
733 if(methods.settings.searchterm.length >= 3) {
734 if(!methods.settings.timeout) {
735 $("#search-suggestions").hide();
736 $("#search-suggestions ul").html("");
737 methods.settings.timeout = true;
738 var content = "";
739 var data = {
740 'method': 'load',
741 'do': 'suggest'
742 };
743
744 data = $.param(methods.executionDefaults()) + '&' + $.param(methods.settings) + '&' + $.param(data);
745
746 $.ajax({
747 type: 'POST',
748 url: '',
749 data: data,
750 dataType: 'json',
751 success: function (result) {
752 if(result.suggestions) {
753 $.each(result.suggestions, function(index, value) {
754 $('<li>').append(
755 $('<a></a>')
756 .attr('href','https://db.warmane.com/' + value.xpac + '/item=' + value.entry)
757 .addClass('q' + value.quality)
758 .click(function(e) { e.preventDefault(); } )
759 .text(value.name))
760 .appendTo("#search-suggestions ul");
761 });
762 $("#search-suggestions").show();
763 } else {
764 $("#search-suggestions").hide();
765 }
766 methods.settings.timeout = false;
767 },
768 error: function() {
769 methods.settings.timeout = false;
770 }
771 });
772 }
773 }
774 },
775
776 updateName: function() {
777 methods.settings.searchterm = $("#searchTerm").val();
778 },
779
780 updateHaveCurrency: function() {
781 $('#haveCurrency').is(':checked') ? methods.settings.havecurrency = 1 : methods.settings.havecurrency = 0;
782 methods.executeSearch();
783 },
784
785 updateCanUseItem: function() {
786 $('#canUseItem').is(':checked') ? methods.settings.canuseitem = 1 : methods.settings.canuseitem = 0;
787 methods.executeSearch();
788 },
789
790 updateAgreement: function() {
791 $('#userAG').is(':checked') ? methods.settings.userAG = 1 : methods.settings.userAG = 0;
792 },
793
794 updateMinMaxLevel: function() {
795 methods.settings.levelrange = [$("#minLevel").val(),$("#maxLevel").val()];
796 methods.executeSearch();
797 },
798
799 updateRarity: function() {
800 methods.settings.rarity = $("#selectedRarity").val();
801 methods.executeSearch();
802 },
803
804 /* MISC */
805 loadItemList: function(data) {
806 $(function() {
807 var api = $('#sale-itemlist .item-container').jScrollPane({
808 showArrows: true,
809 verticalGutter: 30,
810 maintainPosition: false }
811 ).data('jsp');
812
813 if(api != undefined) {
814 api.getContentPane().html(data);
815 api.reinitialise();
816 }
817 });
818 },
819
820 reloadMenuGlider: function() {
821 $('#marketplace .market-menu').jScrollPane({
822 showArrows: true,
823 verticalGutter: 30
824 });
825 },
826
827 leftPaneRefresh: function(data) {
828 $(function() {
829 var api = $('#marketplace .market-menu').jScrollPane({
830 showArrows: true,
831 verticalGutter: 30,
832 maintainPosition: false
833 }).data('jsp');
834 api.getContentPane().html(data);
835 api.reinitialise();
836 });
837 },
838
839 rightPaneRefresh: function(data) {
840 try {
841 $(function(){
842 var api = $('#marketplace .market-listing').jScrollPane({
843 showArrows: true,
844 verticalGutter: 30,
845 maintainPosition: false }
846 ).data('jsp');
847 api.getContentPane().html(data);
848 api.reinitialise();
849 });
850 } catch(e) { console.log(e); }
851 },
852
853 handleEnter: function() {
854 $('input').on('keypress',function(event) {
855 if(event.keyCode === 13) {
856 methods.executeSearch();
857 }
858 });
859 },
860
861 /* CONTENT SWITCHING */
862 switchSellContent: function() {
863 $('.sellContent').html("");
864
865 $.ajax({
866 type: 'POST',
867 url: '',
868 data: {
869 'update': 'page',
870 'method': 'load',
871 'subservice': 'sell',
872 'do': 'search',
873 'sellpage': sellTabs[methods.settings.selltab-1][1].toLowerCase(),
874 'realm': methods.settings.realm,
875 'character': methods.settings.character,
876 'currency': methods.settings.currency,
877 'service': methods.settings.service,
878 },
879 dataType: 'json',
880 success: function (result) {
881 if(result.content) {
882 $('.sellContent').html(result.content);
883 }
884 }
885 });
886 },
887
888 switchContent: function() {
889 $('#page-block').hide();
890 $('#sell-block').hide();
891 if(methods.settings.tradetab == 1) {
892 $('#page-block').show();
893 } else {
894 $('#sell-block').show();
895 methods.selectSellTab(1);
896 }
897 },
898
899 /* CART SYSTEM */
900 //TODO
901 initShoppingCart: function() {
902
903 }
904 };
905
906 $.wmmarket = function(method) {
907 if (methods[method]) {
908 return methods[ method ].apply(this, Array.prototype.slice.call(arguments, 1));
909 } else if (typeof method === 'object' || ! method) {
910 return methods.init.apply(this, arguments);
911 } else {
912 $.error('Method ' + method + ' does not exist in jQuery.WarmaneMarket');
913 }
914 };
915
916 $.wmmarket.defaults = {
917 'timeout': false,
918 'hovering': false,
919 'tradehandler': null
920 };
921
922})(jQuery);