/* global http request object */
var xmlhttp;


/* deserializer class and methods */
function objDeSerializerElement(strContent) {
	// properties
	this.strFieldDelimiter="!!field!!";
	this.strFieldValueSeperator="!!equals!!";
	this.arrFieldValue=new Array();
	this.serialized_content=strContent;

	// methods
	this.parse=_dseParse;
	this.getValue=_dseGetValue;
}

function _dseParse() {	
	arrFields=this.serialized_content.split(this.strFieldDelimiter);
	for(i=0;i<arrFields.length;i++) {
		strFieldValue=arrFields[i];
		arrSep=strFieldValue.split(this.strFieldValueSeperator);
		strField=arrSep[0];		
		strValue=arrSep[1];
		this.arrFieldValue[strField]=strValue;
	}
}

function _dseGetValue(strField) {
	return this.arrFieldValue[strField];
}

function objDeSerializer(strContent) {
	// properties
	this.strRowDelimiter="!!row!!";
	this.objs=new Array();
	this.serialized_content=strContent;
		
	// methods
	this.parse=_dsParse;
	this.getObj=_dsGetObj;
	this.numberOfObjs=_dsNumberOfObjs;
}

function _dsParse() {
	//alert(this.serialized_content);
	arrLines=this.serialized_content.split(this.strRowDelimiter);	
	//alert(arrLines.length);
	for(j=0;j<arrLines.length;j++) {		
		objElement = new objDeSerializerElement(arrLines[j]);
		objElement.parse();
		this.objs[this.objs.length]=objElement;
	}
}

function _dsGetObj(i) {
	return this.objs[i];
}

function _dsNumberOfObjs() {
	return this.objs.length;
}


/* request and div manipulation functions */
function isOff(strDivId) {
	if (document.getElementById(strDivId).innerHTML=='') {
		return true;
	} else {
		return false;
	}
}

function setOn(strDivId) {
	document.getElementById(strDivId).style.display='block';
	document.getElementById(strDivId).style.visibility='visible';
}

function setOff(strDivId) {
	document.getElementById(strDivId).innerHTML='';		
	document.getElementById(strDivId).style.display='none';
	document.getElementById(strDivId).style.visibility='hidden';
}

function getXmlHttp() {
	var xmlhttp;
	if(window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest(); // Gecko (Firefox, Moz), KHTML (Konqueror, Safari), Opera
	} else if(window.ActiveXObject) {
		xmlhttp = new ActiveXObject("MSXML2.XMLHTTP"); // Internet Explorer
	} else {
		return false;
	}
	return xmlhttp;
}


function simpleRequest(myUrl, callBackFunc, strParams)  {	
	var strResult="";
	var xmlhttp;

	xmlhttp=getXmlHttp() ;
	
	xmlhttp.open("GET", myUrl, true); // Open a connection. Replace GET with HEAD in order to do a HEAD request.

	xmlhttp.onreadystatechange=function () {
		 if (xmlhttp.readyState==4) {
			if (xmlhttp.status==200) {	
				callBackFunc(xmlhttp,strParams);
			}
		}
	}
	
	xmlhttp.send(null); // send() is used to initiate the transfer. No actual data have to be sent in this case.
}

function simplePost(myUrl, callBackFunc, strParams)  {	
	var strResult="";
	var xmlhttp;

	xmlhttp=getXmlHttp() ;
	
	xmlhttp.open("POST", myUrl, true); 
	
	xmlhttp.onreadystatechange=function () {
		 if (xmlhttp.readyState==4) {
			if (xmlhttp.status==200) {	
				callBackFunc(xmlhttp,strParams);
			}
		}
	}
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	
	xmlhttp.send(null); // send() is used to initiate the transfer. No actual data have to be sent in this case.
}

function synchronousSimplePost(myUrl, callBackFunc, strParams)  {	
	var strResult="";
	var xmlhttp;

	xmlhttp=getXmlHttp() ;
	
	xmlhttp.open("POST", myUrl, false); 

	xmlhttp.onreadystatechange=function () {
		 if (xmlhttp.readyState==4) {
			if (xmlhttp.status==200) {	
				callBackFunc(xmlhttp,strParams);
			}
		}
	}
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	
	xmlhttp.send(null); // send() is used to initiate the transfer. No actual data have to be sent in this case.
}

