/*	dom.js
	copyleft Thomas Baspeyras 2004-2005

index :
	addLoadEvent(action)
	addTo(parentId)
	aImg(href, image, [title])
	appendTo(parent)
	aText(href, text, [title])
	br()
	button(text, [onclick])
	checkbox([checked])
	checkboxWithLabel(text, [checked])
	div([...])
	img(src, alt, [title])
	h(level, text)
	inputChangeOnEnter()
	label(text, [forId])
	onEnter(element, action)
	option(text, [value])
	p([...])
	q([...])
	readyNewWindowAnchors()
	select([...])
	span([...])
	textInput(size, [value])
	textNode(text)
*/

function addLoadEvent(action) {
/*	adds a function to execute after the page is loaded
	ajoute une fonction à exécuter après que la page est chargée
*/
	var previousAction = window.onload;
	if (typeof window.onload != "function") {
		window.onload = action;
	}
	else {
		window.onload = function() {
			previousAction();
			action();
		}
	}
}

function addTo(parentId) {
/*	appends arguments to the element of given id
	ajoute les arguments a l'élément d'identificateur donné
*/
	var parent = document.getElementById(parentId);
	for (var i = 1; i < arguments.length; i++) parent.appendChild(arguments[i]);
	return parent;
}

function aImg(href, image) {
/*	creates an anchor with an image
	créé une ancre avec une image
*/
	var anchor = document.createElement("a");
	anchor.href = href;
	anchor.appendChild(image);
	return anchor;
}

function appendTo(parent) {
/*	appends arguments to the given element
	ajoute les arguments a l'élément donné
*/
	for (var i = 1; i < arguments.length; i++) parent.appendChild(arguments[i]);
	return parent;
}

function aText(href, text, title) {
/*	creates an anchor with text
	créé une ancre avec un texte
*/
	var anchor = document.createElement("a");
	anchor.href = href;
	if (title) anchor.title = title;
	anchor.appendChild(textNode(text));
	return anchor;
}

function br() {
/*	creates a br tag
	créé un passage à la ligne
*/
	var tag = document.createElement("br");
	return tag;
}

function button(text, onclick) {
/*	creates a button with text
	créé un bouton avec un texte
*/
	var input = document.createElement("input");
	input.type = "button";
	input.value = text;
	if (onclick) input.onclick = onclick;
	return input;
}

function checkbox(checked) {
/*	creates a simple checkbox
	créé une simple case à cocher
*/
	var input = document.createElement("input");
	input.type = "checkbox";
	if (checked) input.checked = true;
	return input;
}

function checkboxWithLabel(text, checked) {
/*	creates a checkbox with a label enclosed in a containing element
	créé une case à cocher avec un label enchassés dans un élément conteneur
*/
	var input = checkbox(checked);
	var labelFor = label(text);
	labelFor.onclick = function () { input.checked = !input.checked; }
	var inlineSpan = span(input, labelFor);
	inlineSpan.checkbox = input;
	inlineSpan.label = labelFor;
	return inlineSpan;
}

function div() {
/*	creates a div containing the arguments
	créé une division contenant les arguments
*/
	var division = document.createElement("div");
	for (i = 0; i < arguments.length; i++) division.appendChild(arguments[i]);
	return division;
}

function img(src, alt, title) {
/*	creates an image with mandatory alternate text
	créé une image avec un texte alternatif obligatoire
*/
	var image = document.createElement("img");
	image.src = src;
	image.alt = alt;
	if (title) image.title = title;
	return image;
}

function h(level, text) {
/*	creates a heading
	créé un titre
*/
	var heading = document.createElement("h" + level);
	heading.appendChild(textNode(text));
	return heading;
}

function label(text, forId) {
/*	creates a label
	créé un label
*/
	var labelFor = document.createElement("label");
	labelFor.appendChild(textNode(text));
	if (forId) labelFor.htmlFor = forId;
	return labelFor;
}

function onEnter(element, action) {
/*	element will perform action if enter key is pressed
	l'élément accomplira l'action si la touche entrée est pressée
*/
	element.onkeypress = function (event) {
		if (!event) var event = window.event;
		if (event.keyCode) var code = event.keyCode;
		else if (event.which) var code = event.which;
		if (code == 13) {
			action();
			return false;
		}
		return true;
	}
}

function option(text, value) {
/*	creates a select option
	créé une option de liste déroulante
*/
	var selectorOption = document.createElement("option");
	selectorOption.appendChild(textNode(text));
	if (value != null) selectorOption.value = value;
	return selectorOption;
}

function p() {
/*	creates a paragraph containing the arguments
	créé un paragraphe contenant les arguments
*/
	var paragraph = document.createElement("p");
	for (i = 0; i < arguments.length; i++) paragraph.appendChild(arguments[i]);
	return paragraph;
}

function q() {
/*	creates a quote containing the arguments
	créé une citation contenant les arguments
*/
	var quote = document.createElement("q");
	for (i = 0; i < arguments.length; i++) quote.appendChild(arguments[i]);
	return quote;
}

function readyNewWindowAnchors() {
/*	every anchor or form of class 'newWindow' will open in a new window
	toutes les ancres et les formulaires de classe "newWindow" s'ouvriront dans une nouvelle fenêtre
*/
	var anchors = document.getElementsByTagName("a");
	for (var i = 0; i < anchors.length; i++) if (anchors[i].className.has("newWindow")) anchors[i].target = "_blank";
	var forms = document.getElementsByTagName("form");
	for (var i = 0; i < forms.length; i++) if (forms[i].className.has("newWindow")) forms[i].target = "_blank";
}

function select() {
/*	creates a select containing the given options
	créé une division contenant les options données
*/
	var selector = document.createElement("select");
	for (i = 0; i < arguments.length; i++) selector.appendChild(arguments[i]);
	return selector;
}

function span() {
/*	creates a span containing the arguments
	créé une portée contenant les arguments
*/
	var inlineSpan = document.createElement("span");
	for (i = 0; i < arguments.length; i++) inlineSpan.appendChild(arguments[i]);
	return inlineSpan;
}

function textInput(size, value) {
/*	creates a text input
	créé une boite de saisie
*/
	var input = document.createElement("input");
	input.type = "text";
	input.size = size;
	if (value != null) input.value = value;
	return input;
}

function textNode(text) {
/*	creates a text node
	créé un noeud de texte
*/
	return document.createTextNode(text);
}
