/* 
 * ----------------------------------------------------------------
 * ItemSearch_ver2.0.0
 * [Description]
 *	マイリスト操作機能
 *  This library is required "prototype.js" and "script.aculo.us.jp".
 *  
 * [Date]
 *	2007/10/29 ver0.0
 *	2009/02/24 ver0.1	：ブランドセレクション様に一部修正
 *
 * ----------------------------------------------------------------
 */

/*
	[Global Variables]
	
	name_incart	: クッキー名
	delmesg		: 商品をマイリストから削除した際に表示するメッセージエリアのid属性名接頭字
	
 */
 
// ---------------------------------------------------------------- 

//
// Global Variables
//
var name_incart	= "item=";
var delmesg		= "del-";
var item_expire = "item_expire=";

// ----------------------------------------------------------------
// Class LinkCart
// ----------------------------------------------------------------

/*
	[Global Variables]
	
 	cookieTime	: クッキー生存期間
 	maxnum		: マイリスト最大格納数
 	tagname		: マイリスト内商品数のタグ名
	delim		: 商品区切り記号
	topurl		: クッキートップURL
	itemarea	: 小窓商品タグid属性名
	
 */
 
// ---------------------------------------------------------------- 

//
// Global Variables
//

var cookieTime 	= 1000 * 60 * 60 * 24 * 30 ;
var maxnum	 	= 10;
var tagname	 	= "linkednum";
var delim		= ",";
var topurl	    = "/atws_fin/";
var deltag		= '<span style="color:red;"><b>削除完了</b></span>';
// ---------------------------------------------------------------- 

//
// Class LinkCart
//

function LinkCart() {}
LinkCart.prototype = {
	
	// addCart(value)
	// マイリストに指定された商品を追加する。
	addCart: function(value, event) {
		if (value == null) {
			return false;
		}
		var msg;
		var idx = document.cookie.indexOf(name_incart);
		var item_id = this.getItemId(idx);
		var goods = this.getItemArray(item_id);

		if (goods.length > maxnum) {
			msg = "マイリスト内に 【 " + (maxnum + 1) + " 】 個以上の商品が存在しています。マイリスト内を一度全削除してください。";
			messageView(msg, event);
			return false;
		}
		
		if (goods.indexOf(escape(value)) >= 0) {
			msg = "商品 【 " + value + " 】 はすでにマイリストに入っています。";
			messageView(msg, event);
			return false;
		}

		if (goods.length >= maxnum ) {
			msg = "マイリストへの追加は 【 " + maxnum + " 】 個までです。";
			messageView(msg, event);
			return false;
		}

		// 有効期間の準備及びセット
		var dObj = new Date();
		dObj.setTime(dObj.getTime() + cookieTime);
		setDay = dObj.toGMTString();
		setDay2 = dObj.getFullYear() + '/' + (dObj.getMonth()+1) + '/' + dObj.getDate();

		goods.push(escape(value));
		val = goods.join(delim);
		document.cookie = name_incart + val + ";expires=" + setDay + ";path=" + topurl ;		// マイリストの追加
		document.cookie = item_expire + setDay2 + ";expires=" + setDay + ";path=" + topurl ;	// マイリストの有効期限の追加
		
		// 追加完了メッセージの表示
		msg = "商品 【 " + value + " 】 をマイリストに追加しました。<br>"
		    + "現在のマイリスト商品は 【 " + goods.length + " 】個です。";
		messageView(msg, event);
		
		// マイリスト変数の操作
		$(tagname).innerHTML = goods.length;
		
		this.httpRequest(value);
		return true;
	},
	
	// delItem(value)
	// 指定された商品をマイリストから削除する（単体） 
	delItem: function(value, event) {
		if (value == null) {
			return false;
		}
		var msg;
		var idx = document.cookie.indexOf(name_incart);
		var item_id = this.getItemId(idx);
		var items = this.getItemArray(item_id);
		if (idx < 0 || items.length == 0) {
			msg = "すでにマイリストから削除されています。";
			messageView(msg, event);
			return false;
		}
	
		if(items.length > maxnum) {
			msg = "マイリスト内に商品が 【 " + maxnum + " 】 個以上存在しています。マイリスト内を一度全削除してください。";
			messageView(msg, event);
			return false;
		}
	
		if (items.indexOf(escape(value)) < 0) {
			msg = "すでにマイリストから削除されています。";
			messageView(msg, event);
			return false;
		}
		var goods = items.without(escape(value));

		// 有効期間の準備及びセット
		var dObj = new Date();
		dObj.setTime(dObj.getTime() + cookieTime);
		setDay = dObj.toGMTString();

		var val = goods.join(delim);
		document.cookie = name_incart + val + ";expires=" + setDay + ";path=" + topurl;
		
		msg = "商品 【 " + value + " 】 をマイリストから削除しました。<br>" 
			+ "現在マイリスト内にある商品は 【 " + goods.length + " 】個です。";
	
		// マイリスト内画面に削除の文字表示
		if ($(delmesg + value)) {
			// 大画面で操作
			$(delmesg + value).innerHTML = deltag;
			messageView(msg, event);
		}
		
		// マイリスト変数の操作
		$(tagname).innerHTML = goods.length;
		location.reload();
		return true;
	},

	// delAllItem()
	// マイリストから全商品を削除する
	delAllItem: function(event) {
		
		// マイリスト内画面に削除の文字表示
		var idx = document.cookie.indexOf(name_incart);
		var item_id = this.getItemId(idx);
		var goods = this.getItemArray(item_id);		
		for (var i = 0 ; i < goods.length ; i++) {
			if ($(delmesg + goods[i])) {
				$(delmesg + goods[i]).innerHTML = deltag;
			}
		}
		// クッキー削除
		document.cookie = name_incart + ";expires=Thu,01-Jan70 00:00:01 GMT" + ";path=" + topurl ;
		$(tagname).innerHTML = "0";

		var msg = "マイリスト内の商品を全て削除しました。";
		messageView(msg, event);
	},

	// getItemId(idx)
	// マイリスト内の商品を文字列で返却する。
	getItemId: function(idx) {
		var start = idx + name_incart.length;
		var tmp = document.cookie + ";";
		var end = tmp.indexOf(";", start);
		if (start >= end || isNaN(tmp.charAt(start))) {
			return "";
		}
		var val = tmp.substring(start, end);
		return val;
	},
	
	// getItemArray(val)
	// マイリスト内の商品を配列で返却する。	
	getItemArray: function(val){
		if (val == "") {
			return new Array();
		}
		var items = val.split(delim);
		return items;
	},
	
	// httpRequest(value)
	// itemを送る
	httpRequest: function(value) {
		var url = 'http://labs.accesstrade.net/atws_fin/fashion';
		var param = 'item=' + value ;
		var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get', 
				parameters: param
			});
	}
}
// オブジェクトセット
var cartObj = new LinkCart();

