﻿// cookieからショッピングカートの情報を読み込み初期表示する
function loadPage(id) {
	// cookieの読み込み
	var value = loadData(id);
    var ctlSpnBook = document.getElementById("spnbook" + id);
	if (value != "") {
		// cookieが保持している情報がある場合
		document.all("tdbook" + id).style.display = "block";
		ctlSpnBook.innerHTML = "カートに入っています。（数量：" + value + "）";
	}
}

// ショッピングカートを表示する
function viewShoppingCart(id) {	

	// 使用しているブラウザ情報、バージョン情報の取得
	var appName = window.navigator.appName;
	var appVer = window.navigator.appVersion;
	
	if (appName != "Microsoft Internet Explorer") {		//2009.05.20 IE8対応(IE6以上対応)
		//IE以外はカート非表示 
		return;
	}
	
	var p = appVer.indexOf("MSIE",0);	
	if(p >= 0) {
		var p2 = appVer.indexOf(";",p);
		if(p2 >= 0) {
			//IEのバージョン
			var ieVer = appVer.substring(p+5,p2);
		}
	}
	
	if (ieVer < 6) {
		//IE6未満はカート非表示 
		return;
	}									//2009.05.20 ここまで

	// URLからsearch部を取得
	var locSearch = unescape(window.location.search);
	locSearch = locSearch.substring(locSearch.indexOf("?") + 1);

	var tmp1 = "";
	var tmp2 = "";
	var num1 = 0;
	var num2 = 0;
	var num3 = 0;
	
	var len = locSearch.length;

	// search部から"param"をキーに情報を取得
	while (num1 < len) {
		num2 = locSearch.indexOf("&", num1);
		if (num2 < 0) {
			num2 = locSearch.length + 1;
		}
		tmp2 = locSearch.substring(num1, num2);
		num3 = tmp2.indexOf("=");
		if (tmp2.substring(0, num3) == "param") {
			if (tmp2.substring(num3 + 1, num2) == "false") {
				// "param"をキーとする情報がfalseの場合ショッピングカートを非表示
				return;
			}
		}
		num1 = num2 + 1;
	}
	
	// ショッピングカートの生成
	var html = '';

	html += '<div align=right>';
	html += '<table>';
	html += '<tr align="right">';
	html += '<td>';
	html += '数量：';
	html += '<input type="text" id="txtbook' + id + '" size="3" maxlength="3" style="text-align:right; vertical-align:middle; ime-mode:disabled; padding:1px;">';
	html += '<input type="image" alt="カートに入れる" src="/shop/cart_btn.gif" style="vertical-align:middle; margin-left:3px;" onclick="cart_onClick(\'' + id + '\');">';
	html += '</td>';
	html += '</tr>';
	html += '<tr align="right">';
	html += '<td align="right" id="tdbook' + id + '" style="display:none;">';
	html += '<span id="spnbook' + id + '" style="color:Red"></span>';
	html += '<input type="image" alt="取り消す" src="/shop/cancel_btn.gif" style="vertical-align:middle; margin-left:3px;" onclick="del_onClick(\'' + id + '\');">';
	html += '</td>';
	html += '</tr>';
	html += '</table>';
	html += '</div>';

	document.write(html);
	
	// cookieを読み込んで初期表示
	loadPage(id);
}

// カートに入れるボタンを押下
function cart_onClick(id){
	var key = "ShoppingCartNoSecure"
	var value = document.getElementById("txtbook" + id).value;
	var ctlSpnBook = document.getElementById("spnbook" + id);
	
	// ゼロサプレス
	var valueNum = parseInt(value, 10);

	// 入力チェック
	if (chkRequire(value) && chkNum(value) && valueNum != 0) {
		// 半角数値を入力
		value = String(valueNum);
		
		// カートメッセージの表示
		document.all("tdbook" + id).style.display = "block";
		ctlSpnBook.innerHTML = "カートに入っています。（数量：" + value + "）";
		// 入力した情報を保存
		saveData(key,id,value);
	} else {
		// 空白または0、半角数値以外を入力
		// エラーメッセージの表示
		alert("数量は0以外の半角数字で入力してください。");
		// フォーカスを数量に当てる
		document.getElementById("txtbook" + id).focus();
	}
}

// 取消ボタンを押下
function del_onClick(id){
	var key = "ShoppingCartNoSecure"
	
	// カートメッセージの非表示
	document.all("tdbook" + id).style.display = "none";
	document.getElementById("txtbook" + id).value = "";
	// ショッピングカート情報の削除
	deleteData(key, id);
}

