﻿/** 
@desc  cookie组织结构如下
*/ 
/***********************************************
document.cookie = "MyShopCar=Value;expires=expire.toGMTString();path=/;"
Value如下字符串：
normal#skirt1:color@red&size@31&quantity@6|skirt2:color@green&size@32&quantity@6
,pack#pack1:pack1-skirt*color@red&size@41&quantity@1!pack1-tie*color@green&size@42&quantity@1!pack1-shoes*color@blue&size@43&quantity@1
|pack2:pack2-skirt*color@red&size@44&quantity@1!pack2-tie*color@green&size@45&quantity@1!pack2-shoes*color@blue&size@46&quantity@1
,packself#packself1:packself1-skirt*color@red&size@51&quantity@1!packself1-tie*color@green&size@52&quantity@1!packself1-shoes*color@blue&size@53&quantity@1
***********************************************/
/*对以上格式简单说明如下：首先上面的大串没有任何一个字符是多余的，上面的格式是后面数据模拟的描述，包含两个正品，两个精选礼包（每个精选礼包下包含三个item）,一个自选礼包（每个自选礼包下包含三个item）
 *其次上面格式包含三级分隔符从高到低依次为（，）（|）和（！），此外还包含三个连接符号，从高到低为：（#）（：）和（*），所谓的从高到低是指：类型，商品，item的顺序。
  */
 /***********************************
  新的格式：
   globalNo#global:5,normal#100110131:color@101&size@31&quantity@1&productid@1001|100210232:color@102&size@32&quantity@1&productid@1002
   pack#32001:2001*productid@2001&dbitemid@0!2101*color@211&size@41&quantity&productid@2101!2201*color@221&size@42&quantity@1&productid@2201!2301*color@231&size@43&quantity@1&productid@2301
   |42002:2002*productid@2002!2102*color@212&size@41&quantity&productid@2102!2202*color@222&size@42&quantity@1&productid@2202!2302*color@232&size@43&quantity@1&productid@2302
   ,packself#53001:3001*productid@3001!3101*color@311&size@51&quantity@1&productid@3101!3201*color@321&size@52&quantity@1&productid@3201!3301*color@331&size@53&quantity@1&productid@3301
  ***********************************/
