var docXml;
var selected = null;
var selectedId = "";
var openedFile = "";
var wantSaveReturn = 0;

var nodeToLoad;
var pageNodes;

var paramsURL = new Array();

var pagesHis = new Array();
var pagesNext = new Array();

var blocChangePage = false;
var loadTimerId = -1;

var fullLoaded = false;

function makeNextObject()
{
	if( fullLoaded )
		return;
	
	if( nodeToLoad < pageNodes[0].childNodes.length )
	{
		if( pageNodes[0].childNodes[nodeToLoad].nodeType != 3 )
		{
			nodeToLoad++;
			makeObjectByNode( pageNodes[0].childNodes[nodeToLoad - 1] );
		}
		else
		{
			nodeToLoad++;
			makeNextObject();
		}
		document.getElementById("loading_pop_barre").style.width = parseInt( (nodeToLoad / pageNodes[0].childNodes.length) * 457 ) + "px";
	}
	else
	{
		fullLoaded = true;
		
		clearTimeout(loadTimerId);

		removeAllNodes( document.getElementById('map_contained'), false );
		removeAllNodes( document.getElementById('map_map_int'), false );
		removeAllNodes( document.getElementById('map_background'), false );
		
		isOnLink = false;
	
		initLinkDialog();
		initShopDialog();
		
		document.getElementById("loading_pop_barre").style.width = "457px";
		
		playAll();
		
		if( map_width < map_zone_width )map_x = parseInt( (map_zone_width - map_width) / 2 );
		if( map_height < map_zone_height )map_y = parseInt( (map_zone_height - map_height) / 2 );
		
		loadSkin();
		
		drawMapContained();
		
		document.getElementById("loading_pop").style.visibility = "hidden";
	}
}

// Fonction de création dynamique de la page HTML
function makePage()
{
	map_width = 0;
	map_height = 0;
	
	fullLoaded = false;
	
	pageNodes = docXml.getElementsByTagName('page');

	nodeToLoad = 0;
	
	makeNextObject();
	
	if( map_width < map_zone_width )map_x = parseInt( (map_zone_width - map_width) / 2 );
	if( map_height < map_zone_height )map_y = parseInt( (map_zone_height - map_height) / 2 );
}

// Fonction d'initialisation de xhr
function initXHR()
{
	var temp_xhr = null;
	if( window.XMLHttpRequest )
		temp_xhr = new XMLHttpRequest();
	else if(window.ActiveXObject)
	{
		try
		{
			temp_xhr = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
		        temp_xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e1)
			{
				temp_xhr = null;
			}
		}
	}
	else
	{
		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
	}
	return temp_xhr;
}

function loadTimer()
{
	loadTimerId = -1;
	changeCurrentPage(openedFile);
}

// fonction de chargement de la page xml
function loadXMLPage( file, version, xhr )
{
	if( file == null || file == "" )
		return;
	
	document.getElementById("loading_pop").style.visibility = "visible";
	document.getElementById("loading_pop_barre").style.width = "0px";
	
	loadTimerId = setTimeout("loadTimer()", 3000);
	
	if(window.ActiveXObject)
		xhr.abort();
	
	var parLength = paramsURL.length;
	var i = 0;
	while( i < parLength )
	{
		paramsURL.pop();
		i++;
	}
	
	blocChangePage = true;
	
	// Get URL params
	var fileClear = "";
	i = 0;
	var newParam = null;
	var pRead = false;
	var param = "";
	var pVRead = false;
	var value = "";
	while( i < file.length )
	{
		if( file.charAt(i) == '?' )
		{
			pRead = true;
			newParam = new Array();
			i++;
			continue;
		}
		else if( file.charAt(i) == '&' )
		{
			pRead = true;
			newParam.push(param);
			newParam.push(value);
			paramsURL.push(newParam);
			newParam = new Array();
			param = "";
			pVRead = false;
			value = "";
			i++;
			continue;
		}
		if( pRead )
		{
			if( file.charAt(i) == '=' )
			{
				pVRead = true;
				i++;
				continue;
			}
			if( pVRead )
				value += file.charAt(i);
			else
				param += file.charAt(i);
		}
		else
			fileClear += file.charAt(i);
		i++;
	}
	if( pVRead )
	{
		newParam.push(param);
		newParam.push(value);
		paramsURL.push(newParam);
	}
	
	// Clear
	blocMoveY = false;
	blocMoveX = false;
	var moveCBLength = moveCB.length;
	i = 0;
	while( i < moveCBLength )
	{
		moveCB.pop();
		i++;
	}
	
	xhr.onreadystatechange = function()
	{
		if( xhr.readyState == 4 )
		{
			if( xhr.status == 200 )
			{
				docXml = xhr.responseXML;
				blocChangePage = false;
				openedFile = file;
				if( pagesHis.length > 0 )
				{
					document.getElementById("top_bar_but_ret").style.cursor = "pointer";
					document.getElementById("top_bar_but_ret").src = "data/images/button/return_but.gif";
					addEvent( document.getElementById("top_bar_but_ret"), "click", loadPreviousPage, false );
				}
				else
				{
					document.getElementById("top_bar_but_ret").style.cursor = "default";
					document.getElementById("top_bar_but_ret").src = "data/images/button/return_emp_but.gif";
					removeEvent( document.getElementById("top_bar_but_ret"), "click", loadPreviousPage, false );
				}
				
				if( pagesNext.length > 0 )
				{
					document.getElementById("top_bar_but_next").style.cursor = "pointer";
					document.getElementById("top_bar_but_next").src = "data/images/button/next_but.gif";
					addEvent( document.getElementById("top_bar_but_next"), "click", loadNextPage, false );
				}
				else
				{
					document.getElementById("top_bar_but_next").style.cursor = "default";
					document.getElementById("top_bar_but_next").src = "data/images/button/next_emp_but.gif";
					removeEvent( document.getElementById("top_bar_but_next"), "click", loadNextPage, false );
				}
				currentPageLink = file;
				makePage();
			}
		}
	};
	
	xhr.open( "GET", fileClear + "?nocacheversion=" + version,  true );
	xhr.setRequestHeader("Content-Type", "text/xml; charset=iso-8859-1");
	xhr.send( null );
	
	var supportedFile = fileClear;
	for( var i = 0; i < paramsURL.length; i++ )
	{
		if( i == 0 )
			supportedFile += "?";
		else
			supportedFile += "#";
		supportedFile += paramsURL[i][0] + "=" + paramsURL[i][1];
	}
	updateVisitor(supportedFile);
}

function loadPreviousPage()
{
	if( blocChangePage )
		return;
	
	var toLoad = pagesHis.pop();
	
	pagesNext.push(openedFile);
	
	openedFile = "";
	
	dontKillNext = true;
	
	changeCurrentPage(toLoad);
	
	dontKillNext = false;
}

function loadNextPage()
{
	if( blocChangePage )
		return;
	
	var toLoad = pagesNext.pop();
	
	dontKillNext = true;
	
	changeCurrentPage(toLoad);
	
	dontKillNext = false;
}

// fonction de chargement de fichiers xml quelconques (retourn le doc xml créé)
function loadSimpleXML( file, xhr, callBack, error )
{
	if(window.ActiveXObject)
		xhr.abort();
	
	xhr.onreadystatechange = function()
	{
		if( xhr.readyState == 4 )
		{
			if( xhr.status == 200 )
			{
				callBack( xhr.responseXML );
			}
			else
				errorPopup( error );
		}
	};
	
	xhr.open( "GET", file,  true );
	xhr.setRequestHeader("Content-Type", "text/xml; charset=iso-8859-1");
	xhr.send( null ); 
}