// ショッピングカート情報の保存
function saveData(key, id, value) {
	var tmp1 = "";	
	var tmp2 = "";	
	var tmp3 = "";
	
	var tmp1 = getCookie(key);
	var tmp2 = loadData(id);

	if(tmp1 == "") {
		// ショッピングカートの情報がない場合新規作成
		tmp3 = id + ":" + value;
	} else if (tmp2 == "") {
		// ショッピングカートの情報がすでにある場合追加
		tmp3 = tmp1 + "," + id + ":" + value;
	} else {
		// 商品コードの情報がすでにある場合更新
		deleteData(key, id);
		tmp1 = getCookie(key);
		if (tmp1 != "") {
			// ショッピングカート情報が空でない場合
			tmp1 += ","
		}
		tmp3 = tmp1 + id + ":" + value;
	}

	// cookieに情報の保存
	setCookie(key, tmp3);
}

// ショッピングカート情報の読み込み
function loadData(id) {
	
	// cookieの読み込み
	var tmp1 = getCookie("ShoppingCartNoSecure") + ",";
	var tmp2 = "";
	var num1 = 0;
	var num2 = 0;
	var num3 = 0;

	var len = tmp1.length;

	// 商品コードをキーに検索
	while (num1 < len) {
		num2 = tmp1.indexOf(",", num1);
		tmp2 = tmp1.substring(num1, num2);
		num3 = tmp2.indexOf(":");
		if (tmp2.substring(0, num3) == id) {
			// 商品コードをキーにして取得した情報を返す
			return(tmp2.substring(num3 + 1, num2 - num1));
		}
		num1 = num2 + 1;
	}

	return("");
}

// ショッピングカート情報の削除
function deleteData(key, id) {

	var tmp1 = "";
	var tmp2 = "";
	var tmp3 = "";
	var num1 = 0;
	var num2 = 0;
	var num3 = 0;
	
	if (loadData(id) == "") {
		// 削除する商品コードの情報が削除済
		return;
	}
	
	tmp1 = getCookie(key) + ",";

	var len = tmp1.length;

	// ショッピングカート情報から商品コードをキーとする情報を削除
	while (num1 < len) {
		num2 = tmp1.indexOf(",", num1);
		tmp2 = tmp1.substring(num1, num2);
		num3 = tmp2.indexOf(":");
		if (tmp2.substring(0, num3) != id) {
			tmp3 += tmp2.substring(0, num2 - num1) + ",";
		}
		num1 = num2 + 1;
	}

	if (tmp3 == "") {
		// ショッピングカート情報を全て削除
		document.cookie = key + "=;path=/;";
		document.cookie = "ShoppingCart=;path=/shop/;";
		return;
	}
	
	// 商品コードをキーとする情報のみ削除してcookieの情報を上書き
	setCookie(key, tmp3.slice(0, tmp3.lastIndexOf(",")));
}

// cookie情報の取得
function getCookie(key) {
    var prefix = key + "="
    var cookieStartIndex = document.cookie.indexOf(prefix)
    if (cookieStartIndex == -1)
        return ("")
    var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length)
    if (cookieEndIndex == -1)
        cookieEndIndex = document.cookie.length
    return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex))
}


// cookie情報の設定
function setCookie(key, param) {
	var saveDay = 1;
	var setDay = new Date();
	var tmp = key + "=" + escape(param) + ";";
	
	// cookieの保持期間は24時間
	//setDay.setTime(setDay.getTime() + (saveDay*1000*60*60*24));
	//var expires = "expires=" + setDay.toGMTString() + ";";
	//tmp += expires;
	tmp += "path=/;";

	// cookie情報の保存
	document.cookie = tmp;

	// secure付きのCookie発行
	var httpsTmp = "ShoppingCart=" + escape(param) + ";";
	//httpsTmp += expires;
	httpsTmp += "path=/shop/;";
	httpsTmp += " secure";
	document.cookie = httpsTmp 
}

// 空白チェック
function chkRequire(str){
	if (trim(str) == "") {
		return false;
	} else {
		return true;
	}
}

// 半角数値チェック
function chkNum(str){
	var data = str.match(/[^0-9]/g);
	if(data || !str) return false;
	return true;
}

function trim(str){
	return trimRight(trimLeft(str));
}

function trimLeft(str){
	var result = str.match(/[^\s　]+.*/);
	return result == null ? '' : result.toString();
}

function trimRight(str){
	var result = str.match(/.*[^\s　]+/);
	return result == null ? '' : result.toString();
}