/** 
@desc 根据颜色对象取出其颜色值 (取数组的第1位"color@red")
@return String 
*/ 
function getColorVal(color){ 
    var tempColor = color.split('@'); 
    var colorVal = tempColor[1];
    return colorVal;
}
/** 
@desc 根据尺码对象取出其尺码值(取数组的第2位"size@39") 
@return String
*/ 
function getSizeVal(size){ 
    var tempSize = size.split('@'); 
    var sizeVal = tempSize[1];
    return sizeVal;
}
/** 
@desc 根据订购数量对象取出其数量的具体值 (取数组的第3位"quantity@3")
@return String 
*/ 
function getQuantityVal(quantity){ 
    var tempQuantity = quantity.split('@'); 
    var quantityVal = tempQuantity[1];
	quantityVal = parseInt(quantityVal,10);
    return quantityVal;
}
/** 
@desc 根据产品编号对象取出其具体值 (取数组的第4位"productid@1101")
@return Int
*/ 
function getProductIdVal(productId){ 
    var tempProductId = productId.split('@'); 
    var productIdVal = tempProductId[1];
	//alert(">>>>>>"+(productIdVal==1001));-----返回结果为true,类型是动态转化的
    return productIdVal;
}
/** 
@desc 根据数据库中的itemid对象取出其具体值 (取数组的第5位"dbitemid@0")
@return Int
*/ 
function getDbItemIdVal(DBItemId){ 
    var tempdbItemId = DBItemId.split('@'); 
    var DBItemIdVal = tempdbItemId[1];
    return DBItemIdVal;
}
/** 
@desc 根据主品的产品编号对象取出其具体值 (取数组的第1位"productid@1001")
@return Int
*/ 
function getHeadProductIdVal(headProductId){ 
    var tempHeadProductId = headProductId.split('@'); 
    var headProductIdVal = tempHeadProductId[1];
    return headProductIdVal;
}
/** 
@desc 根据主品对应数据库中itemid对象取出其具体值 (取数组的第2位"dbitemid@0")
@return Int
*/ 
function getHeadDbItemIdVal(headDBItemId){ 
    var tempHeadDBItemId = headDBItemId.split('@'); 
    var headDBItemIdVal = tempHeadDBItemId[1];
    return headDBItemIdVal;
}
//*******************shopCar中产品的全局编号*************************/
/** 
@desc 添加全局编号
@return void
*/ 
function addGlobalNo(globalNo){
	var typeName = "globalNo";
	var proName = "globalNo";
	var proVal = globalNo;
	car.addType(typeName);
	car.addPro(typeName,proName,proVal);
}
/** 
@desc 获取全局编号
@return globalNo
*/ 
function getGlobalNo(){
	var typeName = "globalNo";
	var proName = "globalNo";
	var globalNo  = car.getProVal(typeName,proName);
	return globalNo;
}
/** 
@desc 编辑全局编号
@return void
*/ 
function editGlobalNo(globalNo){
	var typeName = "globalNo";
	var proName = "globalNo";
	var tempGlobalNo  = car.getProVal(typeName,proName);
	if(tempGlobalNo!=false){//globalNo存在才能修改
			car.editPro(typeName,proName,globalNo);
	}else{
			alert("No product,can't edit globalNo!");
	}
}
/***********************以下是对car对象的第一层封装，但调用了shopCar中产品的全局编号***************************/
/** 
@desc 添加类型
*/ 
function addType(typeName){
	car.addType(typeName);
}
/** 
@desc 添加产品
*/ 
function addPro(typeName,proName,proVal,recesivedQuantityVal){//当为正品的时候传4个参数，当为礼包的时候传3个参数
	var globalNo = getGlobalNo();//获取已经存在的globalNo；
	if(globalNo==false){//如果还没有产品则初始化globalNo为1;
		globalNo = 1;
		addGlobalNo(globalNo);
	}else{
		globalNo++;
		editGlobalNo(globalNo);//将当前需要添加的产品对应的globalNo替换cookie中的globalNo
	}
	if(typeName!="normal"&&typeName!="lookgift"){//除子品以外,对所有商品进行全局编号但编号不应用于普通商品
		proName = proName.toString();
		proName = globalNo+proName;
	}
	car.addType(typeName);
	if(typeName=="lookgift"){
		  var typePoint=car.getTypePoint(typeName);　
	      var proPoint =car.getProPoint(typePoint,proName);
		  if (proPoint != -1) {
		  	globalNo--;
	    	editGlobalNo(globalNo);//如果是个已经存在的,则把globalNo调回来;
			return false;
		  }　
	}
	var returnVal = car.addPro(typeName,proName,proVal);//判断某个产品是否存在
	if(returnVal==false&&typeName=="normal"){//如果当前产品存在，并且为正品则累加数量
		var tempProVal  = car.getProVal(typeName,proName);
        var tempFields=tempProVal.split('&');
        var oldColorVal = getColorVal(tempFields[0]);
		var oldSizeVal = getSizeVal(tempFields[1]);
		var oldQuantityVal = getQuantityVal(tempFields[2]);
		var oldProductIdVal = getProductIdVal(tempFields[3]);
		var oldDbItemIdVal = getDbItemIdVal(tempFields[4]);
		oldQuantityVal = parseInt(oldQuantityVal);
		recesivedQuantityVal = parseInt(recesivedQuantityVal);
		recesivedQuantityVal+=oldQuantityVal;
        composedProVal="color@"+oldColorVal+"&size@"+oldSizeVal+"&quantity@"+recesivedQuantityVal+"&productid@"+oldProductIdVal+"&dbitemid@"+oldDbItemIdVal;
		car.editPro(typeName,proName,composedProVal);
		globalNo--;
		editGlobalNo(globalNo);//如果是个已经存在的普通商品则把globalNo调回来;
	}
}
/** 
@desc 删除某个类别
@return void 
*/ 
function delType(typeName){
car.delType(typeName);
}
/** 
@desc 删除某个产品
@return void 
*/ 
function delPro(typeName,proName){
	car.delPro(typeName,proName);
} 
/** 
@desc 编辑产品
@return void 
*/ 
function editPro(typeName,proName,value){
car.editPro(typeName,proName,value);
}
/** 
@desc 通用转换函数，将typeId转换为对应的typeName;
@return typeName 
*/ 
function convertTypeId(typeId){
		var typeName = "";
		switch (typeId){
		case 0 :
				typeName = "normal";//正品类型
				break;
		case 1 :
				typeName = "pack";//精选礼包
				break;
		case 2 :
				typeName = "packself";//自选礼包
				break;
		case 8 :
				typeName = "lookgift";//自选礼包
				break;
		/*case 10 :
				typeName = "exchange";//积分转换
				break;*/
		default:
				alert("未定义类型!");
				break;
		}
		return typeName;
}
//------------------ShopCar上个页面加载数据接口----------------------------------------//
/** 
@desc 添加正品的方法
@return void 
*/ 
function addNormalProButton2(typeId,proId,color,size,quantity,dbItemId){
		var typeName = "";
		typeName = convertTypeId(typeId);
		composedProNo =proId+color+size;
		if(dbItemId==""||dbItemId==null){
	    	composedProVal="color@"+color+"&size@"+size+"&quantity@"+quantity+"&productid@"+proId+"&dbitemid@0";
		}else{
		    composedProVal="color@"+color+"&size@"+size+"&quantity@"+quantity+"&productid@"+proId+"&dbitemid@"+dbItemId;
		}
		if(typeName!=""){
		     addPro(typeName,composedProNo,composedProVal,quantity);
		}
}
/** 
@desc 添加浏览记录到Cookies中去
@return void 
*/

