function getHttpObject(){
	var http = null;
  http = (window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");	
  return(http);
}

function removeStartHash(s){
	if((s!=='')&&(s.substring(0,1)=='#')){
		return (s.substring(1,s.length));
	}	
	else {
		return(s);
	}
}


function startsWith(wholeStr,startStr){
	if (wholeStr.substring(0,startStr.length)===startStr){
		return true;
	}
	return false;
}

function fillDOMLines(owner, s){
	 /* s is een string met crlf er in. 
	  * s wordt gesplitst in losse regels en deze regels worden
	  * losse textnodes die bij owner geappend worden 
	  */
	var lines=s.split('\n'),div;
	for (var i=0;i<lines.length;i++){
		div=createElt(owner,'div');
		createTextNode(div,lines[i]);		
	}	
}

function odd(i){
	return (i % 2) !==0;
}

function strZero(s,le){
	var res=s+'';
	while (res.length<le){
		res='0'+res;
	}
	return res;	
}

function removeLastHash(s){
	if (s.length==0){
		return('');
	}
	if (s.substring(s.length-1)=='#'){
		return(s.substring(0,s.length-1));
	}
	return(s);	
}


function createElt(owner,tag){
	//maakt een DOM node en append het aan owner. Retouneert de gemaakte node
	var elt=document.createElement(tag);
	owner.appendChild(elt);
	return(elt);	
}

function findParentByTagName(c,tagName){
	var tmp=c.parentNode
	var uTagName=tagName.toUpperCase();
	while (tmp && tmp.nodeName!=uTagName){
		tmp=tmp.parentNode;		
	}
	return tmp;	
}


function hasParent(deepChild,parent){
	var c=deepChild.parentNode;
	while ((c!==parent) && (c!==null)){
		c =  c.parentNode;		
	}
	if (c){
		return true;
	}
	return false;	
}

function removeElt(elt){
	var parent=elt.parentNode;
	if(parent){
		if (parent.removeChild(elt)){
			return true;
		}
		else {
			return false;
		}
	}	
	return false;
}

function isValidEmail(email){
	if (trim(email)=='') {
		return 'leeg emailadres';
	}
	if (email.indexOf('@')<0){
		return 'in een geldig emailadres zit een @';				
	}
	var emailParts=email.split('@');
	if (emailParts.length !=2){
		return ('Het emailadres is leeg voor of na de @');
	}
	if (trim(emailParts[0])==''){
		return ('Het emailadres is leeg voor de @')
	}
	
	if (trim(emailParts[1])==''){
		return ('Het emailadres is leeg na de @')
	}
	return '';
}

function commadelimited(strs){
	var res='';
	for (var i=0;i<strs.length;i++){
		res=res+strs[i]+',';
	}
	return removeLastChar(res);		
}

function createTextNode(owner,txt){
	var tn=document.createTextNode(txt);
	owner.appendChild(tn);
	return tn;
}

function createTr(tbody){
	var tr=tbody.insertRow(-1);
	return tr;	
}

function createTd(row,txt){
	var td=row.insertCell(-1);
	if (txt) {
		if (txt == '') {
			txt = ' ';
		}
		var tn = document.createTextNode(txt);
		td.appendChild(tn);
	};
	return(td);	
}

function createTdWidth(row,txt,w){
	var td=createTd(row,txt);
	td.style.width=w+'%';
	return (td);			
}


function createTh(row,txt){
	var th=document.createElement('th');
	if (txt) {
		if (txt == '') {
			txt = ' ';
		}
		var tn = document.createTextNode(txt);
		th.appendChild(tn);
	};
	row.appendChild(th);
	return(th);		
}

function createButton(owner,caption,onclick){
	var btn = document.createElement('input');
	btn.type='button';
	btn.value = caption;
	owner.appendChild(btn);
	if (onclick){
			btn.onclick=onclick;
	}
	return (btn);
}

function createDiv(owner){
	return createElt(owner,'div');
}

function createRadioButton(owner,txt,checked,onclick){
	createTextNode(owner,txt);
	var inp=document.createElement('input');
	inp.type='radio';
	inp.checked=checked;
	if (onclick) {
		inp.onclick = onclick;
	}
	owner.appendChild(inp);
	return inp;
}


function createCheckBox(owner,checked){
	var inp=document.createElement('input');
	inp.type='checkbox';
	inp.checked=checked;
	owner.appendChild(inp);
	return inp;
}


function fillTextArea(textArea,txt){
	if (textArea.innerText==undefined){
		textArea.textContent=txt;
	}
	else {
		textArea.innerText=txt;
	}
}

function getTextTextArea(textArea){
	if (textArea.innerText==undefined){
		return(textArea.textContent);
	}
	else {
		return(textArea.innerText);
	}
}

function createTextArea(owner){
	var inp=document.createElement('textarea');
	owner.appendChild(inp);
	return(inp);	
}

function showResult(res){
	if (typeof(res.errorMsg)=='undefined'){
		alert('showResult heeft onbekende errorMsg');
	}
	if (res.errorMsg==''){
		return(true);
	}
	else {
		alert(res.errorMsg);
		return(false);
	}	
}


/*lines is een array van strings
 */
function fillTextAreaWithLines(ta,lines){
	var s='';
	lines.each(function(line){
		s+=line+'\r';
	})
	ta.value=s;	
}


function defined(obj){
	return(typeof(obj)!='undefined');	
}

function removeChilds(elt){
	if (elt){
			while(elt.hasChildNodes()){
			elt.removeChild(elt.lastChild);
		}
	}
}

function initAfmetingen(elt,afmetingen){
	elt.style.width=afmetingen['width']+'px';
	elt.style.height=afmetingen['height']+'px';
	elt.style.left=afmetingen['left']+'px';
	elt.style.top=afmetingen['top']+'px';	
}


function getAllHeight(div){
	var result=0;
	//hier geen margins, want die kunnen collapsen (meestal max, boven en onder)	
	result+=div.offsetHeight;
	result+=div.style.paddingTop+div.style.paddingBottom;
	result+=div.style.borderTop+div.style.borderBottom;
	return(result);
}

function ltrim(str){
    for(var i=0; ((str.charAt(i)<=" ")&& (str.charAt(i)!=""));i++){};
    return(str.substring(i,str.length));
}



function rtrim(str){
    for (var i=str.length-1;((str.charAt(i)==" ")&&(str.charAt(i)!=""));i--);
    return(str.substring(0,i+1));
}



function trim(s){
    var t=rtrim(s);
    t=ltrim(t);    
    return t;
}


function getParser(){
	if (window.ActiveXObject){
		var parser=new ActiveXObject("Microsoft.XMLDOM");
		return(parser);
	}
	else {
		var xmlDoc=document.implementation.createDocument("","",null);
		return(xmlDoc);	
	}
}

function windowWidth(){
	if (parseInt(navigator.appVersion) > 3) {
		if (navigator.appName == "Netscape") {
			return (window.innerWidth);
		}
	}
 	if (navigator.appName.indexOf("Microsoft") != -1) {
		return (document.body.offsetWidth);
	}
}

function windowHeight(){
	if (parseInt(navigator.appVersion)>3) {
 		if (navigator.appName=="Netscape") {
  	  		return(window.innerHeight);
		}
 		if (navigator.appName.indexOf("Microsoft") != -1) {
			return (document.body.offsetHeight);
		}
	 }
}



function getParsedDocument(sXML){
	var parser;
	if (window.ActiveXObject){
		parser=new ActiveXObject("Microsoft.XMLDOM");
		parser.async=false;
		parser.loadXML(sXML);
		return(parser);
	}
	else {
	  parser=new DOMParser();
	  var doc=parser.parseFromString(sXML,"text/xml"); //http://www.w3schools.com/xml/xml_parser.asp
	  return(doc);
	}
}


function timeStamp(){
	var now = new Date();
	return(now.valueOf());
}

function timeStampStr(){
	return('timeStamp='+timeStamp());
}

function boolToInt($b){
	if($b) {
		return(1)
	}
	else {
		return(0);
	};
}

function inputsToPostParams(){
	var result='';
	var inputs=document.getElementsByTagName('input');
	for (inp in inputs){
		result+='inp.name='+inp.value+'&';		
	}
	result=removeLastChar(result);
	return(result);
}

function xmlBoolToNl(b){
	return(boolToNl(b=='1'));
}

function boolToNl(b){
	if(b){
		return('ja');
	}
	else {
		return('nee');
	};
}

function boolStrToNl(b){
	if (strcmp(b,'true')==0) {
		return('ja');
	}
	else {
		return('nee');
	}
}

function loadPage(url){
	request=getHttpObject();
	request.open("GET",url,false);
	request.send(null);
	return (request.responseText);
}

function lastChar(s){
	if (s==''){
		return '';
	}
	else {
		return s.substring(s.length-1);
	}
}

function removeLastChar(s){
	return(s.substring(0,s.length-1));
}

function removeChilds(elt){
	if (elt){
			while(elt.hasChildNodes()){
			elt.removeChild(elt.lastChild);
		};
	};
}

function getAllChildsRecurse(root,chlds){
  for (var i=0; i<root.childNodes.length;i++){
	 chlds.push(root.childNodes[i]);
	 getAllChildsRecurse(root.childNodes[i],chlds);
  }
}

function getAllChilds(root){
	var chlds=Array();
	getAllChildsRecurse(root,chlds);
	return chlds;
}

function postRequestSynchroon(url,data){
	request=getHttpObject();
	method='POST';
	header='Content-type:application/x-www-form-urlencoded; charset=UTF-8';
	//request.onreadystatechange=onResponse
	request.open(method,url,false);
    request.setRequestHeader(header.split(':')[0],header.split(':')[1]);
	request.send(data);
	return(request.responseText);
};


function postRequestSynchroonXML(url,data){
	request=getHttpObject();
	method='POST';
	header='Content-type:text/xml; charset=UTF-8';
	//header='Content-type:text/xml; charset=UTF-8';
	//request.onreadystatechange=onResponse
	request.open(method,url,false);
  request.setRequestHeader(header.split(':')[0],header.split(':')[1]);
	request.send(data);
	return(request.responseText);
};

function convertToHtml(txt){
	var lines=txt.split('\n');
	var res='';
	for (var i=0;i<lines.length;i++){
		res=res+lines[i]+'<br>';
	}
	if (lines.length>0){
		res=res.slice(0,res.length-4);		
	}	
	return res;
}



function sendRequestAsynchroon(url,data,onResponse){
	request=getHttpObject();
	method='post';
	if (!url){
		url='default_url.html';
	};
	if (!data){
		data='veld=defaultdata';
	};
	if (!method){
		method='post';
	};
	header='Content-type:application/x-www-form-urlencoded; charset=UTF-8';
	request.onreadystatechange=onResponse
	request.open(method,url,true);
  request.setRequestHeader(header.split(':')[0],header.split(':')[1]);
	request.send(data);
};

function dq(s){
	return('"'+s+'"');
}

function UnixTimeToJavascriptTimeObj(unixTime){
	var d=new Date();
	d.setTime( unixTime * 1000 );
	return d;	
}

function UnixTimeToJavascriptTime(unixTime){
	return UnixTimeToJavascriptTimeObj(unixTime).toLocaleString();
}
