var xmlObjs = new Array ();
var elemCurrent = null;
var winWidth;
var winHeight;

function CXMLReq (type, xmlhttp, szfunction, szparam) 
{ 
	this.type    = type; 
	this.func    = szfunction;
	this.param   = szparam;
	this.xmlhttp = xmlhttp; 
}

function getHTTPObject()
{	
	/*
	MAKE USEABLE FOR FIREFOX AND NEW BROWSERS ONLY
	*/
	if (window.XMLHttpRequest)
		return new XMLHttpRequest();
	else {
		alert("Your browser does not support AJAX.");
		return null;
	}
}

/*
	HANDLE FUNCTIONS AFTER AJAX CALLS
	-------------------------------------------------------------------------------------------------------------------
*/
function getInnerHTML (xmlObject, sztarget)
{
	sztext = xmlObject.responseText;
	if (document.getElementById (sztarget) == null)
		alert ( sztarget + ' unknown ');
	else
 		document.getElementById (sztarget).innerHTML = sztext;
}

function handleTestConnection (xmlObject, szParam)
{
	sztext = xmlObject.responseText;
	alert (sztext);
	if (trim (sztext) == "CONNECTED") 
		hideDialog ();
	else
		alert ('fout verbonden');
}

function create_dialog_box (xmlObject, szParam)
{
	sztext = xmlObject.responseText;
	if (sztext.length > 0) {
		cParam = szParam.split ('|');
		show_dialog (cParam [0], sztext, 10, 10);
		if (cParam [1])
			setFocusToFirstElement (cParam [1]);
	}
}

function openWindow (xmlObject, szParam)
{
	window.open (szParam, "_self");
}

function openPage (xmlObject, szParam)
{
	window.open (szParam, "_new");
	//window.open (szParam, "_blank");
	// chrome uses: _new
}

function doNothing (xmlObject, szParam)
{
}

function getInnerHTMLandSetFocus (xmlObject, szParam)
{
	var szId;
	sztext = xmlObject.responseText;
	if (sztext.length > 0) {
		bAjax  = (sztext.indexOf ('{|}') > -1);								// one of both is an array, containing second element which needs focus
		bParam = (szParam.indexOf ('|') > -1);								// when in Param: it is given via the js function
		if ((bAjax && bParam) || (!bAjax && !bParam)) 
			alert ('error, no puedo ser ambos');
			
		if (bAjax) 
			cText    = sztext.split ('{|}');
		else if (bParam) 
			cParam   = szParam.split ('|');
		
		szTxt    = bAjax ? cText [0] : sztext;
		szId     = bAjax ? cText [1] : cParam [1];
		szTarget = bAjax ? szParam   : cParam [0];
	
		document.getElementById (szTarget).innerHTML = szTxt;
		if (szId) 
			if (document.getElementById (szId)) 
				document.getElementById (szId).focus ();
	}
}
/*
	FUNCTIONS CALLING AJAX: GET AND POST
	-------------------------------------------------------------------------------------------------------------------
*/
function getParamFromServer (szform, szurl, szfunction, szparam, nsynchr)
{
	szget   = (szform.length > 0) ? createVar (szform) : '';
	szlink  = (szget.length > 0) ? "var_result=" + szget : '';
	szlink += (szget.length > 0 && szurl.length > 0) ? "&" : '';
	szlink += (szurl.length > 0) ? szurl : '';
	var httpObject = false;
	httpObject     = getHTTPObject ();
	if (httpObject != null) {
		httpObject.onreadystatechange = changeReqState;
		httpObject.open ("GET", "fq_ajax.php?" + szlink, true);
		httpObject.send (null);
	}
	var xmlreq = new CXMLReq ('', httpObject, szfunction, szparam);
	xmlObjs.push (xmlreq);
}

function getPostParamFromServer (szurlparams, szfunction, szparam)
{
	httpObject = getHTTPObject ();
	if (httpObject != null) {
		var szurl    = "fq_ajax.php";
		httpObject.open ("post", szurl, true);
		httpObject.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		httpObject.setRequestHeader("Content-length", szurlparams.length);
		httpObject.setRequestHeader("Connection", "close");
		httpObject.send (szurlparams);
		httpObject.onreadystatechange = changeReqState;
	}
	var xmlreq = new CXMLReq ('', httpObject, szfunction, szparam);
	xmlObjs.push (xmlreq);
}

