﻿



//------------------------------------------------------------------------
//------------------------------------------------------------------------

/* md5.js - MD5 Message-Digest
 * Copyright (C) 1999,2002 Masanao Izumo <iz@onicos.co.jp>
 * Version: 2.0.0
 * LastModified: May 13 2002
 *
 * This program is free software.  You can redistribute it and/or modify
 * it without any warranty.  This library calculates the MD5 based on RFC1321.
 * See RFC1321 for more information and algorism.
 */

/* Interface:
 * md5_128bits = MD5_hash(data);
 * md5_hexstr = MD5_hexhash(data);
 */

/* ChangeLog
 * 2002/05/13: Version 2.0.0 released
 * NOTICE: API is changed.
 * 2002/04/15: Bug fix about MD5 length.
 */


//  md5_T[i] = parseInt(Math.abs(Math.sin(i)) * 4294967296.0);
var MD5_T = new Array(
	0x00000000, 0xd76aa478, 0xe8c7b756, 0x242070db,
	0xc1bdceee, 0xf57c0faf, 0x4787c62a, 0xa8304613,
	0xfd469501, 0x698098d8, 0x8b44f7af, 0xffff5bb1,
	0x895cd7be, 0x6b901122, 0xfd987193, 0xa679438e,
	0x49b40821, 0xf61e2562, 0xc040b340, 0x265e5a51,
	0xe9b6c7aa, 0xd62f105d, 0x02441453, 0xd8a1e681,
	0xe7d3fbc8, 0x21e1cde6, 0xc33707d6, 0xf4d50d87,
	0x455a14ed, 0xa9e3e905, 0xfcefa3f8, 0x676f02d9,
	0x8d2a4c8a, 0xfffa3942, 0x8771f681, 0x6d9d6122,
	0xfde5380c, 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60,
	0xbebfbc70, 0x289b7ec6, 0xeaa127fa, 0xd4ef3085,
	0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8,
	0xc4ac5665, 0xf4292244, 0x432aff97, 0xab9423a7,
	0xfc93a039, 0x655b59c3, 0x8f0ccc92, 0xffeff47d,
	0x85845dd1, 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314,
	0x4e0811a1, 0xf7537e82, 0xbd3af235, 0x2ad7d2bb,
	0xeb86d391
	);

var MD5_round1 = new Array(
	new Array( 0, 7, 1), new Array( 1,12, 2),
	new Array( 2,17, 3), new Array( 3,22, 4),
	new Array( 4, 7, 5), new Array( 5,12, 6),
	new Array( 6,17, 7), new Array( 7,22, 8),
	new Array( 8, 7, 9), new Array( 9,12,10),
	new Array(10,17,11), new Array(11,22,12),
	new Array(12, 7,13), new Array(13,12,14),
	new Array(14,17,15), new Array(15,22,16)
	);

var MD5_round2 = new Array(
	new Array( 1, 5,17), new Array( 6, 9,18),
	new Array(11,14,19), new Array( 0,20,20),
	new Array( 5, 5,21), new Array(10, 9,22),
	new Array(15,14,23), new Array( 4,20,24),
	new Array( 9, 5,25), new Array(14, 9,26),
	new Array( 3,14,27), new Array( 8,20,28),
	new Array(13, 5,29), new Array( 2, 9,30),
	new Array( 7,14,31), new Array(12,20,32)
	);

var MD5_round3 = new Array(
	new Array( 5, 4,33), new Array( 8,11,34),
	new Array(11,16,35), new Array(14,23,36),
	new Array( 1, 4,37), new Array( 4,11,38),
	new Array( 7,16,39), new Array(10,23,40),
	new Array(13, 4,41), new Array( 0,11,42),
	new Array( 3,16,43), new Array( 6,23,44),
	new Array( 9, 4,45), new Array(12,11,46),
	new Array(15,16,47), new Array( 2,23,48)
	);

var MD5_round4 = new Array(
	new Array( 0, 6,49), new Array( 7,10,50),
	new Array(14,15,51), new Array( 5,21,52),
	new Array(12, 6,53), new Array( 3,10,54),
	new Array(10,15,55), new Array( 1,21,56),
	new Array( 8, 6,57), new Array(15,10,58),
	new Array( 6,15,59), new Array(13,21,60),
	new Array( 4, 6,61), new Array(11,10,62),
	new Array( 2,15,63), new Array( 9,21,64)
	);

