// 全局变量 处理订单的CGI程序的URL
var parseCartUrl = "../../app/OrderClientInfoInput.jsp"

// 函数名  RCk()
// 功能	   将二维数组的值重新连接成格式字符串并写到Cookie中去
// 参数    name 要读取的Cookie的名字
// 参数    defu 如果Cookie不存在时返回的默认值
// 返回值  读到的Cookie字符串或者默认值
function RCk (name, defu){
	var arg=name+"="
	var ck=document.cookie
	if (ck.indexOf(arg)!=-1){
		var vstr=ck.indexOf(arg)+arg.length
		if (ck.indexOf(";",vstr)==-1) var vend=ck.length
		else var vend=ck.indexOf(";",vstr)
		return ck.substring(vstr,vend);
	}else return defu
}

// 函数名  writeCookie()
// 功能	   将字符串写到Cookie中去
// 参数    strCookie 要写的Cookie的值
// 返回值  无
function writeCookie (strCookie){
	document.cookie = "Goods=" + strCookie + ";path=/;";
}

// 函数名  newCartWin()
// 功能	   生成一个新窗口
function newCartWin (url, handle, width, height) {
	var windowStyle = "toolbar=no,menubar=no,status=yes,scrollbars=yes,resizable=yes,width="+width+",height="+height;
	var popupWin = window.open(url,handle,windowStyle)
	return popupWin;
}

// 函数名  updateGoods()
// 功能	   将二维数组的值重新连接成格式字符串并写到Cookie中去
// 参数    strGoods 二维数组
// 返回值  无
function updateGoods (strGoods){
	var i, j, strCompart, strTemp, strCookie = "";
	for (i=0; i<strGoods.length; i++){
		strTemp = strGoods[i].join("::");
		strCompart = (strCookie == "") ? "" : "##";
		strCookie += strCompart + strTemp;
		
	}
	writeCookie (strCookie);
}

////////////////////////////////////////////////////////////////////

// 函数名  getCart()
// 功能	   从Cookie中读出购物车
// 参数    无
// 返回值  二维数组
function getCart (){
	var strGoods = new Array();
	var strCookie, strAllGoods, i, j;

	strCookie = RCk("Goods", "");
	strAllGoods = strCookie.split("##");

	for (i=0; i<strAllGoods.length; i++){
		strGoods[i] = strAllGoods[i].split("::");
	}
	return strGoods;
}

// 函数名  addGoods()
// 功能	   添加商品到购物车
// 返回值  无
// 参数
// gId       gName       gPrice        gSpecs
// 商品ID    商品名称    单价   数量   商品类型
// 生成的字符串如下面格式，商品和商品之间用"##"分隔
// 10004225::摄像头系列::348.00::1::规格:xxxxywww

// 以下变量的顺序因该和上面的顺序相对应，这些变量类似宏的作用
var GID=0,   GNAME=1,   GPRICE=2, GQT=3, GSPECS=4

function addGoods (gId, gName, gPrice, gSpecs) {
	var strCookie, strGoods, strCompart;

	if(indexOfGoods(gId)){
		updateGoodsQuantity (gId, "");
	}else{
		strCookie = RCk("Goods", "");
		strCompart = (strCookie == "") ? "" : "##";
		strGoods = strCompart + gId + "::" + gName + "::" + gPrice + "::" + "1" + "::" + gSpecs;
		strCookie += strGoods;
		writeCookie (strCookie);
	}
	viewCart();
}

// 函数名  removeCart()
// 功能	   删除购物车中的所有信息
// 参数    tag
// 返回值  无
function removeCart (tag){
	writeCookie ("");
	if (tag) printGoods(cartWin);
	else alert("OK，清空成功！");
}

// 函数名  indexOfGoods()
// 功能	   从Cookie中取一个商品的纪录
// 参数    gId 商品ID
// 返回值  一维数组 存有一个商品的所有信息
function indexOfGoods (gId){
	var i, j, strGoods, strOneGoods;
	strGoods = getCart();
	for (i=0; i<strGoods.length; i++){
		if (strGoods[i][GID] == gId){
			strOneGoods = strGoods[i];
			break;
		}
	}
	return strOneGoods;
}

