(function(){

var myAgent = navigator.userAgent;
var whetherWin  = myAgent.indexOf('Windows');
var whetherIE  = myAgent.indexOf('MSIE');
var whetherIE6 = myAgent.indexOf('MSIE 6');
var whetherVST = myAgent.indexOf('NT 6.0');
var whetherOpe = myAgent.indexOf('Opera');
var whetherSfa = myAgent.indexOf('Safari');
var whetherChr = myAgent.indexOf('Chrome');
var asIphone   = myAgent.indexOf('iPhone');
var asIpad     = myAgent.indexOf('iPad');

var entriesArray = new Array();
var entriesNum = 0;

$.ajax({
	scriptCharset: 'utf-8',
	type: 'GET',
	url: 'http://panda-space.com/ps_entry.xml',
	cache: true,
	dataType: 'xml',
	success: function(_xml){
		$(_xml).find('entry').each(function(i){
			entriesArray.push($(this));
			entriesNum = i+1;
		});
		$(document).ready(function(){
			psIndex.initialize();
		});
	},
	error: function(XMLHttpRequest, textStatus, errorThrown){
		//console.log(XMLHttpRequest, textStatus, errorThrown);
	}
});

var psIndex = {
	optionObj: {
		pageNum : 1,
		maxList : 8
	},
	setDOM: {
		_DOCMENT       : $(document),
		_WINDOW        : $(window),
		_HTML          : $('html'),
		_BODY          : 'body',
		_EntryArticles : 'div#entrySet > article'
	},
	setPandaImg: function(){
		var panPosX = (whetherIE6 === -1) ? ($(window).width() - 460)  + 'px -40px':($(window).width() - 440)  + 'px -20px';
		$('body').stop().animate(
			{ backgroundPosition: panPosX},
			600,  'easeOutBack'
		);	
	},
	setSubBG: function(){
		if(whetherIE >= 0 || whetherOpe >= 0){
			$('html').css({
				'background-image'   :'url(img/index_bg.png)',
				'background-position':'center bottom',
				'background-repeat'  :'repeat-x',
				'background-color'   :'#130818'
			});
		};
	},
	scrollEntryTop: function(sellectEntry){
		$('html, body').delay(600).animate(
			 {scrollTop:sellectEntry.offset().top},
			 800, 'swing'
		 );
	},
	openEntry: function(myArticle, myAdd){
		var _self = this;
		var _entryID = parseInt(myAdd.slice(myAdd.indexOf('ID=')+3, myAdd.length), 10);
		
		function findEntryBody(_entryID){
			for(i=0; i<entriesNum; i++){
				var eachID = parseInt(entriesArray[i].find('entryID').text(), 10);
				if(_entryID == eachID){
					var _body = entriesArray[i].find('entryBody').text()
					var _more = entriesArray[i].find('entryMore').text()
					return (entriesArray[i].find('entryBody').text() + entriesArray[i].find('entryMore').text());
				}
			}
		}
		
		function replaceTags(setStr){
			var replaceStr = '';
			replaceStr = setStr.replace(/&quot;/g, "").replace(/&gt;/g, ">").replace(/&lt;/g, "<");
			if(whetherIE > -1){
				myArticle.children('section.entryBody').children('pre').css({'line-height':'0.6997em', 'background-position':'left -3px'});
				replaceStr = replaceStr.replace(/SECTION/g, "section").replace(/DIV/g, "div").replace(/H2/g, "h2").replace(/UL/g, "ul").replace(/LI/g, "li").replace(/A /g, "a ").replace(/A>/g, "a>").replace(/BACKGROUND-IMAGE/g, "background-image");
			}
			return replaceStr;
		}
		
		if(myArticle.children('section.entryBody').text().length < 17){
			myArticle.children('section.entryBody').prepend(findEntryBody(_entryID));
			myArticle.children('section.entryBody').find('pre').each(function(i){
				var encodeHTML = $(this).html();
				encodeHTML = replaceTags(encodeHTML);
				$(this).empty().text(encodeHTML);
			});
		}
		
		
		
		$('div#entryLink>ul').hide();
		myArticle.find('.fbComment').show();
		
		myArticle.removeClass('list').addClass('detail');
		
		myArticle.find('footer>p.more>a').text('ウインドウを閉じる');
		/*
		if(myArticle.prevAll('article.selectCat').length > 0){
			myArticle.children('footer').children('p.nextEntry').removeClass('hidden').show();
		};
		if(myArticle.nextAll('article.selectCat').length > 0){
			myArticle.children('footer').children('p.prevEntry').removeClass('hidden').show();
		};
		*/
		
		myArticle.nextAll('article.selectCat').fadeOut(300);
		myArticle.prevAll('article.selectCat').fadeOut(300);
		
		myArticle.children('figure.thumb').hide(
			0,function(){
				myArticle.children('section.entryBody').fadeIn(
					600,function(){
						var nowH = (whetherIE > -1) ? parseInt(myArticle.height(), 10) : parseInt(myArticle.css('height'), 10);
						var setH = ((Math.floor(nowH/315) + 1) *315) - 25;
						myArticle.animate({'min-height': setH + 'px'},200);
					}
				).removeClass('hidden');
			}
		).addClass('hidden');
		
		myArticle.stop().animate(
			{ 'width':'615px'},
			300,  'easeOutQuart'
		);
		
		myArticle.find('hgroup>h1').animate(
			{'width':'460px'},
			300, 'easeOutQuart',
			function(){
				$((whetherSfa > -1) ? 'body' : 'html').animate(			 
					{'scrollTop' : myArticle.offset().top},
					400, 'swing'
				 );
				//(whetherWin > -1) ? $('title').text(myArticle.find('h1').text() + ' : Panda Space') : null;
				location.href = 'index.html' + myAdd;
				_gaq.push(['_trackPageview',myAdd]);//GA Tag
			}
		);
	},
	closeEntry: function(myArticle, backToTopFlag){
		var _self = this;
		location.href = 'index.html#?=home';
		//(whetherWin > -1) ? $('title').text('Panda Space') : null;
		
		$('div#entryLink>ul').show();
		myArticle.find('.fbComment').hide();
		
		myArticle.removeClass('detail').addClass('list');
	
		myArticle.find('footer>p.more>a').text('続きを読む');
		//myArticle.children('footer').children('p.prevEntry').addClass('hidden');
		//myArticle.children('footer').children('p.nextEntry').addClass('hidden');
		
		myArticle.children('section.entryBody').hide();
		myArticle.children('figure.thumb').fadeIn(600).removeClass('hidden');
		
		myArticle.stop().animate(
			{'min-height':'290px'},
			300, 'easeOutQuart',
			function(){
				myArticle.find('hgroup>h1').animate(
					{'width':'220px'},
					300, 'easeOutQuart'
				);
				
				myArticle.animate(
					{ 'width':'300px'},
					300,  'easeOutQuart',
					function(){
						//記事間の直接移動時は無効
						if(backToTopFlag){
							myArticle.nextAll('article.selectCat').fadeIn(300);
							myArticle.prevAll('article.selectCat').fadeIn(300);
						
							$((whetherSfa > -1) ? 'body' : 'html').animate(
								 {scrollTop : myArticle.offset().top},
								 400, 'swing'
							);
							
							myArticle.filter('article.hidden').hide();
							_self.switchEntry(_self.optionObj.pageNum);
						}else{
							myArticle.hide();
						}
					}
				);
			}
		);
	},
	firstOpenEntry:function(_ADD){
		//All Entry set category
		$('div#entrySet>article').addClass('selectCat');
		var myArticle = $('div#entrySet>article').find('a[href*="' + _ADD + '"]').parents('article');
		this.openEntry(myArticle, _ADD);
	},
	entrySelectCat: function(_ADD){

		$('nav#gMenu>ul>li').removeClass('current');
		$('nav#gMenu>ul>li').each(function(i){
				$(this).find('a[href*="' + _ADD + '"]').parents('li').addClass('current');
		});
		
		location.href = 'index.html' + _ADD;
		//$.history.load(_ADD);
		_gaq.push(['_trackPageview',_ADD]);//GA Tag
		
		if(_ADD.indexOf('?=home') > -1){
			$(this.setDOM._EntryArticles).addClass('selectCat');
		}else{
			$(this.setDOM._EntryArticles).each(function(i){				   
				var myAdd = $(this).find('a').attr('href');
				
				if(myAdd.indexOf(_ADD) === -1){
					$(this).removeClass('selectCat');
				}else{
					$(this).addClass('selectCat');
				};
			});
		};
		this.optionObj.pageNum = 1;
		this.switchEntry(this.optionObj.pageNum);
	},
	switchEntry:function(_Link){
		
		var nowNum     = this.optionObj.pageNum;
		var maxNum     = $(this.setDOM._EntryArticles).filter('.selectCat').length;
		var maxListNum = this.optionObj.maxList;
		
		var maxPageNum = Math.ceil(maxNum/maxListNum);
		
		
		var targetNum = (_Link === 'Past→')? nowNum + 1:
						(_Link ===  '←New')? nowNum - 1: parseInt(_Link, 10);
		this.optionObj.pageNum = targetNum;
		
		$(this.setDOM._EntryArticles).filter(':not(.selectCat)').fadeOut(300, function(){
			$(this).addClass('hidden').hide();
		});
		
		var newBtn  = $('div#entryLink>ul>li:first-child');
		var pastBtn = $('div#entryLink>ul>li:last-child');
		
		(targetNum === 1) ?          newBtn.hide()  : newBtn.show();
		(targetNum === maxPageNum) ? pastBtn.hide() : pastBtn.show();
		$('div#entryLink>ul>li').filter(':not(:first-child, :last-child)').remove();
		for(i=0; i<maxPageNum; i++){
			$('div#entryLink>ul>li:last-child').before('<li><a href="">' + (i+1) + '</a></li>');
		}
		$('div#entryLink>ul>li').removeClass('current');
		$('div#entryLink>ul>li').filter(':eq('+ targetNum +')').addClass('current');
		
		
		
		$(this.setDOM._EntryArticles).filter('.selectCat').each(function(i){									 
			if( i >= (maxListNum*(targetNum-1)) && i < maxListNum*targetNum){
				$(this).removeClass('hidden').addClass('selectNum').show();
			}else{
				$(this).removeClass('selectNum').addClass('hidden').hide();
			};
		}); 
	},
	initialize: function(){
		
		var _self = this;
		this.switchLink = $('article>hgroup>h1>a, article>figure.thumb>a>img, article>footer>p.more>a');
		
		if(whetherWin > -1){
			$('body').css('font-family', '"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic Pro", HiraKakuPro-W3, Osaka, "メイリオ", Meiryo, "ＭＳ Ｐゴシック","MS PGothic", sans-serif');
		}
		
		$('.fbComment').hide();
		//=================================[Event Start]
		
		//=================================[Event:window.resize]
		$(window).bind('resize', function(){
			_self.setPandaImg ();
		});
		
		//=================================[Event:window.scroll]
		//=================================[Stop All scroll]
		$(window).bind('scroll', function () {
			$(document).stop();
		});
		
		//=================================[Event:backToTop.click]
		$('div#entryLink>p.backToTop>a').live('click', function(){
			$((whetherSfa > -1) ? 'body' : 'html').stop().animate(			 
				{'scrollTop':$('body').offset().top},
				800, 'swing'
			 );
			return false;
		});
		
		//==============================[Event:globalmenu.click]
		$('nav#gMenu ul>li>a').live('click', function(){
			var myAdd = $(this).attr('href');
			
			_self.closeEntry($('div article.detail'), true);
			_self.entrySelectCat(myAdd);
			
			return false;
		});
		
		//============================[Event:entry.switch.click]
		this.switchLink.bind('click', function(event){
			
			var myArticle = $(this).parent().parent().parent();
			var myAdd = myArticle.find('a').attr('href');
			var myIndex = myArticle.index();
			var myClass = myArticle.attr('class');
			
			if(myClass.indexOf('list') > -1){//====== Open Entry
				_self.openEntry(myArticle, myAdd);
			}else{//================================ Close Entry
				_self.closeEntry(myArticle, true);
			};
			
			return false;
		});
		
		//==[Event:entry.switch.mouseover & mousemove & mouseout]
		if(asIphone == -1 && asIpad == -1){
			this.switchLink.bind({
				'mouseover' : function(e){
					var _top  = e.pageY-34;
					var _left = e.pageX+4;
					var pText = ($(this).parents('article').attr('class').indexOf('list') > -1)? '続きを読む' : 'ウインドウを閉じる';
					$('body').append(
						$('<div />', {
							'class':'tip'
						})
						.css({
							'top'    :_top,
							'left'   :_left
						})
						.append($('<p/>').text(pText)).append((whetherSfa > -1 || whetherChr > -1)?'<div class="ar"></div>':null)
					);
				},'mousemove' : function(e){
					var _top  = e.pageY-34;
					var _left = e.pageX+4;
					$('body>div.tip').css({
						'top':_top,
						'left':_left
					})
				},'mouseout' : function(e){
					$('body>div.tip').remove();
				}	
			});
		}
		
		//=====================[Event:entry.commentSwitch.click]
		/*$('h3.commentHead>span.commentSwitch>a').live('click', function(){
			var linkURL = $(this).attr('href');
			var appendSec = $(this).parents('section.entryBody').next('section.commentForm').hide();
			appendSec.append($('<iframe/>', {
				'src':linkURL,
				'frameborder':'no'
			})).show(300);
			$(this).parents('span.commentSwitch').hide();
			return false;
		});*/
		
		//============================[Event:entry.number.click]
		$('div#entryLink>ul>li>a').live('click',function(){
			_self.switchEntry($(this).text());
			return false;
		});
		//===========================================[Event End]
		
		
		
		//=======================================[SET:Header.BG]
		(whetherIE6 > -1) ? null : _self.setPandaImg();
		_self.setSubBG();
		
		//=======================[LINK:Category&Entry.Permalink]
		var callURL = location.href;
		var suppURL = callURL.slice(callURL.indexOf('#'), callURL.length);
		(suppURL === 'l'||suppURL === '/') ? _self.entrySelectCat('#?=home') :
		(callURL.indexOf('?ID=') > -1)     ? _self.firstOpenEntry(suppURL)   : _self.entrySelectCat(suppURL);
		
	}
};
})();
