var productgroepnr = "";
var artikelgroepnr = "";
var attributes = [];
var merken = [];
var crumbTrailHistory = [{"naam":"Portal","url":"home", "level":0}];
var crumbTrailHistoryAll = {};
var bncHistory          = null;
var currentState        = '';
var bookmarkedViewState = YAHOO.util.History.getBookmarkedState("location");
var initialViewState    = bookmarkedViewState || "";
var pagelevel = 0;
var exactUrls = {};
var knownBoxes = [];

function IDlizeURL(url) {
	var strippedUrl = url.split("?")[0];
	var idlizedUrl = strippedUrl.replace(/\//g,"_");
	return idlizedUrl;
}

function addToCrumbtrail(naam,url,level,pagedelete) {
	var IDlizedURL = IDlizeURL(url);
	var gezet = false;
	
	if(level == 1) {
		crumbTrailHistory = [{"naam":"Portal","url":"home", "level":0}];
	}
	
	for (var i = 0; i < crumbTrailHistory.length; i++) {
		if (crumbTrailHistory[i].level == level) {
			gezet = true;
			crumbTrailHistory[i] = {
				"naam": naam,
				"url": url,
				"level": level,
				"pagedelete": false
			};
		}
		else if (crumbTrailHistory[i].level > level) {
				crumbTrailHistory[i].pagedelete=true;
		}
	}
	if (gezet == false) {
		crumbTrailHistory.push({
			"naam": naam,
			"url": url,
			"level": level,
			"pagedelete": false
		});
		crumbTrailHistoryAll[url] = ({"naam":naam,"url":url,"level":level,"pagedelete": false});
	}
	crumbTrailContent = [];
	for (var i = 0; i < crumbTrailHistory.length; i++) {
		if (crumbTrailHistory[i].pagedelete != true) {
			var link = "<a href=\"#location=" + escape(crumbTrailHistory[i].url) + "\">" + crumbTrailHistory[i].naam + "</a>";
			crumbTrailContent.push(link);
		}
	}
	crumbTrailContent = crumbTrailContent.join(' > ');
}

function showCrumbTrail(id) {
	var crumbTrail = document.getElementById(id);
	if(crumbTrail) {
		crumbTrail.innerHTML = crumbTrailContent;
	}
}

function deleteFromCrumbTrail(url) {
	for (var i = 0; i < crumbTrailHistory.length; i++) {
		if (crumbTrailHistory[i].url == url) {
			crumbTrailHistory.splice((i + 1));
		}
	}
}

var portalOnFailure = function(o) {
	alert('Er is iets misgegaan. Foutcode: '+o.statusText);
};

function showNewPage() {
	document.getElementById("newPageContainer").style.display = "block";
	document.getElementById("pageContainer").style.display = "none";
}

function showPage(pageId) {
	if (document.getElementById("newPageContainer").style.display == "none") {
		showNewPage();
	}
	document.getElementById(pageId).style.display = 'block';
	if(window["onPageActivate"+document.getElementById(pageId).IDlizedURL] != null) {
		window["onPageActivate"+document.getElementById(pageId).IDlizedURL]();
	}
}

function showHomepage(){
	document.getElementById("newPageContainer").style.display = "none";
	document.getElementById("pageContainer").style.display = "block";
}

function hideAllPages() {
		for(var i=0; i<document.getElementById("newPageContainer").childNodes.length;i++) {
			document.getElementById("newPageContainer").childNodes[i].style.display='none';
		}	
}

function goToTop() {
 if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    document.body.scrollTop=0;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    document.documentElement.scrollTop=0;
  }
}

