
/** (c) Rio Software and Technologies 2007/2010 */
function _escape(text) {
	return encodeURIComponent(text);
	// return escape(text);
}
function captureInputs() {
	var inputs = document.getElementsByTagName('input');
	var inputParams = "";
	var prefix = "";
	for (x = 0; x < inputs.length; x++) {
		if (inputs[x].name && inputs[x].value) {
			inputParams += prefix + inputs[x].name + "=" + _escape(inputs[x].value);
			prefix = "&";
		}
	}
	return inputParams;
}
/** Capture only inputs contained within an element. */
function captureInputsFromElement(id)
{
	var table = document.getElementById(id);
	var inputs = table.getElementsByTagName("input");
	var inputParams = "";
	var prefix = "";
	for (x = 0; x < inputs.length; x++) {
		if (inputs[x].name && inputs[x].value) {
			inputParams += prefix + inputs[x].name + "=" + _escape(inputs[x].value);
			prefix = "&";
		}
	}
	var inputs = table.getElementsByTagName("textarea");
	for (x = 0; x < inputs.length; x++) {
		if (inputs[x].name && inputs[x].value && inputs[x].disabled == false) {
			inputParams += prefix + inputs[x].name + "=" + _escape(inputs[x].value);
			// inputParams += prefix + inputs[x].name + "=" + inputs[x].value;
			prefix = "&";
		}
	}

	var inputs = table.getElementsByTagName("select");
	for (x = 0; x < inputs.length; x++) {
		if (inputs[x].name && inputs[x].value) {
			inputParams += prefix + inputs[x].name + "=" + _escape(inputs[x].value);
			// inputParams += prefix + inputs[x].name + "=" + inputs[x].value;
			prefix = "&";
		}
	}
	return inputParams;
}


/** Capture selected inputs from the page. */
function captureSelectedInputs(inputNames) {
	var names = inputNames.split(",");
	var inputParams = "";
	var prefix = "";
	for ( var i = 0; i < names.length; i++) {
		var inputs = document.getElementsByName(names[i]);
		for (x = 0; x < inputs.length; x++) {
			if (inputs[x].name) {
				inputParams += prefix + inputs[x].name + "=" + _escape(inputs[x].value);
				prefix = "&";
			}
		}
	}
	return inputParams;
}

/** Append all page inputs to a uri (link). */
function appendInputs(uri) {
	var appendChar = "?";
	if (uri.indexOf("?") >= 0) {
		appendChar = "&";
	}
	return uri + appendChar + captureInputs();
}
/** Append select page inputs to a uri (link). */
function appendInputs(uri, inputParams) {
	var appendChar = "?";
	if (uri.indexOf("?") >= 0) {
		appendChar = "&";
	}
	return uri + appendChar + inputParams
}


function submitLink(link) {
	window.location.href=link;
}	
function submitLinkWithParams(id, link) {
	var inputParams = captureInputsFromElement(id);
	var linkAndParams = appendInputs(link, inputParams);
	window.location.href=linkAndParams;
}
/**
 * Capture all inputs from the whole page and append these into the form as
 * hidden fields.
 * 
 * @param formId
 *            is the id of the form we want to put the inputs into
 */
function captureInputsToForm(formId) {
	var form = document.getElementById(formId);
	var inputs = document.getElementsByTagName('input');
	for (x = inputs.length - 1; x >= 0; x--) {
		if (inputs[x].name && inputs[x].value) {
			var input = buildHiddenInput(inputs[x].name, inputs[x].value);
			form.appendChild(input);
		}
	}
}
/** Builds a hidden input element. */
function buildHiddenInput(key, value, form) {
	var input = document.createElement("input");
	input.setAttribute("type", "hidden");
	input.setAttribute("name", key);
	input.setAttribute("value", value);
	if (form) {
		form.appendChild(input);
	}
	return input;
}

