// ---------------------------------------------------------------------
// JAVASCRIPT	: Kamper GUI, Macromedia-Adobe javascripts
// REVISION		: v1.4.0 08 april 2008
// 				: v1.4.1 28 jun 2008 kgui_stripSpaces interface changed
// ---------------------------------------------------------------------

var COOKIEDB = new Array ({cookieVersion:"", il:"", ww:""});
var cookieNo = "1";

Array.prototype.zoek = function (element) {	// v.1.1
	for (var keys in this) {
		// optie 1. zoeken array
		if (keys == element) {return this[keys]; break;}}	// Voor assiociatieve Arrays reeks["naam"] = "Pieter" ;
		// optie 2. vervangen <VOLGNR>
		// if (this[keys] == element) {return keys; break;}}	// <VOLGNR> REPLACEMENT ZIE KoggeZangers in combinatie met kgui_cleanTRdata(), kgui_numberTR() Oorspronkelijk ontwerp reeks ({A:1},{B:2},{E:5}) ;
	return -1;}

String.prototype.supplant = function (o) { 	// v.1.0 :: STRING replacement :: mydivVar.innerHTML = templateVar.supplant(data);  (JSON http://www.json.org/fatfree.html)
    return this.replace(/{([^{}]*)}/g, 
        function (a, b) {  
            var r = o[b];
            return typeof r === 'string' ? 
                r : a; 
        })} // Example "dkdkd {pieter} bvbv".supplant({pieter:"Henk"}) ; String '{pieter}' wordt vervangen door 'Henk'
	
// ---- Macromedia Dreamweaver functions -------------------------------

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}}

function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' bevat geen goed e-mail adres.\n';
      } else if (test!='R') {
        if (isNaN(val)) errors+='- '+nm+' moet een getal bevatten.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (val<min || max<val) errors+='- '+nm+' moet een nummer zijn tussen '+min+' en '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is verplicht.\n'; }
  } if (errors) alert('De volgende problemen zijn geconstateerd:\n'+errors);
  document.MM_returnValue = (errors == '');}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);}

function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;}

// ---- KGUI functions -------------------------------------------------

var _timerID=null;
var _URL=null;
function kgui_timeOut ( vTimeOutMinuten, vURL ) {
	_timerID = self.setTimeout("timeOutSession()", vTimeOutMinuten*60000);	// milliseconden
	_URL = vURL;
} // kgui_timeOut()
function timeOutSession() {
	clearTimeout(_timerID);
	window.location=_URL;
} // timeOutSession()

function kgui_insertHTMLField (vAppendObjTo,vArr) {	// V 1.2
	// Eerste object in array moet een elemenet zijn : DIV, etc.
	// STYLE-tag werkt niet. Dat is een sub-dom :: elem.style.color= '#cccccc';
	// Maak een CLASS aan.
	var newNode = null;
	for ( var keys in vArr[0] ) {
 //		alert(keys + ' = "' + vArr[0][keys] + '"');
		if (keys=="element") newNode = document.createElement(vArr[0].element);
		else {
			if ( newNode[keys] == undefined ) {
				// alert ( keys + ' = ' + vArr[0][keys] ) ; // setAttribute 
				newNode.setAttribute ( keys, vArr[0][keys] );
			} else newNode[keys] = vArr[0][keys] ;
		} // EndIF
	} // EndFor
	
	// Append to Object vAppendObjTo
	// vAppendObjTo.appendChild(newNode);

	// Insert before Object vAppendObjTo
	var beforeMe = MM_findObj("wrapper");
	document.body.insertBefore(newNode, beforeMe);

	return 	newNode;
} // kgui_insertHTMLField()

function deleteDomAndChilds(cell) {
	if ( cell.hasChildNodes() ) while ( cell.childNodes.length >= 1 ) cell.removeChild( cell.firstChild );       
	cell.parentNode.removeChild(cell); 
} // deleteDomAndChilds()

// ---------------------------------------------------------------------

function kgui_openPopup(vURL) {
	window.scrollTo(0, 0);
	MM_findObj("popupiframe").src = vURL; 
	MM_findObj("popup").style.display = "block";
} // kgui_openPopup()

