var activecalevt;
var caledit_select_oldval;
var caledit_ismodified;
var caledit_loaded;
var current_form;
var saved_form;
var caledit_defmsg = "(Esc)返回 (Ctrl-M)切換編輯 (Ctrl-左)左側 (Ctrl-右)右側 (Alt-U)新增或儲存 (Alt-K)刪除 (Alt-R)復原";

function caledit(year, month, date){
	var allbrowseobj = document.getElementsByName("calbrowse");
	var alldetailobj = document.getElementsByName("caldetail");
	var i;
	$(document).unbind("keydown.main");
	$(document).bind("keydown.caledit", "ctrl+m", caledit_edit);
	$(document).bind("keydown.caledit", "ctrl+left", caledit_focus_left);
	$(document).bind("keydown.caledit", "ctrl+right", caledit_focus_right);
	$(document).bind("keydown.caledit", "esc", caledit_quit);
	$(document).bind("keydown.caledit", "alt+u", caledit_save_func);
	$(document).bind("keydown.caledit", "alt+r", caledit_discard_func);
	$(document).bind("keydown.caledit", "alt+k", caledit_delete_func);
	status_bar_save();
	status_bar_set(caledit_defmsg);
	caledit_switchedit_disable();
	for(i=0; i<allbrowseobj.length; i++){
		allbrowseobj[i].style.display = "none";
	}
	for(i=0; i<alldetailobj.length; i++){
		alldetailobj[i].style.display = "block";
	}
	document.getElementById("switchlist").style.display = "none";
	document.getElementById("googlelogout").style.display = "none";
	current_form = new CalEvent();
	saved_form = new CalEvent();
	activecalevt = new Array();
	caledit_createoption();
	caledit_ismodified = false;
	caledit_loaded = false;
	document.getElementById("caledit_select").value = "new";
	caledit_loader(document.getElementById("caledit_newentry"));
}

function caledit_quit(){
	var allbrowseobj = document.getElementsByName("calbrowse");
	var alldetailobj = document.getElementsByName("caldetail");
	var i;
	try{
		if(caledit_loaded){
			if(caledit_validate()){
				caledit_write_current();
			}else{
				throw null;
			}
		}
		if(!saved_form.equal(current_form)){
			throw "您有尚未儲存的資訊,無法離開!";
		}
	}catch(err){
		document.getElementById("caledit_select").value = caledit_select_oldval;
		if(err != null){
			status_bar_warning(err);
		}
		return;
	}
	$(document).unbind("keydown.main");
	$(document).unbind("keydown.caledit");
	for(i=0; i<allbrowseobj.length; i++){
		allbrowseobj[i].style.display = "block";
	}
	for(i=0; i<alldetailobj.length; i++){
		alldetailobj[i].style.display = "none";
	}
	shortcut_bind();
	status_bar_restore();
	document.getElementById("switchlist").style.display = "inline";
	document.getElementById("googlelogout").style.display = "inline";
	caledit_clearoption();
	caledit_clean();
	if(caledit_ismodified){
		setmonthcal();
		setfocusblock(value_date);
	}
}

function caledit_edit()
{   
	var buttonobj;
	buttonobj = document.getElementById("caledit_switchedit");
	document.getElementById("caledit_dyn_year").style.display = "inline";
	switch(buttonobj.value){
		case "編輯":
			caledit_switchedit_enable();
			break;
		case "唯讀":
			caledit_switchedit_disable();
			break;
	}
}

function caledit_switchedit_enable()
{
	var buttonobj;
	var msgobj;
	var roobj, rwobj, robobj, rwbobj;
	var i;
	buttonobj = document.getElementById("caledit_switchedit");
	msgobj = document.getElementById("caledit_enabled");
	roobj = document.getElementsByName("caledit_read");
	rwobj = document.getElementsByName("caledit_write");
	robobj = document.getElementsByName("caledit_read_block");
	rwbobj = document.getElementsByName("caledit_write_block");
	buttonobj.value = "唯讀";
	msgobj.innerHTML = "編輯模式";
	for(i=0; i<roobj.length; i++){
		roobj[i].style.display = "none";
	}
	for(i=0; i<rwobj.length; i++){
		rwobj[i].style.display = "inline";
	}
	for(i=0; i<robobj.length; i++){
		robobj[i].style.display = "none";
	}
	for(i=0; i<rwbobj.length; i++){
		rwbobj[i].style.display = "block";
	}
	document.getElementById("caledit_save").style.display = "inline";
	document.getElementById("caledit_discard").style.display = "inline";
}

