// Javascript

// .................................................
// Altijd uit te voeren bij aanroepen can common.js
// .................................................

if (window.name == 'printWindow') { // controleer of de naam vh window printWindow is
	if (window.print) { 
		window.print(); 
	} // print dan indien mogelijk het actieve window
	window.close(); // en sluit het venster
}

// .................................................

function afdrukken() { // functie om window te printen
	// open window met naam printWindow, en parameter layout = print (obj ref = prw)
	if (document.location.search != "") {
		param = document.location.search + '&layout=print' }
	else {
		param = '?layout=print'
	}
	prw = window.open(this.location+param,'printWindow',''); 
}

// .................
// Algemene functies
// .................

function PageQuery(q) {
	if(q.length > 1) this.q = q.substring(1, q.length);
	else this.q = null;
	this.keyValuePairs = new Array();
	if(q) {
		for(var i=0; i < this.q.split("&").length; i++) {
			this.keyValuePairs[i] = this.q.split("&")[i];
		}
	}
	this.getKeyValuePairs = function() { return this.keyValuePairs; }
	this.getValue = function(s) {
		for(var j=0; j < this.keyValuePairs.length; j++) {
		if(this.keyValuePairs[j].split("=")[0] == s) return this.keyValuePairs[j].split("=")[1];
		}
	return false;
	}
	this.getParameters = function() {
		var a = new Array(this.getLength());
		for(var j=0; j < this.keyValuePairs.length; j++) {
			a[j] = this.keyValuePairs[j].split("=")[0];
		}
	return a;
	}
	this.getLength = function() { return this.keyValuePairs.length; }
}

function queryString(key) {
	var page = new PageQuery(window.location.search);
	return unescape(page.getValue(key));
	}

function displayItem(key) {
	if (queryString(key)=='false') 	{
	document.write("you didn't enter a ?name=value querystring item.");
	} 
	else {
	document.write(queryString(key));
	}
}

// Get QueryString
function getQueryVariable(variable) {  
	var query = window.location.search.substring(1);  
	var vars = query.split("&");  
	for (var i=0;i<vars.length;i++) {
			var pair = vars[i].split("=");
			if (pair[0] == variable) { return pair[1]; }  
	}   
	alert('Query Variable ' + variable + ' niet gevonden');
}

// Komt een element voor in een Array?
// Functie bestaat sinds JS 1.6
// URL http://gathering.tweakers.net/forum/list_messages/1153433
if (!Array.prototype.indexOf)
{
    Array.prototype.indexOf = function(searchElement, fromIndex)
    {
        var l = this.length, i = 0;
        if (fromIndex)
        {
            i = fromIndex;
            if (i < 0)
            {
                i += l;
                if (i < 0) i = 0;
            }
        }

        while (i < l)
        {
            if (this[i] === searchElement) return i;
            i++;
        }

        return -1;
    }
}

// --------------------------------------------------------------------------------------------------
// QuirksMode fx
function getObj(name)
{
  if (document.getElementById)
  {
  	this.obj = document.getElementById(name);
	this.style = document.getElementById(name).style;
  }
  else if (document.all)
  {
	this.obj = document.all[name];
	this.style = document.all[name].style;
  }
  else if (document.layers)
  {
	this.obj = getObjNN4(document,name);
	this.style = this.obj;
  }
}

function getObjNN4(obj,name)
{
	var x = obj.layers;
	var foundLayer;
	for (var i=0;i<x.length;i++)
	{
		if (x[i].id == name)
		 	foundLayer = x[i];
		else if (x[i].layers.length)
			var tmp = getObjNN4(x[i],name);
		if (tmp) foundLayer = tmp;
	}
	return foundLayer;
}

