var bustcachevar=1; //bust potential caching of external pages after initial request? (1=yes, 0=no)
var ajaxTimer = new Array();
var fade = true;

function ajaxCall(url, containerId, compactLoader, timerId) {
	if (timerId == undefined){
		timerId = new Date().getTime();
	}
	if (containerId) ajaxLoader(containerId, compactLoader, timerId);

	if (bustcachevar) { //if bust caching of external page
		bustcacheparameter=(url.indexOf("?")!=-1) ? "&"+new Date().getTime() : "?"+new Date().getTime();
	}
	new Ajax.Request(url+bustcacheparameter, {
		method: 'get',
		onComplete: function(transport) {
			loadpage(transport, containerId, timerId);
		}
	});
}

function ajaxLoader(containerId, compactLoader, timerId) {
	if (timerId == undefined){
		timerId = new Date().getTime();
	}

	ajaxTimer["loader"+timerId] = new Array();
	ajaxTimer["loader"+timerId]["timer"] = setTimeout(function() {
		document.getElementById(containerId).innerHTML = (compactLoader ?
				'Laddar...' :
				'<div class="ajaxLoader"><img src="/ikoner/ajax-loader.gif"><br>Laddar...</div>');
			fadeInContent(containerId, 0, "loader"+timerId);
	}, 300);

	return timerId;
}

function loadpage(page_request, containerId, timerId) {
	var contents = '';
	try {
		//error messages
		if (page_request.status!=200 && containerId) {
			switch (page_request.status) {
				case 0:
					contents = "<center>Ett fel uppstod!<br><b>Du är inte uppkopplad till Interblagen. (error code "+page_request.status+")</b>"
				break;
				
				case 204:
					contents = "<center>Ett fel uppstod!<br><b>Sidan har inget innehåll. (error code "+page_request.status+")</b></center>";
				break;
					
				case 301:
					contents = "<center>Ett fel uppstod!<br><b>Sidan har flyttats. (error code "+page_request.status+")</b></center>";
				break;
				
				case 302:
					contents = "<center>Ett fel uppstod!<br><b>Sidan har flyttats för ett litet tag. (error code "+page_request.status+")</b></center>";
				break;
				
				case 401:
					contents = "<center>Ett fel uppstod!<br><b>Du har inte rättighet till den här sidan. (error code "+page_request.status+")</b></center>";
				break;
				
				case 403:
					contents = "<center>Ett fel uppstod!<br><b>Servern nekade begäran. (error code "+page_request.status+")</b></center>";
				break;
				
				case 404:
					contents = "<center>Ett fel uppstod!<br><b>Sidan finns inte. (error code "+page_request.status+")</b></center>";
				break;
				
				case 408:
					contents = "<center>Ett fel uppstod!<br><b>Det tog för lång tid. (error code "+page_request.status+")</b></center>";
				break;
				
				case 500:
					contents = "<center>Ett fel uppstod!<br><b>Servern är knasig. (error code "+page_request.status+")</b></center>";
				break;
				
				default:
					contents = "<center>Ett fel uppstod!<br><b>Detta är då mycket ofördelaktigt. (error code "+page_request.status+")</b></center>";
			}
			clearTimeout(ajaxTimer["loader"+timerId]["timer"]);
			document.getElementById(containerId).innerHTML = contents;
		}
		
		//Changes the contents of the container
		if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http") == -1)) {
			contents = page_request.responseText;
			if (ajaxTimer["loader"+timerId]) clearTimeout(ajaxTimer["loader"+timerId]["timer"]);
			if (containerId) {
				document.getElementById(containerId).innerHTML = contents;
				fadeInContent(containerId, 0, timerId);
			} else { //containerId is false, assume returned data is raw javascript
				try {
					eval(contents);
				} catch (evalExc) {
					alert('Tyvärr något gick fel!\n' + evalExc + '\n\nData:\n' + contents);
				}
			}
		}

	} catch (e) {}
}

function fadeInContent(obj, val, timerId, delay) {
	var elem = document.getElementById(obj);
	if (!fade) {
		elem.style.opacity = 1;
		elem.style.filter = '';
		return;
	}
	if (val == undefined) {
		val = 0;
	}
	
	if(delay != undefined && new Date().getTime() - delay > 250){
		fade = false;
		elem.style.opacity = 1;
		elem.style.filter = '';
		return;
	}
	delay = new Date().getTime();

	elem.style.zoom = 1; //IE-fix
	if (val < 100) {
		elem.style.opacity = val/100;
		elem.style.filter = 'alpha(opacity=' + val + ')';
		val += 10;
		ajaxTimer[timerId] = new Array();
		ajaxTimer[timerId]["timer"] = setTimeout(function() { fadeInContent(obj, val, timerId, delay); }, 20);
		ajaxTimer[timerId]["object"] = obj;
	} else {
		elem.style.opacity = 1;
		elem.style.filter = '';
	}
				
}

function killFade() {
	ajaxTimer.each(function(i) {
		if (i.indexOf("loader") == -1) {
			clearTimeout(ajaxTimer[i]["timer"]);
			document.getElementById(ajaxTimer[i]["object"]).style.opacity = 1;
			document.getElementById(ajaxTimer[i]["object"]).style.filter = '';
		}
	});
	ajaxTimer = new Array();
}
