/*
 *	ajax_admin.js (20060403)
 *	Copyright 2006 C Internet Services
 */



/***************************************************************************
 *	General UI functions
 */

function htmlentities(text) {
	//	Quick function, could be improved
	text = text.replace("&", "&amp;");
	while (text.indexOf("<") >= 0) {
		text = text.replace("<", "&lt;");
	}
	while (text.indexOf(">") >= 0) {
		text = text.replace(">", "&gt;");
	}
	return text;
}

function showDiv(name, toggle) {
	element = document.getElementById(name);
	if (!element) {
		alert("showDiv: element \"" + name + "\" not found");
		result = false;
	} else {
		if (toggle == -1)
			hide = (element.style.display == "inline");
		else
			hide = !toggle;

		element.style.display=hide ? "none" : "inline";
		result = !hide;
	}

	return result;
}



/***************************************************************************
 *	AJAX functions
 */

function ajaxCreateRequestObject() {
    var result;
    if (navigator.appName == "Microsoft Internet Explorer") {
        result = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        result = new XMLHttpRequest();
    }
    return result;
}

function ajaxRequest(type, action, params) {
	if (ajax == null) {

		if (ajaxDebug) {
			alert("ajaxDebug\n\najaxRequest: Creating ajax request object");
		}

		ajax = ajaxCreateRequestObject();
	}

	url = "/js/ajax/?type=" + type + "&action=" + action;
	if (params != "")
		url = url + "&" + params;

	random = Math.floor(Math.random()*1000000);
	url = url + "&ts=" + random;

	if (ajaxDebug) {
		alert("ajaxDebug\n\najaxRequest:\nurl=" + url);
	}

	ajaxRequestURL = url;
    ajax.open("get", url);
    ajax.onreadystatechange = ajaxHandleResponse;
    ajax.send(null);

	document.body.style.cursor="wait";
}

function ajaxHandleResponse() {
	document.body.style.cursor="default";

    if (ajax.readyState == 4) {

		if (ajaxDebug) {
			alert("ajaxDebug\n\najaxHandleResponse:\najax.status=" + ajax.status + "\najax.readyState=" + ajax.readyState + "\najax.responseText=\n" + ajax.responseText);
		}

		if (ajax.status==200) {

	        var response = ajax.responseText;
	        var el = new Array();

	        if (response.indexOf("||") != -1) {
	            el = response.split("||");
				code = el[0];
				if (code == "OK") {

					//	OK response from server, handle it!

					command = el[1];
					if (command == "write") {

						//	Write to a DOM element
						elementId = el[2];
						elementHTML = el[3];
						element = document.getElementById(elementId);
						if (!element)
							alert("ajax: Server tried to write unknown element: " + elementId);
						else {
							//	Load the response into a div and display it
							element.innerHTML = elementHTML;
							element.style.display = "inline";
						}
					} else if (command == "call") {

						//	Call a Javascript function
						functionName = el[2];
						if (window[functionName]) {

							//	Evaluate the function name and arguments
							evalText = functionName + "(";
							for (i=3;i<el.length;i++) {
								evalText += "'" + el[i] + "'";
								if (i != el.length-1) {
									evalText += ",";
								}
							}
							evalText += ")";
							eval(evalText);
						} else {
							//	Function not found
							alert("ajax: Server called unknown function: " + functionName);
						}

						//alert("call: " + evalText);
					} else if (command == "eval") {

						//	Evaluate something
						evalText = el[2];
						eval(evalText);

					} else {
						alert("ajax: Server issued unknown command: " + command);
					}

				} else if (code == "ERR") {

					//	ERR response from server
					number = el[1];
					message = el[2];
					alert("ajax: Error from server:\n\nERR " + number + " " + message);

				} else {

					//	Not OK and not ERR
					alert("ajax: Unknown message from server\n\n"+response);
				}


	        } else {

				//	We couldn't even find the characteristic || string in the response
				alert("ajax: Unknown response from server\n\n"+response);
			}

		} else { // ajax.status!=200

			alert("ajax: HTTP error status "+ajax.status);
		}
    }
}

//	AJAX globals:
var ajax = null;
var ajaxRequestURL = "";
var ajaxDebug = navigator.userAgent.indexOf("transip/ajaxdebug") > -1;



/***************************************************************************
 *	Domain panel AJAX request functions
 */

function contactFormAjaxRequest() {
	ajaxRequest("contact", "showForm");
	setMainTitle("<h1>Contactformulier</h1>");
}

function contactSendFormAjaxRequest() {
	params = "name=" + escape(document.getElementById('name').value);
	params += "&email=" + escape(document.getElementById('email').value);
	params += "&bericht=" + escape(document.getElementById('bericht').value);
	ajaxRequest("contact", "sendForm", params);
	setMainTitle("<h1>Resultaat</h1>");
}