function onLoadNewPage(o) {
	try {
		var IDlizedURL = IDlizeURL(o.argument.url);
		
		if (document.getElementById("pageId" + IDlizedURL) != null) {
			document.getElementById("pageId" + IDlizedURL).parentNode.removeChild(document.getElementById("pageId" + IDlizedURL));
		}
		
		var pagecontainer = document.createElement("div");
		pagecontainer.id = "pageId" + IDlizedURL;
		pagecontainer.IDlizedURL = IDlizedURL;
		pagecontainer.className = 'bncPaginaFullscreen';
		
		exactUrls["pageId" + IDlizedURL] = o.argument.url;
		
		var pagecontent = document.createElement("div");
		pagecontent.innerHTML = o.responseText;
		pagecontainer.appendChild(pagecontent);
		
		// Verberg alle huidige pagina's
		hideAllPages();
		
		document.getElementById("newPageContainer").appendChild(pagecontainer);
		document.getElementById("newPageContainer").style.display="block";
		document.getElementById("pageContainer").style.display="none";
		if(window["onPageLoad"+IDlizedURL] != null) {
			window["onPageLoad"+IDlizedURL](o.responseText);
		}
		if(window["onPageActivate"+IDlizedURL] != null) {
			window["onPageActivate"+IDlizedURL]();
		}
		
		goToTop();
	} catch(e) {
		alert(e);
	}
}

function newPage(url) {
	try {
		var now = new Date();
		var callback =
		{
			success:onLoadNewPage,
			failure:portalOnFailure,
			argument:{
				url: url
			}
		};
		var append = url.match("\\?")?"&noCache=":"?noCache=";
		YAHOO.util.Connect.asyncRequest("GET",url+append+now.getTime(), callback, "");
	} catch(e) {
		alert(e);
	}
}

function makeMenusCollapse() {
	 for (var i = 0; i < knownBoxes.length; i++) {
		YAHOO.util.Event.removeListener(knownBoxes[i],'click');
	}
	knownBoxes = [];
	var boxes = YAHOO.util.Selector.query('.bestellenMenu');
	for (var i=0;i<boxes.length;i++) {
		// Get the collapse- or expand-button for the box.
		var button = YAHOO.util.Selector.query('.collapseHeader', boxes[i], true);
		if (button) {
			var content = YAHOO.util.Selector.query('.content', boxes[i], true);
			if (content) {
				restore_box_state(boxes[i]);
				box_classname = boxes[i].className;
				content_height = content.style.height;
				boxes[i].className = '';
				content.style.height = 'auto';
				height = parseInt(content.offsetHeight);
				var data = {
						'settings': {
							'unit':          'px',
							'attributes': {
								'height':    height
							}
						},
						'box':               boxes[i],
						'content':           content,
						'button':            button
				};

				boxes[i].className = box_classname;
				content.style.height = content_height;

				//					restore_box_state();
				// Add click listener to button and specify menu class and attributes to toggle.
				// see menu_toggle().

				knownBoxes.push(button);
				YAHOO.util.Event.addListener(button, 'click',
					function(e, data) {
						menu_toggle(data['box'], data['content'], data['button'], data['settings']);
					}, data, true
				);
			}
		}
	}
}

