// JavaScript Document

var History = function () { this.initialize.apply(this, arguments) };

History.prototype = {

	limit: 10,
	
	_manager: null,
	_list: [],
	_name: null,

	_managerName: null,
	_switcherName: null,

	_targetElement: null,
	_onElement: null,
	_offElement: null,


	initialize: function (name, switcher, target, on, off, options) {

		this._managerName  = name;
		this._switcherName = switcher;

		this._manager = new CookieManager();

		this._targetElement = $(target);
		this._onElement = $(on);
		this._offElement = $(off);
		
		this.options = options || {};
		this._onElement.observe('click', this.onHistoryActivate.bindAsEventListener(this));
		this._offElement.observe('click', this.onHistoryDeactivate.bindAsEventListener(this));
	},

	setupList: function () {

		var self = this;

		if (this.isAvailable()) {
			var cookie = this.getManager().getCookie(this.getManagerName());

			if (cookie != null) {
				
				// cookieデータを配列に変換しデータに格納
				var items = cookie.split('%2C');
				items.each(function (i) { self.addItem(i) });

				this.refleshList();
			} else {
				this._targetElement.innerHTML = 'エンジニアアンテナでご覧頂いた閲覧履歴が表示されます。';
			}

		} else {
			this._onElement.src  = '/image/sub/h3_1_on1.gif';
			this._offElement.src = '/image/sub/h3_1_off2.gif';
			this._targetElement.style.display = 'none';
			this._targetElement.innerHTML = '';				
		}
	},

	historyPage: function (page) {
		var self = this;

		if (this.isAvailable()) {
			var cookie = this.getManager().getCookie(this.getManagerName());
			if (cookie != null) {		
				// cookieデータを配列に変換しデータに格納
				var items = cookie.split('%2C');
				items.each(function (i) { self.addItem(i) });

				this.createPage(page);
			}
		}
	},

	isAvailable: function () {
		var ret;
		if ((ret = this.getManager().getCookie(this.getSwitcherName())) == null) {
			this.getManager().setCookie(this.getSwitcherName(), 1);
			return true;
		}
		return (ret == "1");
	},

	onHistoryActivate: function () {
		var self = this;

		if (this._targetElement.style.display == 'none') {

			if ( location.pathname.match(/^\/word\//) ) {
				var path = location.pathname.split('/');
				var word = encodeURIComponent(path[2]);
				var data = "";
				
				data = [0, word].join("%7C");
				this.addItem(data);
				this.refleshList();
				this.getManager().setCookie(this.getManagerName(), data);
			} else {
				this._targetElement.innerHTML = 'エンジニアアンテナでご覧頂いた閲覧履歴が表示されます。';
			}
			
			this._onElement.src  = '/image/sub/h3_1_on2.gif';
			this._offElement.src = '/image/sub/h3_1_off1.gif';
			this._targetElement.style.display = 'block';
			this.getManager().setCookie(this.getSwitcherName(), 1);
		}
	},

	onHistoryDeactivate: function () {
		var self = this;
		
		if (this._targetElement.style.display != 'none') {
			this.getManager().clearCookie(this.getManagerName());
			this._onElement.src  = '/image/sub/h3_1_on1.gif';
			this._offElement.src = '/image/sub/h3_1_off2.gif';
			this._targetElement.style.display = 'none';
			this._targetElement.innerHTML = '';
		}
		
		this.clearList();
		this.getManager().setCookie(this.getSwitcherName(), 0);
	},

	refleshList: function () {
		this.createPage(0);
	},
	
	createPage: function (page) {
		
		var total = this.getTotal();
		if (total == 0) {
			this._targetElement.innerHTML = 'エンジニアアンテナでご覧頂いた閲覧履歴が表示されます。';
			return;
		}
		
		var pages = Math.ceil(total / this.limit);
		var pager = '';
		var next_page = '';
		var prev_page = '';
		var page_list = '';

		this._targetElement.innerHTML = '';
		
		for (var i = 0; i < pages; i++) {
			this.createList(page, i, this.limit);
			
			if (page == i) {
				page_list += '<span class="current">'+(i+1)+'</span>&nbsp;';
			} else {
				page_list += '<span><a href="javascript:historyPage('+i+');">'+(i+1)+'</a></span>&nbsp;';
			}
		}

		if (page == 0){
			prev_page = '<span class="inactive"><span class="min">&lt;&lt;</span> 前へ</span>';
		} else {
			prev_page = '<a href="javascript:historyPage('+(page-1)+');"><span class="min">&lt;&lt;</span> 前へ</span></a>';
		}

		if (page == (pages-1)){
			next_page = '<span class="inactive"><span class="min">次へ <span class="min">&gt;&gt;</span></span>'
		} else {
			next_page = '<a href="javascript:historyPage('+(page+1)+');">次へ <span class="min">&gt;&gt;</span></a>';
		}
		
		pager += '<div class="pager2">';
		pager += prev_page;

		pager += '<span class="pages">';
		pager += page_list;
		pager += '</span>';
		
		pager += next_page;
		pager += '</div>';
		
		if (pages > 1){
			this._targetElement.insert(pager);
		}
	},

	createList: function (page, pages, limit) {
		var self = this;

		var list = document.createElement('ul');
		if ( this.options.list_class ) list.className = this.options.list_class;

		if (page == pages) {
			list.style.display = 'block';
		} else {
			list.style.display = 'none';
		}
		
		this.getList(pages, limit).each(function (i) {
		
			var item = document.createElement('li');
			if ( self.options.item_class ) item.className = self.options.item_class;
			
			var data = i.split('%7C');
			var word = decodeURIComponent(data[1]);
			var wsplit = decodeURIComponent(word);
			var result = "";
			
			for (var i =0; i < wsplit.length; i++) {
				if (i%5 == 0) {
					result += '<wbr />';
				}
				result += wsplit.charAt(i);
			}

			item.innerHTML = '<a href="/word/'+ word +'" class="dot">' + result + '</a>';
		
			list.appendChild(item);
		});
		
		this._targetElement.insert(list);
	},

	getManager: function () {
		var self = this;
		return this._manager;	
	},

	getList: function (page, limit) {
		var self = this;
		var start = limit*page;
		var end   = start+limit; 
		return this._list.slice(start, end);
	},

	getTotal: function () {
		var self = this;
		return this._list.length;
	},


	getName: function () {
		var self = this;
		return this._name;
	},

	getManagerName: function () {
		var self = this;
		return this._managerName;
	},

	getSwitcherName: function () {
		var self = this;
		return this._switcherName;
	},

	clearList: function () {
		this._list = [];
	},
	
	addItem: function (item) {
		this._list.push(item);
	}

};


Event.observe(window, 'load', function() {
	$$('a[href^=#]:not([href=#])').each(function(element) {
		element.observe('click', function(event) {
			new Effect.ScrollTo(this.hash.substr(1));
			Event.stop(event);
		}.bindAsEventListener(element))
	})
})

function historyPage(page)
{
	var history = new History(
		'engineer[Word][history]',
		'engineer[Word][switch]',
		'history',
		'history_on',
		'history_off',
		{
			'list_class' : "history clearfix"
		}
	);
	
	history.createPage(page);
}




