﻿/**
 * Script client de gestion interactive du bugtracker
 * methode de controle AJAX
 *
 * Auteur: Aurélien JEOFFRAY
 * Date: 12/08/2006
 * Licence: GPL
 * Copyright:  &copy; 2006, Aurelien Jeoffray
 */
var version = 0;
var versioncorrige = 0; 
 
/**
 * n'accepte l'envoi de la selection de tri que si celle ci est valide
 * 
 * @return true - si le formulaire est valide
 *		   false - sinon
 */
function validFilter() {
	if($("#status").val() == "NULL") {
		alert("Aucun status n'a été choisi!");
		return false;
	}
	return true;
}

/**
 * Test de la bonne forme du formulaire de saisi et modif de bug
 *
 * @return true - si le formulaire est valide
 *		   false - sinon
 */
function validBug() {
	if($("#produit").val() == "NULL" ||
			$("#produit").val() == "ADD") {
		alert("Aucun produit n'a été choisi!");
		return false;
	}
	if($("#fonctionnalite").val() == "NULL" ||
			$("#fonctionnalite").val() == "ADD") {
		alert("Aucune Fonctionnalité n'a été choisi!");
		return false;
	}
	if($("#version").val() == "NULL" ||
			$("#version").val() == "ADD") {
		alert("Aucune version n'a été choisi!");
		return false;
	}
	if($("#versioncorrige").length > 0 && ($("#versioncorrige").val() == "NULL" ||
		$("#versioncorrige").val() == "ADD")) {
		alert("Aucune version de correction n'a été choisi!");
		return false;
	} else if($("#versioncorrige").length > 0 && 
			$("#versioncorrige")[0].selectedIndex < 2 &&
			$("#status").val() > 6) {
		alert("Vous n'avez pas précisé pour quelle version\nla correction est effective\n" + 
			"Vous devez renseigner le champs \"Version corrigée\"");
		return false;
	}
	return true;
}

/**
 * Réactulise le formulaire en fonction du produit choisi
 */
function changeProduct() {
	//si on choisi un produit, remplir les champs version et fonctionnalite en fonction
	if($("#produit").val() != "ADD") {
		fillProductVersion();
		fillProductFonctionnalities();
	//si on cré un nouveau produit renvoie vers la fonction de création
	} else {
		addProduct();
	}
}

/**
 * Action sur selection d'une fonctionnalite
 * si on choisi l'ajout d'une fonctionnalite, affiché le menu associé
 */
function changeFonctionnalite() {
	if($("#fonctionnalite").val() == "ADD")
		addFunctionnalitie();
}

/**
 * Action sur selection d'une version
 * si on choisi l'ajout d'une version, affiché le menu associé
 */
function changeVersion() {
	if($("#version").val() == "ADD")
		addVersion(1);
	else if($("#versioncorrige") != null 
				&& $("#versioncorrige").val() == "ADD")
		addVersion(2);
}

/**
 * ajout d'un nouveau produit à la base de suivi de bug
 */
function addProduct() {
	var xmlhttp;
	var data;
	
	//demande le nom du produit
	var productname = prompt("Nom du produit");
	
	//si on appui sur annuler au prompt, ne pas continuer
	if(productname == null) return;
	
	//prepare les données à envoyé
	data = "productname=" + productname
	data += "&action=addproduct";
	
	if (xmlhttp = sendData("POST", "ajax/post_bugtracker.php", data)) {
		/* on definit ce qui doit se passer quand la page repondra */
		xmlhttp.onreadystatechange=function() {

			if (xmlhttp.readyState == 4) { /* 4 : etat "complete" */ 
				if (xmlhttp.status == 200)  {/* 200 : code HTTP pour OK */
					
					//reçoie la réponse
					var numoption = xmlhttp.responseText;
					
					//si la réponse est valide
					if(numoption > 0) {
						//supprime l'index de produit courant
						$("#produit")[0].selectedIndex = null;
					
						//ajoute le produit à la liste
						var option = document.createElement("option");
						$(option).attr("value", numoption);
						$(option).attr("selected", "selected");
						$(option).append(productname);
						document.getElementById("produit").insertBefore(option, document.getElementById("separatorProduct"));
						
						//place les options associé
						fillProductVersion();
						fillProductFonctionnalities();
					} else {
						//sinon affiché un message d'erreur
						alert("erreur d'insertion du produit" + "\n" + xmlhttp.responseText);
					}
				}
			}
		}
	}
}
/**
 * ajout d'une nouvelle fonctionnalite pour le produit courant à la base de suivi de bug
 */
