// This module on PenguinBlog3.
// Created by Orikasa,Tomohiro.

Date.W3CDTF = function ( dtf ) {
	var dd = new Date();
	dd.setW3CDTF = Date.W3CDTF.prototype.setW3CDTF;
	dd.getW3CDTF = Date.W3CDTF.prototype.getW3CDTF;
	if ( dtf ) this.setW3CDTF( dtf );
	return dd;
};

Date.W3CDTF.prototype.setW3CDTF = function( dtf ) {
	if (dtf!='' && dtf!=undefined) {
		var sp = dtf.split( /[^0-9]/ );
	} else {
		return;
	}
	if ( sp.length < 6 || sp.length > 8 ) return;
	if ( sp.length == 7 ) {
		if ( dtf.charAt( dtf.length-1 ) != "Z" ) return;
	}
	for( var i=0; i<sp.length; i++ ) sp[i] = sp[i]-0;

	var year = sp[0];
	var mon = sp[1];
	var day = sp[2];
	var hour = sp[3];
	var min = sp[4];
	var sec = sp[5];
	
	if ( year<1970 || (mon<1 || mon>12) || (day<1 || day>31) || (hour<0 || hour>23) || (min<0 || min>59) || (sec<0 || sec>60) ) {
		return;
	}

	var msec = Date.UTC( year, mon-1, day, hour, min, sec );

	if ( sp.length == 8 ) {
		if ( dtf.indexOf("+") < 0 ) sp[6] *= -1;
		if ( sp[6] < -12 || sp[6] > 13 ) return;
		if ( sp[7] < 0 || sp[7] > 59 ) return;
		msec -= (sp[6]*60+sp[7]) * 60000;
	}

	return this.setTime( msec );
};

Date.W3CDTF.prototype.getW3CDTF = function() {
	var year = this.getFullYear();
	var mon  = this.getMonth()+1;
	var day  = this.getDate();
	var hour = this.getHours();
	var min  = this.getMinutes();
	var sec  = this.getSeconds();

	var tzos = this.getTimezoneOffset();
	var tzpm = ( tzos > 0 ) ? "-" : "+";
	if ( tzos < 0 ) tzos *= -1;
	var tzhour = tzos / 60;
	var tzmin  = tzos % 60;

	if ( mon  < 10 ) mon  = "0"+mon;
	if ( day  < 10 ) day  = "0"+day;
	if ( hour < 10 ) hour = "0"+hour;
	if ( min  < 10 ) min  = "0"+min;
	if ( sec  < 10 ) sec  = "0"+sec;
	if ( tzhour < 10 ) tzhour = "0"+tzhour;
	if ( tzmin  < 10 ) tzmin  = "0"+tzmin;
	var dtf = year+"-"+mon+"-"+day+"T"+hour+":"+min+":"+sec+tzpm+tzhour+":"+tzmin;
	return dtf;
};

// These modules are necessary.
function pb_replace(s) {
	rep = function() {
		reg = new RegExp(s1,"g");
//		dl = s.split(reg);
//		r = dl.join(s2);
		r = s.replace(reg,s2);
		return(r);
	}

	// old emoji
	s1="<emoji name=\"J\:([0-9a-f]+?)\" \/>"; s2="<img class=\"emoji\" src=\"/emoji/j_$1.gif\" align=\"absmiddle\" alt=\"\emoji\" />"; s=rep();

	// test domain
//	if (isDebug) {
		s1="image\.dv\.wablog\.com"; s2="image.wablog.com"; s=rep();
		s1="sound\.dv\.wablog\.com"; s2="sound.wablog.com"; s=rep();
//		s1="dv\.wablog\.com\/file\/"; s2="wablog.com\/file\/"; s=rep();

		s1="\"/category/([0-9a-zA-Z\-_]{1,20})\""; s2="\"index.html?d=$1.json\""; s=rep();
//	}

	// json->text
	s1="&amp;"; s2="&"; s=rep();

	return s;
}

fullMonth = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
fullWeekday = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
fullWeekdayJapanese = new Array("日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日");

