function saveCookie(name,value,minutes) {
	if (minutes) {
		if (minutes == -1) {
			var date = new Date();
			date.setFullYear(date.getFullYear() + 1);
			var expires = "; expires="+date.toGMTString();		
		}
		else {
			var date = new Date();
			date.setTime(date.getTime()+(minutes*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
	}
	else 
		expires = "";
		
	document.cookie = name+"="+escape(value)+expires+"; path=/";

}


function readCookie(name) {
	var name = name+"=";
	var ca = document.cookie.split(';');
	for(var i=0;i<ca.length;i++) {
	var c = ca[i];
	while (c.charAt(0)==' ') c = c.substring(1,c.length);
	if (c.indexOf(name) == 0)
		return unescape(c.substring(name.length,c.length));
	}
	return null;
}


function BrowseForFile(filedialog,txtbox) {
	var txtLocation = document.getElementById(txtbox);
	txtLocation.value = "";
	
	var browseObj = document.getElementById(filedialog);
	browseObj.click();
	txtLocation.value = browseObj.value;
}

function CheckFileDialog(filedialog) {
	var browseObj = document.getElementById(filedialog);
	if ((browseObj.value == "") || (browseObj.value == null))
		return false;
	else
		return true;
}


function CheckInputs(filedialog1, filedialog2) {

	var browseObj1 = document.getElementById(filedialog1);
	if ((browseObj1.value == "") || (browseObj1.value == null)) {
		alert("Missing Input Data (Database File)");
		return;
	}

	var browseObj2 = document.getElementById(filedialog2);
	if ((browseObj2.value == "") || (browseObj2.value == null)) {
		alert("Missing Input Data (Query File)");
		return;
	}	
	
	var dbfile = GetFileNameWithoutExtension(browseObj1.value); 
	var inpfile = GetFileNameWithoutExtension(browseObj2.value); 

	if (readCookie("format") == null) {
		fmtstr = "2";
	}
	else
		fmtstr = readCookie("format");	
		
	var format = parseInt(fmtstr);
	switch (format) 
	{
		case 1:
			fmt = "text";
			break;
		case 2:
			fmt = "m8";
			break;
		case 3:
			fmt = "m9";
			break;
	}	
	format = fmt;
	
	var outname = dbfile + "_" + inpfile + "_" + format + ".txt";
	
	var outfilename = document.getElementById("txtOutputName");
	outfilename.value = outname;
	//document.all.txtOutputName.value = outname;
}


function GetFileNameWithoutExtension(filename) 
{
	n = filename.indexOf(".");
	if (n > 0)
		filename = filename.substring(0,n);

	n = filename.lastIndexOf("\\");
	if (n > 0)
		filename = filename.substring(n+1);
		
	return filename;
}

function GetFileNameWithoutExtensionFirstDot(filename) 
{
	filnam = "";

	n1 = filename.indexOf(".");
	n2 = filename.lastIndexOf("\\");
	
	if ((n1 > 0) && (n2 > 0)) 
	{
		size = n1 - n2 - 1;
		filnam = filename.substring(n2+1,size);
	}

	return filnam;

}

function GetFileName(filename) 
{
	n = filename.lastIndexOf("\\");
	if (n > 0)
		filename = filename.substring(n+1);
	return filename;
}

function GetDirectoryName(filename)
{
	n = filename.lastIndexOf("\\");
	if (n > 0)
		filename = filename.substring(0,n);

	return filename;
}


function UpdateTextboxes()
{
	var ctrl01 = document.getElementById("txtDbDialogText");
	var ctrl02 = document.getElementById("txtFileDialogText");
	var ctrl03 = document.getElementById("txtOutputName");
	
	var ctrl1 = document.getElementById("DbDialog");
	var ctrl2 = document.getElementById("FileDialog");
	var ctrl3 = document.getElementById("txtOutputName");
	
	var ctrl11 = document.getElementById("txtDbDialog");
	var ctrl12 = document.getElementById("txtFileDialog");
	var ctrl13 = document.getElementById("txtOutputFile");	

	if (ctrl1.value != "")
		ctrl11.value = ctrl1.value;
	else
		ctrl11.value = ctrl01.value;
	
	if (ctrl2.value != "")
		ctrl12.value = ctrl2.value;
	else
		ctrl12.value = ctrl02.value;
				
	if (ctrl3.value != "")
		ctrl13.value = ctrl3.value;
	else
		ctrl13.value = ctrl03.value;
		
	var prg = parseInt(document.getElementById("blprograms"));
	var fmt = parseInt(document.getElementById("blformats"));
	
	var txtprg = document.getElementById("txtProgram");
	var txtfmt = document.getElementById("txtFormat");
	
	switch (prg) 
	{
		case 1:
			txtprg.value = "blastn";
			break;
		case 2:
			txtprg.value = "blastp";
			break;
		case 3:
			txtprg.value = "blastx";
			break;
		case 4:
			txtprg.value = "tblastn";
			break;
		case 5:
			txtprg.value = "tblastx";
			break;
	}
	
	switch (fmt) 
	{
		case 1:
			txtfmt.value = "text";
			break;
		case 2:
			txtfmt.value = "m8";
			break;
		case 3:
			txtfmt.value = "m9";
			break;
	}	
	
	alert("txtprg.value= "+txtprg.value+"  txtfmt.value= "+txtfmt.value);
	//location.href = "bbufj.aspx?ManualRefresh=true";
	
	return true;
}


function UpdateComboValues()
{
	var ctrl1 = document.getElementById("blprograms");
	var ctrl2 = document.getElementById("blformats");
	
	var ctrl11 = document.getElementById("txtProgram");
	var ctrl12 = document.getElementById("txtFormat");
	
	ctrl11.value = ctrl1.value;
	ctrl12.value = ctrl2.value;

	return true;
}

function FillTextboxes()
{
	var ctrl1 = document.getElementById("txtDbDialogText");
	var ctrl2 = document.getElementById("txtFileDialogText");
	var ctrl3 = document.getElementById("txtOutputName");
	
	var ctrl11 = document.getElementById("txtDbDialog");
	var ctrl12 = document.getElementById("txtFileDialog");
	var ctrl13 = document.getElementById("txtOutputFile");	
	
	ctrl1.value = ctrl11.value;
	ctrl2.value = ctrl12.value;
	ctrl3.value = ctrl13.value;
	
	//location.href = "bbufj.aspx?ManualRefresh=true";
	
	return true;
}


function CreateCombos() 
{
	CreateProgramCombo();
	CreateFormatCombo();
}

function CreateProgramCombo()
{
	var prog = readCookie("program");
	txt = "<select id='blprogs' onchange='selectProgram()'>";
	if (prog == 1)
		txt += "<option  value='1' selected>Blastn (nucleotide query-nucleotide db)</option>";
	else
		txt += "<option  value='1'>Blastn (nucleotide query-nucleotide db)</option>";
	if (prog == 2)
		txt += "<option  value='2' selected>Blastp (protein query-protein db)</option>";
	else
		txt += "<option  value='2'>Blastp (protein query-protein db)</option>";
	if (prog == 3)
		txt += "<option  value='3' selected>Blastx (translated query-protein db</option>";
	else
		txt += "<option  value='3'>Blastx (translated query-protein db</option>";
	if (prog == 4)
		txt += "<option  value='4' selected>Tblastn (protein query-translated db)</option>";
	else
		txt += "<option  value='4'>Tblastn (protein query-translated db)</option>";
	if (prog == 5)
		txt += "<option  value='5' selected>Tblastx (translated query-translated db)</option>";
	else
		txt += "<option  value='5'>Tblastx (translated query-translated db)</option>";
	txt += "</select>";
	
	document.all.programs.innerHTML = txt;
	
}

function CreateFormatCombo()
{
	var fmt = readCookie("format");
	txt = "<select id='blformats' onchange='selectFormat()'>";
	if (fmt == 1)
		txt += "<option  value='1' selected>Default (text))</option>";
	else
		txt += "<option  value='1'>Default (text)</option>";
	if (fmt == 2)
		txt += "<option  value='2' selected>m8 (csv, no headers)</option>";
	else
		txt += "<option  value='2'>m8 (csv, no headers)</option>";
	if (fmt == 3)
		txt += "<option  value='3' selected>m9 (csv, with headers)</option>";
	else
		txt += "<option  value='3'>m9 (csv, with headers)</option>";
	txt += "</select>";
	
	document.all.formats.innerHTML = txt;
}

function selectProgram() {

	var blprog = document.getElementById("blprogs").value;
	saveCookie("program",blprog,10);

}

function selectFormat() {

	var blformat = document.getElementById("blformats").value;
	saveCookie("format",blformat,10);
	
}


function parseQueryString(queryString) {
  var queryObject = new Object();
  queryString = queryString.replace(/^.*\?(.+)$/,'$1');

  while ((pair = queryString.match(/([^=]+)=\'?([^\&\']*)\'?\&?/)) && pair[0].length) {
    queryString = queryString.substring( pair[0].length );

    if (/^\-?\d+$/.test(pair[2])) pair[2] = parseInt(pair[2]);
    queryObject[pair[1]] = pair[2];
  }

  return queryObject;
}



function BuildBatchFile() 
{
	var queryObj = parseQueryString( location.search );
	var mode = queryObj.mode;

	var ff = (mode == "ff");
				
	var dbname = document.getElementById("txtDbDialogText").value;
	var inpfile = document.getElementById("txtFileDialogText").value;
	var outfile = document.getElementById("txtOutputName").value;
	var prg = parseInt(document.getElementById("blprogs").value);
	var fmt = parseInt(document.getElementById("blformats").value);
	
	var txtprg = document.getElementById("txtProgram");
	var txtfmt = document.getElementById("txtFormat");	
	
	saveCookie("program",txtprg.value,10);
	saveCookie("format",txtfmt.value,10);
	saveCookie("dbname",dbname,10);
	saveCookie("inpfile",inpfile,10);
	saveCookie("outfile",outfile,10);

	switch (prg) 
	{
		case 1:
			txtprg.value = "blastn";
			break;
		case 2:
			txtprg.value = "blastp";
			break;
		case 3:
			txtprg.value = "blastx";
			break;
		case 4:
			txtprg.value = "tblastn";
			break;
		case 5:
			txtprg.value = "tblastx";
			break;
	}
	var prog = txtprg.value;
	
	switch (fmt) 
	{
		case 1:
			txtfmt.value = "text";
			break;
		case 2:
			txtfmt.value = "m8";
			break;
		case 3:
			txtfmt.value = "m9";
			break;
	}	
	var format = txtfmt.value;

	var command = "";
	var dir = GetDirectoryName(dbname);
	var drive = dir.substring(0,2);

	var dbfile = GetFileName(dbname);
	n = dbfile.indexOf(".n")
	if (n > 0)
		dbfile = dbfile.substring(0,n);
	dbname = GetFileNameWithoutExtension(dbname);

	command += drive + "\n";
	command += "CD " + dir + "\n";

	if (ff) 
	{
		if (prog == "blastp")
			command += "formatdb -i " + dbfile + " -p T -o T "  + "\n";
		else 
			command += "formatdb -i " + dbfile + " -p F -o T " + "\n";
	}

	if (ff)
		command += "blastall -p " + prog + " -d " + dbfile + " -i ";
	else
		command += "blastall -p " + prog + " -d " + dbname + " -i ";
	command += inpfile;

	if (format == "text")
		command += " -o " + outfile + "\n";
	else
		command += " -o " + outfile + " -" + format + "\n";

	var outstr = document.getElementById("txtOutString");
	outstr.value = command;
	
	UpdateServerVars();
	
}

function UpdateServerVars() 
{
	var outstr = document.getElementById("txtOutString");
	var outstrsrv = document.getElementById("txtOutStringSrv");
	var outfile = document.getElementById("txtOutputName");
	var outfilsrv = document.getElementById("txtOutputFile");
	
	outstrsrv.value = outstr.value;
	outfilsrv.value = outfile.value;
	
	saveCookie("outstr",outstr.value,10);
	//saveCookie("outfile",outfile.value,10);
	
	return true;
}

function UpdateClientVars()
{
	var dbname = document.getElementById("txtDbDialogText");
	var inpfile = document.getElementById("txtFileDialogText");
	var outfile = document.getElementById("txtOutputName");	
	var program = document.getElementById("txtProgram");
	var format = document.getElementById("txtFormat");	
	var outstr = document.getElementById("txtOutString");

	if (readCookie("dbname") == null)
		dbname.value = ""
	else
		dbname.value = readCookie("dbname");
		
	if (readCookie("inpfile") == null)
		inpfile.value = ""
	else
		inpfile.value = readCookie("inpfile");
		
	if (readCookie("outfile") == null)
		outfile.value = ""
	else
		outfile.value = readCookie("outfile");
						
	if (readCookie("outstr") == null)
		outstr.value = ""
	else
		outstr.value = readCookie("outstr");
	
	if (readCookie("program") == null) {
		saveCookie("program","1",10);
		program.value = "1";
	}
	else
		program.value = readCookie("program");
		
	if (readCookie("format") == null) {
		saveCookie("format","2",10);
		format.value = "2";
	}
	else
		format.value = readCookie("format");	
		
	CreateCombos();	

}

/*
function ShowQuickStart() 
{
	var content;
	var txt;
	
	content = "<u>After entering a query string (e.g. <b>555</b>) in the textbox below:</u>";
	content += "<ul>";
	content += "<li>Select a Blast program (leave default for the <b>555</b> example)";
	content += "<li>Click the <b>Submit</b> button";
	content += "<li>Query processing will start. This may take several minutes.";
	content += "<li>When processing is complete, a message will be displayed and the two <b>Hit-Table</b> buttons below will be enabled."; 
	content += "<li>Click one of the <b>Hit-Table</b> buttons.";
	content += "</ul>";		
	
	txt = "this.T_SHADOWWIDTH=3;this.T_PADDING=4;";
	txt+= "return escape('" + content + "')"

	txt = "return escape('Some Text')";
	return txt;
	
}
*/





