var // CONSTANTS
	IN = 0,
	OUT = 1,
	
	WARN = 1,
	OVERRIDE = 2;

var
	UserOnLoad = (typeof(window.onload) == 'undefined' ? null : window.onload),
	EParams,
	FormSubmit,
	FormSubmitBase;


window.onload = function() {
//-----======

	ReadParams();
	if (typeof(UserOnLoad) == 'function')
		UserOnLoad();
	}


	FormSubmit = FormSubmitBase = function() {
//	==========---==============

	WriteParams();
	document.forms.PF_FORM.submit();

	return void null;
}


function Adapt(mode, string) {
//-------=====--------------

	switch(mode) {
		case 0 : // IN
			return unescape(string);
		case 1 : // OUT
			return escape(string).replace(/\+/g, '%2B');
		default :
			return null; // Évite un "JavaScript Warning"
	}
}


function ChangesAllowToProceed(mode) {
//-------=====================------

	/*
		mode =
			   1 = WARN : évalue changed et, le cas échéant, signale qu'il y a eu modification
			   2 = OVERRIDE : évalue changed et, le cas échéant, permet d'ignorer les modifications
			   autre : évalue changed
	*/
	var
		pName,
		i,
		visited,
		widget,
		changed;
		
	if (typeof(document.PF_FORM.dataChanged) != 'undefined') // Le formulaire propose une méthode spécifique d'évaluation des modifications
		changed = document.PF_FORM.dataChanged();
	else { // Application de l'évaluation par défaut.
		changed = false;
		visited = { };
		for (pName in EParams)
			if (EParams[pName] != GetWidget(pName)) {
				changed = true;
				break;
			}
			else
				visited[pName] = true;
		if (! changed)
			for (i = 0; i < document.PF_FORM.elements.length; i++) {
				widget = document.PF_FORM.elements[i];
				if (widget.name.match(/^[A-Z]/) && typeof(visited[widget.name]) == 'undefined') {
					changed = true;
					break;
				}
			}
	}
	if (changed)
		switch (mode) {
			case 1 :
				alert(PTD('Some data have been modified !\n\nChoose first to ignore (Refresh) or confirm (Save) changes.'));
				CancelledNavCmdTime = new Date().valueOf();
				break;
			case 2 :
				if (confirm(PTD('Some data have been modified !\n\nIgnore changes ?')))
					changed = false;
				break;
		}
	return ! changed;
}


function ReadParams() {
//-------==========--

	var
		i,
		widget;

	for (i in IParams)
		IParams[i] = Adapt(IN, IParams[i]);
	EParams = { };
	for (i = 0; i < document.PF_FORM.elements.length; i++) {
		widget = document.PF_FORM.elements[i];
		if (widget.name.match(/^[A-Z]/)) // Évite iparams et les boutons de commande d'action, qui - parfois sans nom - crashent Explorer (Mac et Window). (Si un bouton est nommé, le nom commence par un sous-tiret.)
			EParams[widget.name] = GetWidget(widget.name);
	}
}


function WriteParams() {
//-------===========--

	var
		iparams = document.forms.PF_FORM.iparams,
		pName,
		inited;

	iparams.value = '';
	inited = false;
	for (pName in IParams) {
		if (inited)
			iparams.value += '&';
		else
			inited = true;
		iparams.value += pName + '=' + Adapt(OUT, IParams[pName]);
	}
}


function SetWidget(pName, pValue) {
//-------=========---------------

	var
		widget = document.forms.PF_FORM[pName],
		i,
		j,
		values;
		
	if (widget != null) {
		if (typeof(widget.type) == 'undefined')
			widget.type = 'radio';
		switch (widget.type) {
			case 'select-one' :
			case 'select-multiple' :
				values = pValue.split(/,/);
				for (i = 0; i < widget.options.length; i++) {
					widget.options[i].selected = false;
					for (j = 0; (! widget.options[i].selected && j < values.length); j++)
						if (widget.options[i].value == values[j])
							widget.options[i].selected = true;
				}
				return pValue;
			case 'checkbox' :
				widget.checked = (widget.value == pValue);
				return pValue;
			case 'text' :
			case 'textarea' :
				widget.value = pValue;
				return pValue;
			case 'radio' :
				for (i = 0; i < widget.length; i++) 
					if (widget[i].value == pValue) {
						widget[i].checked = true;
						return pValue;
					}
		}
	}
	return null;
}


function GetWidget(pName) {
//-------=========-------

	var
		widget,
		i,
		values;
		
	widget = document.PF_FORM[pName];
	if (widget != null) {
		if (typeof(widget.type) == 'undefined')
			widget.type = 'radio';
		switch (widget.type) {
			case 'checkbox' :
				return (widget.checked ? widget.value : '');
			case 'select-one' :
			case 'select-multiple' :
				values = [ ];
				for (i = 0; i < widget.options.length; i++)
					if (widget.options[i].selected)
						values[values.length] = widget.options[i].value;
				return values.join(',');
			case 'text' :
			case 'textarea' :
			case 'password' :
				return widget.value.replace(/(\r?\n)|(\n?\r)/g, '\n');
			case 'radio' : 
				for (i = 0; i < widget.length; i++) 
					if (widget[i].checked)
						return widget[i].value;
				return '';
		}
	}
	return null;
}


function Search() { // Appelé via le SearchDialog.
//-------======--

	if (! document.PF_FORM.SEARCH_STRING.value.match(/\w{3,}/))
		alert(PTD('Searching requires at least one 3 characters-long word.'));
	else {
		IParams.pid = 0;
		ViewPage(null, true);
	}
}

function ViewPage(pID, search) {
//-------========-------------

	if (! search && typeof(document.PF_FORM.SEARCH_STRING) != 'undefined') // Sortie du "mode recherche".
		document.PF_FORM.SEARCH_STRING.value = '';
	document.PF_FORM.action = document.PF_FORM.action.replace(/\?p=.*$/, ''); // Pour s'accommoder d'un visiteur qui clique plus vite que son ombre.
	document.PF_FORM.action += (search ? (pID == null ? '' : '?p=' + pID) : '?p=' + (pID == null ? IParams.pid : pID));
	FormSubmit();
	
	return void(null);
}


function PreviewPage(pID) {
//-------===========-----

	var
		session,
		behavior,
		action;
		
	if (typeof(IParams.session) != 'undefined') // Lorsque l'accès n'est pas contrôlé, "session" n'est pas présent.
		session = IParams.session;
	IParams.session = '';
	behavior = IParams.b;
	IParams.b = 'v';
	action = document.PF_FORM.action;
	document.PF_FORM.action += '?p=' + (pID == null ? IParams.pid : pID);
	document.PF_FORM.target = 'WAT_VISITOR';
	FormSubmit();
	document.PF_FORM.target = '_self';
	document.PF_FORM.action = action;
	IParams.b = behavior;
	if (session != null)
		IParams.session = session; // Voir plus haut.
	
	return void(null);
}


function ViewExtPage(url) {
//-------===========-----

	/*
		Permet l'utilisation de TARGET via execcommand('createlink') dans page-contents-rt-display.php.
		ATTENTION, voir les conséquences de cet "artifice" dans links-state-display.php.
	*/
	
	return 'javascript:var w=window.open("' + url + '", "WAT_EXTPAGE");w.focus();void(null);';
}
