
/**
 * Cart event
 * @invoke by Catalog_xx.html
 * event by checkbox please see [checkbox.checked]
 * @event from "userOrderCheck_" + {$T.record.id}
 * @event from "userOrderQuantity_" + {$T.record.id}
 */
function putCartItemUpdate(itemId,remove){
	var quantityBoxName = "userOrderQuantity_" + itemId;
	var quantity = $("input#"+quantityBoxName).attr("value");
	
	//Cart auto append item
	if( quantity <= 1 ){ 
		$("input#"+quantityBoxName).attr("value",1);
		quantity = $("input#"+quantityBoxName).attr("value");
	}else{}
	
	//debug( "Order:" + itemId + " = " + quantity  );
	putCart( remove,itemId, quantity);
	calculateCurrentPrices();
	location.href="checkout";
}
	/**
	* カート内の商品数量がかわっている判定
	* 
	*
	*/
	//var changedCartQuantity = false;
	function onChangedCartQuantity( productCode ){
		//changedCartQuantity = true;
		var quantity = $("input#userOrderQuantity_" + productCode).attr("value");
		if(quantity){
			putCartItemUpdate(productCode,true);
		}else{
			
		}
	}

function putCartItem(itemId){
	var checkBoxName = "userOrderCheck_" + itemId;
	var quantityBoxName = "userOrderQuantity_" + itemId;

	//[Spec]Checkable to the check box status are true or false
	// Update cart items
	var isChecked = $("input#"+checkBoxName).attr("checked");

	//[DEBUG] debug("選ばれた"+ itemId + ":" + checkBoxName + "/" + quantityBoxName + "=" + $("input#"+checkBoxName).attr("checked") );


	var quantity = $("input#"+quantityBoxName).attr("value");
	
	//Cart auto append item
	if(isChecked && (quantity <= 1) ){ 
		$("input#"+quantityBoxName).attr("value",1);
		quantity = $("input#"+quantityBoxName).attr("value");
	}else{}
	
	
	//debug( "Order:" + itemId + " = " + quantity  );
	putCart( isChecked,itemId, quantity);
	
	//[Spec]Calculate total prices
	calculateCurrentPrices();

}
	/**
	 * 小合計と合計を算出し画面に出力する(ただし割引等はここでは計算できない)
	 * @from  putCartItem , makeCategory
	 * @event onClick=input#userOrderCheck_ / onChange=userOrderQuantity
	 * @event update input#userOrderCurrentPageTotal
	 * @event update input#userOrderAllPageTotal
	 * @see
	 */
	function calculateCurrentPrices(){
		//var cartLists = getAllCartStore();
		var cartMap = getCartStore();

		var checkBoxName = "";
		var quantityBoxName = "";
		//debug("集計");
		
		//[Spec] Update components
		$.each( cartMap, function(id){
	    	//[DEBUG] alert(id+":" +cartLists[id]);
			checkBoxName = "userOrderCheck_" + id;
			quantityBoxName = "userOrderQuantity_" + id;
			if( $("input#"+checkBoxName) != null){
				$("input#"+checkBoxName).attr("checked",  true);
				$("input#"+quantityBoxName).attr("value" , cartMap[id]);
			}
		});
		
		//AJAX:Request server caluculation []
		//[Sample]http://localhost:8080/easy-buy/order/preCalculation?items=CTS=2,PG=2 [POST is better]
		var CATALOG_URL = getAppPath('cart/preCalculation');

		//[jQuery extends]
		$.postJSON = function(url, data, callback) {
			　　jQuery.post(url, data, callback, "json");
		};
		$("input#userOrderCurrentPageTotal").attr("value", "計算中...");
		$("input#userOrderAllPageTotal").attr("value",  "計算中...");
		
	        $.postJSON(            
	            CATALOG_URL,
	            {
	            	dbVersion: getDBVersion(),
	            	userName: getUserID(),
	            	items: getCartStorePre(),
	            	catalogID: getCatalogID()},
	            function (json){
		            //debug(json);
		            if( json && (json.status== "") ){
		            	$("input#userOrderCurrentPageTotal").attr("value", json.currentTotal);
		            	$("input#userOrderAllPageTotal").attr("value",  json.allTotal);
		            }else{
		            	debug( "合計計算メッセージ:" + json.status );
		            	$("input#userOrderCurrentPageTotal").attr("value", "0");
		            	$("input#userOrderAllPageTotal").attr("value",  "0");
		            }
					$('input#userOrderCurrentPageTotal').format({format:'#,###', locale:'jp'});
					$('input#userOrderAllPageTotal').format({format:'#,###', locale:'jp'});
					$('.priceLabel').format({format:'#,###', locale:'jp'});

		            
	            }
	        );
	}

// Cart=====================================================
/*
 *IDが既に存在し追加の場合は更新する/数量がおかしくならないよう追加してはいけない。
 */
function putCart( status ,id,quantity ){
	//[DEBUG] alert("PutCart Status:" + status + "/" +  id + "/" + quantity);
	if(status == true){//追加／更新
		putToCartStore( id,quantity );
	}else{	//削除
		removeCart(id);
	}
}

/*
 *@param quantity-----pendding: decrease for quantity
 */
function removeCart(  id ){
	//削除
	removeFromCartStore( id );
}



//[Cart withCookie]-----------------------------------------------------
//[memo]Cookieは２０個/4Kbyteまでしかもてないことがある
var COOKIE_CART_STORE = "COOKIE_CART_STORE";
var COOKIE_CART_DBVERSION = "COOKIE_CART_DBVERSION";
var COOKIE_CART_USERID = "COOKIE_CART_USER";


