# Source: allProteins.js

    /**
     * Starting point of building proteins page.
     * Gets the data of all the proteins and shows on the html
     * @param {String} folderName - Provides the path to the data folder.
     * Provides path which helps to navigate to protein and prsm pages.
     */
    function allProteins(folderName)
    {
    	console.log("Foldername : ", folderName);
    	var l_proteins = prsm_data ;
    	var count = 1 ;

    	// get the div container
    	let div = document.getElementsByClassName("container")[0];
    	let h2 = document.createElement('h2');

    	// Check to see if protein variable inside l_proteins is an array.
    	// Checks for multiple proteins
    	if(Array.isArray(l_proteins.protein_list.proteins.protein)){
    		count = l_proteins.protein_list.proteins.protein.length ;
    		document.title = count + " proteins are identified" ;
    		h2.innerHTML = count + " proteins are identified." ;
    	}
    	else
    	{
    		document.title = count + " protein is identified" ;
    		h2.innerHTML = count + " protein is identified." ;
    	}

    	let br = document.createElement('br');
    	// create header with protein count
    	div.appendChild(h2);
    	div.appendChild(br);

    	// Creating ordered list
    	let ol = document.createElement('ol');
    	// get the best prsm for each protein and form unique links for all the proteins
    	// Check to see if protein variable inside l_proteins is an array.
    	if(Array.isArray(l_proteins.protein_list.proteins.protein))
    	{
    		l_proteins.protein_list.proteins.protein.forEach(function(protein,index){
    			let div_temp = proteinToHtml(protein,folderName);
    			let p = getBestPrsm(protein,folderName);
    			let br1 = document.createElement('br');
    			div_temp.appendChild(p);
    			div_temp.appendChild(br1);
    			ol.appendChild(div_temp);
    		})
    	}
    	else
    	{
    		let protein = l_proteins.protein_list.proteins.protein ;
    		let div_temp = proteinToHtml(protein,folderName);
    		let p = getBestPrsm(protein,folderName);
    		let br1 = document.createElement('br');
    		div_temp.appendChild(p);
    		div_temp.appendChild(br1);
    		ol.appendChild(div_temp);
    	}
    	div.appendChild(ol);
    }
    /**
     * convert the json protein data into HTML and create links for each protein to navigate
     * @param {object} protein - Contains data of a single protein
     * @param {String} folderName - Provides path to build navigation links
     */
    function proteinToHtml(protein,folderName)
    {
    	let div  = document.createElement('li');
    	let id = "p"+ protein.sequence_id ;
    	div.setAttribute("id",id);
    	let p = document.createElement('p');
    	p.setAttribute("style", "font-size:16px;");
    	let a  = document.createElement('a');
    	a.href = "protein"+".html" + "?folder="+folderName+"&protein="+ protein.sequence_id;
    	a.innerHTML = protein.sequence_name +" "+protein.sequence_description ;
    	p.appendChild(a);
    	div.appendChild(p);
    	return div ;
    }
    /**
     * Get the beat PrSM based on the PrSM e value and create link to navigate for the best PrSM
     * @param {object} protein - Contains data of a single protein
     * @param {String} folderName - Provides path to build navigation links
     */
    function getBestPrsm(protein,folderName)
    {
    	let best_e_value = 100;
    	let prsm_id = "" ;
    	let proteoform_count = protein.compatible_proteoform.length;
    	// Checking to see if it has multiple proteoforms
    	if(proteoform_count > 1)
    	{
    		protein.compatible_proteoform.forEach(function(proteoform,index){
    			// Call to get the best prsm based on e_value
    			[best_e_value,prsm_id] = proteoformMultirow(proteoform,best_e_value,prsm_id);
    		})
    	}
    	else
    	{
    		[best_e_value,prsm_id] = proteoformMultirow(protein.compatible_proteoform,best_e_value,prsm_id);
    	}
    	let p = document.createElement('p');
    	p.setAttribute("style", "font-size:16px;");
    	let text1 = document.createElement("text");
    	text1.innerHTML = "The ";
    	p.appendChild(text1) ;
    	let a  = document.createElement('a');
    	a.href = "prsm.html?folder="+folderName+"&"+"prsm_id="+prsm_id ;
    	a.innerHTML = "best PrSM ";
    	p.appendChild(a);
    	let text2 = document.createElement("text");
    	let val = "has an E-value "+best_e_value+". There";
    	if(proteoform_count > 1)
    	{
    		val = val + " are "+proteoform_count + " proteoforms."
    	}
    	else
    	{
    		val = val + " is 1 proteoform."
    	}
    	text2.innerHTML = val ;
    	p.appendChild(text2);
    	return p;
    }

    /**
     * Get the best prsm e value and prsm Id by looping through the proteoform array
     * @param {object} proteoform - Proteoform is an object with information about a particular proteoform
     * @param {Float} best_e_value - This contains a constant fixed higher value for comparison with e values of each prsm
     * @param {String} prsm_id - Contains an empty string, return back id of best prsm
     */
    function proteoformMultirow(proteoform, best_e_value, prsm_id)
    {
    	let l_best_e_value = best_e_value ;
    	let l_prsm_id = prsm_id ;
    	if(proteoform.prsm.length > 1)
    	{
    		proteoform.prsm.forEach(function(prsm,index){
    			if(parseFloat(l_best_e_value) < parseFloat(prsm.e_value))
    			{
    				l_best_e_value = l_best_e_value ;
    				l_prsm_id = l_prsm_id ;
    			}
    			else
    			{
    				l_best_e_value = prsm.e_value ;
    				l_prsm_id = prsm.prsm_id ;
    			}
    		})
    	}
    	else
    	{
    		if(parseFloat(l_best_e_value) < parseFloat(proteoform.prsm.e_value))
    		{
    			l_best_e_value = l_best_e_value ;
    			l_prsm_id = l_prsm_id ;
    		}
    		else
    		{
    			l_best_e_value = proteoform.prsm.e_value ;
    			l_prsm_id = proteoform.prsm.prsm_id ;
    		}
    	}

    	return [l_best_e_value,l_prsm_id] ;
    }