function changeReqState ()
{
	for (var ncounter=0 ; ncounter<xmlObjs.length ; ncounter++) { 
		if (xmlObjs[ncounter].xmlhttp.readyState == 4) { 
			if (xmlObjs [ncounter].xmlhttp.status == 200 || xmlObjs [ncounter].xmlhttp.status == 304) 
				xmlObjs [ncounter].func (xmlObjs [ncounter].xmlhttp, xmlObjs [ncounter].param);
			else
				alert (' - de target ' + xmlObjs [ncounter].param + ' wordt niet geupdate - ' + xmlObjs [ncounter].xmlhttp.status);
			xmlObjs.splice(ncounter, 1);
			ncounter--;
		} 
	}
}
/*
	FUNCTIONS BEFORE AJAX CALLS
	-------------------------------------------------------------------------------------------------------------------
*/
var pTimerId = new Array();
function processDirectly (szform, szurl, szfunction, szparam, nIndex)
{
	//alert (nIndex + '-' + szurl);
	if (typeof(nIndex)=="undefined")
		nIndex = 0;
		
	if (typeof(nTimeOut)=="undefined")
		nTimeOut = 1000;		
	//
	// Function to process information directly 
	//
	clearTimeout (pTimerId [nIndex]);
	szfct    		  = "getParamFromServer ('" + szform + "', '" + szurl + "', " + szfunction + ", '" + szparam + "')";
	pTimerId [nIndex] = setTimeout (szfct, nTimeOut);
}

function testConnection ()
{
	var cObjId = document.getElementById ('var_userid');
	var cObjPw = document.getElementById ('var_pw');
	
	szname = cObjId.value;
	szpass = cObjPw.value;
	szpars = "id=" + szname + "&pw=" + szpass;

	getPostParamFromServer (szpars, handleTestConnection, '');
}

function handleDialogresult (szform, szformdlg, szurl, sztarget)
{
	hideDialog ();
	szget = createVar (szformdlg);
	if (sztarget.indexOf ('|') == -1) {
		szurl = szurl + "&var_result_dlg=" + szget;
		getParamFromServer (szform, szurl, getInnerHTML, sztarget);
	} else {
		curl    = szurl.split ('|');
		ctarget = sztarget.split ('|');
		cform   = szform.split ('|');
		for (ndx=0 ; ndx<curl.length ; ndx++) {
			curl [ndx] = curl [ndx] + "&var_result_dlg=" + szget;
			setTimeout ("getParamFromServer (\'" + cform [ndx] + "\', \'" + curl [ndx] + "\', getInnerHTML, \'" + ctarget [ndx] + "\')", 10 * (ndx + 1));
			//getParamFromServer (cform [ndx], curl [ndx], getInnerHTML, ctarget [ndx]);
		}
	}
}
/*
	SUPPORT FUNCTIONS
	-------------------------------------------------------------------------------------------------------------------
*/
function trim (value) {
  	value = value.replace(/^\s+/,'');
	value = value.replace(/\s+$/,'');
	return value;
}

function left (szval, nletters)
{
	return szval.substr (0, nletters);
}

function right (szval, nletters)
{
	nlen = szval.length;
	return szval.substr (nlen-nletters);
}

function checkEnter (cevent)
{
	//return (cevent.keyCode == 13);
	return (cevent.which == 13);
}

function checkChange (cevent)
{
	bok = ((cevent.which >= 48 && cevent.which <= 57) || cevent.which == 190 || cevent.which == 188);
	
	return bok; 
}

function getElemFocus ()
{
	var cobj = elemCurrent;
	alert (cobj.name);	
}