var COOKIE_CART_REGEX = '^(' + COOKIE_CART_STORE + '[0-9a-zA-Z]+)=';
var COOKIE_CART_EXPIRES = {path: '/', expires: 1 };

var COKIE_CART_RECORD_SEPARATE = "@"
var COKIE_CART_RECORDSET_SEPARATE = ","
/*
	-VERSIONがgetDBVersion()と異なる場合はカートオールクリア
	ProductIDは英数字のみ

	COOKIE_CART_ = { 
		DBVERSION:xxxxxxxx
		
		CART:ProductID,quantity@.....  
	}	
*/
function initCartStore(){
	//alert(getDBVersion() + "," + getUserID());
	clearCartStoreAll();
	$.cookie(COOKIE_CART_DBVERSION,getDBVersion(),COOKIE_CART_EXPIRES);
	//$.cookie(COOKIE_CART_USERID,getUserID(),COOKIE_CART_EXPIRES);
}
function compareDBVersionAndCookie( ){
	var result = false;
	var ccv = $.cookie(COOKIE_CART_DBVERSION);
	var dbVersion = getDBVersion();
	//Modified by Yoshi,2009/05/20 : Remove JS side db by change specification 
	result = true;
	//if( dbVersion && (dbVersion.length > 0) && (dbVersion == ccv) ){
	//	//CurrentDB and on Cookie are Same version
	//	result = true;
	//}else{
	//	//Shoud be clear cart when DBVersion invalid case
	//	result = false;
	//}
	return result;
}
	//[DEBUG] no use on release mode!
	function testPutCartStore(){
		if(DEBUG){	
			//Dummy data
			$.cookie(COOKIE_CART_STORE,"CSCB101802B,12@GHASL20,30",COOKIE_CART_EXPIRES);
			$.cookie(COOKIE_CART_DBVERSION,"2009021603",COOKIE_CART_EXPIRES);
			$.cookie(COOKIE_CART_USERID,"plustick@mac.com",COOKIE_CART_EXPIRES);
			getCartStore();
			clearCartStoreAll();	
		}else{}
	}

function getCartStorePre(){
	var ccs = $.cookie(COOKIE_CART_STORE);
	return ccs;
}
function getCartStore(){
	//var ccs = $.cookie(COOKIE_CART_STORE);//
	var ccs = getCartStorePre();
	var cartStoreMap = {};//HushMap(Key:ProductCode, Valu:PreOrderQuantity)
	if( ccs && compareDBVersionAndCookie() ){
		//[DEBUG] alert(ccs);
		var ccsPlain = ccs.split(COKIE_CART_RECORD_SEPARATE);
		for(var i = 0;i<ccsPlain.length;i++){
			var ccsRecordSet = ccsPlain[i].split(COKIE_CART_RECORDSET_SEPARATE);
			if( ccsRecordSet && ccsRecordSet.length == 2 ){
				//[DEBUG] alert( ccsRecordSet[0] );
				cartStoreMap[""+ccsRecordSet[0]] = ""+ccsRecordSet[1];
			}else{}
		}
	}else{
		//Cookieなし
		initCartStore();
	}
	return cartStoreMap;
}

//[Cookie]Get by ProductId
function findCartStore( id ){
	var result = "";
	var cartStoreMap = getCartStore();
	if(cartStoreMap){
		var product = cartStoreMap[ id ];
		if( product ){
			result = product;
		}else{}
	}else{}
	return result;
}

//[Cookie]Store id & quantity
function putToCartStore( id,quantity ){
	//[Sample]	$.cookie(COOKIE_CART_STORE + id,quantity,COOKIE_CART_EXPIRES);

	var cartStore = getCartStore();

	//[RECIPIENT] Update record
	cartStore[id] = quantity;
	updateCartStore( cartStore );

}

//[Cookie]Remove id
function removeFromCartStore( id ){
	//[Sample]	$.cookie(COOKIE_CART_STORE + id,quantity,COOKIE_CART_EXPIRES);
	var cartStore = getCartStore();

	//[RECIPIENT] Update record
	cartStore[id] = 0;	
	updateCartStore( cartStore );
}

	function updateCartStore( cartStoreMap ){
		var cartStoreString = "";
		$.each( cartStoreMap, function(i){
			//debug( i + "=" + cartStoreMap[i] );
	
			if( cartStoreMap[i] && cartStoreMap[i] > 0){
				cartStoreString +=
				 	i + 
					COKIE_CART_RECORDSET_SEPARATE + 
					cartStoreMap[i] + 
					COKIE_CART_RECORD_SEPARATE;		
			}else{
				//debug( i + " had not quantity" );
			}
		});
		
		//debug( "[DBSTR]" + cartStoreString );
		$.cookie(COOKIE_CART_STORE,cartStoreString,COOKIE_CART_EXPIRES);
	}

//[Cookie]Get all
function getAllCartStore(){
	var cartList = {};
   if (document.cookie && document.cookie != '') {
       var cookies = document.cookie.split(';');
       for (var i = 0; i < cookies.length; i++) {
           var cookie = $.trim(cookies[i]);
           rex = new RegExp(COOKIE_CART_REGEX);
           if (cookie.match(rex)) {
				var cookieId = RegExp.$1.split(COOKIE_CART_STORE);
				//[DEBUG] 
				//alert( cookieId[1]+ ":" + $.cookie(RegExp.$1));
				cartList[ cookieId[1]] = $.cookie(RegExp.$1);
           }
       }
	}
	//[DEBUG]
	//	$.each( cartList, function(i){
    //		alert("Cookie:"+i);
	//	});
	return cartList;
}

//[Cookie]Remove all
function clearCartStoreAll( ){
	$.cookie(COOKIE_CART_STORE,"",COOKIE_CART_EXPIRES);
}