// 函数名  removeGoods()
// 功能	   删除购物车中的某项物品
// 参数    gId 商品ID
// 返回值  无
function removeGoods (gId){
	var i, j, strAllGoods, strCookie, strCompart;

	strCookie = RCk("Goods", "");
	if (strCookie == "") return;
	strAllGoods = strCookie.split("##");
	strCookie = "";

	for (i=0; i<strAllGoods.length; i++){
		if (strAllGoods[i].indexOf(gId) == -1){
			strCompart = (strCookie == "") ? "" : "##";
			strCookie += strCompart + strAllGoods[i];
		}
	}
	writeCookie (strCookie);
}

// 函数名  updateGoodsQuantity()
// 功能	   修改商品定购数量
// 参数    gId 商品ID
// 参数    gQuantity 商品数量，如果改值为空，则数量默认加1
// 返回值  无
function updateGoodsQuantity (gId, gQuantity){
	var i, j, strGoods, strCompart, strCookie, strTemp;
	
	strGoods = getCart();
	for (i=0; i<strGoods.length; i++){
		if (strGoods[i][GID] == gId){
			if (gQuantity == "") {
				strGoods[i][GQT] = parseInt(strGoods[i][GQT]) + 1;
			} else {
				strGoods[i][GQT] = gQuantity;
			}
			break;
		}
	}
	updateGoods(strGoods);
}


// 函数名  parseCart()
// 功能	   提交订单信息
// 参数    无
// 返回值  无
function parseCart(){
	var strCookie;

	strCookie = RCk("Goods", "");
	
	if(strCookie != ""){
		if (document.all){
			cartWin.document.form_order.action = parseCartUrl;
			cartWin.document.form_order.cart.value = strCookie;
			cartWin.document.form_order.submit();
		}else{
			var abc = window.open();
			abc.location.href=parseCartUrl+"?cart="+strCookie;
		}
		cartWin.window.close();
	} else {
		alert("当前购物车为空");
	}
}
////////////////////////////////////////////////////////////////////

// 函数名  errorMsg()
// 功能	   显示购物车错误信息
// 参数    无
// 返回值  无
function errorMsg(){
	alert ("购物车出现错误，请重新进行您的操作！");
	if (document.layers){
		alert("这种错误也许是因为Netscape的不稳定性所至，推荐您使用IE4.0以上的浏览器访问本站！");
	}
	cartWin.window.close();
}


// 函数名  removeGoodsMuti()
// 功能	   删除购物车中的多项物品 调用 removeGoods() 函数实现
// 参数    无
// 返回值  无
function removeGoodsMuti (){
	var i, j, objGoodsId, strCookie;
	
	if (!cartWin || !cartWin.document.viewCart){
		errorMsg();
		return;
	}

	objGoodsId = cartWin.document.viewCart.goodsId;
	if (!objGoodsId) return;
	if (objGoodsId.length){
		for (i=0; i<objGoodsId.length; i++){
			if(objGoodsId[i].checked){
				removeGoods(objGoodsId[i].value);
			}
		}
	}
	else if (objGoodsId && objGoodsId.checked){
		removeGoods(objGoodsId.value);
	}
	printGoods(cartWin);
}


