var myProgressBars = new Array();


/*********************************  AJAX **********************************/

/** Ecrit le texte donné dans la div données */
function writediv(div, texte)
{	
	document.getElementById(div).innerHTML = texte;
	var mesScripts = document.getElementById("tab_avancement").getElementsByTagName("script");
	for (var i=0; i<mesScripts.length; i++) 
	{
		eval(mesScripts[i].innerHTML);
	}
}

/** Fonction créant un objet à l'origine de l'Ajax, l'ouvrant et
* récupérant le retour HTML du fichier donné en paramètre */
function file(fichier)
{
	if(window.XMLHttpRequest) // FIREFOX
		xhr_object = new XMLHttpRequest();
	else if(window.ActiveXObject) // IE
		xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
	else
		return(false);
	xhr_object.open("GET", fichier, false);
	xhr_object.send(null);
	if(xhr_object.readyState == 4) 
		return(xhr_object.responseText);
	else 
		return(false);
}

/** Fonction créant un objet à l'origine de l'Ajax, l'ouvrant et
* récupérant le retour HTML du fichier donné en paramètre */
function fileAsynchrone(fichier)
{
	if(window.XMLHttpRequest) // FIREFOX
		xhr_object = new XMLHttpRequest();
	else if(window.ActiveXObject) // IE
		xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
	else
		return(false);
	
	xhr_object.open("GET", fichier, true);
			
	xhr_object.onreadystatechange = function() 
	{ 
		if(xhr_object.readyState != 4) 
		{
	    	if(document.getElementById("filters_loading").style.visibility != "visible")
	    		document.getElementById("filters_loading").style.visibility="visible";
	  	}	
	  	else if(xhr_object.readyState == 4)
	  	{
	    	document.getElementById("filters_loading").style.visibility="hidden";	    	
	    	endFilter(xhr_object.responseText);
	  	}	
	}
	xhr_object.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
	xhr_object.send(null);
}

function deleteProject(rep, project_id)
{
	if(texte = file('outils/'+rep+'/delete_project.php?project_id='+project_id))
	{
		writediv('toLoad', texte);
	}
}

function getOutput(rep, project_id)
{
	if(texte = file('outils/'+rep+'/recup_resultat_output.php?project_id='+project_id))
	{
		writediv('toLoad', texte);
	}
}

function loadResultsTable(rep, time)
{
	clearTimeout(time);
	if(texte = file('outils/'+rep+'/checking_outputs.php'))
		writediv('toLoad', texte);
	time=setTimeout("loadResultsTable('"+rep+"', "+time+")", 90000);
}


/*********************************  PROGRESS BAR **********************************/

function loadProgressBar(projectId, mypercent, rep)
{
		myProgressBars[projectId] = new JS_BRAMUS.jsProgressBar(
								$("bar"+projectId),
								mypercent,
								{
									animate		: true,										// Animate the progress? - default: true
									showText	: true,										// show text with percentage in next to the progressbar? - default : true
									width		: 120,										// Width of the progressbar - don t forget to adjust your image too!!!
									boxImage	: 'images/percentImage.png',			// boxImage : image around the progress bar
									barImage	: 'images/percentImage_back.png',	// Image to use in the progressbar. Can be an array of images too.
									height		: 12	
								}
							);
		actualiserProgressBar(mypercent, projectId, rep);
		
}

function actualiserProgressBar(percent, projectId, rep, time)
{
	clearTimeout(time);
	myProgressBars[projectId].setPercentage(percent);
	if(percent = file('outils/'+rep+'/get_percent.php?projectId='+projectId))
	{
		if(percent >= 95)
		{
			myProgressBars[projectId].setPercentage(95);
			actualiserProgressBarEnd(projectId,rep,time);
		}
		else
			time=setTimeout("actualiserProgressBar("+percent+", "+projectId+", '"+rep+"', "+time+")", 3000);
	}	
	else
		time=setTimeout("actualiserProgressBar("+percent+", "+projectId+", '"+rep+"', "+time+")", 3000);
}