function caledit_switchedit_disable()
{
	var buttonobj;
	var msgobj;
	var roobj, rwobj, robobj, rwbobj;
	buttonobj = document.getElementById("caledit_switchedit");
	msgobj = document.getElementById("caledit_enabled");
	roobj = document.getElementsByName("caledit_read");
	rwobj = document.getElementsByName("caledit_write");
	robobj = document.getElementsByName("caledit_read_block");
	rwbobj = document.getElementsByName("caledit_write_block");
	buttonobj.value = "編輯";
	msgobj.innerHTML = "檢視模式";
	for(i=0; i<roobj.length; i++){
		roobj[i].style.display = "inline-block";
	}
	for(i=0; i<rwobj.length; i++){
		rwobj[i].style.display = "none";
	}
	for(i=0; i<robobj.length; i++){
		robobj[i].style.display = "block";
	}
	for(i=0; i<rwbobj.length; i++){
		rwbobj[i].style.display = "none";
	}
	document.getElementById("caledit_save").style.display = "none";
	document.getElementById("caledit_discard").style.display = "none";
	caledit_copyback();
}

function caledit_focus_left(){
	$("#caledit_select").focus();
}

function caledit_focus_right(){
	$("#caledit_switchedit").focus();
}

function caledit_clean(){
	var i;
	var roobj, rwobj, robobj, rwbobj;
	roobj = document.getElementsByName("caledit_read");
	rwobj = document.getElementsByName("caledit_write");
	robobj = document.getElementsByName("caledit_read_block");
	rwbobj = document.getElementsByName("caledit_write_block");
	for(i=0; i<roobj.length; i++){
		roobj[i].innerHTML = "";
	}
	for(i=0; i<rwobj.length; i++){
		rwobj[i].value = "";
	}
	for(i=0; i<robobj.length; i++){
		robobj[i].innerHTML = "";
	}
	for(i=0; i<rwbobj.length; i++){
		rwbobj[i].value = "";
	}
}

function caledit_fill(calevt){
	var yearobj, monthobj, dateobj, hourobj, minuteobj;
	var titleobj, remindobj, contentobj;
	var datafromobj; /* 這項不能修改 */
	yearobj = document.getElementById("caledit_static_year");
	monthobj = document.getElementById("caledit_static_month");
	dateobj = document.getElementById("caledit_static_date");
	hourobj = document.getElementById("caledit_static_hour");
	minuteobj = document.getElementById("caledit_static_minute");
	titleobj = document.getElementById("caledit_static_title");
	remindobj = document.getElementById("caledit_static_remind");
	contentobj = document.getElementById("caledit_static_content");
	datafromobj = document.getElementById("caledit_datafrom");
	yearobj.textContent = calevt.datetime.getFullYear();
	monthobj.textContent = calevt.datetime.getMonth() + 1;
	dateobj.textContent = calevt.datetime.getDate();
	hourobj.textContent = calevt.datetime.getHours();
	minuteobj.textContent = calevt.datetime.getMinutes();
	titleobj.textContent = calevt.title;
	remindobj.textContent = calevt.remind;
	contentobj.textContent = calevt.content;
	switch(calevt.datafrom){
		case 'native':
			datafromobj.innerHTML = productname;
			break;
		case 'google':
			datafromobj.innerHTML = 'Google 行事曆';
			break;
		case 'ntuceiba':
			datafromobj.innerHTML = '臺大 CEIBA 網站';
			break;
		default:
			datafromobj.innerHTML = '來源不明';
	}

	yearobj = document.getElementById("caledit_dyn_year");
	monthobj = document.getElementById("caledit_dyn_month");
	dateobj = document.getElementById("caledit_dyn_date");
	hourobj = document.getElementById("caledit_dyn_hour");
	minuteobj = document.getElementById("caledit_dyn_minute");
	titleobj = document.getElementById("caledit_dyn_title");
	remindobj = document.getElementById("caledit_dyn_remind");
	contentobj = document.getElementById("caledit_dyn_content");
	yearobj.value = calevt.datetime.getFullYear();
	monthobj.value = calevt.datetime.getMonth() + 1;
	dateobj.value = calevt.datetime.getDate();
	hourobj.value = calevt.datetime.getHours();
	minuteobj.value = calevt.datetime.getMinutes();
	titleobj.value = calevt.title;
	remindobj.value = calevt.remind;
	contentobj.value = calevt.content;
}