// setDateTime
var dd_Y = null;
var dd_y = null;
var dd_m = null;
var dd_n = null;
var dd_d = null;
var dd_j = null;
var dd_S = null;
var dd_H = null;
var dd_G = null;
var dd_h = null;
var dd_g = null;
var dd_A = null;
var dd_a = null;
var dd_i = null;
var dd_s = null;
var dd_F = null;
var dd_M = null;
var dd_l = null;
var dd_D = null;
var dd_K = null;
var dd_k = null;
var dd_res = "";

function setDateTime(dt) {
	var dd = new Date.W3CDTF();
	dd.setW3CDTF(dt);

	dd_Y = dd.getYear();
	if (dd_Y<1900) { dd_Y = dd_Y +1900; }
	dd_y = String(dd_Y).substring(2,4);
	dd_m = dd.getMonth()+1; if ( dd_m  < 10 ) dd_m  = "0"+dd_m;
	dd_n = dd.getMonth()+1;

	dd_F = fullMonth[dd.getMonth()];
	dd_M = dd_F.substring(0,3);
	dd_d = dd.getDate(); if ( dd_d  < 10 ) dd_d  = "0"+dd_d;
	dd_j = dd.getDate();
	if (String(dd_j).substr(-1,1) == "1") {
		dd_S = "st";
	} else if (String(dd_j).substr(-1,1) == "2") {
		dd_S = "nd";
	} else if (String(dd_j).substr(-1,1) == "3") {
		dd_S = "rd";
	} else {
		dd_S = "th";
	}
	dd_l = fullWeekday[dd.getDay()];
	dd_D = dd_l.substring(0,2);
	dd_K = fullWeekdayJapanese[dd.getDay()];
	dd_k = dd_K.substring(0,1);
	dd_H = dd.getHours(); if ( dd_H  < 10 ) dd_H  = "0"+dd_H;
	dd_G = dd.getHours();
	dd_h = (dd.getHours() % 12); if ( dd_h  < 10 ) dd_h  = "0"+dd_h;
	dd_g = (dd.getHours() % 12);
	if (dd.getHours()<12) {
		dd_A = "AM";
		dd_a = "am";
	} else {
		dd_A = "PM";
		dd_a = "pm";
	}
	dd_i = dd.getMinutes(); if ( dd_i  < 10 ) dd_i = "0"+dd_i;
	dd_s = dd.getSeconds(); if ( dd_s  < 10 ) dd_s = "0"+dd_s;
	return dd;
}

// date();
function makeDateString (s) {
	if (s == "Y") { res += dd_Y; return; }
	if (s == "y") { res += dd_y; return; }
	if (s == "m") { res += dd_m; return; }
	if (s == "n") { res += dd_n; return; }
	if (s == "d") { res += dd_d; return; }
	if (s == "j") { res += dd_j; return; }
	if (s == "S") { res += dd_S; return; }
	if (s == "H") { res += dd_H; return; }
	if (s == "G") { res += dd_G; return; }
	if (s == "h") { res += dd_h; return; }
	if (s == "g") { res += dd_g; return; }
	if (s == "A") { res += dd_A; return; }
	if (s == "a") { res += dd_a; return; }
	if (s == "i") { res += dd_i; return; }
	if (s == "s") { res += dd_s; return; }
	if (s == "F") { res += dd_F; return; }
	if (s == "M") { res += dd_M; return; }
	if (s == "l") { res += dd_l; return; }
	if (s == "D") { res += dd_D; return; }
	if (s == "K") { res += dd_K; return; }
	if (s == "k") { res += dd_k; return; }
	res += s;
}

function time() {
	var now = new Date(); 
	return now;
}

