// cookie_object, element, select_value, html_escape, html_unescape
function cookie_url_object(id, size, key) {
	this.ID = id;		// HTMLの方のID
	this.VARIABLE = id;	// 変数名(JavaScript)
	this.KEY = key;		// cookie_object同士を区別してCOOKIEを保存する
	if (key == undefined) {
		this.KEY = id;
	}
	this.SIZE = size;	
	this.has_cookie = 0;

	// 初期化 
	this.initialize = function(type) {
		this.AVAILABLE = 0;
		if (type == undefined) {
			if (this.initialize(2) != 2) {
				this.initialize(1);
			}
		} else {
			if (type == 1) {
				// cookie 
				this.COOKIE = new cookie_object();
				if (this.COOKIE.available) {
					this.AVAILABLE = 1;
				}
			} else if (type == 2) {
				// userdata 
				this.COOKIE = new userdata_object("save");
				if (this.COOKIE.available) {
					this.AVAILABLE = 2;
					{	// cookieにデータが残っているかどうか 
						var c = new cookie_object();
						if (c.available) {
							var str = "";
							for (var i = 0; i < this.SIZE; i++) {
								var val = c.get(this.KEY+":"+i);
								if (val != undefined) {
									str += (i+1) + ":" + val + "\n";
								}
							}
							if (str.length > 0) {
								this.has_cookie = 1;
							}
						}
					}
				}
			}
		}
		return this.AVAILABLE;
	}
	this.initialize();

	// HTML関係
	// 選択肢一覧のHTML記述
	this.html = function() {
		var sel = '<select id="'+this.ID+'">';
		for (var i = 0; i < this.SIZE; i++) {
			sel += '<option value="'+i+'">'+this.option(i)+'<\/option>';
		}
		sel += '<\/select>';
		sel += '<button onclick="'+this.VARIABLE+'.load();">読込<\/button>';
		sel += '<button onclick="'+this.VARIABLE+'.store();">保存<\/button>';
		sel += '<button onclick="'+this.VARIABLE+'.rename();">別名<\/button>';
		return sel;
	};
	// 選択肢のHTMLの更新 (retがあれば、更新せずに文字列として返す)
	this.option = function(i, update) {
		var val = this.get(i);
		var str = '(未設定)';
		if (val.data != undefined) {
			str = val.title + '　[' + val.date + ']';
		}
		str = html_escape((i*1+1)+': '+str);
		if (update == undefined || update == 0) {
			return str;
		}
		// 選択肢を更新する
		element(this.ID).options[i].innerHTML = str;
		return str;
	};

	// 一般関数
	// Cookieデータの取得
	this.get = function(id) {
		if (!this.AVAILABLE) {
			return undefined;
		}
		var ret = new Object();
		var val = this.COOKIE.get(this.KEY+':'+id);
		if (val != undefined) {
			// デコード
			var tmp = val.split(":");
			if (tmp.length >= 1) {	ret.title = unescape(tmp[0]);	}
			if (tmp.length >= 2) {	ret.date = unescape(tmp[1]);	}
			if (tmp.length >= 3) {	ret.data = unescape(tmp[2]);	}
		}
		return ret;
	};
	// Cookieデータの保存
	this.set = function(id, dat) {
		if (!this.AVAILABLE) {
			return undefined;
		}
		var cid = this.KEY+':'+id;
		if (dat != undefined) {
			// エンコードして追加
			var val = escape(dat.title) + ':' + escape(dat.date) + ':' + escape(dat.data);
			return this.COOKIE.set(cid, val);
		} else {
			// 削除
			return this.COOKIE.set(cid);
		}
	};

	// 日付を返す関数
	this.date = function() {
		var today = new Date();
		var y = today.getYear() % 100;
		if (y < 10) {	y = '0' + y;	}
		var m = today.getMonth() + 1;
		if (m < 10) {	m = '0' + m;	}
		var d = today.getDate();
		if (d < 10) {	d = '0' + d;	}
		return y + '/' + m + '/' + d;
	}

	// アクション
	// 表示名の変更
	this.rename = function(default_value) {
		if (!this.AVAILABLE) {
			return undefined;
		}
		var id = select_value(this.ID);
		var dat = this.get(id);
		// デフォルト値
		var val = "";
		if (default_value != undefined) {
			val = default_value;
		}
		if (dat.title != undefined) {
			val = dat.title;
		}
		if (default_value == undefined && dat.title == undefined) {
			alert('データが保存されていません。');
			return false;
		}
		// 確認して更新・削除
		var ret;
		var name = prompt("データの名前を入力してください。空欄にするとデータは削除されます。", val);
		if (name != undefined) {
			if (name == "") {
				// 削除
				if (confirm('データを削除します。')) {
					this.set(id);
				}
			} else {
				// 更新
				dat.title = name;
				ret = this.set(id, dat);
			}
		}
		// 選択肢を更新
		this.option(id, 1);
		return ret;
	};


	// データのロード
	this.load = function() {
		if (!this.AVAILABLE) {
			return undefined;
		}
		var id = select_value(this.ID);
		var dat = this.get(id);
		if (dat.data != undefined) {
			return this.load_action(dat);
		} else {
			alert('データが保存されていません。');
		}
		return false;
	};
		// 読み出したデータをどうするかを定義(オーバーライドする)
		this.load_action = function(dat) {
			return dat.data;
		}

	// データの保存
	this.store = function() {
		if (!this.AVAILABLE) {
			return undefined;
		}
		var id = select_value(this.ID);
		var dat_save = this.store_action(id);
		var dat = this.get(id);
		var name = dat.title;
		if (name == undefined) {
			name = dat_save.title;
		}
		// 最初に保存する名前を取得
		if (this.rename(name) == undefined) {
			// キャンセル or 削除
			return false;
		}
		// 保存データの取得
		var dat = this.get(id);
			dat.data = dat_save.data;
			dat.date = dat_save.date;
		// 保存
		var ret = this.set(id, dat);
		// 再描画
		this.option(id, 1);
		return ret;
	};
	// データをどのように取得するかを定義(オーバーライドする)
		this.store_action = function(id) {
			var dat = this.get(id);
			return dat;
		}
	return this;
}


