// Permet de chercher si une valeur est présente dans un tableau
function inArray(tableau, valeur) {
	var i;
	for (i=0; i < tableau.length; i++) {
		// Matches identical (===), not just similar (==).
		if (tableau[i] === valeur) {
			return true;
		}
	}
	return false;
}

/**************************************************************************************************
	Predefined Variables
***************************************************************************************************/				
var http_requests = new Array();
if (window.XMLHttpRequest) var http_request = new XMLHttpRequest();  else var http_request=false;
var loading_graphic = "<img src='" + img_path + "loading_16x16.gif' width='16' height='16' border='0' align='absmiddle'>&nbsp;";
	





/**************************************************************************************************
	Set ScrollBox Heights
***************************************************************************************************/				
//** FUNCTION: Set SrollBox Height Based on Element Input Array
function checkPage(scrollBox,el_array) {
	var adjustOffset = 0;
	if (eval(el_array)) {
		for (i=0; i< el_array.length; i++) {
			if (eval(document.getElementById(el_array[i])) && !isNaN(document.getElementById(el_array[i]).offsetHeight)) { 
				adjustOffset = adjustOffset + document.getElementById(el_array[i]).offsetHeight;
			}
		}
	}
}








/**************************************************************************************************
	AJAX Server Requests
***************************************************************************************************/				
function build_HttpRequest() {
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		var request = new XMLHttpRequest();
		if (request.overrideMimeType) { request.overrideMimeType('text/xml');}
	} else if (window.ActiveXObject) { // IE
		try {var request = new ActiveXObject("Msxml2.XMLHTTP");} 
		catch (e) {
			try {var request = new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {}
		}
	}
	if (!request) { alert('Cannot create an XMLHTTP instance');return false;}
	return request;
}






//** FUNCTION: Make Request to Server passing GET variables
// Le nom a été changé en makeRequestUpload pour ne pas faire de conflit avec d'autres
// makeRequest présent dans certains scripts
function makeRequestUpload(url, do_function, method_data) {
	http_request = build_HttpRequest();
	var time = new Date();
	if (url.indexOf('?')>0){ url = url + '&time='+time.getTime(); } else { url = url + '?time='+time.getTime();}
	http_request.onreadystatechange = do_function;
	if (method_data=='') {
		method_data = 'GET';
	}
	http_request.open(method_data, url, true);
	http_request.send(null);
}	










/**************************************************************************************************
	Upload Form Functions
***************************************************************************************************/			
//** FUNCTION: Create Upload Form
function createFileInput(path, pathForm, libelleFichier, tailleMaxFichier, afficheTailleMaxFichier, supp) {
	//upload_cell.innerHTML = "";
	var tbody = document.getElementById('list_body').getElementsByTagName('tbody')[0];
	if (supp) {
		document.getElementById("btn_upload").innerHTML = '';
		var tbodytr = tbody.getElementsByTagName('tr');
		//tbodytr[0].style.display = 'none';
		tbody.removeChild(tbodytr[0]);
		count = 0;
	}	
	// Create Table Row	
	var tr = document.createElement("tr")
	if (!supp) {
		if (bg_color) { tr.className="on"; bg_color= false; } else { bg_color = true;}
	}
	// Create Table Cell
	var td = document.createElement("td")
	td.id='upload_' + count;
	td.width='100%';
	var output = new Array();
	output.push("<form id='frmUpload_" + count + "' target='uploadForm' method='post' enctype='multipart/form-data' action='" + pathForm + "?sid=" + sid + "&p=" + partenaire + "&c=" + chemin + "&ct=" + path + "&mu=" + tailleMaxFichier + "' class=\"formUpload\">");
	if (libelleFichier!='') {
		output.push("<strong>" + libelleFichier);
		if (afficheTailleMaxFichier) {
			output.push("(poids maximum : " + formatTaille(tailleMaxFichier) + ") ");
		}
		output.push(":</strong>");
	}
	//output.push("<br >");
	output.push("<input style='margin:10px;width:250px;vertical-align:middle;' type='file' name='filename' ><\/form>");
	td.innerHTML = output.join('');
	//alert(td.innerHTML);
	tr.appendChild(td);
	tbody.appendChild(tr);
	uploads.push(count);
	if (count != 0 ) {
		var tiggerForm = document.getElementById('frmUpload_'+count);
		tiggerForm['filename'].click();
		tiggerForm = null;
	}
	count++;
}


