var accdate='';
/*
moo.fx pack, effects extensions for moo.fx.
by Valerio Proietti (http://mad4milk.net) MIT-style LICENSE
for more info visit (http://moofx.mad4milk.net).
Friday, April 14, 2006
v 1.2.4

modified by booleanpark (nested accordions with ajax)
please visit moofx.mad4milk.net for original and complete scripts !!
*/

//composition effect: widht/height/opacity
fx.Combo = Class.create();
fx.Combo.prototype = {
	setOptions: function(options) {
		this.options = {
			opacity: true,
			height: true,
			width: false
		}
		Object.extend(this.options, options || {});
	},

	initialize: function(el, options) {
		this.el = $(el);
		this.setOptions(options);
		if (this.options.opacity) {
			this.o = new fx.Opacity(el, options);
			options.onComplete = null;
		}
		if (this.options.height) {
			this.h = new fx.Height(el, options);
			options.onComplete = null;
		}
		if (this.options.width) this.w = new fx.Width(el, options);
	},
	
	toggle: function() { this.checkExec('toggle'); },

	hide: function(){ this.checkExec('hide'); },
	
	clearTimer: function(){ this.checkExec('clearTimer'); },
	
	checkExec: function(func){
		if (this.o) this.o[func]();
		if (this.h) this.h[func]();
		if (this.w) this.w[func]();
	},
	
	//only if width+height
	resizeTo: function(hto, wto) {
		if (this.h && this.w) {
			this.h.custom(this.el.offsetHeight, this.el.offsetHeight + hto);
			this.w.custom(this.el.offsetWidth, this.el.offsetWidth + wto);
		}
	},

	customSize: function(hto, wto) {
		if (this.h && this.w) {
			this.h.custom(this.el.offsetHeight, hto);
			this.w.custom(this.el.offsetWidth, wto);
		}
	}
}