function createVar (szform)
{
	szvar = '';
	if (szform.length > 0) {
		nform = -1;
		for (i=0 ; i<document.forms.length ; i++) {
			if (document.forms [i].name == szform)			nform = i;
		}

		if (nform >=0) {
			szvar = '';
			for (i=0 ; i<document.forms [nform].length ; i++) {
				szname = document.forms [nform].elements [i].name;
				szval  = fixedEncodeURIComponent (document.forms [nform].elements [i].value);
				sztype = document.forms [nform].elements [i].type;
				badd   = (sztype == "radio" && document.forms [nform].elements [i].checked);
				badd  |= (sztype == "checkbox" && document.forms [nform].elements [i].checked);
				badd  |= (sztype == "text" || sztype == "select-one" || sztype == "hidden" || sztype == "textarea" || sztype == "password");

				if (badd)
					szvar += szname + "=" + szval + "|";
			}
		}
	}	
	return szvar;
}

function fixedEncodeURIComponent (str) 
{  
	return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').  
                                   replace(/\)/g, '%29').replace(/\*/g, '%2A');  
}  

function setFocusToFirstElement (szform)
{
	if (szform.length > 0) {
		nform = -1;
		for (i=0 ; i<document.forms.length ; i++) {
			if (document.forms [i].name == szform)			nform = i;
		}

		if (nform >=0) {
			bContinue = true;
			for (i=0 ; i<document.forms [nform].length && bContinue ; i++) {
				szname = document.forms [nform].elements [i].name;
				sztype = document.forms [nform].elements [i].type;
				badd   = (sztype == "radio" && document.forms [nform].elements [i].checked);
				badd  |= (sztype == "checkbox" && document.forms [nform].elements [i].checked);
				badd  |= (sztype == "text" || sztype == "select-one" || sztype == "textarea" || sztype == "password");
				
				if (badd) {
					bContinue = false;
					document.forms [nform].elements [i].focus ();
				}
			}
		}
	}
}

function getSize ()
{
	if (parseInt(navigator.appVersion)>3) {
 		if (navigator.appName=="Netscape") {
  			nW = window.innerWidth;
  			nH = window.innerHeight;
 		}
 		if (navigator.appName.indexOf("Microsoft")!=-1) {
  			nW = document.body.offsetWidth;
  			nH = document.body.offsetHeight;
 		}
	} else {
		nW = document.body.clientWidth;
		nH = document.body.clientHeight;
	}
	
	winWidth  = nW;
	winHeight = nH;
}

function positionBlock (szId, bCenterW, bCenterH)
{
	var cObject = document.getElementById (szId);
	if (cObject) {
		var szDivW  = cObject.style.width;
		var szDivH  = cObject.style.height;
	
		var nDivW   = szDivW.substr (0, szDivW.length - 2);
		var nDivH   = szDivH.substr (0, szDivH.length - 2);
	}

	getSize ();
	
	if (bCenterW)		cObject.style.left = (winWidth - nDivW) * 0.5  + "px";
	if (bCenterH)		cObject.style.top  = (winHeight - nDivH) * 0.5  + "px";
	else 				cObject.style.height = winHeight-10 + "px";
}

function animateButton (event, szId, szPage)
{
	bOver       = (event.type == 'mouseover');
	var cObject = document.getElementById (szId);
	var szAdd 	= (bOver) ? "_over" : "";
	cObject.src = "images/menuitems/menu_" + szPage + szAdd + ".png";
}

/*
	OTHER FUNCTIONS
	-------------------------------------------------------------------------------------------------------------------
*/
function submitForm (szfrmname)
{	
	nform = -1;
	for (i=0 ; i<document.forms.length ; i++) {
		if (document.forms [i].name == szfrmname) 
			nform = i;
	}
	if (nform > -1) 
		document.forms [nform].submit();
}

/*
	MOUSEEVENT FUNCTIONS
	-------------------------------------------------------------------------------------------------------------------
*/
function highlight_cell (sztrid)
{
	var cObject = document.getElementById (sztrid);
	cObject.style.backgroundColor = "#4f8bf0";
	cObject.style.cursor = "pointer";
}

function unfocus_cell (sztrid)
{
	var cObject = document.getElementById (sztrid);
	cObject.style.backgroundColor = "#ffffff";
}