function caledit_copyback(){
	var yearobj, monthobj, dateobj, hourobj, minuteobj;
	var titleobj, remindobj, contentobj;
	var yearobjw, monthobjw, dateobjw, hourobjw, minuteobjw;
	var titleobjw, remindobjw, contentobjw;

	yearobj = document.getElementById("caledit_static_year");
	monthobj = document.getElementById("caledit_static_month");
	dateobj = document.getElementById("caledit_static_date");
	hourobj = document.getElementById("caledit_static_hour");
	minuteobj = document.getElementById("caledit_static_minute");
	titleobj = document.getElementById("caledit_static_title");
	remindobj = document.getElementById("caledit_static_remind");
	contentobj = document.getElementById("caledit_static_content");

	yearobjw = document.getElementById("caledit_dyn_year");
	monthobjw = document.getElementById("caledit_dyn_month");
	dateobjw = document.getElementById("caledit_dyn_date");
	hourobjw = document.getElementById("caledit_dyn_hour");
	minuteobjw = document.getElementById("caledit_dyn_minute");
	titleobjw = document.getElementById("caledit_dyn_title");
	remindobjw = document.getElementById("caledit_dyn_remind");
	contentobjw = document.getElementById("caledit_dyn_content");

	yearobj.textContent = yearobjw.value;
	monthobj.textContent = monthobjw.value;
	dateobj.textContent = dateobjw.value;
	hourobj.textContent = hourobjw.value;
	minuteobj.textContent = minuteobjw.value;
	titleobj.textContent = titleobjw.value;
	remindobj.textContent = remindobjw.value;
	contentobj.textContent = contentobjw.value;
}

function caledit_validate(){
	var yearobjw, monthobjw, dateobjw, hourobjw, minuteobjw;
	var titleobjw, remindobjw, contentobjw;
	var yearvalue, monthvalue;
	var tmp;
	yearobjw = document.getElementById("caledit_dyn_year");
	monthobjw = document.getElementById("caledit_dyn_month");
	dateobjw = document.getElementById("caledit_dyn_date");
	hourobjw = document.getElementById("caledit_dyn_hour");
	minuteobjw = document.getElementById("caledit_dyn_minute");
	titleobjw = document.getElementById("caledit_dyn_title");
	remindobjw = document.getElementById("caledit_dyn_remind");
	contentobjw = document.getElementById("caledit_dyn_content");
	
	try{
		yearvalue = parseInt(yearobjw.value);
		if(!isFinite(yearvalue)){
			throw "請輸入正確的年份!";
		}
		if(yearvalue < 1970){
			throw "請輸入 1970 年以後的年份!";
		}
		monthvalue = parseInt(monthobjw.value);
		if(!isFinite(monthvalue) || monthvalue < 1 || monthvalue > 12){
			throw "請輸入正確的月份!";
		}
		tmp = parseInt(dateobjw.value);
		if(!isFinite(tmp) || tmp < 1 || 
			tmp > get_month_max_day(yearvalue, monthvalue - 1)){
			throw "請輸入正確的日期!";
		}
		tmp = parseInt(hourobjw.value);
		if(!isFinite(tmp) || tmp < 0 || tmp >= 24){
			throw "請輸入正確的時間(小時)!";
		}
		tmp = parseInt(minuteobjw.value);
		if(!isFinite(tmp) || tmp < 0 || tmp >= 60){
			throw "請輸入正確的時間(分鐘)!";
		}
		tmp = remindobjw.value;
		if(tmp == "NaN"){
			tmp = "";
		}
		if(tmp != "" && !isFinite(parseInt(tmp))){
			throw "請輸入正確的提醒時間!";
		}
		tmp = titleobjw.value;
		if(tmp.length <= 0){
			throw "標題不可為空白!";
		}
	}catch(err){
		status_bar_warning(err);
		return false;
	}

	return true;
}

function caledit_write_current(){
	var yearobjw, monthobjw, dateobjw, hourobjw, minuteobjw;
	var titleobjw, remindobjw, contentobjw;
	var yearvalue, monthvalue;
	var tmp;
	yearobjw = document.getElementById("caledit_dyn_year");
	monthobjw = document.getElementById("caledit_dyn_month");
	dateobjw = document.getElementById("caledit_dyn_date");
	hourobjw = document.getElementById("caledit_dyn_hour");
	minuteobjw = document.getElementById("caledit_dyn_minute");
	titleobjw = document.getElementById("caledit_dyn_title");
	remindobjw = document.getElementById("caledit_dyn_remind");
	contentobjw = document.getElementById("caledit_dyn_content");
	
	current_form.datetime.setFullYear(
		parseInt(yearobjw.value),
		parseInt(monthobjw.value) - 1,
		parseInt(dateobjw.value));
	current_form.datetime.setHours(
		parseInt(hourobjw.value),
		parseInt(minuteobjw.value),
		0, 0);

	current_form.remind = parseInt(remindobjw.value);
	current_form.title = titleobjw.value;
	current_form.content = contentobjw.value;
}