function actualiserProgressBarEnd(projectId, rep, time)
{
	clearTimeout(time);
	if(result = file('outils/'+rep+'/get_flag.php?projectId='+projectId))
	{
		if(result == "true")
		{
			myProgressBars[projectId].setPercentage(100);
			clearTimeout(time);
		}
		else
			time=setTimeout("actualiserProgressBarEnd("+projectId+", '"+rep+"', "+time+")", 1000);
	}
}


/*********************************  FORMS **********************************/

function verif_form_login()
{
	var cas = 0;
	if(document.form_login.user.value == "")
		cas = 1;
	if(document.form_login.pwd.value == "")
		cas = cas + 2;
	switch(cas) {
	 	case 0 :	document.form_login.submit();
				break;
		case 1 : 	alert('You need to give your login !');
				break;
		case 2 : 	alert('You need to give your password !');
				break;
		case 3 : 	alert('You need to give your login and your password !');
				break;
	}
}


/*********************************  DOCKING **********************************/

var allSelected=true;


/** 
	Récupère toutes les données du formulaire donné en paramètre.
	Le retour est sous la forme nom_du_champ1=valeur1&nom_du_champ2=valeur2 etc.
*/
function getDataFromForm(Form) 
{
    var data="";
    var key=0;
    for (key=0;key<Form.elements.length-1;key++) 
    {      
         var currentValue=(Form.elements[key].tagName.toLowerCase()=="select")?getSelectValue(Form.elements[key]):Form.elements[key].value
         data+=escape(Form.elements[key].name)+"="+Form.elements[key].value+"&";
    }
    return data.substring(0, data.length-1);
}

/**
	Récupère la valeur de l'option choisie dans le select donné en paramètre
*/
function getSelectValue(select) 
{
   var value="";
   for (var i=0; true; i++) {
      if (select.options[i]) {
         if (select.options[i].selected) {
            value += select.options[i].value + ",";
         }
      } else {return value.substr(0, value.length-1); }
   }
}

/** 
	Applique les filtres demandés par l'utilisateur (regénère la liste des ligands)
*/
function filter(rep)
{
	document.forms["filters"].submitted.value="ok";
	val=getDataFromForm(document.forms["filters"]);
	fileAsynchrone('outils/'+rep+'/filter.php?ajax=true&'+val);
}

function endFilter(texte)
{
	write('ligandsList', texte);
}

/** Ecrit le texte donné dans la div données */
function write(div, texte)
{	
	document.getElementById(div).innerHTML = texte;
}

/** 
	Si l'utilisateur choisit "=" il faut griser la partie gauche car
	on n'a plus besoin d'intervalles 
*/
function checkChoice(select, leftInput, leftSelect)
{
	if(select.selectedIndex == 2) 
	{
		document.filters.elements[leftSelect].disabled=true;
		document.filters.elements[leftInput].disabled=true;
	}
	else
	{
		document.filters.elements[leftSelect].disabled=false;
		document.filters.elements[leftInput].disabled=false;
	}
}

/**
	Affiche les input pour permettre à l'utilisateur de choisir les intervalles
*/
function showIntervals(id)
{
	document.getElementById('off'+id).style.display="block";
	document.getElementById('on'+id).style.display="none";
	
	document.filters.elements["min"+id].disabled=false;
	document.filters.elements["max"+id].disabled=false;
	document.filters.elements["opgauche"+id].disabled=false;
	document.filters.elements["opdroite"+id].disabled=false;
}

/**
	Fait disparaitre les input pour permettre à l'utilisateur de choisir les intervalles
*/
function hideIntervals(id)
{
	document.getElementById('off'+id).style.display="none";
	if(navigator.appName == 'Microsoft Internet Explorer')
		document.getElementById('on'+id).style.display="inline-block";
	else
		document.getElementById('on'+id).style.display="table-cell";
	
	clearIntervals(id);
}

/**
	reset
*/
function clearIntervals(id)
{
	document.filters.elements["min"+id].disabled=true;
	document.filters.elements["max"+id].disabled=true;
	document.filters.elements["opgauche"+id].disabled=true;
	document.filters.elements["opdroite"+id].disabled=true;
	
	document.filters.elements["min"+id].value="";
	document.filters.elements["max"+id].value="";
}