// ページの上のディレクトリ名を求める
function parent_directory_name() {
	var ret = ((document.location.href+"").split('?'))[0];
	ret = ret.substring(0, ret.lastIndexOf('/'));
	ret = ret.substring(ret.lastIndexOf('/')+1, ret.length);
	if (ret.length > 8) {
		ret = 'top';
	}
	return ret;
}

// page : home, skill, quest, item, misc, (bbs), (undefined)
// child : 0: not child page (default), 1: child page (with same depth as page top), -1 (with different depth (for misc))
function generate_navi(page, child, child_parent) {
	var navi = '<div class="navi">';
	navi += navi_link('home', page, child, child_parent);
	navi += navi_link('skill', page, child, child_parent);
	navi += navi_link('quest', page, child, child_parent);
	navi += navi_link('item', page, child, child_parent);
	navi += navi_link('misc', page, child, child_parent);
	if (child != undefined) {
		navi += '<em>' + child + '<\/em>' + ' | ';
	}
	navi += navi_link('bbs', page, child, child_parent);
	navi += '<\/div>';
	element('navi').innerHTML = navi;
}
function navi_link(page, arg_page, arg_child, arg_child_parent) {
	var path_list = {
		'home':  ['index.html', 'ホーム'],
		'skill': ['skill/index.html', 'スキル'],
		'quest': ['quest/index.html', 'クエスト'],
		'item':  ['item/index.html', 'アイテム'],
		'misc':  ['all.html', 'いろいろ'],
		'bbs':   ['cgi-bin/bbs/index.cgi', '連絡帳']
	};
	if (arg_child != undefined && page != arg_page
	  && page != 'home' && page != 'bbs'
	) {
		return "";
	}
	var path_base = "../";
	if (arg_page != undefined) {
		if (arg_page == 'home' || arg_page == 'misc') {
			path_base = './';
		}
		if (arg_child != undefined && !arg_child_parent) {
			path_base = '../';
		}
	}
	var link = '<a href="' + path_base + path_list[page][0] + '">' + path_list[page][1] + '<\/a>';
	if (arg_page != undefined && page == arg_page) {
		if (arg_child == undefined || arg_child == 0) {
			link = '<em>' + path_list[page][1] + '<\/em>';
		} else {
			link = '<em><a href="' + path_base + path_list[page][0] + '">' + path_list[page][1] + '<\/a><\/em>';
		}
	}
	if (page =='home' || arg_child != undefined && page == arg_page) {
		link += ' &gt; ';
	} else if (page != 'bbs') {
		link += ' | ';
	}
	return link;
}


// カウンタ
function count(arg, opt) {
	var skip = ((document.location.href+"").indexOf('/ecotee.hp.infoseek.co.jp/')!=6);
	if (skip) {
		if (element("note")) {
			var a = element("note").getElementsByTagName("a");
			for (var i in a) {
				if (a[i].href && a[i].href.indexOf("http://ec.") >= 0) {
					a[i].href = "javascript:alert('リンクはOFFになっています。');";
				}
			}
		}
		return 0;
	}
	var cnt = "../cgi-bin/count.cgi?" + ((opt==undefined)?parent_directory_name():opt);
	if (arg == undefined || (arg.indexOf(";") < 0 && !(document.referrer == undefined || document.referrer == ""))) {
		cnt += ';' + document.referrer;
	} else {
		cnt += ';' + arg;
	}
	var img = new Image();
	img.src= cnt;
}