function kgui_makeBreadCrums(vHome,vDivider) {		// v1.3, name giving of foldernames are important
	var url = window.location.href ;
	var breadcrums = "<div>";
	var obj, crums, dot, name, uri="/";
	if (!vDivider) vDivider = " > ";
	if (!vHome) vHome = "Home ";
	switch ( url.substr(0,4) ) {
		case "file":
			url = url.substr(url.indexOf("website")+8) ;				// From 8 position, skipping 'file://../../../website/', removing C:/ folders
			crums = url.split("/");										// first one is root = emtpy, second one is firts folder, last one is actuele filename
			if ( crums[crums.length-1]=="" ) crums.pop();				// Last array item was empty (foldername ending with a / <-slash )
			breadcrums += "<a href='/index.php'>"+vHome+"</a>" ;
			for ( var i=0, mx=crums.length-1, uri="/"; i<=mx; i++ ) {
				uri += crums[i]+"/";
				breadcrums += vDivider + "<a href='"+uri+"' title='"+crums[i]+"'>"+crums[i]+"</a>" ;
			}
			break;

		case "http":		
			url = url.substr(url.indexOf("/",7)) ;						// From 7 position, skipping 'http://', removing domainname
			crums = url.split("/");										// first one is root = emtpy, second one is first folder, last one is actuele filename or EMPTY
			if ( crums[0]=="" ) crums.shift();							// First array item was empty (domainname ending with a / <-slash )
			if ( crums[crums.length-1]=="" ) crums.pop();				// Last array item was empty (foldername ending with a / <-slash )
			breadcrums += "<a href='/index.php' title='"+vHome+"'>"+vHome+"</a>" ;
			if ( crums.length>0 )
				for ( var i=0, mx=crums.length; i<mx; i++ ) {
					if ( (dot=crums[i].indexOf(".")) < 0 ) {
						uri += crums[i]+"/";
						name = crums[i].replace("_"," ");					// Replace UNDERSCORES with SPACES	
					} else {
						uri += crums[i];
						name = crums[i].substr(0,dot).replace("_"," ");		// Replace UNDERSCORES with SPACES	
					}
					if ( name != "index" ) breadcrums += vDivider + "<a href='"+uri+"' title='"+name+"'>"+name+"</a>" ;
				} // EndFor folders in URL
			break;
	}
	return breadcrums + "</div>";
}

function kgui_stripSpaces (vStr, vNoSpacesAtAll) { //v1.2 vNoSpacesAtAll added
	var s=0, e=vStr.length-1, str="";
	while (	vStr.charAt(s)==" " ) {s++}		// Remove leading spaces
	while (	vStr.charAt(e)==" " ) {e--}		// Remove trailing spaces
	str = vStr.slice(s,++e);
	if (vNoSpacesAtAll) str = str.replace(" ","");
	return str;
}

function kgui_urlCleanUp(vStr) { // v1.0
	vStr = vStr.replace("//","");
	vStr = vStr.replace("http","");
	vStr = vStr.replace("https","");
	vStr = vStr.replace("file","");
	vStr = vStr.replace(":","");
	vStr = kgui_stripSpaces(vStr, false);
	return vStr;
} // kgui_urlCleanUp()