// ---------------------------------------------------------------- 
// Generic function
// ----------------------------------------------------------------

// messageView(msg, e)
// メッセージポップアップを表示
function messageView(msg, event) {
	// メッセージエリア作成
	if($("popup")) {
		Element.remove("popup");
	}
	var msgarea = document.createElement("div");
	msgarea.setAttribute("id", "popup");
	msgarea.style.position 			= "absolute";
	msgarea.style.display 			= "none";
	msgarea.style.backgroundColor	= "#FF00FF";
	msgarea.style.width 			= "180px";
	msgarea.style.height 			= "70px";
	msgarea.style.textAlign			= "left";
	
	// 表示座標
	// メッセージエリアが画面外にならないように調整
	var x = Event.pointerX(event) - parseInt(msgarea.style.width) / 2;
	var tmp = Event.pointerX(event) + parseInt(msgarea.style.width) / 2;
	if (document.all) {
		var dif = (document.body.clientWidth - 20) - tmp;
		if (dif < 0 ) {
			x = (document.body.clientWidth - 20) - parseInt(msgarea.style.width);
		}
	} else {
		var dif = (window.innerWidth - 20) - tmp;
		if (dif < 0 ) {
			x = (window.innerWidth - 20) - parseInt(msgarea.style.width);
		}
	}
	var y = Event.pointerY(event) - 80;
	msgarea.style.left	= x + "px";
	msgarea.style.top	= y + "px";
	
	// メッセージ作成
	var mssage = document.createElement("div");
	mssage.style.fontSize 	= "12px";
	mssage.style.color		= "#FFFFFF";
	mssage.style.padding 	= "3px";
	mssage.innerHTML 		= msg;
	
	// ポップアップ表示
	msgarea.appendChild(mssage);
	document.body.appendChild(msgarea);
	new Effect.Appear(msgarea, { from:0.0, to:0.8, duration:0.3});
	new Effect.Fade(msgarea, { from:0.8, to:0.0, duration:1, delay:1.5});
}

// テンプレ
function chview(val) {
	document.cookie = "tp=" + val ;
	location.reload();
}
