'use strict'; (function( $ ){ var isObject = function(a) { return (!!a) && (a.constructor === Object); } $.fn.estimate = function(options) { var defaults = {} this.events = {} var settings = $.extend( {}, defaults, options ); // declaration var _this = this; var _selector = this.selector; var _itemsContainer = this.find('.items'); var _aryGender = ['男の子', '女の子']; // delete menu $(document).on('click', _selector+' .items .del_menu', function(e) { var val = $(this).data('val'); $('.menu_container input[value="'+val+'"]').prop('checked', false); _this.priceCompute(); if($('.menu_container input[type="checkbox"]:checked').length <= 0) { $('#menu_opt input[value="0"]').prop('checked', true); $('#menu_opt input[type="radio"]').trigger('change'); } e.preventDefault(); }); // delete $(document).on('click', _selector+' .items .del', function(e){ var target = $(this).data('target'); if(!target || target === undefined) { var num = $(this).parents('dl').index(); target = $('.siblings_container ul.full').eq(parseInt(num)-1); } else { target = $('#'+target); } var type = $(this).data('type'); if(type && type !== undefined) { switch(type) { case 'div': target.remove(); break; case 'radio' : //$('#'+target).find('input[value="1"]').prop('checked', false); target.find('input[value="0"]').prop('checked', true); target.find('input[type="radio"]').trigger('change'); break; } } $(this).parents('dl').remove(); _this.priceCompute(); $('.siblings_container ul.full').each(function(i){ if(i > 0) { $(this).find('.mwform-radio-field').removeClass('input_validate'); } else { $(this).find('.mwform-radio-field').addClass('input_validate'); } }); e.preventDefault(); }); // private functions // computes total price function computeTotal() { _state.total = 0; if(_state.prices !== false && _state.prices !== undefined) { $.each(_state.prices, function(i, data){ $.each(data.price, function(x, price){ if(price !== undefined) { _state.total += parseInt(price.amount); } }); }); } _this.renderList(); var total_text = '合計 :¥'+numberWithCommas(_state.total)+'(税込)'; if(_state.prices !== undefined && _state.prices.bridal_price !== undefined && _state.prices.bridal_price.data) { var bridal_price = parseInt(_state.prices.bridal_price.data); total_text = '合計 :アルバムご購入で¥'+numberWithCommas(_state.total)+'(通常'+numberWithCommas(_state.total+bridal_price)+')'; _this.find('.bridal_price').val(bridal_price); } else { _this.find('.bridal_price').val(0); } _this.find('.total').html(total_text); $('.price_weekday').html(numberWithCommas(_state.priceWeekDay)); $('.price_weekend').html(numberWithCommas(_state.priceWeekEnd)); _this.find('.input_total').val(_state.total); return false; } // get price from json function getPrice(ary, val, el) { var x = 0; var noPrice = false; var name = ''; $.each(ary, function(i, data) { if(data.id == val) { name = data.name; x = 0; noPrice = false; if(data.prices !== undefined) { if(isObject(data.prices)) { x = getArrayPrice(data.prices, el); } else { x = data.prices; _state.priceWeekDay += parseInt(data.prices); _state.priceWeekEnd += parseInt(data.prices); } } else { noPrice = true; } } }); var data = { val : val, name : name, amount : x, noPrice: noPrice }; var gender = el.parents('.row').prevAll('.gender').find('input[type="radio"]:checked').val(); var siblingTarget = el.parents('.full').attr('id'); var familyTarget = el.data('price-key'); if(gender && gender !== undefined) { var gender_name = el.parents('.row').prevAll('.gender').find('input[type="radio"]:checked').data('gender-name'); if(!gender_name) { data.gender = _aryGender[gender]; } else { data.gender = gender_name; } } if(siblingTarget !== undefined) { data.target = siblingTarget; data.targetType = 'div'; } if(familyTarget == 'family_opt') { data.target = familyTarget; data.targetType = 'radio'; } return data; } // if price is obj // @param1 [obj] : price data // @return [int] : price function getArrayPrice(prices, el) { //if(el !== undefined) { el = null; } var tmpData; var tmpPrice = 0; switch (prices.type) { case "span" : tmpData = prices.data[_state.currentDateRange]; if(isObject(tmpData)) { tmpPrice = getArrayPrice(tmpData, el); } else { tmpPrice = tmpData; _state.priceWeekDay += parseInt(tmpData); _state.priceWeekEnd += parseInt(tmpData); } break; case "weekdays" : tmpData = prices.data[_state.holiday]; if(isObject(tmpData)) { tmpPrice = getArrayPrice(tmpData, el); } else { tmpPrice = tmpData; _state.priceWeekDay += parseInt(prices.data[0]); _state.priceWeekEnd += parseInt(prices.data[1]); } break; case "gender" : var gender = el.parents('.row').prevAll('.gender').find('input[type="radio"]:checked').val(); if(gender) { tmpData = prices.data[gender]; if(isObject(tmpData)) { tmpPrice = getArrayPrice(tmpData, el); } else { tmpPrice = tmpData; _state.priceWeekDay += parseInt(tmpData); _state.priceWeekEnd += parseInt(tmpData); } } break; case "rental" : var choice = el.parents('ul.full').next('.toggle').find('input[type="radio"]:checked').val(); if(choice){ choice = parseInt(choice); tmpData = prices.data[choice]; if(isObject(tmpData)) { tmpPrice = getArrayPrice(tmpData, el); } else { tmpPrice = tmpData; _state.priceWeekDay += parseInt(tmpData); _state.priceWeekEnd += parseInt(tmpData); } } break; } return tmpPrice; } // for html function itemHtml(id, _data) { var parent_name = _state.planName+'撮影'; var list = ''; var item = ''; var name = ''; var delBtn = ''; if(_data.parent_name && _data.parent_name !== undefined) { parent_name = _data.parent_name; } var siblingCount = 0; $.each(_data.price, function(i, data){ if(Array.isArray(data.name)) { name = data.name[0]; } else { name = data.name; } if(data.gender && data.gender !== undefined) { name = data.gender+'['+_data.name+' - '+name+']'; } if(_data.info && _data.info !== undefined) { name += '
['+_data.info+' - '+name+']'; } delBtn = ''; switch(id) { case 'block2_price' : case 'rental_price' : case 'sub_rental' : break; case 'sibling_opt' : if(siblingCount > 0) { delBtn = '取消'; } siblingCount++; break; case 'family_opt' : delBtn = '取消'; break; case 'menu_opt' : delBtn = '取消'; break; } list += '
\
'+name+'
\
¥'+numberWithCommas(data.amount)+''+delBtn+'
\
'; }); if(list) { item = '
\
'+parent_name+'
\ '+list+'\
'; } return item; } // common html code for family option / sibling option estimate block // @param1 [obj] : block's data // @return [string] : html code function common_html(block) { var parent_name = _state.planName+'撮影'; var delBtn = ''; var list = ''; var items = ''; if(block.parent_name && block.parent_name !== undefined) { parent_name = block.parent_name; } $.each(block.price, function(i, data){ if(Array.isArray(data.name)) { name = data.name[0]; } else { name = data.name; } if(data.gender && data.gender !== undefined) { name = data.gender+'['+block.name+' - '+name+']'; } delBtn = '取消'; list += '
\
'+name+'
\
¥'+numberWithCommas(data.amount)+''+delBtn+'
\
'; }); if(list) { items = '
\
'+parent_name+'
\ '+list+'\
'; } return items; } // common html code for family option / sibling option estimate block // @param1 [obj] : block's data // @param2 [obj] : rental's data // @param3 [obj] : subrental for 七五三 // @return [string] : html code function block2_html(block, rental, sub_rental) { var parent_name = _state.planName; var delBtn = ''; var list = ''; var items = ''; if(block.parent_name && block.parent_name !== undefined) { parent_name = block.parent_name; } $.each(block.price, function(i, data){ if(Array.isArray(data.name)) { name = data.name[0]; } else { name = data.name; } if(data.gender && data.gender !== undefined) { name = data.gender+'['+block.name+' - '+name+']'; } var amount = '¥'+numberWithCommas(data.amount); if(data.noPrice === true) { amount = ''; } list += '
\
'+name+'
\
'+amount+'
\
'; if(rental.type == 'multiple') { var rental_data = rental.price[i]; var sub_data = {}; if(sub_rental !== undefined) { sub_data = sub_rental.price[i]; } if(rental_data !== undefined) { if(rental.special == true && rental_data.val !== 1) { list += '
\
'+sub_data.name+'
\
¥'+numberWithCommas(sub_data.amount)+'
\
\
\
レンタルお支度代
\
¥'+numberWithCommas(rental_data.amount)+'
\
'; } else { list += '
\
'+rental.name+' - '+rental_data.name+'
\
¥'+numberWithCommas(rental_data.amount)+'
\
'; } } } }); if(rental.type == 'single') { var rental_data = rental.price[0]; if(rental_data !== undefined) { list += '
\
'+rental.parent_name+' - '+rental_data.name+'
\
¥'+numberWithCommas(rental_data.amount)+'
\
'; } } // 外出時ママの訪問着レンタル /* if(mom_rental !== undefined) { if(mom_rental.price[0] !== undefined) { list += '
\
'+mom_rental.name+' - '+mom_rental.price[0].name+'
\
¥'+numberWithCommas(mom_rental.price[0].amount)+'
\
'; } } */ if(list) { items = '
\
'+parent_name+'
\ '+list+'\
'; } return items; } // format number to number with thousand separators 例: 1000 => 1,000 function numberWithCommas(x) { if(!x || x == null) { return 0; } return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); } // public functions this.renderList = function() { var list = ''; if(_state.prices && _state.prices !== undefined) { $.each(_state.prices, function(id, data){ switch(id) { case 'rental_price' : case 'sub_rental' : case 'mom_rental' : break; case 'block2_prices' : list += block2_html(data, _state.prices.rental_price, _state.prices.sub_rental); break; default : list += itemHtml(id, data); } }); _itemsContainer.html(list); } else { _itemsContainer.html(''); } } // compute price this.priceCompute = function() { _state.priceWeekDay = 0; _state.priceWeekEnd = 0; if(_state.prices && _state.prices !== undefined) { $.each(_state.prices, function(key, data){ _state.prices[key].price = []; var htmlPriceCompute = $('#plans input.price_compute:checked'); if(htmlPriceCompute.length) { $.each(htmlPriceCompute, function(){ var val = parseInt($(this).val()); var type = $(this).data("price-key"); var rowCount = $(this).parents('.toggle').data("row"); var isSame = false; if(key == 'sub_rental' && type == 'rental_price') { isSame = true; } if(key == type) { isSame = true; } if(isSame == true) { var price = getPrice(data.data, val, $(this)); // rental option var choice = $(this).parents('ul.full').next('.toggle').find('input[type="radio"]:checked'); var choiceVal = choice.val(); if(choiceVal && choiceVal !== undefined) { _state.prices[key].rentalVal = parseInt(choiceVal); _state.prices[key].rentalName = choice.attr('name'); } else { _state.prices[key].rentalVal = null; _state.prices[key].rentalName = null; } if(rowCount !== undefined) { _state.prices[key].price[rowCount] = price; } else { _state.prices[key].price.push(price); } } }); } }); } computeTotal(); return false; } this.setStudioName = function() { var val = $('#store_select').val(); if(val){ $('#estimate .est_studio').text($('#store_select').find(':selected').text()); } else { $('#estimate .est_studio').text(''); } } return this; }; })( jQuery );