function contentAjaxLetterRequest(letter) {
	params = "letter=" + escape(letter);
	ajaxRequest("content", "search", params);
	setMainTitle("Artikelen met beginletter: " + letter);
}

function contentAjaxGroupRequest(groupId, level) {
	if (groupId != 0) {
		showDiv("groupTools" + groupId, 1);
	}

	divElement = document.getElementById("groupDiv" + groupId);
	if (divElement && divElement.innerHTML != "") {
		//	Result already present, show the cached version
		showDiv("groupDiv" + groupId, 1);
	} else {
		params = "groupId=" + escape(groupId);
		params += "&level=" + escape(level);
		params += "&showGroups=1";
		ajaxRequest("groups", "search", params);
	}

	setMainTitle("Categori&euml;n");
}

function contentAjaxAllRequest(column, direction) {
    params  = "column=" + escape(column);
    params += "&direction=" + escape(direction);
    params += "&all=1;" 
	ajaxRequest("content", "search", params);
	setMainTitle("Alle artikelen <a href=\"javascript:basketAddAll()\" title=\"Alle domeinen aan uw werkmap toevoegen\"><img src=\"images/icons/bas_small.gif\" width=16 height=16 border=0></a>");
}

function contentAjaxProblemRequest() {
	ajaxRequest("content", "search", "problem=1");
	setMainTitle("Domeinen met probleem status");
}

/***************************************************************************
 *
 * Prijslijst functies
 */

function pricelistAjaxSearchRequest(showimg) {
	params = "searchname=" + escape(document.forms.searchForm.searchNameInput.value);
	params += "&searchartnr=" + escape(document.forms.searchForm.searchArtnrInput.value);
	params += "&showimg=" + escape(showimg);
	ajaxRequest("pricelist", "search", params);
	setMainTitle("Zoekresultaat");
}

function pricelistAjaxLetterRequest(letter, showimg) {
	params = "letter=" + escape(letter);
	params += "&showimg=" + escape(showimg);
	ajaxRequest("pricelist", "lettersearch", params);
	setMainTitle("Producten met beginletter: " + letter);
}

function pricelistAjaxGroupRequest(groupnr, showimg) {
	params = "groupnr=" + escape(groupnr);
	params += "&showimg=" + escape(showimg);
	ajaxRequest("pricelist", "groupsearch", params);
	setMainTitle("Productgroep");
	}
	
function pricelistAjaxAllGroups(groupId,showimg) {
	params = "groupId=" + escape(groupId);
	params += "&showimg=" + escape(showimg);
	ajaxRequest("groups", "groupsearch", params);
	setMainTitle("Productgroepen");
	}

function pricelist_orig_AjaxAllRequest(column, direction) {
    params  = "column=" + escape(column);
    params += "&direction=" + escape(direction);
    params += "&all=1;" 
	ajaxRequest("pricelist", "all", params);
	setMainTitle("Alle producten");
}

function pricelistAjaxAllRequest(column, direction, showimg) {
    params  = "column=" + escape(column);
    params += "&direction=" + escape(direction);
    params += "&showimg=" + escape(showimg);
    params += "&all=1;" 
	ajaxRequest("pricelist", "all", params);
	setMainTitle("Alle producten");
}

function pricelistAjaxColorRequest(color, showimg) {
    params  = "color=" + escape(color);
    params += "&showimg=" + escape(showimg);
	ajaxRequest("pricelist", "rgb", params);
	if(color == "b") { 
		setMainTitle("Nieuwe producten"); 
	} else if(color == "g") { 
		setMainTitle("Producten in prijs verlaagd");
	} else if(color == "r") { 
		setMainTitle("Producten in prijs verhoogd"); 
	} else { 
	setMainTitle(""); 
	}
}

/***************************************************************************
 *	Domain panel: general functions
 */

function setMainTitle(title) {
	mainTitleElement = document.getElementById("mainTitle");
	if (mainTitleElement)
		mainTitleElement.innerHTML = title;	
}

function groupOpen(groupId, level) {
	arrowElement = document.getElementById("groupArrow" + groupId);
	if (arrowElement)
		arrowElement.src = "images/icons/ig1.gif";

	contentAjaxGroupRequest(groupId, level+1);
}

function groupClose(groupId) {
	showDiv("groupDiv" + groupId, 0);
	showDiv("groupTools" + groupId, 0);

	arrowElement = document.getElementById("groupArrow" + groupId);
	if (arrowElement)
		arrowElement.src = "images/icons/ig0.gif";
}

function groupClick(groupId, level) {
	groupDiv = document.getElementById("groupDiv" + groupId);

	if (groupDiv && (groupDiv.style.display == "inline")) {
		groupClose(groupId);
	} else {
		groupOpen(groupId, level);
	}
}

/***************************************************************************
 *	End of controlpanel.js
 */
