if(!window.MoriBLDG) MoriBLDG = {
   archive : {},
   pool : {},
   pager : {
      current : 1,
      perpage : 20,
      total : null
   },
   page : {
      year: null,
      month: null
   },
   grep : {
      year : 'all',
      term : 'all'
   }
};


(function() {
   var path = location.href.replace(/http:\/\/(.+?)\//, '');
   var m = path.match(/^en/) || path.match(/^cn/);
   if(m && m[0]) {
      $.extend({lang : m[0]});
   }
   else {
      $.extend({lang : 'ja'});
   }
})();


$.fn.localize = function(param) {
   var str = this[0];
   if(param == 'year') {
      return ($.lang == 'ja')? str.toString() + '年' : str.toString();
   }
   else if(param == 'month') {
      return ($.lang == 'ja')? str + '月' : str;
   }
   else if(param == 'date') {
      if($.lang == 'ja') {
         var l = str.split('-');
         return l[0] + '月' + l[1] + '日';
      }
      else {
         return str;
      }
   }
   else if(param == 'db') {
      return ($.lang == 'ja')? str : '/' + $.lang + str;
   }
   else if(param == 'select') {
      return ($.lang == 'ja')? str : 'all';
   }
};

$(function() {
    $.get($(['/company/press/release/db.xml']).localize('db'), {}, function(xml) {
        MoriBLDG.archive = $(xml.documentElement).find('article');
        MoriBLDG.renderYear();
        MoriBLDG.init();
    }, 'xml');

    if($.lang == 'ja') {
		$("dl.matter select").change(MoriBLDG.termSelected);
        $("dl.facility select").change(MoriBLDG.termSelected);
    }

    $('#releaseSearch > form').submit(function() {
        var render_list = MoriBLDG.filteredList();
        MoriBLDG.pagerInit(render_list);
        MoriBLDG.renderList();
        return false;
    });
});

MoriBLDG.init = function() {
	var render_list = {};
	if (location.hash) {
        var m = /^#(.*?)\/(.*?)\/(.*?)$/.exec(location.hash.replace(/-/g, 'all'));
		if (m) {
			MoriBLDG.grep.year = m[1];
			MoriBLDG.grep.term = decodeURIComponent(m[2]);
            render_list = MoriBLDG.filteredList();
			MoriBLDG.pagerInit(render_list);
			MoriBLDG.pager.current = m[3];
			MoriBLDG.setSelection();
        }
		else {
			render_list = MoriBLDG.archive;
            MoriBLDG.pagerInit(render_list);
		}
	}
	else {
		render_list = MoriBLDG.archive;
        MoriBLDG.pagerInit(render_list);
	}

	MoriBLDG.renderList();
};

MoriBLDG.setSelection = function() {
	MoriBLDG.setSelectionYear();
	MoriBLDG.setSelectionTerm();
};

MoriBLDG.setSelectionYear = function() {
	var y = MoriBLDG.grep.year;
	if (y == 'all') return;
    $('.year option').filter(function() {
		return $(this).text().indexOf(y) >= 0;
	})
    .attr({selected: 'selected'});
};

MoriBLDG.setSelectionTerm = function() {
	var t = MoriBLDG.grep.term;
	if (t == 'all') return;
	var f = function() { return $(this).text() == t; };
	var d = function(w)	{
		var	x =	{ matter : 'facility', facility : 'matter' };
		$('dl.'+w+' select').css('background', '#CCCCCC')
			.find('option').removeAttr('selected').eq(0).attr({selected: 'selected'});
		$('dl.'+x[w]+' select').removeAttr('style');
	};
	var l = $('dl.matter option').filter(f);
	if (l.length < 1) {
        l = $('dl.facility option').filter(f);
		d('matter');
	}
	else {
		d('facility');
    }
	l.attr({selected: 'selected'});
};

MoriBLDG.filteredList = function() {
    var render_list = MoriBLDG.archive;
    if(MoriBLDG.grep.year != 'all') {
        render_list = render_list.filter(function() {
			return $(this).find('date').text().indexOf(MoriBLDG.grep.year) == 0;
		});
    }
    if(MoriBLDG.grep.term != 'all') {
        var t = MoriBLDG.grep.term;
        render_list = render_list.filter(function() {
			return $(this).find('term:contains("'+t+'")').length > 0;
		});
	}
	return render_list;
};

MoriBLDG.pagerInit = function(list) {
	MoriBLDG.pool = list;
	MoriBLDG.pager.total = Math.ceil(list.length / MoriBLDG.pager.perpage);
	MoriBLDG.pager.current = 1;
	MoriBLDG.pager.position = 0;
};

MoriBLDG.termSelected = function() {
	$(this).find('option:selected').each(function() {
		var t = $(this).text();
		MoriBLDG.grep.term = (t.match(/^すべての/))? 'all' : t;
		MoriBLDG.setSelectionTerm();
	});
};

MoriBLDG.renderYear = function() {
	var _y = {};
	MoriBLDG.archive.each(function() {
		var d = $(this).find('date').text().match(/^(\d{4})/)[0];
		_y[d] = true;
	});
	var y_sel = $('#releaseSearch > form > dl.year').find('select');
	var years = [];
	$.each(_y, function(key, val) { years.push(parseInt(key)); });
	if($.lang == 'ja') {
		$('<option />').text('すべての年から探す').click(function() {
			MoriBLDG.grep.year = 'all';
		}).appendTo(y_sel);
	}
	$.each(years.sort().reverse(), function(i, val) {
		var opt = $('<option />').text($([val]).localize('year'));
		opt.appendTo(y_sel);
	});
	y_sel.change(function () { $(this).find("option:selected").each(function () {
		MoriBLDG.grep.year = (parseInt($(this).text()) != 'NaN')
			? parseInt($(this).text())
			: 'all';
	}); });
};

MoriBLDG.renderList = function() {
	$('#releaseIndex').find("*").remove();
	var pager = MoriBLDG.renderPager();
	pager.clone(true).appendTo('#releaseIndex');
	var perpage = MoriBLDG.pager.perpage;
	var p = (MoriBLDG.pager.current - 1) * perpage;
	MoriBLDG.pool.filter(function(i) { return p <= i && i < p + perpage; })
		.each(MoriBLDG.renderThisPage);
	pager.clone(true).appendTo('#releaseIndex');
	MoriBLDG.makeLocHash();
};

MoriBLDG.renderThisPage = function(i, article) {
	var _m = $(article).find('date').text().match(/(\d{4})(\d{2})(\d{2})/);
	var y = _m[1], m = _m[2], d = _m[3];
	if(i == 0 || MoriBLDG.page.year == null || MoriBLDG.page.year.toString() != y) {
		MoriBLDG.page.year = parseInt(y);
		$('<h2 />').text($([MoriBLDG.page.year]).localize('year')).appendTo('#releaseIndex');
	}
	if(i == 0 || MoriBLDG.page.month == null || MoriBLDG.page.month != m) {
		MoriBLDG.page.month = m;
		$('<h3 />').text($([MoriBLDG.page.month]).localize('month')).appendTo('#releaseIndex');
		$('<dl />').appendTo('#releaseIndex');
	}
	var dl = $('#releaseIndex > dl:last');
	$('<dt />').text($([m + '-' + d]).localize('date')).appendTo(dl);
	$('<dd><a /></dd>').find('a')
		.attr('href', $(article).find('link').text())
		.text($(article).find('title').text()).end().appendTo(dl);
};

MoriBLDG.makeLocHash = function() {
	var year = MoriBLDG.grep.year;
	var	term = MoriBLDG.grep.term;
	var	page = MoriBLDG.pager.current;
	if (year == 'all') year = '-';
	if (term == 'all') term = '-';
	location.hash =	[year,encodeURIComponent(term),page].join('/');
};

MoriBLDG.makePagerArray = function() {
	var total = MoriBLDG.pager.total;
	var _pager = [];
	var i = 1;
	while(i <= total) {
		_pager.push(i++);
	}
	return _pager;
};

MoriBLDG.renderPager = function() {
	var pager_array = MoriBLDG.makePagerArray();

	var ul = $('<ul />');
	var page = MoriBLDG.pager.current;
	$.each(pager_array, function(val, index) {
		val++;
		var li = $('<li />');
		if(page == val) {
			$('<em />').text(val).appendTo(li);
		}
		else {
			$('<a />').text(val)
				.attr('href', 'javascript:void(0);')
				.click(function() {
					MoriBLDG.pager.current = $(this).text();
					MoriBLDG.renderList();
				}).appendTo(li);
		}
		ul.append(li);
	});

	return $('<div />').addClass('pager').append(ul);
};