//** FUNCTION: Check form file Extensions that pose a Security Issue
function checkFileExtentions(form){
	if (check_file_extentions == false) {
		return false;
	}
	/* Extension à accepter */
	if (extension1!="") {
		var tableau_extension = new Array();
		tableau_extension = extension1.split('|');
		if (form['filename'].value != "") {
			var string = form['filename'].value;
			var num_of_last_slash = string.lastIndexOf("\\");
			if (num_of_last_slash < 1) {
				num_of_last_slash = string.lastIndexOf("/");
			}
			var file_name = string.slice(num_of_last_slash + 1, string.length);
			var file_extension = file_name.slice(file_name.lastIndexOf(".")+1).toLowerCase(); 
			if (!inArray(tableau_extension, file_extension)) {
				alert('Désolé, uploader un fichier avec l\'extension "' + file_extension + '" n\'est pas autorisé.');
				return true;
			}
		}
	}
	
	/* Extension à refuser */
	if (extension2!="") {
		var tableau_extension = new Array();
		tableau_extension = extension2.split('|');
		if (form['filename'].value != "") {
			var string = form['filename'].value;
			var num_of_last_slash = string.lastIndexOf("\\");
			if (num_of_last_slash < 1) {
				num_of_last_slash = string.lastIndexOf("/");
			}
			var file_name = string.slice(num_of_last_slash + 1, string.length);
			var file_extension = file_name.slice(file_name.lastIndexOf(".")+1).toLowerCase(); 
			if (inArray(tableau_extension, file_extension)) {
				alert('Désolé, uploader un fichier avec l\'extension "' + file_extension + '" n\'est pas autorisé.');
				return true;
			}
		}
	}
	
	return false;
}	



//** FUNCTION: Process Queued Uploads
function upload() {
		
	if (uploads.length>0) {
		form = document.getElementById('frmUpload_' + uploads[0]);
		if (form["filename"].value == ""){ 
			alert("Vous devez sélectionner un fichier à transférer.");
		} else {
			filename =	form["filename"].value;
			longueur_filename = filename.length;
			if (filename.lastIndexOf("\\")>0) {
				filename = filename.substring(filename.lastIndexOf("\\")+1,filename.length);
			} else if (filename.lastIndexOf("/")>0) {
				filename = filename.substring(filename.lastIndexOf("/")+1,filename.length);
			} 
			if (checkFileExtentions(form)) {
				return false;
			}
			//httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			makeRequestUpload(cheminProgress + "?sid=" + sid + "&filename=" + filename + "&ct=" + path, progress, "");
			//form.action = form.action + '&lnf=' + longueur_filename;
			form.submit();
			document.getElementById("btn_upload").innerHTML = loading_graphic + " <font face=\"verdana\" size=\"1\">Transfert du fichier ...</font>";
		}
	}
	
}	




