var TYPE_ARRAY = ['new','middle','old'];
var TYPE_ID = 0;
var PV_COOKIE_EXPIRES = 30;
var PV_COOKIE_NAME = 'CONTAINERS';
var PV_COOKIECONTENT = (readCookie(PV_COOKIE_NAME) || "").split(";");
var BLOK_CONTAINERS= "";
var BLOK_LABEL = "";

function populateContainers(url) { 
	
	var tsTimeStamp= new Date().getTime();

	$("#oContainers").hide();
	$("#wContainers").hide();
	$("#dContainers").hide();
	$("#mContainers1").hide();
	$("#mContainers2").hide();
	$("#wdContainers").hide();	// Combination of wContainers and dContainers
	
	randomizeDivs(".randomizeContainers");	// Rearange all divs matching the selector .randomizeContainers 
				
	$.get(url,{time: tsTimeStamp},function(xml){
		TYPE_ID = getTypeId(url);

		getContainers(xml, "opinie", TYPE_ID);
		BLOK_CONTAINERS = reArange(BLOK_CONTAINERS);	// Rearange/shuffle the containers.
		if (BLOK_CONTAINERS.length > 0) {
			$("#oContainers").append("<div>");
			var containerDiv = $("#oContainers").find("div").get(0);
			$(containerDiv).addClass("containers");
			$(containerDiv).append( "<h3>" + BLOK_LABEL + "</h3>" );
			for (var c = 0; c < BLOK_CONTAINERS.length; c++) {
				$(containerDiv).append( $(BLOK_CONTAINERS[c]).text() );
			}
		}
		
		getContainers(xml, "weblog", TYPE_ID);
		BLOK_CONTAINERS = reArange(BLOK_CONTAINERS);	// Rearange/shuffle the containers.
		if (BLOK_CONTAINERS.length > 0) {
			$("#wContainers").append("<div>");
			var containerDiv = $("#wContainers").find("div").get(0);
			$(containerDiv).addClass("containers");
			$(containerDiv).append( "<h3>" + BLOK_LABEL + "</h3>" );
			for (var c = 0; c < BLOK_CONTAINERS.length; c++) {
				$(containerDiv).append( $(BLOK_CONTAINERS[c]).text() );
			}
		}
		
		getContainers(xml, "domeinen", TYPE_ID);
		BLOK_CONTAINERS = reArange(BLOK_CONTAINERS);	// Rearange/shuffle the containers.
		if (BLOK_CONTAINERS.length > 0) {
			$("#dContainers").append("<div>");
			var containerDiv = $("#dContainers").find("div").get(0);
			$(containerDiv).addClass("containers");
			$(containerDiv).append( "<h3>" + BLOK_LABEL + "</h3>" );
			for (var c = 0; c < BLOK_CONTAINERS.length; c++) {
				$(containerDiv).append( $(BLOK_CONTAINERS[c]).text() );
			}
		}

		getContainers(xml, "marketing", TYPE_ID, 6, 3);
		// Do not rearange the containers. Otherwise the forced can end up in the second "set" and not be displayed.
		if (BLOK_CONTAINERS.length > 0) {
			$("#mContainers1").append("<div>");
			var containerDiv = $("#mContainers1").find("div").get(0);
			$(containerDiv).addClass("containers");
			$(containerDiv).append( "<h3>" + BLOK_LABEL + "</h3>" );
			for (var c = 0; c < 3 && c < BLOK_CONTAINERS.length; c++) {
				$(containerDiv).append( $(BLOK_CONTAINERS[c]).text() );
			}
		}
		
		if (BLOK_CONTAINERS.length > 3) {
			$("#mContainers2").append("<div>");
			var containerDiv = $("#mContainers2").find("div").get(0);
			$(containerDiv).addClass("containers");
			$(containerDiv).append( "<h3>" + BLOK_LABEL + "</h3>" );
			for (var c = 3; c < 6 && c < BLOK_CONTAINERS.length; c++) {
				$(containerDiv).append( $(BLOK_CONTAINERS[c]).text() );
			}
		}

		var wd = reArange(['weblog','domeinen']);	// Choose randonly which containers to use: wblog or domeinen.
		getContainers(xml, wd[0], TYPE_ID);
		BLOK_CONTAINERS = reArange(BLOK_CONTAINERS);	// Rearange/shuffle the containers.
		if (BLOK_CONTAINERS.length > 0) {
			$("#wdContainers").append("<div>");
			var containerDiv = $("#wdContainers").find("div").get(0);
			$(containerDiv).addClass("containers");
			$(containerDiv).append( "<h3>" + BLOK_LABEL + "</h3>" );
			for (var c = 0; c < BLOK_CONTAINERS.length; c++) {
				$(containerDiv).append( $(BLOK_CONTAINERS[c]).text() );
			}
		}
		
		$("#oContainers").show();
		$("#wContainers").show();
		$("#dContainers").show();
		$("#mContainers1").show();
		$("#mContainers2").show();
		$("#wdContainers").show();	// Combination of wContainers and dContainers
	
	});
	
}