var popupactive=false;
fx.Accordion = Class.create();
fx.Accordion.prototype = {
	setOptions: function(options) {
		this.options = {
			delay: 100,
			opacity: false
		}
		Object.extend(this.options, options || {});
	},

	initialize: function(togglers, elements, options) {
		this.elements = elements;
		this.setOptions(options);
		var options = options || '';
		this.fxa = [];
		if (options && options.onComplete) options.onFinish = options.onComplete;
		elements.each(function(el, i){
			options.onComplete = function(){	
				//alert('complete' + el.offsetHeight);
				if (el.offsetHeight > 0) {
					el.style.height = '1%';
				}
				else {
					el.innerHTML='';
					el.style.cssText = 'OVERFLOW: hidden; HEIGHT: 0px';
				}

				if (options.onFinish) options.onFinish(el);
				setupGrid();

			}
			this.fxa[i] = new fx.Combo(el, options);
			this.fxa[i].hide();
		}.bind(this));

		togglers.each(function(tog, i){
			if (typeof tog.onclick == 'function') var exClick = tog.onclick;
			tog.onclick = function(){
					cbfunc = function(notSelected){
						if (exClick) exClick();
						this.showThisHideOpen(elements[i]);
						//edit HH
						var togparent = tog.parentNode;
						this.clearSelection(togparent);
						if(notSelected==null)
							this.setSelected(tog);
					}.bind(this);
				//
				//  START SCRIPT LANDAL
				//
				// tog is een referentie naar het A element waarop geklikt is
				// i is een index van de positie van het geklikte element (positie in de DIV)
				// elements[i] levert een referentie op naar het DIV element waarop de actie moet plaatsvinden
				if (popupactive) hideInfoPanel();
				var myDiv = elements[i];
				myLevel = tog.className.replace('stretchtoggle','').replace(' alps','').replace('_on','');
				if(!myDiv.hasChildNodes()) {
					// empty div -> call ajax to fetch divs
					
					oAccordion = elements[i];
					switch(myLevel){
						case '1': 
							level1 = tog.id.replace('l1_','');
							// level1 clicked -> erase lower levels (ivm actiekortingen, Nico)
							level2='';level3='';level4='';level5='';level6='';
							break;
						case '2': 
							level2 = tog.id.replace('l2_','');
							level3='';level4='';level5='';level6='';
							break;
						case '3': 
							if(tog.id.indexOf('a') > -1)
								level3 = tog.id.replace('a3_','');
							else
								level3 = tog.id.replace('l3_','');

							level4='';level5='';level6='';
							break;
						case '4': 
							level4 = tog.id.replace('l4_','');
							level5='';level6='';
							break;
						case '5': 
							level5 = tog.id.replace('l5_','');
							level6='';
							break;
						case '6': 
							level6 = tog.id.replace('l6_','');
							break;
					}
					setTimeout(function(){
						
						new ajax(accAppPath, {method: 'POST', postBody:getQueryString(tog.id), onComplete: FillAccordion, callbackDiv: oAccordion, callbackFunction: cbfunc});
					},10);
				}
				else
					cbfunc(true);
			}.bind(this);
		}.bind(this));
	},
	//edit HH
	clearSelection: function(par){
		if (autoExpand == 'false') {
		    
			d = par.getElementsByTagName("div");
			for(i=0; i<d.length; i++){
			    if(d[i].className.indexOf("additionalStretcher")>-1)
                {                    

	                if(document.getElementById('a3').className.indexOf('_on')>-1)
	                {   Effect.BlindUp(d[i].id); 
		                document.getElementById('a3').className = document.getElementById('a3').className.replace('_on','');
	                }

                }
			}
		
			c = par.getElementsByTagName("a");
			var toggled = "";
			for(i=0; i<c.length; i++){
				var toggle = c[i].className;
				var on = toggle.indexOf("_");
				var sel = toggle.substring(on);
				if(sel=="_on") {
					c[i].className = toggle.substring(0,on);
				}
			}



		}
	},
	setSelected: function(el){
		el.className = el.className+"_on";
	},
	//end edit

	showThisHideOpen: function(toShow){
	
		this.elements.each(function(el, j){
			//if (el.offsetHeight > 0 && el != toShow) this.clearAndToggle(el, j);
			
			if (el.offsetHeight > 0) this.clearAndToggle(el, j);
			if (el == toShow && toShow.offsetHeight == 0) setTimeout(function(){this.clearAndToggle(toShow, j);}.bind(this), this.options.delay);
		}.bind(this));
	},

	clearAndToggle: function(el, i){
		this.fxa[i].clearTimer();
		
		this.fxa[i].toggle();
	}
}

function FillAccordion(resp) { 
	var req = resp.transport;
	
	var oAccordion = resp.callbackDiv;
	
	if (req.responseXML.hasChildNodes) {
		var myObj = req.responseXML.childNodes;
		for (var i=0; i<myObj.length;i++) { // root-tag bevat 1 element
			doIterate(myObj[i],myLevel,oAccordion);
		}
		if (resp.callbackFunction)
			resp.callbackFunction();
			autoExpand='false';
			
	}
}

function checkIterate(oNodes, cnt, oDiv)
{
	// functie om te kijken of een item subitems bevat
	if (oNodes.childNodes.length>0)
		return true;
	else
		return false;
}