//** FUNCTION: Process Response From Ajax Request
function progress() {
	
	if (filename!='') {
		
		switch (http_request.readyState) {
			case 1 : checkCount++; break;
			case 4 :
				if (http_request.status == 200) {
					if (debug) status.innerHTML = checkCount + " - " + http_request.responseText;
					response = http_request.responseText.split('|');
					upload_cell = document.getElementById('upload_' + uploads[0]);
					switch (response[0]) {
						case "wait":
							var output = new Array();
							var ext = response[1].substring(response[1].lastIndexOf(".")+1,response[1].length);
							output.push("<table cellspacing='0' cellpadding='0' border='0' width='98%' style='margin-top:10px;'>");
							output.push("<tr>");
							output.push("<td rowspan='2' width='30' height='40' style=\"background:url(\'" + img_path + "file_types/icon_" + ext + "_32x32.gif\') no-repeat  center center;}\">&nbsp;<\/td>");
							output.push("<td class='upload_filename'>" + response[1] + "<\/td>");
							output.push("<\/tr>");
							output.push("<tr><td class='upload_stats'>En attente du téléchargement (" + checkCount + ")<\/td><\/tr>");
							output.push("<\/table>");
							upload_cell.innerHTML = output.join('');
							setTimeout('makeRequestUpload(cheminProgress + "?sid='+sid+'", progress, "");', 1000);
							break;
						case "started":
							var output = new Array();
							var ext = response[1].substring(response[1].lastIndexOf(".")+1,response[1].length);
							output.push("<table cellspacing='0' cellpadding='0' border='0' width='98%' style='margin-top:10px;'>");
							output.push("<tr>");
							output.push("<td rowspan='3' width='30' height='40' style=\"background:url(\'" + img_path + "file_types/icon_" + ext + "_32x32.gif\') no-repeat  center center;}\">&nbsp;<\/td>");
							output.push("<td class='upload_filename'>" + response[1]+"<\/td>");
							output.push("<\/tr>");
							output.push("<tr><td><div id='upload_bar_" + uploads[0] + "' class='upload_bar'><div style='width:0%;'><\/div><\/div><\/td><\/tr>");
							output.push("<tr><td class='upload_stats'><div id='upload_info_" + uploads[0] + "'>&nbsp;</div><\/td><\/tr>");
							output.push("<\/table>");
							upload_cell.innerHTML = output.join('');
							makeRequestUpload(cheminProgress + "?sid=" + sid, progress, "");
							break;
						case "downloading":
							var output = new Array();
							var ext = response[1].substring(response[1].lastIndexOf(".")+1,response[1].length);
							bar_cell = document.getElementById('upload_bar_' + uploads[0]);
							info_cell = document.getElementById('upload_info_' + uploads[0]);
							
							var texte_progress = "<div class='upload_bar_progress' style='width:" + response[3] + "%;text-align:center;vertical-align:middle;margin:0px;padding:0px;'>"
							if (response[3]>1) {
								texte_progress+= response[3] + "%";
							}
							texte_progress+= "<\/div>";
							bar_cell.innerHTML = texte_progress;
							info_cell.innerHTML = response[4]+" of "+response[5]+" ("+response[6]+"/s) " + response[2];
							//alert(response[7] + "***" + response[8]);
							setTimeout('makeRequestUpload(cheminProgress + "?sid=' + sid + '",progress, "");', 1000);
							break;
						case "copying":
							var output = new Array();
							var ext = response[1].substring(response[1].lastIndexOf(".")+1, response[1].length);
							output.push("<table cellspacing='0' cellpadding='0' border='0' width='98%' style='margin-top:10px;'>");
							output.push("<tr>");
							output.push("<td rowspan='2' width='30' height='40' style=\"background:url(\'" + img_path + "file_types/icon_" + ext + "_32x32.gif\') no-repeat  center center;}\">&nbsp;<\/td>");
							output.push("<td class='upload_filename'>" + response[1] + "<\/td>");
							output.push("<\/tr>");
							output.push("<tr><td class='upload_stats'>Copie du fichier vers son répertoire final<\/td><\/tr>");
							output.push("<\/table>");
							upload_cell.innerHTML = output.join('');
							setTimeout('makeRequestUpload(cheminProgress + "?sid='+sid+'",progress, "");', 1000);
							break;							
						case "Success":
							uploads.splice(0,1);
							var output = new Array();
							var ext = response[1].substring(response[1].lastIndexOf(".")+1,response[1].length);
							output.push("<table cellspacing='0' cellpadding='0' border='0' width='98%' style='margin-top:10px;'>");
							output.push("<tr>");
							output.push("<td rowspan='2' width='30' height='40' style=\"background:url(\'" + img_path + "file_types/icon_" + ext + "_32x32.gif\') no-repeat  center center;}\">&nbsp;<\/td>");
							output.push("<td class='upload_filename'>" + response[1] + "<\/td>");
							output.push("<\/tr>");
							output.push("<tr><td class='upload_stats'>" + response[2] + "<\/td><\/tr>");
							output.push("<\/table>");
							upload_cell.innerHTML = output.join('');
							document.getElementById("btn_upload").innerHTML = '<font face="verdana" size="1"><strong>Fichier téléchargé</strong></font>';
							checkCount = 0;
							fichier_nom = response[1];
							fichier_taille = response[3];
							
							// on attend une seconde que la personne puisse voir le message téléchargement terminé
							setTimeout("onSuccess()", 1000);
								
							break;
						default: alert(http_request.responseText);
							break;
					}
				} else {
					//alert("Il y'a un problème de requête avec le serveur.(" + cheminProgress + "\n" + http_request.responseText + ")");
					alert("Il y'a un problème de requête avec le serveur.");
				}
				break;
		}
		
	}
	
}



function formatTaille(taille) {
	var suffixe = "b";
	if (taille>1024) {
		taille = Math.round(taille/1024);
		suffixe = "Kb";
		if (taille>1024) {
			taille = Math.round(taille/1024,2);
			suffixe = "Mb";
			if (taille>1024) {
				taille = Math.round(taille/1024,2);
				suffixe = "Go";
			}
		}
	}
	return taille + suffixe;
}

//** FUNCTION: Cancel Upload
function cancelUpload(msg) {
	filename = '';
	createFileInput(path, cheminFormulaire, libelleFichier, tailleMaxFichier, afficheTailleMaxFichier, true);
	alert(msg);
}