/**
 * Set the action (where the form goes)
 * 
 * @param formId
 *            is the id of the form we want to put the inputs into
 * @param link
 *            where the form should go
 */
function submitForm(formId, link) {
	var form = document.getElementById(formId);
	if (form) {
		form.action = link;
		form.submit();
	} else {
		"invalid formId:" + formId;
	}
}

/**
 * Show/Hide an element.
 * 
 * @param id
 *            is the id of the element we want to show hide
 * @param button
 *            is the button we want to change the text content of
 */
function showHide(id, button, showingText, hiddenText) {
	var ele = document.getElementById(id);
	var text = document.getElementById(button);
	if (text.innerHTML == showingText) {
		ele.style.display = "block";
		text.innerHTML = hiddenText;
	} else {
		ele.style.display = "none";
		text.innerHTML = showingText;
	}
}
/**
 * Hide an element
 * 
 * @param id
 *            of element to hide
 */
function hide(id) {
	var ele = document.getElementById(id);
	if (! ele) {
		"no element defined for '" + id + "'";
	}
	ele.style.display = "none";
}
function show(id) {
	var ele = document.getElementById(id);
	if (! ele) {
		"no element defined for '" + id + "'";
	}
	ele.style.display = "block";
}

/** Set the value of the page(pageHolderId) to 1 */
function page_first(pageHolderId) {
	var pageHolder = document.getElementById(pageHolderId);
	pageHolder.value = 1;
}
/** Decrement the value of the page(pageHolderId) */
function page_prev(pageHolderId) {
	var pageHolder = document.getElementById(pageHolderId);
	var value = pageHolder.value;
	value--;
	if (value < 1)
		value = 1;
	pageHolder.value = value;
}
/** Increment the value of the page(pageHolderId) */
function page_next(pageHolderId, max) {
	var pageHolder = document.getElementById(pageHolderId);
	var value = pageHolder.value;
	value++;
	if (value > max)
		value = max;
	pageHolder.value = value;
}
/** Change to the last page(pageHolderId) */
function page_last(pageHolderId, max) {
	var pageHolder = document.getElementById(pageHolderId);
	var value = pageHolder.value;
	pageHolder.value = max;
}

/** get the xml http request object */
function getXMLHttp() {
	var xmlhttp;
	if (window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		alert("Your browser does not support XMLHTTP!");
	}
	return xmlhttp;
}

function makeAjaxSyncCall(url, inputParams) {
	var xmlHttp = getXMLHttp();
	xmlHttp.open("GET", appendInputs(url, inputParams), false);
	xmlHttp.send(null);
	return xmlHttp.responseText;
}
function makePostAjaxSyncCall(url, inputParams) {
	var xmlHttp = getXMLHttp();
	xmlHttp.open("POST", url, false);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlHttp.setRequestHeader("Content-length", inputParams.length);
	xmlHttp.setRequestHeader("Connection", "close");
	xmlHttp.send(inputParams);
	return xmlHttp.responseText;
}
function populateSelect(id, xml) {
	var selects = document.getElementsByName('tb_linked_child.id');
	selects[0].outerHTML = xml;
}
function buildSelect(id, inputParams) {
	if (isEmpty(inputParams)) {
		inputParams = captureInputsFromElement(id);
	}
	return makeAjaxSyncCall("build_select.ajax", inputParams);
}
function insertRecord(id, inputParams) {
	if (isEmpty(inputParams)) {
		inputParams = captureInputsFromElement(id);
	}
	return makeAjaxSyncCall("insert_record.ajax", inputParams);
}
function deleteRecord(id, inputParams, confirmMsg) {

	if (isEmpty (confirmMsg) == false) {
		if ( confirm(confirmMsg) == false) {
			return "EX:Record not deleted";
		}
	}
	if (isEmpty(inputParams)) {
		inputParams = captureInputsFromElement(id);
	}
	else
	{
		var ip = captureInputsFromElement(id);
		if (! isEmpty(ip) ) {
			inputParams =  ip + '&' + inputParams;
		}
	}
	return makeAjaxSyncCall("delete_record.ajax", inputParams);
}
function updateRecord(id) {
	var inputParams = captureInputsFromElement(id);
	return makeAjaxSyncCall("update_record.ajax", inputParams);
}
function doLogin(id) {
	var inputParams = captureInputsFromElement(id);
	return makeAjaxSyncCall("do_login.ajax", inputParams);
}
function doSavePage(id) {
	synchronizeRteWithHtml(id);
	var inputParams = captureInputsFromElement(id);
	return makePostAjaxSyncCall("do_save_page.ajax", inputParams);
}
function reset() {
	return makeAjaxSyncCall("do_reset.ajax", "none");
}

