'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 += '