function htmlentities(s) {
	s.replace(/&/gm,'&amp;');
	s.replace(/\'/gm,'&#039;');
	s.replace(/\"/gm,'&quot;');
	s.replace(/</gm,'&lt;');
	s.replace(/>/gm,'&gt;');
	return s;
}

function addslashes(s) {
	s.replace(/\'/gm,"\'");
	s.replace(/\"/gm,'\"');
	s.replace(/\\/gm,'\\\\');
	return s;
}

function encodeURL(s) {
	if (s==undefined || s==null) { return "";}
	var chr = '';
	var uni = '';
	var res = '';

	s = s.replace(/\:/g,'|');
	s = s.replace(/\//g,'\\');

	for (var i=0;i<s.length;i++) {
		cha = s.charAt(i); uni = s.charCodeAt(i);

		if (cha == ' ') {
			res += '+';
		} else {
			if (uni == 0x2a || uni == 0x2d || uni == 0x2e || uni == 0x5f || ((uni >= 0x30) && (uni <= 0x39)) || ((uni >= 0x41) && (uni <= 0x5a)) || ((uni >= 0x61) && (uni <= 0x7a))) {
				res = res + cha;
			} else {
				if ((uni >= 0x0) && (uni <= 0x7f)) {
					cha = '0' + uni.toString(16);
					res += '%' + cha.substr(cha.length - 2);
				} else if (uni > 0x1fffff) {
					res += '%' + (oxf0 + ((uni & 0x1c0000) >> 18)).toString(16);
					res += '%' + (0x80 + ((uni & 0x3f000) >> 12)).toString(16);
					res += '%' + (0x80 + ((uni & 0xfc0) >> 6)).toString(16);
					res += '%' + (0x80 + (uni & 0x3f)).toString(16);
				} else if (uni > 0x7ff) {
					res += '%' + (0xe0 + ((uni & 0xf000) >> 12)).toString(16);
					res += '%' + (0x80 + ((uni & 0xfc0) >> 6)).toString(16);
					res += '%' + (0x80 + (uni & 0x3f)).toString(16);
				} else {
					res += '%' + (0xc0 + ((uni & 0x7c0) >> 6)).toString(16);
					res += '%' + (0x80 + (uni & 0x3f)).toString(16);
				}
			}
		}
	}
	return res;
}

function decodeURL(s) {
	if (s==undefined || s==null) { return "";}
	var r = "";
	for (var i=0;i<s.length;i++){
		var ss = s.charAt(i);
		if (ss=="+"){ r += " "; } else {
			if (ss!="%"){ r += ss; } else {
				var u = 0;
				var f = 1;
				while (true) {
					var sss = "";
					for (var j=0;j<2;j++) {
						var ssss = s.charAt(++i);
						if (((ssss >= "0") && (ssss <= "9")) || ((ssss >= "a") && (ssss <= "f"))  || ((ssss >= "A") && (ssss <= "F"))) {
							sss += ssss;
						} else {
							--i;
							break;
						}
					}
					var n = parseInt(sss, 16);
					if (n<= 0x7f) {
						u = n;
						f = 1;
					} else if ((n>=0xc0) && (n<=0xdf)) {
						u = n & 0x1f;
						f = 2;
					} else if ((n>=0xe0) && (n<=0xef)) {
						u = n & 0x0f;
						f = 3;
					} else if ((n>=0xf0) && (n<=0xf7)) {
						u = n & 0x07;
						f = 4;
					} else if ((n>=0x80) && (n<=0xbf)) {
						u = (u << 6) + (n & 0x3f);
						--f;
					}
					if (f<=1) { break; }
					if (s.charAt(i + 1) == "%") { i++; } else { break; }
				}
				r += String.fromCharCode(u);           // add the escaped character
			}
		}
	}

	r = r.replace(/\|/g,':');
	r = r.replace(/\\/g,'/');

	return r;
}

pb_popup = new Object();
function popupWindow(id,w,h,title,url) {
	if (pb_popup[id]==undefined) { pb_popup[id] = false; }
	if (pb_popup[id]==false) {
//		var top = pb_posts.y + 10;
//		var left = pb_posts.x + 10;
		var top = 10;
		var left = 10;
		var popWhd = new Window({id:id, className:"dialog", title:title, top:top, left:left, width:w, height:h, url:url, resizable:true, minimizable:true, maximizable:true, destroyOnClose:true});
		popWhd.show(); 
		popWhd.showCenter();
		WindowCloseKey.init();
		pb_popup[id] = true;
		closeEvent = {
			onClose: function(eventName) {
				pb_popup[id] = false;
			}
		}
		Windows.addObserver(closeEvent);
	}
	return false;
}

function setCookie (name,value,expire) {
	if (expire==null) {
		document.cookie = name + "=" + escape(value) + ((expire==null)?"":(";"));
	} else {
		document.cookie = name + "=" + escape(value) + ((expire==null)?"":("; expires="+expire.toGMTString()));
	}
}
function getCookie (name) {
	var search = name + "=";
	if (document.cookie.length>0) {
		offset = document.cookie.indexOf(search);
		if (offset != -1) {
			offset += search.length;
			end = document.cookie.indexOf(";",offset);
			if(end == -1) {
				end = document.cookie.length;
			}
			return unescape(document.cookie.substring(offset,end));
		}
	}
	return null;
}

function addEvent () {
	if(arguments.length<3) return;
	var args = new Array();
	var elm = arguments[0];
	var evt = arguments[1];
	var func = arguments[2];
	for(var i=3;i<arguments.length;i++) {
		args.push(arguments[i]);
	}
	evt = evt.replace(/^on/i,'');
	evt = evt.toLowerCase();
	if (!!elm.addEventListener){
		elm.addEventListener(evt, function(){ func.apply(this,args) },true);
	} else if (!!elm.attachEvent){
		elm.attachEvent('on'+evt, function(){ func.apply(this,args) });
	} else {
		if(document.all){ // IEはdocument.all[id].onclick=funcという名前で割り当てることが可能。ただし引数を渡すことが出来ない
			evt = 'on'+evt;
			eval("document.all["+elm.id+"]."+evt+"=func;");
		} else if(document.layers){
//		eval("document.layers['"+en+"'].on"+evt+"=func;");
//		eval("document.layers['"+en+"'].captureEvents(Event."+evt.toUpperCase()+");");
		} else {
//			evt='on'+evt;
//			eval("document."+en+"."+evt+"=func;");
		}
	}
}

function createHttpRequest() {
	if(window.ActiveXObject) {
		try {
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				return new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e2) {
				return null;
			}
		}
	}  else if(window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else {
		return null;
	}
}

// onLoad
//addEvent(document, "load", pb_init);
//function pb_init() {
//	var s = pb_replace(document.body.innerHTML);
//	document.body.innerHTML = s;
//}

// load blog status
var xml = new JKL.ParseXML.JSON("/info.json");
var data = xml.parse();
var blog = data['blog'][0];

if (blog["is_home"]==undefined || blog["is_home"]=="nothing") {
	var indexurl = "/";
} else {
	if (location.pathname=="/") {
		location.replace(location.protocol + "//" + location.host + '/'+ blog['is_home'] + ".html");
	}
	var indexurl = "/index.html";
}

// load messages
xml = new JKL.ParseXML.JSON("/message.json");
data = xml.parse();
var message = new Object() ;
var func = function(row) {
	var id = row['id'];
	message[id] = row['message'].replace("&amp;","&").replace("&lt;","<").replace("&gt;",">").replace("&quot;","\"");
}
data['message'].each(func);

// check first contact
var first = true;
if (document.cookie.length>0) {
	offset = document.cookie.indexOf(blog['id']+'=');
	if (offset != -1) {
		first = false;
	}
}
document.cookie = blog['id'] + '=' + 'welcome';

var popupClosed = false;
function popWindow(page,id,w,h,title) {
	if(popupClosed==false) {
		var win = new Window({id: id, title: title, width: w, height: h, url: page, resizable: false, minimizable: false, maximizable: true, destroyOnClose: true, showEffectOptions: {duration:1.5}});
		win.showCenter();
		WindowCloseKey.init();
		popupClosed = true;
		
		closeEvent = {
			onClose: function(eventName) {
				popupClosed = false;
			}
		}
		Windows.addObserver(closeEvent);
	}
}