/**
	Transfer a selected option from the first list to the second
*/
function moveSelectedTargets(list1, list2)
{
	list1Select = document.getElementById(list1);		
	selectedOptions = getSelectedOptions(list1Select);
	if(selectedOptions.length>0)
	{				
		list2Select=document.getElementById(list2);
		for(i=0;i<selectedOptions.length;i++)
		{
			option = selectedOptions[i];
			list1Select.removeChild(option);						
			list2Select.appendChild(option);
		}
	}	
}
		
function getSelectedOptions (select) 
{
	var selectedOptions  = new Array();
	for (m = 0; m < select.options.length; m++)
	{
		if (select.options[m].selected) 
		{
			selectedOptions[selectedOptions.length] = select.options[m];
		}
	}
	return selectedOptions;
}

function getDockingInformation()
{
	targetList = document.getElementById('list2');	
	var targetValues="";
	for (i = 0; i < targetList.options.length; i++)
	{
		targetValues+=targetList.options[i].value+";";
	}
	document.getElementById('targets_id').value=targetValues;
	
	ligandList = document.getElementById('ligands');	
	var ligandValues="";
	for (i = 0; i < ligandList.options.length; i++)
	{
		ligandValues+=ligandList.options[i].value+";";
	}
	document.getElementById('ligands_id').value=ligandValues;
}

function updateTargetLink()
{
	selectedIndex = document.getElementById('list1').selectedIndex;
	targetName = document.getElementById('list1').options[selectedIndex].text;
	link= "http://www.rcsb.org/pdb/explore/explore.do?structureId="
	document.getElementById("targetLink").setAttribute("href", link+targetName);
}

function loadProgressBarDocking(projectId, mypercent, rep, user)
{
		myProgressBars[projectId] = new JS_BRAMUS.jsProgressBar(
								$("bar"+projectId),
								mypercent,
								{
									animate		: true,										// Animate the progress? - default: true
									showText	: true,										// show text with percentage in next to the progressbar? - default : true
									width		: 120,										// Width of the progressbar - don't forget to adjust your image too!!!
									boxImage	: 'images/percentImage.png',			// boxImage : image around the progress bar
									barImage	: 'images/percentImage_back.png',	// Image to use in the progressbar. Can be an array of images too.
									height		: 12	
								}
							);
		actualiserProgressBarDocking(mypercent, projectId, rep, user);
		
}

function actualiserProgressBarDocking(percent, projectId, rep, user, time)
{
	clearTimeout(time);
	myProgressBars[projectId].setPercentage(percent);
	if(percent = file('outils/'+rep+'/get_percent.php?user='+user+'_'+projectId))
	{
		if(percent >= 100)
		{
			clearTimeout(time);
			document.getElementById('bar_'+projectId).style.display="none";
			if(navigator.appName == 'Microsoft Internet Explorer')
				document.getElementById('done_'+projectId).style.display="block";
			else
				document.getElementById('done_'+projectId).style.display="table-cell";
		}
		else
		{
			myProgressBars[projectId].setPercentage(percent);
			time=setTimeout("actualiserProgressBarDocking("+percent+", "+projectId+", '"+rep+"', '"+user+"', "+time+")", 10000);
		}
	}	
	else
	{
		time=setTimeout("actualiserProgressBarDocking("+percent+", "+projectId+", '"+rep+"', '"+user+"', "+time+")", 10000);
	}
}

/*********************************  NOT USED BUT STILL **********************************/

/* To delete */	
function load()
{
	selectAll('form','ligands');
	document.getElementById("selectAll").checked=false;
}

/** 
	To delete
	Permet de selectionner/déselectionner tout le contenu de la liste 
	déroulante dont le nom et le formulaire contenant sont donnés en 
	paramètres 
*/
function selectAll(form, list)
{
	limit = document.forms[form].elements[list].options.length;
	for ( i=0; i<limit && i<99; i++ )
	{
		if(allSelected)
			document.forms[form].elements[list].options[i].selected = false;
		else
			document.forms[form].elements[list].options[i].selected = true;
	}
	allSelected=!allSelected;
}
