// Copyright (c) 2008 CogniTom Academic Design (http://bookreader.cognitom.com/)
/* -----------------------------------------------------------------------------
   2009.07.29　Arranged by dreamseeker. http://d-s-b.jp/
   
   ※このスクリプトは、bookreader.jsを改変したものです。
   　カスタマイズする課程で元ソースとはかなり内容が変わっています。
   　ここに記述された内容を参考にされる方は、ご注意ください。
   
   ※このファイルの再利用(参考にされた場合も含む)に起因して問題が発生した場合、
   　dreamseekerでは一切の責任を負いません。あらかじめご了承願います。
   ----------------------------------------------------------------------------- */
var j$ = jQuery.noConflict();

var BookReader = {
	Version: '0.4.6',
	Released: '20090418',
	
	FontSize: 'S',//フォントサイズ (S,M,L)
	NowLoading: false,
	CookieManager: null,
	AutoLoading: true,
	original: null,
	dom: null,
	pages: [''],
	anchors: [],
	currentline: 0,
	currentpage: 0,
	ImageStack: [],
	AnchorStack: [],
	loadTheme: function() {
		var s = $A(document.getElementsByTagName("script")).find(function(s){ return (s.src && s.src.match(/bookreader(\.src)?\.js(\?.*)?$/)) });
		var language = (tmp = s.src.match(/\?.*language=([a-z0-9_]*)/)) ? tmp[1] : 'ja';
		var path = s.src.replace(/bookreader(\.src)?\.js(\?.*)?$/,'');
		var themePath = path+'themes/';
		var os = 'default';
		document.write('<sc'+'ript type="text/javascript" src="/js/bookreader/'+language+'.js"></script>');
		document.write('<sc'+'ript type="text/javascript" src="/js/bookreader/'+os+'.js"></script>');
	},
	autoload: function(){
		if (BookReader.AutoLoading) BookReader.load();
		
		if (anc = location.hash) BookReader.go2anchor(anc);
	},
	load: function(){
		BookReader.original = $$('div#bookreader').first();
		BookReader.dom = document.getElementById("br_body");
		
		BookReader.updatePages();
		BookReader.setKeyEvent();
	},
	updatePages: function(){
		if (this.NowLoading)
			return;
		this.NowLoading = true;
		BookReader.makePages();
		BookReader.showPages();
		
		BookReader.go2first();
		this.NowLoading = false;
	},
	makePages: function(){
		BookReader.pages = [''];
		BookReader.anchors = [];
		BookReader.currentline = 0;
		BookReader.currentpage = 0;
		BookReader.original.childElements().each(function(elm){
			var tag = elm.tagName;
			
			if (elm.id) BookReader.AnchorStack.push(elm.id);
			c= j$(elm).attr("class");
			
			switch (tag){
				
				case 'FORM':					
					if (elm.id != ''){
						if (c != ''){
							BookReader.pages[BookReader.pages.length-1] += '<'+tag+' id="'+elm.id+'" class="'+c+'"'+' action="'+elm.action+'" method="'+elm.method+'">';
						} else {
							BookReader.pages[BookReader.pages.length-1] += '<'+tag+' id="'+elm.id+'"'+' action="'+elm.action+'" method="'+elm.method+'">';
						} 
					} else {
						if (c != ''){
							BookReader.pages[BookReader.pages.length-1] += '<'+tag+' class="'+c+'"'+' action="'+elm.action+'" method="'+elm.method+'">';
						} else {
							BookReader.pages[BookReader.pages.length-1] += '<'+tag+' action="'+elm.action+'" method="'+elm.method+'">';
						} 
					}
					BookReader.pages[BookReader.pages.length-1] += elm.innerHTML;
					BookReader.pages[BookReader.pages.length-1] += '</'+tag+'>';
					BookReader.currentline += 1;
					break;
				//	
				case 'HR':
					if (BookReader.currentline > 0) BookReader.insertPage();
					break;
				//
				default:
					if (elm.id != ''){
						if (c != ''){
							BookReader.pages[BookReader.pages.length-1] += '<'+tag+' id="'+elm.id+'" class="'+c+'">';
						} else {
							BookReader.pages[BookReader.pages.length-1] += '<'+tag+' id="'+elm.id+'">';
						} 
					} else {
						if (c != ''){
							BookReader.pages[BookReader.pages.length-1] += '<'+tag+' class="'+c+'">';
						} else {
							BookReader.pages[BookReader.pages.length-1] += '<'+tag+'>';
						} 
					}
					BookReader.pages[BookReader.pages.length-1] += elm.innerHTML;
					BookReader.pages[BookReader.pages.length-1] += '</'+tag+'>';
					BookReader.currentline += 1;
					break;
			}
		});
		BookReader.insertAnchor();
	},
	insertPage: function(){
		BookReader.insertAnchor();
		BookReader.pages.push(''); BookReader.currentline = 0;
	},
	insertAnchor: function(){
		if (BookReader.AnchorStack.length){
			BookReader.AnchorStack.each(function(anc){ BookReader.anchors[anc] = BookReader.pages.length-1; });
			BookReader.AnchorStack = [];
		}
		
	},
	insertImage: function(){
		if (BookReader.ImageStack.length){
			BookReader.ImageStack.each(function(image){ BookReader.pages.push(image); });
			BookReader.ImageStack = [];
		}
	},
	showPages: function(){
		var html = '';
		var t = 0.40;//ボタンの透明度
		BookReader.pages.each(function(page, index){
			html += '<DIV class="page"><DIV class="box">' + page + '</DIV><SPAN class="folio">'+(index+1)+' / '+BookReader.pages.length+'</SPAN></DIV>'; 
		});
		html = '<DIV style="width:'+ (BookReader.pages.length*(BookReader.Theme.PageWidth+1)+BookReader.Theme.PageMarginLeft) +'px" id="br_container">' + html + '</DIV>';
		html += '<A class="br_nav_button" id="br_nav_prev2" href="#" title="'+BookReader.Language.ButtonTitleGoToPrev2.replace('#',BookReader.Theme.Columns)+'" onclick="BookReader.go2prev2();return false;" onmouseover="new Effect.Opacity (this,{from:'+t+', to:0.99, duration:0.2})" onmouseout="new Effect.Opacity (this,{from:0.99, to:'+t+', duration:1.0})">&nbsp;</A>';
		html += '<A class="br_nav_button" id="br_nav_prev" href="#" title="'+BookReader.Language.ButtonTitleGoToPrev+'" onclick="BookReader.go2prev();return false;" onmouseover="new Effect.Opacity (this,{from:'+t+', to:0.99, duration:0.2})" onmouseout="new Effect.Opacity (this,{from:0.99, to:'+t+', duration:1.0})">&nbsp;</A>';
		html += '<A class="br_nav_button" id="br_nav_next" href="#" title="'+BookReader.Language.ButtonTitleGoToNext+'" onclick="BookReader.go2next();return false;" onmouseover="new Effect.Opacity (this,{from:'+t+', to:0.99, duration:0.2})" onmouseout="new Effect.Opacity (this,{from:0.99, to:'+t+', duration:1.0})">&nbsp;</A>';
		html += '<A class="br_nav_button" id="br_nav_next2" href="#" title="'+BookReader.Language.ButtonTitleGoToNext2.replace('#',BookReader.Theme.Columns)+'" onclick="BookReader.go2next2();return false;" onmouseover="new Effect.Opacity (this,{from:'+t+', to:0.99, duration:0.2})" onmouseout="new Effect.Opacity (this,{from:0.99, to:'+t+', duration:1.0})">&nbsp;</A>';
		html += '<TABLE id="br_pagenation" cellspacing="0">';
		BookReader.pages.each(function(page, index){
			html += '<TD id="br_pagenation_'+index+'" onclick="BookReader.go2page('+index+');">'+(index+1)+'</TD>'; 
		});
		html += '</TABLE>';
		html = '<DIV id="br_fixedframe">' + html + '</DIV>';
		BookReader.dom.innerHTML = html;
		
		//ナビゲーションボタンに透明度を設定
		setTimeout("new Effect.Opacity ('br_nav_prev2',{ from:0.00, to:"+t+", duration:0.5});", 200);
		setTimeout("new Effect.Opacity ('br_nav_prev',{ from:0.00, to:"+t+", duration:0.5});", 200);
		setTimeout("new Effect.Opacity ('br_nav_next2',{ from:0.00, to:"+t+", duration:0.5});", 200);
		
		//NEXTボタンだけ瞬かせる
		if (BookReader.pages.length <= 1){
			setTimeout("new Effect.Opacity ('br_nav_next',{ from:0.00, to:"+t+", duration:0.5});", 200);
		} else {
			/*setTimeout("new Effect.Opacity ('br_nav_next',{ from:0.00, to:0.99, duration:0.7});", 200);
			setTimeout("new Effect.Opacity ('br_nav_next',{ from:0.99, to:0.00, duration:0.7});", 1000);
			setTimeout("new Effect.Opacity ('br_nav_next',{ from:0.00, to:0.99, duration:0.7});", 1800);
			setTimeout("new Effect.Opacity ('br_nav_next',{ from:0.99, to:0.00, duration:0.7});", 2600);
			setTimeout("new Effect.Opacity ('br_nav_next',{ from:0.00, to:0.99, duration:0.7});", 3400);
			setTimeout("new Effect.Opacity ('br_nav_next',{ from:0.99, to:0.00, duration:0.7});", 4200);
			setTimeout("new Effect.Opacity ('br_nav_next',{ from:0.00, to:"+t+", duration:0.7});", 5000);*/
			setTimeout("new Effect.Opacity ('br_nav_next',{ from:0.00, to:"+t+", duration:0.5});", 200);
		}
	},
	go2anchor: function(anc){//ページ内ジャンプ
		if ((anc = anc.replace('#','')) && (BookReader.anchors[anc] || BookReader.anchors[anc] == 0)){
			p = BookReader.anchors[anc];
			if (p <= BookReader.currentpage) p++;
			setTimeout("BookReader.go2page("+p+")",200);
		}
	},
	go2prev2: function(){ BookReader.go2page(BookReader.currentpage-BookReader.Theme.Columns+1); },
	go2prev: function(){ BookReader.go2page(BookReader.currentpage); },
	go2next: function(){ BookReader.go2page(BookReader.currentpage+1); },
	go2next2: function(){ BookReader.go2page(BookReader.currentpage+BookReader.Theme.Columns); },
	go2first: function(){ BookReader.go2page(0); },
	go2last: function(){ BookReader.go2page(BookReader.pages.length-1); },
	go2page: function(p){
		container = $('br_container');
		if (!BookReader.NowLoading && p <= BookReader.currentpage) BookReader.currentpage = p - 1;
			else BookReader.currentpage = p;
		
		if (BookReader.currentpage < 0){
			BookReader.currentpage = 0;
			new Effect.Move (container,{ x: BookReader.Theme.PageMarginLeft-30, y: 0, mode: 'absolute', duration: 0.2});
			setTimeout("new Effect.Move (container,{ x: BookReader.Theme.PageMarginLeft, y: 0, mode: 'absolute', duration: 0.2})", 200);
		} else if (BookReader.currentpage > BookReader.pages.length-1){
			BookReader.currentpage = BookReader.pages.length-1;
			new Effect.Move (container,{ x: -(BookReader.currentpage*(BookReader.Theme.PageWidth+1)-BookReader.Theme.PageMarginLeft+30), y: 0, mode: 'absolute', duration: 0.2});
			setTimeout("new Effect.Move (container,{ x: -(BookReader.currentpage*(BookReader.Theme.PageWidth+1)-BookReader.Theme.PageMarginLeft), y: 0, mode: 'absolute', duration: 0.2})", 200);
		} else {
			new Effect.Move (container,{ x: -(BookReader.currentpage*(BookReader.Theme.PageWidth+1)-BookReader.Theme.PageMarginLeft), y: 0, mode: 'absolute', duration: 0.5});
		}
			
		//ページマーカーの移動
		BookReader.pages.each(function(page, p){
			$('br_pagenation_'+p).style.backgroundColor = '';
		});
		if ($('br_pagenation_'+BookReader.currentpage)) $('br_pagenation_'+BookReader.currentpage).style.backgroundColor = '#EFEFEF';
		if ($('br_pagenation_'+(BookReader.currentpage+1))) $('br_pagenation_'+(BookReader.currentpage+1)).style.backgroundColor = '#EFEFEF';
	},
	setKeyEvent: function(){
		Event.observe(document, 'keydown', function(e) {
			var c = (e.charCode) ? e.charCode : e.keyCode;
			switch (c){
				case 63232: case 63276: case 33: case 66: case Event.KEY_UP: BookReader.go2prev2();return false;//[↑]キー
				case 63233: case 63277: case 32: case 34: case Event.KEY_DOWN: BookReader.go2next2();return false;//[↓]キー
				case 63234: case 80: case Event.KEY_LEFT: BookReader.go2prev();return false;//[→]キー
				case 63235: case 78: case Event.KEY_RIGHT: BookReader.go2next();return false;//[←]キー
				case 63273: case 36: BookReader.go2first();return false;//[home]キー
				case 63275: case 35: BookReader.go2last();return false;//[end]キー
				//default: alert(e.keyCode);
			}
		});
	},
	deactivate: function(){
		BookReader.dom.style.display = 'none';
		BookReader.original.style.display = 'block';
	},
	activate: function(){
		BookReader.dom.style.display = 'block';
		BookReader.original.style.display = 'none';
	}
};

BookReader.loadTheme();
Event.observe(window, 'load', function() {
	BookReader.autoload();
	//
	j$("#br_pagenation td:last").addClass("last");

	// External Link
	var baseUrl = "http://blog.asob.tv/";
	j$("a[href^=http://]").not("[href^="+baseUrl+"]").click(function() {
		window.open(j$(this).attr("href"));
		return false;
	});
	
	// Fancy Zoom
	setupZoom();
	
	j$('#br_container .link-list > li').mouseover(function(){
		j$(this).addClass("hover");
	});
	
	j$('#br_container .link-list > li').mouseout(function(){
		j$(this).removeClass("hover");
	});
	
	j$('#br_container .link-list > li').click(function(){
		var url = j$("a",this).attr("href");	
		document.location = url;
	});
});