function getContainers(xml, setId, typeId, numContainers, minNumContainers) {
	var typeName = TYPE_ARRAY[typeId];
	var numContainers = (numContainers == null) ? 3 : numContainers;
	var minNumContainers = (minNumContainers == null) ? 3 : minNumContainers;
	
	if (xml == null || setId == null || typeName == null) {
		return false;
	}
	
	var containers = new Array();	// The array of containers we will display in this pageview.
	
	var group = $('set[id=' + setId + ']',xml).find("group").get(0);
	
	//	If there are more than 1 groups in this set choose a random group.
	var numGroups = $('set[id=' + setId + ']',xml).find("group").length;
	if (numGroups > 1) {
		var rndGroupIds = GetUnique(numGroups, 1);
		if (rndGroupIds[0] != 0) {
			group = $('set[id=' + setId + ']',xml).find("group").get(rndGroupIds[0]);
		}
	}
	BLOK_LABEL = $(group).attr('label');
	
	var typeContainers = $(group).find("container[type=" + typeName + "]");
	var numForced = $(group).find("container[type=forced]").length;
		
	if (numForced > numContainers) {		// There are more than enough forced containers, choose them random.
		var rndForcedIds = GetUnique(numForced, 3);
		for (var i=0; i< rndForcedIds.length; i++) {
			containers[containers.length] = $(group).find("container[type=forced]").get(rndForcedIds[i]);	// Add the forced container to the containers array
		}
	} else {
		$('container[type=forced]',group).each(function(i) {
			containers[containers.length] = $(this);	// Add the forced container to the containers array
		});
	}
	
	if (containers.length < numContainers) {	// The containers array is not yet full. Add type containers, choose them random.
		var rndTypeIds = GetUnique(typeContainers.length, numContainers - containers.length);
		for (var j=0; j< rndTypeIds.length; j++) {
			containers[containers.length] = $(typeContainers).get(rndTypeIds[j]);	// Add the type container to the containers array
		}
	}
	
	if (containers.length < numContainers) {
		
		if (typeId > 0) {	// Add containers from newest type, choose then random.
			var newestContainers = $(group).find("container[type=" + TYPE_ARRAY[0] + "]");
			var rndTypeIds = GetUnique(newestContainers.length, numContainers - containers.length);
			for (var j=0; j< rndTypeIds.length; j++) {
				containers[containers.length] = $(newestContainers).get(rndTypeIds[j]);	// Add the newest container to the containers array
			}
		}
	}
	
	if (containers.length >= minNumContainers) {
		//return containers;
		BLOK_CONTAINERS = containers;
	} else {
		BLOK_CONTAINERS = "";
	}

}

function GetUnique(MaxValue, NumUnique) {
	/*
	* Based on a script created by: Barry Pranklin :: http://www.pranklin.com
	*/
	if (NumUnique > MaxValue) {
		NumUnique = MaxValue;
	}
	var Found=false;
	var Count=0;
	var Current = new Array(NumUnique);

	for (i=0;Count<NumUnique;Count++) {
		Found=false
		var rndValue = get_random(MaxValue)
		var j=0
		for (j=0;j<Current.length;j++) {
			if (Current[j] == rndValue) {
				Found=true
				break
			}
		}
		if (Found) {
			Count--
		} else {
			Current[Count]=rndValue
		}
	}
	return Current;
}

function get_random(MaxValue) {
	var ranNum = Math.floor(Math.random() * MaxValue);
	return ranNum;
}

function reArange(input) {
	var tmpContainers = new Array();
	var rndIds = GetUnique(input.length, input.length);
	for (var k=0; k < rndIds.length; k++) {
		tmpContainers[tmpContainers.length] = input[rndIds[k]];
	}
	return tmpContainers;
}

function getTypeId(cId) {
	var delim = "|"; // delimiter for pages in cookie
	var count = 1;
	var id = 0
	var cnt = 1;
	
	var found = false;
	for (var i = 0; i < PV_COOKIECONTENT.length; i++) {
		var ccc = PV_COOKIECONTENT[i].split('|')
		if (ccc[id] == cId) {
			count = parseInt(ccc[cnt]);
			if (count >= 15) {
				// Reset counter
				count = 1;
			} else {
				// Increment counter
				count++;
			}
			// Update PV_COOKIECONTENT
			ccc[cnt] = count;
			PV_COOKIECONTENT[i] = ccc.join("|");
			found = true;
			break;
		}
	}
	if (!found) {
		// Add new counter to cookie.
		var cookieval = new Array(2);
		cookieval[id] = cId;
	    cookieval[cnt] = 1;
		PV_COOKIECONTENT.push(cookieval.join("|"));
	}
	
	// Write (new) cookie.
	createCookie(PV_COOKIE_NAME, PV_COOKIECONTENT.join(";"), { path: '/', expires: PV_COOKIE_EXPIRES});
	
	// Return correct "relative" count value
	if (count > 5 && count <=10) {
		return 1;
	} else if (count > 10) {
		return 2;
	} else {
		return 0;
	}
}

function randomizeDivs(selector) {
	
	// Select all divs that should be randomized.
	var rndContainerBlokken = $(selector);
	
	// Place the content of the divs into a temporary array
	var tmpArray = new Array();
	for (var c = 0; c < rndContainerBlokken.length; c++) {
		tmpArray[tmpArray.length] = $(rndContainerBlokken[c]).html();
	}
	tmpArray= reArange(tmpArray);	// Rearange the temporary array.
	
	// Replace the content of the divs with the content of the randomized array
	for (var c = 0; c < rndContainerBlokken.length; c++) {
		$(rndContainerBlokken[c]).html( tmpArray[c] );
	}

}

