var request;
var queryString;   //will hold the POSTed data
var giQueue=new Array();
var Results = new Array();
var startTime;
var endTime;
var html;
var stime;
var numSeq;
var seqno=0;
//var first=1;
var currentrow="";
var hostname=window.location.host;
function start(){
	//alert(document.body.scrollTop);
	document.getElementById('bmessage').style.left=document.body.scrollLeft + document.body.clientWidth/2 - 30;
	document.getElementById('bmessage').style.top=document.body.scrollTop + document.body.clientHeight/2;
	//$('bmessage').update('Loading...');
	$('bmessage').hide();
       $('pdf').hide();
       $('xls').hide();
      //var progress=new Image();
      //progress.src="images/busy.gif";
	setInterval('blinkIt()',500);
}
function blinkIt() {
 if (!document.all) return;
 else {
   for(i=0;i<document.all.tags('blink').length;i++){
      s=document.all.tags('blink')[i];
      s.style.visibility=(s.style.visibility=='visible')?'hidden':'visible';
   }
 }
}
function classChange(styleChange,item) {
	      item.className = styleChange;
}
function inputOk(){
  if(!(document.blastForm.sequence.value)){
	    alert("Error: You should submit at least one Sequence as input.");
	    return false;
    }
   return true;
}
function processRequest(){
    if(!inputOk()){
	    return;  
    }	
    document.getElementById('analyze').disabled=true;
    startTime=new Date(); 
    buildSeqArray();
    numSeq=giQueue.length;
    lhtml='<br><font color=green>Total input sequence(s) : </font><br>'+giQueue.length+'<br>';
    shtml='<font color=green><br>Start Time :</font><br>'+startTime ;
    if(giQueue.length > 100){
    	alert("Error: Maximum sequences that can be submitted is 100.\nYour submission is "+giQueue.length+" !"); 
	return;
    }
    else{	
    	fetchData();
    }	
}
function pasteFasta(){
	document.blastForm.sequence.value=">MKTYRIKPEEVERKWWVVDATGKTLGRLASEIAKILRGKHKPYYQPDVDCGDFVIVINAEKIRVTGKKLE\r\nQKKYYWHSRYPGGLKERTLKWMLENKPEEVIRLAVKRMLPKNRLGHRMLKKLKVYRGPEHPHQAQKPQPL\r\nEVKA\r\n>MKMRLVAAAAMGLAMSTTIAATATTDATTSAPGTSLTTDTEKLSYSIGADLGKNFKKQGIEISPAA\r\nMAKGLQDGMSGGQLLLTDDQMKDVLNKFQKDLMMKRSAEFNKKAEENKSKGEAFLNENKSKEGVVS\r\nLPSGLQYK";
}
function fetchData(){
       chtml='<font color=green>Completed : </font><br>'+seqno+'/'+numSeq+'<br>';
       html=lhtml+chtml+shtml;
	$('message').update(html);
       setQueryString();
       var url="http://"+hostname+"/cgi-bin/nblast.cgi";
       var myAjax = new Ajax.Request(
			url, 
			{
				method: 'post', 
				parameters: queryString, 
				onComplete: handleResponse
			});
    $('message').update(html+'<br><br><img align="bottom" src="images/busy.gif"><blink><font color=white style="BACKGROUND-COLOR: orchid">Processing Sequence '+seqno+'. Please wait...</font></blink><br>');
}
function handleResponse(request){
              //alert(request.responseText);
		var hit = new Object();
		blastresult=request.responseXML.getElementsByTagName("result")[0].childNodes[0].nodeValue;
              bjobid=request.responseXML.getElementsByTagName("jobid")[0].childNodes[0].nodeValue;
		//length=request.responseXML.getElementsByTagName("length")[0].childNodes[0].nodeValue;
		slength=request.responseXML.getElementsByTagName("length")[0].firstChild.nodeValue;
		score=request.responseXML.getElementsByTagName("score")[0].firstChild.nodeValue;
		identity=request.responseXML.getElementsByTagName("identity")[0].firstChild.nodeValue;
		positives=request.responseXML.getElementsByTagName("positives")[0].firstChild.nodeValue;
		expectation=request.responseXML.getElementsByTagName("expectation")[0].firstChild.nodeValue;
              hit.length=slength;
              hit.score=score;
              hit.identity=identity;
              hit.positives=positives;
              hit.expectation=expectation;
              hit.result=blastresult;
	       header='<table class="tabular_list"><thead><th>Seq No</th><th>Function</th><th>Length</th><th>Score</th><th>Identity</th><th>Positives</th><th>Exp</th><th>Result</th></thead><tbody>';
              footer='</tbody></table>';
              //currentrow=currentrow+'<tr><td>'+seqno+'</td><td><a target="_blank" href="http://www.ebi.ac.uk/cgi-bin/sumtab?tool=wublast&jobid='+bjobid+'"><img src="images/result.gif" alt="View Complete Result" title="'+bjobid+'"></a></td><td>'+blastresult+'</td></tr>';
              //currentrow=currentrow+'<tr><td>'+seqno+'</td><td><a target="_blank" href="http://localhost/blast/blastresult.cgi?jobid='+bjobid+'"><img src="images/result.gif" alt="View Complete Result" title="'+bjobid+'"></a></td><td>'+blastresult+'</td></tr>';
            currentrow=currentrow+'<tr><td>'+seqno+'</td><td>'+blastresult+'</td><td>'+slength+'</td><td>'+score+'</td><td>'+identity+'</td><td>'+positives+'</td><td>'+expectation+'</td><td ><button id="'+bjobid+'" onClick=viewBlast(this,'+seqno+')><img src="images/document.gif" alt="View Complete BLAST Result" title="View Complete BLAST Result"></button></td></tr>';
		$('result').update(header+currentrow+footer);	
             Results.push(hit);
             //alert(Results);
	      if (giQueue.length > 0) {
         		fetchData();
	      }else{
	           endTime = new Date();
                  timeTaken=(endTime-startTime)/1000+' secs';
		    document.json.json.value=Results.toJSON();
                  //alert( document.json.json.value);
		    $('pdf').show();
		    $('xls').show();
		    chtml='<font color=green>Completed : </font><br>'+numSeq+'/'+numSeq+'<br>';
                  html=lhtml+chtml+shtml;
		    $('message').update(html+'<br><font color=green>End Time :</font><br>'+endTime+'<br><font color=green>Time Taken :</font><br>'+timeTaken+'<br><br>Job completed successfully!');
                  alert("Job completed successfully!");
             }
}
function clearAll(){
	document.getElementById('analyze').disabled=false;
       $('pdf').hide();
       document.blastForm.sequence.value ="";
       document.getElementById('result').innerHTML="";
       document.getElementById('result2').innerHTML="";
       $('message').update('');
       seqno=0;
       currentrow="";
       Results.length=0; 
}
function setQueryString(){
    queryString="";
    var l=giQueue.length;
    if (l > 0){
      seqno++;
    	sequence=encodeURIComponent(giQueue.shift());
	queryString = "sequence=>"+sequence;
	program=$F('program');
	database=$F('database');
	matrix=$F('matrix');
	opengap=$F('opengap');
	extendgap=$F('extendgap');
	exp=$F('exp');
	dropoff=$F('dropoff');
	scores=$F('scores');
	numal=$F('numal');
	gapalign=$F('gapalign');
	filter=$F('filter');

      queryString=queryString+"&program="+program+"&database="+database+"&matrix="+matrix+"&opengap="+opengap+"&extendgap="+extendgap;
	queryString=queryString+"&exp="+exp+"&dropoff="+dropoff+"&scores="+scores+"&numal="+numal+"&gapalign="+gapalign+"&filter="+filter;
    }
}
function buildSeqArray(){
	if(document.blastForm.sequence.value){
		var t = $F('sequence');
            seq=t.substring(1);
	     	getseq=true;
      	giQueue=seq.split(">");
	}
 
	
}
function viewBlast(t,seqnu){
      var jobid=t.id;
       document.getElementById('bmessage').style.left=document.body.scrollLeft + document.body.clientWidth/2 - 30;
	document.getElementById('bmessage').style.top=document.body.scrollTop + document.body.clientHeight/2;
	//document.getElementById('bmessage').style.right=document.body.scrollRight;
	//document.getElementById('bmessage').style.top=document.body.scrollTop;
	//$('bmessage').update('<center>Rendering complete BLAST result.Please wait...<br>  <img src="images/progress.gif"></center>');
      $('bmessage').show();
	var url="http://"+hostname+"/cgi-bin/nblastresult.cgi";
	//alert(jobid);
	//var params="jobid="+jobid;
	var params="jobid="+jobid+"&matrix="+matrix+"&seqno="+seqnu;
    	var myAjax1 = new Ajax.Request(
			url, 
			{
				method: 'post', 
				parameters: params, 
				onComplete: showBlast
			});

}
function showBlast(request){
	var tab=request.responseText;
       $('result2').update(tab);
       $('result2').show();
       $('bmessage').hide();
}
function hideBlast(){
	$('result2').hide();
}