function refreshSelectElement(selId, optionsArray)
{
	theElement = document.getElementById(selId);
	
	if (selId == "gametypes") {
		tempGametype = document.getElementById("gametypes").value;
		optionsArray = gametypes[selGame];
	}
	
	// clear out the old options
	while (theElement.firstChild) {
		theElement.removeChild(theElement.firstChild);
	}
	
	// create a new set of options and append to the select element
	for (i in optionsArray) {
		theOption = document.createElement("option");
		if (selId == "gametypes" || selId == "platforms") {
			theText = document.createTextNode(optionsArray[i]);
			theOption.value = optionsArray[i];
		} else {
			theText = document.createTextNode(i);
			theOption.value = i;
		}
		theOption.appendChild(theText);
		theElement.appendChild(theOption);
	}
	
	// if the selected gametype exists in the newly selected game, keep it selected
	if (selId == "gametypes" && arrayContains(gametypes[selGame],tempGametype)) {
		document.getElementById("gametypes").value = tempGametype;
	}
}

function showLevel(levelId)
{
	levelURL = ("levels.php?id="+levelId);
	
	if (selGametype != 'All Gametypes') {
		levelURL = (levelURL+"&gametypes="+selGametype);
	}
	if (selGame != 'All Games') {
		levelURL = (levelURL+"&games="+selGame);
	}
	if (selPlatform != 'Any') {
		levelURL = (levelURL+"&platforms="+selPlatform);
	}
	if (selSearch != '') {
		levelURL = (levelURL+"&search="+selSearch);
	}
	if (selSort != '') {
		levelURL = (levelURL+"&sort="+selSort);
	}
	
	// window scroll position
	var scrollY = typeof window.pageYOffset != 'undefined' ? window.pageYOffset : document.documentElement.scrollTop;
	levelURL = (levelURL+"&scroll="+scrollY);
	
	// maplist scroll position
	scrollY = document.getElementById("maplist").scrollTop;
	levelURL = (levelURL+"&levelscroll="+scrollY);
	
	window.location = levelURL;
}

function sortMapList(sortVal)
{
	levelURL = ("levels.php?id="+selLevelId);
	
	if (selGametype != 'All Gametypes') {
		levelURL = (levelURL+"&gametypes="+selGametype);
	}
	if (selGame != 'All Games') {
		levelURL = (levelURL+"&games="+selGame);
	}
	if (selPlatform != 'Any') {
		levelURL = (levelURL+"&platforms="+selPlatform);
	}
	if (selSearch != '') {
		levelURL = (levelURL+"&search="+selSearch);
	}
	levelURL = (levelURL+"&sort="+sortVal);
	
	// window scroll position
	var scrollY = typeof window.pageYOffset != 'undefined' ? window.pageYOffset : document.documentElement.scrollTop;
	levelURL = (levelURL+"&scroll="+scrollY);
	
	window.location = levelURL;
}

function cursorHand()
{
	document.body.style.cursor = 'pointer';
}

function cursorNormal()
{
	document.body.style.cursor = 'default';
}


function getRealOffset(id)
{
    var elem = document.getElementById(id);
    var topOffset = elem.offsetTop;
    var parent = elem.offsetParent;
	while(parent != null) {
		topOffset += parent.offsetTop;
		parent = parent.offsetParent;
    }
    return topOffset;
}

function arrayContains(theArray,theValue)
{
	for (x in theArray)
	{
		if (theArray[x] == theValue)
		{
			return true;
		}
	}
	return false;
};