// --------------------------------------------------------------------------------------------------
function left(str, n) { // geeft n tekens vanaf links
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}
function right(str, n) { // geeft n tekens vanaf rechts
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

// --------------------------------------------------------------------------------------------------
// MZ functies 
// Afronden op x decimalen
function getalAfronden(getal,decimalen) {
	var getal = parseFloat(getal) ;
	var rlength = parseInt(decimalen) ; // The number of decimal places to round to
	var afgerond = Math.round(getal*Math.pow(10,rlength))/Math.pow(10,rlength);
	return afgerond ;
}

// Functie die bij de veldwaarde de decimalen optelt/aftrekt, danwel 1 erbij optelt of ervan aftrekt
function mz_plus(object,stap) {
	var waarde = parseFloat(object.value) ;
	var stap = parseFloat(stap) ;
	if (!isNaN(waarde)) { 
		object.value = getalAfronden(waarde+stap,2) ;
	}
}

function leesGetal(waarde,getalType) {
	switch(getalType) {
		case 'float' :
			w = isNaN(parseFloat(waarde)) ? 0 : parseFloat(waarde) ;
		break ;		
		case 'int' :
		default :
			w = isNaN(parseInt(waarde)) ? 0 : parseInt(waarde) ;
		break ;
	}
	return w ;
}

// --------------------------------------------------------------------------------------------------
// Functies voor het verbergen van tabs en andere lagen

function mzMarkeerDivs(marker) {
	var marker = (typeof marker == 'undefined') ? 'tab' : marker ;
	var divLijst = document.getElementsByTagName('div');
	var divMarkerLijst = new Array() ;

	for(var i=0; i<divLijst.length; i++) {
		divId = divLijst[i].getAttribute('id') ; // alert(divId) ;
		if ( divId != null ) {
			if ( divId.indexOf(marker) == 0 ) {
				divMarkerLijst[divMarkerLijst.length] = divId ;
			}
		}
	}
	return divMarkerLijst ;
}

function mzVerbergLaag(laagnaam) {
	var x = new getObj(laagnaam); 
	x.style.display = 'none'
}

function mzToonLaag(laagnaam) {
	var x = new getObj(laagnaam); 
	x.style.display = 'block'
}

function mzToggleLaag(laag,marker) {
	var d = new getObj(laag); // maak een object dat de eigenschappen op van opgegeven tab bevat
	d = d.style.display; // vraag de parameter display van dit moment op (en gooi het object weg)
	mzVerbergMarkers(marker); // verberg alle lagen die voldoen aan tag
	(d == 'none') ? mzToonLaag(laag) : mzVerbergLaag(laag) ; // zet de tab aan of uit
}

function mzVerbergMarkers(marker) {
	var markerLijst = mzMarkeerDivs(marker) ;
	for (i=0; i<markerLijst.length; i++) {
		// alert(markerLijst[i]);
		mzVerbergLaag(markerLijst[i]) ;
	}
}

function mzToonMarkers(marker) {
	var markerLijst = markeerDivs(marker) ;
	for (i=0; i<markerLijst.length; i++) {
		toonLaag(markerLijst[i]) ;
	}
}

function mzMaakLinks(tag,marker) {
// Zoekt een tag gevolgd door een DIV met in de naam de marker en voegt aan de tag een HREF toe die de 
// DIV open of dicht zet

// TODO: tag als variabele opnemen.

var allTags = document.getElementsByTagName(tag);
	// alert('tag: ' + tag + ' marker: ' + marker);
	for(var j=0; j<allTags.length; j++)
		{
		t=mzNextElement(allTags[j], "DIV");
	
		if(t) {
			var txt = allTags[j].childNodes[0].data; 
			// alert (txt) ;
	
			divId = t.getAttribute('id');
			
		//alert (divId);
		
		if(divId != null)
			if( divId.indexOf(marker) == 0 ) {
				// alert ('Maak een link voor ' + divId) ;
				allTags[j].removeChild(allTags[j].childNodes[0]);
				var textNode=document.createTextNode(txt);
	
				link=document.createElement("a");
				link.setAttribute("data",txt);
				link.setAttribute("href", "javascript:mzToggleLaag('" + divId + "','" + marker + "');") 
				link.appendChild(textNode); 
	
				allTags[j].appendChild(link);
				}
			}
		}
}

// nextElement is een hulpfunctie van mzMaaklinks()
function mzNextElement(elmnt,find) {
	if(!(s=elmnt.nextSibling))
		return false;
	
	while(s.nodeName == "#text" && s.nextSibling)  // sla text-nodes over (spaties, \r\n, ..)
		s=s.nextSibling;
	if(s.nodeName == find)
		return s;
	else	return false;
}

function mzPrintPage() {
	if (window.mzToonTabs) { 
		mzToonTabs() 
	};
	window.print();
}

// Velden is een array met formnaam.veldnaam waarden
function mzWisVelden(velden) {
	for (i=0; i<velden.length; i++) { 	
		document.eval(velden[i]).value = '';
	}
}

// --------------------------------------------------------------------------------------------------
// Formulier validatie, tovoeging op fValidate van Peter Bailey 
function mzRequiredFields() {
	var reBok = /bok$/ ;	
	// krijg onderstaand reg.expressie niet werkend om indien een input element de class errHilite heeft
	// het kleuren van het verplichte veld achterweg te laten. Zie ook (*)
	var reCss = /errHilite/ ; // kreeg deze reg.expr. test niet werkend...
	if (typeof df == 'undefined') { df = document.forms[0] ; }
	var e ;
	
	// Loop door alle elementen van het formulier
	for (f=0;f<df.elements.length;f++) {
		e = df.elements[f] ;
		
		// Mits het veld een alt-attribuut en className-attribuut heeft...
		if ( typeof e.alt != 'undefined' && typeof e.className != 'undefined' ) { // (*) && !reCss.test(e.className)
			// ... en het alt-attribuut niet leeg is, 
			// ... en de fValidate bok-modus (veld mag leeg worden gelaten) is niet van toepassing ... 
			if ( e.alt != '' && !reBok.test(e.alt) ) {
				// ... haal de CSS className verplichtVeld weg als deze er al staat, (om dubbele CSS te voorkomen)
				e.className.replace( e, "verplichtVeld" ); 
				// ... zet schrijf de verplichtVeld CSS code
				e.className = ( e.className + " " + "verplichtVeld" ).trim(); 
			} else if ( e.className != "bedragTotaal" && e.type != "submit" && e.type != "reset" ) {
				// ... anders haal het weg omdat het geen verplicht veld is.
				e.className = e.className.replace( "verplichtVeld", "" ).trim();
			}
		}
	}
}

function mzReloadOpener() {
		if (window.opener) {
			
		}
}
