var request;
var queryString;   //will hold the POSTed data
var gi;
var getseq = false;
var giQueue=new Array();
var Results = new Array();
var startTime;
var endTime;
var lindex=0;
var errors=0;
var prog_image=new Image();
prog_image.src="http://biotool.nrcfosshelpline.in/images/pleasewait.gif";
function browserOk(){
	version=0;
	if (navigator.appVersion.indexOf("MSIE")!=-1){
		temp=navigator.appVersion.split("MSIE");
		version=parseFloat(temp[1]);
		if (version<=5.0){ //NON IE browser will return 0 
			alert("It appears that you are using IE5.0 or less.The features of this application works only in IE 5.5 or above. Or else use the open source browser Mozilla FireFox.   Click OK to exit...")
			return false;
		}
	}
      return true;
}
function inputOk(){
    if(document.fgtForm.sequence.value && document.fgtForm.gis.value){
	    alert("Error: You should submit either GI(s) or Sequence(s), but not both.");
	    return false;
    }
   if(!(document.fgtForm.sequence.value) && !(document.fgtForm.gis.value)){
	    alert("Error: You should submit either of GI(s) or Sequence(s), both are empty.");
	    return false;
    }
   return true;
}
function processRequest(){
    if(!browserOk()){
	    return;  
    }	
    if(!inputOk()){
	    return;  
    }	
    startTime=new Date(); 
    buildSeqArray();
    fetchData();
}
function pasteGids(){
	document.fgtForm.gis.value="15646184\r\n15646188";
       
}
function pasteFasta(){
	document.fgtForm.sequence.value=">MKTYRIKPEEVERKWWVVDATGKTLGRLASEIAKILRGKHKPYYQPDVDCGDFVIVINAEKIRVTGKKLE\r\nQKKYYWHSRYPGGLKERTLKWMLENKPEEVIRLAVKRMLPKNRLGHRMLKKLKVYRGPEHPHQAQKPQPL\r\nEVKA";
}
function fetchData(){
    setQueryString();
    var url="http://biotool.nrcfosshelpline.in/cgi-bin/fgtserver.cgi";
    httpRequest("POST",url,true);
    if(gi){
	    document.getElementById('message').innerHTML='<br><font color=#CC6600>Querying remote servers with <font color=green><strong>GI -'+gi+'</strong></font>. This may take a while. Please be patient...</font><br><br><img src="'+prog_image.src+'"><br>';
    }
    else{
    	    document.getElementById('message').innerHTML='<br><font color=#CC6600>Querying remote servers with <font color=green><strong>novel sequence</strong></font>. This may take a while. Please be patient...</font><br><br><img src="'+prog_image.src+'"><br>';
    }
    document.getElementById('message').style.visibility = 'visible'; 
    document.getElementById('analyze').disabled=true;
    //document.getElementById('sanalyze').disabled=true;
}
function cancelRequest(){
      var answer = confirm("Do you really want to cancel the operation?");
      if (answer == true){
      request.abort();
      request=null;
      document.getElementById('message').style.visibility = 'hidden'; 
      document.json.json.value=Results.toJSONString();
      //alert(document.json.json.value);
      document.getElementById('result2').style.visibility = 'visible';
      }
}
function clearAll(){
	document.fgtForm.sequence.value ="";
	document.fgtForm.gis.value="";
      document.getElementById('resultbdy').innerHTML="";
	//history.go();
}
//event handler for XMLHttpRequest
function handleResponse(){
    //alert(request.readyState);
    if(request.readyState == 4){
        if(request.status == 200){
                     //alert(request.responseText);
     			if (!request.responseXML.getElementsByTagName("results")[0]){  
		           alert(request.responseText);
			}
                      endTime=new Date();
                      var elapsed = endTime - startTime;
                      //if (!getseq){
	                  //    document.fgtForm.giList.options[lindex++].selected = false; 
			    //}
			    var result = new Object();
                      var newRow = document.getElementById('resultbdy').insertRow(-1);
                      var c1=newRow.insertCell(-1);
                      c1.innerHTML=request.responseXML.getElementsByTagName("gi")[0].childNodes[0].nodeValue;
                      c1.id="noshow";
                      c1.style.backgroundColor="#CEE7FF";
			    result.gi =request.responseXML.getElementsByTagName("gi")[0].childNodes[0].nodeValue;
                      c1=newRow.insertCell(-1);
                      c1.innerHTML=request.responseXML.getElementsByTagName("result")[0].childNodes[0].nodeValue;
                      var jobid = request.responseXML.getElementsByTagName("jobid")[0].childNodes[0].nodeValue;
                      c1.id=jobid;
                      c1.name="Blast";
                      if (c1.innerHTML == "No Blast Hits"){
				    c1.id="noshow";
                      }	
			    if (c1.innerHTML == "Server Down"){
				    c1.id="noshow";
                            errors++;
                      }	
	                c1.style.backgroundColor="#CEE7FF";
                      result.blast =request.responseXML.getElementsByTagName("result")[0].childNodes[0].nodeValue;
                      c1=newRow.insertCell(-1);
                      c1.innerHTML=request.responseXML.getElementsByTagName("result")[1].childNodes[0].nodeValue;
                      jobid = request.responseXML.getElementsByTagName("jobid")[1].childNodes[0].nodeValue;
                      c1.id=jobid;
                      c1.name="Interpro";
                      if (c1.innerHTML == "No Interpro Hits"){
				    c1.id="noshow";
                      }	
	                if (c1.innerHTML == "Server Down"){
				    c1.id="noshow";
                            errors++;
                      }	
                      c1.style.backgroundColor="#CEE7FF";
                      result.interpro =request.responseXML.getElementsByTagName("result")[1].childNodes[0].nodeValue;
                      c1=newRow.insertCell(-1);
                      c1.innerHTML=request.responseXML.getElementsByTagName("pfam")[0].childNodes[0].nodeValue;
                      if (c1.innerHTML == "No Pfam Hits"){
				    c1.id="noshow";
                      }
			    if (c1.innerHTML == "Server Down"){
				    c1.id="noshow";
                            errors++;
                      }	
	                c1.style.backgroundColor="#CEE7FF";
                      result.pfam= request.responseXML.getElementsByTagName("pfam")[0].childNodes[0].nodeValue;
                      c1=newRow.insertCell(-1);
                      var cog=request.responseXML.getElementsByTagName("cog")[0].childNodes[0].nodeValue;
                      if(cog == undefined){
	                      c1.innerHTML="Server Down";
                      }else{
	                      c1.innerHTML=cog;
			    }
                      if (c1.innerHTML == "Server Down"){
				    c1.id="noshow";
                            errors++;
                      }	
                      if (c1.innerHTML == "No Related Cog"){
				    c1.id="noshow";
                      }	
                      c1.style.backgroundColor="#CEE7FF";
                      result.cog=cog;
                      c1=newRow.insertCell(-1);
                      c1.innerHTML=request.responseXML.getElementsByTagName("time")[0].childNodes[0].nodeValue;
                      c1.style.backgroundColor="#CEE7FF";
                      c1.id="noshow";
			    //alert(document.getElementById('resultbdy').innerHTML);
			    Results.push(result);
 		          if (giQueue.length > 0) {
                                  //request=null;
           				fetchData();
		           }else{
                              document.getElementById('message').style.visibility = 'hidden'; 
                              document.json.json.value=Results.toJSONString();
                              //alert(document.json.json.value);
               			document.getElementById('result2').style.visibility = 'visible';
                              if (errors == 0){
	                              alert("Job Completed successfully!");
					}
					else{
      	                        alert("Job Completed but there were "+errors+" problem(s)!");
					}
					//alert(document.getElementById('resultbdy').innerHTML);
					//document.getElementById('result2').innerHTML='<div align="right"><input type="image" title="Generate PDF Report" src="pdf.gif" alt="Click to generate Results as PDF" border="0"></div>';
               
			     } 
         } else {
            alert("A problem occurred with communicating between the XMLHttpRequest object and the server program:"+request.statusText);
            cancelRequest();
	    return false;
        }
    }//end outer if
}