function doIterate(oNodes, cnt, oDiv) {
	var expandA;
	if (oDiv == null)
		return false;
		
	var childIndexExpanded=-1;
	var expandNode = oNodes.getAttribute('expandNode');
	
	if (oNodes.childNodes.length>0) { //hasChildNodes is allways true on Firefox
		cnt++;
		//alert('cnt='+cnt);
		// cnt: 1=maand, 2=datum+verblijfsduur, 3=regio, 4=park, 5=accommodatie+boekbutton
		var divArr = new Array();
		var aArr = new Array();
		var myRequestLevelValue = eval('level'+cnt);
		for (var j=0; j<oNodes.childNodes.length;j++) 
		{
		    if(oNodes.childNodes[j].nodeName == 'a')
		    {
			    var node=oNodes.childNodes[j];
			    if (node.nodeType!=1) continue;
			    //<p class="item"><a href="#" onclick="showInfo(this);return false;" class="info"><img id="tempID" src="/img/infobtn.gif"></a><span>4-persoons bungalow Luxe </span> <a href="#" onclick="doeBoeking();return false;" class="boekbtn"><img src="/img/boekbtn.gif"></a><span class="prijs">€ 270</span><span class="vanaf">vanaf </span></p>
			    if (cnt==accNumberOfLevels) {
			        var acclmprijs = '';
			        var accvoor = '';
				    var accid = oNodes.childNodes[j].getAttribute('id');
				    var accbid = oNodes.childNodes[j].getAttribute('bid');
				    var accaid = oNodes.childNodes[j].getAttribute('aid');
				    var accparkcode = oNodes.childNodes[j].getAttribute('parkcode');
				    var acccode = oNodes.childNodes[j].getAttribute('acccode');
				    var nachten = oNodes.childNodes[j].getAttribute('nacht');
				    accdate = oNodes.childNodes[j].getAttribute('date'); // global var  
				    if (accdate.length > 8)
				        accdate = accdate.substring(0,8);
				    var accdesc = oNodes.childNodes[j].getAttribute('txt');
				    if (accTaalcode == 'be-fr') {
				        accvoor = oNodes.childNodes[j].getAttribute('voor') + '&nbsp;&euro;';
				    } else {
				        accvoor = '&euro;&nbsp;' + oNodes.childNodes[j].getAttribute('voor');
                    }
				    var accvan = oNodes.childNodes[j].getAttribute('van');
				    if (accvan != null)
				        if (accTaalcode == 'be-fr') {
				            acclmprijs = '<strike>' + accvan + '&nbsp;&euro;</strike>&nbsp;' + strVanaf1 + '&nbsp;';
                        } else {
				            acclmprijs = '<strike>&euro;&nbsp;' + accvan + '</strike>&nbsp;' + strVanaf1 + '&nbsp;';
                        }
				    else
					    acclmprijs = strVanaf1;
				    var boekbtn;
				    if (accThema == 'wintersport')
				    {
					    boekbtn = 'boekbtn_' + accTaalcode + '_winter.gif';
				    }
				    else
				    {
					    boekbtn = 'boekbtn_' + accTaalcode + '.gif';
				    }

				    var inHTML = '';
    				
				    if (accTaalcode == 'be-fr'){
				        inHTML = '<p class="item"><a href="javascript:showInfo(this,\'' + accparkcode + '\',\'' + acccode + '\',\''+nachten+'\')" class="info"><img id="tempID" src="/img/infobtn.gif"></a><span>' + accdesc + '</span><a href="javascript:doBookingFR(\'' + accbid + '\',\'' + accaid + '\')" class="boekbtn"><img src="/img/'+ boekbtn + '"></a><span class="lmprijs">' + accvoor + '</span><span class="vanaf">' + acclmprijs + '</span></p>';
				    }
				    else {
				        inHTML = '<p class="item"><a href="javascript:showInfo(this,\'' + accparkcode + '\',\'' + acccode + '\',\''+nachten+'\')" class="info"><img id="tempID" src="/img/infobtn.gif"></a><span>' + accdesc + '</span><a href="javascript:doBooking(\'' + accbid + '\',\'' + accaid + '\')" class="boekbtn"><img src="/img/'+ boekbtn + '"></a><span class="lmprijs">' + accvoor + '</span><span class="vanaf">' + acclmprijs + '</span></p>';
				    }
    				
				    oDiv.innerHTML = oDiv.innerHTML + inHTML;
			    }
			    else {
				    var oA = document.createElement('a');
    				
				    oA.id = oNodes.childNodes[j].getAttribute('id');
				    // workaround voor het uitklappen van beschikbaarheid wanneer er in de huidige maand geen beschikbaarheid meer is.
				    if (cnt==1) { // alleen bij maanden (level1) kan de javascriptvar level1 overschreven worden door de waarde in de id van de eerste node van de XML
					    if (oA.id.indexOf(myRequestLevelValue)==-1) { // alleen als de opgevraagde waarde niet voorkomt in de beschikbaarheid
						    if (j==0) {
							    if (dezemaand == level1) {
								    // alleen veranderen als het om de huidige maand gaat.
								    level1 = oA.id.replace('l1_','');
							    }
						    }
					    }
				    }
				    oA.href='javascript://';
					oA.className = 'stretchtoggle'+cnt; //oNodes.childNodes[j].getAttribute('id');
				    if(oA.id.indexOf('a3') > -1)
				    {
						oA.className += ' alps'; //oNodes.childNodes[j].getAttribute('id');
					}
    			    
				    oA.innerHTML = "<span class='textContainer'>"+oNodes.childNodes[j].getAttribute('txt')+"</span>";
    				
				    if (parseInt(oNodes.childNodes[j].getAttribute('vanaf')) > -1) 
				    {
					    var oS = document.createElement('span');
					    oS.className = 'vanaf';
					    if (accTaalcode == 'be-fr') {
					        oS.innerHTML = strVanaf + oNodes.childNodes[j].getAttribute('vanaf') + '&nbsp;&euro;';
					    } else {
					        oS.innerHTML = strVanaf + oNodes.childNodes[j].getAttribute('vanaf');
					    }
					    oA.appendChild(oS);
				    }
				    var accimgid = oNodes.childNodes[j].getAttribute('imgid');
				    if (accimgid != null) {
					    var oI = document.createElement('img');
					    oI.className = 'thumb';
					    oI.src = '/db/cache/table=ParkContent/field=Image/crop=y/height=36/key=parkcontent_id/' + accimgid + '.jpg';
					    oA.appendChild(oI);
				    }
				    if(oA.id == 'a3')
				    {
						oA.href= 'javascript:toggleAdditionalDiv(\'additionalStretcher'+cnt+'\');';
				    }
				    if(oA.id.indexOf('a3') <= -1 || oA.id == 'a3')
				    {
						oDiv.appendChild(oA);
					}
				    if (expandNode==oA.id) {
				        expandA = oA;
				    }
				    //alert(oA.id.length + ' = ' + oA.id);
					if(oA.id == 'a3')
					{
						var additionalDiv = document.createElement('div');
						additionalDiv.id = 'additionalStretcher'+cnt;
						additionalDiv.style.display = 'none';
						additionalDiv.className = 'additionalStretcher'+cnt;
					}
					else if(oA.id.length > 2 && oA.id.indexOf('a3') > -1)
					{
						if(additionalDiv != null)
						{
							additionalDiv.appendChild(oA);
						}
					}

					var nestedDiv = document.createElement('div');
					nestedDiv.className = 'stretcher'+cnt;
					
					if(oA.id.length > 2 && oA.id.indexOf('a3') > -1)
					{
						if(additionalDiv != null)
						{
							additionalDiv.appendChild(nestedDiv);
							divArr.push(nestedDiv);
							aArr.push(oA);
						}
					}
					else if(oA.id.indexOf('a3') <= -1)
					{
						oDiv.appendChild(nestedDiv);
						divArr.push(nestedDiv);
						aArr.push(oA);
					}
						
				    if((checkIterate(node, cnt, nestedDiv) & autoExpand=='true')) { 
					    // deze check in if toevoegen indien auto-uitklap-bij-maar-1-resultaat gemaakt moet worden.
					    //   || node.parentNode.childNodes.length == 1)
					    childIndexExpanded = aArr.length-1;
					    var levelXMLvalue = node.getAttribute('id').substring(3);
					    // if returned value differs from request -> update the levelX variable with XML response value
					    if (levelXMLvalue != myRequestLevelValue) {
					        if (cnt==1) level1 = levelXMLvalue;
					        if (cnt==2) level2 = levelXMLvalue;
					        if (cnt==3) level3 = levelXMLvalue;
					        if (cnt==4) level4 = levelXMLvalue;
					        if (cnt==5) level5 = levelXMLvalue;
					    }
					    // zet de style van de a op 'selected'  (wordt nu nog ongedaan gemaakt door new fx.Accordion
					    aArr[childIndexExpanded].className = aArr[childIndexExpanded].className+"_on";
					    doIterate(node, cnt, nestedDiv);
				    }
			    }
			}
		}

		if(additionalDiv != null)
			oDiv.appendChild(additionalDiv);
		
		if (cnt<accNumberOfLevels) {
			var myAccordion = new fx.Accordion( aArr, divArr, { opacity:false, duration:300 } );  //duration: kleiner nummer is sneller
			if (childIndexExpanded>-1)
				aArr[childIndexExpanded].onclick();
		}
		if (expandA) {
		    expandA.onclick();
	    	resetGrid();
	        setupGrid();

		}
		return true; // show childNodes
	}
	else
		return false;
}
function initTree() {
	var oAccordion	= document.getElementById('accordion');
	new ajax(accAppPath, {method: 'POST', postBody: getQueryString(),onComplete: FillAccordion, callbackDiv: oAccordion});
}
function showInfo(el,thePark, theAcc, nachten){
	document.getElementById('infopanel').innerHTML='&nbsp;';
	var getValues = '?view=ACCDESC&taal='+accTaalcode+'&parkcode='+thePark+'&acc_code='+urlencode(theAcc)+'&aankomstdatum='+accdate+'&nachten='+nachten;
	new ajax(accAppPath+getValues, {method: 'GET', update: 'infopanel'});
		
	var strPx = document.childNodes ? 'px' : 0;	
	var schaduw = document.getElementById('schaduw');	
	var palette = document.getElementById('infopanel');

	//positioneer panel
	var mouseArr = getMouseXY();
	var puntX = mouseArr[0]-210;
	var puntY = mouseArr[1];

	schaduw.style.left 	= puntX +6 +strPx;
	palette.style.left 	= puntX +strPx;
	schaduw.style.top 	= puntY +6 +strPx;
	palette.style.top 	= puntY +strPx;
	popupactive = true;
}
function hideInfoPanel(){
	var schaduw = document.getElementById('schaduw');	
	var palette = document.getElementById('infopanel');	
	schaduw.style.left = '-1100px';
	palette.style.left = '-1100px';
}
var isInitQuerystring = true;
function getQueryString(levelId) {
	var qrystr='taalcode=' + accTaalcode + '&level='+myLevel+'&view='+accView;
	
	qrystr+='&l1='+level1;
	qrystr+='&l2='+level2;
	qrystr+='&l3='+level3;
	qrystr+='&l4='+level4;
	qrystr+='&l5='+level5;
	qrystr+='&l6='+level6;
	qrystr+='&singlefirstnode='+SingleFirstNode;
	qrystr+='&expand='+expandLevels;
	qrystr+='&thema='+accThema;

	if(typeof accLandingsCode != 'undefined' && accLandingsCode != '')
		qrystr+='&landingscode='+accLandingsCode;

	if(typeof accActieCode != 'undefined' && accActieCode != '')
		qrystr+='&actiecode='+accActieCode;
		
	if (isInitQuerystring) {
	    try { 
    	    isInitQuerystring = false;
           	qrystr+='&rc='+dezeregio;
        } catch(e) { 
        } 
	}
	if (pes != '')
		qrystr+='&pes='+pes;
	if (accToCode != '') {
		qrystr+='&to_filter='+accToCode;
		qrystr+='&to_yieldgroep='+accToYieldgroep;
	}
	
	if (typeof accSubTaal != 'undefined' && accSubTaal != '')
		qrystr+='&subtaal='+accSubTaal;
	
	if (typeof accWinterMode != 'undefined' && accWinterMode != '')
		qrystr+='&iswintermode='+accWinterMode;
	
	if (typeof accordionDaterangeFromYYYYMMDD != 'undefined' && accordionDaterangeFromYYYYMMDD!='')
		qrystr+='&DaterangeFrom='+accordionDaterangeFromYYYYMMDD;
	if (typeof accordionDaterangeToYYYYMMDD != 'undefined' && accordionDaterangeToYYYYMMDD!='')
		qrystr+='&DaterangeTo='+accordionDaterangeToYYYYMMDD;
	    
	if (typeof levelId != 'undefined' && levelId != '')
		qrystr+='&levelId='+levelId;
	//expandLevels = 'false';
   return qrystr;
}

