$(function() {
	var base = "/denzai/product/";
	if(location.protocol == 'https:') {
		base = "http://" + location.hostname + base;
	}
	var max = 5;
	var cookie_name = 'DENKAHISTORY';
	var cookie_day = 30;
	var cookie_path = '/';
	
	var history = {
		data: '',
		init: function() {
			var cs = document.cookie.split(/ *; */);
			for(var i=0 ; i<cs.length ; i++) {
				var pair = cs[i].split(/ *= */);
				if(pair[0] == cookie_name) {
					this.data = this.load(pair[1]);
					return;
				}
			}
		},
		load: function(str) {
			return decodeURIComponent(str);
		},
		save: function(data) {
			var expdate = new Date();
			expdate.setTime(expdate.getTime()+cookie_day*24*60*60*1000);
			var exp = '; expires='+expdate.toUTCString();
			var path = '; path='+cookie_path;
			document.cookie = [cookie_name,'=',encodeURIComponent(data),exp,path].join('');
		},
		
		param: function(url) {
			var p = url.substr(url.lastIndexOf('/')+1);
			return 'id=' + p.substr(0, p.lastIndexOf('.'));
		},
		
		// add history, update this.data, save to cookie
		add: function(url, title) {
			var p = this.param(url);
			var new_data = [ { url: url, title: title } ];
			var data = this.list();
			for(var i=0 ; i<data.length ; i++) {
				if(data[i].param != p) {
					new_data.push(data[i]);
				}
				if(new_data.length == max) {
					break;
				}
			}
			var sub = [ ];
			for(var i=0 ; i<new_data.length ; i++) {
				sub.push(this.pack(new_data[i]));
			}
			this.data = sub.join(' ');
			this.save(this.data);
		},
		
		// convert between serialized string and hash
		pack: function(data) {
			var p = this.param(data.url);
			return p+','+encodeURIComponent(data.title);
		},
		unpack: function(str) {
			var pair = str.split(/,/);
			var id = pair[0].replace(/id=/, '');
			return { param: "id="+id, url: base+id+'.html', title: decodeURIComponent(pair[1]) };
		},
		
		// return array of hash
		list: function() {
			var result = [ ];
			if(this.data != '') {
				var data = this.data.split(/ /);
				for(var i=0 ; i<data.length ; i++) {
					result.push(this.unpack(data[i]));
				}
			}
			return result;
		}
	};
	
	history.init();
	var name = document.getElementById('product_name');
	if(name && name.tagName != 'INPUT') {
		history.add(location.href, name.innerHTML);
	}
	var target = document.getElementById('product_history_list');
	if(target) {
		var list = history.list();
		var html = [ ];
		for(var i=0 ; i<list.length ; i++) {
			var h = list[i];
			html.push('<li><a href="'+h.url+'">'+h.title+'</a>');
		}
		target.innerHTML = '<ul>'+html.join('')+'</ul>';
	}
});