function caledit_loader(myself){
	var newcalevent;
	var dataindex;

	try{
		if(caledit_loaded){
			if(caledit_validate()){
				caledit_write_current();
			}else{
				throw false;
			}
		}
	}catch(err){
		myself.value = caledit_select_oldval;
		return;
	}

	if(current_form.equal(saved_form)){
		if(myself.value == "new"){
			newcalevent = new CalEvent();
			newcalevent.datetime.setFullYear(
					value_year, value_month - 1, value_date);
			newcalevent.datetime.setHours(0, 0);
			caledit_fill(newcalevent);
			saved_form = newcalevent.clone();
			current_form = newcalevent.clone();
			status_bar_set("新增" + " " + caledit_defmsg);
			caledit_switchedit_enable();
			document.getElementById("caledit_save").value = "新增";
			document.getElementById("caledit_delete").style.display = "none";
		}else{
			dataindex = parseInt(myself.value);
			caledit_fill(activecalevt[dataindex]);
			saved_form = activecalevt[dataindex].clone();
			current_form = activecalevt[dataindex].clone();
			dataindex++;
			status_bar_set(dataindex.toString() + " " + caledit_defmsg);
			caledit_switchedit_disable();
			if(current_form.deleted){
				document.getElementById("caledit_save").value = "重新插入";
			}else{
				document.getElementById("caledit_save").value = "儲存";
			}
			document.getElementById("caledit_delete").style.display = "inline";
		}
		caledit_select_oldval = myself.value;
	}else{
		status_bar_warning("您有尚未儲存的資訊,無法切換活動!");
		myself.value = caledit_select_oldval;
	}

	caledit_loaded = true;
}

function caledit_discard_func(){
	caledit_fill(saved_form);
}

function caledit_delete_func(){
	caledit_write_current();
	if(current_form.key == null){
		return;
	}else{
		inccal_remove(current_form, function(){
			var selobj = document.getElementById("caledit_select");
			var oldval = parseInt(caledit_select_oldval);
			current_form.key = null;
			current_form.deleted = true;
			saved_form = current_form.clone();
			activecalevt[oldval] = current_form.clone();
			document.getElementById("calselopt" + 
				caledit_select_oldval.toString()).textContent = 
				'<刪>';
			caledit_ismodified = true;
			if(oldval < activecalevt.length - 1){
				selobj.value = (oldval + 1).toString();
				caledit_loader(selobj);
			}else{
				selobj.value = "new";
				caledit_loader(selobj);
			}
		});
	}
}

function caledit_save_func(){
	var oldtree;
	var newnode;
	var newcount;
	if(caledit_validate()){
		caledit_write_current();
	}else{
		return false;
	}
	inccal_send(current_form, function(resp){
		status_bar_set("資料已儲存");
		if(current_form.key == null){
			newcount = activecalevt.length;
			activecalevt[newcount] = current_form.clone();
			activecalevt[newcount].deleted = false;
			activecalevt[newcount].key = resp;
			oldtree = document.getElementById("caledit_select");
			newnode = document.createElement("option");
			newnode.setAttribute("id", "calselopt" + newcount.toString());
			newnode.value = newcount;
			newnode.textContent = '<新> ' + 
				generate_display_string(current_form);
			oldtree.appendChild(newnode);
		}else{
			activecalevt[caledit_select_oldval] = current_form.clone();
			if(current_form.datetime.getFullYear() == value_year &&
				current_form.datetime.getMonth() == value_month - 1 &&
				current_form.datetime.getDate() == value_date){
				document.getElementById("calselopt" + 
					caledit_select_oldval.toString()).textContent = 
					'<改> ' + generate_display_string(current_form);
			}else{
				document.getElementById("calselopt" + 
					caledit_select_oldval.toString()).textContent = 
					'<改> 其他日期';
			}
		}
		saved_form = current_form.clone();
		caledit_ismodified = true;
	});
	return false; /* 這樣才不會真的 submit */
}

function caledit_createoption(){
	var calselect = document.getElementById("caledit_select");
	var addoption = alldata[value_date].data;
	var newoption;
	var i;
	newoption = document.createElement("option");
	newoption.setAttribute("id", "caledit_newentry");
	newoption.value = "new";
	newoption.innerHTML = "新增活動......";
	calselect.appendChild(newoption);
	for(i=0; i<addoption.length; i++){
		newoption = document.createElement("option");
		newoption.setAttribute("id", "calselopt" + i.toString());
		newoption.value = i;
		newoption.textContent = generate_display_string(addoption[i]);
		calselect.appendChild(newoption);
		activecalevt.push(addoption[i].clone());
	}
}

function caledit_clearoption(){
	var calselect = document.getElementById("caledit_select");
	calselect.innerHTML = "";
}