// 函数名  updateGoodsQuantityMuti()
// 功能	   修改多个商品的定购数量 调用函数updateGoodsQuantity()
// 参数    无
// 返回值  无
function updateGoodsQuantityMuti (){
	var i, j, strGoods, objGoodsId, objGoodsQt;
	
	if (!cartWin || !cartWin.document.viewCart){
		errorMsg();
		return;
	}
	
	strGoods = getCart();
	objGoodsId = cartWin.document.viewCart.goodsId;
	objGoodsQt = cartWin.document.viewCart.quantity;

	if (!objGoodsId) {
		printGoods(cartWin);
	}
	else if(objGoodsId.length){
		for (i=0; i<objGoodsId.length; i++){
			if (!isNaN(parseInt(objGoodsQt[i].value)))
				updateGoodsQuantity(objGoodsId[i].value, parseInt(objGoodsQt[i].value));
		}
	}
	else if(objGoodsId){
		if (!isNaN(parseInt(objGoodsQt.value)))
			updateGoodsQuantity(objGoodsId.value, parseInt(objGoodsQt.value));
	}
	printGoods(cartWin);
}

////////////////////////////////////////////////////////////////////

// 全局变量 显示购物车的弹出窗口名
var cartWin;

// 函数名  viewCart()
// 功能	   浏览购物车中的所有商品
// 参数    无
// 返回值  无
function viewCart(){
	cartWin = newCartWin("", "viewCart", 600, 200);
	printGoods(cartWin);
}

// 函数名  printGoods()
// 功能	   打印HTML购物车的代码到指定窗口
// 参数    popupWin 显示购物车的窗口名
// 返回值  无
function printGoods(popupWin){
	var i, j, total=0;
	var strGoods = getCart();
	var htmlHead = '<html><head><meta http-equiv="Content-type" content="text/html; charset=gb2312">\n<link rel="stylesheet" href="../../css/style.css" type="text/css"><style type="text/css">'+
'<!--'+
'.input-center {'+
'	text-align: center;'+
'	height: 20px;'+
'	width: 40px;'+
'	border: 1px solid #999999;'+
'}'+
'-->'+
'</style>'+
		'<title>中国皮影网购物车</title>\n</head>'+
		'<body topmargin=10 marginheight=10 leftmargin=5 marginwidth=5 onload=focus()>\n<center>\n';
	var htmlEnd = '</center></body></html>\n';
	var htmlCont = '<table width=570 border=0 cellspacing=0 cellpadding=0 align=center><tr><td>\n'+
		'<table width=565 border=0 cellspacing=3 cellpadding=0 class="text">\n'+
		    '<tr>'+
			'<td align=center width=565>中国皮影网购物车</td>'+
		    '</tr>\n'+
		'</table>\n'+
		'<table width=565 border=0  cellspacing=1 cellpadding=0 bgcolor="#CCCC00" class="text">\n'+
		    '<form name=viewCart method=post>\n'+
		    '<tr align=center  bgcolor="#FFFFC1">'+
			'<td width=30>选定</td>'+
			'<td width=100>商品编号</td>'+
			'<td width=100>商品名称</td>'+
			'<td width=40>数量</td>'+
			'<td width=100>商品类型</td>'+
			'<td width=100>单价</td>'+
			'<td width=100>小计</td>'+
		    '</tr>\n';
	for (i=0; strGoods != "" && i < strGoods.length; i++){
		htmlCont += '<tr bgcolor="#FFFFFF">'+
				'<td width=30 align=center><input type=checkbox checked name=goodsId value=' + strGoods[i][GID] + '></td>'+
				'<td width=100 align=center><a href="../../app/CSDetail.jsp?CSID='+strGoods[i][GID]+'" target="_blank">' + strGoods[i][GID] + '</a></td>'+//编号
				'<td width=100 align=center>' + strGoods[i][GNAME] + '</td>'+//名字
				'<td width=40 align=center><input maxlength=4 type=text name=quantity  value=' + strGoods[i][GQT] + ' onMouseOut="javascript:opener.updateGoodsQuantityMuti()" class="input-center"></td>'+//数量
				'<td width=100 align=center>' + strGoods[i][GSPECS] + '</td>'+//规格
				'<td width=100 align=center>￥' + strGoods[i][GPRICE] + ' 元</td>'+//单价
				'<td width=100 align=center>￥' + parseFloat(strGoods[i][GPRICE]) * parseInt(strGoods[i][GQT]) + ' 元</td>'+//小计
			    '</tr>'; 
		var count = parseFloat(strGoods[i][GPRICE]) * parseInt(strGoods[i][GQT]);
		total += count;
	}
	htmlCont += '<tr bgcolor="#FFFFFF">'+
			'<td colspan=6  align="right"><b>总计&nbsp;</b></td>'+
			'<td align=center>￥' + total + ' 元</td>'+
		    '</tr>\n';
	htmlCont += '</form></table>\n' +
		'<table width=565 border=0 cellspacing=3 cellpadding=0>\n'+
		     '<tr>'+
			'<td width=110 align=center><input type="button" name="Submit" value="继续购物" class=button-shop onclick="javascript:window.close()"></td>'+
			'<td width=110 align=center><input type="button" name="Submit" value="删除选定商品" class=button-shop onclick="javascript:opener.removeGoodsMuti()"></td>'+
			'<td width=110 align=center><input type="button" name="Submit" value="清空购物车" class=button-shop onclick="javascript:opener.removeCart(1)"></td>'+
			'<td width=120 align=center>&nbsp;</td>'+
			'<td width=110 align=center><input type="button" name="Submit" value="提交订单" class=button-shop onclick="javascript:opener.parseCart()"></td>'+
		     '</tr>\n'+
		'</table><form method=post name=form_order target=_blank><input type=hidden name=cart></form>\n'+
		'</td></tr>\n'+
		'</table>\n';
	popupWin.document.open("text/html");
	popupWin.document.write(htmlHead + htmlCont + htmlEnd);
	popupWin.document.close();
}