function MD5_F(x, y, z) { return (x & y) | (~x & z); }
function MD5_G(x, y, z) { return (x & z) | (y & ~z); }
function MD5_H(x, y, z) { return x ^ y ^ z;          }
function MD5_I(x, y, z) { return y ^ (x | ~z);       }

var MD5_round = new Array(
	new Array(MD5_F, MD5_round1),
	new Array(MD5_G, MD5_round2),
	new Array(MD5_H, MD5_round3),
	new Array(MD5_I, MD5_round4)
	);

function MD5_pack(n32)
{
	return
		String.fromCharCode(n32 & 0xff) +
		String.fromCharCode((n32 >>> 8) & 0xff) +
		String.fromCharCode((n32 >>> 16) & 0xff) +
		String.fromCharCode((n32 >>> 24) & 0xff);
}

function MD5_unpack(s4)
{
	return
		(s4.charCodeAt(0)      ) |
		(s4.charCodeAt(1) <<  8) |
		(s4.charCodeAt(2) << 16) |
		(s4.charCodeAt(3) << 24);
}

function MD5_number(n)
{
	while (n < 0)
		n += 4294967296;
	while (n > 4294967295)
		n -= 4294967296;
	return n;
}

function MD5_apply_round(x, s, f, abcd, r)
{
	var a, b, c, d;
	var kk, ss, ii;
	var t, u;
	
	a = abcd[0];
	b = abcd[1];
	c = abcd[2];
	d = abcd[3];
	kk = r[0];
	ss = r[1];
	ii = r[2];
	
	u = f(s[b], s[c], s[d]);
	t = s[a] + u + x[kk] + MD5_T[ii];
	t = MD5_number(t);
	t = ((t<<ss) | (t>>>(32-ss)));
	t += s[b];
	s[a] = MD5_number(t);
}

function MD5_hash(data)
{
	var abcd, x, state, s;
	var len, index, padLen, f, r;
	var i, j, k;
	var tmp;
	
	state = new Array(0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476);
	len = data.length;
	index = len & 0x3f;
	padLen = (index < 56) ? (56 - index) : (120 - index);
	if(padLen > 0) {
		data += "\x80";
		for(i = 0; i < padLen - 1; i++)
			data += "\x00";
	}
	data += MD5_pack(len * 8);
	data += MD5_pack(0);
	len  += padLen + 8;
	abcd = new Array(0, 1, 2, 3);
	x    = new Array(16);
	s    = new Array(4);
	
	for(k = 0; k < len; k += 64) {
		for(i = 0, j = k; i < 16; i++, j += 4) {
			x[i] =
				(data.charCodeAt(j)          ) |
				(data.charCodeAt(j + 1) <<  8) |
				(data.charCodeAt(j + 2) << 16) |
				(data.charCodeAt(j + 3) << 24);
		}
		for(i = 0; i < 4; i++)
			s[i] = state[i];
		for(i = 0; i < 4; i++) {
			f = MD5_round[i][0];
			r = MD5_round[i][1];
			for(j = 0; j < 16; j++) {
				MD5_apply_round(x, s, f, abcd, r[j]);
				tmp = abcd[0];
				abcd[0] = abcd[3];
				abcd[3] = abcd[2];
				abcd[2] = abcd[1];
				abcd[1] = tmp;
			}
		}
		
		for(i = 0; i < 4; i++) {
			state[i] += s[i];
			state[i] = MD5_number(state[i]);
		}
	}
	
	return
		MD5_pack(state[0]) +
		MD5_pack(state[1]) +
		MD5_pack(state[2]) +
		MD5_pack(state[3]);
}

function MD5_hexhash(data)
{
	var i, out, c;
	var bit128;
	
	bit128 = MD5_hash(data);
	out = "";
	for(i = 0; i < 16; i++) {
		c = bit128.charCodeAt(i);
		out += "0123456789abcdef".charAt((c>>4) & 0xf);
		out += "0123456789abcdef".charAt(c & 0xf);
	}
	return out;
}