function onLoadProductNavigatie(o) {
	var data =  YAHOO.lang.JSON.parse(o.responseText);
	var productcategorieen = "";
	var productgroep = "Opruiming";
	
	document.getElementById("bestellenTitle").innerHTML = "";
    for (var i = 0; i < data.xml_productgroepen.length; i++) {
    	if(data.xml_productgroepen[i].xml_productgroepen_selected) {
        	productcategorieen+= "<a class=\"bestellenMenuItemSelected\">"+data.xml_productgroepen[i].xml_productgroepen_naam+"</a>";
			var productgroepen= "";
			if(data.xml_productgroepen[i].xml_artikelgroepen) {
				productgroep = data.xml_productgroepen[i].xml_productgroepen_naam;
				for (var j = 0; j < data.xml_productgroepen[i].xml_artikelgroepen.length; j++) {
					if(data.xml_productgroepen[i].xml_artikelgroepen[j].xml_artikelgroepen_selected) {
					document.getElementById('bestellenTitle').innerHTML=data.xml_productgroepen[i].xml_artikelgroepen[j].xml_artikelgroepen_omschrijving;
					productgroepen+= "<a class=\"bestellenMenuItemSelected\">"+data.xml_productgroepen[i].xml_artikelgroepen[j].xml_artikelgroepen_omschrijving+"</a>";
					} else {
					productgroepen+= "<a class=\"bestellenMenuItem\" onclick=\"getProductNavigation('"+data.xml_productgroepen[i].xml_productgroepen_nr+"','"+data.xml_productgroepen[i].xml_artikelgroepen[j].xml_artikelgroepen_nr+"')\">"+data.xml_productgroepen[i].xml_artikelgroepen[j].xml_artikelgroepen_omschrijving+"</a>";             
					}
				}
				document.getElementById("productgroepen").innerHTML=productgroepen;
				document.getElementById("merken").innerHTML = "";
				document.getElementById("merkCounter").innerHTML = "";
				document.getElementById("filters").innerHTML = "";
			}
        } else {
        productcategorieen+= "<a class=\"bestellenMenuItem\" onclick=\"getProductNavigation('"+data.xml_productgroepen[i].xml_productgroepen_nr+"')\">"+data.xml_productgroepen[i].xml_productgroepen_naam+"</a>";             
        }
    }
	if(data.xml_productgroepen_selectednr=="-1000") {
    	productcategorieen+= "<a class=\"bestellenMenuItemSelected\" onclick=\"getProductNavigation('-1000')\">Opruiming</a>";
		document.getElementById("productgroepen").innerHTML = "";
		document.getElementById("merken").innerHTML = "";
		document.getElementById("merkCounter").innerHTML = "";
		document.getElementById("filters").innerHTML = "";
	} else {
    	productcategorieen+= "<a class=\"bestellenMenuItem\" onclick=\"getProductNavigation('-1000')\">Opruiming</a>";
	}             
		
    document.getElementById("productcategorieen").innerHTML=productcategorieen;
    
	var merken= "";
	if(data.xml_merken) {
            for (var i = 0; i < data.xml_merken.length; i++) {
            	if(data.xml_merken[i].xml_merken_selected) {
                merken+= "<a class=\"bestellenMenuItemSelected\" onclick=\"addMerk(this,'"+data.xml_merken[i].xml_merken_nr+"','merk')\">"+data.xml_merken[i].xml_merken_omschrijving+"</a>";
                } else {
                merken+= "<a class=\"bestellenMenuItem\" onclick=\"addMerk(this,'"+data.xml_merken[i].xml_merken_nr+"','merk')\">"+data.xml_merken[i].xml_merken_omschrijving+"</a>";             
                }
            }
            document.getElementById("merken").innerHTML=merken;
	}
	var filters= "";
	if(data.xml_attributes) {
            for (var i = 0; i < data.xml_attributes.length; i++) {
                filters+= "<div id=\"filter"+i+"\" class=\"bestellenMenu collapsed\"><div class=\"collapseHeader\"><a title=\"Menu in-/uitklappen\" class=\"button\"> </a><div class=\"menuheader\">"+((data.xml_attributes[i].xml_cnet_attributes_bncname!=null)?data.xml_attributes[i].xml_cnet_attributes_bncname:data.xml_attributes[i].xml_cnet_attributes_name)+" <span id=\"filter"+i+"Counter\"></span></div></div><div class=\"contentContainer\"><div class=\"content\">";
				for (var j = 0; j < data.xml_attributes[i].xml_attributes_values.length; j++) {
					var uom = (data.xml_attributes[i].xml_attributes_values[j].xml_cnet_attributevalues_uom!=null)?data.xml_attributes[i].xml_attributes_values[j].xml_cnet_attributevalues_uom:"";
					filters += "<a class=\"bestellenMenuItem\" onclick=\"addAttribute(this,'"+data.xml_attributes[i].xml_cnet_attributes_nr+"','"+data.xml_attributes[i].xml_attributes_values[j].xml_cnet_attributevalues_value+uom+"','filter"+i+"')\">"+data.xml_attributes[i].xml_attributes_values[j].xml_cnet_attributevalues_value+" "+uom+"</a>";
				}
				filters += "</div></div></div>";
            }
            document.getElementById("filters").innerHTML=filters;
	}
	makeMenusCollapse();
	getProductList();
	addToCrumbtrail(productgroep,currentState,2);
	showCrumbTrail('bestellenCrumbTrail');	
}

function onPageLoad_framework_assets_bestellen_productoverzicht() {
	addToCrumbtrail('Productoverzicht',currentState,1);
}

