/**
 * Dymanic Edit Panel.
 *
 * Based on Prototype v1.50 RC1 or higher version.
 */
function fnEdit(div, maxLen, errMsg, remoteTarget) {
	if (fnEdit.inEdit) {
		hdlInputBtnNotEvClick(fnEdit.inEdit);
		fnEdit.inEdit = null;
	}

	var sIdPrefix = div.getAttribute("id").split("-")[0] + "-";
	if (!$(sIdPrefix + "edit")) {
		var oDomFrag;
		if (-1 !== sIdPrefix.indexOf("_title-")) {
			oDomFrag = fnGenEditPaneForTitle(sIdPrefix, maxLen, errMsg, remoteTarget);
		} else {
			oDomFrag = fnGenEditPaneForDesc(sIdPrefix, maxLen, errMsg, remoteTarget);
		}
		div.parentNode.insertBefore(oDomFrag, div);
	}
	fnEdit.inEdit = sIdPrefix;
	$(sIdPrefix + "edit.text").value = fnHtml2Text(div.innerHTML);
	div.style.display = "none";
	$(sIdPrefix + "edit").style.display = "";
	$(sIdPrefix + "edit.text").select();
}
function fnGenEditPaneForTitle(idPrefix, maxLen, errMsg, remoteTarget) {
	var eleInput = document.createElement("input");
	return fnGenEditPane(idPrefix, eleInput, function() {
		if (eleInput.value != fnHtml2Text($(idPrefix + "view").innerHTML)) {
			eleInput.style.color = "#ff00cc";
		}
		else
		eleInput.style.color = "#ff00cc";
		countCHKeys(eleInput, maxLen, errMsg);
	}, remoteTarget);
}
function fnGenEditPaneForDesc(idPrefix, maxLen, errMsg, remoteTarget) {
	var eleTextarea = document.createElement("textarea");
	eleTextarea.setAttribute("rows", 3);
	return fnGenEditPane(idPrefix, eleTextarea, function() {
		if (eleTextarea.value != fnHtml2Text($(idPrefix + "view").innerHTML)) {
			eleTextarea.style.color = "#ff00cc";
		}else
		eleTextarea.style.color = "#ff00cc";
		countCHKeys(eleTextarea, maxLen, errMsg);
	}, remoteTarget);
}
function fnGenEditPane(idPrefix, assemble, hAssembleEvKeyUp, remoteTarget) {
	var eleDiv = document.createElement("div");
	eleDiv.setAttribute("id", idPrefix + "edit");
	eleDiv.appendChild(assemble);
	assemble.setAttribute("id", idPrefix + "edit.text");
	if (assemble.tagName != "TEXTAREA") {
		assemble.className = "edit.text.title";
		assemble.setAttribute("size", 28);
		assemble.onkeydown = function(ev) {
			if (window.event) {
				ev = window.event;
			}
			if (13 == ev.keyCode) {
				hdlInputBtnOkEvClick(idPrefix, remoteTarget);
			}
		}
	} else {
		assemble.className = "edit.text.desc";
	}
	assemble.onkeyup = hAssembleEvKeyUp;
	assemble.onmouseup = hAssembleEvKeyUp;
	assemble.onchange = hAssembleEvKeyUp;
	var eleBr = document.createElement("br");
	//eleDiv.appendChild(eleBr);
	var eleInputBtnOk = document.createElement("input");
	eleInputBtnOk.setAttribute("type", "button");
	eleDiv.appendChild(eleInputBtnOk);
	eleInputBtnOk.className = "edit.ok";
	eleInputBtnOk.setAttribute("value", "保存");
	eleInputBtnOk.setAttribute("id", idPrefix + "edit.ok");
	eleInputBtnOk.onclick = function() {
		hdlInputBtnOkEvClick(idPrefix, remoteTarget);
	}
	var eleInputBtnNot = document.createElement("input");
	eleInputBtnNot.setAttribute("type", "button");
	eleDiv.appendChild(eleInputBtnNot);
	eleInputBtnNot.className = "edit.not";
	eleInputBtnNot.setAttribute("value", "取消");
	eleInputBtnNot.setAttribute("id", idPrefix + "edit.not");
	eleInputBtnNot.onclick = function() {
		hdlInputBtnNotEvClick(idPrefix);
	} 
	return eleDiv;
}
function hdlInputBtnOkEvClick(idPrefix, remoteTarget) {
	var sNewVal = $(idPrefix + "edit.text").value.replace(/^\s+/, "").replace(/\s+$/, "");
	if (sNewVal == fnHtml2Text($(idPrefix + "view").innerHTML)) {
		return hdlInputBtnNotEvClick(idPrefix);
	}
	
	$(idPrefix + "edit.text").disabled = true;
	$(idPrefix + "edit.ok").disabled = true;
	$(idPrefix + "edit.not").disabled = true;
	var sPhotoID = idPrefix.split("_")[0];
	new Ajax.Updater("null", remoteTarget, {
		"method" : "get",
		"parameters" : "&vvvv=" + encodeURIComponent(sNewVal) + "&sPhotoID=" + sPhotoID+"&s="+Math.random(),
		"onSuccess" : hdlInputBtnOkEvClickAjaxUpdaterOnSuccess,
		"onFailure" : hdlInputBtnOkEvClickAjaxUpdaterOnFailure
	});
	function hdlInputBtnOkEvClickAjaxUpdaterOnSuccess(transfer) {
		$(idPrefix + "edit.text").disabled = false;
		$(idPrefix + "edit.ok").disabled = false;
		$(idPrefix + "edit.not").disabled = false;
		if ("succ" == transfer.responseText) {
			$(idPrefix + "view").innerHTML = sNewVal.length
						       ? fnText2Html(sNewVal)
						       : "点击这里添加照片描述";
			if ($(idPrefix + "bar")) {
				$(idPrefix + "bar").innerHTML = fnText2Html(sNewVal);
			}
			return hdlInputBtnNotEvClick(idPrefix);
		} else {
			dialog.showPage("/my/ok.aspx?i=0&title=" + transfer.responseText.split(",")[1]);
		}
	}
	function hdlInputBtnOkEvClickAjaxUpdaterOnFailure(transfer) {
		$(idPrefix + "edit.text").disabled = false;
		$(idPrefix + "edit.ok").disabled = false;
		$(idPrefix + "edit.not").disabled = false;
		dialog.showPage("/my/ok.aspx?i=0&title=数据保存失败。");
	}
}
function hdlInputBtnNotEvClick(idPrefix) {
	$(idPrefix + "edit").style.display = "none";
	$(idPrefix + "view").style.display = "";
}

function fnEditOver(elem) {
	if ($(elem).style){
		$(elem).style.background="#ff00cc";
	}
}
function fnEditOut(elem) {
	if ($(elem).style){
		$(elem).style.background=""; 
	}
}

function fnHtml2Text(data) {
	return data.replace(/\n/g, "")
		   .replace(/<br ?\/?>/gi, "@@@sgNOTATION@@@")
		   .unescapeHTML()
		   .replace(/@@@sgNOTATION@@@/g, "\n");
}

function fnText2Html(data) {
	return data.replace(/\r\n/g, "\n")
		   .replace(/\n/g, "@@@sgNOTATION@@@")
		   .escapeHTML()
		   .replace(/@@@sgNOTATION@@@/g, "<br />");
}