function synchronousSimpleRequest(myUrl, callBackFunc, strParams)  {	
	var strResult="";
	var xmlhttp;

	
	xmlhttp=getXmlHttp() ;
	
	xmlhttp.open("GET", myUrl, false); // Open a connection. Replace GET with HEAD in order to do a HEAD request.

	xmlhttp.send(null); // send() is used to initiate the transfer. No actual data have to be sent in this case.

	if (xmlhttp.readyState==4) {
		if (xmlhttp.status==200) {	
			callBackFunc(xmlhttp,strParams);
		}
	}
	
		
}

function postFormRequest(myUrl, strForm, callBackFunc, strParams) {
	var strResult="";
	var xmlhttp;

	if(window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest(); // Gecko (Firefox, Moz), KHTML (Konqueror, Safari), Opera
	} else if(window.ActiveXObject) {
		xmlhttp = new ActiveXObject("MSXML2.XMLHTTP"); // Internet Explorer
	} else {
		return false;
	}
	xmlhttp.open("POST", myUrl, true); // Open a connection. 
	xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");

	xmlhttp.onreadystatechange=function () {
		 if (xmlhttp.readyState==4) {
			if (xmlhttp.status==200) {
				callBackFunc(xmlhttp,strParams)
			}
		}
	}
	
	xmlhttp.send(strForm);
}

function getFormValues(fobj,valFunc) {
	var str = "";
	var valueArr = null;
	var val = "";
	var cmd = "";

	for(var i = 0;i < fobj.elements.length;i++)
       {          	
           switch(fobj.elements[i].type)
           {   
           	
				case "textarea":					
					textAreaValue=fobj.elements[i].value;
					$strFieldName=fobj.elements[i].name;
					if (typeof(arrHtmlEditors)!="undefined") {					
						editorAssociated=arrHtmlEditors[$strFieldName];
						if (typeof(editorAssociated)!='undefined') {
							/* 
								There appears to be an HTMLArea associated with this field... we can't just get the value of the textarea,
								instead we've to go through the method getHTML on the appropiate editor object. The editor name is stored in arrHTMLEditors.							
							*/
							textAreaValue=eval("editor_"+editorAssociated+".getHTML()");							
						}
					}					
					str += fobj.elements[i].name + "=" + escape(textAreaValue) + "&";					
					break;
               case "text":               		
                    if(valFunc)
                    {
                        //use single quotes for argument so that the value of
                        //fobj.elements[i].value is treated as a string not a literal
                        cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
                        val = eval(cmd)
                    }
                    str += fobj.elements[i].name +
                     "=" + escape(fobj.elements[i].value) + "&";
                     break;
               case "select-one":
                    str += fobj.elements[i].name +
                    "=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
                    break;
				case "radio":
					if (fobj.elements[i].checked) {
						str += fobj.elements[i].name +
						 "=" + escape(fobj.elements[i].value) + "&";
					}
					break;
           }
       }
       str = str.substr(0,(str.length - 1));
       return str;
    }

function clearSelectBox(objBox) {
	for(i=0; objBox.options.length>0;i++) {
		objBox.options[0]=null;
	}
}

function addOptionToSelectBox(objBox, strOption, strValue) {
	var objOption = new Option(strValue, strOption);
	objBox.options[objBox.options.length] = objOption
}

function zetEenMomentAub(booModus) {	
	try {
		if (booModus) {
			document.getElementById('een_moment_aub').style.visibility='visible';
			document.getElementById('een_moment_aub').style.display='block';			
		} else {
			document.getElementById('een_moment_aub').style.visibility='hidden';
			document.getElementById('een_moment_aub').style.display='none';
		}
	} catch(e) {
		// Niet altijd is er een "een moment aub" div aanwezig. Bijvoorbeeld bij pane ajax requests.
	}
}

function writeInId(xmlhttp, strDivId) {	
	document.getElementById(strDivId).innerHTML = xmlhttp.responseText;
	zetEenMomentAub(false);
}

function sInfoValueForKey(sKey,sInp) {
	aLines=sInp.split(";");
	for(i=0;i<aLines.length;i++) {
		sLine=aLines[i];		
		sLineKey=sLine.substr(0,sLine.indexOf("="));
		if (sLineKey==sKey) {
			sLineValue=sLine.substr(sLine.indexOf("=")+1);
			return sLineValue;
		}
	}
	return "[key not found]";
}