var volgNr=0;	// For continuation of VOLGNR's
function kgui_cleanTRdata(vTableID,vOptions,vAction) { // v1.2 :: kgui_cleanTRdata(vTableID,"VOLGNR|DATUMCHECK=071231|ODDEVEN","STYLE=error|DELETE|VOLGNRCONTINUE");
	var flg_oddEven=false,flg_checkDate=false,flg_checkDate2=false,flg_volgnr=false,flg_deleteTR=false,flg_disableCurrTR=false,flg_volgnrContinue=false;
	var myTable = MM_findObj(vTableID);
	var myRowLst = myTable.getElementsByTagName("tr");
	var myNrRows = myRowLst.length;
	var myCellLst, myNrCells=0, trTitle="", trDate="";
	var odd=true;
	var s,e,args,vDate="";
	var argsA,vStyle="";
	
	if ( vOptions==undefined ) alert("KGUI : Parameter verwacht");
	else {
		args = vOptions.split("|");
		argsA = vAction.split("|");
		flg_volgnr=args.zoek("VOLGNR")<0?false:true;
		flg_oddEven=args.zoek("ODDEVEN")<0?false:true;
		flg_deleteTR=argsA.zoek("DELETE")<0?false:true;
		flg_volgnrContinue=argsA.zoek("VOLGNRCONTINUE")<0?false:true;
		if (!flg_volgnrContinue) {volgNr=0;}

		for (var i=0,t=0;i<args.length;i++) {		// Check options for DATUMCHECK=
			t=args[i].indexOf("DATUMCHECK");
			if (t>=0){flg_checkDate=true;vDate=args[i].substr(11);break;}}

		for (var i=0,t=0;i<argsA.length;i++) {		// Check options for STYLE=
			t=argsA[i].indexOf("STYLE");
			if (t>=0){vStyle=argsA[i].substr(6);break;}}

		for( var i=0; i<myNrRows; i++) {			// Repeat for every <TR> in <TABLE>
			trTitle = myRowLst[i].title;
			if ( flg_checkDate ) {					// Perform <TR TITLE="[date] check
				s=trTitle.indexOf("[");
				e=trTitle.indexOf("]");
				// alert("s"+s+"e"+e+" - "+trTitle.slice((s+1),(e-1)))
				if ((s==-1)&&(e==-1)) flg_checkDate2 = false; 		// Title found but no '[DATE]' info
				else { flg_checkDate2 = true;
					trDate = trTitle.slice((s+1),e);
					myRowLst[i].title = trTitle.substr(e+1); }} 	// EndElseIf Perform <TR TITLE="[date] check
		
			myCellLst = myRowLst[i].getElementsByTagName("td");
			myNrCells = myCellLst.length;

			if ( myNrCells>0 ) {						// Er zijn <TD> aanwezig in deze <TR>
				if ( Number(trDate)<Number(vDate) && flg_checkDate2 ) flg_disableCurrTR=true;
				else flg_disableCurrTR=false;
				for( var j=0; j<myNrCells; j++) {		// Repeat for every <TD> in <TR>
					myCellLst[j].innerHTML = myCellLst[j].innerHTML.replace(/<DATUM>/,kgui_convertJJMMDD(trDate));
					if (flg_volgnr && myCellLst[j].innerHTML.indexOf("<VOLGNR>")>=0 && !flg_disableCurrTR) {
						myCellLst[j].innerHTML = myCellLst[j].innerHTML.replace(/<VOLGNR>/,++volgNr);
					}
				} //EndForeach <TD> in <TR>

				if ( flg_disableCurrTR ) {	// Bepaal de actie voor deze <TR> die buiten de datum valt
					if (flg_deleteTR) {myRowLst[i].className="nodisplay";
					} else { // Andere opties dan DELETE
						if (vStyle!="") myRowLst[i].className=vStyle;
					}
				}
			} //EndIf Er zijn <TD> aanwezig in deze <TR>
			if (!flg_disableCurrTR&&flg_oddEven&&!myRowLst[i].id=="") {
				odd?myRowLst[i].className="odd":myRowLst[i].className="even";
				odd=!odd;
			}
		} // EndForeach ROWS in TABLE
	} // EndIf PARAMETERS VERWACHT
}

var trc=new Array ();
function kgui_numberID () { // 1.1 renumber <tr> ID's of given <table> ID's ;kgui_numberID("x","y",...)
	var args=kgui_numberID.arguments,ro,nro;
	
	for(var a=0; a<args.length; a++){
		ro=MM_findObj(args[a]).getElementsByTagName("tr");
		nro=ro.length;

		for(var i=0,newID="",tagFound; i<nro; i++) {
			tagFound=-1;
			newID = ro[i].id;
			if (newID!="") {
				newID = newID.substring(0,newID.indexOf("#"));
				for( var j=0; j<trc.length; j++ ) if (trc[j].id==newID) {tagFound=j;break;}
				if (tagFound<0) {tagFound=(trc.length);trc.push({id:newID,count:1})}
				else trc[tagFound].count++
				ro[i].id = newID + trc[tagFound].count;
			} else {ro[i].id = "kgui"+String(i);}}}}

