// JavaScript Document
var x = new Object();

x.group = function() {
	this.toDos = new Array();
	this.no = 0;
}

x.group.prototype.add = function(toDo) {
	if (toDo && toDo.id) {
		this.toDos[toDo.id] = toDo;
		this.no++;
	}
}

x.group.prototype.del = function(toDo) {
	if (toDo && toDo.id) {
		this.toDos[toDo.id] = null;
	}
}

x.group.prototype.render = function() {
	for (var i in this.toDos) {
		var t = this.toDos[i];
		if (t.render) {
			t.render();
		}
	}
}

x.group.prototype.writeToCookie = function() {
	var n = 0;
	var date = new Date();
	date.setTime(date.getTime() + (28 * 24 * 3600000));
	for (var i in this.toDos) {
		var t = this.toDos[i];
		if (t){
			var data = t.toString();
			xSetCookie("toDo" + n, data, date);
			n++;
		}
	}
	xSetCookie("no", n, date);
}

x.group.prototype.readFromCookie = function() {
	var length = parseInt(xGetCookie("no"));
	for (var i=0; i<length; i++) {
		var data = xGetCookie("toDo" + i);
		x.toDo.parse(i,data);
	}
	this.render();
}

x.toDos = new x.group();
x.group = null;

xAddEventListener(window,"load",function() {x.toDos.readFromCookie();},false);
xAddEventListener(window,"unload",function() {x.toDos.writeToCookie();},false);

//////////////////////////////////////////////////////////////////////////////////////
x.toDo = function(id, value, status) {
	this.id = id;
	this.value = value;
	this.status = status;
}

x.toDo.prototype.render = function() {
	var div = xGetElementById(this.status);
	if (div && !this.rendered) {
		var wraper = document.createElement("li");
		wraper.innerHTML = this.value;
		wraper.ref = this;
		
		var del = document.createElement("a");
		//del.innerHTML = "X";
		xAddEventListener(del,"click",x.toDo.delOnclick,false);
		
		var checkBox = document.createElement("input");
		checkBox.type = "Checkbox";
		
		xAddEventListener(checkBox,"click",x.toDo.checkBoxOnclick,false);
		
		wraper.insertBefore(checkBox, wraper.firstChild);
		wraper.appendChild(del);
		
		div.insertBefore(wraper, div.firstChild);
		
		checkBox.checked = parseInt(this.status);
		this.rendered = true;
		
	}
}

x.toDo.prototype.setStatus = function() {
	if (this.status) {
		if (this.status == "1") {
			this.status = "0";
		} 
		else {
			this.status = "1";
		}
	}
}

x.toDo.prototype.toString = function() {
	return this.value + "&" + this.status;
}
	
	
x.toDo.checkBoxOnclick = function(event) {
	var evt = new xEvent(event);
	var target = evt.target;
	var wraper = target.parentNode;
	var toDo = wraper.ref;
	toDo.setStatus();
	var div = xGetElementById(toDo.status);
	if (div && toDo.rendered) {
		var p = wraper.parentNode;
		p.removeChild(wraper);
		div.appendChild(wraper);
	}
}

x.toDo.delOnclick = function(event) {
	var evt = new xEvent(event);
	var target = evt.target;
	var wraper = target.parentNode;
	var toDo = wraper.ref;
	x.toDos.del(toDo);
	var p = wraper.parentNode;
	p.removeChild(wraper);
}

x.toDo.add = function() {
	var value = xGetElementById('value').value;
	var toDo = new x.toDo(x.toDos.no+1,value,"0");
	x.toDos.add(toDo);
	toDo.render();
}

x.toDo.parse = function(i,data) {
	var t = new String(data);
	var datas = t.split("&");
	var toDo = new x.toDo(i+1,datas[0],datas[1]);
	x.toDos.add(toDo);
}

x.toDo.clear = function() {
	x.toDos.toDos = new Array();
	//var div0 = xGetElementById("0");
	//div0.innerHTML = '';
	var div1 = xGetElementById("1");
	div1.innerHTML = '';
}


//////////////////////////////////////////////////////////
function init() {
	var add = xGetElementById("add");
	var clear = xGetElementById("clear");
	xAddEventListener(add,"click",x.toDo.add,false);
	xAddEventListener(clear,"click",x.toDo.clear,false);
	document.forms[0].onsubmit = function() {
		x.toDo.add();
		return false;
	}
}

xAddEventListener(window,"load",init,false);
	

	
	