function addFunctionnalitie() {
	var xmlhttp;
	var data;
	
	var functionname = prompt("Libelle de la fonctionnalite");
	if(functionname == null) return;
	
	data = "functionname=" + functionname;
	data += "&numproduit=" + document.getElementById("produit").value;
	data += "&action=addfunctionnalitie";
	
	if (xmlhttp = sendData("POST", "ajax/post_bugtracker.php", data)) {
		/* on definit ce qui doit se passer quand la page repondra */
		xmlhttp.onreadystatechange=function() {

			if (xmlhttp.readyState == 4) { /* 4 : etat "complete" */ 
				if (xmlhttp.status == 200)  {/* 200 : code HTTP pour OK */
				
					var numoption = xmlhttp.responseText;
					
					if(numoption > 0) {
						document.getElementById("fonctionnalite").selectedIndex = null;
					
						var option = document.createElement("option");
						option.setAttribute("value", numoption);
						option.setAttribute("selected", "selected");
						option.appendChild(document.createTextNode(functionname));
						
						document.getElementById("fonctionnalite").insertBefore(option, document.getElementById("separatorFunction"));
					} else {
						alert("erreur d'insertion d'une fonctionnalite" + "\n" + xmlhttp.responseText);
					}
				}
			}
		}
	}
}

/**
 * ajout d'une nouvelle version pour le produit courant à la base de suivi de bug
 *
 * @param typeversion 1 si version, 2 si version corrigé 
 */
function addVersion(typeversion) {
	var xmlhttp;
	var data;
	
	var versionname = prompt("Libelle de la version");
	/*f(versionname == null) {
		if(typeversion == 1)
			document.getElementById("version").selectedIndex = version;
		else if(typeversion == 2)
			document.getElementById("versioncorrige").selectedIndex = versioncorrige;
		return;
	}*/
	
	data = "versionname=" + versionname;
	data += "&numproduit=" + document.getElementById("produit").value;
	data += "&action=addversion";
	
	post("ajax/post_bugtracker.php", data, function(xmlhttp) {
		var numoption = xmlhttp.responseText;
		
		if(numoption > 0) {
			var opt1 = numoption;
			var opt2 = $("#versioncorrige").val();
			if(typeversion == 2) {
				opt1 = $("#version").val();
				opt2 = numoption;
			}

			fillProductVersion(function() {
				$("#version").selectOptions("" + opt1);
				$("#versioncorrige").selectOptions("" + opt2);
			});
		} else {
			alert("erreur d'insertion d'une version" + "\n" + xmlhttp.responseText);
		}
	});
}

/**
 * remplit la liste des version pour le produit selectionné
 */