function highlight_row (sztrid, ncells)
{
	for (i=0 ; i<ncells ; i++) {
		var cObject = document.getElementById (sztrid.concat('-' + i));
		cObject.style.backgroundColor = "#4f8bf0";
		cObject.style.cursor = "pointer";
	}
}

function unfocus_row (sztrid, ncells)
{
	for (i=0 ; i<ncells ; i++) {
		var cObject = document.getElementById (sztrid.concat ('-' + i));
		cObject.style.backgroundColor = "#ffffff";
	}
}

function highlight_text (szspanid)
{
	var cObject = document.getElementById (szspanid);
	if (cObject==null) {
		alert (szspanid + ' levert geen object op');
	} else {
		cObject.style.cursor = "pointer";
		//cObject.style.color   = "#ff0000";
		cObject.style.backgroundColor = "#4f8bf0";
	}
}

function unfocus_text (szspanid)
{
	var cObject = document.getElementById (szspanid);
	cObject.style.color = "#0c3a6d";
}

/*
	-------------------------------------------------------------------------
*/
var TIMER = 5;
var SPEED = 10;
var WRAPPER = 'content';
function replace_chars (sztext)
{
	while (sztext.indexOf ("&dq;")>=0 || sztext.indexOf ("&sq;")>=0) {
		var str = sztext.replace ("&dq;", "\"");
		sztext  = str;
		var str = sztext.replace ("&sq;", "'");
		sztext  = str;
	}
	return sztext;
}

function show_dialog (title, message, nleft, ntop) 
{
	var dialog;
	var dialogheader;
	var dialogclose;
	var dialogtitle;
	var dialogcontent;
	var dialogmask;
	if(!document.getElementById('dialog')) {
    	dialog = document.createElement('div');
    	dialog.id = 'dialog';
    	dialogheader = document.createElement('div');
    	dialogheader.id = 'dialog-header';
    	dialogtitle = document.createElement('div');
    	dialogtitle.id = 'dialog-title';
    	dialogclose = document.createElement('div');
    	dialogclose.id = 'dialog-close'
    	dialogcontent = document.createElement('div');
    	dialogcontent.id = 'dialog-content';
    	dialogmask = document.createElement('div');
    	dialogmask.id = 'dialog-mask';
    	document.body.appendChild(dialogmask);
    	document.body.appendChild(dialog);
    	dialog.appendChild(dialogheader);
    	dialogheader.appendChild(dialogtitle);
    	dialogheader.appendChild(dialogclose);
    	dialog.appendChild(dialogcontent);
    	dialogclose.setAttribute('onclick','hideDialog()');
    	dialogclose.onclick = hideDialog;
  	} else {
	    dialog = document.getElementById('dialog');
	    dialogheader = document.getElementById('dialog-header');
	    dialogtitle = document.getElementById('dialog-title');
	    dialogclose = document.getElementById('dialog-close');
	    dialogcontent = document.getElementById('dialog-content');
	    dialogmask = document.getElementById('dialog-mask');
	    dialogmask.style.visibility = "visible";
	    dialog.style.visibility = "visible";
  	}
  	dialog.style.opacity 	= .00;
  	dialog.style.filter 	= 'alpha(opacity=0)';
  	dialog.alpha 			= 0;
  	dialog.style.top 		= ntop + "px";
  	dialog.style.left 		= nleft + "px";
  	dialogheader.className 	= "certheader";
  	dialogcontent.className = "cert";
  	dialogtitle.innerHTML 	= title;
  	dialogcontent.innerHTML = message;
  	dialogmask.style.height = "80px";
  	dialog.timer = setInterval("fadeDialog (1)", 5);
	dialogclose.style.visibility = "visible";
}

// hide the dialog box //
function hideDialog() {
  	var dialog = document.getElementById('dialog');
  	clearInterval(dialog.timer);
  	dialog.timer = setInterval("fadeDialog(0)", 5);
}

