// (C) Copyright IBM Corp. 2001 - 2002 All Rights Reserved.
//
// rowcol.js
//
// last upload: ??? ??, ????
// last update: Mar 12, 2002 (Feb 20, 2002)

function checkConsecutiveFASTADescriptions(form)
{
var lines;
var linecount;

var c_1;

if ( form.sequences.value.indexOf('\n') >= 0 ) {
    lines = form.sequences.value.split('\n');
  }
else {
    lines = form.sequences.value.split('\r');
  }

linecount = lines.length;

for (c_1 = 0; c_1 < linecount-2; c_1++)
	{
        
if ((lines[c_1].charAt(0) == ">") && (lines[c_1 + 1].charAt(0) == ">"))
                {
                return false;
                }
        }

return true;
}

function checkConsecutiveGiMarkerFASTADescriptions(form)
{
var lines;
var linecount;

var c_1;

if (form.markers.value.indexOf('\n') >= 0 ) {
    lines = form.markers.value.split('\n');
  }
else {
    lines = form.markers.value.split('\r');
  }

linecount = lines.length;

for (c_1 = 0; c_1 < linecount; c_1++)
	{
	if ((lines[c_1].charAt(0) == ">") && (lines[c_1 + 1].charAt(0) == ">"))
		{
		return false;
		}
	}

return true;
}

function countNumbFASTADataSets(form)
{
// this version accepts multiple line data sets!

var lines;

var c_1;

var answer = 0;
var fastacount = 0;

var linecount;

var length = form.sequences.value.length;

if (form.sequences.value.indexOf('\n') >= 0 ) {
    lines = form.sequences.value.split('\n');
  }
  else {
    lines = form.sequences.value.split('\r');
  }

linecount = lines.length;

if (checkDiagnose()) alert("original linecount = " + linecount);

for (c_1 = (linecount-1); c_1 > -1; c_1--)
	{
	if (lines[c_1].charAt(0) == '>')
		{
		c_1++;

		break;	
		}
	}

if (checkDiagnose()) alert("after the increment c_1 = " + c_1);

while (c_1 < linecount)
	{
	if (lines[c_1].length == 0)
		{
		if (checkDiagnose()) alert("Line length == 0 when c_1 (lineindex) = " + c_1);
		if (checkDiagnose()) alert('Last char in prev line: "' + lines[c_1-1].charAt(lines[c_1-1].length-1) + '"');

		if ((lines[c_1-1].charAt(lines[c_1-1].length-1) == '\r') || (lines[c_1-1].charAt(lines[c_1-1].length-1) == '\n'))
			{
			if (checkDiagnose()) alert("1: blank line error when c_1 (lineindex) = " + c_1);
			alert("The line after the last FASTA label is blank");

			return -1;
			}
		}
	else if ((lines[c_1].charAt(0) == '\n') || (lines[c_1].charAt(0) == '\r'))
		{
		if (checkDiagnose()) alert("2: Blank line error when c_1 (lineindex) = " + c_1);
		alert("The line after the last FASTA label is blank");

		return -1;
		}
	else	{
		if (checkDiagnose()) alert("The line after the last label is > 0 and not a newline");

		break;
		}

	c_1++;
	}

if (checkDiagnose()) alert("modified linecount = " + linecount);

if (lines[linecount-1].charAt(0) == '>')
	{
	alert("The last line is a FASTA label which lacks a data set");

	return -1;
	}

if (form.sequences.value.charAt(0) == ">")
	{
	fastacount = 1;
	}
else    {
	if (checkDiagnose()) alert('First sequence character is NOT a ">"');

	return -1;
	}

c_1 = -1;

while (c_1 < eval(length-2))
	{
	// ** the "\n>" combination indicates the end of a data line and the beginning of a label line

	c_1 = form.sequences.value.indexOf("\n>", c_1 + 1);

	if (c_1 > 0)
		{
		fastacount++;
		}
	else	{
		c_1 = length;
		}
	}

if (checkDiagnose()) alert('The number of FASTA labels: ' + fastacount);

return fastacount;
}

function originalcountNumbFASTADataSets(form)
{
// this version does not understand multiple line data sets

var lines;

var c_1;

var answer = 0;
var fastacount = 0;

var linecount;

var length = form.sequences.value.length;

if ( form.sequences.value.indexOf( '\n' ) >= 0 ) {
    lines = form.sequences.value.split( '\n' );
  }
  else {
    lines = form.sequences.value.split( '\r' );
  }

linecount = lines.length;

for (c_1 = (length-1); c_1 > -1; c_1--)
	{
	if (form.sequences.value.charAt(c_1) == "\n")
		{
		linecount--;
		}

	if (form.sequences.value.charAt(eval(c_1 - 1)) != "\n")
		{
		c_1 = -1;
		}
	}

if (form.sequences.value.charAt(0) == ">")
	{
	fastacount++;
	}
else	{
	return -1;
	}

c_1 = -1;

while (c_1 < eval(length-2))
	{
	c_1 = form.sequences.value.indexOf("\n>", c_1 + 1);

	if (c_1 > 0)
		{
		fastacount++;
		}
	else	{
		c_1 = length;
		}
	}

if (linecount == eval(2*fastacount))
	{
	return fastacount;
	}
else	{
	return -1;
	}
}

function countIntegerDataSets(form)
{
// this assumes an empty line flanked by lines of numbers is a valid data set

var c_1 = -1;
var answer = 0;

var length = form.sequences.value.length;

while (c_1 < length)
	{
	c_1 = form.sequences.value.indexOf("\n", c_1 + 1);

	if   (c_1 > 0)
		{
		answer++;
		}
	else (c_1 = length)
	}

for (c_1 = (length-1); c_1 > -1; c_1--)
	{
	if (form.sequences.value.charAt(c_1) == "\n")
		{
		answer--;
		}

	if (form.sequences.value.charAt(eval(c_1 - 1)) != "\n")
		{
		c_1 = -1;
		}
	}

return ++answer;
}