//------------------------------------------------------------------------
//------------------------------------------------------------------------

/* Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>
 * Version: 1.0
 * LastModified: Dec 25 1999
 * This library is free.  You can redistribute it and/or modify it.
 */

/*
 * Interfaces:
 * b64 = base64encode(data);
 * data = base64decode(b64);
 */


var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var base64DecodeChars = new Array(
	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
	52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
	-1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
	15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
	-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
	41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1
	);

function base64encode(str)
{
	var out, i, len;
	var c1, c2, c3;
	
	len = str.length;
	i = 0;
	out = "";
	while(i < len) {
		c1 = str.charCodeAt(i++) & 0xff;
		if(i == len)
			{
				out += base64EncodeChars.charAt(c1 >> 2);
				out += base64EncodeChars.charAt((c1 & 0x3) << 4);
				out += "==";
				break;
			}
		c2 = str.charCodeAt(i++);
		if(i == len)
			{
				out += base64EncodeChars.charAt(c1 >> 2);
				out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
				out += base64EncodeChars.charAt((c2 & 0xF) << 2);
				out += "=";
				break;
			}
		c3 = str.charCodeAt(i++);
		out += base64EncodeChars.charAt(c1 >> 2);
		out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
		out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
		out += base64EncodeChars.charAt(c3 & 0x3F);
	}
	return out;
}

function base64decode(str)
{
	var c1, c2, c3, c4;
	var i, len, out;
	
	len = str.length;
	i = 0;
	out = "";
	while(i < len) {
		/* c1 */
		do {
			c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
		} while(i < len && c1 == -1);
		if(c1 == -1)
			break;
		
		/* c2 */
		do {
			c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
		} while(i < len && c2 == -1);
		if(c2 == -1)
			break;
		
		out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
		
		/* c3 */
		do {
			c3 = str.charCodeAt(i++) & 0xff;
			if(c3 == 61)
				return out;
			c3 = base64DecodeChars[c3];
		} while(i < len && c3 == -1);
		if(c3 == -1)
			break;
		
		out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
		
		/* c4 */
		do {
			c4 = str.charCodeAt(i++) & 0xff;
			if(c4 == 61)
				return out;
			c4 = base64DecodeChars[c4];
		} while(i < len && c4 == -1);
		if(c4 == -1)
			break;
		out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
	}
	return out;
}

//------------------------------------------------------------------------
//------------------------------------------------------------------------

function pushF5(ievt)
{
	var evt = ievt;
	if(!evt)
		if(window.event)
			evt = event;
	if(evt.keyCode == 116){
		try{
			evt.keyCode = null;
		}catch(e){
		};
		if(evt.preventDefault)
			evt.preventDefault();
		evt.cancelBubble = true;
		evt.returnValue = false;
		reload_check();
		return false;
	};
	return true;
}

window.document.onkeydown  = pushF5;
window.document.onkeypress = pushF5;

//--------

var tagRLB = window.document.getElementById("reload_b");
var blkCGB = window.document.getElementById("change");
var link_flg_noreload = true;
var link_flg_nochange = true;
var link_flg_cooltime = false;
var link_uri_reload;

function reload_check()
{
	//if(HDAT_expires_time <= (new Date()).getTime()){
	if(!link_flg_noreload && !link_flg_cooltime){
		if(link_uri_reload)
			location.href = link_uri_reload;
		else
			location.href = location.href;
	}else{
		window.scrollTo(0, 0);
	};
}

function link_check()
{
	if(link_flg_noreload || link_flg_cooltime){
		tagRLB.style.color = "gray";
		tagRLB.style.textDecoration = "line-through";
	}else{
		tagRLB.style.color = "";
		tagRLB.style.textDecoration = "";
	};
	if(link_flg_cooltime || link_flg_nochange){
		var t = blkCGB.getElementsByTagName("a");
		for(var a = 0; a < t.length; a++){
			if(t[a].id == ""){
				t[a].style.color = "gray";
				t[a].style.textDecoration = "line-through";
				if(t[a].href != "javascript:;")
					t[a].back_href = t[a].href;
				t[a].href = "javascript:;";
			};
		};
	}else{
		var t = blkCGB.getElementsByTagName("a");
		for(var a = 0; a < t.length; a++){
			t[a].style.color = "";
			t[a].style.textDecoration = "";
			if(t[a].back_href)
				t[a].href = t[a].back_href;
		};
	};
}

