/**
 * Editing.
 *
 * @author Frantisek Fialka <info@ide.cz>
 * @copyright 2005-2006 IDE.cz
 * @version 2.2.0
 */

var editing = {
	defaultFormItemsErrorMessage : "Please fill the highlighted items!",

	/**
	 * Initializates editing.
	 *
	 * @return void
	 */
	initWindow : function() {
		// set window events
		window.document.onkeydown = function(event) {
			if (event == null) {
				event = window.event;
			}

			// close window on ESC key
			if (event.keyCode == 27) {
				editing.closeWindow();
			}
			// submit form on ENTER key
			else if (event.keyCode == 13 && event.target.nodeName.toUpperCase() != "TEXTAREA") {
				try {
					document.getElementsByTagName("FORM")[0].submit();
				}
				catch (e) {
					alert("Internal error: unable to submit form!");
				}
			}
		}

		// set form
		if (document.getElementsByTagName("FORM").length == 0) {
			this.reloadOpenerWindow();
//			this.closeWindow();
			return;
		}
		else {
			var arrElements = new Array;
			var arrLabels = document.getElementsByTagName("LABEL");
			var arrTextareas = document.getElementsByTagName("TEXTAREA");
	
			for (var i = 0; i < arrLabels.length; i++) {
				arrElements.push(arrLabels[i]);
			}
	
			for (var i = 0; i < arrTextareas.length; i++) {
				arrElements.push(arrTextareas[i]);
			}

			for (var i = 0; i < arrElements.length; i++) {
				if (arrElements[i].className.toString().match(/error/)) {
					arrElements[i].focus();
					if (arrElements[i].getAttribute("errorMessage")) {
						alert(arrElements[i].getAttribute("errorMessage"));
					}
					else {
						alert(this.defaultFormItemsErrorMessage);
					}
					break;
				}
			}
		}

		// set CANCEL button event
		try {
			document.getElementById("formClose").onclick = function() {
//				editing.closeWindow();
			}
		}
		catch (e) {
			alert("Internal error: unable to find CANCEL button!");
		}
	},

	/**
	 * Opens editing window.
	 *
	 * @param strUrl URL.
	 * @param intWindowWidth Window width.
	 * @param intWindowHeight Window height.
	 * @return void
	 */
	openWindow : function(strUrl, intWindowWidth, intWindowHeight) {
		var intWindowLeft = (screen.width - intWindowWidth) / 2;
		var intWindowTop = (screen.height - intWindowHeight) / 2 - 20;
		var objWindowReference = window.open(strUrl, "editingWindow", "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, modal=yes, " +
				"width=" + intWindowWidth + ", height=" + intWindowHeight + ", left=" + intWindowLeft + ", top=" + intWindowTop +", screenX=" + intWindowLeft + ", screenY=" + intWindowTop);

		if (window.focus) {
			objWindowReference.focus()
		}
	},

	/**
	 * Closes editing window.
	 * 
	 * @return void
	 */
	closeWindow : function() {
		window.close();
	},

	/**
	 * Reloads window.
	 * 
	 * @return void
	 */
	reloadWindow : function() {
		window.location.reload();
	},

	/**
	 * Reloads opener window.
	 * 
	 * @return void
	 */
	reloadOpenerWindow : function() {
		opener.location.reload();
	},

	/**
	 * Sends XmlHttp request to delete specified database record.
	 *
	 * @param strUrl URL.
	 * @param strTarget Target tree item name.
	 * @param strQs Query string.
	 * @param strConfirmMsg Deleting confirm message.
	 * @return void
	 */
	deleteRecord : function(strUrl, strTarget, strQs, strConfirmMsg) {
		if (!confirm(strConfirmMsg)) {
			return;
		}

		var strContent = "target=" + strTarget + strQs;

		library.sendXmlHttpRequest(editing.deleteRecordHandler, "POST", strUrl, strContent, {"content-type" : "application/x-www-form-urlencoded"});
	},

	/**
	 * XmlHttp request handler for deleting database record.
	 *
	 * @param objXmlHttp XmlHttpRequest.
	 * @return void
	 */
	deleteRecordHandler : function(objXmlHttp) {
		var objResponse = objXmlHttp.responseXML.getElementsByTagName("editing")[0];
		if (objResponse != null) {
			if (library.getDataByTagName(objResponse, "exitCode") != 0) {
				alert(library.getDataByTagName(objResponse, "message"));
			}
			else {
				editing.reloadWindow();
			}
		}
		else {
			alert("Internal error: unable to get XML response!");
		}
	}
}