function XMwriteCookie(n,i,t){ // v1.0
	var ep="";if (t){d = new Date();d.setTime(d.getTime()+(t*86400000));
	ep = "; expires="+d.toGMTString();}document.cookie = n+"="+i+ep+"; path=/";}

function XMreadCookie(n){ // v1.0
	eq = n+"=";ca = document.cookie.split(';');for(var i=0;i<ca.length;i++) {
	c=ca[i];while (c.charAt(0)==' ') c = c.substring(1,c.length);
	if (c.indexOf(eq) == 0) return c.substring(eq.length,c.length);}return '';}

function kgui_readCookie(vCookieName) {
	var cookieData = XMreadCookie(vCookieName);
	var items_array;

	if (cookieData!=""){
		items_array = cookieData.split("|");
		for (var i=0; i<items_array.length; i++ ) {
			var data_array = items_array[i].split("=");
			switch ( data_array[0] ) {
				case "il" :		COOKIEDB[0].il = data_array[1]; break;
				case "ww" :		COOKIEDB[0].ww = data_array[1]; break;
				case "cookieVersion" : break;
				default:
					alert ( "WARNING 101 : onbekende parameter '"+data_array[0]+"'");
		}} return true;}
	return false;
} // kgui_readCookie()

function kgui_writeCookie(vCookieName) {
	var cookieData="";

	cookieData = "cookieVersion="+String(cookieNo)+"|il="+COOKIEDB[0].il +"|ww="+COOKIEDB[0].ww;

	XMwriteCookie(vCookieName,cookieData,365);
} // kgui_writeCookie()

var highLiteTR = new Array() ;
function kgui_highLiteTR(vThis,vTag) { // v1.3
	var obj = vThis;
	if (vTag==undefined||vTag=="") vTag="TR";
	while (obj.tagName!=vTag) obj=obj.parentNode;
	if (obj.className.indexOf("hl")>=0) obj.className = highLiteTR.zoek(obj.id);
	else { highLiteTR[obj.id] = obj.className; obj.className = obj.className + " hl"; }
} // kgui_highLiteTR()


// ---- AJAX functions --------------------------------------------------
function kgui_createRequest () { // V1.1
	try {
  		AJAXrequest = new XMLHttpRequest();
	} catch (trymicrosoft) {
  		try {
    		AJAXrequest = new ActiveXObject("Msxml2.XMLHTTP");
  		} catch (othermicrosoft) {
    		try {
      			AJAXrequest = new ActiveXObject("Microsoft.XMLHTTP");
    		} catch (failed) {
      			AJAXrequest = false;
    		}}}

	if (!AJAXrequest)
  		alert("Jouw browser ondersteunt geen XMLHttpRequest (AJAX).");
	return AJAXrequest;
}

function kgui_getFileDate(vTitel) {
	var xmlHttp = kgui_createRequest();		// Create an connection
//alert(escape(window.location.href));
	xmlHttp.onreadystatechange = function() {
		// xmlHttp.readyState hase been changed, it will automatically call xmlHttp.onreadystatechange()
		switch (xmlHttp.readyState) {
			case 0 :		// The request is not initialized
				break;
			case 1 :		// The request has been set up
				break;
			case 2 :		// The request has been sent
				break;
			case 3 :		// The request is in process
				break;
			case 4 :		// The request is complete, data available
				// The data sent back from the server can be retrieved with the responseText property.
				MM_findObj("mutatieDatumDiv").innerHTML = vTitel+" "+xmlHttp.responseText;
				break;
		} // EnwSwitch readyState
	} // onreadystatechange();

	xmlHttp.open("GET","/phplib/filedate.php?url=" + escape(window.location.href), true);
	xmlHttp.send(null);
} // kgui_getFileDate()