function cooltime_start()
{
	var nt = new Date();
	var ntm = nt.getMinutes();
	var a = 0;
	while(a < HDAT_cooltimes.length && ntm > HDAT_cooltimes[a])
		a++;
	ntm = HDAT_cooltimes[a];
	while((a + 1) < HDAT_cooltimes.length && (ntm + 1) == HDAT_cooltimes[a + 1])
		ntm++, a++;
	ntm++;
	nt.setMinutes(ntm);
	nt.setSeconds(0);
	setTimeout(cooltime_end, Math.max(nt.getTime() - (new Date()).getTime() + 500, 100));
	link_flg_cooltime = true;
	link_check();
}

function cooltime_end()
{
	var nt = new Date();
	var ntm = nt.getMinutes();
	var a = 0;
	while(a < HDAT_cooltimes.length && ntm > HDAT_cooltimes[a])
		a++;
	ntm = HDAT_cooltimes[a];
	nt.setMinutes(ntm);
	nt.setSeconds(0);
	setTimeout(cooltime_start, Math.max(nt.getTime() - (new Date()).getTime() - 2000, 100));
	link_flg_cooltime = false;
	link_check();
}

{
	link_uri_reload = tagRLB.href;
	tagRLB.href = "javascript:reload_check();";
	link_check();
	var f1 = function(){
		link_flg_noreload = false;
		link_check();
	};
	var f2 = function(){
		link_flg_nochange = false;
		link_check();
	};
	setTimeout(f1, Math.max(HDAT_expires_time - (new Date()).getTime(), 2000));
	setTimeout(f2, 2000);
};

{
	if(HDAT_cooltimes.length > 0){
		HDAT_cooltimes[HDAT_cooltimes.length] = HDAT_cooltimes[0] + 60;
		
		//var nt = new Date();
		//var ntm = nt.getMinutes();
		//if(HDAT_cooltimes.indexOf(ntm) != -1) // IE6 が対応してない！
		//	cooltime_start();
		//else
			cooltime_end();
	};
};

//--------

var blkIFB = window.document.getElementById("infos");
var tagIFB = window.document.getElementById("infos_b");
var infos_flg = true;

function open_infos()
{
	if(!blkIFB)
		return;
	if(infos_flg){
		blkIFB.style.display = "none";
		if(!tagIFB.firstChild){
			var mj = "お知らせ";
			var date = blkIFB.getAttribute("DATE");
			if(date != "")
				mj += "(" + date + ")";
			var mjn = window.document.createTextNode(mj);
			tagIFB.appendChild(mjn);
		};
		infos_flg = false;
	}else{
		blkIFB.style.display = "block";
		infos_flg = true;
	};
}

open_infos();

//--------

var blkBSB = window.document.getElementById("bbss");
var tagBSB = window.document.getElementById("bbss_b");
var bbss_flg = true;