// fade-in the dialog box //
function fadeDialog(flag) {
  	if(flag == null) {
	    flag = 1;
  	}
  	var dialog = document.getElementById('dialog');
  	var value;
  	if(flag == 1) {
	    value = dialog.alpha + 10;
  	} else {
	    value = dialog.alpha - 10;
  	}
  	dialog.alpha = value;
  	dialog.style.opacity = (value / 100);
  	dialog.style.filter = 'alpha(opacity=' + value + ')';
  	if(value >= 99) {
	    clearInterval(dialog.timer);
	    dialog.timer = null;
  	} else if(value <= 1) {
	    dialog.style.visibility = "hidden";
	    document.getElementById('dialog-mask').style.visibility = "hidden";
	    clearInterval(dialog.timer);
  	}
}
/*
OLD FUNCTIONS: TO BE DELETED:
*/
/*
function selectClient (szfunc, szid)
{
	if (szfunc == "CLIENT") {
		getParamFromServer ('save_area', 'var_button_state=' + szid, getInnerHTML, 'area_save');
		getParamFromServer ('client_area', 'var_client_select=' + szid, getInnerHTML, 'client_area');
	}
	if (szfunc == "SHOP") {
		getParamFromServer ('', 'var_client_select_select_area=' + szid, getInnerHTML, 'area_shop_select');
		getParamFromServer ('', 'var_product_menu=', getInnerHTML, 'mnu_shop_sub');
		getParamFromServer ('', 'var_client_selected=-2&var_client_select_shop_area=' + szid, getInnerHTML, 'shop_area');
	}
	if (szfunc == "GAS") {
		getParamFromServer ('', 'var_gas_client=' + szid, getInnerHTML, 'gas_client_area');
		getParamFromServer ('', 'var_gas_clear_gas_list=', getInnerHTML, 'gas_fillings_area');
	}
	
	if (szfunc == "SERVICE") {
		getParamFromServer ('', 'var_select_serv_type=CLIENT&var_select_serv_client=' + szid, getInnerHTML, 'service_client_area');
		getParamFromServer ('', 'var_select_serv_type=GEN&var_select_serv_client=' + szid, getInnerHTML, 'service_area_general');
		getParamFromServer ('', 'var_select_serv_type=SPEC&var_select_serv_client=' + szid, getInnerHTML, 'service_area_spec');
	}
}

function selectProduct (szfunc, szid, szcat)
{
	if (szfunc == "PRODUCT") {
		getParamFromServer ('save_area', 'var_page=PRODUCT&var_button_product_state=' + szid, getInnerHTML, 'area_save');
		getParamFromServer ('mnu_product_sub', 'var_page=PRODUCT&var_cat=' + szcat + '&var_product_select=' + szid, getInnerHTML, 'product_area');
		getParamFromServer ('', 'var_page=PRODUCT&var_cat=' + szcat + '&var_product_select_art=' + szid, getInnerHTML, 'article_area');
		getParamFromServer ('mnu_product_sub', 'var_product_mnusub2_3=' + szcat + '&var_product_selected=' + szid + '&var_action=OLDLIST', getInnerHTML, 'mnu_product_sub_3');
	}
	
	if (szfunc == "STOCK") {
		getParamFromServer ('mnu_product_sub', 'var_page=STOCK&var_cat=' + szcat + '&var_product_select=' + szid, getInnerHTML, 'stocklist_area');
		getParamFromServer ('mnu_product_sub', 'var_product_mnusub2_3=' + szcat + '&var_product_selected=' + szid + '&var_action=OLDLIST', getInnerHTML, 'mnu_product_sub_3');
	}
	
	if (szfunc == "SHOP") {
		getParamFromServer ('mnu_shop_sub', 'var_product_mnusub2_3=' + szcat + '&var_product_selected=' + szid + '&var_action=OLDLIST', getInnerHTML, 'mnu_product_sub_3');
		getParamFromServer ('shop_area', 'var_page=SHOP&var_cat=' + szcat + '&var_product_select_prod=' + szid, getInnerHTML, 'shop_area');
	}
}
*/
/*
function saveProduct (szareas, szurls)
{
	carea = szareas.split ('|');
	curl  = szurls.split ('|');
	getParamFromServer (carea [0], curl [0], doNothing, "");
	getParamFromServer (carea [1], curl [1], doNothing, "");
}
*/

