/**
 * De class SysFun bevat alle functies die specifiek voor
 * dit systeem zijn ontwikkeld. 
 */
var SysFun = {
	llBubbled : false,
	
	/**
	 * De functie 'openForm' opent een webpagina in de pagina waarvan
	 * de functie is aangeroepen.
	 *
	 * @param	String	lcURL
	 * @param	String	lcModel
	 * @param	String	lcClass
	 * @param	String	lcEvent
	 * @param	Array	laParams
	 */
	openForm : function(lcURL, lcModel, lcClass, lcEvent, laParams) {
		/**
		 * Als er geen URL aangegeven is dan komt de aanroep van een onClick
		 * event op het Grid. Dit event mag geen voorrang krijgen op een
		 * klik van een object in het grid.
		 */
		if(lcURL === "") {
			/**
			 * De URL op basis van de parameters bepalen.
			 */			
			 lcURL = "index.php?module="+ lcModel +"&class="+ lcClass +"&event="+ lcEvent;

			/**
			 * De overige parameters ook toevoegen.
			 */
			for(var laParam in laParams) {
				lcURL += "&"+ laParam +"="+ laParams[laParam];
			}
			
			/**
			 * Een paar tellen wachten, het onclick event op een gridrecord
			 * wordt namelijk eerder afgevuurd dan de onclick op een knop.
			 * We willen het eigenlijk omdraaien, als enigste oplossing
			 * is het onderste.
			 */
			setTimeout("SysFun.openForm('"+ lcURL +"');", 250);			
		} else {
			/**
			 * Het scherm alleen tonen als er nog geen scherm
			 * getoon wordt.
			 */
			if(this.llBubbled == false) {
				/**
				 * Aangeven dat er een scherm wordt getoond.
				 */
				this.llBubbled = true;
				
				/**
				 * De pagina laden in de pagina welke nu is geladen.
				 */			
				window.location.href = lcURL;
				
				/**
				 * Een paar tellen wachten en het scherm weer vrijgeven.
				 */
				setTimeout("SysFun.llBubbled = false;", 1000);	
			}
		}		
	},
	
	/**
	 * De functie 'openModalForm' opent een webpagina in een div element
	 * die boven op de website is geplaatst. De overige onderdelen van 
	 * de website krijgen een zwarte klaar waardoor het net lijkt of
	 * er een scherm wordt geopend.
	 *
	 * @param	String	lcURL
	 * @param	String	lcModel
	 * @param	String	lcClass
	 * @param	String	lcEvent
	 * @param	Array	laParams
	 */
	openModalForm : function(lcURL, lcModel, lcClass, lcEvent, laParams) {				
		/**
		 * Als er geen URL aangegeven is dan komt de aanroep van een onClick
		 * event op het Grid. Dit event mag geen voorrang krijgen op een
		 * klik van een object in het grid.
		 */
		if(lcURL === "") {
			/**
			 * De URL op basis van de parameters bepalen.
			 */			
			 lcURL = "pioen/district2_pioen/index.php?module="+ lcModel +"&class="+ lcClass +"&event="+ lcEvent;
			
			/**
			 * De overige parameters ook toevoegen.
			 */
			for(var laParam in laParams) {
				lcURL += "&"+ laParam +"="+ laParams[laParam];
			}
			
			/**
			 * Een paar tellen wachten, het onclick event op een gridrecord
			 * wordt namelijk eerder afgevuurd dan de onclick op een knop.
			 * We willen het eigenlijk omdraaien, als enigste oplossing
			 * is het onderste.
			 */
			setTimeout("SysFun.openModalForm('"+ lcURL +"');", 250);			
		} else {
			/**
			 * Het scherm alleen tonen als er nog geen scherm
			 * getoon wordt.
			 */
			if(this.llBubbled == false) {
				/**
				 * Aangeven dat er een scherm wordt getoond.
				 */
				this.llBubbled = true;
				
				/**
				 * Een iframe aanmaken met daarin de inhoud van de te
				 * laden pagina. Deze oplossing is makkelijker omdat
				 * er zo geen javascript of css at runtime geimporteerd
				 * hoeft te worden in de website.
				 */			
				window.parent.document.getElementById("HiddenContainer").innerHTML = '<iframe src="'+ lcURL +'" style="width: 100%; height: 100%; border: 0px solid; margin: 0px;" frameborder="0"></iframe>';
				
				/**
			 	 * De containers zichtbaar maken.
			 	 */
				this._showDiv();
				
				/**
				 * Een paar tellen wachten en het scherm weer vrijgeven.
				 */
				setTimeout("SysFun.llBubbled = false;", 1000);					
			}
		}
	},

	/**
	 * De functie 'closeModalForm' sluit de webpagina in het div element
	 * 'HiddenContainer'. Daarnaast wordt de parent pagina ververst zodat
	 * eventuele aanpassen direct zichtbaar zijn.
	 *
	 * @param	Boolean	llNoReload
	 * @param	Boolean	llNoFrame
	 */
	closeModalForm : function(llNoReload, llNoFrame) {		
		/**
		 * De containers verbergen.
		 */
		this._hideDiv();	

		/**
		 * De parent pagina opnieuw verversen.
		 */
		if(llNoReload != true) {
			/**
			 * Het frame of de hoofdpagina verversen.
			 */
			if(llNoFrame != true) {
				/**
				 * Alleen verversen als er ook een iframe is.
				 */
				if(window.parent.document.getElementsByTagName("iframe").length > 0) {
					window.parent.document.getElementsByTagName("iframe")[1].contentWindow.location.reload();			
				}
			} else {
				/**
				 * Alleen verversen als er ook een parent pagina is.
				 */
				if(window.parent != window) {
					window.parent.location.reload();
				}
			}
		}
		
		/**
		 * De inhoud voor de zekerheid legen.
		 */
		if(window.parent.document.getElementById("HiddenContainer") != null) {
			window.parent.document.getElementById("HiddenContainer").innerHTML = '';		
		}
	},	
	
	/**
	 * De functie 'showDiv' laat het scherm dat op de achtergrond
	 * onzichtbaar is weer zichtbaar worden.
	 */
	_showDiv : function() {
		/**
		 * De breedte en hoogte van de zwarte skin bepalen,
		 * deze is niet altijd even groot.
		 */
		loModalContainer = window.parent.document.getElementById("ModalContainer");
		loModalContainer.style.display = "block";
		
		laPageSize = this._getPageSize();
		loModalContainer.style.width 	= laPageSize[0] +"px";
		loModalContainer.style.height 	= laPageSize[1] +"px";
		
		/**
		 * De zwarte skin eerst zichtbaar maken.
		 */
		window.parent.document.getElementById("ModalContainer").style.visibility = "visible";
		
		/**
		 * De div waarin de inhoud zich bevind zichtbaar maken.
		 */
		window.parent.document.getElementById("HiddenContainer").style.zIndex  	  = 100;
		window.parent.document.getElementById("HiddenContainer").style.visibility = "visible";
	},
	
	/**
	 * De functie 'hideDiv' laat het scherm dat modal is weer op
	 * de achtergrond onzichtbaar worden.
	 */
	_hideDiv : function() {
		/**
		 * De div waarin de inhoud zich bevind eerst onzichtbaar maken.
		 */
		if(window.parent.document.getElementById("HiddenContainer") != null) {
			window.parent.document.getElementById("HiddenContainer").style.visibility = "hidden";
			window.parent.document.getElementById("HiddenContainer").style.zIndex  	  = -100;
			
			/**
			 * De zwarte skin onzichtbaar maken.
			 */
			window.parent.document.getElementById("ModalContainer").style.visibility = "hidden";
		}
	},
	
	/**
	 * De functie 'getPageSize' berekend de grootte van het scherm en
	 * geeft de waarde hiervan terug doormiddel van een array.
	 *
	 * @return	Array
	 */
	_getPageSize : function() {
		var xScroll, yScroll;
		
		if (window.parent.innerHeight && window.parent.scrollMaxY) {	
			xScroll = window.parent.document.body.scrollWidth;
			yScroll = window.parent.innerHeight + window.parent.scrollMaxY;
		} else if (window.parent.document.body.scrollHeight > window.parent.document.body.offsetHeight){ // all but Explorer Mac
			xScroll = window.parent.document.body.scrollWidth;
			yScroll = window.parent.document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			xScroll = window.parent.document.body.offsetWidth;
			yScroll = window.parent.document.body.offsetHeight;
		}
		
		var windowWidth, windowHeight;
		if (self.innerHeight) {	// all except Explorer
			windowWidth = parent.innerWidth;
			windowHeight = parent.innerHeight;
		} else if (window.parent.document.documentElement && window.parent.document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = window.parent.document.documentElement.clientWidth;
			windowHeight = window.parent.document.documentElement.clientHeight;
		} else if (window.parent.document.body) { // other Explorers
			windowWidth = window.parent.document.body.clientWidth;
			windowHeight = window.parent.document.body.clientHeight;
		}	
				
		// for small pages with total height less then height of the viewport
		if(yScroll < windowHeight){
			pageHeight = windowHeight;
		} else { 
			pageHeight = yScroll;
		}
	
		// for small pages with total width less then width of the viewport
		if(xScroll < windowWidth){	
			pageWidth = windowWidth;
		} else {
			pageWidth = xScroll;
		}	
			
		arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
		return arrayPageSize;
	},
	
	/**
	 * De functie 'getMemberInfo' haalt op basis van het startnummer van 
	 * een lid de lidgegevens op uit de centrale database van het
	 * capsysteem.
	 */
	getMemberInfo : function(lnStartNr) {
		/**
		 * De gegevens asynchroon ophalen, dit moet via het domein waarop we
		 * nu draaien omdat er anders beveilingsmechanismen in werking treden.
		 */
		new Ajax.Request("index.php?module=members&class=members&event=getMemberInfo&lnStartNr="+ lnStartNr, {
			method:'get',
		    onSuccess: function(loResponse){
			    /**
			     * Als het request succesvol is voltooid dan moeten de gegevens
			     * in de daarvoor bestemde velden worden gestopt. (JSON)
			     */
			    lcResponse = loResponse.responseText;

			    /**
			     * Het antwoord parsen.
			     */
			   	eval("laData = "+ lcResponse);
				
			   	/**
			   	 * De element op het form vullen met de gegevens
			   	 * die zojuist zijn ingelezen.
			   	 */
			   	if(laData.length != 0) {
			   		document.getElementById("lid_naam").value 			= laData.achternaam_lid;
			   		document.getElementById("lid_tussenvoeg").value 	= laData.tussenvoegsel_lid;
			   		document.getElementById("lid_voorletters").value 	= laData.voorletters_lid;
			   		
				   	/**
				   	 * De vereniging van het lid dient ook direct
				   	 * geselecteerd te worden. Dit gebeurd aan de hand
				   	 * van de naam van de vereniging.
				   	 */
				   	loAssociation = document.getElementById("lid_vrgfk");
				   	
				   	for(var lnI = 0; lnI < loAssociation.length; lnI++) {
					   	if(loAssociation[lnI].innerHTML.toUpperCase() == laData.naam_vereniging.toUpperCase()) {
						   	loAssociation[lnI].selected = "selected";
					   	}
				   	}
		   		} else {
			   		document.getElementById("lid_naam").value 			= "";
			   		document.getElementById("lid_tussenvoeg").value 	= "";
			   		document.getElementById("lid_voorletters").value 	= "";	   		
			   		alert("Het lid met startnr '"+ lnStartNr +"' kan niet worden gevonden of maakt niet deel uit van uw vereniging.");
		   		}			   	
		   	},
		    onFailure: function(){ 
		    	alert('Er is een probleem opgetreden, neem contact op met Pioen Partners.'); 
		    }
		  });			
	},
	
	/**
	 * De functie 'getSections' haalt alle afdelingen die bij
	 * het opgegeven district horen op uit de webservice.
	 */
	getSections : function(lcBndPk) {
		/**
		 * De gegevens asynchroon ophalen, dit moet via het domein waarop we
		 * nu draaien omdat er anders beveilingsmechanismen in werking treden.
		 */
		new Ajax.Request("index.php?module=webservice&class=webservice&event=getSections&lcBndPk="+ lcBndPk, {
			method:'get',
		    onSuccess: function(loResponse){
			    /**
			     * Als het request succesvol is voltooid dan moeten de gegevens
			     * in de daarvoor bestemde velden worden gestopt. (JSON)
			     */
			    lcResponse = loResponse.responseText;		    

			    /**
			     * Het antwoord parsen.
			     */
			   	eval("laData = "+ lcResponse);	   	
			   	
			   	/**
			   	 * De oude inhoud van de combo verwijderen.
			   	 */
		      	loAfdPk = document.getElementById("lcAfdPk");
		      	
		      	for(var lnI = loAfdPk.length; lnI > 0; lnI--) {
		      		loAfdPk.remove(lnI);
		      	}
		      	
		      	/**
		      	 * De nieuwe item toevoegen aan de combo.
		      	 */
	      		for(var lnI = 0; lnI <= laData.length - 1; lnI++) {
					var loNewOption		= document.createElement('option');
					loNewOption.text	= laData[lnI].AFD_KODE +', '+ laData[lnI].AFD_OMSCHR;
					loNewOption.value	= laData[lnI].AFD_PK;
				
					try {
						loAfdPk.add(loNewOption, null);
					} catch(e) {
						loAfdPk.add(loNewOption);
					}
				}		   	
		   	},
		    onFailure: function(){ 
		    	alert('Er is een probleem opgetreden, neem contact op met Pioen Partners.'); 
		    }
		  });		
	},
	
	/**
	 * De functie 'showAgendaDiv' bepaald aan de hand van het
	 * type welk div element getoond moet worden.
	 */
	showAgendaDiv : function(lcType) {
		document.getElementById("ZAfdeling").style.visibility		= lcType == "A" ? "visible" : "hidden";
		document.getElementById("ZAfdeling").style.display			= lcType == "A" ? "block" 	: "none";
		document.getElementById("ZScheidsrechter").style.visibility	= lcType == "S" ? "visible" : "hidden";
		document.getElementById("ZScheidsrechter").style.display	= lcType == "S" ? "block" 	: "none";
		document.getElementById("ZZwembad").style.visibility		= lcType == "Z" ? "visible" : "hidden";
		document.getElementById("ZZwembad").style.display			= lcType == "Z" ? "block" 	: "none";
	},
	
	/**
	 * De functie 'showTip' toont een tooltip element op de positie
	 * van de muiscursor.
	 *
	 * @param	String		lcTip
	 */
	showTip : function(lcTip) {
		/**
		 * De tooltip tonen.
		 */
		Tip(lcTip, 	BALLOON, 		false, 
					ABOVE, 			true, 
					FOLLOWMOUSE, 	false, 
					DELAY, 			100, 
					DURATION, 		0, 
					FADEOUT, 		100);
	},
	
	/**
	 * De functie 'refreshRegistration' maakt aan de hand van het geselecteerde
	 * type velden zichtbaar/onzichtbaar.
	 *
	 * @param	String		lcType
	 */
	refreshRegistration : function(lcType) {
		/**
		 * Aan de hand van het type velden zichtbaar/onzichtbaar maken.
		 */
		switch(lcType) {
			case "U":
				document.getElementById("label_1").style.visibility		= "visible";
				document.getElementById("label_2").style.visibility 	= "visible";
				document.getElementById("label_3").style.visibility 	= "visible";
				document.getElementById("label_4").style.visibility 	= "visible";
				document.getElementById("label_5").style.visibility 	= "visible";
				document.getElementById("label_6").style.visibility 	= "visible";
				document.getElementById("label_7").style.visibility 	= "visible";
				document.getElementById("label_8").style.visibility 	= "visible";
				document.getElementById("label_9").style.visibility		= "visible";
				document.getElementById("label_10").style.visibility 	= "visible";
							
				document.getElementById("wdu_utvfk").style.visibility					= "visible";
				document.getElementById("wdu_muzieks").style.visibility 				= "visible";
				document.getElementById("wdu_samenstellings").style.visibility 			= "visible";
				document.getElementById("wdu_muziekd").style.visibility 				= "visible";
				document.getElementById("wdu_samenstellingd").style.visibility 			= "visible";
				document.getElementById("wdu_muziekp").style.visibility 				= "visible";
				document.getElementById("wdu_samenstellingp").style.visibility 			= "visible";
				break;
				
			case "F":
				//document.getElementById("label_1").style.visibility		= "hidden";
				document.getElementById("label_2").style.visibility 	= "hidden";
				document.getElementById("label_3").style.visibility 	= "hidden";
				document.getElementById("label_4").style.visibility 	= "hidden";
				document.getElementById("label_5").style.visibility 	= "hidden";
				document.getElementById("label_6").style.visibility 	= "hidden";
				document.getElementById("label_7").style.visibility 	= "hidden";
				document.getElementById("label_8").style.visibility 	= "hidden";
				document.getElementById("label_9").style.visibility		= "hidden";
				document.getElementById("label_10").style.visibility 	= "hidden";
							
				//document.getElementById("wdu_utvfk").style.visibility					= "hidden";
				document.getElementById("wdu_muzieks").style.visibility 				= "hidden";
				document.getElementById("wdu_samenstellings").style.visibility 			= "hidden";
				document.getElementById("wdu_muziekd").style.visibility 				= "hidden";
				document.getElementById("wdu_samenstellingd").style.visibility 			= "hidden";
				document.getElementById("wdu_muziekp").style.visibility 				= "hidden";
				document.getElementById("wdu_samenstellingp").style.visibility 			= "hidden";
				break;
				
		}
	}
};