function open_bbss()
{
	//if(!blkBSB || blkBSB.innerHTML == undefined)
	if(!blkBSB)
		return;
	if(bbss_flg){
		blkBSB.style.display = "none";
		if(!tagBSB.firstChild){
			var mj = "他";
			var mjn = window.document.createTextNode(mj);
			tagBSB.appendChild(mjn);
		};
		if(!blkBSB.firstChild){
			
			var ls_ita = new Array(
				
				"二次元", "tmp", "img2", 0, 0, //6
				"二次元実況", "dec", "18", 0, 0, //*
				"二次元ネタ", "dat", "16", 0, 0, //13
				"二次元業界", "dat", "43", 0, 0, //4*
				
				"自作絵", "zip", "11", 0, 0, //6
				"自作絵裏", "zip", "14", 0, 0, //4
				
				"お絵かき", "zip", "p", 0, 0, //
				"お絵sql", "www", "oe", 0, 0, //
				"落書き", "nov", "q", 0, 0, //
				"落書き裏", "cgi", "u", 0, 0, //
				
				"おもちゃ", "dat", "44", 0, 0, //46*
				"フィギュア", "dat", "46", 0, 0, //72
				"ろぼ", "zip", "2", 0, 0, //46
				"特撮", "cgi", "g", 0, 0, //34
				"模型", "up", "v", 0, 0, //28
				"人形", "dat", "22", 0, 0, //8
				
				"なりきり", "nov", "34", 0, 0, //61*
				"ネットキャラ", "dat", "10", 0, 0, //0*
				
				"壁紙", "cgi", "k", 0, 0, //15
				"壁紙二", "dat", "l", 0, 0, //75
				
				"ゲーム", "jun", "31", 0, 0, //41
				"ネトゲ", "nov", "28", 0, 0, //9
				
				"のりもの", "up", "e", 0, 0, //39
				"二輪", "up", "j", 0, 0, //30
				"鉄道", "up", "r", 0, 0, //26
				"自転車", "nov", "37", 0, 0, //8*
				
				"悩み相談", "img", "9", 0, 0, //27*
				
				"ゆり", "zip", "7", 0, 0, //24
				"やおい", "zip", "8", 0, 0, //18
				
				"軍", "cgi", "f", 0, 0, //19
				"軍裏", "may", "39", 0, 0, //22*
				
				"ニュース表", "zip", "6", 0, 0, //?
				"ニュース画像", "cgi", "n", 0, 0, //2
				"政治", "nov", "35", 0, 0, //9*
				"経済", "nov", "36", 0, 0, //5*
				"韓国経済", "dat", "38", 0, 0, //12*
				
				"カメラ", "dat", "45", 0, 0, //18*
				
				"半角", "www", "ascii", 1, 0, //
				
				"あぷ", "dec", "up", 2, 0, //
				"あぷ小", "dec", "up2", 2, 0, //
				/*
				"カメラ", "dat", "45", 0, 0, //18*
				
				"スピグラ", "dat", "23", 0, 0, //7
				
				"えろげ", "zip", "5", 3, 0, //47
				
				"二次元グロ", "cgi", "o", 3, 0, //31
				
				"自作PC", "zip", "3", 0, 0, //23
				
				"女装", "zip", "32", 0, 0, //12
				
				"3DCG", "up", "x", 0, 0, //4
				
				"数学", "cgi", "m", 0, 0, //1
				
				"flash", "cgi", "i", 0, 0, //3
				
				"野球", "zip", "1", 0, 0, //12
				"サッカー", "zip", "12", 0, 0, //2
				"麻雀", "may", "25", 0, 0, //1*
				
				"うま", "may", "26", 0, 0, //2
				"ねこ", "may", "27", 0, 0, //12
				"どうぶつ", "up", "d", 0, 0, //3
				"しょくぶつ", "zip", "z", 0, 0, //4
				"虫", "up", "w", 0, 0, //1
				
				"料理", "up", "t", 0, 0, //5
				"甘味", "dat", "20", 0, 0, //6
				"ラーメン", "dat", "21", 0, 0, //7
				*/
				
				"decてすと", "DECT", "", 16, 0,
				"てすとｊｕｎ", "TJUN", "", 16, 0,
				
				0);
			var ls_uri = new Array("futaba.htm", "index2.html", "up.htm", "enter.html", "guro2-enter.html");
			
			var mj = "";
			for(var a = 0; a < (ls_ita.length - 1); a += 5){
				if((ls_ita[a + 3] & 16) == 0){
					var uri = "http://" + ls_ita[a + 1] + ".2chan.net/" + ls_ita[a + 2] + "/" + ls_uri[ls_ita[a + 3] & 15];
				}else{
					var uri = "http://futaba.qs.cjb.net/nijiran/fCatalog_" + ls_ita[a + 1] + ".html";
				};
				mj += " &nbsp; <a href=\"" + uri + "\">" + ls_ita[a] + "</a>";
			};
			
			blkBSB.innerHTML = "<span style=\"font-size: 12px;\">他の板 :" + mj + "</span><hr>";
		};
		bbss_flg = false;
	}else{
		blkBSB.style.display = "block";
		bbss_flg = true;
	};
}

open_bbss();

//--------
