PageSourceSearch

https://www.vichaiyut.com/js/cart/cart.js?ver=1788237613

js vichaiyut.com collected 2026-10-03 17:49:21 UTC 21,824 bytes, 509 lines download raw bytes

1 $(document).ready(function () {   
2 
3		$("#buy-now,#add-to-cart").click(function() {
4            var qty = parseInt($('.cart-qty').val());
5            var click_type = $(this).data('val');
6            if(!qty){
7                showSweetAlertError( qty_error);
8                return false;
9            }
10            var data = {product_id:product_id,qty:qty};
11            callAjaxRequest(add_to_cart_url, 'post', data, result=>{
12                
13                if(result.status=='success'){
14                    $('#totalCartProduct').text(result.cart_quantity);
15                    if(click_type=='buy-now'){
16                        window.location.href=result.url;
17                    }else{
18                        $('#addToCartdiv').modal('show');
19                    }
20                    
21                }else{
22                   showSweetAlertError(result.msg);
23                }
24            });
25            
26        });
27
28        $(".attribute-dropdown select").change(function() {
29            var  search = $(this).val();
30            var search = $('#searchProduct').val();
31			var order_by = $('#order_by').val();
32            var gender = $('#gender').val(); 
33			var package_type = $('#package_type').val();	
34            var age_range = $('#age_range').val();
35			var package_attribute = $('#package_attribute').val();
36            var html = '';
37            var page = 1;
38            //alert(formData);
39            $.ajaxSetup({
40                headers: {
41                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
42                }
43            });
44            $.ajax({
45                type: "POST",
46                url : loadmoreUrl+'?page='+page,
47                data : {"search":search, "cat_id":cat_id, "gender":gender, "order_by":order_by, "age_range":age_range, "package_type":package_type, "package_attribute":package_attribute},
48                success : function(response){
49                    if(response.status == 'success'){
50                        html = gethtml(response.data);
51                        $('.health-product-grid').html(html);
52                        $('.pagination').html(response.pagination);
53                        $('.pagination1').html(response.pagination1);
54                        
55                    } 
56                   
57
58                },
59            });
60        });
61		
62		$(".filter-category a").click(function() {
63            var  cat_id_temp = $(this).attr('data-cat_id');
64			$(".filter-category a").removeClass("active");
65			$(this).addClass("active");
66			
67			cat_id=cat_id_temp;
68            var search = $('#searchProduct').val();
69			var order_by = $('#order_by').val();
70            var gender = $('#gender').val(); 
71			var package_type = $('#package_type').val();
72            var age_range = $('#age_range').val();
73			var package_attribute = $('#package_attribute').val();
74            var html = '';
75            var page = 1;
76            //alert(formData);
77            $.ajaxSetup({
78                headers: {
79                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
80                }
81            });
82            $.ajax({
83                type: "POST",
84                url : loadmoreUrl+'?page='+page,
85                data : {"search":search, "cat_id":cat_id, "gender":gender, "order_by":order_by, "age_range":age_range, "package_type":package_type, "package_attribute":package_attribute},
86                success : function(response){
87                    if(response.status == 'success'){
88                        html = gethtml(response.data);
89                        $('.health-product-grid').html(html);
90                        $('.pagination').html(response.pagination);
91                        $('.pagination1').html(response.pagination1);
92                        
93                    } 
94                   
95
96                },
97            });
98        });
99        
100
101         $("select#order_by").change(function() {
102            var order_by = $(this).val();
103            var search = $('#searchProduct').val();
104			var gender = $('#gender').val();
105			var package_type = $('#package_type').val();
106            var age_range = $('#age_range').val();
107			var package_attribute = $('#package_attribute').val();
108            var html = '';
109            var page = 1;
110            //alert(formData);
111            $.ajaxSetup({
112                headers: {
113                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
114                }
115            });
116            $.ajax({
117                type: "POST",
118                url : loadmoreUrl+'?page='+page,
119                data : {"search":search, "cat_id":cat_id, 'order_by':order_by, "gender":gender, "age_range":age_range, "package_type":package_type, "package_attribute":package_attribute},
120                success : function(response){
121                    if(response.status == 'success'){
122                        html = gethtml(response.data);
123                        $('.health-product-grid').html(html);
124                        $('.pagination').html(response.pagination);
125                        $('.pagination1').html(response.pagination1);
126                        
127                    } 
128                   
129
130                },
131            });
132        });
133
134
135        $(document).on('click', ".pagination li a", function(e) {
136            e.preventDefault();
137            var search = $('#search-input').val();
138            var order_by = $('.attribute-dropdown select#order_by').val();
139			var gender = $('#gender').val();
140			var package_type = $('#package_type').val();
141            var age_range = $('#age_range').val();
142			var package_attribute = $('#package_attribute').val();
143			
144            var url = $(this).attr('href');
145            var html = '';
146                    //alert(formData);
147            $.ajaxSetup({
148                headers: {
149                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
150                }
151            });
152            $.ajax({
153                type: "POST",
154                url : url,
155                data : {"search":search, "cat_id":cat_id, 'order_by':order_by, "gender":gender, "age_range":age_range, "package_type":package_type, "package_attribute":package_attribute},
156                success : function(response){
157                    if(response.status == 'success'){
158                        html = gethtml(response.data);
159                        $('.health-product-grid').html(html);
160                        $('.pagination').html(response.pagination);
161                        $('.pagination1').html(response.pagination1);
162                    } 
163                   
164
165                },
166            });
167        });
168
169
170        function gethtml(results){
171           var htm =''; 
172           jQuery.each(results, function(index, result) {
173                htm += '<li class="product-item">'+
174                '<div class="product-item-info">'+
175                    '<div class="prod-img">'+
176                        '<a href="health-package-detail.php">'+
177                            '<img data-original="'+result.image+'" src="'+result.image+'" alt="img" style="">'+
178                        '</a>'+
179                        '<div class="discount">ลดราคา</div>'+
180                    '</div>'+
181                    '<div class="product-info">'+
182                        '<h3 class="product-title">'+
183                            '<a href="'+result.url+'" class="link-product-name">'+result.name+'</a>'+
184                        '</h3>'+
185                        '<div class="price-wrap">'+
186                            '<i class="fas fa-tag"></i>'+
187                            '<span class="price-lbl">'+lang.price+'</span>'+
188                            '<span class="normal-price">'+result.price+' ฿</span>'+
189                        '</div>';
190						if(result.date_status == '1'){
191							htm +='<div class="date">'+
192									'<i class="fas fa-clock"></i> '+lang.from+' '+result.date_from+' - '+result.date_to+''+
193								'</div>';
194						}
195                        if(result.package_type == '1'){
196							htm +='<div class="spinergroup">'+
197									'<button class="decrease"><span class=" fas fa-minus"></span>'+
198									'</button>'+
199									'<input type="text" name="" class="spinNum" placeholder="1">'+
200									'<button class="increase"><span class=" fas fa-plus"></span>'+
201									'</button>'+
202								'</div>';
203                            htm +='<div class="addtocart-btn">'+
204                                '<a href="#" data-toggle="modal" data-target="#loginModal" class="btn btn-primary buy">'+lang.buy_package+' </a>'+    
205                                '<a href="#" class="btn btn-outline-secondary addtocart"><i class="fal fa-shopping-basket fa-fw"></i> '+lang.add_to_cart+'</a>'+
206                            '</div>';
207                        }
208
209                        htm +='<div class="see-wrap"><a class="btn btn-outline-primary w-100" href="'+result.url+'">'+lang.see_details+'</a></div>'+
210                    '</div>'+
211                '</div>'+
212            '</li>';
213
214            }); 
215
216            return htm;       
217        }
218
219        $( "#search-btn" ).trigger( "click" );
220
221});
222
223/*$(document).on('change', 'input.spinNum', function(){
224     quantityHandler($(this), 'change');
225});
226
227$(document).on('click', '.increaseqty', function(){
228    quantityHandler($(this), 'increase');
229});
230
231$(document).on('click', '.decreaseqty', function(){
232    quantityHandler($(this), 'decrease')
233});
234
235$(document).on('click', '.cart-remove', function(evt){
236    quantityHandler($(this), 'removecartproduct');
237});
238
239function maxQuantity(qty, maxQty, flag) {     
240    if(flag === 'increase' || flag === 'change') return (parseInt(qty)<=parseInt(maxQty) || false);
241    else if(flag === 'decrease') return (parseInt(qty)>1 || false);
242};
243
244function update(data) {
245    return new Promise((resolve, reject) => {
246        callAjaxRequest(updateCart,"post",data,result=>{resolve(result)});
247    });
248};*/
249
250function quantityHandler($that, flag) {  
251    let $input = $that.parent('.spinergroup').find('input.spinNum');
252    let $prd_total_price = $that.parents('ul').find('li label.prd-total-price');
253    let $prd_unit_price = $that.parents('ul').find('li label.prd-price');          
254    let data = {
255        cart_det_Id: $that.parent('.spinergroup').data('cartid'),
256        quantity: parseInt($input.val()),
257    };
258    data.cart_id = cart_id;
259    switch (flag) {
260        case 'increase':  
261        case 'decrease':  
262        case 'change' :                     
263            if(flag === 'increase') data.quantity = (parseInt($input.val()) + 1);
264            else if(flag === 'decrease' && $input.val() && parseInt($input.val())>1)  data.quantity = (parseInt($input.val()) - 1);
265            else if(flag === 'change'){
266                //in case user change quantiy max then allowed
267                if(parseInt($input.val())> parseInt($input.attr('max'))){     
268                    var newerr = error_msg.max_quantity + '  '+$input.attr('max');                       
269                    
270                    showSweetAlertError( newerr);  
271                    //$input.val(1);                           
272                }/*in case user set quantity zero or null*/
273                else if(!$input.val() || $input.val() == '0'){
274                    showSweetAlertError(error_msg.quantity_blank_zero);
275                    $input.val(1);
276                } 
277                data.quantity = parseInt($input.val());
278            }             
279                                
280            if(maxQuantity($input.val(), $input.attr('max'), flag)){
281                update(data)
282                .then(resp=>{
283                    if(resp && resp.status == "success"){
284                        let val = (flag === 'increase') && (parseInt($input.val()) + 1) ||  (flag === 'decrease') && (parseInt($input.val()) - 1) 
285                                    || (flag === 'change') && $input.val();
286                        $input.val(val);
287                        console.log(resp);
288                        $('#core_cost').text(resp.core_cost);
289                        $('#final_price').text(resp.final_price);
290                        resp.product_price && $prd_unit_price.text(resp.product_price);
291                    }else{
292                       showSweetAlertError(resp.msg);
293                    }                                
294                }, err=>{
295                   showSweetAlertError(error_msg.server_error);
296                }); 
297            }                                               
298            break;
299        case 'removecartproduct' : 
300            let ul_id = $that.attr('id');
301            data.cart_det_Id = ul_id.replace('cart_det_', '');
302            data.cart_id = cart_id;
303            swal({
304                title: error_msg.txt_delete_confirm,
305                type: "warning",
306                showCancelButton: true,
307                confirmButtonText: error_msg.yes_delete_it,
308                cancelButtonText: error_msg.txt_no,
309                closeOnConfirm: true,
310                closeOnCancel: true,
311            }).then(rep =>{
312                callAjaxRequest(removeCart, 'post', data, result=>{
313                    if(result.status=='success'){
314                        swal(lang_success, result.msg, "success").then(function(){
315                            location.reload();
316                        });
317                    }else{
318                       showSweetAlertError(result.msg);
319                    }
320                });
321            }, er=>{
322                //error code 
323            });
324            break;
325    }
326};
327
328jQuery('body').on('click', '#btn_checkout', function(e){
329    //check payment method selection 
330    var error_str = '';
331    var first_name = $('input[name=first_name]').val();
332    var last_name = $('input[name=last_name]').val();
333    var email = $('input[name=email]').val();
334    var ph_number = $('input[name=ph_number]').val();
335    /*if(first_name == '' || typeof first_name == 'undefined'){
336        $('#e_first_name').html(error_msg.first_name);
337        error_str += '<p class="error">'+error_msg.first_name+'</p>';
338    }else{
339        $('#e_first_name').html('');
340    }
341    if(last_name == '' || typeof last_name == 'undefined'){
342        $('#e_last_name').html(error_msg.last_name);
343        error_str += '<p class="error">'+error_msg.last_name+'</p>';
344    }else{
345        $('#e_last_name').html('');
346    }
347    if(email == '' || typeof email == 'undefined'){
348        $('#e_email').html(error_msg.email);
349        error_str += '<p class="error">'+error_msg.email+'</p>';
350    }else{
351        $('#e_email').html('');
352    }
353    if(ph_number == '' || typeof ph_number == 'undefined'){
354        $('#e_ph_number').html(error_msg.phone_no);
355        error_str += '<p class="error">'+error_msg.phone_no+'</p>';
356    }else{
357        $('#e_ph_number').html('');
358    }*/
359    var pay_opt = $('input[name=pay_opt]:checked').val();
360    
361    if(pay_opt == '' || typeof pay_opt == 'undefined'){
362        $('#e_pay_opt').html(error_msg.select_payment);
363        error_str += '<p class="error">'+error_msg.select_payment+'</p>';
364    }else{
365        $('#e_pay_opt').html('');
366    }
367
368    var address_id = $('input[name=address_id]:checked').val();
369    
370    if(address_id == '' || typeof address_id == 'undefined'){
371        $('#e_address_id').html(error_msg.select_address);
372        error_str += '<p class="error">'+error_msg.select_address+'</p>';
373    }else{
374        $('#e_address_id').html('');
375    }
376    
377    if(error_str != ''){
378        showSweetAlertError(error_str);     
379        return false;
380    }else{
381        $("#btn_checkout").prop("disabled", true);
382        var formAction = $('#checkout_form').attr('action');
383        var form = $('#checkout_form').serialize();
384        callAjaxRequest(formAction,'post',form,function(response){
385            if(response.status == "success"){
386                window.location.href=response.url;
387            }
388            else if(response.status == "fail"){
389                if(response.validation == true){
390                    var error = '';
391                    $.each(response.msg, function(key,val){
392                        error +='<p class="error">'+val+'</p>'
393                        $('#e_'+key).html(val);
394                    });
395                    $("#btn_checkout").prop("disabled", false);
396                    showSweetAlertError(error);
397                }else if(response.type=='price'){
398                    $('#cart_'+response.cart_id).css("background-color","yellow");
399                    $('#cart_'+response.cart_id+' li.price_li').append('<br><a href="javascript:;" class="update_cart_price text-primary">'+error_msg.update_price+'</a>')
400                    $("#btn_checkout").prop("disabled",false);
401                    showSweetAlertError(response.msg);
402                }else if(response.type=='pickup_time'){
403                    $("#btn_checkout").prop("disabled", false);
404                    swal({
405                        type: 'error',
406                        text: response.msg,
407                        confirmButtonText: lang_ok,
408                    }).then(function () {
409                        location.reload();
410                    });
411                }else{
412                    $("#btn_checkout").prop("disabled", false);
413                    showSweetAlertError(response.msg);
414                }
415            }else{
416                $("#btn_checkout").prop("disabled", false);
417                showSweetAlertError(response.msg);
418            }
419        });
420    }
421});
422
423$('body').on('click',"#userAddressForm",function(evt){ 
424        evt.preventDefault();
425        var formAction = $(this).closest('form').attr('action');
426        var formId = $(this).closest('form').attr('id');
427        var formMethod = $(this).closest('form').attr('method');
428        var _this = $(this);
429        var form_data = new FormData($("#"+formId)[0]);
430        $('.error').text('');
431        $('<p class="error">').remove();
432      $.ajax({
433                url: formAction,
434                type:formMethod,
435                data:form_data,
436                processData: false, //prevent jQuery from converting your FormData into a string
437                contentType: false, //jQuery does not add a Content-Type header for you
438                beforeSend: function(){
439                    //showHideLoader('show');
440                },
441            success:function(result){  
442                var response = jQuery.parseJSON(result); 
443                      if(response.status==false){
444                        $.each(response.message, function(key,val){
445                          $('#'+formId+' input[name='+key+']').parents(".input-group").after('<p class="error">'+val+'</p>');
446                          $('#'+formId+' select[name='+key+']').after('<p class="error">'+val+'</p>');
447                          $('#'+formId+' textarea[name='+key+']').after('<p class="error">'+val+'</p>');
448                          $('#'+formId+' radio[name='+key+']').siblings('p').text(val);
449                          $('#'+formId+' p[id='+key+']').text(val);
450                          
451                        })
452                        _this.prop('disabled',false);
453                        return false;
454                      }else{
455                      if(response.status==true){
456                          swal({
457                            type: 'success',
458                            text: response.message,
459                            confirmButtonText: lang_ok,
460                        }).then(function () {
461                            location.reload();
462                        });
463                      }        
464                }
465      }
466    })
467    .always(function(){
468        showHideLoader('hide');
469    });
470});
471
472$('.address-radio').click(function(e){
473    var id = $(this).val();
474    $('.address_detail').hide();
475    $('.open_'+id).show();
476});
477
478$('body').on('click',".edit_address",function(evt){ 
479    var id = $(this).data('val');
480    
481    $.each(address_json, function(key, item) 
482    {
483        if(item.id == id){
484            var address = item;
485            item.isd_code = item.isd_code.replace('+','');
486            $('#userinsertAddress input[name=first_name]').val(item.first_name);
487            $('#userinsertAddress input[name=last_name]').val(item.last_name);
488            $('#userinsertAddress input[name=email]').val(item.email);
489            $('#userinsertAddress input[name=ph_number]').val(item.ph_number);
490            $('#userinsertAddress input[name=id]').val(item.id);
491            $("#userinsertAddress .iti__selected-dial-code").text('+'+item.isd_code);
492            $("#userinsertAddress input[name='isd_code']").val(item.isd_code);
493            $('.iti__country-list li').each(function(key,val){
494                var dial_code = val.dataset.dialCode;
495                var country_code = $(this).attr('data-country-code');
496                var country_name = $(this).find('.iti__country-name').text();
497                if(dial_code == item.isd_code){
498                    $(this).addClass('iti__active');
499                    $('#userinsertAddress .iti__selected-flag .iti__flag').attr('class','iti__flag iti__'+country_code);
500                    $('#userinsertAddress .iti__selected-flag').attr('title',country_name);
501                    return false;
502                }
503            });
504            $('#addressModal').modal('show');
505            return false;
506        }
507       
508    });
509});

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.