/***
 * 페이지와 관련된 함수 정의
 *
 * page 변수는 rd.page 에서 접근가능하도록 설정하여 외부에서도 조작이 가능한 데이터는 page 변수 아래에 둔다
 * 모든 기능을 page 외부에서 조작이 가능하지 않도록 public, private 를 고려하여 개발해야함
 *
 * init 함수를 통해 흐름이 모두 보일 수 있도록 처리해야 함
 */

// 숫자 타입에서 쓸 수 있도록 format() 함수 추가
Number.prototype.formatComma = function(){
    if(this==0) return 0;

    var reg = /(^[+-]?\d+)(\d{3})/;
    var n = (this + '');

    while (reg.test(n)) n = n.replace(reg, '$1' + ',' + '$2');

    return n;
};
// 문자열 타입에서 쓸 수 있도록 format() 함수 추가
String.prototype.formatComma = function(){
    var num = parseFloat(this);
    if( isNaN(num) ) return "0";

    return num.formatComma();
};
// 2020. 9.15 everblue : 클래스 내부 찍어보기
function printObject(o) {
	var out = '';
	for (var p in o) {
		out += p + ': ' + o[p] + '\n';
	}
	return out;
}

(function() {

	var _page = rd.object.createNestedObject(window, 'rd.page');
	_page.maxOk = false;

	var init = function() {
		// 이벤트 바인딩
		bindFormMajor();
		checkSelectCart();
	};

	var checkSelectCart = function()  {
		
		var rentSelectAmount = 0;
		var rentSelectRegFee = 0;
		var rentProdCnt = 0, rentProdTotal = 0;
		
		$(".check-ip-rent").each( function( i, v )  {
			var parentNode = $(v).closest(".order-cart-list");
			rgprc = parentNode.data("rgprc");
			regfee = parentNode.data("regfee");
			ordQty = parentNode.find("[name=ordQty]").text();
			if($(this).is(":checked"))  {
				rentSelectAmount = rentSelectAmount + (rgprc * ordQty);
				rentSelectRegFee = rentSelectRegFee + (regfee * ordQty);
				rentProdCnt += (ordQty*1);
			}
			parentNode.find(".product-price").find(".price").eq(0).html( (rgprc * ordQty).formatComma() + "원" );
			parentNode.find(".product-price").find(".price").eq(1).html( "<strong>월 " + (rgprc * ordQty).formatComma() + "원</strong>" );
			rentProdTotal += (ordQty*1);
		});

		$("#allChk-rent").parent().find("label").html("전체선택");	// (" + rentProdCnt + "/" + rentProdTotal + ")
		
		var priceTotalDivRent = $(".product-total-price.rent");
		priceTotalDivRent.find(".price").eq(0).find("em").html( rentSelectAmount.formatComma() );
		priceTotalDivRent.find(".price").eq(1).find("em").html( 0 );
		priceTotalDivRent.find(".price").eq(2).find("em").html( rentSelectAmount.formatComma() );
		priceTotalDivRent.find(".price").eq(3).find("em").html( rentSelectAmount.formatComma() );

		if( rentSelectAmount > 0 && rentSelectRegFee == 0 )
			$(".price-info-text.text-fadered").show();
		else
			$(".price-info-text.text-fadered").hide();

		var oneSelectAmount = 0;
		var oneProdCnt = 0, oneProdTotal = 0;
		$(".check-ip-one").each( function( i, v )  {
			var parentNode = $(v).closest(".order-cart-list");
			rgprc = parentNode.data("rgprc");
			ordQty = parentNode.find("[name=ordQty]").text();
			if($(this).is(":checked"))  {
				oneSelectAmount = oneSelectAmount + rgprc * ordQty;
				oneProdCnt += (ordQty*1);
			}
			parentNode.find(".product-price").find(".price").eq(0).html( (rgprc * ordQty).formatComma() + "원" );
			parentNode.find(".product-price").find(".price").eq(1).html( "<strong>" + (rgprc * ordQty).formatComma() + "원</strong>" );
			oneProdTotal += (ordQty*1);
		});



		$("#allChk-one").parent().find("label").html("전체선택");	// (" + oneProdCnt + "/" + oneProdTotal + ")
		var priceTotalDivOne = $(".product-total-price.one");
		priceTotalDivOne.find(".price").eq(0).find("em").html( oneSelectAmount.formatComma() );
		priceTotalDivOne.find(".price").eq(1).find("em").html( 0 );
		priceTotalDivOne.find(".price").eq(2).find("em").html( oneSelectAmount.formatComma() );
		priceTotalDivOne.find(".price").eq(3).find("em").html( oneSelectAmount.formatComma() );

		var dlvSelectAmount = 0;
		var dlvProdCnt = 0, dlvProdTotal = 0;
		
		
		
		//
		$(".check-ip-dlv").each( function( i, v )  {
			
			var parentNode = $(v).closest(".order-cart-list");
			rgprc = parentNode.data("rgprc");
			ordQty = parentNode.find("[name=ordQty]").text();
			if($(this).is(":checked"))  {
				dlvSelectAmount = dlvSelectAmount + rgprc * ordQty;
				dlvProdCnt += (ordQty*1);
			}
			parentNode.find(".product-price").find(".price").eq(0).html( (rgprc * ordQty).formatComma() + "원" );
			parentNode.find(".product-price").find(".price").eq(1).html( "<strong>" + (rgprc * ordQty).formatComma() + "원</strong>" );
			dlvProdTotal += (ordQty*1);
		});

	

		$("#allChk-dlv").parent().find("label").html("전체선택");	// (" + dlvProdCnt + "/" + dlvProdTotal + ")
		var priceTotalDivDlv = $(".product-total-price.dlv");
		priceTotalDivDlv.find(".price").eq(0).find("em").html( dlvSelectAmount.formatComma() );
		priceTotalDivDlv.find(".price").eq(1).find("em").html( 0 );
		priceTotalDivDlv.find(".price").eq(2).find("em").html( dlvSelectAmount.formatComma() );
		priceTotalDivDlv.find(".price").eq(3).find("em").html( dlvSelectAmount.formatComma() );
	}

	// 2020.10.11 everblue : 장바구니 구매 프로세스 처리
	var goOrderFromCart = function( $selectedProd )  {
		
		var goodsCnt = 0;
		var buyGoodsList = [], buyGoodsListPre = [];
		var ordTpCd = "OD002010";
		// 2020.10.11 everblue : 상품 수량 제한 추가 6개
		var totalQty = 0, lMaxQty = 6, maxOk = false;
		
		
			// 선택 한 상품을 반복문을 통해 주문서에 필요한 데이터 셋팅
		$selectedProd.each( function()  {
			
			$parent = $(this).closest(".order-cart-list");

			var lCnt = Math.floor( $parent.find("span[name=ordQty]").html() );
			var sCartTpCd = $parent.find("input[name=ordTpCd]").val();

			console.log('sCartTpCd :'+sCartTpCd);

			// ORD_TP_CD
			switch( sCartTpCd )  {
				case "OD001001" :	// 일시불
					ordTpCd = "OD002010";
					break;
				case "OD001002" :	// 렌탈
					ordTpCd = "OD002020";
					break;
				case "OD001003" :	// 배송상품(필로우)
					ordTpCd = "OD002030";
					break;
				case "OD001004" :	// 구독상품
					ordTpCd = "OD002040";
					break;
				default :
					ordTpCd = "OD002010";
					break;
			}
			
			var buyData = {};
			// 상품 식별 번호
			buyData.goodsId = $parent.data("goodsId");
			// 옵션 식별 번호
			buyData.goodsUngdId = $parent.data("goodsUngdId");
			// 카트 아이디
			buyData.cartId = $parent.data("cartId");
			// 가격정책번호
			buyData.prcPlcNo = $parent.data("prcplcno");
			// 패키지정책번호
			buyData.pkgPlcNo = $parent.data("pkgplcno");
			
			// 패키지결제방식  (10:렌탈,20:일시불,30:구독,40:구독+일시불,50:구독+렌탈)
			// 50일경우에 구독이면서 렌탈결제처리해야함
			buyData.pkgSaleSeCd = $parent.data("pkgsalesecd");
			
			// 주문 수량 (옵션수량)
			buyData.ordQty = lCnt;

			// console.log(lCnt + " / " + buyData.cartId + " / " + buyData.goodsId + " / " + buyData.goodsUngdId + " / " + sCartTpCd + " / " + ordTpCd + " / " + buyData.prcPlcNo + " / " + buyData.pkgPlcNo);

			totalQty = totalQty + lCnt;

			if( totalQty > lMaxQty )  {
				if( !_page.maxOk )  {
				//	rd.common.confirmPop("전체 수량이 "+lMaxQty+"개를 넘습니다. " + lMaxQty + "개만 주문하시겠습니까?", function(){_page.maxOk=true;goOrderFromCart($selectedProd);});
					rd.common.alertPop("전체 수량이 "+lMaxQty+"개를 넘습니다." );
				}
				if( _page.maxOk )  {
					if( buyData.ordQty - ( totalQty - lMaxQty ) > 0)  {
						buyData.ordQty = buyData.ordQty - ( totalQty - lMaxQty );
						buyGoodsList.push(buyData);
					}
					goodsCnt++;
				}  else  {
					return false;
				}
			}  else  {
				buyGoodsList.push(buyData);
				goodsCnt++;
			}
		});
		if( totalQty > lMaxQty )  {
			if( !_page.maxOk )	return false;
		}
		
		//console.log(ordTpCd);
		//console.log(buyGoodsList);

		// 선택한 상품이 있는지 확인
		if( goodsCnt > 0 ) {
						
			if (goodsCnt>1 && (ordTpCd == "OD002040")){
			   $(".alert-cont").html("구독(컨텐츠) 상품은 각각 결재만 가능합니다.<br/>장바구니에 하나의 상품만 담아 구매해주세요.");
			   popupBase.layerPopup(".pop");
			   
			   return;
		    }
			
			// 주문서 담기 호출 ( 함수 위치 : /capelion-fo-mo/static/js/biz/common/common.js )
			/*******************************************************************
			 * parameter : 형식 = { buyGoodsList : [ {},{},{} ] }
			 *******************************************************************/
			_page.maxOk = false;
			rd.common.goPrevOrderFromCart( { ordTpCd : ordTpCd, cartList : buyGoodsList } );
		} else {
			
			$(".alert-cont").html("구매하실 제품을 선택해 주십시오.");
			popupBase.layerPopup(".pop");
		}
	}

	// 팝업 닫기
	$(".btn-color-green").on('click', function(e){
		
		javascript:popupBase.closePopup('.pop');
	});
	
	var setCartCount = function( cartId, ordQty )  {
		formData = { cartId : cartId, ordQty : ordQty };
		rd.ajax({
			url : "/cart/set-cart-count",
			contentType: false,
			type: "GET",
			data : formData
		})
		.done( function(data) {
			// 상품상세 일 경우
		})
		.fail(function(e){
			//	alert( "리뷰 등록에 실패하였습니다.    문제가 지속될 경우 운영자에게 문의하여 주세요." );
		})
		.always(function(){
		})
	}

	/** 이벤트 */
	var bindFormMajor = function() {

		// + / - 버튼 처리
		$(".order-cart-list").each(function()  {
			var $cartListDiv = $(this);
			var $optionNumberDiv = $cartListDiv.find("div.option-number");
			$optionNumberDiv.find("button[name=button]").eq(0).on("click",function()  {
				var lCurCnt = $optionNumberDiv.find("span[name=ordQty]").html();
				if( isNaN( lCurCnt ) )	lCurCnt = 2;
				if( lCurCnt == 1 )  {
					rd.common.alertPop("수량은 1개 이상 가능합니다.");
					return false;
				}
				lCurCnt--;
				$optionNumberDiv.find("span[name=ordQty]").html( lCurCnt );

				// 2020.10.20 everblue : 장바구니 수량 업데이트
				$parent = $(this).closest(".order-cart-list");
				var cartId = $parent.data("cartId");
				setCartCount( cartId, lCurCnt );

				checkSelectCart();
			});
			$optionNumberDiv.find("button[name=button]").eq(1).on("click",function()  {
				var lCurCnt = $optionNumberDiv.find("span[name=ordQty]").html();
				if( isNaN( lCurCnt ) )	lCurCnt = 0;
				lCurCnt++;
				$optionNumberDiv.find("span[name=ordQty]").html( lCurCnt );

				// 2020.10.20 everblue : 장바구니 수량 업데이트
				$parent = $(this).closest(".order-cart-list");
				var cartId = $parent.data("cartId");
				setCartCount( cartId, lCurCnt );

				checkSelectCart();
			});
		});

		// 개별선택
		$(".check-ip-rent").on("click", function() {
			checkSelectCart();
			allChecked( $(this) )
		});
		$(".check-ip-one").on("click", function() {
			checkSelectCart();
			allChecked( $(this) )
		});
		$(".check-ip-dlv").on("click", function() {
			checkSelectCart();
			allChecked( $(this) )
		});

		//	 전체선택
		$("#allChk-rent").on("click", function() {
			var bToChkRent = $(this).is(":checked");
		//	console.log("bToChkRent:"+bToChkRent);
			$(".check-ip-rent").each( function( i, v )  {
			//	console.log(v);
				$(this).prop("checked",bToChkRent);
			});
			checkSelectCart();
		})
		$("#allChk-one").on("click", function() {
			var bToChkOne = $(this).is(":checked");
		//	console.log("bToChkOne:"+bToChkOne);
			$(".check-ip-one").each( function( i, v )  {
			//	console.log("v:"+v.checked);
				$(this).prop("checked",bToChkOne);
			});
			checkSelectCart();
		})
		$("#allChk-dlv").on("click", function() {
			var bToChkDlv = $(this).is(":checked");
		//	console.log("bToChkDlv:"+bToChkDlv);
			$(".check-ip-dlv").each( function( i, v )  {
			//	console.log("v:"+v.checked);
				$(this).prop("checked",bToChkDlv);
			});
			checkSelectCart();
		})

		/**
		 * 주문하기
		 */
		$("body").on("click", ".orderBtnRent", function(e){
			e.preventDefault();
			if( 1==1 )	return goOrderFromCart($(".check-ip-rent:checked"));
			console.log("rent 클릭");
			if($(this).hasClass("allGoodsOrderBtnRent")){
				_page.validBeforeOrder($(".check-ip-rent"));
			}else{
				if($(".check-ip-rent:checked").length <= 0){
					rd.common.alertPop("선택된 제품이 없습니다.<br>제품을 선택 후 주문해주세요.");
					return;
				}
				_page.validBeforeOrder($(".check-ip-rent:checked"));
			}
		})
		
		//일시불, 구독 구매하기 클릭
		$("body").on("click", ".orderBtnOne", function(e){
			
			e.preventDefault();
			
			console.log("one 클릭");
			
			if( 1==1 )	return goOrderFromCart($(".check-ip-one:checked"));
			
			if($(this).hasClass("allGoodsOrderBtnOne")){
				_page.validBeforeOrder($(".check-ip-one"));
			}else{
				if($(".check-ip-one:checked").length <= 0){
					rd.common.alertPop("선택된 제품이 없습니다.<br>제품을 선택 후 주문해주세요.");
					return;
				}
				_page.validBeforeOrder($(".check-ip-one:checked"));
			}
		})
		
		//구독 주문하기 버튼
		$("body").on("click", ".orderBtnDlv", function(e){
			e.preventDefault();
			
			if( 1==1 )	return goOrderFromCart($(".check-ip-dlv:checked"));
			if($(this).hasClass("allGoodsOrderBtnDlv")){
				_page.validBeforeOrder($(".check-ip-dlv"));
			}else{
				
				if($(".check-ip-dlv:checked").length <= 0){
					rd.common.alertPop("선택된 제품이 없습니다.<br>제품을 선택 후 주문해주세요.");
					return;
				}
				
				//if($(".check-ip-dlv:checked").length>1 ){
					//rd.common.alertPop("구독상품은 한상품씩 주문을 하셔야 합니다.<br/>주문 제품을 하나만 선택해 주세요.");
					//return;
				//}
				
				_page.validBeforeOrder($(".check-ip-dlv:checked"));
			}
			
		})

		/*	삭제하기	*/
		$("body").on("click", ".deleteBtnRent", function(e){
			e.preventDefault();
			console.log("rent 클릭");
			if($(".check-ip-rent:checked").length <= 0){
				
				$(".alert-cont").html("삭제하실 제품을 선택해 주십시오.");
				popupBase.layerPopup(".pop");
				
				return;
			}
			rd.common.confirmPop("선택하신 제품을 장바구니에서<br>삭제하시겠습니까?", function(){

				var cartList = new Array();
				$(".check-ip-rent:checked").each( function( i, v )  {
					cartList.push({cartId : $(this).closest(".order-cart-list").data("cart-id")});
				});

				// 선택한 장바구니 상품 데이터 세팅
				var delCartList = {cartList : cartList};
			//	console.log(cartList);
			//	return ;
				_page.deleteCartGoods(delCartList);

			//	$(".check-ip-rent:checked").each( function( i, v )  { $(this).closest(".order-cart-list").remove(); });	checkSelectCart();
			});
		});
		
		$("body").on("click", ".deleteBtnOne", function(e){
			e.preventDefault();
			console.log("one 클릭");
			if($(".check-ip-one:checked").length <= 0){
				$(".alert-cont").html("삭제하실 제품을 선택해 주십시오.");
				popupBase.layerPopup(".pop");
				
				return;
			}
			rd.common.confirmPop("선택하신 제품을 장바구니에서<br>삭제하시겠습니까?", function(){

				var cartList = new Array();
				$(".check-ip-one:checked").each( function( i, v )  {
					cartList.push({cartId : $(this).closest(".order-cart-list").data("cart-id")});
				});

				// 선택한 장바구니 상품 데이터 세팅
				var delCartList = {cartList : cartList};
			//	console.log(cartList);
			//	return ;
				_page.deleteCartGoods(delCartList);

			//	$(".check-ip-one:checked").each( function( i, v )  { $(this).closest(".order-cart-list").remove(); });	checkSelectCart();
			});
			checkSelectCart();
		});
		
		//구독삭제
		$("body").on("click", ".deleteBtnDlv", function(e){
			e.preventDefault();
			console.log("dlv 클릭");
			if($(".check-ip-dlv:checked").length <= 0){
				$(".alert-cont").html("삭제하실 제품을 선택해 주십시오.");
				popupBase.layerPopup(".pop");
				return;
			}
			rd.common.confirmPop("선택하신 제품을 장바구니에서<br>삭제하시겠습니까?", function(){

				var cartList = new Array();
				$(".check-ip-dlv:checked").each( function( i, v )  {
					cartList.push({cartId : $(this).closest(".order-cart-list").data("cart-id")});
				});

				// 선택한 장바구니 상품 데이터 세팅
				var delCartList = {cartList : cartList};
			//	console.log(cartList);
			//	return ;
				_page.deleteCartGoods(delCartList);

			//	$(".check-ip-dlv:checked").each( function( i, v )  { $(this).closest(".order-cart-list").remove(); });	checkSelectCart();
			});
			checkSelectCart();
		});
	}


	var allChecked = function($this) {

		var allCheck = $this.closest('.product-wrap').prev().children('.chekcbox-small-type').attr('id')
		var checkClass = $this.attr('class').split(' ')[1]

		var allCheckboxCount = $('.'+checkClass).length
		var allCheckedCount = $('.' + checkClass +':checked').length

		if(allCheckboxCount === allCheckedCount){
			$('#' + allCheck).prop('checked', true);
		}else {
			$('#' + allCheck).prop('checked', false);
		}
	}



	/**
	 * DOM 초기화시 실행
	 */
	init();
})();