jQuery(function($){

	var rootPath = window._x_webapp_root ? window._x_webapp_root : '/';
	var staticPath = window._x_webapp_static ? window._x_webapp_static : '/';
	var waitMassage = window._x_webapp_wait_message ? window._x_webapp_wait_message : '/';
	var karteTagUse = window._x_webapp_karte_tag;
	var stockAllocateFail = window._x_webapp_stock_allocate_fail ? window._x_webapp_stock_allocate_fail : '<p style="font-size: 17px; font-weight: bold;">この商品は在庫が確保できませんでした。</p><br/>他のお客様がご注文、またはカートに在庫を確保いたしました。60分以内にご注文が確定しなかった場合、注文キャンセルした場合には在庫が戻ります。';

	CartScripts = {};
	CartScripts.recalc = null;
	CartScripts.objArray = [];
	CartScripts.openAlert = function(id) {
		$('#add-to-notice').trigger('alertOpen');
	};
	
	CartScripts.disabledOrder = function(isValid) {
		$('.btn-cart-order').each(function() {
			if (isValid) {
				$(this).prop("disabled", false);
			} else {
				$(this).prop("disabled", true);
			}
		});
	}

	CartScripts.isAddCart = false;
	CartScripts.addCart = function(_self) {

		var cur = $(_self);
		var option_selects = $('*[name="optionSelect"]');
		var goodsNo,count,options,sumUp,optId1,optDtlId1,optId2,optDtlId2,shopSkuCd,secret,stockTp,goodsNm;

		goodsNo = cur.find("input[name=goodsNo]").val();
		shopSkuCd = cur.find("input[name=shopSkuCd]").val();
		secret = cur.find("input[name=secret]").val();
		stockTp = cur.find("input[name=stockTp]").val();
		goodsNm = cur.find("input[name=goodsNm]").val();
		ordTp = cur.find("input[name=ordTp]").val();
		count = "1";
        // Google Retail Search対応
		var params = (new URL(document.location)).searchParams;
		var attributionToken = params.get('attributionToken');
		
		if(cur.find("input[name=count]")[0]){
			count = cur.find("input[name=count]").val();
		}
		if($("select.opt1")[0]){
			optId1 = $("select.opt1").attr("name");
			optDtlId1 = $("select.opt1").val();
		}
		if($("select.opt2")[0]){
			optId2 = $("select.opt2").attr("name");
			optDtlId2 = $("select.opt2").val();
		}
		if($("input[name=sumUp]:checked")[0]){
			sumUp = $("input[name=sumUp]:checked").val();
		}
		var url = rootPath + "cart/add-cart-J/";
		var headers = {};
		if (document.cookie) {
			var cookies = document.cookie.split(";");
			for (var i = 0; i < cookies.length; i++) {
				var str = cookies[i].split("=");
				if (str[0].trim() == window._x_webapp_xsrf_token) {
					headers['X-XSRF-TOKEN'] = unescape(str[1]);
					break;
				}
			}
		}
		$.ajax({
			type : "POST",
			url : url,
			timeout : 30000,
			headers : headers,
			data : {
				"goodsNo" : goodsNo,
				"shopSkuCd" : shopSkuCd,
				"count" : count,
				"sumUp" : sumUp,
				"optId1":optId1,
				"optDtlId1":optDtlId1,
				"optId2" : optId2,
				"optDtlId2" : optDtlId2,
				"secret" : secret,
				"stockTp" : stockTp,
				"ordTp" : ordTp,
		        // Google Retail Search対応
				"attributionToken" : attributionToken
			},
			success : function onSuccess(data) {
				if (data.result === "error") {
					alert(data.message);
					CartScripts.isAddCart = false;
					return;
				}
				if (data.isCntLimitOrver === "true") {
					jQuery('.cart_Box').find('.guide_cart_t').html('この商品の同時購入可能な数を超えたため、カートに商品をいれることができませんでした。<br/>（セット割引対象品の場合は、一部セット割引が適用されなくなる可能性がありますので、ご注意ください。）');
				} else if (data.isAllCartLimitOver === "true") {
					jQuery('.cart_Box').find('.guide_cart_t').html('カートに商品を追加できません');
				} else if (data.outOfStock === "1") {
					jQuery('.cart_Box').find('.guide_cart_t').html(stockAllocateFail);
				} else if (data.outOfStock === "2") {
					jQuery('.cart_Box').find('.guide_cart_t').html('この商品は在庫切れとなりましたため、カートに商品を入れることができませんでした。');
				} else if (data.outOfStock === "9") {
					jQuery('.cart_Box').find('.guide_cart_t').html('処理がタイムアウトしたため、カートに商品を追加できませんでした。再度お試しください。');
				} else if (data.isEmployeePurchaseDuplication === "true") {
					jQuery('.cart_Box').find('.guide_cart_t').html('こちらの商品は1点のみご購入ができますので、カートに追加できませんでした。');
				} else {
					jQuery('.cart_Box').find('.guide_cart_t').html('この商品をカートに入れました');
					if (data.couponAnnounceCount > 0) {
						CartScripts.couponAnnounce(data);
					}
				}
				$('.cart_Box').show();
				if($("#staffstartscript")[0]){
					ssAddCart('Y75tLWJ7X2kWeke4Tk9UwUEcdKhAnKZp', shopSkuCd, count);
				}
				if($("#parteTrackingScript")[0]) {
					ParteTracking.addToCart({
						site_id: cur.find("input[name=parteSiteId]").val(),
						product:{
						    product_id: cur.find("input[name=parteGoodsId]").val(),
						    sku_code: shopSkuCd,
						    sales_price: Number(cur.find("input[name=parteGoodsSalePrice]").val()),
						    quantity: 1,
						    name: goodsNm
						}
					});
				}
				ft.Cart.renderCartInfo('/addons/pal/shared/service/async_cart', '.cart_total_quantity');
				CartScripts.karteCart(data);
				CartScripts.isAddCart = false;
			},
			error: function () {
				alert(waitMassage);
				CartScripts.isAddCart = false;
			}
		});

		return false;
	}

	CartScripts.updateCart = function(form){
		var seq = form.find("input[name=seq]").val();
		var count = form.find("input[name=count]").val();
		var rootPath = window._x_webapp_root ? window._x_webapp_root : '/';
		var url = rootPath + "cart/update-J/";
		var ppage = window._x_webapp_page ? window._x_webapp_page : '';
		var pperPage = window._x_webapp_per_page ? window._x_webapp_per_page : '';
		var headers = {};
		if (document.cookie) {
			var cookies = document.cookie.split(";");
			for (var i = 0; i < cookies.length; i++) {
				var str = cookies[i].split("=");
				if (str[0].trim() == window._x_webapp_xsrf_token) {
					headers['X-XSRF-TOKEN'] = unescape(str[1]);
					break;
				}
			}
		}
		$.ajax({
			type : "POST",
			url : url,
			headers : headers,
			data : {
				"seq" : seq
				,"count" : count
				,"page": ppage
				,"perPage": pperPage
			},
			success : function onSuccess(data) {
				if (data.result === "error") {
					var errmsg = data.message;
					if(errmsg){
						alert(errmsg);
					}
				}else{
					$(".cart-total td").text(data.totalPrice);
					$("#itemTotal").text(data.totalPrice);
					$("#totalTpoint").text(data.totalTPoint);
					$("#totalTPointPremium").text(data.totalTPointPremium);
					$.each(data.dtlList, function(seq, val) {
						if($("#subTotal-"+seq)[0]){
							$("#subTotal-"+seq).text(val);
						}
					});
					$("#header__inner-pc__cart-btn em").text(data.totalCountLabel);
					$("#header__inner-sp__cart em").text(data.totalCountLabel);
					$(".cart-total-count").text(data.totalCount);
					$(".cart-total-price").text(data.totalPrice);
				}
				$(".btn-cart-recalc i").hide();
				$(".btn-cart-recalc span").show();
				CartScripts.offDisable();
				CartScripts.disabledOrder(data.isValid);
			},
			error: function () {
				alert(waitMassage);
				$(".btn-cart-recalc i").hide();
				$(".btn-cart-recalc span").show();
				CartScripts.offDisable();
			}
		});
	}

	CartScripts.onDisable = function(wrap){
		var item = $();
		if(wrap){
			item = wrap.closest(".cart-item__count-wrap");
		}
		var minus = item.find(".cart-item__count-minus");
		var plus = item.find(".cart-item__count-plus");
		var count = item.find("input[name=count]:not([type=hidden])");
		var btn = item.find(".btn-cart-recalc");
		$('.cart-item__count-minus').each(function() {
			if(!$(this).is(minus)){
				$(this).prop("disabled", true);
				CartScripts.objArray.push($(this));
			}
		});
		$('.cart-item__count-plus').each(function() {
			if(!$(this).is(plus)){
				$(this).prop("disabled", true);
				CartScripts.objArray.push($(this));
			}
		});
		$('input[name=count]:not([type=hidden])').each(function() {
			if(!$(this).is(count)){
				$(this).prop("disabled", true);
				CartScripts.objArray.push($(this));
			}
		});
		$('button:enabled,input[type=submit]:enabled,input[type=button]:enabled').each(function() {
			if(!$(this).is(btn)){
				$(this).prop("disabled", true);
				CartScripts.objArray.push($(this));
			}
		});
	}

	CartScripts.offDisable = function(){
		$.each(CartScripts.objArray, function(index, elem) {
			elem.prop("disabled", false);
		});
		CartScripts.objArray = [];
	}

	CartScripts.setRecalc = function(target, ev, msec){
		CartScripts.recalc = setTimeout(function(){
			target.trigger(ev);
		}, msec);
	}

	CartScripts.stopRecalc = function(){
		if(CartScripts.recalc != null){
			clearTimeout(CartScripts.recalc);
			CartScripts.recalc = null;
		}
	}

	CartScripts.karteCart = function(obj) {
		if (!karteTagUse) {
			return;
		}
		try {
			var __karte__cart = {};
			var __karte__items = [];

			var cartItemModel = obj.karteCartItems;
			var map = JSON.parse(cartItemModel);
			var itemList = map["itemModel"];

			if (itemList) {
				itemList.forEach(function(item) {
					__karte__items.push({
						id : item["id"],
						name : item["name"],
						sku : item["sku"],
						brandid : item["brandid"],
						price : Number(item["priceTaxExcluded"]),
						quantity : Number(item["quantity"]),
						item_url : item["item_url"],
						item_image_url : item["item_image_url"],
						category1 : item["category1"],
						category2 : item["category2"],
						item_sku_image_url : item["item_sku_image_url"]
					});
				});
			}

			var item_ids = __karte__items.map(function(item) {
				return item.id;
			});
			var item_names = __karte__items.map(function(item) {
				return item.name;
			});
			var item_prices = __karte__items.map(function(item) {
				return item.price;
			});
			var item_quantities = __karte__items.map(function(item) {
				return item.quantity;
			});
			var item_urls = __karte__items.map(function(item) {
				return item.item_url;
			});
			var item_image_urls = __karte__items.map(function(item) {
				return item.item_image_url;
			});
			var item_categories1 = __karte__items.map(function(item) {
				return item.category1;
			});
			var item_categories2 = __karte__items.map(function(item) {
				return item.category2;
			});
			var item_brands = __karte__items.map(function(item) {
				return item.brandid;
			});
			var item_sku_ids = __karte__items.map(function(item) {
				return item.sku;
			});
			var item_sku_image_urls = __karte__items.map(function(item) {
				return item.item_sku_image_url;
			});
			if (tracker && tracker.track) {
				tracker.track("cart", {
					price:map["price"],
					quantity:map["quantity"],
					status:map["status"],
					items:__karte__items,
					item_ids:item_ids,
					item_names:item_names,
					item_prices:item_prices,
					item_quantities:item_quantities,
					item_urls:item_urls,
					item_image_urls:item_image_urls,
					item_categories1:item_categories1,
					item_categories2:item_categories2,
					item_brands:item_brands,
					item_sku_ids:item_sku_ids,
					item_sku_image_urls:item_sku_image_urls,
					added_item_sku_id : obj.added_item_sku_id,
					added_item_id : obj.added_item_id
				});
			}

		} catch (e) {
			if ('tracker' in window) {
				tracker.track('_error', {
					message : e.message
				});
			}
		}
	}

	$('.js-alert-window').each(function() {
		var alert = $(this).hide();

		// darkscreen
		var s = $('<div class="alert-screen"></div>').css({
			opacity : 0.6
		// for IE8
		}).hide()
		// add close event
		.on('click', function() {
			alert.trigger('alertClose');
		});
		alert.after(s);

		// set open event
		var act_alertOpen = function() {
			s.show();
			alert.css({
				'display' : 'block'
			});
		}
		alert.on('alertOpen', act_alertOpen);

		// set close event
		var act_alertClose = function() {
			s.hide();
			alert.hide();
			return false;
		}
		alert.on('alertClose', act_alertClose);

		// call close event
		alert.find('.proc-close').on('click', function() {
			alert.trigger('alertClose');
		});

		$("#hidden-windows").css("visibility", "visible");

	});

	CartScripts.couponAnnounce = function(data){

		$('.coupon_announce').show();
		$('#couponAnnounceMsg').text('');
		$('#couponAnnounceGoodspageDtlExp').text('');
		$('#couponAnnounceLimit').text('');

		$('#couponAnnounceMsg').text(data.couponAnnounceInfo.couponAnnounceMsg);
		$('#couponAnnounceGoodspageDtlExp').text(data.couponAnnounceInfo.goodspageDtlExp);
		$('#couponAnnounceLimit').text(data.couponAnnounceInfo.couponLimitMsg);
		if (data.couponAnnounceInfo.goodspageLinkUrl) {
			$('#couponAnnounceLimit').append('<a href="' + data.couponAnnounceInfo.goodspageLinkUrl + '">[クーポン詳細はこちら]</a>');
		}
		if (data.couponAnnounceInfo.goodspageListUrl) {
			$('#couponAnnounceGoodspageListUrl').show();
			$('#couponAnnounceGoodspageListUrl').attr('href', data.couponAnnounceInfo.goodspageListUrl);
		} else {
			$('#couponAnnounceGoodspageListUrl').hide();
			$('#couponAnnounceGoodspageListUrl').attr('href', '');
		}

		if (data.couponAnnounceInfo.targetGoods.length > 0) {
			$('#couponItemArea .couponItemTitle').show();
			$('#couponItemArea .coupon-scroll-left').show();
			$('#couponItemArea .coupon-scroll-right').show();
		} else {
			$('#couponItemArea .couponItemTitle').hide();
			$('#couponItemArea .coupon-scroll-left').hide();
			$('#couponItemArea .coupon-scroll-right').hide();
		}
		$('#couponAnnounceItemList > li').not("#couponAnnounceItemBase").remove();
		$.each(data.couponAnnounceInfo.targetGoods, function(index, goodsMap) {
			var item = goodsMap.goodsInfo;

			var cloneTag = $('#couponAnnounceItemBase').clone(true);
			$(cloneTag).removeAttr('style');
			$(cloneTag).removeAttr('id');

			var iconImg = $(cloneTag).find('#couponAnnounceItem-iconImg');
			$(iconImg).attr('src', goodsMap.goodsIcnImg);
			$(iconImg).attr('alt', goodsMap.goodsIcnImgAlt);
			$(cloneTag).find('#couponAnnounceItem-itemdetailUrl').attr('href', '/display/item/' + item.shop_item_cd + '/?b=' + item.man_entr_cd);
			$(cloneTag).find('#couponAnnounceItem-goodsPageIconNm').text(item.goods_page_icon_nm);
			$(cloneTag).find('#couponAnnounceItem-brandName').text(item.entr_nm);
			$(cloneTag).find('#couponAnnounceItem-itemName').text(item.title);
			$(cloneTag).find('#couponAnnounceItem-salePrTax').text(item.sale_pr_tax.replace(/(\d)(?=(\d{3})+$)/g , '$1,'));

			if (item.new_icn != '1') {
				$(cloneTag).find('.ico_box > #iconNew').remove();
			}
			if (item.before_icn != '1') {
				$(cloneTag).find('.ico_box > #iconBeforeReleace').remove();
			}
			if (item.restock_icn != '1') {
				$(cloneTag).find('.ico_box > #iconRestock').remove();
			}
			if (item.sale_icn != '1' || item.time_sale_icn == '1') {
				$(cloneTag).find('.ico_box > #iconSale').remove();
			}
			if (item.time_sale_icn != '1') {
				$(cloneTag).find('.ico_box > #iconTimeSale').remove();
			}
			if (item.reserve_icn != '1') {
				$(cloneTag).find('.ico_box > #iconReservation').remove();
			}
			if (item.icon1 != '1') {
				$(cloneTag).find('.ico_box > #iconWeb').remove();
			}
			if (item.icon2 != '1') {
				$(cloneTag).find('.ico_box > #icon2').remove();
			}
			if (item.icon3 != '1') {
				$(cloneTag).find('.ico_box > #icon3').remove();
			}
			if (item.icon4 != '1') {
				$(cloneTag).find('.ico_box > #icon4').remove();
			}
			if (item.icon5 != '1') {
				$(cloneTag).find('.ico_box > #icon5').remove();
			}
			if (item.icon6 != '1') {
				$(cloneTag).find('.ico_box > #icon6').remove();
			}
			if (item.icon7 != '1') {
				$(cloneTag).find('.ico_box > #icon7').remove();
			}
			if (item.icon8 != '1') {
				$(cloneTag).find('.ico_box > #icon8').remove();
			}
			if (item.icon9 != '1') {
				$(cloneTag).find('.ico_box > #icon9').remove();
			}
			if (item.icon10 != '1') {
				$(cloneTag).find('.ico_box > #icon10').remove();
			}
			if (item.icon11 != '1') {
				$(cloneTag).find('.ico_box > #icon11').remove();
			}
			if (item.icon12 != '1') {
				$(cloneTag).find('.ico_box > #icon12').remove();
			}
			if (item.icon13 != '1') {
				$(cloneTag).find('.ico_box > #icon13').remove();
			}
			if (item.icon14 != '1') {
				$(cloneTag).find('.ico_box > #icon14').remove();
			}
			if (item.icon15 != '1') {
				$(cloneTag).find('.ico_box > #icon15').remove();
			}
			if (item.icon16 != '1') {
				$(cloneTag).find('.ico_box > #icon16').remove();
			}
			if (item.icon17 != '1') {
				$(cloneTag).find('.ico_box > #icon17').remove();
			}
			if (item.icon18 != '1') {
				$(cloneTag).find('.ico_box > #icon18').remove();
			}
			if (item.icon19 != '1') {
				$(cloneTag).find('.ico_box > #icon19').remove();
			}
			if (item.icon20 != '1') {
				$(cloneTag).find('.ico_box > #icon20').remove();
			}
			if (item.stock_out_icn != '1') {
				$(cloneTag).find('.ico_box > #iconStockOut').remove();
			}

			$('#couponAnnounceItemList').append(cloneTag);
		});
	}
});