var previousErrorList;
function highlightErrors(errors, className) {
	var errorList = errors.substring(("ER:").length).split("&");
	for ( var i = 0; i < errorList.length; i++) {
		var keycode = errorList[i].split("=");
		var inputs = document.getElementsByName(keycode[0]);
		for ( var x = 0; x < inputs.length; x++) {
			inputs[x].className = className;
		}
	}
}

function isEmpty(txt) {
	if (txt != 'undefined' && txt != null
			&& txt.length > 0) {
		return false;
	}
	return true;
}

function showValidationErrors(errors) {
	if (previousErrorList != 'undefined' && previousErrorList != null
			&& previousErrorList.length > 0) {
		highlightErrors(previousErrorList, "editbox");
	}
	previousErrorList = "";
	if (typeof errors != 'undefined') {
		if (errors.search("EX:") == 0) {
			alert("Error:" + errors.substr(3));
		} else if (errors.search("ER:") == 0) {
			highlightErrors(errors, "editbox_invalid");
			previousErrorList = errors;
			alert("The high-lighted areas contain errors or are not completed correctly");
		} else if (errors.search("OK:") == 0) {
			return true;
		}
		return false;
	}
	return true;
}

function toHex(str) {
	var hex = "";
	for (var i = 0 ; i < str.length;i++) {
		hex += str.charCodeAt(i).toString(16);
	}
	return hex;
}

function do_preview_tab_select(id) {
	synchronizeRteWithHtml(id);
	var inputParams = captureInputsFromElement(id);
	var content = makePostAjaxSyncCall("do_process_page_for_preview.ajax", inputParams);
	var preview = document.getElementById(id+"_preview");
	preview.innerHTML = content;
	show(id+"_preview");
	hide(id+"_html_div");
	hide(id+"_rte_div");
}
function do_edit_tab_select(id){
	synchronizeRteWithHtml(id);
	hide(id+"_preview");
	show(id+"_html_div");
	hide(id+"_rte_div");
}
function do_rte_tab_select(id){
	synchronizeHtmlWithRte(id);
	hide(id+"_preview");
	hide(id+"_html_div");
	show(id+"_rte_div");
}
function do_add_page(id){
	synchronizeRteWithHtml(id);
	var pageName = prompt("Enter new page name:", "");
	var pageNames = document.getElementsByName("page.name");
	for (x = 0; x < pageNames.length; x++) {
		pageNames[x].value = pageName;
	}
}

function synchronizeRteWithHtml(id) {
	var ele = document.getElementById(id+"_rte_div");
	if (ele.style.display != "none") {
		var content = CKEDITOR.instances.edit_page_rte.getData();
		// var content = document.getElementById(id+"_rte").value;
		document.getElementById(id+"_html").value = content;
	}
}
function synchronizeHtmlWithRte(id) {
	var ele = document.getElementById(id+"_rte_div");
	if (ele.style.display == "none") {
		var content = document.getElementById(id+"_html").value;
		// document.getElementById(id+"_rte").value = content;
		CKEDITOR.instances.edit_page_rte.setData(content);
	}
}
