/////////////////////////////////////////////////////////// // модуль "Интернет-магазин" /////////////////////////////////////////////////////////// /* функции для управления корзиной */ alltrades_shop = { basket: new Array(), // массив товаров в корзине compare: new Array(), // массив товаров для сравнения main_prices: new Array(), price_mods: new Array(), pricelist_fields: '', pricelist_vals: new Array(), pricelist_store: new Array(), renew_timer: null, step: -1, show_prev: true, loading: false, basket_renew_no_items: false, show_item_modal: function (id){ // подробнее о товаре во всплывающей окне alltrades_shop.start_loading(); $.get('/?show=modal_page&mode=ajax&name=item_modal&item_id='+id, function(html){ alltrades_shop.show_dialog(html); alltrades_shop.price_recount(id); }); }, price_recount: function (id){ // пересчет цены от полей пользователя var price=alltrades_shop.main_prices[id]; if(alltrades_shop.pricelist_fields!=''){ var fields=alltrades_shop.pricelist_fields.split(','); var pl_key=0; for(i in fields){ val=$('select[name="basket_opt['+fields[i]+']"], input:radio[name="basket_opt['+fields[i]+']"]:checked, input:checkbox[name="basket_opt['+fields[i]+']"]:checked, input:text[name="basket_opt['+fields[i]+']"]').val(); if(val!=undefined){ pl_key+=parseInt('0x'+hex_md5(val).substr(0, 6)); } } if(alltrades_shop.pricelist_vals[id]!=undefined && alltrades_shop.pricelist_vals[id][pl_key]>0){ price=alltrades_shop.pricelist_vals[id][pl_key]; } } $('.add2basket-options select').each(function(){ var tmp=this.id.split('_'); var key=$(this).val().replace(/[\'"]/g, '-'); if(alltrades_shop.price_mods[id]!=undefined && alltrades_shop.price_mods[id][tmp[3]]!=undefined){ price+=+alltrades_shop.price_mods[id][tmp[3]][key]; } }); $('.add2basket-options input[type=checkbox]').each(function(){ if(this.checked){ var tmp=this.id.split('_'); var key=$(this).val().replace(/[\'"]/g, '-'); if(alltrades_shop.price_mods[id]!=undefined && alltrades_shop.price_mods[id][tmp[3]]!=undefined){ price+=+alltrades_shop.price_mods[id][tmp[3]][key]; } } }); $('.add2basket-options input[type=radio]').each(function(){ if(this.checked){ var tmp=this.id.split('_'); var key=$(this).val().replace(/[\'"]/g, '-'); if(alltrades_shop.price_mods[id]!=undefined && alltrades_shop.price_mods[id][tmp[3]]!=undefined){ price+=+alltrades_shop.price_mods[id][tmp[3]][key]; } } }); $('.add2basket-options input[type=text]').each(function(){ var tmp=this.id.split('_'); if(alltrades_shop.price_mods[id]!=undefined && alltrades_shop.price_mods[id][tmp[3]]!=undefined){ price+=+alltrades_shop.price_mods[id][tmp[3]]*this.value; } }); if(Math.round(price)!=price){ price=price.toFixed(2); } $('#main_price_'+id).html(price); }, add_to_basket: function(obj, id, pricelist_pos){ // добавить в корзину var url='/?show=basket&mode=ajax&act=add&id='+id; if(pricelist_pos!=undefined){ url=url+'&pricelist_pos='+pricelist_pos; } var postdata=$('#add2basket_form_'+id+(alltrades_shop.step==0?'_tmp':'')).serialize() alltrades_shop.start_loading(); $.post(url, postdata, function (html){ var arr = html.split('|||'); eval(arr[1]); html=arr[0]; if(alltrades_shop.step>0){ $(obj).children('img').attr('src', '/images/in_basket.png').attr('title', 'Уже есть в корзине'); } switch(alltrades_shop.step){ case 0: // не указаны необходимые параметры if(alltrades_shop.show_prev){ alltrades_shop.show_dialog(html); } break; case 1: // добавление с переходом в корзину location.href=alltrades_shop.basket['uri']; break; case 2: // всплывающая корзина if(alltrades_shop.show_prev){ alltrades_shop.show_dialog(html); } alltrades_shop.update_basket_html(); break; case 3: // с перелетом в корзину alltrades_shop.close_dialog(); var m_ph=$('#main_photo_'+id); $('body').prepend(''); $('#main_img_shadow').animate({top:$('#basket_total').offset().top, left:$('#basket_total').offset().left, width:'100px', height:'100px', opacity:0}, 600, function(){ $(this).remove(); alltrades_shop.update_basket_html(); } ); break; } }); }, remove_from_basket: function(k){ // убрать из корзины $.get('/?show=basket&act=delete&mode=ajax&id='+k, function(html){ var arr = html.split('|||'); eval(arr[1]); html=arr[0]; if(alltrades_shop.show_prev){ alltrades_shop.show_dialog(html); } alltrades_shop.renew_basket(true); }); }, one_click_buy: function(id){ // покупка товара в один клик var url='/?show=basket&mode=ajax&act=one_click_buy&id='+id; alltrades_shop.start_loading(); $.post(url, $('#add2basket_form_'+id).serialize(), function (html){ var arr = html.split('|||'); eval(arr[1]); html=arr[0]; if(alltrades_shop.show_prev){ alltrades_shop.show_dialog(html); } }); }, start_loading: function (){ $('#message_box').html('
'); }, show_dialog: function (html){ // всплывающее окно с html-формой $('#message_box').html(html); $('#curtain').show().click(alltrades_shop.close_dialog); $('#message_box').css('top', $(window).scrollTop()+$(window).height()*0.1).show(); }, update_basket_html: function(){ // обновляет элементы на странице из массива alltrades_shop.basket var el; for(k in alltrades_shop.basket){ el=$('#'+k).get(0); if(el!=undefined){ if(el.tagName=='INPUT'){ el.value=alltrades_shop.basket[k]; }else if($('#'+k+' span').length>0){ el=$('#'+k+' span').html(alltrades_shop.basket[k]); }else{ el=$('#'+k+'').html(alltrades_shop.basket[k]); } } } }, close_dialog: function (){ $('#message_box').hide('normal', function(){$('#curtain').fadeOut();}); }, check_store: function (obj, id, check_store) { if(/[^0-9.]/.test(obj.value)){ obj.value=obj.value.replace(/[^0-9.]/, ''); } if(check_store==''){ return; } if(+obj.value>+$('#store'+id+' span').html()){obj.style.color='red';obj.value=$('#store'+id+' span').html();$('#store'+id).css('color', 'red');} }, change_order_field: function(id, options){ $('.delivery_'+id).hide(); obj=$('#order_field_'+id+''); if(obj.get(0).tagName=='SELECT'){ var func=obj.children(':selected').attr('func'); var params=obj.children(':selected').attr('params'); }else{ obj=$('#order_field_'+id+' :checked'); var func=obj.attr('func'); var params=obj.attr('params'); } switch(func){ case 'delivery': if($('#add_func_field_'+id).length){ $('#add_func_field_'+id).html('').show(); }else{ $('#order_field_'+id+'').after('
'); } $('#add_func_field_'+id).load('/?show=delivery&mode=ajax&field_id='+id+'¶ms='+params, function(html){ if($('#delivery_to_zip').val()>0){ $.get('/?show=delivery&field_id='+id+'&act=calculate&mode=ajax&delivery_to_zip='+$('#delivery_to_zip').val()+'&r='+Math.random(), function(html){ $('#delivery_variants_'+id).html(html); }); }}); break; case 'yandex_delivery': $('#yd_block.delivery_'+id).show(); break; case 'cdek_delivery': $('#cdek_block.delivery_'+id).show(); break; case 'shiptor_delivery': $('#shiptor_block.delivery_'+id).show(); break; default: $('#order_field_price_'+id+' span').html(obj.children(':selected').attr('func')); $('#add_func_field_'+id).html(''); } alltrades_shop.renew_basket(true); }, renew_basket: function (no_items){ if (typeof(no_items)=='undefined'){ alltrades_shop.basket_renew_no_items=false; }else{ alltrades_shop.basket_renew_no_items=no_items; } if(!alltrades_shop.loading && alltrades_shop.check_renew_possible()){ /* если в этот момент можно обновить корзину, ставим ромашки на места полей и через секунду запускаем обновление значений */ clearTimeout(alltrades_shop.renew_timer); if(!alltrades_shop.basket_renew_no_items){ $('.basket .discount_amount span').html(''); $('.basket .basket_discount span').html(''); $('.basket .basket_weight_str span').html(''); } $('#basket_items_amount span').html(''); $('#basket_discount span').html(''); $('#basket_discount_amount span').html(''); $('#basket_full_amount span').html(''); $('#basket_weight span').html(''); $('#basket_amount').html(''); $('#basket_total').html(''); alltrades_shop.renew_timer=setTimeout(function(){alltrades_shop.renew_basket_serv();}, 2000); alltrades_shop.loading=true; } }, renew_basket_serv: function (){ if(!alltrades_shop.check_renew_possible()){ alltrades_shop.loading=false; return false; } $.post('/?show=basket&act=edit_json&mode=ajax'+(alltrades_shop.basket_renew_no_items?'':'&clean_add_fields=1'), $('#order_form').serialize(), function(html){ alltrades_shop.basket = eval('('+html+')'); if(!alltrades_shop.basket_renew_no_items){ // обновляем строчки с товарами, устанавливаем скидки и стоимость со скидками for (i in alltrades_shop.basket['items']){ $('.basket #item_'+i+' .discount_amount span').html(alltrades_shop.basket['items'][i]['discount_amount']); $('.basket #item_'+i+' .basket_weight_str span').html(alltrades_shop.basket['items'][i]['weight_str']); $('.basket #item_'+i+' .basket_discount span').html(alltrades_shop.basket['basket_discount']); } } // обновляем общие значения $('#basket_items_amount span').html(alltrades_shop.basket['basket_amount']); if(alltrades_shop.basket['basket_discount']>0){ $('#basket_discount_amount').show(); $('#basket_discount').show(); }else{ $('#basket_discount_amount').hide(); $('#basket_discount').hide(); } $('#basket_discount_amount span').html(alltrades_shop.basket['basket_discount_amount']); $('#basket_discount span').html(alltrades_shop.basket['basket_discount']); $('#basket_weight span').html(alltrades_shop.basket['basket_weight']); $('#basket_full_amount span').html(alltrades_shop.basket['basket_full_amount']); // обновляем корзину в шаблоне $('#basket_amount').html(alltrades_shop.basket['basket_amount']); $('#basket_total').html(alltrades_shop.basket['basket_total']); if(!alltrades_shop.basket_renew_no_items){ for(i in alltrades_shop.basket['fields_func']){ if(typeof alltrades_shop.basket['fields_func'][i]['options'] !=="undefined"){ // перебираем значения селектора, влияющего на стоимость for(j in alltrades_shop.basket['fields_func'][i]['options']){ $('#order_field_'+i+' option').each(function(){ if($.trim($(this).text())==alltrades_shop.basket['fields_func'][i]['options'][j]['value']){ $(this).attr('func', alltrades_shop.basket['fields_func'][i]['options'][j]['func']); if($(this).attr('func')=='delivery'){ $('#add_func_field_'+i).remove(); } $('#order_field_price_'+i).hide(); } }); } } alltrades_shop.change_order_field(i); } } // проверяем, возможно ли оформление заказа: if(alltrades_shop.basket['enable_order']=='1'){ $('#order_button').attr('disabled', false).bind('click', function(){$('#order_form').attr('action', '/?show=order').submit()}); $('#basket_minimum_order_amount').hide(); }else{ $('#order_button').attr('disabled', true).unbind('click'); $('#basket_minimum_order_amount').show(); } alltrades_shop.loading=false; }); }, renew_basket_serv_no_addfields: function (){ if(!alltrades_shop.check_renew_possible()){ alltrades_shop.loading=false; return false; } $.post('/?show=basket&act=edit_json&mode=ajax', $('#order_form').serialize(), function(html){ alltrades_shop.basket = eval('('+html+')'); // обновляем общие значения $('#basket_items_amount span').html(alltrades_shop.basket['basket_amount']); if(alltrades_shop.basket['basket_discount']>0){ $('#basket_discount_amount').show(); $('#basket_discount').show(); }else{ $('#basket_discount_amount').hide(); $('#basket_discount').hide(); } $('#basket_discount_amount span').html(alltrades_shop.basket['basket_discount_amount']); $('#basket_discount span').html(alltrades_shop.basket['basket_discount']); $('#basket_full_amount span').html(alltrades_shop.basket['basket_discount_amount']); // обновляем корзину в шаблоне $('#basket_amount').html(alltrades_shop.basket['basket_amount']); $('#basket_total').html(alltrades_shop.basket['basket_total']); for(i in alltrades_shop.basket['fields_func']){ if(typeof alltrades_shop.basket['fields_func'][i]['options'] !=="undefined"){ // перебираем значения селектора, влияющего на стоимость for(j in alltrades_shop.basket['fields_func'][i]['options']){ $('#order_field_'+i+' option').each(function(){ if($.trim($(this).text())==alltrades_shop.basket['fields_func'][i]['options'][j]['value']){ $(this).attr('func', alltrades_shop.basket['fields_func'][i]['options'][j]['func']); if($(this).attr('func')=='delivery'){ $('#add_func_field_'+i).remove(); } $('#order_field_price_'+i).hide(); } }); } } alltrades_shop.change_order_field(i); } alltrades_shop.loading=false; // проверяем, возможно ли оформление заказа: if(alltrades_shop.basket['enable_order']=='1'){ $('#order_button').attr('disabled', false).bind('click', function(){$('#order_form').attr('action', '/?show=order').submit()}); $('#basket_minimum_order_amount').hide(); }else{ $('#order_button').attr('disabled', true).unbind('click'); $('#basket_minimum_order_amount').show(); } alltrades_shop.loading=false; }); }, check_renew_possible: function(){ var flag=true; $('.basket .basket_item .num').each(function(){if($.trim(this.value)==''){flag=false;}}); return flag; }, add_to_compare: function(id){ /* добавление товара к сравнению */ var url='/?show=basket&mode=ajax&act=compare&id='+id; $.get(url, function (html){ var arr = html.split('|||'); eval(arr[1]); html=arr[0]; if(alltrades_shop.show_prev){ alltrades_shop.show_dialog(html); } } ); }, remove_from_compare: function(id){ /* добавление товара к сравнению */ var url='/?show=basket&mode=ajax&act=remove_from_compare&id='+id; $.get(url, function (html){ var arr = html.split('|||'); eval(arr[1]); html=arr[0]; if(alltrades_shop.show_prev){ alltrades_shop.show_dialog(html); } } ); }, update_compare_html: function(){ // обновляет элемент compare_prev на странице var el; for(k in alltrades_shop.compare){ el=$('#'+k).get(0); if(el!=undefined){ if(el.tagName=='INPUT'){ el.value=alltrades_shop.compare[k]; }else if($('#'+k+' span').length>0){ el=$('#'+k+' span').html(alltrades_shop.compare[k]); }else{ el=$('#'+k+'').html(alltrades_shop.compare[k]); } } } } } /* Управление формой поиска */ function search_update_form(fields){ if(fields==''){ $('div[id^="search-field"]').show(); }else{ $('div[id^="search-field"]').each(function(){ if(fields.indexOf(','+this.id.substr(13)+',')==-1){ $(this).hide(); }else{ $(this).show(); } }); } }