function printOrder(){
	var i, j, total=0;
	var strGoods = getCart();
	var htmlCont = '<style type="text/css">'+
'<!--'+
'.input-center {'+
'	text-align: center;'+
'	height: 20px;'+
'	width: 40px;'+
'	border: 1px solid #999999;'+
'}'+
'-->'+
'</style>'

	+'<table width=565 border=0  cellspacing=1 cellpadding=0 bgcolor="#CCCC00" class="text">\n'+
		    '<tr align=center  bgcolor="#FFFFC1">'+
			'<td width=100>商品编号</td>'+
			'<td width=100>商品名称</td>'+
			'<td width=40>数量</td>'+
			'<td width=100>商品类型</td>'+
			'<td width=100>单价</td>'+
			'<td width=100>小计</td>'+
		    '</tr>\n';
	for (i=0; strGoods != "" && i < strGoods.length; i++){
		htmlCont += '<tr bgcolor="#FFFFFF">'+
				'<td width=100 align=center><input type=hidden name=CSID' + i + ' value=' + strGoods[i][GID] + '><a href="../../app/CSDetail.jsp?CSID='+strGoods[i][GID]+'" target="_blank">' + strGoods[i][GID] + '</a></td>'+//编号
				'<td width=100 align=center>' + strGoods[i][GNAME] + '</td>'+//名字
				'<td width=40 align=center><input maxlength=4 type=text name=Amount' + i + '  value=' + strGoods[i][GQT] + ' class="input-center" readonly></td>'+//数量
				'<td width=100 align=center>' + strGoods[i][GSPECS] + '</td>'+//规格
				'<td width=100 align=center>￥' + strGoods[i][GPRICE] + ' 元<input type=hidden  name=CSPrice' + i + '   value=' +  strGoods[i][GPRICE] + '></td>'+//单价
				'<td width=100 align=center>￥' + parseFloat(strGoods[i][GPRICE]) * parseInt(strGoods[i][GQT]) + ' 元</td>'+//小计
			    '</tr>'; 
		var count = parseFloat(strGoods[i][GPRICE]) * parseInt(strGoods[i][GQT]);
		total += count;
	}
	htmlCont += '<tr bgcolor="#FFFFFF">'+
			'<td colspan=5  align="right"><b>总计&nbsp;</b></td>'+
			'<td align=center>￥' + total + ' 元</td>'+
		    '</tr></table>\n';
	document.write(htmlCont);
}