function fillProductVersion(endfonction) {
	var xmlhttp;
	var data;
	
	if($("#produit").val() == "NULL") return;
	
	//supprime tous les ancien noeud de version
	var versionTag = document.getElementById("version");
	
	var nbVersion = versionTag.childNodes.length;
	for(var i = 0; i < nbVersion; i++) {
		if(versionTag.firstChild.nodeType != 1 || (versionTag.firstChild.nodeType == 1 && versionTag.firstChild.value != "NULL"))
			versionTag.removeChild(versionTag.firstChild);
	}
	
	if(document.getElementById("versioncorrige") != null) {
		//ainsi que les noeuds de versions corrige
		var versionCorrigeTag = document.getElementById("versioncorrige");
		
		var nbVersion = versionCorrigeTag.childNodes.length;
		
		for(var i = 0; i < nbVersion; i++) {
			if(versionCorrigeTag.firstChild.nodeType != 1 || (versionCorrigeTag.firstChild.nodeType == 1 && versionCorrigeTag.firstChild.value != "NULL"))
				versionCorrigeTag.removeChild(versionCorrigeTag.firstChild);
		}
	}
	
	data = "numproduct=" + document.getElementById("produit").value
		+ "&action=fillProductVersion";
		
	post("ajax/post_bugtracker.php", data, function(xmlhttp) {
		if(xmlhttp.getResponseHeader("Content-type") == "text/xml; charset=utf-8") {
			var content = xmlhttp.responseXML.documentElement;
			for(var i = 0; i < content.childNodes.length; i++) {
				var numversion = content.childNodes[i].childNodes[0].childNodes[0].data;
				var libversion = content.childNodes[i].childNodes[1].childNodes[0].data;
				
				//ajout d'une version
				//$("#versioncorrige").addOption(numversion, libversion);
				var option = document.createElement("option");
				option.setAttribute("value", numversion);
				option.appendChild(document.createTextNode(libversion));
				
				if(document.getElementById("separatorFunction")) {
					versionTag.insertBefore(option, document.getElementById("separatorVersion"));
				} else {
					versionTag.appendChild(option);
				}
				
				if(document.getElementById("versioncorrige") != null) {
					option = document.createElement("option");
					option.setAttribute("value", numversion);
					option.appendChild(document.createTextNode(libversion));
					
					if(document.getElementById("separatorFunction")) {
						versionCorrigeTag.insertBefore(option, document.getElementById("separatorVersionC"));
					} else {
						versionCorrigeTag.appendChild(option);
					}
				}
			}
		}
		if(endfonction)
			endfonction();
	});
}

/**
 * remplit la liste des fonctionnalité pour le produit selectionné
 */
function fillProductFonctionnalities() {
	var xmlhttp;
	var data;
	
	if($("#produit").val() == "NULL") return;
	
	//supprime tous les ancien noeud de version
	var functionnalitieTag = document.getElementById("fonctionnalite");
	
	var nbFunction = functionnalitieTag.childNodes.length;
	
	for(var i = 0; i < nbFunction; i++) {
		if(functionnalitieTag.firstChild.nodeType != 1 || (functionnalitieTag.firstChild.nodeType == 1 && functionnalitieTag.firstChild.value != "NULL"))
			functionnalitieTag.removeChild(functionnalitieTag.firstChild);
	}
	
	data = "numproduct=" + document.getElementById("produit").value
		+ "&action=fillProductFonctionnalities";
		
	if (xmlhttp = sendData("POST", "ajax/post_bugtracker.php", data)) {
		/* on definit ce qui doit se passer quand la page repondra */
		xmlhttp.onreadystatechange=function() {

			if (xmlhttp.readyState == 4) { /* 4 : etat "complete" */ 
				if (xmlhttp.status == 200)  {/* 200 : code HTTP pour OK */
					if(xmlhttp.getResponseHeader("Content-type") == "text/xml; charset=utf-8") {
						var content = xmlhttp.responseXML.documentElement;
					
						for(var i = 0; i < content.childNodes.length; i++) {
							var numfunction = content.childNodes[i].childNodes[0].childNodes[0].data;
							var libfunction = content.childNodes[i].childNodes[1].childNodes[0].data;
							
							//ajout d'une version
							var option = document.createElement("option");
							option.setAttribute("value", numfunction);
							option.appendChild(document.createTextNode(libfunction));
							
							if(document.getElementById("separatorFunction")) {
								functionnalitieTag.insertBefore(option, document.getElementById("separatorFunction"));
							} else
								functionnalitieTag.appendChild(option);
						}
					}
				}
			}
		}
	}
}

function insertDocument() {
	selectImage=window.open("pages/insertDocument.php","insertDocument","status=yes,dependent=yes,width=500,height=100,left=0,top=0")
	selectImage.focus();
}

function deleteResources(numBug, numRessource) {
	var data = "numbug=" + numBug
			+ "&numressource=" + numRessource
			+ "&action=deleteRessource";
	if(confirm('Etes vous sur de vouloir supprimer ?')) {
		post("ajax/post_bugtracker.php", data, function(xmlhttp) {
			var response = xmlhttp.responseText;
			
			if(response.substring(0,2) == "OK") {
				$("#doc_" + numRessource).remove();
			} else {
				alert("une erreur est survenue lors de la suppression");
			}
		});
	}
}

$(document).ready(function(){
	if(document.getElementById("version")) {
		version = document.getElementById("version").selectedIndex;
		versioncorrige = document.getElementById("versioncorrige").selectedIndex;
	}
});