function handleError(){
	alert("A fatal network error occurred");
}
/* Initialize a Request object that is already constructed */
function initReq(reqType,url,bool){
    /* Specify the function that will handle the HTTP response */
    request.onreadystatechange=handleResponse;
    //request.onerror=handleError;
    request.open(reqType,url,bool);
    request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
    /* Only works in Mozilla-based browsers */
    //request.overrideMimeType("text/XML");
    request.send(queryString);
}

/* Wrapper function for constructing a Request object.
 Parameters:
  reqType: The HTTP request type such as GET or POST.
  url: The URL of the server program.
  asynch: Whether to send the request asynchronously or not. */
function httpRequest(reqType,url,asynch){
    //Mozilla-based browsers
    if(window.XMLHttpRequest){
        request = new XMLHttpRequest();
    } else if (window.ActiveXObject){
        request=new ActiveXObject("Msxml2.XMLHTTP");
        if (! request){
            request=new ActiveXObject("Microsoft.XMLHTTP");
        }
     }
    //the request could still be null if neither ActiveXObject
    //initializations succeeded
    if(request){
       initReq(reqType,url,asynch);
    }  else {
        alert("Your browser does not permit the use of all "+
        "of this application's features!");}
}
function setQueryString(){
    queryString="";
    var l=giQueue.length;
    //alert(l);
    if (l > 0){
	    if (getseq){
                  sequence=encodeURIComponent(giQueue.shift());
	    		queryString = "sequence=>"+sequence;
	    }
	    else{
                  gi=encodeURIComponent(giQueue.shift());
		    	queryString = "gi="+gi;
	    }
    }
    //alert(queryString);
}
function buildSeqArray(){
	if(document.fgtForm.sequence.value){
      	var t=document.fgtForm.sequence.value;
            seq=t.substring(1);
	     	getseq=true;
      	giQueue=seq.split(">");
	}
    	else{
      	seq=document.fgtForm.gis.value;
            //alert(seq);
            //seq.replace(/(\x0A\x0D|\x0d\x0a)/g,"\r\n");
            //seq.replace(/(\x0a)/g,"\n");
		//seq = seq.replace(/\n/g," ");
		seq = seq.replace(/\r\n/g,"\n");
	      giQueue=seq.split("\n");
            //giQueue=seq.split("\r\n");
      }
  	      //seq.replace("\r\n","");
            //alert(seq);
            //for(i=0;i<giQueue.length;i++){
            //alert(i);
		//alert(giQueue[i]);
            //}
            //giQueue[0]=seq;
 
}
