/***********************************************************************************************************
*																				*
*	Programmeur:	Daniel Rioux														*
*																				*
*	Date de création:	30 Août 2009														*
*																				*
*	Objet du script:	Gère les uploads de fichiers sur le serveur web à la façon ajax.						*
*																				*
***********************************************************************************************************/

/*---------------------------Les fonctions------------------------------------

 - uploadFile()
	Cette fonction, comme l'indique son nom, sert à uploader un fichier sélectionné par l'utilisateur, mais devant respecter la contrainte MAX_FILE_SIZE étant un champ caché du formulaire.
	
	-Paramètres :
		- File :		Le champ <input type=file> du formulaire (l'objet)
		- MaxFileSize	Le champ caché nommé MAX_FILE_SIZE <input type=hidden name=FILE_MAX_SIZE> (l'objet)

*/

//Upload d'un fichier sur le serveur web
function uploadFile(File,MaxFileSize)
{	
	var Div;
	var Form;
	var Iframe;
	var FileInput = File;
	var TableRow;
	var TableCell;
	var FileOrigin = document.getElementById("files");
	var FilenameHolder;
	
	//On commence par créer un nouveau formulaire dans le document courant
	//pour ne pas à avoir à soumettre le formulaire principal et ne pas avoir
	//à recharger la page. Ensuite, on copie le champ de type file dans le nouveau
	//formulaire puis on le soumet au serveur.
	
	var Table = document.getElementById("zone1");		//Noeud parent des nouveaux éléments
	
	TableRow = document.createElement("TR");			//Nouvelle ligne
	
	TableCell = document.createElement("TD");			//Nouvelle cellule
	
	Div = document.createElement("DIV");				//Le conteneur dans lequel tiendra le formulaire d'upload invisible
	
	Div.style.display = "none";							//Le conteneur est invisible
	
	//Le formulaire et s'est attributs
	
	Form = document.createElement("FORM");				
	
	setAttribute(Form,"method","post");
	setAttribute(Form,"action","scripts/ajax.php");
	setAttribute(Form,"enctype","multipart/form-data");
	setAttribute(Form,"target","file_upload");
	
	setAttribute(Form,"name","ajax_upload");
	setAttribute(Form,"id","ajax_upload");

	Iframe = '<iframe name="file_upload" id="file_upload" src="#"></iframe>';	//Conteneur de destination des données du champ de fichier
	Form.innerHTML = Iframe;
	
	//Ajout des nouveaux éléments dans la page bien qu'ils soient invisibles.
	
	Form.appendChild(MaxFileSize);
	Form.appendChild(FileInput);
	Div.appendChild(Form);
	TableCell.appendChild(Div);
	TableRow.appendChild(TableCell);
	Table.appendChild(TableRow);
	
	//Nouveau champ caché, cette fois-ci dans le formulaire maitre afin de contenir le nom du fichier seulement que l'utilisateur à sélectionné, pour la récupération des numéros d'erreurs de transfert
	
	FileHolder = document.createElement("INPUT");
	setAttribute(FileHolder,"type","hidden");
	setAttribute(FileHolder,"name","Filename");
	setAttribute(FileHolder,"value",File.value);
	
	//Envoi du nouveau formulaire 
	Form.submit();
	
	//On doit replacer notre champ de type file à son endroit original dans le formulaire source
	FileOrigin.appendChild(MaxFileSize);
	FileOrigin.appendChild(File);
	
	FileOrigin.appendChild(FileHolder);
	//alert(FileHolder.value);
	
	//On désactive le champ file pour éviter des envois de fichier répétés
	File.disabled = "disabled";
}

//Appliquer des attributs aux éléments xhtml d'un document
function setAttribute(Element,AttributeName,AttributeValue)
{
	//Element :	L'objet HTML
	//AttributeName
	var Attr;
	
	Attr = document.createAttribute(AttributeName);
	Attr.nodeValue = AttributeValue;
	Element.setAttributeNode(Attr);
}