function addLookGiftCookie(typeId,fromIp,productid,colorid){
	   var typeName = "";
		typeName = convertTypeId(typeId);
		composedProNo =fromIp+productid+colorid;
	    composedProVal="fromIp@"+fromIp+"&productid@"+productid+"&colorid@"+colorid;
		if(typeName!=""){
		     addPro(typeName,composedProNo,composedProVal,0);
		}
}

/** 
@desc 添加精选礼包相关方法
@return void 
*/ 
var packItemArray = new Array();//精选礼包item数组

function addItemButton2(proId,itemProId,itemColor,itemSize,itemQuantity){//添加精选礼包item方法
		//composedItemProId = proId+"-"+itemProId;
		packItem=itemProId+"*color@"+itemColor+"&size@"+itemSize+"&quantity@"+itemQuantity+"&productid@"+itemProId;
		return packItem;
}
function addPackButton2(typeId,proId,items,dbItemId){//添加精选礼包的方法
			var typeName = "";
			typeName = convertTypeId(typeId);
			var composedProVals = "";
			if(dbItemId==""||dbItemId==null){
			composedProVals = proId+"*productid@"+proId+"&dbitemid@0"+"!";//将主品属性放在自己所有子品之前
			}else{
			composedProVals = proId+"*productid@"+proId+"&dbitemid@"+dbItemId+"!";//将主品属性放在自己所有子品之前
			}
			for(var i =0;i<items.length;i++){
					if(i==0)composedProVals +=items[0];
					else
					composedProVals +="!"+items[i];
			}
			if(typeName!=""){
			addPro(typeName,proId,composedProVals);
			}
}
/** 
@desc 添加自选礼包相关方法
@return void 
*/ 
var packSelfItemArray = new Array();
function addPackSelfButton2(typeId,proId,items,dbItemId){//添加自选礼包的方法，规则还有待细化
			var typeName = "";
			typeName = convertTypeId(typeId);
			var composedProVals = "";
			if(dbItemId==""||dbItemId==null){
			composedProVals = proId+"*productid@"+proId+"&dbitemid@0"+"!";//将主品属性放在自己所有子品之前
			}else{
			composedProVals = proId+"*productid@"+proId+"&dbitemid@"+dbItemId+"!";//将主品属性放在自己所有子品之前
			}
			for(var i =0;i<items.length;i++){
					if(i==0)composedProVals +=items[0];
					else
					composedProVals +="!"+items[i];
			}
			addPro(typeName,proId,composedProVals);			
}
//------------------ShopCar跳转到下个页面及后面页面调用的接口----------------------------------------//
/** 
@desc 添加订单编号---salesOrderId
@return void
*/ 
function addSalesOrderId(salesOrderId){
	var typeName = "salesOrderId";
	var proName = "salesOrderId";
	var proVal = salesOrderId;
	car.addType(typeName);
	car.addPro(typeName,proName,proVal);
}
/** 
@desc 获取订单编号---salesOrderId
@return salesOrderId
*/ 
function getSalesOrderId(){
	var typeName = "salesOrderId";
	var proName = "salesOrderId";
	var salesOrderId  = car.getProVal(typeName,proName);
	return salesOrderId;
}
/** 
@desc 修改正品的数量
@return void 
*/ 
function modifyQuantityButton2(typeId,proId,color,size,quantity){
		var typeName = "";
		typeName = convertTypeId(typeId);
		var proName = proId+color+size;
		if(typeName=="normal"){
				var tempProVal  = car.getProVal(typeName,proName);
				if(tempProVal!=false){//正品存在才能修改
						var tempFields=tempProVal.split('&');
						var oldColorVal = getColorVal(tempFields[0]);
						var oldSizeVal = getSizeVal(tempFields[1]);
						var oldQuantityVal = getSizeVal(tempFields[2]);
						var oldProductIdVal = getProductIdVal(tempFields[3]);
						var oldDbItemIdVal = getDbItemIdVal(tempFields[4]);
						var newQuantityVal = quantity;
						if(oldQuantityVal!=newQuantityVal){//table数量修改过才修改cookie
						composedProVal="color@"+oldColorVal+"&size@"+oldSizeVal+"&quantity@"+newQuantityVal+"&productid@"+oldProductIdVal+"&dbitemid@"+oldDbItemIdVal;
						car.editPro(typeName,proName,composedProVal)
						}
				}else{
						alert("No such product!");
				}
		}
}
/** 
@desc 删除某个类别
@return void 
*/ 
function delTypeButton2(typeId){
	var typeName = "";
	typeName = convertTypeId(typeId);
	if(typeName!=""){
	car.delType(typeName);
	}
}
/** 
@desc 删除某个产品
@return void 
*/ 
function delProButton2(typeId,proId,color,size){
	var typeName = "";
	typeName = convertTypeId(typeId);
	var proName = proId +color + size;
	if(typeName!=""){
	car.delPro(typeName,proName);
	}
}