function onPageLoad_artikelzoeker() {
	addToCrumbtrail('Artikelzoeker',currentState,1);
	var tooltipCounter = 1;
	while(document.getElementById("artikelzoekerwebshopTooltip"+tooltipCounter)!=null) {
		var artikelzoekerwebshopTooltipText = document.getElementById("artikelzoekerwebshopTooltipText"+tooltipCounter).innerHTML;
	   	new YAHOO.widget.Tooltip("artikelzoekerwebshopTooltipDiv"+tooltipCounter,
								{ context:"artikelzoekerwebshopTooltip"+tooltipCounter,
								  showDelay: 500,
								  autodismissdelay: 60000,
								  width: "600px",
								  text: artikelzoekerwebshopTooltipText });
		tooltipCounter++;
	}
}

function remove_script_tags(s) {
	var myScript = s.split(/\<script type=\"text\/javascript\"\>/mg)[1];
	if (myScript) {
		myScript = myScript.split(/\<\/script\>/mg)[0];
		return myScript;
	}
	return "";
}

function onPageLoad_informatie(s) {
	var myScript = remove_script_tags(s);
	if (myScript)
		eval(myScript);
	
	addToCrumbtrail('Productinformatie',currentState,3);
	showCrumbTrail('productCrumbTrail');
}

function onPageLoad_wobjects_intranet_reports_report(s){
	var myScript = remove_script_tags(s);
	if (myScript)
		eval(myScript);
}

function onPageLoad_bestellen() {
	var prodgr_nr = getParameter('HttpProxy_productgroep',currentState);
	var artgr_nr = getParameter('HttpProxy_artikelgroep',currentState);
	getProductNavigation(prodgr_nr,artgr_nr);
	var meerActiesButton = new YAHOO.widget.Button("bestellen_sorteer_op_button", {
		type: "menu",
		menu: "bestellen_sorteer_op_select"
		});
	meerActiesButton.getMenu().subscribe("click", function(p_sType, p_aArgs) {
		var oEvent = p_aArgs[0],
		oMenuItem = p_aArgs[1];
		if (oMenuItem) {
			changeSortOrder(oMenuItem.value);
		}
	});
	var onMenuRender = function (type, args, button) {
		meerActiesButton.set("selectedMenuItem",this.getItem(3));
	};
	meerActiesButton.getMenu().subscribe("render", onMenuRender, this);

	// Reset default search box value on click.
	var zoek_box = document.getElementById('bestellenZoekbox');
	if (zoek_box) {
		zoek_box.onclick = function(e) {
			if (this.defaultValue == this.value)
				this.value = '';
		}
		zoek_box.focus();
	}
}

function getProductNavigation(prodgr_nr,artgr_nr) {
	bestellenLoading();
	productgroepnr = prodgr_nr;
	artikelgroepnr = (artgr_nr)?artgr_nr:"";
	attributes = new Array();
	merken = new Array();	
	var now = new Date();
	var callback =
	{
		success:onLoadProductNavigatie,
		failure:portalOnFailure

	}
	var productgroepfilter = (prodgr_nr)?"&productgroepnr="+productgroepnr:"";
	var artikelgroepfilter = (artgr_nr)?"&artikelgroepnr="+artikelgroepnr:"";
	YAHOO.util.Connect.asyncRequest("GET",gateway+"?appclass=nl.bnc.bncweb.system.applicatie.webshop.BWAppNavigatie&menuid="+menuid+"&json=1"+productgroepfilter+artikelgroepfilter+"&translatejson=1&noCache="+now.getTime(), callback, "");
}

function changeSortOrder(value) {
	bestellenLoading();
	var now = new Date();
	var callback =
	{
		success:onLoadProductList,
		failure:portalOnFailure
	}
	var view = readCookie('bestellenView');
	view = (view != null)?view:"1";	
	YAHOO.util.Connect.asyncRequest("GET","/bestellen/bestellen"+view+"?HttpProxy_fn="+value+"&nocache="+now.getTime(), callback, "");
}

function addMerk(elem,value) {
	if(elem.className != "bestellenMenuItemSelected") {
		changeCounter("merk","up");
		elem.className="bestellenMenuItemSelected";
		merken.push(escape(value));
		var removeDiv = document.createElement("img");
		removeDiv.className="deleteFilter";
		removeDiv.src="/framework/afbeeldingen/layout/icons/verwijder-blauw.png";
		removeDiv.onclick = function(){
			removeMerk(escape(value));
			this.parentNode.removeChild(this);
			elem.className="bestellenMenuItem";
			changeCounter("merk","down");
		};
		elem.parentNode.insertBefore(removeDiv,elem);
		getProductList();
	}	
}

function changeCounter(filterid,direction) {
	var filterElem = document.getElementById(filterid+'Counter');
	var filterCounter = parseInt(filterElem.innerHTML.replace(/[^0-9]+/, ''));
	if (direction == "up") {
		if (isNaN(filterCounter) == true) {
			filterCounter = 1;
		}
		else {
			filterCounter++;
		}
	} else {
		filterCounter--;
	}
	if (filterCounter == 0) {
		filterElem.innerHTML = "";
	}
	else {
		filterElem.innerHTML = "(" + filterCounter + ")";
	}
}

function addAttribute(elem,nr,value,filterid) {
	if (elem.className != "bestellenMenuItemSelected") {
		changeCounter(filterid,"up");
		elem.className = "bestellenMenuItemSelected";
		attributes.push({
			nr: nr,
			value: escape(value)
		});
		var removeDiv = document.createElement("img");
		removeDiv.className="deleteFilter";
		removeDiv.src = "/framework/afbeeldingen/layout/icons/verwijder-blauw.png";
		removeDiv.onclick = function(){
			removeAttribute(nr, escape(value));
			this.parentNode.removeChild(this);
			elem.className = "bestellenMenuItem";
			changeCounter(filterid,"down");
		};
		elem.parentNode.insertBefore(removeDiv,elem);
		getProductList();
	}
}

function removeAttribute(nr,value) {
	var i=0;
	for (i = 0; i < attributes.length; i++) {
		if (attributes[i].nr == nr && attributes[i].value == value) {
			attributes.splice(i,1);
			break;
		}
	}
	getProductList();
}

function removeMerk(merk) {
	var i=0;
	for (i = 0; i < merken.length; i++) {
		if (merken[i] == merk) {
			merken.splice(i,1);
			break;
		}
	}
	getProductList();
}

function onLoadProductList(o) {
	goToTop();

	document.getElementById('bestellenData').innerHTML=o.responseText;
	var tooltipCounter = 1;
	while(document.getElementById("webshopTooltip"+tooltipCounter)!=null) {
		var webshopTooltipText = document.getElementById("webshopTooltipText"+tooltipCounter).innerHTML;
	   	new YAHOO.widget.Tooltip("webshopTooltipDiv"+tooltipCounter,
								{ context:"webshopTooltip"+tooltipCounter,
								  showDelay: 500,
								  autodismissdelay: 60000,
								  width: "600px",
								  text: webshopTooltipText });
		tooltipCounter++;
	}
}

function getProductList() {
	bestellenLoading();
	var now = new Date();
	var callback =
	{
		success:onLoadProductList,
		failure:portalOnFailure

	}
	var attributesfilter = "";
	var merkenfilter = "";

	var i=0;
	for (i = 0; i < attributes.length; i++) {
	    attributesfilter += "&HttpProxy_attributenr="+attributes[i].nr+"&HttpProxy_attributevalue="+attributes[i].value;
	}
	
	var i=0;
	for (i = 0; i < merken.length; i++) {
		merkenfilter += "&HttpProxy_merk="+merken[i];
	}
	var view = readCookie('bestellenView');
	view = (view != null)?view:"1";
	if(view == "1") {
		document.getElementById('detailweergave').src="/framework/afbeeldingen/layout/overzicht-icon-active.png";
		var maxresultaten = "&HttpProxy_maxresultaten=5";
	} else {
		document.getElementById('lijstweergave').src="/framework/afbeeldingen/layout/lijst-icon-active.png";
		var maxresultaten = "";
	}
	if(document.getElementById('bestellenZoekbox').value != document.getElementById('bestellenZoekbox').defaultValue) {
		var zoekquery = document.getElementById('bestellenZoekbox').value;
	} else {
		var zoekquery = "";
	}
	var zoekfilter = "&HttpProxy_zoek="+zoekquery;
	var artikelgroepfilter = (artikelgroepnr!="")?"&HttpProxy_artikelgroep="+artikelgroepnr:"&HttpProxy_showaanbiedingen=1";
	YAHOO.util.Connect.asyncRequest("GET","/bestellen/bestellen"+view+"?HttpProxy_fn=zoek&HttpProxy_productgroep="+productgroepnr+zoekfilter+artikelgroepfilter+attributesfilter+merkenfilter+maxresultaten+"&noCache="+now.getTime(), callback, "");
}

function setPage(idx) {
	bestellenLoading();
	var now = new Date();
	var callback =
	{
		success:onLoadProductList,
		failure:portalOnFailure
	}
	var view = readCookie('bestellenView');
	view = (view != null)?view:"1";
	YAHOO.util.Connect.asyncRequest("GET","/bestellen/bestellen"+view+"?HttpProxy_sidx="+idx+"&nocache="+now.getTime(), callback, "");
}

function setArtikelzoekerPage(idx) {
	document.location = "/#location=/artikelzoeker%3Fop%3DmakePrintable%26extra%3Dartikelzoeker%26HttpProxy_sidx%3D"+idx;
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function changeBestellenView(elem) {
	if(elem.id=="lijstweergave") {
		setCookie('bestellenView','2');
		document.getElementById('detailweergave').src="/framework/afbeeldingen/layout/overzicht-icon.png";
	} else {
		setCookie('bestellenView','1');
		document.getElementById('lijstweergave').src="/framework/afbeeldingen/layout/lijst-icon.png";
	}
	getProductList();
}

var nobestellenZoekquerysubmit = false;

function bestellenZoekquery(evt) {
	if(evt.keyCode==38||evt.keyCode==40) {
		nobestellenZoekquerysubmit = true;
	}
	if(evt.keyCode==27) {
		nobestellenZoekquerysubmit = false;
	}
	// enter key pressed?
	if(evt.keyCode==13) {
		if(nobestellenZoekquerysubmit) {
			nobestellenZoekquerysubmit = false;
		} else {
			getProductList();
		}
	}
}

function bestellenLoading() {
	document.getElementById('bestellenData').innerHTML="<div class=\"loading\">De artikelen worden geladen..</div>";
}

/**
 * Save state of the box in a cookie.
 * Set classname (value) of obj (by id).
 * Arguments:
 *     obj - The object to save.
 */
function save_box_state(obj) {
	if (obj && obj.id) {
		var Cookie = YAHOO.util.Cookie;
		Cookie.setSub('box_states', obj.id, obj.className);
	}
}

/**
 * Restore box state from cookie.
 * Get classname (value) of obj (by id).
 * Arguments:
 *     obj - The object to 
restore.
 */
function restore_box_state(obj) {
	if (obj && obj.id) {
		var Cookie = YAHOO.util.Cookie;
		value = Cookie.getSub('box_states', obj.id);
		if (value)
			obj.className = value;
	}
}

/**
 * Toggle (collapse / expand) a collapse-box and perform an animation.
 * Also toggle the button (collapse / expand).
 * Arguments:
 *     box      - Box object.
 *     content  - Content object.
 *     button   - Button object.
 *     settings - Animation settings.
 */

function menu_toggle(box, content, button, settings) {
		var myAnim = new YAHOO.util.Anim(content);
		myAnim.attributes = {};
		myAnim.method = YAHOO.util.Easing.easeIn;
		myAnim.duration = 0.2;
		
		// Attributes
		if (settings['attributes'] && (settings['attributes'] != undefined))
			menu_attributes = settings['attributes'];
		else
			menu_attributes = {};
		// Unit
		if (settings['unit'] && (settings['unit'] != undefined))
			unit = settings['unit'];
		else
			unit = 'px';
		
		var state = !(box.className.search(/[\s]*collapsed[\s]*/) != -1);
		// States:
		//     true  - Expanded
		//     false - Collapsed
		if (state) {
			/* Collapse, reset all attributes to zero. */
			myAnim.attributes.height = {
				'from': menu_attributes.height,
				'to': 0,
				'unit': unit
			}
			myAnim.onComplete.subscribe(function(){
				/* Reset classnames. */
				box.className = box.className.replace(/[\s]*(collapsed|expanded)[\s]*/, '');
				box.className += ' collapsed';
				save_box_state(box);
			});
		}
		else {
			/* Expand, set passed properties. */
			myAnim.attributes.height = {
				'from': 0,
				'to': menu_attributes.height,
				'unit': unit
			}
			myAnim.onComplete.subscribe(function(){
				/* Reset classname. */
				box.className = box.className.replace(/[\s]*(collapsed|expanded)[\s]*/, '');
				box.className += ' expanded';
				save_box_state(box);
			});
		}
		myAnim.animate();
}

function getParameter(name,mystring) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec(mystring);
  if( results == null )
    return "";
  else
    return results[1];
}

function showMeerItems(nr) {
	document.getElementById('meerItems'+nr).style.display="block";
}

YAHOO.util.History.register("location", initialViewState, function(state) {
	deleteFromCrumbTrail(state);
	if(state == "home") {
		showHomepage();
	} else {
		if (state) {
			var pageId = "pageId" + IDlizeURL(state);
			
			if (document.getElementById(pageId) != null) {
				if (exactUrls[pageId] == state) {
					hideAllPages();
					showPage(pageId);
					if(crumbTrailHistoryAll[state]!=null) {
						addToCrumbtrail(crumbTrailHistoryAll[state].naam,crumbTrailHistoryAll[state].url,crumbTrailHistoryAll[state].level,crumbTrailHistoryAll[state].pagedelete);
					}
				} else {
					newPage(state);
				}					
			}
			else {
				newPage(state);
			}
		} else {
			hideAllPages();
			showHomepage();
		}
	}
	currentState = state;
});

YAHOO.util.History.onReady(function() {
	currentState = YAHOO.util.History.getCurrentState("location");
	if (currentState && currentState != "home") {
		newPage(currentState);
	}
});

function bncOnMouseOut(src,evt,fn) {
	if (!evt) var evt = window.event;
	var reltg = (evt.relatedTarget) ? evt.relatedTarget : evt.toElement;
	while (reltg != null && reltg != src) {
		reltg = reltg.parentNode;
	}
	if (reltg != null && reltg == src) {
		return;
	}
	// Mouseout took place when mouse actually left layer
	// Handle event
	fn(evt);
}

function initPortal() {
	// Initialize the browser history management library. 
	try {
		YAHOO.util.History.initialize("yui-history-field", "yui-history-iframe");
	}
	catch (e) {
		// The only exception that gets thrown here is when the browser is 
		// not supported (Opera, or not A-grade) Degrade gracefully. 
	
		// niks doen
	}

 	// Focus login box if it exists.
	var focus_box = document.getElementById('username_formId');
	if (focus_box) {
		focus_box.focus();
	}
}
YAHOO.util.Event.onDOMReady(initPortal);

/**
 * Google maps
 */

var map;
var gdir;
var geocoder = null;
var addressMarker;

function initialize(fromAddress,toAddress) {
	if (YAHOO.env.ua.ie == 0) {
		var handlerData = {
		    //data you wish to pass to your success or failure
		    //handlers.
		};
		var successHandler = function(oData) {
			if (GBrowserIsCompatible()) {
				map = new GMap2(document.getElementById("map_canvas"));
				gdir = new GDirections(map);
				GEvent.addListener(gdir, "error", handleErrors);
				setDirections(fromAddress, toAddress, "en_US");
			}
		};
	
		YAHOO.util.Get.script("http://maps.google.com/maps?file=api&v=2&sensor=false&key=ABQIAAAAiinrFzBGQg5_PRP_GQ2RXxQJK5Lxo7G9duVuIGFt_QH0igXwjBSC_iNeM-AFbmbM_RW6JFh4J4lk-A", {
		    onSuccess: successHandler,
		    data:      handlerData
		});
	}
}
 
function setDirections(fromAddress, toAddress, locale) {
  gdir.load("from: " + fromAddress + " to: " + toAddress,
            { "locale": locale });
    }
 
function handleErrors(){
	 if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
	       alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
	 else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
	   alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
	  
	     else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
	       alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
	 
	    //   else if (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
	//     alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);
	
	 else if (gdir.getStatus().code == G_GEO_BAD_KEY)
	   alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
	 
	     else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
	       alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
	   
	     else alert("An unknown error occurred.");
}