function urlencode( str ) {
    var ret = str;
    
    ret = ret.toString();
    ret = encodeURIComponent(ret);
    ret = ret.replace(/%20/g, '+');
 
    return ret;
}

function gotoPage(myParkcode, myAccid, myAccCode, myAantalpers,nachten){
	var myDuur = '';
	if (accView=='A')
		myDuur = level2;
	if (accView=='B')
		myDuur = level3;
	if (accView=='C')
		myDuur = level5;
	if (accView=='D')
		myDuur = level4;
	hideInfoPanel();
    setCookie('sel_parkcode',myParkcode);
    setCookie('sel_stay',myDuur);
    setCookie('sel_num',myAantalpers );
    setCookie('sel_date',accdate);
    setCookie('sel_div',accdate + '_' + nachten + '_' + myAccCode);
	theUrl= '/template3.aspx?cp=accommodationdetail&menu=parken&mid=parkenaccommodaties&parkcode=' + myParkcode + '&id=' + myAccid + '&acc_code=' + urlencode(myAccCode); // + '&sel_num=' + myAantalpers + '&sel_stay=' + myDuur + '&sel_date=' + accdate + '&sel_div=' + accdate + '_' + nachten + '_' + myAccCode;
	document.location.href = theUrl;
}
function doBooking(strBeschikbaarheidId, strActiecodeId) {
	//openSps('ingang=directbooking&beschikbaarheidid='+strBeschikbaarheidId);
	openSps('beschikbaarheidid='+strBeschikbaarheidId+'&actiecodeid='+strActiecodeId);
}
function doBookingFR(strBeschikbaarheidId, strActiecodeId) {
	openSps('beschikbaarheidid='+strBeschikbaarheidId+'&actiecodeid='+strActiecodeId, '&Taal=be-fr');
}
function viewLastminutes(viewmode) {
	accView = viewmode
	var tstr = 'level:' + myLevel;
	tstr += '\nlevel1:' + level1;
	tstr += '\nlevel2:' + level2;
	tstr += '\nlevel3:' + level3;
	tstr += '\nlevel4:' + level4;
	tstr += '\nlevel5:' + level5;
	myLevel = 0;
	level1 = '';
	level2 = '';
	level3 = '';
	level4 = '';
	level5 = '';
	level6 = '';
	document.getElementById('accordion').innerHTML = '';
	//alert(viewmode);
	if (viewmode=='A') {
		level1=dezemaand;
		autoExpand='true';
	}
/*	if (viewmode=='B') {
	    dezemaand='';
		level1='GEL';
		autoExpand='true';
	}*/
	setActiveLastminutesSS(viewmode);
	initTree();
}
//FONT SIZING TOOL
function setActiveLastminutesSS(input) {
  //if (input=='A' || input=='B')
  //	input = 'AB';
  if(input=='E') input = 'A';
    
    
  var title = 'Lastminutes view ' + input;
  var i, a, main;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
	if (a.getAttribute("title")!=null)
	{
		if (a.getAttribute("title").indexOf("Lastminutes view") != -1) {
			if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
				a.disabled = true;
				if(a.getAttribute("title") == title) {
					//alert('hoera aanzetten: ' + a.getAttribute("title"))
					a.disabled = false;
				}
			}
		}
	}
  }
}
function setCookie(name, value, expires, path, domain, secure)
{
    document.cookie= name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "; path=/") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

function toggleAdditionalDiv(divId)
{
   
	if(document.getElementById('a3').className.indexOf('_on')>-1)
	{
        Effect.BlindUp(divId, { afterFinish: function () { setupGrid(); } }); 
	    document.getElementById('a3').className = document.getElementById('a3').className.replace('_on','');
	}
	else
	{
        par = Element.up(divId);   

        d = par.getElementsByTagName("div");
        for(i=0; i<d.length; i++){
            
            if(d[i].id != "additionalStretcher3")
            {   
                d[i].innerHTML = "";
		        d[i].style.cssText = 'OVERFLOW: hidden; HEIGHT: 0px';
	        }
        }
        
        c = par.getElementsByTagName("a");
        var toggled = "";
        for(i=0; i<c.length; i++){
	        var toggle = c[i].className;
	        var on = toggle.indexOf("_");
	        var sel = toggle.substring(on);
	        if(sel=="_on") {
		        c[i].className = toggle.substring(0,on);
	        }
        }
	    Effect.BlindDown(divId, { afterFinish: function () { setupGrid(); } }); 
		document.getElementById('a3').className = document.getElementById('a3').className + '_on';
	}

}


