var url = "/extra/meteo/BelgiumDetailed.xml";
var xslUrl = '/extra/weer/style/dso_be.xsl';
var urlW = "/extra/meteo/World.xml";
var xslUrlW = '/extra/weer/style/dso_world.xsl';
var urlS = "/extra/meteo/skiforecast.xml";
var xslUrlS = '/extra/weer//style/dso_ski.xsl';
var urlO = "/extra/meteo/Belgium.xml";
var xslUrlO = '/extra/weer/style/dso_overview.xsl';

var xslDoc = null;

var currId = 0;

<!-- ajax lib -->

//Credits: Basis of code is taken from Ajax in Action (Manning) by Dave Crane, Eric Pascarello & Darren James
var AiA_net = new Object();

AiA_net.ContentLoader = function( component, url, method, _loadHandler)
{
	this.component = component;
	this.url = url;
	this.method = method;
	this.loadHandler = _loadHandler;//added by pieter
}

AiA_net.ContentLoader.prototype = {

	getTransport: function()
	{
		var transport;
		if ( window.XMLHttpRequest ) transport = new XMLHttpRequest();
		else if ( window.ActiveXObject ){
			try{transport = new ActiveXObject('Msxml2.XMLHTTP');}
			catch(err){transport = new ActiveXObject('Microsoft.XMLHTTP');}
		}
		return transport;
	},

	sendRequest: function()
	{
		var oThis = this;
		var request = this.getTransport();
		
		request.open( this.method, this.url , true );
		request.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded');
		request.onreadystatechange = function() { oThis.handleAjaxResponse(request) };
		request.send(null);
	},

	handleAjaxResponse: function(request)
	{
		if ( request.readyState == 4 ) {
			if ( this.isSuccess(request) )
				this.component[this.loadHandler](request);//modified by pieter, now u can define more then 1 handler in component
			else
				this.component.handleError(request);
		}
	},

	isSuccess: function(request)
	{
		return  request.status == 0
			|| (request.status >= 200 && request.status < 300);
	}
}

function adhese_ajaxAd(_adIndex, _urlXML, _urlXSL, _refreshRate)
{
	this.adIndex = _adIndex;
	this.urlXML = _urlXML;
	this.urlXSL = _urlXSL;
	this.refreshRate= _refreshRate;
	this.xslDoc = null;
	this.xmlDoc = null;
	this.xmlLoader = null;
	this.adContainer = document.getElementById('searchDetail');
}

adhese_ajaxAd.prototype = {

	init: function()
	{
		// - load xsl
		var myXslLoader = new AiA_net.ContentLoader(this, this.urlXSL, 'GET', 'xslOnload')
			myXslLoader.sendRequest();

		// - create xml loader & get xml
		this.xmlLoader = new AiA_net.ContentLoader(this, this.urlXML, 'GET', 'xmlOnload');
		this.xmlLoader.sendRequest();
	},

	xslOnload: function(_request)
	{
		this.xslDoc = _request.responseXML;
		this.updateGUI();
	},

	xmlOnload: function(_request)
	{
		this.xmlDoc = _request.responseXML;
		this.updateGUI();
	},

	updateGUI: function()
	{
		if (this.xslDoc == null || this.xmlDoc == null)//bit redundant, only relavant on load xsl, if either doc don get loaded .. no transformation occurs
			return;

		if ( window.XMLHttpRequest && window.XSLTProcessor ){
			var xsltProcessor = new XSLTProcessor();
			xsltProcessor.importStylesheet(this.xslDoc);

			xsltProcessor.setParameter(null, "id", currId);
			for (x=0; x<10; x++) {
				var today = new Date();
				today.setDate(today.getDate()+x);
				xsltProcessor.setParameter(null, "day"+(x+1), today.format('dd. d mmm'));
			}
			
			var fragment = xsltProcessor.transformToFragment(this.xmlDoc, document);

			this.adContainer.innerHTML = "";
			this.adContainer.appendChild(fragment);
		}
		else if ( window.ActiveXObject ){
			//this.adContainer.innerHTML = this.xmlDoc.transformNode(this.xslDoc);
			
			var xslt = new ActiveXObject("Msxml2.XSLTemplate");
			var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
			var xslProc;
			xslDoc.async = false;
			xslDoc.resolveExternals = false;
			xslDoc.load(this.urlXSL);
			xslt.stylesheet = xslDoc;
			 
			var xslProc = xslt.createProcessor();
			xslProc.input = this.xmlDoc;
			
			xslProc.addParameter("id", currId);
			for (x=0; x<10; x++) {
				var today = new Date();
				today.setDate(today.getDate()+x);
				xslProc.addParameter( "day"+(x+1), today.format('dd. d mmm') );
			}
			
			xslProc.transform();
			this.adContainer.innerHTML = xslProc.output;
		}

		loadingDone();
	},

	handleError: function(request)
	{
		////////////change/test this
		//alert(request.getAllHeaders)
	}
}

function adhese_addAjaxAd(_urlXML, _urlXSL, _refreshRate, id)
{
	currId = id;
	// # make global ads array
	if (typeof(adhese_ajaxAds) != 'object')//quirky check?
		adhese_ajaxAds = [];

	// # ad id
	var myAdIndex = adhese_ajaxAds.length;
	
	// # make html container
	//document.write('<div ID="searchDetail"></div>');

	// # init ad
	adhese_ajaxAds[myAdIndex] = new adhese_ajaxAd(myAdIndex, _urlXML, _urlXSL, _refreshRate);
	adhese_ajaxAds[myAdIndex].init();
}


function adhese_updateAjaxAd(u, u2)
{
	var myAdIndex = adhese_ajaxAds.length-1;
	adhese_ajaxAds[myAdIndex] = new adhese_ajaxAd(myAdIndex, u, u2, 0);
	adhese_ajaxAds[myAdIndex].init();
}

<!-- end ajax lib -->

function loadingDone() {
	//
}

// a global month names array
var gsMonthNames = new Array(
'Januari',
'Februari',
'Maart',
'April',
'Mei',
'Juni',
'Juli',
'Augustus',
'September',
'Oktober',
'November',
'December'
);

// a global day names array
var gsDayNames = new Array(
'Zondag',
'Maandag',
'Dinsdag',
'Woensdag',
'Donderdag',
'Vrijdag',
'Zaterdag'
);

// the date format prototype
Date.prototype.format = function(f)
{
    if (!this.valueOf())
        return '&nbsp;';

    var d = this;

    return f.replace(/(yyyy|mmmm|mmm|mm|dddd|ddd|dd|d|hh|nn|ss|a\/p)/gi,
        function($1)
        {
            switch ($1.toLowerCase())
            {
            case 'yyyy': return d.getFullYear();
            case 'mmmm': return gsMonthNames[d.getMonth()];
            case 'mmm':  return gsMonthNames[d.getMonth()].substr(0, 3);
            case 'mm':   return (d.getMonth() + 1);
            case 'dddd': return gsDayNames[d.getDay()];
            case 'ddd':  return gsDayNames[d.getDay()].substr(0, 3);
            case 'dd':   return gsDayNames[d.getDay()].substr(0, 2);
            case 'd':   return d.getDate();
            case 'hh':   return ((h = d.getHours() % 12) ? h : 12);
            case 'nn':   return d.getMinutes();
            case 'ss':   return d.getSeconds();
            case 'a/p':  return d.getHours() < 12 ? 'a' : 'p';
            }
        }
    );
}