/**
 * DYF Countdown for dyf-countdown.php
 *
 * Copyright 2009 DYF IT-Division All right reserved.
 * http://it-division.jpn.org/
 *
 */

function DyfCountdown(options) {

	// wrapper-div
	this.wrapper = document.createElement('DIV');
	this.wrapper.id = "dyf-countdown-container";

	// container-div
	this.container = document.createElement('DIV');
	this.container.id = "dyf-countdown";
	this.container.style.color = options['text_color'];
	this.container.style.textAlign = options['text_align'];
	this.container.style.marginTop = options['top'];
	this.container.style.marginLeft = options['left'];

	// content-span
	this.content = document.createElement('SPAN');

	this.container.appendChild(this.content);
	this.wrapper.appendChild(this.container);
	document.body.appendChild(this.wrapper);

	var saved_dt = this.getCookie(this.COOKIE_DATE_KEY);

	var ymd;
	var dt;
	var title;
	if (saved_dt) {
		ymd = String(saved_dt).split("_");
		dt = new Date(ymd[0], ymd[1] - 1, ymd[2]);
		title = this.getCookie(this.COOKIE_TITLE_KEY);
	} else {
		ymd = String(options["date"]).split("/");
		dt = new Date(ymd[0], Number(ymd[1]) - 1, Number(ymd[2]));
		title = options["title"];
	}
	this.showCountdown(dt, title);

	this.container.appendChild(this.createResetBtn());
}

DyfCountdown.prototype.COOKIE_LIFETIME = 3650;
DyfCountdown.prototype.COOKIE_DATE_KEY = 'dyf_countdown_date';
DyfCountdown.prototype.COOKIE_TITLE_KEY = 'dyf_countdown_title';

DyfCountdown.prototype.createResetBtn = function () {
	var owner = this;
	var div = document.createElement("DIV");
	div.className = "form";
	var prefix = "input-dyf-countdown";

	var html = "<p>あなたの目標を設定することができます。目標と数値を入力してください。</p><p>" +
	"<p>目標： " +
	"<input type='text' size='20' id='" + prefix + "-title'/></p>" +
	"日付： <input type='text' size='4' maxlength='4' id='" + prefix + "-year'/>年 " +
	"<input type='text' size='2' maxlength='2' id='" + prefix + "-month'/>月 " +
	"<input type='text' size='2' maxlength='2' id='" + prefix + "-day'/>日 " +
	"</p>";
	div.innerHTML = html;
	
	var div_btn = document.createElement("DIV");
	div_btn.className = "btn";
	var btn = document.createElement("INPUT");
	btn.type = "button";
	btn.value = "設定";
	this.addEvent(btn, "click", function (ev) {
		var y = document.getElementById(prefix + "-year").value;
		var m = document.getElementById(prefix + "-month").value;
		var d = document.getElementById(prefix + "-day").value;
		var title = document.getElementById(prefix + "-title").value;
		var dt = new Date(y, m - 1, d);
		if (dt && dt.getTime() > 0 && (new Date()).getTime() < dt.getTime()) {
			if (owner._interval_id) {
				clearInterval(owner._interval_id);
			}
			owner.setCookie(owner.COOKIE_DATE_KEY, y + "_" + m + "_" + d, owner.COOKIE_LIFETIME);
			if (title) {
				title = title.replace(/[<>#&"']/g, "");
				owner.setCookie(owner.COOKIE_TITLE_KEY, title, owner.COOKIE_LIFETIME);
			}
			owner.showCountdown(dt, title);
			reiw.ui.dialog.end();
		} else {
			reiw.ui.dialog.alert("日付の指定が不正です。");
		}
	});
	div_btn.appendChild(btn);
	div.appendChild(div_btn);

	var a = document.createElement('A');
	a.innerHTML = "再設定";
	a.className = "reset_btn";
	a.href = "#dummy";
	a.onclick = function () {
		reiw.ui.dialog.start({
			'title' : '目標設定:カウントダウン',
			'content' : div
		});
	};
	return a;
};

DyfCountdown.prototype.showCountdown = function (dt, title) {
	title = title || "目標";
	var target_time = dt.getTime();

	if (target_time <= (new Date()).getTime()) {
		return false;
	}

	var con = this.content;
	var before = title + " <span style='font-size:70%'>まで、あと</span> ";
	var d, h, m, s;
	var func = function () {
		var remain = target_time - (new Date()).getTime();
		var d = Math.floor(remain / 86400000);
		remain = remain % 86400000;
		h = Math.floor(remain / 3600000);
		remain = remain % 3600000;
		m = Math.floor(remain / 60000);
		remain = remain % 60000;
		s = Math.floor(remain / 1000);
		con.innerHTML = before + d + " <span style='font-size:70%'>日</span> " + h + " <span style='font-size:70%'>時間</span> " + (m < 10 ? '0' : '') + m + " <span style='font-size:70%'>分</span> " + (s < 10 ? '0' : '') + s + " <span style='font-size:70%'>秒</span> ";
	};

	func();
	this._interval_id = window.setInterval(func, 500);

	return true;
};

DyfCountdown.prototype.getCookie = function (name) {
	var regex = new RegExp("; " + name + "=(.*?);");
	var match = ("; " + document.cookie + ";").match(regex);
	return match ? decodeURIComponent(match[1]) : false;
};

DyfCountdown.prototype.setCookie = function (name, value, expire_day, domain, path, is_secure) {
	var str = name + "=" + encodeURIComponent(value);
	if (expire_day) {
		var ex = new Date();
		ex.setTime(ex.getTime() + (expire_day * 86400000));
		str += '; expires=' + ex.toUTCString();
	}
	if (domain) str += '; domain=' + domain;
	if (path) str += '; path=' + path;
	if (is_secure) str += '; secure';
	document.cookie = str;
};

DyfCountdown.prototype.expireCookie = function(name) {
	var ex = new Date();
	ex.setFullYear(1997);
	document.cookie = name + '= ;expires=' + ex.toUTCString();
};

DyfCountdown.prototype.addEvent = function (obj, evName, func, useCap) {
    if (obj.addEventListener){
        useCap = useCap || false;
        obj.addEventListener(evName, func, useCap);
    } else if (obj.attachEvent){
        obj.attachEvent("on"+evName, func);
    }
};

DyfCountdown.prototype.removeEvent = function (obj, evName, func, useCap) {
    if (obj.removeEventListener){
        useCap = useCap || false;
        obj.removeEventListener(evName, func, useCap);
    } else if (obj.detachEvent){
        obj.detachEvent("on"+evName, func);
    }
};

